diff --git a/include/class.queue.php b/include/class.queue.php index 38bf53236bd82d4159345fd449827f8aa449f53e..c265952ad3465de3b84bd5eaa4d785fb08e4d9a1 100644 --- a/include/class.queue.php +++ b/include/class.queue.php @@ -159,7 +159,7 @@ abstract class QueueDecoration { 'b' => '%2$s %1$s', ); - $pos = strtolower($this->config['p']); + $pos = $this->getPosition(); if (!isset($positions[$pos])) return $text; @@ -206,7 +206,7 @@ extends QueueDecoration { $threadcount = $row[static::$qname]; if ($threadcount > 1) { return sprintf( - '<i class="icon-comments-alt"></i><small>%s</small>', + '<small class="faded-more"><i class="icon-comments-alt"></i> %s</small>', $threadcount ); } @@ -249,9 +249,8 @@ extends QueueDecoration { } function getDecoration($row, $text) { - return sprintf( - '<span class="Icon overdueTicket">%s</span>', - $text); + if ($row['isoverdue']) + return '<span class="Icon overdueTicket"></span>'; } } @@ -265,9 +264,8 @@ extends QueueDecoration { } function getDecoration($row, $text) { - return sprintf( - '<span class="Icon %sTicket">%s</span>', - $row['source'], $text); + return sprintf('<span class="Icon %sTicket"></span>', + strtolower($row['source'])); } } @@ -628,6 +626,20 @@ extends VerySimpleModel { $form = $this->getDataConfigForm($vars); foreach ($form->getClean() as $k=>$v) $this->set($k, $v); + + // Do the decorations + $this->_decorations = $this->decorations = array(); + foreach ($vars['decorations'] as $i=>$class) { + if (!class_exists($class) || !is_subclass_of($class, 'QueueDecoration')) + continue; + if ($vars['deco_column'][$i] != $this->id) + continue; + $json = array('c' => $class, 'p' => $vars['deco_pos'][$i]); + $this->_decorations[] = QueueDecoration::fromJson($json); + $this->decorations[] = $json; + } + // Store as JSON array + $this->decorations = JsonDataEncoder::encode($this->decorations); } } diff --git a/include/staff/templates/queue-column.tmpl.php b/include/staff/templates/queue-column.tmpl.php index a3b4b56dea408d0faecc7cfcc997e064791e0f46..925687ea345cf063a867f4eecb28b6ee2afa93df 100644 --- a/include/staff/templates/queue-column.tmpl.php +++ b/include/staff/templates/queue-column.tmpl.php @@ -19,24 +19,33 @@ $data_form = $column->getDataConfigForm($_POST); ?> </div> -<div class="hidden tab_content" id="<?php echo $colid; ?>-decorations" style="max-width: 400px"> +<div class="hidden tab_content" data-col-id="<?php echo $colid; ?>" + id="<?php echo $colid; ?>-decorations" style="max-width: 400px"> <div class="empty placeholder" style="margin-left: 20px"> <em><?php echo __('No decorations for this field'); ?></em> </div> - <div style="margin: 20px;"> + <div style="margin: 0 20px;"> <div class="decoration clear template hidden"> <input data-field="input" data-name="decorations[]" value="" type="hidden" /> + <input data-field="column" data-name="deco_column[]" value="" type="hidden" /> <i data-field="icon"></i> <span data-field="name"></span> <div class="pull-right"> - <select data-field="position"> + <select data-field="position" data-name="deco_pos[]"> <?php foreach (QueueDecoration::getPositions() as $key=>$desc) { echo sprintf('<option value="%s">%s</option>', $key, Format::htmlchars($desc)); } ?> </select> <a href="#" data-field="delete" title="<?php echo __('Delete'); ?>" onclick="javascript: - $(this).closest('.decoration').remove(); + var tab = $(this).closest('.tab_content'), + decoration = $(this).closest('.decoration'), + klass = decoration.find('input[data-field=input]').val(), + select = $('select.add-decoration', tab); + select.find('option[value=' + klass + ']').prop('disabled', false); + decoration.remove(); + if (tab.find('.decoration:not(.template)').length === 0) + tab.find('.empty.placeholder').show() return false;"><i class="icon-trash"></i></a> </div> </div> @@ -54,22 +63,27 @@ $data_form = $column->getDataConfigForm($_POST); <script> $(function() { - var addDecoration = function(type, icon, pos) { + var addDecoration = function(type, desc, icon, pos) { var template = $('.decoration.template', '#<?php echo $colid; ?>-decorations'), clone = template.clone().show().removeClass('template').insertBefore(template), input = clone.find('[data-field=input]'), + colid = clone.closest('.tab_content').data('colId'), + column = clone.find('[data-field=column]'), name = clone.find('[data-field=name]'), i = clone.find('[data-field=icon]'), position = clone.find('[data-field=position]'); - input.attr('name', input.data('name')); + input.attr('name', input.data('name')).val(type); + column.attr('name', column.data('name')).val(colid); i.addClass('icon-fixed-width icon-' + icon); - name.text(type); - if (pos) position.val(pos); - template.parent().find('.empty').hide(); + name.text(desc); + position.attr('name', position.data('name')); + if (pos) + position.val(pos); + template.closest('.tab_content').find('.empty').hide(); }; $('select.add-decoration', '#<?php echo $colid; ?>-decorations').change(function() { var selected = $(this).find(':selected'); - addDecoration(selected.text(), selected.data('icon')); + addDecoration(selected.val(), selected.text(), selected.data('icon')); selected.prop('disabled', true); }); $('#<?php echo $colid; ?>-decorations').click('a[data-field=delete]',