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