diff --git a/include/ajax.search.php b/include/ajax.search.php index d670d6cafab136e0f5ee4a9c3d517a807126c892..2d9b3cea814a70f9ffa323cba7ebbf4020c69527 100644 --- a/include/ajax.search.php +++ b/include/ajax.search.php @@ -227,12 +227,7 @@ class SearchAjaxAPI extends AjaxController { $queue = CustomQueue::create(); } - // Update queue columns (but without save) - foreach ($_POST['columns'] as $colid) { - $col = QueueColumn::create(array("id" => $colid, "queue" => $queue)); - $col->update($_POST); - $queue->addColumn($col); - } + $queue->update($_POST); $form = $queue->getForm($_POST); $tickets = $queue->getQuery($form); diff --git a/include/class.queue.php b/include/class.queue.php index 3a63724326d3e229575577825f6a85d40e171371..8bf73879a5c4999f5fb4af535922f5dcb91f584e 100644 --- a/include/class.queue.php +++ b/include/class.queue.php @@ -18,6 +18,7 @@ require_once INCLUDE_DIR . 'class.search.php'; class CustomQueue extends SavedSearch { static $meta = array( + 'select_related' => array('parent'), 'joins' => array( 'columns' => array( 'reverse' => 'QueueColumn.queue', @@ -148,9 +149,18 @@ class CustomQueue extends SavedSearch { return 'tickets.php?queue='.$this->getId(); } + function inheritCriteria() { + return $this->flags & self::FLAG_INHERIT_CRITERIA; + } + function getBasicQuery($form=false) { - $root = $this->getRoot(); - $query = $root::objects(); + if ($this->parent && $this->inheritCriteria()) { + $query = $this->parent->getBasicQuery(); + } + else { + $root = $this->getRoot(); + $query = $root::objects(); + } $form = $form ?: $this->loadFromState($this->getCriteria()); return $this->mangleQuerySet($query, $form); } @@ -210,6 +220,7 @@ class CustomQueue extends SavedSearch { $this->title = $vars['name']; $this->parent_id = $vars['parent_id']; $this->filter = $vars['filter']; + $this->setFlag(self::FLAG_INHERIT_CRITERIA, isset($vars['inherit'])); // Update queue columns (but without save) if (isset($vars['columns'])) { diff --git a/include/class.search.php b/include/class.search.php index eea827a83db7d613a6417f27733015d6bb2fc4b7..06a728424e88ee430a659a56cf186a3dc5877c35 100644 --- a/include/class.search.php +++ b/include/class.search.php @@ -664,9 +664,10 @@ class SavedSearch extends VerySimpleModel { 'ordering' => array('sort'), ); - const FLAG_PUBLIC = 0x0001; // Shows up in e'eryone's saved searches - const FLAG_QUEUE = 0x0002; // Shows up in queue navigation - const FLAG_CONTAINER = 0x0004; // Container for other queues ('Open') + const FLAG_PUBLIC = 0x0001; // Shows up in e'eryone's saved searches + const FLAG_QUEUE = 0x0002; // Shows up in queue navigation + const FLAG_CONTAINER = 0x0004; // Container for other queues ('Open') + const FLAG_INHERIT_CRITERIA = 0x0008; // Include criteria from parent var $criteria; @@ -1106,15 +1107,17 @@ class SavedSearch extends VerySimpleModel { } protected function hasFlag($flag) { - return $this->get('flag') & $flag !== 0; + return $this->get('flags') & $flag !== 0; } protected function clearFlag($flag) { - return $this->set('flag', $this->get('flag') & ~$flag); + return $this->set('flags', $this->get('flag') & ~$flag); } - protected function setFlag($flag) { - return $this->set('flag', $this->get('flag') | $flag); + protected function setFlag($flag, $value=true) { + return $value + ? $this->flags |= $flag + : $this->clearFlag($flag); } static function create($vars=array()) { diff --git a/include/staff/queue.inc.php b/include/staff/queue.inc.php index bfe6b4476a7310103594bd1f0be40e13ceb72289..47df03bfb6f7288d6b5d74c847cd46eb61f3e9d6 100644 --- a/include/staff/queue.inc.php +++ b/include/staff/queue.inc.php @@ -56,6 +56,9 @@ else { <br/> <br/> <div><strong><?php echo __("Queue Search Criteria"); ?></strong></div> + <div><input type="checkbox" class="checkbox" name="inherit" <?php + if ($queue->inheritCriteria()) echo 'checked="checked"'; + ?>/> <?php echo __('Include parent search criteria'); ?></div> <hr/> <div class="error"><?php echo $errors['criteria']; ?></div> <div class="advanced-search">