This commit is contained in:
Ivan Diaz 2017-06-17 22:17:50 -03:00
commit 91fe65fa24
39 changed files with 4001 additions and 51 deletions

View File

@ -93,6 +93,8 @@ class InstallLayout extends React.Component {
return 4;
} else if(_.includes(pathname, 'step-6')) {
return 5;
} else if(_.includes(pathname, 'step-7')) {
return 6;
}
}
}

View File

@ -30,16 +30,19 @@ class InstallStep5Settings extends React.Component {
{this.renderMessage()}
<Form loading={this.state.loading} onSubmit={this.onSubmit.bind(this)} value={this.state.form} onChange={(form) => this.setState({form})}>
<FormField name="title" label={i18n('TITLE')} fieldProps={{size: 'large'}} required/>
<FormField name="allow-attachments" label={i18n('ALLOW_FILE_ATTACHMENTS')} fieldProps={{size: 'large'}}/>
<FormField className="install-step-5__attachments-field" name="allow-attachments" label={i18n('ALLOW_FILE_ATTACHMENTS')} field="checkbox" fieldProps={{size: 'large'}}/>
<FormField name="no-reply-email" label={i18n('NOREPLY_EMAIL')} fieldProps={{size: 'large'}}/>
<FormField name="smtp-host" label={i18n('SMTP_SERVER')} fieldProps={{size: 'large'}}/>
<FormField name="smtp-port" label={i18n('PORT')} fieldProps={{size: 'small'}}/>
<FormField name="smtp-user" label={i18n('SMTP_USER')} fieldProps={{size: 'large'}}/>
<FormField name="smtp-password" label={i18n('SMTP_PASSWORD')} fieldProps={{size: 'large', password: true}}/>
<Button className="install-step-5__test-connection" size="medium" onClick={this.onTestSMTPClick.bind(this)}>
{i18n('TEST_SMTP_CONNECTION')}
</Button>
{this.renderMessageSMTP()}
<div className="install-step-5__smtp-block">
<Header title={i18n('SMTP_SERVER')} description={i18n('SMTP_SERVER_DESCRIPTION')} />
<FormField name="smtp-host" label={i18n('SMTP_SERVER')} fieldProps={{size: 'large'}}/>
<FormField name="smtp-port" label={i18n('PORT')} fieldProps={{size: 'small'}}/>
<FormField name="smtp-user" label={i18n('SMTP_USER')} fieldProps={{size: 'large'}}/>
<FormField name="smtp-password" label={i18n('SMTP_PASSWORD')} fieldProps={{size: 'large', password: true}}/>
<Button className="install-step-5__test-connection" size="medium" onClick={this.onTestSMTPClick.bind(this)}>
{i18n('TEST_SMTP_CONNECTION')}
</Button>
{this.renderMessageSMTP()}
</div>
<div className="install-step-5__buttons">
<SubmitButton className="install-step-5__next" size="medium" type="secondary">{i18n('NEXT')}</SubmitButton>
<Button className="install-step-5__previous" size="medium" onClick={this.onPreviousClick.bind(this)}>{i18n('PREVIOUS')}</Button>

View File

@ -12,4 +12,23 @@
margin-left: 230px;
min-width: 70px;
}
&__smtp-block {
text-align: center;
background-color: $very-light-grey;
padding: 30px;
margin-bottom: 30px;
.header__title {
font-size: $font-size--md;
}
}
&__attachments-field {
margin-bottom: 15px;
}
&__smtp-message {
margin-top: 30px;
}
}

View File

@ -28,7 +28,7 @@ class InstallStep6Admin extends React.Component {
<FormField name="email" validation="EMAIL" label={i18n('ADMIN_EMAIL')} fieldProps={{size: 'large'}} required/>
<FormField name="password" validation="PASSWORD" label={i18n('ADMIN_PASSWORD')} infoMessage={i18n('ADMIN_PASSWORD_DESCRIPTION')} fieldProps={{size: 'large', autoComplete: 'off'}} required/>
<div className="install-step-6__buttons">
<SubmitButton className="install-step-5__next" size="medium" type="secondary">{i18n('NEXT')}</SubmitButton>
<SubmitButton className="install-step-6__next" size="medium" type="secondary">{i18n('NEXT')}</SubmitButton>
</div>
</Form>
</div>

View File

@ -285,6 +285,7 @@ export default {
'EDIT_PROFILE_VIEW_DESCRIPTION': '在這裡,您可以通過更改電子郵件或密碼來修改用戶。',
'ENABLE_USER_SYSTEM_DESCRIPTION': '啟用/禁用用戶系統的使用。如果你禁用它,所有的用戶將被刪除,但票將被保留。如果啟用,將創建現有票證的用戶。',
'CSV_DESCRIPTION': 'CSV文件必須有3列電子郵件密碼名稱。行數沒有限制。它將在文件中的每行中創建一個用戶。',
'SMTP_SERVER_DESCRIPTION': 'SMTP服务器允许应用程序发送邮件。 如果您没有配置OpenSupports将不会发送任何电子邮件。',
//ERRORS
'EMAIL_OR_PASSWORD': '電子郵件或密碼無效',
@ -355,6 +356,10 @@ export default {
'LEFT_EMPTY_DATABASE': '留空为自动创建数据库',
'REMEMBER_ME': '记住我',
'EMAIL_LOWERCASE': '电子邮件',
'PASSWORD_LOWERCASE': '密码'
'PASSWORD_LOWERCASE': '密码',
'SYSTEM_SETTINGS': '系统设置',
'TEST_SMTP_CONNECTION': '测试SMTP连接',
'SMTP_CONNECTION_SUCCESS': 'SMTP凭据有效',
'SMTP_CONNECTION_ERROR': '无法连接到SMTP服务器'
};

View File

@ -285,6 +285,7 @@ export default {
'EDIT_PROFILE_VIEW_DESCRIPTION': 'Hier können Sie Ihren Benutzer bearbeiten, indem Sie Ihre E-Mail oder Ihr Passwort ändern.',
'ENABLE_USER_SYSTEM_DESCRIPTION': 'Aktivieren / deaktivieren Sie die Verwendung eines Benutzersystems. Wenn du es deaktivierst, werden alle Benutzer gelöscht, aber die Tickets werden gehalten. Wenn Sie es aktivieren, werden die Benutzer der vorhandenen Tickets erstellt.',
'CSV_DESCRIPTION': 'Die CSV-Datei muss 3 Spalten haben: E-Mail, Passwort, Name. Es gibt kein Limit in Zeilenzahl. Es wird ein Benutzer pro Zeile in der Datei erstellt.',
'SMTP_SERVER_DESCRIPTION': 'Die Konfiguration des SMTP-Servers ermöglicht es der Software, Mails zu senden. Wenn Sie es nicht konfigurieren, werden keine E-Mails von OpenSupports gesendet.',
//ERRORS
'EMAIL_OR_PASSWORD': 'E-Mail oder Passwort ungültig',
@ -355,5 +356,9 @@ export default {
'LEFT_EMPTY_DATABASE': 'Leer leer für die automatische Datenbankerstellung',
'REMEMBER_ME': 'Merken',
'EMAIL_LOWERCASE': 'Email',
'PASSWORD_LOWERCASE': 'Passwort'
'PASSWORD_LOWERCASE': 'Passwort',
'SYSTEM_SETTINGS': 'System settings',
'TEST_SMTP_CONNECTION': 'SMTP-Verbindung testen',
'SMTP_CONNECTION_SUCCESS': 'SMTP-Anmeldeinformationen sind gültig.',
'SMTP_CONNECTION_ERROR': 'Kann keine Verbindung zum SMTP-Server herstellen.'
};

View File

@ -286,6 +286,7 @@ export default {
'EDIT_PROFILE_VIEW_DESCRIPTION': 'Here you can edit your user by changing your email or your password.',
'ENABLE_USER_SYSTEM_DESCRIPTION': 'Enable/disable the use of an user system. If you disable it, all users will be deleted but the tickets will be kept. If you enable it, the users of existent tickets will be created.',
'CSV_DESCRIPTION': 'The CSV file must have 3 columns: email, password, name. There is no limit in row count. It will be created one user per row in the file.',
'SMTP_SERVER_DESCRIPTION': 'The configuration of the SMTP server allows the application to send mails. If you do not configure it, no emails will be sent by OpenSupports.',
//ERRORS
'EMAIL_OR_PASSWORD': 'Email or password invalid',

View File

@ -285,6 +285,7 @@ export default {
'EDIT_PROFILE_VIEW_DESCRIPTION': 'Aquí puedes editar tu usuario cambiando tu correo electrónico o tu contraseña.',
'ENABLE_USER_SYSTEM_DESCRIPTION': 'Habilitar/Deshabilitar el uso de un sistema de usuario. Si lo deshabilitas, todos los usuarios serán eliminados pero los tickets serán guardados. Si lo habilitas, se crearán los usuarios de los tickets existentes.',
'CSV_DESCRIPTION': 'El archivo CSV debe tener 3 columnas: correo electrónico, contraseña, nombre. No hay límite en el recuento de filas. Se creará un usuario por fila en el archivo.',
'SMTP_SERVER_DESCRIPTION': 'La configuracion de SMTP permite que la applicacion mande emails. Si no es configurado, ningún mail sera enviado OpenSupports.',
//ERRORS
'EMAIL_OR_PASSWORD': 'Email o contraseña inválida',
@ -355,5 +356,8 @@ export default {
'LEFT_EMPTY_DATABASE': 'Dejar vacío para la creación automática de bases de datos',
'REMEMBER_ME': 'Recordarme',
'EMAIL_LOWERCASE': 'email',
'PASSWORD_LOWERCASE': 'contraseña'
'PASSWORD_LOWERCASE': 'contraseña',
'TEST_SMTP_CONNECTION': 'Probar conexion de SMTP',
'SMTP_CONNECTION_SUCCESS': 'La credenciales de SMTP son correctas.',
'SMTP_CONNECTION_ERROR': 'No es posible conectarse al servidor de SMTP.'
};

View File

@ -285,6 +285,7 @@ export default {
'EDIT_PROFILE_VIEW_DESCRIPTION': 'Ici, vous pouvez modifier votre utilisateur en changeant votre adresse e-mail ou votre mot de passe.',
'ENABLE_USER_SYSTEM_DESCRIPTION': 'Activer / désactiver l\'utilisation d\'un système utilisateur. Si vous le désactivez, tous les utilisateurs seront supprimés, mais les tickets seront conservés. Si vous l\'activez, les utilisateurs des tickets existants seront créés.',
'CSV_DESCRIPTION': 'Le fichier CSV doit comporter 3 colonnes: email, mot de passe, nom. Il n\'y a pas de limite dans le nombre de lignes. Il sera créé un utilisateur par ligne dans le fichier.',
'SMTP_SERVER_DESCRIPTION': 'La configuration du serveur SMTP permet à l\'application d\'envoyer des mails. Si vous ne le configurez pas, aucun service d\'email ne sera envoyé par OpenSupports.',
//ERRORS
'EMAIL_OR_PASSWORD': 'E-mail ou mot de passe invalide',
@ -355,5 +356,8 @@ export default {
'LEFT_EMPTY_DATABASE': 'Laisser vide pour la création automatique de la base de données',
'REMEMBER_ME': 'Se souvenir de moi',
'EMAIL_LOWERCASE': 'email',
'PASSWORD_LOWERCASE': 'mot de passe'
'PASSWORD_LOWERCASE': 'mot de passe',
'TEST_SMTP_CONNECTION': 'Test de connexion SMTP',
'SMTP_CONNECTION_SUCCESS': 'Les informations d\'identification SMTP sont valides.',
'SMTP_CONNECTION_ERROR': 'Ne peut pas se connecter au serveur SMTP.'
};

View File

@ -285,6 +285,7 @@ export default {
'EDIT_PROFILE_VIEW_DESCRIPTION': 'यहां आप अपना ईमेल या अपना पासवर्ड बदलकर अपना उपयोगकर्ता संपादित कर सकते हैं।',
'ENABLE_USER_SYSTEM_DESCRIPTION': 'किसी उपयोगकर्ता सिस्टम के उपयोग को सक्षम / अक्षम करें यदि आप इसे अक्षम करते हैं, तो सभी उपयोगकर्ताओं को हटा दिया जाएगा लेकिन टिकट को रखा जाएगा। यदि आप इसे सक्षम करते हैं, तो विद्यमान टिकट के उपयोगकर्ता बनाए जाएंगे',
'CSV_DESCRIPTION': 'सीएसवी फ़ाइल में 3 कॉलम होना चाहिए: ईमेल, पासवर्ड, नाम। पंक्ति गणना में कोई सीमा नहीं है फ़ाइल में प्रति पंक्ति एक उपयोगकर्ता बनाया जाएगा।',
'SMTP_SERVER_DESCRIPTION': 'एसएमटीपी सर्वर का कॉन्फ़िगरेशन एप्लिकेशन को मेल भेजने की अनुमति देता है। यदि आप इसे कॉन्फ़िगर नहीं करते हैं, तो OpenSupports द्वारा कोई ईमेल नहीं भेजा जाएगा।',
//ERRORS
'EMAIL_OR_PASSWORD': 'ईमेल या पासवर्ड अमान्य',
@ -355,5 +356,8 @@ export default {
'LEFT_EMPTY_DATABASE': 'स्वचालित डेटाबेस निर्माण के लिए खाली छोड़ दिया',
'REMEMBER_ME': 'मुझे याद रखना',
'EMAIL_LOWERCASE': 'ईमेल',
'PASSWORD_LOWERCASE': 'पासवर्ड'
'PASSWORD_LOWERCASE': 'पासवर्ड',
'TEST_SMTP_CONNECTION': 'परीक्षण एसएमटीपी कनेक्शन',
'SMTP_CONNECTION_SUCCESS': 'SMTP क्रेडेंशियल्स मान्य हं।',
'SMTP_CONNECTION_ERROR': 'एसएमटीपी सर्वर से कनेक्ट नहीं हो सकता'
};

View File

@ -285,6 +285,7 @@ export default {
'EDIT_PROFILE_VIEW_DESCRIPTION': 'ここでは、電子メールまたはパスワードを変更してユーザーを編集できます。',
'ENABLE_USER_SYSTEM_DESCRIPTION': 'ユーザシステムの使用を有効/無効にします。無効にすると、すべてのユーザーは削除されますが、チケットは保持されます。これを有効にすると、既存のチケットのユーザーが作成されます。',
'CSV_DESCRIPTION': 'CSVファイルには、電子メール、パスワード、名前の3つの列が必要です。行数に制限はありません。ファイル内で行ごとに1人ずつ作成されます',
'SMTP_SERVER_DESCRIPTION': 'SMTPサーバーの設定により、アプリケーションはメールを送信できます。 これを設定しないと、OpenSupportsから電子メールは送信されません。',
//ERRORS
'EMAIL_OR_PASSWORD': '電子メールまたはパスワードが無効です',
@ -355,6 +356,9 @@ export default {
'LEFT_EMPTY_DATABASE': '自動データベース作成のために空のままにする',
'REMEMBER_ME': '覚えている',
'EMAIL_LOWERCASE': 'Eメール',
'PASSWORD_LOWERCASE': 'パスワード'
'PASSWORD_LOWERCASE': 'パスワード',
'TEST_SMTP_CONNECTION': 'SMTP接続をテストする',
'SMTP_CONNECTION_SUCCESS': 'SMTP資格情報が有効です。',
'SMTP_CONNECTION_ERROR': 'SMTPサーバーに接続できません。'
};

View File

@ -285,6 +285,7 @@ export default {
'EDIT_PROFILE_VIEW_DESCRIPTION': 'Aqui você pode editar seu usuário alterando seu e-mail ou sua senha.',
'ENABLE_USER_SYSTEM_DESCRIPTION': 'Ativar / desativar o uso de um sistema de usuário. Se você desativá-lo, todos os usuários serão excluídos, mas os ingressos serão mantidos. Se você ativá-lo, os usuários de tickets existentes serão criados.',
'CSV_DESCRIPTION': 'O arquivo CSV deve ter 3 colunas: e-mail, senha, nome. Não há limite na contagem de linhas. Ele será criado um usuário por linha no arquivo.',
'SMTP_SERVER_DESCRIPTION': 'A configuração do servidor SMTP permite que o aplicativo envie e-mails. Se você não configurá-lo, nenhum e-mail será enviado pela OpenSupports.',
//ERRORS
'EMAIL_OR_PASSWORD': 'E-mail ou senha inválidos',
@ -355,5 +356,8 @@ export default {
'LEFT_EMPTY_DATABASE': 'Esquerda vazia para criação automática de banco de dados',
'REMEMBER_ME': 'Lembrar',
'EMAIL_LOWERCASE': 'email',
'PASSWORD_LOWERCASE': 'senha'
'PASSWORD_LOWERCASE': 'senha',
'TEST_SMTP_CONNECTION': 'Testar conexão SMTP',
'SMTP_CONNECTION_SUCCESS': 'As credenciais SMTP são válidas.',
'SMTP_CONNECTION_ERROR': 'Não pode se conectar ao servidor SMTP.'
};

View File

@ -285,6 +285,7 @@ export default {
'EDIT_PROFILE_VIEW_DESCRIPTION': 'Здесь вы можете изменить своего пользователя, изменив свой адрес электронной почты или пароль.',
'ENABLE_USER_SYSTEM_DESCRIPTION': 'Включить / отключить использование пользовательской системы. Если вы отключите его, все пользователи будут удалены. Если вы включите его, будут созданы пользователи существующих билетов.',
'CSV_DESCRIPTION': 'Файл CSV должен иметь 3 столбца: адрес электронной почты, пароль и имя. Количество строк не ограничено. В файле будет создан один пользователь для каждой строки.',
'SMTP_SERVER_DESCRIPTION': 'Конфигурация SMTP-сервера позволяет приложению отправлять письма. Если вы не настроите его, никакие электронные письма не будут отправлены OpenSupports.',
//ERRORS
'EMAIL_OR_PASSWORD': 'электронной почты или пароль недействительный',
@ -355,5 +356,8 @@ export default {
'LEFT_EMPTY_DATABASE': 'Пусто для автоматического создания базы данных',
'REMEMBER_ME': 'Запомнить',
'EMAIL_LOWERCASE': 'Эл. адрес',
'PASSWORD_LOWERCASE': 'пароль'
'PASSWORD_LOWERCASE': 'пароль',
'TEST_SMTP_CONNECTION': 'Тестирование SMTP-соединения',
'SMTP_CONNECTION_SUCCESS': 'Учетные данные SMTP действительны.',
'SMTP_CONNECTION_ERROR': 'Не удается подключиться к SMTP-серверу.'
};

View File

@ -285,6 +285,7 @@ export default {
'EDIT_PROFILE_VIEW_DESCRIPTION': 'Burada e-postanızı veya şifrenizi değiştirerek kullanıcıyı düzenleyebilirsiniz.',
'ENABLE_USER_SYSTEM_DESCRIPTION': 'Bir kullanıcı sisteminin kullanımını etkinleştirir / devre dışı bırakır. Devre dışı bırakırsanız, tüm kullanıcılar silinir ancak biletler muhafaza edilir. Etkinleştirirseniz, mevcut biletler kullanıcıları oluşturulur.',
'CSV_DESCRIPTION': 'CSV dosyasının 3 sütun olması gerekir: e-posta, şifre, ad. Satır sayısı sınırı yoktur. Dosya satır başına bir kullanıcı oluşturulur.',
'SMTP_SERVER_DESCRIPTION': 'SMTP sunucusunun yapılandırması, uygulamanın postalar göndermesine izin verir. Onu yapılandırmazsanız, OpenSupports tarafından hiçbir e-posta gönderilmeyecektir',
//ERRORS
'EMAIL_OR_PASSWORD': 'E-posta veya şifre geçersiz',
@ -355,5 +356,8 @@ export default {
'LEFT_EMPTY_DATABASE': 'Otomatik veritabanı oluşturulması için boş bırakıldı',
'REMEMBER_ME': 'Hatırlamak',
'EMAIL_LOWERCASE': 'e-posta',
'PASSWORD_LOWERCASE': 'parola'
'PASSWORD_LOWERCASE': 'parola',
'TEST_SMTP_CONNECTION': 'SMTP bağlantısını test et',
'SMTP_CONNECTION_SUCCESS': 'SMTP kimlik bilgileri geçerlidir.',
'SMTP_CONNECTION_ERROR': 'SMTP sunucusuna bağlanılamıyor.'
};

View File

@ -52,7 +52,7 @@ class ConfigReducer extends Reducer {
onUserSystemSettingsChange(state, payload) {
return _.extend({}, state, {
'user-system-enabled': !!(payload['user-system-enabled'] * 1),
'allow-attachments': !!(payload['allow-attachments'] * 1)
'registration': !!(payload['registration'] * 1)
});
}

View File

@ -18,6 +18,7 @@ use Respect\Validation\Validator as DataValidator;
* @apiParam {String} email The new email of the staff member. Optional.
* @apiParam {String} password The new password of the staff member. Optional.
* @apiParam {Number} level The new level of the staff member. Optional.
* @apiParam {Boolean} sendEmailOnNewTicket Indicates if it receives an email when a new ticket is created.
*
* @apiUse NO_PERMISSION
* @apiUse INVALID_STAFF
@ -85,6 +86,10 @@ class EditStaffController extends Controller {
if($fileUploader = $this->uploadFile(true)) {
$this->staffInstance->profilePic = ($fileUploader instanceof FileUploader) ? $fileUploader->getFileName() : null;
}
if(Controller::request('sendEmailOnNewTicket') !== null && !Controller::request('staffId') ) {
$this->staffInstance->sendEmailOnNewTicket = Controller::request('sendEmailOnNewTicket');
}
$this->staffInstance->store();
}

View File

@ -64,7 +64,8 @@ class InitAdminController extends Controller {
'profilePic' => '',
'level' => 3,
'sharedDepartmentList' => Department::getAll(),
'sharedTicketList' => []
'sharedTicketList' => [],
'sendEmailOnNewTicket' => 1
]);
foreach(Department::getAll() as $department) {

View File

@ -60,18 +60,18 @@ class InitSettingsController extends Controller {
'language' => Controller::request('language'),
'recaptcha-public' => '',
'recaptcha-private' => '',
'no-reply-email' => Controller::request('no-reply-email') || 'noreply@opensupports.com',
'smtp-host' => Controller::request('smtp-host') || 'localhost',
'smtp-port' => Controller::request('smtp-port') || 7070,
'smtp-user' => Controller::request('smtp-user') || '',
'smtp-pass' => Controller::request('smtp-pass') || '',
'no-reply-email' => Controller::request('no-reply-email'),
'smtp-host' => Controller::request('smtp-host'),
'smtp-port' => Controller::request('smtp-port'),
'smtp-user' => Controller::request('smtp-user'),
'smtp-pass' => Controller::request('smtp-password'),
'time-zone' => 0,
'maintenance-mode' => 0,
'layout' => 'boxed',
'allow-attachments' => !!Controller::request('allow-attachments'),
'max-size' => 1024,
'title' => Controller::request('title') || 'Support Center',
'url' => Controller::request('url') || ('http://' . $_SERVER['HTTP_HOST']),
'title' => Controller::request('title') ? Controller::request('title') : 'Support Center',
'url' => Controller::request('url') ? Controller::request('url') : ('http://' . $_SERVER['HTTP_HOST']),
'registration' => !!Controller::request('registration'),
'user-system-enabled' => !!Controller::request('user-system-enabled'),
'last-stat-day' => date('YmdHi', strtotime(' -12 day ')),

View File

@ -18,7 +18,7 @@ DataValidator::with('CustomValidations', true);
*
* @apiUse NO_PERMISSION
* @apiUse INVALID_TICKET
*
*
* @apiSuccess {Object} data Empty object
*
*/
@ -30,15 +30,33 @@ class CloseController extends Controller {
private $ticket;
public function validations() {
return [
'permission' => 'user',
'requestData' => [
'ticketNumber' => [
'validation' => DataValidator::validTicketNumber(),
'error' => ERRORS::INVALID_TICKET
$session = Session::getInstance();
if (Controller::isUserSystemEnabled() || Controller::isStaffLogged()) {
return [
'permission' => 'user',
'requestData' => [
'ticketNumber' => [
'validation' => DataValidator::validTicketNumber(),
'error' => ERRORS::INVALID_TICKET
]
]
]
];
];
} else {
return [
'permission' => 'any',
'requestData' => [
'ticketNumber' => [
'validation' => DataValidator::equals($session->getTicketNumber()),
'error' => ERRORS::INVALID_TICKET
],
'csrf_token' => [
'validation' => DataValidator::equals($session->getToken()),
'error' => ERRORS::INVALID_TOKEN
]
]
];
}
}
public function handler() {
@ -57,15 +75,18 @@ class CloseController extends Controller {
$this->sendMail();
Log::createLog('CLOSE', $this->ticket->ticketNumber);
Response::respondSuccess();
}
private function shouldDenyPermission() {
$user = Controller::getLoggedUser();
return (!Controller::isStaffLogged() && $this->ticket->author->id !== $user->id) ||
(Controller::isStaffLogged() && $this->ticket->owner && $this->ticket->owner->id !== $user->id);
if(Controller::isStaffLogged()) {
return $this->ticket->owner && $this->ticket->owner->id !== Controller::getLoggedUser()->id;
} else if(Controller::isUserSystemEnabled()) {
return $this->ticket->author->id !== Controller::getLoggedUser()->id;
} else {
return false;
}
}
private function markAsUnread() {
@ -95,8 +116,8 @@ class CloseController extends Controller {
$mailSender = MailSender::getInstance();
$mailSender->setTemplate(MailTemplate::TICKET_CLOSED, [
'to' => $this->ticket->author->email,
'name' => $this->ticket->author->name,
'to' => ($this->ticket->author) ? $this->ticket->author->email : $this->ticket->authorEmail,
'name' => ($this->ticket->author) ? $this->ticket->author->name : $this->ticket->authorName,
'ticketNumber' => $this->ticket->ticketNumber,
'title' => $this->ticket->title,
'url' => Setting::getSetting('url')->getValue()
@ -104,4 +125,4 @@ class CloseController extends Controller {
$mailSender->send();
}
}
}

View File

@ -20,6 +20,7 @@ DataValidator::with('CustomValidations', true);
* @apiUse NO_PERMISSION
* @apiUse INVALID_CONTENT
* @apiUse INVALID_TICKET
* @apiUse INVALID_TOKEN
*
* @apiSuccess {Object} data Empty object
*
@ -63,7 +64,7 @@ class CommentController extends Controller {
],
'csrf_token' => [
'validation' => DataValidator::equals($session->getToken()),
'error' => Controller::request('csrf_token') . ' ' . $session->getToken()
'error' => ERRORS::INVALID_TOKEN
]
]

View File

@ -97,6 +97,13 @@ class CreateController extends Controller {
if(!Controller::isUserSystemEnabled()) {
$this->sendMail();
}
$staffs = Staff::find('send_email_on_new_ticket = 1');
foreach ($staffs as $staff) {
if($staff->sharedDepartmentList->includesId(Controller::request('departmentId'))) {
$this->sendMailStaff($staff->email);
}
}
Log::createLog('CREATE_TICKET', $this->ticketNumber);
Response::respondSuccess([
@ -154,4 +161,17 @@ class CreateController extends Controller {
$mailSender->send();
}
private function sendMailStaff($email) {
$mailSender = MailSender::getInstance();
$mailSender->setTemplate(MailTemplate::TICKET_CREATED_STAFF, [
'to' => $email,
'name' => $this->name,
'ticketNumber' => $this->ticketNumber,
'title' => $this->title
]);
$mailSender->send();
}
}

View File

@ -16,6 +16,7 @@ DataValidator::with('CustomValidations', true);
* @apiParam {Number} ticketNumber The number of the ticket.
*
* @apiUse INVALID_TICKET
* @apiUse INVALID_TOKEN
* @apiUse NO_PERMISSION
*
* @apiSuccess {[Ticket](#api-Data_Structures-ObjectTicket)} data Information about the requested ticket.
@ -52,7 +53,7 @@ class TicketGetController extends Controller {
],
'csrf_token' => [
'validation' => DataValidator::equals($session->getToken()),
'error' => $session->getToken() . ' != ' . Controller::request('csrf_token')
'error' => ERRORS::INVALID_TOKEN
]
]
];

View File

@ -380,7 +380,49 @@ class InitialMails {
'subject' => '#{{ticketNumber}} 票已关闭 - OpenSupports',
'body' => file_get_contents('data/mail-templates/ticket-closed-cn.html')
]
],
'TICKET_CREATED_STAFF' => [
'en' => [
'subject' => '#{{ticketNumber}} Ticket created - OpenSupports',
'body' => file_get_contents('data/mail-templates/ticket-created-staff-en.html')
],
'es' => [
'subject' => '#{{ticketNumber}} Ticket creado - OpenSupports',
'body' => file_get_contents('data/mail-templates/ticket-created-staff-es.html')
],
'de' => [
'subject' => '#{{ticketNumber}} Ticket erstellt - OpenSupports',
'body' => file_get_contents('data/mail-templates/ticket-created-staff-de.html')
],
'fr' => [
'subject' => '#{{ticketNumber}} Ticket créé - OpenSupports',
'body' => file_get_contents('data/mail-templates/ticket-created-staff-fr.html')
],
'in' => [
'subject' => '#{{ticketNumber}} tiket dibuat - OpenSupports',
'body' => file_get_contents('data/mail-templates/ticket-created-staff-in.html')
],
'jp' => [
'subject' => '#{{ticketNumber}} チケットが作成されました - OpenSupports',
'body' => file_get_contents('data/mail-templates/ticket-created-staff-jp.html')
],
'pt' => [
'subject' => '#{{ticketNumber}} Ticket criado - OpenSupports',
'body' => file_get_contents('data/mail-templates/ticket-created-staff-pt.html')
],
'ru' => [
'subject' => '#{{ticketNumber}} Создан билет - OpenSupports',
'body' => file_get_contents('data/mail-templates/ticket-created-staff-ru.html')
],
'tr' => [
'subject' => '#{{ticketNumber}} Bilet oluşturuldu - OpenSupports',
'body' => file_get_contents('data/mail-templates/ticket-created-staff-tr.html')
],
'cn' => [
'subject' => '#{{ticketNumber}} 已创建票证 - OpenSupports',
'body' => file_get_contents('data/mail-templates/ticket-created-staff-cn.html')
]
]
];
}
}

View File

@ -0,0 +1,378 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Support Center</title>
<style type="text/css">
/* Take care of image borders and formatting, client hacks */
img { max-width: 600px; outline: none; text-decoration: none; -ms-interpolation-mode: bicubic;}
a img { border: none; }
table { border-collapse: collapse !important;}
#outlook a { padding:0; }
.ReadMsgBody { width: 100%; }
.ExternalClass { width: 100%; }
.backgroundTable { margin: 0 auto; padding: 0; width: 100% !important; }
table td { border-collapse: collapse; }
.ExternalClass * { line-height: 115%; }
.container-for-gmail-android { min-width: 600px; }
/* General styling */
* {
font-family: Helvetica, Arial, sans-serif;
}
body {
-webkit-font-smoothing: antialiased;
-webkit-text-size-adjust: none;
width: 100% !important;
margin: 0 !important;
height: 100%;
color: #676767;
}
td {
font-family: Helvetica, Arial, sans-serif;
font-size: 14px;
color: #777777;
text-align: center;
line-height: 21px;
}
a {
color: #676767;
text-decoration: none !important;
}
.pull-left {
text-align: left;
}
.pull-right {
text-align: right;
}
.header-lg,
.header-md,
.header-sm {
font-size: 32px;
font-weight: 700;
line-height: normal;
padding: 35px 0 0;
color: #4d4d4d;
}
.header-md {
font-size: 24px;
}
.header-sm {
padding: 5px 0;
font-size: 18px;
line-height: 1.3;
}
.content-padding {
padding: 20px 0 30px;
}
.mobile-header-padding-right {
width: 290px;
text-align: right;
padding-left: 10px;
}
.mobile-header-padding-left {
width: 290px;
text-align: left;
padding-left: 10px;
}
.free-text {
width: 100% !important;
padding: 10px 60px 0px;
}
.block-rounded {
border-radius: 5px;
border: 1px solid #e5e5e5;
vertical-align: top;
}
.button {
padding: 55px 0 0;
}
.info-block {
padding: 0 20px;
width: 260px;
}
.mini-block-container {
padding: 30px 50px;
width: 500px;
}
.mini-block {
background-color: #ffffff;
width: 498px;
border: 1px solid #cccccc;
border-radius: 5px;
padding: 60px 75px;
}
.block-rounded {
width: 260px;
}
.info-img {
width: 258px;
border-radius: 5px 5px 0 0;
}
.force-width-img {
width: 480px;
height: 1px !important;
}
.force-width-full {
width: 600px;
height: 1px !important;
}
.user-img img {
width: 82px;
border-radius: 5px;
border: 1px solid #cccccc;
}
.user-img {
width: 92px;
text-align: left;
}
.user-msg {
width: 236px;
font-size: 14px;
text-align: left;
font-style: italic;
}
.code-block {
padding: 10px 0;
border: 1px solid #cccccc;
color: #4d4d4d;
font-weight: bold;
font-size: 17px;
text-align: center;
}
.force-width-gmail {
min-width:600px;
height: 0px !important;
line-height: 1px !important;
font-size: 1px !important;
}
.button-width {
width: 228px;
}
</style>
<style type="text/css" media="screen">
@import url(http://fonts.googleapis.com/css?family=Oxygen:400,700);
</style>
<style type="text/css" media="screen">
@media screen {
/* Thanks Outlook 2013! */
* {
font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important;
}
}
</style>
<style type="text/css" media="only screen and (max-width: 480px)">
/* Mobile styles */
@media only screen and (max-width: 480px) {
table[class*="container-for-gmail-android"] {
min-width: 290px !important;
width: 100% !important;
}
table[class="w320"] {
width: 320px !important;
}
img[class="force-width-gmail"] {
display: none !important;
width: 0 !important;
height: 0 !important;
}
a[class="button-width"],
a[class="button-mobile"] {
width: 248px !important;
}
td[class*="mobile-header-padding-left"] {
width: 160px !important;
padding-left: 0 !important;
}
td[class*="mobile-header-padding-right"] {
width: 160px !important;
padding-right: 0 !important;
}
td[class="header-lg"] {
font-size: 24px !important;
padding-bottom: 5px !important;
}
td[class="header-md"] {
font-size: 18px !important;
padding-bottom: 5px !important;
}
td[class="content-padding"] {
padding: 5px 0 30px !important;
}
td[class="button"] {
padding: 15px 0 5px !important;
}
td[class*="free-text"] {
padding: 10px 18px 30px !important;
}
img[class="force-width-img"],
img[class="force-width-full"] {
display: none !important;
}
td[class="info-block"] {
display: block !important;
width: 280px !important;
padding-bottom: 40px !important;
}
td[class="info-img"],
img[class="info-img"] {
width: 278px !important;
}
td[class="mini-block-container"] {
padding: 8px 20px !important;
width: 280px !important;
}
td[class="mini-block"] {
padding: 20px !important;
}
td[class="user-img"] {
display: block !important;
text-align: center !important;
width: 100% !important;
padding-bottom: 10px;
}
td[class="user-msg"] {
display: block !important;
padding-bottom: 20px !important;
}
}
</style>
</head>
<body bgcolor="#f7f7f7">
<table align="center" cellpadding="0" cellspacing="0" class="container-for-gmail-android" width="100%">
<tr>
<td align="left" valign="top" width="100%" style="background-color: #ffffff;">
<center>
<table cellspacing="0" cellpadding="0" width="100%" bgcolor="#ffffff" style="border-bottom: 1px solid #cccccc">
<tr>
<td width="100%" height="80" valign="top" style="text-align: center; vertical-align:middle;">
<center>
<table cellpadding="0" cellspacing="0" width="600" class="w320">
<tr>
<td style="vertical-align: middle;">
<a href="http://www.opensupports.com/" target="_blank"><img height="47" src="http://opensupports.com/logo.png" alt="logo"></a>
</td>
</tr>
</table>
</center>
<!--[if gte mso 9]>
</v:textbox>
</v:rect>
<![endif]-->
</td>
</tr>
</table>
</center>
</td>
</tr>
<tr>
<td align="center" valign="top" width="100%" style="background-color: #f7f7f7;" class="content-padding">
<center>
<table cellspacing="0" cellpadding="0" width="600" class="w320">
<tr>
<td class="header-lg">
Ticket created
</td>
</tr>
<tr>
<td class="free-text">
用戶 {{name}}。 他創造了一個題為新票 <i>{{title}}</i>
</td>
</tr>
<tr>
<td class="mini-block-container">
<table cellspacing="0" cellpadding="0" width="100%" style="border-collapse:separate !important;">
<tr>
<td class="mini-block">
<table cellpadding="0" cellspacing="0" width="100%">
<tr>
<td style="padding-bottom: 30px;">
您可以通过其票号访问票证。
</td>
</tr>
<tr>
<td class="code-block">
{{ticketNumber}}
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</center>
</td>
</tr>
<tr>
<td align="center" valign="top" width="100%" style="background-color: #ffffff; border-top: 1px solid #e5e5e5; border-bottom: 1px solid #e5e5e5; height: 100px;">
<center>
<table cellspacing="0" cellpadding="0" width="600" class="w320">
<tr>
<td style="padding: 25px 0 25px">
<strong>OpenSupports</strong><br />
Open source ticket system<br />
www.opensupports.com<br /><br />
</td>
</tr>
</table>
</center>
</td>
</tr>
</table>
</body>
</html>

View File

@ -0,0 +1,378 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Support Center</title>
<style type="text/css">
/* Take care of image borders and formatting, client hacks */
img { max-width: 600px; outline: none; text-decoration: none; -ms-interpolation-mode: bicubic;}
a img { border: none; }
table { border-collapse: collapse !important;}
#outlook a { padding:0; }
.ReadMsgBody { width: 100%; }
.ExternalClass { width: 100%; }
.backgroundTable { margin: 0 auto; padding: 0; width: 100% !important; }
table td { border-collapse: collapse; }
.ExternalClass * { line-height: 115%; }
.container-for-gmail-android { min-width: 600px; }
/* General styling */
* {
font-family: Helvetica, Arial, sans-serif;
}
body {
-webkit-font-smoothing: antialiased;
-webkit-text-size-adjust: none;
width: 100% !important;
margin: 0 !important;
height: 100%;
color: #676767;
}
td {
font-family: Helvetica, Arial, sans-serif;
font-size: 14px;
color: #777777;
text-align: center;
line-height: 21px;
}
a {
color: #676767;
text-decoration: none !important;
}
.pull-left {
text-align: left;
}
.pull-right {
text-align: right;
}
.header-lg,
.header-md,
.header-sm {
font-size: 32px;
font-weight: 700;
line-height: normal;
padding: 35px 0 0;
color: #4d4d4d;
}
.header-md {
font-size: 24px;
}
.header-sm {
padding: 5px 0;
font-size: 18px;
line-height: 1.3;
}
.content-padding {
padding: 20px 0 30px;
}
.mobile-header-padding-right {
width: 290px;
text-align: right;
padding-left: 10px;
}
.mobile-header-padding-left {
width: 290px;
text-align: left;
padding-left: 10px;
}
.free-text {
width: 100% !important;
padding: 10px 60px 0px;
}
.block-rounded {
border-radius: 5px;
border: 1px solid #e5e5e5;
vertical-align: top;
}
.button {
padding: 55px 0 0;
}
.info-block {
padding: 0 20px;
width: 260px;
}
.mini-block-container {
padding: 30px 50px;
width: 500px;
}
.mini-block {
background-color: #ffffff;
width: 498px;
border: 1px solid #cccccc;
border-radius: 5px;
padding: 60px 75px;
}
.block-rounded {
width: 260px;
}
.info-img {
width: 258px;
border-radius: 5px 5px 0 0;
}
.force-width-img {
width: 480px;
height: 1px !important;
}
.force-width-full {
width: 600px;
height: 1px !important;
}
.user-img img {
width: 82px;
border-radius: 5px;
border: 1px solid #cccccc;
}
.user-img {
width: 92px;
text-align: left;
}
.user-msg {
width: 236px;
font-size: 14px;
text-align: left;
font-style: italic;
}
.code-block {
padding: 10px 0;
border: 1px solid #cccccc;
color: #4d4d4d;
font-weight: bold;
font-size: 17px;
text-align: center;
}
.force-width-gmail {
min-width:600px;
height: 0px !important;
line-height: 1px !important;
font-size: 1px !important;
}
.button-width {
width: 228px;
}
</style>
<style type="text/css" media="screen">
@import url(http://fonts.googleapis.com/css?family=Oxygen:400,700);
</style>
<style type="text/css" media="screen">
@media screen {
/* Thanks Outlook 2013! */
* {
font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important;
}
}
</style>
<style type="text/css" media="only screen and (max-width: 480px)">
/* Mobile styles */
@media only screen and (max-width: 480px) {
table[class*="container-for-gmail-android"] {
min-width: 290px !important;
width: 100% !important;
}
table[class="w320"] {
width: 320px !important;
}
img[class="force-width-gmail"] {
display: none !important;
width: 0 !important;
height: 0 !important;
}
a[class="button-width"],
a[class="button-mobile"] {
width: 248px !important;
}
td[class*="mobile-header-padding-left"] {
width: 160px !important;
padding-left: 0 !important;
}
td[class*="mobile-header-padding-right"] {
width: 160px !important;
padding-right: 0 !important;
}
td[class="header-lg"] {
font-size: 24px !important;
padding-bottom: 5px !important;
}
td[class="header-md"] {
font-size: 18px !important;
padding-bottom: 5px !important;
}
td[class="content-padding"] {
padding: 5px 0 30px !important;
}
td[class="button"] {
padding: 15px 0 5px !important;
}
td[class*="free-text"] {
padding: 10px 18px 30px !important;
}
img[class="force-width-img"],
img[class="force-width-full"] {
display: none !important;
}
td[class="info-block"] {
display: block !important;
width: 280px !important;
padding-bottom: 40px !important;
}
td[class="info-img"],
img[class="info-img"] {
width: 278px !important;
}
td[class="mini-block-container"] {
padding: 8px 20px !important;
width: 280px !important;
}
td[class="mini-block"] {
padding: 20px !important;
}
td[class="user-img"] {
display: block !important;
text-align: center !important;
width: 100% !important;
padding-bottom: 10px;
}
td[class="user-msg"] {
display: block !important;
padding-bottom: 20px !important;
}
}
</style>
</head>
<body bgcolor="#f7f7f7">
<table align="center" cellpadding="0" cellspacing="0" class="container-for-gmail-android" width="100%">
<tr>
<td align="left" valign="top" width="100%" style="background-color: #ffffff;">
<center>
<table cellspacing="0" cellpadding="0" width="100%" bgcolor="#ffffff" style="border-bottom: 1px solid #cccccc">
<tr>
<td width="100%" height="80" valign="top" style="text-align: center; vertical-align:middle;">
<center>
<table cellpadding="0" cellspacing="0" width="600" class="w320">
<tr>
<td style="vertical-align: middle;">
<a href="http://www.opensupports.com/" target="_blank"><img height="47" src="http://opensupports.com/logo.png" alt="logo"></a>
</td>
</tr>
</table>
</center>
<!--[if gte mso 9]>
</v:textbox>
</v:rect>
<![endif]-->
</td>
</tr>
</table>
</center>
</td>
</tr>
<tr>
<td align="center" valign="top" width="100%" style="background-color: #f7f7f7;" class="content-padding">
<center>
<table cellspacing="0" cellpadding="0" width="600" class="w320">
<tr>
<td class="header-lg">
Ticket erstellt
</td>
</tr>
<tr>
<td class="free-text">
Der Benutzer {{name}} hat ein neues Ticket erstellt berechtigt <i>{{title}}</i>.
</td>
</tr>
<tr>
<td class="mini-block-container">
<table cellspacing="0" cellpadding="0" width="100%" style="border-collapse:separate !important;">
<tr>
<td class="mini-block">
<table cellpadding="0" cellspacing="0" width="100%">
<tr>
<td style="padding-bottom: 30px;">
Sie können das Ticket nach der Fahrkartennummer erreichen.
</td>
</tr>
<tr>
<td class="code-block">
{{ticketNumber}}
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</center>
</td>
</tr>
<tr>
<td align="center" valign="top" width="100%" style="background-color: #ffffff; border-top: 1px solid #e5e5e5; border-bottom: 1px solid #e5e5e5; height: 100px;">
<center>
<table cellspacing="0" cellpadding="0" width="600" class="w320">
<tr>
<td style="padding: 25px 0 25px">
<strong>OpenSupports</strong><br />
Open source ticket system<br />
www.opensupports.com<br /><br />
</td>
</tr>
</table>
</center>
</td>
</tr>
</table>
</body>
</html>

View File

@ -0,0 +1,378 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Support Center</title>
<style type="text/css">
/* Take care of image borders and formatting, client hacks */
img { max-width: 600px; outline: none; text-decoration: none; -ms-interpolation-mode: bicubic;}
a img { border: none; }
table { border-collapse: collapse !important;}
#outlook a { padding:0; }
.ReadMsgBody { width: 100%; }
.ExternalClass { width: 100%; }
.backgroundTable { margin: 0 auto; padding: 0; width: 100% !important; }
table td { border-collapse: collapse; }
.ExternalClass * { line-height: 115%; }
.container-for-gmail-android { min-width: 600px; }
/* General styling */
* {
font-family: Helvetica, Arial, sans-serif;
}
body {
-webkit-font-smoothing: antialiased;
-webkit-text-size-adjust: none;
width: 100% !important;
margin: 0 !important;
height: 100%;
color: #676767;
}
td {
font-family: Helvetica, Arial, sans-serif;
font-size: 14px;
color: #777777;
text-align: center;
line-height: 21px;
}
a {
color: #676767;
text-decoration: none !important;
}
.pull-left {
text-align: left;
}
.pull-right {
text-align: right;
}
.header-lg,
.header-md,
.header-sm {
font-size: 32px;
font-weight: 700;
line-height: normal;
padding: 35px 0 0;
color: #4d4d4d;
}
.header-md {
font-size: 24px;
}
.header-sm {
padding: 5px 0;
font-size: 18px;
line-height: 1.3;
}
.content-padding {
padding: 20px 0 30px;
}
.mobile-header-padding-right {
width: 290px;
text-align: right;
padding-left: 10px;
}
.mobile-header-padding-left {
width: 290px;
text-align: left;
padding-left: 10px;
}
.free-text {
width: 100% !important;
padding: 10px 60px 0px;
}
.block-rounded {
border-radius: 5px;
border: 1px solid #e5e5e5;
vertical-align: top;
}
.button {
padding: 55px 0 0;
}
.info-block {
padding: 0 20px;
width: 260px;
}
.mini-block-container {
padding: 30px 50px;
width: 500px;
}
.mini-block {
background-color: #ffffff;
width: 498px;
border: 1px solid #cccccc;
border-radius: 5px;
padding: 60px 75px;
}
.block-rounded {
width: 260px;
}
.info-img {
width: 258px;
border-radius: 5px 5px 0 0;
}
.force-width-img {
width: 480px;
height: 1px !important;
}
.force-width-full {
width: 600px;
height: 1px !important;
}
.user-img img {
width: 82px;
border-radius: 5px;
border: 1px solid #cccccc;
}
.user-img {
width: 92px;
text-align: left;
}
.user-msg {
width: 236px;
font-size: 14px;
text-align: left;
font-style: italic;
}
.code-block {
padding: 10px 0;
border: 1px solid #cccccc;
color: #4d4d4d;
font-weight: bold;
font-size: 17px;
text-align: center;
}
.force-width-gmail {
min-width:600px;
height: 0px !important;
line-height: 1px !important;
font-size: 1px !important;
}
.button-width {
width: 228px;
}
</style>
<style type="text/css" media="screen">
@import url(http://fonts.googleapis.com/css?family=Oxygen:400,700);
</style>
<style type="text/css" media="screen">
@media screen {
/* Thanks Outlook 2013! */
* {
font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important;
}
}
</style>
<style type="text/css" media="only screen and (max-width: 480px)">
/* Mobile styles */
@media only screen and (max-width: 480px) {
table[class*="container-for-gmail-android"] {
min-width: 290px !important;
width: 100% !important;
}
table[class="w320"] {
width: 320px !important;
}
img[class="force-width-gmail"] {
display: none !important;
width: 0 !important;
height: 0 !important;
}
a[class="button-width"],
a[class="button-mobile"] {
width: 248px !important;
}
td[class*="mobile-header-padding-left"] {
width: 160px !important;
padding-left: 0 !important;
}
td[class*="mobile-header-padding-right"] {
width: 160px !important;
padding-right: 0 !important;
}
td[class="header-lg"] {
font-size: 24px !important;
padding-bottom: 5px !important;
}
td[class="header-md"] {
font-size: 18px !important;
padding-bottom: 5px !important;
}
td[class="content-padding"] {
padding: 5px 0 30px !important;
}
td[class="button"] {
padding: 15px 0 5px !important;
}
td[class*="free-text"] {
padding: 10px 18px 30px !important;
}
img[class="force-width-img"],
img[class="force-width-full"] {
display: none !important;
}
td[class="info-block"] {
display: block !important;
width: 280px !important;
padding-bottom: 40px !important;
}
td[class="info-img"],
img[class="info-img"] {
width: 278px !important;
}
td[class="mini-block-container"] {
padding: 8px 20px !important;
width: 280px !important;
}
td[class="mini-block"] {
padding: 20px !important;
}
td[class="user-img"] {
display: block !important;
text-align: center !important;
width: 100% !important;
padding-bottom: 10px;
}
td[class="user-msg"] {
display: block !important;
padding-bottom: 20px !important;
}
}
</style>
</head>
<body bgcolor="#f7f7f7">
<table align="center" cellpadding="0" cellspacing="0" class="container-for-gmail-android" width="100%">
<tr>
<td align="left" valign="top" width="100%" style="background-color: #ffffff;">
<center>
<table cellspacing="0" cellpadding="0" width="100%" bgcolor="#ffffff" style="border-bottom: 1px solid #cccccc">
<tr>
<td width="100%" height="80" valign="top" style="text-align: center; vertical-align:middle;">
<center>
<table cellpadding="0" cellspacing="0" width="600" class="w320">
<tr>
<td style="vertical-align: middle;">
<a href="http://www.opensupports.com/" target="_blank"><img height="47" src="http://opensupports.com/logo.png" alt="logo"></a>
</td>
</tr>
</table>
</center>
<!--[if gte mso 9]>
</v:textbox>
</v:rect>
<![endif]-->
</td>
</tr>
</table>
</center>
</td>
</tr>
<tr>
<td align="center" valign="top" width="100%" style="background-color: #f7f7f7;" class="content-padding">
<center>
<table cellspacing="0" cellpadding="0" width="600" class="w320">
<tr>
<td class="header-lg">
Ticket created
</td>
</tr>
<tr>
<td class="free-text">
User {{name}} has created a new ticket titled <i>{{title}}</i>.
</td>
</tr>
<tr>
<td class="mini-block-container">
<table cellspacing="0" cellpadding="0" width="100%" style="border-collapse:separate !important;">
<tr>
<td class="mini-block">
<table cellpadding="0" cellspacing="0" width="100%">
<tr>
<td style="padding-bottom: 30px;">
You can access to the ticket by its ticket number.
</td>
</tr>
<tr>
<td class="code-block">
{{ticketNumber}}
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</center>
</td>
</tr>
<tr>
<td align="center" valign="top" width="100%" style="background-color: #ffffff; border-top: 1px solid #e5e5e5; border-bottom: 1px solid #e5e5e5; height: 100px;">
<center>
<table cellspacing="0" cellpadding="0" width="600" class="w320">
<tr>
<td style="padding: 25px 0 25px">
<strong>OpenSupports</strong><br />
Open source ticket system<br />
www.opensupports.com<br /><br />
</td>
</tr>
</table>
</center>
</td>
</tr>
</table>
</body>
</html>

View File

@ -0,0 +1,378 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Support Center</title>
<style type="text/css">
/* Take care of image borders and formatting, client hacks */
img { max-width: 600px; outline: none; text-decoration: none; -ms-interpolation-mode: bicubic;}
a img { border: none; }
table { border-collapse: collapse !important;}
#outlook a { padding:0; }
.ReadMsgBody { width: 100%; }
.ExternalClass { width: 100%; }
.backgroundTable { margin: 0 auto; padding: 0; width: 100% !important; }
table td { border-collapse: collapse; }
.ExternalClass * { line-height: 115%; }
.container-for-gmail-android { min-width: 600px; }
/* General styling */
* {
font-family: Helvetica, Arial, sans-serif;
}
body {
-webkit-font-smoothing: antialiased;
-webkit-text-size-adjust: none;
width: 100% !important;
margin: 0 !important;
height: 100%;
color: #676767;
}
td {
font-family: Helvetica, Arial, sans-serif;
font-size: 14px;
color: #777777;
text-align: center;
line-height: 21px;
}
a {
color: #676767;
text-decoration: none !important;
}
.pull-left {
text-align: left;
}
.pull-right {
text-align: right;
}
.header-lg,
.header-md,
.header-sm {
font-size: 32px;
font-weight: 700;
line-height: normal;
padding: 35px 0 0;
color: #4d4d4d;
}
.header-md {
font-size: 24px;
}
.header-sm {
padding: 5px 0;
font-size: 18px;
line-height: 1.3;
}
.content-padding {
padding: 20px 0 30px;
}
.mobile-header-padding-right {
width: 290px;
text-align: right;
padding-left: 10px;
}
.mobile-header-padding-left {
width: 290px;
text-align: left;
padding-left: 10px;
}
.free-text {
width: 100% !important;
padding: 10px 60px 0px;
}
.block-rounded {
border-radius: 5px;
border: 1px solid #e5e5e5;
vertical-align: top;
}
.button {
padding: 55px 0 0;
}
.info-block {
padding: 0 20px;
width: 260px;
}
.mini-block-container {
padding: 30px 50px;
width: 500px;
}
.mini-block {
background-color: #ffffff;
width: 498px;
border: 1px solid #cccccc;
border-radius: 5px;
padding: 60px 75px;
}
.block-rounded {
width: 260px;
}
.info-img {
width: 258px;
border-radius: 5px 5px 0 0;
}
.force-width-img {
width: 480px;
height: 1px !important;
}
.force-width-full {
width: 600px;
height: 1px !important;
}
.user-img img {
width: 82px;
border-radius: 5px;
border: 1px solid #cccccc;
}
.user-img {
width: 92px;
text-align: left;
}
.user-msg {
width: 236px;
font-size: 14px;
text-align: left;
font-style: italic;
}
.code-block {
padding: 10px 0;
border: 1px solid #cccccc;
color: #4d4d4d;
font-weight: bold;
font-size: 17px;
text-align: center;
}
.force-width-gmail {
min-width:600px;
height: 0px !important;
line-height: 1px !important;
font-size: 1px !important;
}
.button-width {
width: 228px;
}
</style>
<style type="text/css" media="screen">
@import url(http://fonts.googleapis.com/css?family=Oxygen:400,700);
</style>
<style type="text/css" media="screen">
@media screen {
/* Thanks Outlook 2013! */
* {
font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important;
}
}
</style>
<style type="text/css" media="only screen and (max-width: 480px)">
/* Mobile styles */
@media only screen and (max-width: 480px) {
table[class*="container-for-gmail-android"] {
min-width: 290px !important;
width: 100% !important;
}
table[class="w320"] {
width: 320px !important;
}
img[class="force-width-gmail"] {
display: none !important;
width: 0 !important;
height: 0 !important;
}
a[class="button-width"],
a[class="button-mobile"] {
width: 248px !important;
}
td[class*="mobile-header-padding-left"] {
width: 160px !important;
padding-left: 0 !important;
}
td[class*="mobile-header-padding-right"] {
width: 160px !important;
padding-right: 0 !important;
}
td[class="header-lg"] {
font-size: 24px !important;
padding-bottom: 5px !important;
}
td[class="header-md"] {
font-size: 18px !important;
padding-bottom: 5px !important;
}
td[class="content-padding"] {
padding: 5px 0 30px !important;
}
td[class="button"] {
padding: 15px 0 5px !important;
}
td[class*="free-text"] {
padding: 10px 18px 30px !important;
}
img[class="force-width-img"],
img[class="force-width-full"] {
display: none !important;
}
td[class="info-block"] {
display: block !important;
width: 280px !important;
padding-bottom: 40px !important;
}
td[class="info-img"],
img[class="info-img"] {
width: 278px !important;
}
td[class="mini-block-container"] {
padding: 8px 20px !important;
width: 280px !important;
}
td[class="mini-block"] {
padding: 20px !important;
}
td[class="user-img"] {
display: block !important;
text-align: center !important;
width: 100% !important;
padding-bottom: 10px;
}
td[class="user-msg"] {
display: block !important;
padding-bottom: 20px !important;
}
}
</style>
</head>
<body bgcolor="#f7f7f7">
<table align="center" cellpadding="0" cellspacing="0" class="container-for-gmail-android" width="100%">
<tr>
<td align="left" valign="top" width="100%" style="background-color: #ffffff;">
<center>
<table cellspacing="0" cellpadding="0" width="100%" bgcolor="#ffffff" style="border-bottom: 1px solid #cccccc">
<tr>
<td width="100%" height="80" valign="top" style="text-align: center; vertical-align:middle;">
<center>
<table cellpadding="0" cellspacing="0" width="600" class="w320">
<tr>
<td style="vertical-align: middle;">
<a href="http://www.opensupports.com/" target="_blank"><img height="47" src="http://opensupports.com/logo.png" alt="logo"></a>
</td>
</tr>
</table>
</center>
<!--[if gte mso 9]>
</v:textbox>
</v:rect>
<![endif]-->
</td>
</tr>
</table>
</center>
</td>
</tr>
<tr>
<td align="center" valign="top" width="100%" style="background-color: #f7f7f7;" class="content-padding">
<center>
<table cellspacing="0" cellpadding="0" width="600" class="w320">
<tr>
<td class="header-lg">
Ticket creado
</td>
</tr>
<tr>
<td class="free-text">
El usuario {{name}} ha creado un nuevo ticket titulado <i>{{title}}</i>.
</td>
</tr>
<tr>
<td class="mini-block-container">
<table cellspacing="0" cellpadding="0" width="100%" style="border-collapse:separate !important;">
<tr>
<td class="mini-block">
<table cellpadding="0" cellspacing="0" width="100%">
<tr>
<td style="padding-bottom: 30px;">
Puedes ver el ticket usando el numero de ticket prensentado abajo.
</td>
</tr>
<tr>
<td class="code-block">
{{ticketNumber}}
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</center>
</td>
</tr>
<tr>
<td align="center" valign="top" width="100%" style="background-color: #ffffff; border-top: 1px solid #e5e5e5; border-bottom: 1px solid #e5e5e5; height: 100px;">
<center>
<table cellspacing="0" cellpadding="0" width="600" class="w320">
<tr>
<td style="padding: 25px 0 25px">
<strong>OpenSupports</strong><br />
Open source ticket system<br />
www.opensupports.com<br /><br />
</td>
</tr>
</table>
</center>
</td>
</tr>
</table>
</body>
</html>

View File

@ -0,0 +1,378 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Support Center</title>
<style type="text/css">
/* Take care of image borders and formatting, client hacks */
img { max-width: 600px; outline: none; text-decoration: none; -ms-interpolation-mode: bicubic;}
a img { border: none; }
table { border-collapse: collapse !important;}
#outlook a { padding:0; }
.ReadMsgBody { width: 100%; }
.ExternalClass { width: 100%; }
.backgroundTable { margin: 0 auto; padding: 0; width: 100% !important; }
table td { border-collapse: collapse; }
.ExternalClass * { line-height: 115%; }
.container-for-gmail-android { min-width: 600px; }
/* General styling */
* {
font-family: Helvetica, Arial, sans-serif;
}
body {
-webkit-font-smoothing: antialiased;
-webkit-text-size-adjust: none;
width: 100% !important;
margin: 0 !important;
height: 100%;
color: #676767;
}
td {
font-family: Helvetica, Arial, sans-serif;
font-size: 14px;
color: #777777;
text-align: center;
line-height: 21px;
}
a {
color: #676767;
text-decoration: none !important;
}
.pull-left {
text-align: left;
}
.pull-right {
text-align: right;
}
.header-lg,
.header-md,
.header-sm {
font-size: 32px;
font-weight: 700;
line-height: normal;
padding: 35px 0 0;
color: #4d4d4d;
}
.header-md {
font-size: 24px;
}
.header-sm {
padding: 5px 0;
font-size: 18px;
line-height: 1.3;
}
.content-padding {
padding: 20px 0 30px;
}
.mobile-header-padding-right {
width: 290px;
text-align: right;
padding-left: 10px;
}
.mobile-header-padding-left {
width: 290px;
text-align: left;
padding-left: 10px;
}
.free-text {
width: 100% !important;
padding: 10px 60px 0px;
}
.block-rounded {
border-radius: 5px;
border: 1px solid #e5e5e5;
vertical-align: top;
}
.button {
padding: 55px 0 0;
}
.info-block {
padding: 0 20px;
width: 260px;
}
.mini-block-container {
padding: 30px 50px;
width: 500px;
}
.mini-block {
background-color: #ffffff;
width: 498px;
border: 1px solid #cccccc;
border-radius: 5px;
padding: 60px 75px;
}
.block-rounded {
width: 260px;
}
.info-img {
width: 258px;
border-radius: 5px 5px 0 0;
}
.force-width-img {
width: 480px;
height: 1px !important;
}
.force-width-full {
width: 600px;
height: 1px !important;
}
.user-img img {
width: 82px;
border-radius: 5px;
border: 1px solid #cccccc;
}
.user-img {
width: 92px;
text-align: left;
}
.user-msg {
width: 236px;
font-size: 14px;
text-align: left;
font-style: italic;
}
.code-block {
padding: 10px 0;
border: 1px solid #cccccc;
color: #4d4d4d;
font-weight: bold;
font-size: 17px;
text-align: center;
}
.force-width-gmail {
min-width:600px;
height: 0px !important;
line-height: 1px !important;
font-size: 1px !important;
}
.button-width {
width: 228px;
}
</style>
<style type="text/css" media="screen">
@import url(http://fonts.googleapis.com/css?family=Oxygen:400,700);
</style>
<style type="text/css" media="screen">
@media screen {
/* Thanks Outlook 2013! */
* {
font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important;
}
}
</style>
<style type="text/css" media="only screen and (max-width: 480px)">
/* Mobile styles */
@media only screen and (max-width: 480px) {
table[class*="container-for-gmail-android"] {
min-width: 290px !important;
width: 100% !important;
}
table[class="w320"] {
width: 320px !important;
}
img[class="force-width-gmail"] {
display: none !important;
width: 0 !important;
height: 0 !important;
}
a[class="button-width"],
a[class="button-mobile"] {
width: 248px !important;
}
td[class*="mobile-header-padding-left"] {
width: 160px !important;
padding-left: 0 !important;
}
td[class*="mobile-header-padding-right"] {
width: 160px !important;
padding-right: 0 !important;
}
td[class="header-lg"] {
font-size: 24px !important;
padding-bottom: 5px !important;
}
td[class="header-md"] {
font-size: 18px !important;
padding-bottom: 5px !important;
}
td[class="content-padding"] {
padding: 5px 0 30px !important;
}
td[class="button"] {
padding: 15px 0 5px !important;
}
td[class*="free-text"] {
padding: 10px 18px 30px !important;
}
img[class="force-width-img"],
img[class="force-width-full"] {
display: none !important;
}
td[class="info-block"] {
display: block !important;
width: 280px !important;
padding-bottom: 40px !important;
}
td[class="info-img"],
img[class="info-img"] {
width: 278px !important;
}
td[class="mini-block-container"] {
padding: 8px 20px !important;
width: 280px !important;
}
td[class="mini-block"] {
padding: 20px !important;
}
td[class="user-img"] {
display: block !important;
text-align: center !important;
width: 100% !important;
padding-bottom: 10px;
}
td[class="user-msg"] {
display: block !important;
padding-bottom: 20px !important;
}
}
</style>
</head>
<body bgcolor="#f7f7f7">
<table align="center" cellpadding="0" cellspacing="0" class="container-for-gmail-android" width="100%">
<tr>
<td align="left" valign="top" width="100%" style="background-color: #ffffff;">
<center>
<table cellspacing="0" cellpadding="0" width="100%" bgcolor="#ffffff" style="border-bottom: 1px solid #cccccc">
<tr>
<td width="100%" height="80" valign="top" style="text-align: center; vertical-align:middle;">
<center>
<table cellpadding="0" cellspacing="0" width="600" class="w320">
<tr>
<td style="vertical-align: middle;">
<a href="http://www.opensupports.com/" target="_blank"><img height="47" src="http://opensupports.com/logo.png" alt="logo"></a>
</td>
</tr>
</table>
</center>
<!--[if gte mso 9]>
</v:textbox>
</v:rect>
<![endif]-->
</td>
</tr>
</table>
</center>
</td>
</tr>
<tr>
<td align="center" valign="top" width="100%" style="background-color: #f7f7f7;" class="content-padding">
<center>
<table cellspacing="0" cellpadding="0" width="600" class="w320">
<tr>
<td class="header-lg">
Ticket créé
</td>
</tr>
<tr>
<td class="free-text">
L'utilisateur {{name}}. a créé un nouveau poste intitulé <i>{{title}}</i>.
</td>
</tr>
<tr>
<td class="mini-block-container">
<table cellspacing="0" cellpadding="0" width="100%" style="border-collapse:separate !important;">
<tr>
<td class="mini-block">
<table cellpadding="0" cellspacing="0" width="100%">
<tr>
<td style="padding-bottom: 30px;">
Vous pouvez accéder au billet par son numéro de ticket.
</td>
</tr>
<tr>
<td class="code-block">
{{ticketNumber}}
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</center>
</td>
</tr>
<tr>
<td align="center" valign="top" width="100%" style="background-color: #ffffff; border-top: 1px solid #e5e5e5; border-bottom: 1px solid #e5e5e5; height: 100px;">
<center>
<table cellspacing="0" cellpadding="0" width="600" class="w320">
<tr>
<td style="padding: 25px 0 25px">
<strong>OpenSupports</strong><br />
Open source ticket system<br />
www.opensupports.com<br /><br />
</td>
</tr>
</table>
</center>
</td>
</tr>
</table>
</body>
</html>

View File

@ -0,0 +1,378 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Support Center</title>
<style type="text/css">
/* Take care of image borders and formatting, client hacks */
img { max-width: 600px; outline: none; text-decoration: none; -ms-interpolation-mode: bicubic;}
a img { border: none; }
table { border-collapse: collapse !important;}
#outlook a { padding:0; }
.ReadMsgBody { width: 100%; }
.ExternalClass { width: 100%; }
.backgroundTable { margin: 0 auto; padding: 0; width: 100% !important; }
table td { border-collapse: collapse; }
.ExternalClass * { line-height: 115%; }
.container-for-gmail-android { min-width: 600px; }
/* General styling */
* {
font-family: Helvetica, Arial, sans-serif;
}
body {
-webkit-font-smoothing: antialiased;
-webkit-text-size-adjust: none;
width: 100% !important;
margin: 0 !important;
height: 100%;
color: #676767;
}
td {
font-family: Helvetica, Arial, sans-serif;
font-size: 14px;
color: #777777;
text-align: center;
line-height: 21px;
}
a {
color: #676767;
text-decoration: none !important;
}
.pull-left {
text-align: left;
}
.pull-right {
text-align: right;
}
.header-lg,
.header-md,
.header-sm {
font-size: 32px;
font-weight: 700;
line-height: normal;
padding: 35px 0 0;
color: #4d4d4d;
}
.header-md {
font-size: 24px;
}
.header-sm {
padding: 5px 0;
font-size: 18px;
line-height: 1.3;
}
.content-padding {
padding: 20px 0 30px;
}
.mobile-header-padding-right {
width: 290px;
text-align: right;
padding-left: 10px;
}
.mobile-header-padding-left {
width: 290px;
text-align: left;
padding-left: 10px;
}
.free-text {
width: 100% !important;
padding: 10px 60px 0px;
}
.block-rounded {
border-radius: 5px;
border: 1px solid #e5e5e5;
vertical-align: top;
}
.button {
padding: 55px 0 0;
}
.info-block {
padding: 0 20px;
width: 260px;
}
.mini-block-container {
padding: 30px 50px;
width: 500px;
}
.mini-block {
background-color: #ffffff;
width: 498px;
border: 1px solid #cccccc;
border-radius: 5px;
padding: 60px 75px;
}
.block-rounded {
width: 260px;
}
.info-img {
width: 258px;
border-radius: 5px 5px 0 0;
}
.force-width-img {
width: 480px;
height: 1px !important;
}
.force-width-full {
width: 600px;
height: 1px !important;
}
.user-img img {
width: 82px;
border-radius: 5px;
border: 1px solid #cccccc;
}
.user-img {
width: 92px;
text-align: left;
}
.user-msg {
width: 236px;
font-size: 14px;
text-align: left;
font-style: italic;
}
.code-block {
padding: 10px 0;
border: 1px solid #cccccc;
color: #4d4d4d;
font-weight: bold;
font-size: 17px;
text-align: center;
}
.force-width-gmail {
min-width:600px;
height: 0px !important;
line-height: 1px !important;
font-size: 1px !important;
}
.button-width {
width: 228px;
}
</style>
<style type="text/css" media="screen">
@import url(http://fonts.googleapis.com/css?family=Oxygen:400,700);
</style>
<style type="text/css" media="screen">
@media screen {
/* Thanks Outlook 2013! */
* {
font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important;
}
}
</style>
<style type="text/css" media="only screen and (max-width: 480px)">
/* Mobile styles */
@media only screen and (max-width: 480px) {
table[class*="container-for-gmail-android"] {
min-width: 290px !important;
width: 100% !important;
}
table[class="w320"] {
width: 320px !important;
}
img[class="force-width-gmail"] {
display: none !important;
width: 0 !important;
height: 0 !important;
}
a[class="button-width"],
a[class="button-mobile"] {
width: 248px !important;
}
td[class*="mobile-header-padding-left"] {
width: 160px !important;
padding-left: 0 !important;
}
td[class*="mobile-header-padding-right"] {
width: 160px !important;
padding-right: 0 !important;
}
td[class="header-lg"] {
font-size: 24px !important;
padding-bottom: 5px !important;
}
td[class="header-md"] {
font-size: 18px !important;
padding-bottom: 5px !important;
}
td[class="content-padding"] {
padding: 5px 0 30px !important;
}
td[class="button"] {
padding: 15px 0 5px !important;
}
td[class*="free-text"] {
padding: 10px 18px 30px !important;
}
img[class="force-width-img"],
img[class="force-width-full"] {
display: none !important;
}
td[class="info-block"] {
display: block !important;
width: 280px !important;
padding-bottom: 40px !important;
}
td[class="info-img"],
img[class="info-img"] {
width: 278px !important;
}
td[class="mini-block-container"] {
padding: 8px 20px !important;
width: 280px !important;
}
td[class="mini-block"] {
padding: 20px !important;
}
td[class="user-img"] {
display: block !important;
text-align: center !important;
width: 100% !important;
padding-bottom: 10px;
}
td[class="user-msg"] {
display: block !important;
padding-bottom: 20px !important;
}
}
</style>
</head>
<body bgcolor="#f7f7f7">
<table align="center" cellpadding="0" cellspacing="0" class="container-for-gmail-android" width="100%">
<tr>
<td align="left" valign="top" width="100%" style="background-color: #ffffff;">
<center>
<table cellspacing="0" cellpadding="0" width="100%" bgcolor="#ffffff" style="border-bottom: 1px solid #cccccc">
<tr>
<td width="100%" height="80" valign="top" style="text-align: center; vertical-align:middle;">
<center>
<table cellpadding="0" cellspacing="0" width="600" class="w320">
<tr>
<td style="vertical-align: middle;">
<a href="http://www.opensupports.com/" target="_blank"><img height="47" src="http://opensupports.com/logo.png" alt="logo"></a>
</td>
</tr>
</table>
</center>
<!--[if gte mso 9]>
</v:textbox>
</v:rect>
<![endif]-->
</td>
</tr>
</table>
</center>
</td>
</tr>
<tr>
<td align="center" valign="top" width="100%" style="background-color: #f7f7f7;" class="content-padding">
<center>
<table cellspacing="0" cellpadding="0" width="600" class="w320">
<tr>
<td class="header-lg">
टिकट बनाया
</td>
</tr>
<tr>
<td class="free-text">
उपयोगकर्ता {{name}} हकदार एक नया पद बनाया गया है <i>{{title}}</i>.
</td>
</tr>
<tr>
<td class="mini-block-container">
<table cellspacing="0" cellpadding="0" width="100%" style="border-collapse:separate !important;">
<tr>
<td class="mini-block">
<table cellpadding="0" cellspacing="0" width="100%">
<tr>
<td style="padding-bottom: 30px;">
आप अपने टिकट नंबर से टिकट तक पहुंच सकते हैं।
</td>
</tr>
<tr>
<td class="code-block">
{{ticketNumber}}
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</center>
</td>
</tr>
<tr>
<td align="center" valign="top" width="100%" style="background-color: #ffffff; border-top: 1px solid #e5e5e5; border-bottom: 1px solid #e5e5e5; height: 100px;">
<center>
<table cellspacing="0" cellpadding="0" width="600" class="w320">
<tr>
<td style="padding: 25px 0 25px">
<strong>OpenSupports</strong><br />
Open source ticket system<br />
www.opensupports.com<br /><br />
</td>
</tr>
</table>
</center>
</td>
</tr>
</table>
</body>
</html>

View File

@ -0,0 +1,378 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Support Center</title>
<style type="text/css">
/* Take care of image borders and formatting, client hacks */
img { max-width: 600px; outline: none; text-decoration: none; -ms-interpolation-mode: bicubic;}
a img { border: none; }
table { border-collapse: collapse !important;}
#outlook a { padding:0; }
.ReadMsgBody { width: 100%; }
.ExternalClass { width: 100%; }
.backgroundTable { margin: 0 auto; padding: 0; width: 100% !important; }
table td { border-collapse: collapse; }
.ExternalClass * { line-height: 115%; }
.container-for-gmail-android { min-width: 600px; }
/* General styling */
* {
font-family: Helvetica, Arial, sans-serif;
}
body {
-webkit-font-smoothing: antialiased;
-webkit-text-size-adjust: none;
width: 100% !important;
margin: 0 !important;
height: 100%;
color: #676767;
}
td {
font-family: Helvetica, Arial, sans-serif;
font-size: 14px;
color: #777777;
text-align: center;
line-height: 21px;
}
a {
color: #676767;
text-decoration: none !important;
}
.pull-left {
text-align: left;
}
.pull-right {
text-align: right;
}
.header-lg,
.header-md,
.header-sm {
font-size: 32px;
font-weight: 700;
line-height: normal;
padding: 35px 0 0;
color: #4d4d4d;
}
.header-md {
font-size: 24px;
}
.header-sm {
padding: 5px 0;
font-size: 18px;
line-height: 1.3;
}
.content-padding {
padding: 20px 0 30px;
}
.mobile-header-padding-right {
width: 290px;
text-align: right;
padding-left: 10px;
}
.mobile-header-padding-left {
width: 290px;
text-align: left;
padding-left: 10px;
}
.free-text {
width: 100% !important;
padding: 10px 60px 0px;
}
.block-rounded {
border-radius: 5px;
border: 1px solid #e5e5e5;
vertical-align: top;
}
.button {
padding: 55px 0 0;
}
.info-block {
padding: 0 20px;
width: 260px;
}
.mini-block-container {
padding: 30px 50px;
width: 500px;
}
.mini-block {
background-color: #ffffff;
width: 498px;
border: 1px solid #cccccc;
border-radius: 5px;
padding: 60px 75px;
}
.block-rounded {
width: 260px;
}
.info-img {
width: 258px;
border-radius: 5px 5px 0 0;
}
.force-width-img {
width: 480px;
height: 1px !important;
}
.force-width-full {
width: 600px;
height: 1px !important;
}
.user-img img {
width: 82px;
border-radius: 5px;
border: 1px solid #cccccc;
}
.user-img {
width: 92px;
text-align: left;
}
.user-msg {
width: 236px;
font-size: 14px;
text-align: left;
font-style: italic;
}
.code-block {
padding: 10px 0;
border: 1px solid #cccccc;
color: #4d4d4d;
font-weight: bold;
font-size: 17px;
text-align: center;
}
.force-width-gmail {
min-width:600px;
height: 0px !important;
line-height: 1px !important;
font-size: 1px !important;
}
.button-width {
width: 228px;
}
</style>
<style type="text/css" media="screen">
@import url(http://fonts.googleapis.com/css?family=Oxygen:400,700);
</style>
<style type="text/css" media="screen">
@media screen {
/* Thanks Outlook 2013! */
* {
font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important;
}
}
</style>
<style type="text/css" media="only screen and (max-width: 480px)">
/* Mobile styles */
@media only screen and (max-width: 480px) {
table[class*="container-for-gmail-android"] {
min-width: 290px !important;
width: 100% !important;
}
table[class="w320"] {
width: 320px !important;
}
img[class="force-width-gmail"] {
display: none !important;
width: 0 !important;
height: 0 !important;
}
a[class="button-width"],
a[class="button-mobile"] {
width: 248px !important;
}
td[class*="mobile-header-padding-left"] {
width: 160px !important;
padding-left: 0 !important;
}
td[class*="mobile-header-padding-right"] {
width: 160px !important;
padding-right: 0 !important;
}
td[class="header-lg"] {
font-size: 24px !important;
padding-bottom: 5px !important;
}
td[class="header-md"] {
font-size: 18px !important;
padding-bottom: 5px !important;
}
td[class="content-padding"] {
padding: 5px 0 30px !important;
}
td[class="button"] {
padding: 15px 0 5px !important;
}
td[class*="free-text"] {
padding: 10px 18px 30px !important;
}
img[class="force-width-img"],
img[class="force-width-full"] {
display: none !important;
}
td[class="info-block"] {
display: block !important;
width: 280px !important;
padding-bottom: 40px !important;
}
td[class="info-img"],
img[class="info-img"] {
width: 278px !important;
}
td[class="mini-block-container"] {
padding: 8px 20px !important;
width: 280px !important;
}
td[class="mini-block"] {
padding: 20px !important;
}
td[class="user-img"] {
display: block !important;
text-align: center !important;
width: 100% !important;
padding-bottom: 10px;
}
td[class="user-msg"] {
display: block !important;
padding-bottom: 20px !important;
}
}
</style>
</head>
<body bgcolor="#f7f7f7">
<table align="center" cellpadding="0" cellspacing="0" class="container-for-gmail-android" width="100%">
<tr>
<td align="left" valign="top" width="100%" style="background-color: #ffffff;">
<center>
<table cellspacing="0" cellpadding="0" width="100%" bgcolor="#ffffff" style="border-bottom: 1px solid #cccccc">
<tr>
<td width="100%" height="80" valign="top" style="text-align: center; vertical-align:middle;">
<center>
<table cellpadding="0" cellspacing="0" width="600" class="w320">
<tr>
<td style="vertical-align: middle;">
<a href="http://www.opensupports.com/" target="_blank"><img height="47" src="http://opensupports.com/logo.png" alt="logo"></a>
</td>
</tr>
</table>
</center>
<!--[if gte mso 9]>
</v:textbox>
</v:rect>
<![endif]-->
</td>
</tr>
</table>
</center>
</td>
</tr>
<tr>
<td align="center" valign="top" width="100%" style="background-color: #f7f7f7;" class="content-padding">
<center>
<table cellspacing="0" cellpadding="0" width="600" class="w320">
<tr>
<td class="header-lg">
チケットが作成されました
</td>
</tr>
<tr>
<td class="free-text">
ユーザーは {{name}} 彼は題した新しいチケットを作成しました <i>{{title}}</i>
</td>
</tr>
<tr>
<td class="mini-block-container">
<table cellspacing="0" cellpadding="0" width="100%" style="border-collapse:separate !important;">
<tr>
<td class="mini-block">
<table cellpadding="0" cellspacing="0" width="100%">
<tr>
<td style="padding-bottom: 30px;">
そのチケット番号でチケットにアクセスできます。
</td>
</tr>
<tr>
<td class="code-block">
{{ticketNumber}}
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</center>
</td>
</tr>
<tr>
<td align="center" valign="top" width="100%" style="background-color: #ffffff; border-top: 1px solid #e5e5e5; border-bottom: 1px solid #e5e5e5; height: 100px;">
<center>
<table cellspacing="0" cellpadding="0" width="600" class="w320">
<tr>
<td style="padding: 25px 0 25px">
<strong>OpenSupports</strong><br />
Open source ticket system<br />
www.opensupports.com<br /><br />
</td>
</tr>
</table>
</center>
</td>
</tr>
</table>
</body>
</html>

View File

@ -0,0 +1,378 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Support Center</title>
<style type="text/css">
/* Take care of image borders and formatting, client hacks */
img { max-width: 600px; outline: none; text-decoration: none; -ms-interpolation-mode: bicubic;}
a img { border: none; }
table { border-collapse: collapse !important;}
#outlook a { padding:0; }
.ReadMsgBody { width: 100%; }
.ExternalClass { width: 100%; }
.backgroundTable { margin: 0 auto; padding: 0; width: 100% !important; }
table td { border-collapse: collapse; }
.ExternalClass * { line-height: 115%; }
.container-for-gmail-android { min-width: 600px; }
/* General styling */
* {
font-family: Helvetica, Arial, sans-serif;
}
body {
-webkit-font-smoothing: antialiased;
-webkit-text-size-adjust: none;
width: 100% !important;
margin: 0 !important;
height: 100%;
color: #676767;
}
td {
font-family: Helvetica, Arial, sans-serif;
font-size: 14px;
color: #777777;
text-align: center;
line-height: 21px;
}
a {
color: #676767;
text-decoration: none !important;
}
.pull-left {
text-align: left;
}
.pull-right {
text-align: right;
}
.header-lg,
.header-md,
.header-sm {
font-size: 32px;
font-weight: 700;
line-height: normal;
padding: 35px 0 0;
color: #4d4d4d;
}
.header-md {
font-size: 24px;
}
.header-sm {
padding: 5px 0;
font-size: 18px;
line-height: 1.3;
}
.content-padding {
padding: 20px 0 30px;
}
.mobile-header-padding-right {
width: 290px;
text-align: right;
padding-left: 10px;
}
.mobile-header-padding-left {
width: 290px;
text-align: left;
padding-left: 10px;
}
.free-text {
width: 100% !important;
padding: 10px 60px 0px;
}
.block-rounded {
border-radius: 5px;
border: 1px solid #e5e5e5;
vertical-align: top;
}
.button {
padding: 55px 0 0;
}
.info-block {
padding: 0 20px;
width: 260px;
}
.mini-block-container {
padding: 30px 50px;
width: 500px;
}
.mini-block {
background-color: #ffffff;
width: 498px;
border: 1px solid #cccccc;
border-radius: 5px;
padding: 60px 75px;
}
.block-rounded {
width: 260px;
}
.info-img {
width: 258px;
border-radius: 5px 5px 0 0;
}
.force-width-img {
width: 480px;
height: 1px !important;
}
.force-width-full {
width: 600px;
height: 1px !important;
}
.user-img img {
width: 82px;
border-radius: 5px;
border: 1px solid #cccccc;
}
.user-img {
width: 92px;
text-align: left;
}
.user-msg {
width: 236px;
font-size: 14px;
text-align: left;
font-style: italic;
}
.code-block {
padding: 10px 0;
border: 1px solid #cccccc;
color: #4d4d4d;
font-weight: bold;
font-size: 17px;
text-align: center;
}
.force-width-gmail {
min-width:600px;
height: 0px !important;
line-height: 1px !important;
font-size: 1px !important;
}
.button-width {
width: 228px;
}
</style>
<style type="text/css" media="screen">
@import url(http://fonts.googleapis.com/css?family=Oxygen:400,700);
</style>
<style type="text/css" media="screen">
@media screen {
/* Thanks Outlook 2013! */
* {
font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important;
}
}
</style>
<style type="text/css" media="only screen and (max-width: 480px)">
/* Mobile styles */
@media only screen and (max-width: 480px) {
table[class*="container-for-gmail-android"] {
min-width: 290px !important;
width: 100% !important;
}
table[class="w320"] {
width: 320px !important;
}
img[class="force-width-gmail"] {
display: none !important;
width: 0 !important;
height: 0 !important;
}
a[class="button-width"],
a[class="button-mobile"] {
width: 248px !important;
}
td[class*="mobile-header-padding-left"] {
width: 160px !important;
padding-left: 0 !important;
}
td[class*="mobile-header-padding-right"] {
width: 160px !important;
padding-right: 0 !important;
}
td[class="header-lg"] {
font-size: 24px !important;
padding-bottom: 5px !important;
}
td[class="header-md"] {
font-size: 18px !important;
padding-bottom: 5px !important;
}
td[class="content-padding"] {
padding: 5px 0 30px !important;
}
td[class="button"] {
padding: 15px 0 5px !important;
}
td[class*="free-text"] {
padding: 10px 18px 30px !important;
}
img[class="force-width-img"],
img[class="force-width-full"] {
display: none !important;
}
td[class="info-block"] {
display: block !important;
width: 280px !important;
padding-bottom: 40px !important;
}
td[class="info-img"],
img[class="info-img"] {
width: 278px !important;
}
td[class="mini-block-container"] {
padding: 8px 20px !important;
width: 280px !important;
}
td[class="mini-block"] {
padding: 20px !important;
}
td[class="user-img"] {
display: block !important;
text-align: center !important;
width: 100% !important;
padding-bottom: 10px;
}
td[class="user-msg"] {
display: block !important;
padding-bottom: 20px !important;
}
}
</style>
</head>
<body bgcolor="#f7f7f7">
<table align="center" cellpadding="0" cellspacing="0" class="container-for-gmail-android" width="100%">
<tr>
<td align="left" valign="top" width="100%" style="background-color: #ffffff;">
<center>
<table cellspacing="0" cellpadding="0" width="100%" bgcolor="#ffffff" style="border-bottom: 1px solid #cccccc">
<tr>
<td width="100%" height="80" valign="top" style="text-align: center; vertical-align:middle;">
<center>
<table cellpadding="0" cellspacing="0" width="600" class="w320">
<tr>
<td style="vertical-align: middle;">
<a href="http://www.opensupports.com/" target="_blank"><img height="47" src="http://opensupports.com/logo.png" alt="logo"></a>
</td>
</tr>
</table>
</center>
<!--[if gte mso 9]>
</v:textbox>
</v:rect>
<![endif]-->
</td>
</tr>
</table>
</center>
</td>
</tr>
<tr>
<td align="center" valign="top" width="100%" style="background-color: #f7f7f7;" class="content-padding">
<center>
<table cellspacing="0" cellpadding="0" width="600" class="w320">
<tr>
<td class="header-lg">
Ticket criado
</td>
</tr>
<tr>
<td class="free-text">
O usuário {{name}} criou um novo bilhete de direito <i>{{title}}</i>.
</td>
</tr>
<tr>
<td class="mini-block-container">
<table cellspacing="0" cellpadding="0" width="100%" style="border-collapse:separate !important;">
<tr>
<td class="mini-block">
<table cellpadding="0" cellspacing="0" width="100%">
<tr>
<td style="padding-bottom: 30px;">
Você pode acessar o bilhete pelo seu número de bilhete.
</td>
</tr>
<tr>
<td class="code-block">
{{ticketNumber}}
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</center>
</td>
</tr>
<tr>
<td align="center" valign="top" width="100%" style="background-color: #ffffff; border-top: 1px solid #e5e5e5; border-bottom: 1px solid #e5e5e5; height: 100px;">
<center>
<table cellspacing="0" cellpadding="0" width="600" class="w320">
<tr>
<td style="padding: 25px 0 25px">
<strong>OpenSupports</strong><br />
Open source ticket system<br />
www.opensupports.com<br /><br />
</td>
</tr>
</table>
</center>
</td>
</tr>
</table>
</body>
</html>

View File

@ -0,0 +1,378 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Support Center</title>
<style type="text/css">
/* Take care of image borders and formatting, client hacks */
img { max-width: 600px; outline: none; text-decoration: none; -ms-interpolation-mode: bicubic;}
a img { border: none; }
table { border-collapse: collapse !important;}
#outlook a { padding:0; }
.ReadMsgBody { width: 100%; }
.ExternalClass { width: 100%; }
.backgroundTable { margin: 0 auto; padding: 0; width: 100% !important; }
table td { border-collapse: collapse; }
.ExternalClass * { line-height: 115%; }
.container-for-gmail-android { min-width: 600px; }
/* General styling */
* {
font-family: Helvetica, Arial, sans-serif;
}
body {
-webkit-font-smoothing: antialiased;
-webkit-text-size-adjust: none;
width: 100% !important;
margin: 0 !important;
height: 100%;
color: #676767;
}
td {
font-family: Helvetica, Arial, sans-serif;
font-size: 14px;
color: #777777;
text-align: center;
line-height: 21px;
}
a {
color: #676767;
text-decoration: none !important;
}
.pull-left {
text-align: left;
}
.pull-right {
text-align: right;
}
.header-lg,
.header-md,
.header-sm {
font-size: 32px;
font-weight: 700;
line-height: normal;
padding: 35px 0 0;
color: #4d4d4d;
}
.header-md {
font-size: 24px;
}
.header-sm {
padding: 5px 0;
font-size: 18px;
line-height: 1.3;
}
.content-padding {
padding: 20px 0 30px;
}
.mobile-header-padding-right {
width: 290px;
text-align: right;
padding-left: 10px;
}
.mobile-header-padding-left {
width: 290px;
text-align: left;
padding-left: 10px;
}
.free-text {
width: 100% !important;
padding: 10px 60px 0px;
}
.block-rounded {
border-radius: 5px;
border: 1px solid #e5e5e5;
vertical-align: top;
}
.button {
padding: 55px 0 0;
}
.info-block {
padding: 0 20px;
width: 260px;
}
.mini-block-container {
padding: 30px 50px;
width: 500px;
}
.mini-block {
background-color: #ffffff;
width: 498px;
border: 1px solid #cccccc;
border-radius: 5px;
padding: 60px 75px;
}
.block-rounded {
width: 260px;
}
.info-img {
width: 258px;
border-radius: 5px 5px 0 0;
}
.force-width-img {
width: 480px;
height: 1px !important;
}
.force-width-full {
width: 600px;
height: 1px !important;
}
.user-img img {
width: 82px;
border-radius: 5px;
border: 1px solid #cccccc;
}
.user-img {
width: 92px;
text-align: left;
}
.user-msg {
width: 236px;
font-size: 14px;
text-align: left;
font-style: italic;
}
.code-block {
padding: 10px 0;
border: 1px solid #cccccc;
color: #4d4d4d;
font-weight: bold;
font-size: 17px;
text-align: center;
}
.force-width-gmail {
min-width:600px;
height: 0px !important;
line-height: 1px !important;
font-size: 1px !important;
}
.button-width {
width: 228px;
}
</style>
<style type="text/css" media="screen">
@import url(http://fonts.googleapis.com/css?family=Oxygen:400,700);
</style>
<style type="text/css" media="screen">
@media screen {
/* Thanks Outlook 2013! */
* {
font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important;
}
}
</style>
<style type="text/css" media="only screen and (max-width: 480px)">
/* Mobile styles */
@media only screen and (max-width: 480px) {
table[class*="container-for-gmail-android"] {
min-width: 290px !important;
width: 100% !important;
}
table[class="w320"] {
width: 320px !important;
}
img[class="force-width-gmail"] {
display: none !important;
width: 0 !important;
height: 0 !important;
}
a[class="button-width"],
a[class="button-mobile"] {
width: 248px !important;
}
td[class*="mobile-header-padding-left"] {
width: 160px !important;
padding-left: 0 !important;
}
td[class*="mobile-header-padding-right"] {
width: 160px !important;
padding-right: 0 !important;
}
td[class="header-lg"] {
font-size: 24px !important;
padding-bottom: 5px !important;
}
td[class="header-md"] {
font-size: 18px !important;
padding-bottom: 5px !important;
}
td[class="content-padding"] {
padding: 5px 0 30px !important;
}
td[class="button"] {
padding: 15px 0 5px !important;
}
td[class*="free-text"] {
padding: 10px 18px 30px !important;
}
img[class="force-width-img"],
img[class="force-width-full"] {
display: none !important;
}
td[class="info-block"] {
display: block !important;
width: 280px !important;
padding-bottom: 40px !important;
}
td[class="info-img"],
img[class="info-img"] {
width: 278px !important;
}
td[class="mini-block-container"] {
padding: 8px 20px !important;
width: 280px !important;
}
td[class="mini-block"] {
padding: 20px !important;
}
td[class="user-img"] {
display: block !important;
text-align: center !important;
width: 100% !important;
padding-bottom: 10px;
}
td[class="user-msg"] {
display: block !important;
padding-bottom: 20px !important;
}
}
</style>
</head>
<body bgcolor="#f7f7f7">
<table align="center" cellpadding="0" cellspacing="0" class="container-for-gmail-android" width="100%">
<tr>
<td align="left" valign="top" width="100%" style="background-color: #ffffff;">
<center>
<table cellspacing="0" cellpadding="0" width="100%" bgcolor="#ffffff" style="border-bottom: 1px solid #cccccc">
<tr>
<td width="100%" height="80" valign="top" style="text-align: center; vertical-align:middle;">
<center>
<table cellpadding="0" cellspacing="0" width="600" class="w320">
<tr>
<td style="vertical-align: middle;">
<a href="http://www.opensupports.com/" target="_blank"><img height="47" src="http://opensupports.com/logo.png" alt="logo"></a>
</td>
</tr>
</table>
</center>
<!--[if gte mso 9]>
</v:textbox>
</v:rect>
<![endif]-->
</td>
</tr>
</table>
</center>
</td>
</tr>
<tr>
<td align="center" valign="top" width="100%" style="background-color: #f7f7f7;" class="content-padding">
<center>
<table cellspacing="0" cellpadding="0" width="600" class="w320">
<tr>
<td class="header-lg">
Создан билет
</td>
</tr>
<tr>
<td class="free-text">
Пользователь {{name}} создал новый билет под названием <i>{{title}}</i>.
</td>
</tr>
<tr>
<td class="mini-block-container">
<table cellspacing="0" cellpadding="0" width="100%" style="border-collapse:separate !important;">
<tr>
<td class="mini-block">
<table cellpadding="0" cellspacing="0" width="100%">
<tr>
<td style="padding-bottom: 30px;">
Вы можете получить доступ к билету по его номеру билета.
</td>
</tr>
<tr>
<td class="code-block">
{{ticketNumber}}
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</center>
</td>
</tr>
<tr>
<td align="center" valign="top" width="100%" style="background-color: #ffffff; border-top: 1px solid #e5e5e5; border-bottom: 1px solid #e5e5e5; height: 100px;">
<center>
<table cellspacing="0" cellpadding="0" width="600" class="w320">
<tr>
<td style="padding: 25px 0 25px">
<strong>OpenSupports</strong><br />
Open source ticket system<br />
www.opensupports.com<br /><br />
</td>
</tr>
</table>
</center>
</td>
</tr>
</table>
</body>
</html>

View File

@ -0,0 +1,378 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Support Center</title>
<style type="text/css">
/* Take care of image borders and formatting, client hacks */
img { max-width: 600px; outline: none; text-decoration: none; -ms-interpolation-mode: bicubic;}
a img { border: none; }
table { border-collapse: collapse !important;}
#outlook a { padding:0; }
.ReadMsgBody { width: 100%; }
.ExternalClass { width: 100%; }
.backgroundTable { margin: 0 auto; padding: 0; width: 100% !important; }
table td { border-collapse: collapse; }
.ExternalClass * { line-height: 115%; }
.container-for-gmail-android { min-width: 600px; }
/* General styling */
* {
font-family: Helvetica, Arial, sans-serif;
}
body {
-webkit-font-smoothing: antialiased;
-webkit-text-size-adjust: none;
width: 100% !important;
margin: 0 !important;
height: 100%;
color: #676767;
}
td {
font-family: Helvetica, Arial, sans-serif;
font-size: 14px;
color: #777777;
text-align: center;
line-height: 21px;
}
a {
color: #676767;
text-decoration: none !important;
}
.pull-left {
text-align: left;
}
.pull-right {
text-align: right;
}
.header-lg,
.header-md,
.header-sm {
font-size: 32px;
font-weight: 700;
line-height: normal;
padding: 35px 0 0;
color: #4d4d4d;
}
.header-md {
font-size: 24px;
}
.header-sm {
padding: 5px 0;
font-size: 18px;
line-height: 1.3;
}
.content-padding {
padding: 20px 0 30px;
}
.mobile-header-padding-right {
width: 290px;
text-align: right;
padding-left: 10px;
}
.mobile-header-padding-left {
width: 290px;
text-align: left;
padding-left: 10px;
}
.free-text {
width: 100% !important;
padding: 10px 60px 0px;
}
.block-rounded {
border-radius: 5px;
border: 1px solid #e5e5e5;
vertical-align: top;
}
.button {
padding: 55px 0 0;
}
.info-block {
padding: 0 20px;
width: 260px;
}
.mini-block-container {
padding: 30px 50px;
width: 500px;
}
.mini-block {
background-color: #ffffff;
width: 498px;
border: 1px solid #cccccc;
border-radius: 5px;
padding: 60px 75px;
}
.block-rounded {
width: 260px;
}
.info-img {
width: 258px;
border-radius: 5px 5px 0 0;
}
.force-width-img {
width: 480px;
height: 1px !important;
}
.force-width-full {
width: 600px;
height: 1px !important;
}
.user-img img {
width: 82px;
border-radius: 5px;
border: 1px solid #cccccc;
}
.user-img {
width: 92px;
text-align: left;
}
.user-msg {
width: 236px;
font-size: 14px;
text-align: left;
font-style: italic;
}
.code-block {
padding: 10px 0;
border: 1px solid #cccccc;
color: #4d4d4d;
font-weight: bold;
font-size: 17px;
text-align: center;
}
.force-width-gmail {
min-width:600px;
height: 0px !important;
line-height: 1px !important;
font-size: 1px !important;
}
.button-width {
width: 228px;
}
</style>
<style type="text/css" media="screen">
@import url(http://fonts.googleapis.com/css?family=Oxygen:400,700);
</style>
<style type="text/css" media="screen">
@media screen {
/* Thanks Outlook 2013! */
* {
font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important;
}
}
</style>
<style type="text/css" media="only screen and (max-width: 480px)">
/* Mobile styles */
@media only screen and (max-width: 480px) {
table[class*="container-for-gmail-android"] {
min-width: 290px !important;
width: 100% !important;
}
table[class="w320"] {
width: 320px !important;
}
img[class="force-width-gmail"] {
display: none !important;
width: 0 !important;
height: 0 !important;
}
a[class="button-width"],
a[class="button-mobile"] {
width: 248px !important;
}
td[class*="mobile-header-padding-left"] {
width: 160px !important;
padding-left: 0 !important;
}
td[class*="mobile-header-padding-right"] {
width: 160px !important;
padding-right: 0 !important;
}
td[class="header-lg"] {
font-size: 24px !important;
padding-bottom: 5px !important;
}
td[class="header-md"] {
font-size: 18px !important;
padding-bottom: 5px !important;
}
td[class="content-padding"] {
padding: 5px 0 30px !important;
}
td[class="button"] {
padding: 15px 0 5px !important;
}
td[class*="free-text"] {
padding: 10px 18px 30px !important;
}
img[class="force-width-img"],
img[class="force-width-full"] {
display: none !important;
}
td[class="info-block"] {
display: block !important;
width: 280px !important;
padding-bottom: 40px !important;
}
td[class="info-img"],
img[class="info-img"] {
width: 278px !important;
}
td[class="mini-block-container"] {
padding: 8px 20px !important;
width: 280px !important;
}
td[class="mini-block"] {
padding: 20px !important;
}
td[class="user-img"] {
display: block !important;
text-align: center !important;
width: 100% !important;
padding-bottom: 10px;
}
td[class="user-msg"] {
display: block !important;
padding-bottom: 20px !important;
}
}
</style>
</head>
<body bgcolor="#f7f7f7">
<table align="center" cellpadding="0" cellspacing="0" class="container-for-gmail-android" width="100%">
<tr>
<td align="left" valign="top" width="100%" style="background-color: #ffffff;">
<center>
<table cellspacing="0" cellpadding="0" width="100%" bgcolor="#ffffff" style="border-bottom: 1px solid #cccccc">
<tr>
<td width="100%" height="80" valign="top" style="text-align: center; vertical-align:middle;">
<center>
<table cellpadding="0" cellspacing="0" width="600" class="w320">
<tr>
<td style="vertical-align: middle;">
<a href="http://www.opensupports.com/" target="_blank"><img height="47" src="http://opensupports.com/logo.png" alt="logo"></a>
</td>
</tr>
</table>
</center>
<!--[if gte mso 9]>
</v:textbox>
</v:rect>
<![endif]-->
</td>
</tr>
</table>
</center>
</td>
</tr>
<tr>
<td align="center" valign="top" width="100%" style="background-color: #f7f7f7;" class="content-padding">
<center>
<table cellspacing="0" cellpadding="0" width="600" class="w320">
<tr>
<td class="header-lg">
Bilet oluşturuldu
</td>
</tr>
<tr>
<td class="free-text">
Kullanıcı {{name}} başlıklı yeni bir bilet yarattı <i>{{title}}</i> .
</td>
</tr>
<tr>
<td class="mini-block-container">
<table cellspacing="0" cellpadding="0" width="100%" style="border-collapse:separate !important;">
<tr>
<td class="mini-block">
<table cellpadding="0" cellspacing="0" width="100%">
<tr>
<td style="padding-bottom: 30px;">
Bilete bilet numarasından erişebilirsiniz.
</td>
</tr>
<tr>
<td class="code-block">
{{ticketNumber}}
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</center>
</td>
</tr>
<tr>
<td align="center" valign="top" width="100%" style="background-color: #ffffff; border-top: 1px solid #e5e5e5; border-bottom: 1px solid #e5e5e5; height: 100px;">
<center>
<table cellspacing="0" cellpadding="0" width="600" class="w320">
<tr>
<td style="padding: 25px 0 25px">
<strong>OpenSupports</strong><br />
Open source ticket system<br />
www.opensupports.com<br /><br />
</td>
</tr>
</table>
</center>
</td>
</tr>
</table>
</body>
</html>

View File

@ -22,6 +22,7 @@ class MailTemplate extends DataStore {
const TICKET_CREATED = 'TICKET_CREATED';
const TICKET_RESPONDED = 'TICKET_RESPONDED';
const TICKET_CLOSED = 'TICKET_CLOSED';
const TICKET_CREATED_STAFF = 'TICKET_CREATED_STAFF';
public static function getTemplate($type) {
$globalLanguage = Setting::getSetting('language')->value;

View File

@ -18,4 +18,8 @@ class NullDataStore extends DataStore {
public function store() {
return null;
}
public function getValue() {
return null;
}
}

View File

@ -31,14 +31,16 @@ class Staff extends DataStore {
'sharedDepartmentList',
'sharedTicketList',
'lastLogin',
'ownStatList'
'ownStatList',
'sendEmailOnNewTicket'
];
}
public function getDefaultProps() {
return [
'level' => 1,
'ownStatList' => new DataStoreList()
'ownStatList' => new DataStoreList(),
'sendEmailOnNewTicket' => 0
];
}
@ -55,7 +57,8 @@ class Staff extends DataStore {
'level' => $this->level,
'departments' => $this->sharedDepartmentList->toArray(),
'tickets' => $this->sharedTicketList->toArray(),
'lastLogin' => $this->lastLogin
'lastLogin' => $this->lastLogin ,
'sendEmailOnNewTicket' => $this->sendEmailOnNewTicket
];
}
}

View File

@ -49,6 +49,7 @@ describe'/staff/edit' do
csrf_userid: $csrf_userid,
csrf_token: $csrf_token,
email: 'newwstaff@opensupports.com',
sendEmailOnNewTicket: '1'
})
(result['status']).should.equal('success')
@ -57,6 +58,7 @@ describe'/staff/edit' do
(row['email']).should.equal('newwstaff@opensupports.com')
(row['level']).should.equal('2')
(row['send_email_on_new_ticket']).should.equal('1')
row = $database.getRow('department', 1, 'id')
(row['owners']).should.equal('3')

View File

@ -10,6 +10,6 @@ describe'system/get-mail-templates' do
(result['status']).should.equal('success')
(result['data'].size).should.equal(90)
(result['data'].size).should.equal(100)
end
end

View File

@ -3,6 +3,12 @@ describe '/system/init-settings' do
result = request('/system/init-settings', {
'user-system-enabled' => true,
'registration' => true,
'title' => 'Support Center',
'smtp-host' => 'localhost',
'smtp-port' => 7070,
'smtp-user' => 'noreply@opensupports.com',
'smtp-password' => '',
'no-reply-email' => 'noreply@opensupports.com',
'language' => 'en'
})