diff --git a/include/class.queue.php b/include/class.queue.php index 1606e99f1458c75c947c3445c0aacfdade125dc9..ac8fd33811445ade63539804b372ab48b56636d6 100644 --- a/include/class.queue.php +++ b/include/class.queue.php @@ -560,7 +560,8 @@ class CustomQueue extends VerySimpleModel { } function getStatus() { - return 'bogus'; + return $this->hasFlag(self::FLAG_DISABLED) + ? __('Disabled') : __('Active'); } function getChildren() { @@ -768,6 +769,13 @@ class CustomQueue extends VerySimpleModel { : $this->clearFlag($flag); } + function disable() { + $this->setFlag(self::FLAG_DISABLED); + } + + function enable() { + $this->clearFlag(self::FLAG_DISABLED); + } function update($vars, &$errors=array()) { // Set basic search information diff --git a/include/i18n/en_US/queue.yaml b/include/i18n/en_US/queue.yaml index 678575ba2846e5de8e35efca2e70e785fa253e4b..901de736209dcf18725836fd72a4ba67eae11b01 100644 --- a/include/i18n/en_US/queue.yaml +++ b/include/i18n/en_US/queue.yaml @@ -13,7 +13,7 @@ # flags: # 0x01: FLAG_PUBLIC # 0x02: FLAG_QUEUE (should be set for everything here) -# 0x04: FLAG_CONTAINER (should be set for top-level queues) +# 0x04: FLAG_DISABLED # 0x08: FLAG_INHERIT (inherit criteria from parent) # 0x10: FLAG_INHERIT_COLUMNS # 0x20: FLAG_INHERIT_SORTING diff --git a/include/staff/queues-ticket.inc.php b/include/staff/queues-ticket.inc.php index 77efa54d8ce0295e1b7f29d693e8a682b9d59344..f23f2e9fe4440c40d8ae2d2c789a9a8263bb0814 100644 --- a/include/staff/queues-ticket.inc.php +++ b/include/staff/queues-ticket.inc.php @@ -8,19 +8,19 @@ <div id="action-dropdown-more" class="action-dropdown anchor-right"> <ul id="actions"> <li> - <a class="confirm" data-name="enable" href="queues.php?t=tickets&a=enable"> + <a class="queue-action no-pjax" data-action="enable" href="#queues.php"> <i class="icon-ok-sign icon-fixed-width"></i> <?php echo __( 'Enable'); ?> </a> </li> <li> - <a class="confirm" data-name="disable" href="queues.php?t=tickets&a=disable"> + <a class="queue-action no-pjax" data-action="disable" href="#queues.php"> <i class="icon-ban-circle icon-fixed-width"></i> <?php echo __( 'Disable'); ?> </a> </li> <li class="danger"> - <a class="confirm" data-name="delete" href="queues.php?t=tickets&a=delete#queues"> + <a class="queue-action no-pjax" data-action="delete" href="#queues.php"> <i class="icon-trash icon-fixed-width"></i> <?php echo __( 'Delete'); ?> </a> @@ -28,12 +28,11 @@ </ul> </div> </div> + <input type="hidden" name="do" value="mass_process" /> <h3><?php echo __('Ticket Queues');?></h3> </div> <div class="clear"></div> <?php csrf_token(); ?> - <input type="hidden" name="do" value="mass_process" > - <input type="hidden" id="action" name="a" value="" > <table class="list" border="0" cellspacing="1" cellpadding="0" width="940"> <thead> <tr> @@ -55,7 +54,7 @@ $emitLevel = function($queues, $level=0) use ($all_queues, &$emitLevel) { <td colspan="<?php echo max(1, $level); ?>"></td> <?php } ?> <td> - <input type="checkbox" class="checkbox" name="ckb[]"> + <input type="checkbox" class="mass checkbox" value="<?php echo $q->id; ?>" /> <input type="hidden" name="qsort[<?php echo $q->id; ?>]" value="<?php echo $q->sort; ?>"/> </td> @@ -80,3 +79,36 @@ $emitLevel($all_queues->findAll(array('parent_id' => 0))); ?> </tbody> </table> + +<script> +$(function() { + var goBaby = function(action) { + var ids = [], that = this, + $form = $(this).closest('form'); + $('input:checkbox.mass:checked', $form).each(function() { + ids.push($(this).val()); + }); + if (ids.length) { + $.confirm(__('You sure?')).then(function() { + $.each(ids, function() { $form.append($('<input type="hidden" name="ids[]">').val(this)); }); + $form.append($('<input type="hidden" name="a" />') + .val($(that).data('action'))); + $form.append($('<input type="hidden" name="count" />') + .val(ids.length)); + $form.attr('action', action); + // I don't know why, but submitting the form doesn't work... + $form.find('[type=submit]').trigger('click'); + }); + } + else { + $.sysAlert(__('Oops'), + __('You need to select at least one item')); + } + }; + $(document).on('click', 'a.queue-action', function(e) { + e.preventDefault(); + goBaby.call(this, $(this).attr('href').substr(1)); + return false; + }); +}); +</script> diff --git a/scp/js/scp.js b/scp/js/scp.js index 780b038fa55bbdbc18011838e090e36c8f9bd68f..fb2a6428a9c8e1884186968236b252f9a197eda7 100644 --- a/scp/js/scp.js +++ b/scp/js/scp.js @@ -163,8 +163,8 @@ var scp_prep = function() { $('form.save, form:has(table.list)').submit(function() { $(window).unbind('beforeunload'); - $('#overlay, #loading').show(); - return true; + $.toggleOverlay(true); + $('#loading').show(); }); $('select#tpl_options').change(function() { diff --git a/scp/queues.php b/scp/queues.php index ac9efb966984e5682b347b5b945c9b47b384e4e1..5c41f79d43b166f700c05bbcbf134284e6551f88 100644 --- a/scp/queues.php +++ b/scp/queues.php @@ -54,6 +54,40 @@ if ($_POST) { __('this queue')); } break; + + case 'mass_process': + $updated = 0; + foreach (CustomQueue::objects() + ->filter(['id__in' => $_POST['ids']]) as $queue + ) { + switch ($_POST['a']) { + case 'enable': + $queue->enable(); + if ($queue->save()) $updated++; + break; + case 'disable': + $queue->disable(); + if ($queue->save()) $updated++; + break; + case 'delete': + if ($queue->delete()) $updated++; + } + } + if (!$updated) { + Messages::error(__( + 'Unable to manage any of the selected queues')); + } + elseif ($_POST['count'] && $updated != $_POST['count']) { + Messages::warning(__( + 'Not all selected items were updated')); + } + elseif ($updated) { + Messages::success(__( + 'Successfully managed selected queues')); + } + + // TODO: Consider redirecting based on the queue root + Http::redirect('settings.php?t=tickets#queues'); } } diff --git a/scp/tickets.php b/scp/tickets.php index 5564c226ec135f2e9268878d29dbca1fa5885bbc..0c8f0b98fcb5c94d97e8e027d6cdd19576dbe42b 100644 --- a/scp/tickets.php +++ b/scp/tickets.php @@ -437,6 +437,7 @@ $queues = CustomQueue::queues() 'flags__hasbit' => CustomQueue::FLAG_PUBLIC, 'staff_id' => $thisstaff->getId(), ))) + ->exclude(['flags__hasbit' => CustomQueue::FLAG_DISABLED]) ->getIterator(); // Start with all the top-level (container) queues