Add language property to service messages

master
Mike Koch 7 years ago
parent 3e82065fa4
commit 36295d1861
No known key found for this signature in database
GPG Key ID: 9BA5D7F8391455ED

@ -102,6 +102,7 @@ require_once(HESK_PATH . 'inc/show_admin_nav.inc.php');
<th style="display: none"><?php echo $hesklang['id']; ?></th> <th style="display: none"><?php echo $hesklang['id']; ?></th>
<th><?php echo $hesklang['sm_mtitle']; ?></th> <th><?php echo $hesklang['sm_mtitle']; ?></th>
<th><?php echo $hesklang['sm_author']; ?></th> <th><?php echo $hesklang['sm_author']; ?></th>
<th><?php echo $hesklang['lgs']; ?></th>
<th><?php echo $hesklang['sm_type']; ?></th> <th><?php echo $hesklang['sm_type']; ?></th>
<th><?php echo $hesklang['opt']; ?></th> <th><?php echo $hesklang['opt']; ?></th>
</tr> </tr>
@ -131,11 +132,11 @@ require_once(HESK_PATH . 'inc/show_admin_nav.inc.php');
<form id="service-message" class="form-horizontal" data-toggle="validator" method="post"> <form id="service-message" class="form-horizontal" data-toggle="validator" method="post">
<div class="modal-body"> <div class="modal-body">
<ul class="nav nav-tabs" role="tablist"> <ul class="nav nav-tabs" role="tablist">
<li role="presentation" class="active"><a href="#contents" role="tab" data-toggle="tab">Contents</a></li> <li role="presentation" class="active"><a href="#sm-contents" role="tab" data-toggle="tab">Contents</a></li>
<li role="presentation"><a href="#properties" role="tab" data-toggle="tab">Properties</a></li> <li role="presentation"><a href="#properties" role="tab" data-toggle="tab">Properties</a></li>
</ul><br> </ul><br>
<div class="tab-content"> <div class="tab-content">
<div role="tabpanel" class="tab-pane active" id="contents"> <div role="tabpanel" class="tab-pane active" id="sm-contents">
<div class="form-group"> <div class="form-group">
<label for="title" <label for="title"
class="col-md-2 control-label"><?php echo $hesklang['sm_mtitle']; ?></label> class="col-md-2 control-label"><?php echo $hesklang['sm_mtitle']; ?></label>
@ -364,6 +365,7 @@ echo mfh_get_hidden_fields_for_language(array(
'error_deleting_sm', 'error_deleting_sm',
'error_sorting_categories', 'error_sorting_categories',
'error_retrieving_sm', 'error_retrieving_sm',
'all',
)); ));
echo '<script>var users = [];'; echo '<script>var users = [];';
@ -376,6 +378,11 @@ while ($row = hesk_dbFetchAssoc($usersRs)) {
name: '".$row['name']."' name: '".$row['name']."'
}\n"; }\n";
} }
echo "
var languages = [];\n";
foreach ($hesk_settings['languages'] as $key => $value) {
echo "languages[" . json_encode($value['folder']) . "] = " . json_encode($key) . ";\n";
}
echo '</script>'; echo '</script>';
?> ?>
<script type="text/html" id="service-message-title-template"> <script type="text/html" id="service-message-title-template">
@ -400,6 +407,7 @@ echo '</script>';
<td style="display: none"><span data-property="id" data-value="x"></span></td> <td style="display: none"><span data-property="id" data-value="x"></span></td>
<td><span data-property="title"></span></td> <td><span data-property="title"></span></td>
<td><span data-property="author"></span></td> <td><span data-property="author"></span></td>
<td><span data-property="language"></span></td>
<td><span data-property="type"></span></td> <td><span data-property="type"></span></td>
<td> <td>
<span class="sort-arrows"> <span class="sort-arrows">

@ -33,4 +33,7 @@ class ServiceMessage extends \BaseClass {
/* @var $locations string[] */ /* @var $locations string[] */
public $locations; public $locations;
/* @var $language string */
public $language;
} }

@ -118,6 +118,20 @@ class ServiceMessageHandler extends \BaseClass {
$htmlPurifier = new \HeskHTMLPurifier($heskSettings['cache_dir']); $htmlPurifier = new \HeskHTMLPurifier($heskSettings['cache_dir']);
$serviceMessage->message = $htmlPurifier->heskPurify($serviceMessage->message); $serviceMessage->message = $htmlPurifier->heskPurify($serviceMessage->message);
} }
if ($serviceMessage->language === null || trim($serviceMessage->language) === '') {
$validationModel->errorKeys[] = 'MISSING_LANGUAGE';
}
$languageFound = false;
foreach ($heskSettings['languages'] as $key => $value) {
if ($value['folder'] === $serviceMessage->language || $serviceMessage->language === 'ALL') {
$languageFound = true;
break;
}
}
if (!$languageFound) {
$validationModel->errorKeys[] = 'LANGUAGE_NOT_INSTALLED';
}
if ($serviceMessage->title === null || trim($serviceMessage->title) === '') { if ($serviceMessage->title === null || trim($serviceMessage->title) === '') {
$validationModel->errorKeys[] = 'MISSING_TITLE'; $validationModel->errorKeys[] = 'MISSING_TITLE';

@ -76,6 +76,7 @@ class ServiceMessagesController extends \BaseClass {
$serviceMessage->message = Helpers::safeArrayGet($data, 'message'); $serviceMessage->message = Helpers::safeArrayGet($data, 'message');
$serviceMessage->published = Helpers::safeArrayGet($data, 'published'); $serviceMessage->published = Helpers::safeArrayGet($data, 'published');
$serviceMessage->style = Helpers::safeArrayGet($data, 'style'); $serviceMessage->style = Helpers::safeArrayGet($data, 'style');
$serviceMessage->language = Helpers::safeArrayGet($data, 'language');
$jsonLocations = Helpers::safeArrayGet($data, 'locations'); $jsonLocations = Helpers::safeArrayGet($data, 'locations');

@ -24,14 +24,15 @@ class ServiceMessagesGateway extends CommonDao {
$type = $serviceMessage->published ? 0 : 1; $type = $serviceMessage->published ? 0 : 1;
// Insert service message into database // Insert service message into database
hesk_dbQuery("INSERT INTO `" . hesk_dbEscape($heskSettings['db_pfix']) . "service_messages` (`author`,`title`,`message`,`style`,`type`,`order`, `icon`) VALUES ( hesk_dbQuery("INSERT INTO `" . hesk_dbEscape($heskSettings['db_pfix']) . "service_messages` (`author`,`title`,`message`,`style`,`type`,`order`, `icon`, `mfh_language`) VALUES (
'" . intval($serviceMessage->createdBy) . "', '" . intval($serviceMessage->createdBy) . "',
'" . hesk_dbEscape($serviceMessage->title) . "', '" . hesk_dbEscape($serviceMessage->title) . "',
'" . hesk_dbEscape($serviceMessage->message) . "', '" . hesk_dbEscape($serviceMessage->message) . "',
'" . hesk_dbEscape($style) . "', '" . hesk_dbEscape($style) . "',
'{$type}', '{$type}',
'{$myOrder}', '{$myOrder}',
'" . hesk_dbEscape($serviceMessage->icon) . "' '" . hesk_dbEscape($serviceMessage->icon) . "',
'" . hesk_dbEscape($serviceMessage->language) . "',
)"); )");
$serviceMessage->id = hesk_dbInsertID(); $serviceMessage->id = hesk_dbInsertID();
@ -74,6 +75,7 @@ class ServiceMessagesGateway extends CommonDao {
$serviceMessage->message = $row['message']; $serviceMessage->message = $row['message'];
$serviceMessage->style = ServiceMessageStyle::getStyleById($row['style']); $serviceMessage->style = ServiceMessageStyle::getStyleById($row['style']);
$serviceMessage->icon = $row['icon']; $serviceMessage->icon = $row['icon'];
$serviceMessage->language = $row['mfh_language'];
$serviceMessage->locations = array(); $serviceMessage->locations = array();
$locationsRs = hesk_dbQuery("SELECT `location` FROM `" . hesk_dbEscape($heskSettings['db_pfix']) . "mfh_service_message_to_location` $locationsRs = hesk_dbQuery("SELECT `location` FROM `" . hesk_dbEscape($heskSettings['db_pfix']) . "mfh_service_message_to_location`
@ -102,7 +104,8 @@ class ServiceMessagesGateway extends CommonDao {
`style` = '" . intval($style) . "', `style` = '" . intval($style) . "',
`type` = " . intval($type) . ", `type` = " . intval($type) . ",
`icon` = '" . hesk_dbEscape($serviceMessage->icon) . "', `icon` = '" . hesk_dbEscape($serviceMessage->icon) . "',
`order` = " . intval($serviceMessage->order) . " `order` = " . intval($serviceMessage->order) . ",
`mfh_language` = '" . hesk_dbEscape($serviceMessage->language) . "'
WHERE `id` = " . intval($serviceMessage->id)); WHERE `id` = " . intval($serviceMessage->id));
hesk_dbQuery("DELETE FROM `" . hesk_dbEscape($heskSettings['db_pfix']) . "mfh_service_message_to_location` hesk_dbQuery("DELETE FROM `" . hesk_dbEscape($heskSettings['db_pfix']) . "mfh_service_message_to_location`

@ -50,6 +50,9 @@ function loadTable() {
} else { } else {
$template.find('span[data-property="type"]').text(mfhLang.text('sm_draft')); $template.find('span[data-property="type"]').text(mfhLang.text('sm_draft'));
} }
$template.find('[data-property="language"]').text(this.language === 'ALL' ?
mfhLang.text('all') :
languages[this.language]);
$tableBody.append($template); $tableBody.append($template);
@ -148,7 +151,8 @@ function bindEditModal() {
.prop('checked', 'checked').end() .prop('checked', 'checked').end()
.find('input[name="title"]').val(element.title).end() .find('input[name="title"]').val(element.title).end()
.find('input[name="id"]').val(element.id).end() .find('input[name="id"]').val(element.id).end()
.find('input[name="order"]').val(element.order).end(); .find('input[name="order"]').val(element.order).end()
.find('select[name="language"]').val(element.language).end();
setIcon(element.icon); setIcon(element.icon);
$.each(element.locations, function() { $.each(element.locations, function() {
@ -161,6 +165,11 @@ function bindEditModal() {
$('textarea[name="message"]').val(element.message); $('textarea[name="message"]').val(element.message);
} }
$('.tab-pane#sm-contents').addClass('active');
$('.tab-pane#properties').removeClass('active');
$('.nav-tabs > li').removeClass('active');
$('.nav-tabs > li:first').addClass('active');
$modal.modal('show'); $modal.modal('show');
}); });
@ -177,7 +186,8 @@ function bindCreateModal() {
.find('input[name="id"]').val(-1).end() .find('input[name="id"]').val(-1).end()
.find('input[name="order"]').val('').end() .find('input[name="order"]').val('').end()
.find('#preview-pane').html('').end() .find('#preview-pane').html('').end()
.find('input[name="location[]"]').prop('checked', false); .find('input[name="location[]"]').prop('checked', false)
.find('select[name="language"]').val('ALL');
setIcon(''); setIcon('');
if ($('input[name="kb_wysiwyg"]').val() === "1") { if ($('input[name="kb_wysiwyg"]').val() === "1") {
@ -186,6 +196,11 @@ function bindCreateModal() {
$('textarea[name="message"]').val(''); $('textarea[name="message"]').val('');
} }
$('.tab-pane#sm-contents').addClass('active');
$('.tab-pane#properties').removeClass('active');
$('.nav-tabs > li').removeClass('active');
$('.nav-tabs > li:first').addClass('active');
$modal.modal('show'); $modal.modal('show');
}); });
} }
@ -218,6 +233,7 @@ function bindFormSubmit() {
published: $modal.find('input[name="type"]:checked').val() === "0", published: $modal.find('input[name="type"]:checked').val() === "0",
style: styles[$modal.find('input[name="style"]:checked').val()], style: styles[$modal.find('input[name="style"]:checked').val()],
order: $modal.find('input[name="order"]').val(), order: $modal.find('input[name="order"]').val(),
language: $modal.find('select[name="language"]').val(),
locations: locations locations: locations
}; };

Loading…
Cancel
Save