1<?php 2 3class QueueSortCreator extends MigrationTask { 4 var $description = "Load customziable ticket queues"; 5 6 function run($time) { 7 $i18n = new Internationalization('en_US'); 8 $columns = $i18n->getTemplate('queue_column.yaml')->getData(); 9 foreach ($columns as $C) { 10 QueueColumn::__create($C); 11 } 12 13 // Save old records 14 $old = db_assoc_array(db_query('SELECT * FROM '.QUEUE_TABLE)); 15 // Truncate Queue table - make room for the new queues starting at ID 1 16 db_query('TRUNCATE TABLE '.QUEUE_TABLE); 17 $queues = $i18n->getTemplate('queue.yaml')->getData(); 18 foreach ($queues as $C) { 19 CustomQueue::__create($C); 20 } 21 22 // Re-insert old saved searches 23 foreach ($old ?: array() as $row) { 24 // Only save entries with "valid" criteria 25 if (!$row['title'] 26 || !($config = JsonDataParser::parse($row['config'], 27 true))) 28 continue; 29 30 $row['root'] = 'T'; // Ticket Queue 31 $row['flags'] = 16; // Saved Search 32 if (($criteria = self::isolateCriteria($config))) 33 $row['config'] = JsonDataEncoder::encode(array( 34 'criteria' => $criteria, 35 'conditions' => array())); 36 CustomQueue::__create(array_intersect_key($row, array_flip( 37 array('staff_id', 'title', 'config', 'flags', 38 'root', 'created', 'updated')))); 39 } 40 41 $columns = $i18n->getTemplate('queue_sort.yaml')->getData(); 42 foreach ($columns as $C) { 43 QueueSort::__create($C); 44 } 45 46 $open = CustomQueue::lookup(1); 47 foreach (QueueSort::forQueue($open) as $qs) { 48 $open->sorts->add($qs); 49 } 50 $open->sorts->saveAll(); 51 52 foreach ($open->getChildren() as $q) { 53 $q->flags |= CustomQueue::FLAG_INHERIT_SORTING; 54 $q->psave(); 55 } 56 57 // Set default queue to 'open' 58 global $cfg; 59 if ($cfg) 60 $cfg->set('default_ticket_queue', 1); 61 } 62 63 static function isolateCriteria($config) { 64 65 if (is_string($config)) 66 $config = JsonDataParser::parse($config, true); 67 68 foreach ($config as $k => $v) { 69 if (substr($k, -7) != '+search') 70 continue; 71 72 // Fix up some entries 73 list($name,) = explode('+', $k, 2); 74 if (!isset($config["{$name}+method"])) 75 $config["{$name}+method"] = isset($config["{$name}+includes"]) 76 ? 'includes' : 'set'; 77 } 78 79 return CustomQueue::isolateCriteria($config); 80 } 81} 82return 'QueueSortCreator'; 83