1<?php
2/*********************************************************************
3    filters.php
4
5    Email Filters
6
7    Peter Rotich <peter@osticket.com>
8    Copyright (c)  2006-2013 osTicket
9    http://www.osticket.com
10
11    Released under the GNU General Public License WITHOUT ANY WARRANTY.
12    See LICENSE.TXT for details.
13
14    vim: expandtab sw=4 ts=4 sts=4:
15**********************************************************************/
16require('admin.inc.php');
17include_once(INCLUDE_DIR.'class.filter.php');
18require_once(INCLUDE_DIR.'class.canned.php');
19
20$filter=null;
21if($_REQUEST['id'] && !($filter=Filter::lookup($_REQUEST['id'])))
22    $errors['err']=sprintf(__('%s: Unknown or invalid'), __('ticket filter'));
23
24/* NOTE: Banlist has its own interface*/
25if($filter && $filter->isSystemBanlist())
26    Http::redirect('banlist.php');
27
28if($_POST){
29    switch(strtolower($_POST['do'])){
30        case 'update':
31            if(!$filter){
32                $errors['err']=sprintf(__('%s: Unknown or invalid'), __('ticket filter'));
33            }elseif($filter->update($_POST,$errors)){
34                $msg=sprintf(__('Successfully updated %s.'), __('this ticket filter'));
35            }elseif(!$errors['err']){
36                $errors['err']=sprintf('%s %s',
37                    sprintf(__('Unable to update %s.'), __('this ticket filter')),
38                    __('Correct any errors below and try again.'));
39            }
40            break;
41        case 'add':
42            $filter = new Filter();
43            if ($filter->update($_POST, $errors)) {
44                $msg=sprintf(__('Successfully updated %s.'), __('this ticket filter'));
45                $type = array('type' => 'created');
46                Signal::send('object.created', $filter, $type);
47                $_REQUEST['a']=null;
48            }elseif(!$errors['err']){
49                $errors['err'] = sprintf('%s %s',
50                    sprintf(__('Unable to add %s.'), __('this ticket filter')),
51                    __('Correct any errors below and try again.'));
52            }
53            break;
54        case 'mass_process':
55            if(!$_POST['ids'] || !is_array($_POST['ids']) || !count($_POST['ids'])) {
56                $errors['err'] = sprintf(__('You must select at least %s to process.'),
57                    __('one ticket filter'));
58            } else {
59                $count=count($_POST['ids']);
60                switch(strtolower($_POST['a'])) {
61                    case 'enable':
62                        $num = 0;
63                        foreach (Filter::objects()->filter([
64                            'id__in' => $_POST['ids'],
65                        ]) as $F) {
66                            $F->isactive = 1;
67                            if ($F->save())
68                                $num++;
69                        }
70
71                        if ($num) {
72                            if($num==$count)
73                                $msg = sprintf(__('Successfully enabled %s'),
74                                    _N('selected ticket filter', 'selected ticket filters', $count));
75                            else
76                                $warn = sprintf(__('%1$d of %2$d %3$s enabled'), $num, $count,
77                                    _N('selected ticket filter', 'selected ticket filters', $count));
78                        } else {
79                            $errors['err'] = sprintf(__('Unable to enable %s'),
80                                _N('selected ticket filter', 'selected ticket filters', $count));
81                        }
82                        break;
83                    case 'disable':
84                        $num = 0;
85                        foreach (Filter::objects()->filter([
86                            'id__in' => $_POST['ids'],
87                        ]) as $F) {
88                            $F->isactive = 0;
89                            if ($F->save())
90                                $num++;
91                        }
92
93                        if ($num) {
94                            if($num==$count)
95                                $msg = sprintf(__('Successfully disabled %s'),
96                                    _N('selected ticket filter', 'selected ticket filters', $count));
97                            else
98                                $warn = sprintf(__('%1$d of %2$d %3$s disabled'), $num, $count,
99                                    _N('selected ticket filter', 'selected ticket filters', $count));
100                        } else {
101                            $errors['err'] = sprintf(__('Unable to disable %s'),
102                                _N('selected ticket filter', 'selected ticket filters', $count));
103                        }
104                        break;
105                    case 'delete':
106                        $i=0;
107                        foreach($_POST['ids'] as $k=>$v) {
108                            if(($f=Filter::lookup($v)) && !$f->isSystemBanlist() && $f->delete())
109                                $i++;
110                        }
111
112                        if($i && $i==$count)
113                            $msg = sprintf(__('Successfully deleted %s.'),
114                                _N('selected ticket filter', 'selected ticket filters', $count));
115                        elseif($i>0)
116                            $warn = sprintf(__('%1$d of %2$d %3$s deleted'), $i, $count,
117                                _N('selected ticket filter', 'selected ticket filters', $count));
118                        elseif(!$errors['err'])
119                            $errors['err'] = sprintf(__('Unable to delete %s.'),
120                                 _N('selected ticket filter', 'selected ticket filters', $count));
121                        break;
122                    default:
123                        $errors['err']=sprintf('%s - %s', __('Unknown action'), __('Get technical help!'));
124                }
125            }
126            break;
127        default:
128            $errors['err']=__('Unknown action');
129            break;
130    }
131}
132
133$page='filters.inc.php';
134$tip_namespace = 'manage.filter';
135if($filter || ($_REQUEST['a'] && !strcasecmp($_REQUEST['a'],'add'))) {
136  if($filter) {
137    foreach ($filter->getActions() as $A) {
138      $config = JsonDataParser::parse($A->configuration);
139      if($A->type == 'dept')
140        $dept = Dept::lookup($config['dept_id']);
141
142      if($A->type == 'topic')
143        $topic = Topic::lookup($config['topic_id']);
144    }
145  }
146
147  if($dept && !$dept->isActive())
148    $warn = sprintf(__('%s is assigned a %s that is not active.'), __('Ticket Filter'), __('Department'));
149
150  if($topic && !$topic->isActive())
151    $warn = sprintf(__('%s is assigned a %s that is not active.'), __('Ticket Filter'), __('Help Topic'));
152
153    $page='filter.inc.php';
154}
155
156$nav->setTabActive('manage');
157$ost->addExtraHeader('<meta name="tip-namespace" content="' . $tip_namespace . '" />',
158    "$('#content').data('tipNamespace', '".$tip_namespace."');");
159require(STAFFINC_DIR.'header.inc.php');
160require(STAFFINC_DIR.$page);
161include(STAFFINC_DIR.'footer.inc.php');
162?>
163