1<?php
2/**
3 * Copyright 2002-2017 Horde LLC (http://www.horde.org/)
4 *
5 * See the enclosed file LICENSE for license information (BSD). If you
6 * did not receive this file, see http://www.horde.org/licenses/bsdl.php.
7 *
8 * @author Chuck Hagenbuch <chuck@horde.org>
9 */
10
11require_once __DIR__ . '/../lib/Application.php';
12Horde_Registry::appInit('whups', array(
13    'permission' => array('whups:admin', Horde_Perms::EDIT)
14));
15
16Whups::addTopbarSearch();
17
18// Set up the page config vars.
19$showExtraForm = null;
20
21// Setup vars with all relevant info.
22$vars = Horde_Variables::getDefaultVariables();
23if (!$vars->exists('action')) {
24    $vars->set('action', 'queue');
25}
26
27// Admin actions.
28$adminurl = Horde::selfUrl(false, false);
29$tabs = new Horde_Core_Ui_Tabs('action', $vars);
30$tabs->addTab(_("_Edit Queues"), $adminurl, 'queue');
31$tabs->addTab(_("Edit _Types"), $adminurl, 'type');
32$tabs->addTab(_("Queue/Type Matri_x"), $adminurl, 'mtmatrix');
33$tabs->addTab(_("Sen_d Reminders"), $adminurl, 'reminders');
34
35$renderer = new Horde_Form_Renderer();
36
37// start the page
38function _open($isopened = false)
39{
40    global $notification, $vars;
41    static $opened;
42
43    if ($isopened) {
44        return $opened;
45    }
46
47    if (is_null($opened)) {
48        global $registry, $prefs, $browser, $conf, $notification, $title, $tabs;
49
50        $opened = true;
51        $title = _("Administration");
52        $GLOBALS['page_output']->header(array(
53            'title' => $title
54        ));
55        $notification->notify(array('listeners' => 'status'));
56        echo $tabs->render($vars->get('action'));
57    }
58}
59
60function _editStateForms()
61{
62    global $vars, $renderer, $adminurl;
63    _open();
64    $form1 = new Whups_Form_Admin_EditStateStepOne($vars);
65    $form1->renderActive($renderer, $vars, $adminurl, 'post');
66    echo '<br />';
67    $form2 = new Whups_Form_Admin_DefaultState($vars);
68    $form2->renderActive($renderer, $vars, $adminurl, 'post');
69    echo '<br />';
70    $form3 = new Whups_Form_Admin_AddState($vars);
71    $form3->renderActive($renderer, $vars, $adminurl, 'post');
72}
73
74function _editPriorityForms()
75{
76    global $vars, $renderer, $adminurl;
77    _open();
78    $form1 = new Whups_Form_Admin_EditPriorityStepOne($vars);
79    $form1->renderActive($renderer, $vars, $adminurl, 'post');
80    echo '<br />';
81    $form2 = new Whups_Form_Admin_DefaultPriority($vars);
82    $form2->renderActive($renderer, $vars, $adminurl, 'post');
83    echo '<br />';
84    $form3 = new Whups_Form_Admin_AddPriority($vars);
85    $form3->renderActive($renderer, $vars, $adminurl, 'post');
86}
87
88switch ($vars->get('formname')) {
89case 'whups_form_admin_addtype':
90    $form1 = new Whups_Form_Admin_AddType($vars);
91    if ($form1->validate($vars)) {
92        // First, add the type
93        $tid = $whups_driver->addType($vars->get('name'),
94                                      $vars->get('description'));
95        _open();
96        $vars->add('type', $tid);
97        $form2 = new Whups_Form_Admin_EditTypeStepTwo($vars);
98        $form2->open($renderer, $vars, $adminurl, 'post');
99
100        // render the stage 1 form readonly
101        $form1->preserve($vars);
102        $renderer->beginInactive(sprintf(_("Add Type %s"), _("- Stage 1")));
103        $renderer->renderFormInactive($form1, $vars);
104        $renderer->end();
105
106        // render the second stage form
107        $renderer->beginActive(sprintf(_("Add Type %s"), _("- Stage 2")));
108        $renderer->renderFormActive($form2, $vars);
109        $renderer->submit();
110        $renderer->end();
111
112        $form2->close($renderer);
113    } else {
114        _open();
115        $form1->renderActive($renderer, $vars, $adminurl, 'post');
116    }
117    break;
118
119case 'whups_form_admin_edittypestepone':
120    $form1 = new Whups_Form_Admin_EditTypeStepOne($vars);
121    $vars->set('action', 'type');
122    if ($form1->validate($vars)) {
123        switch ($vars->get('submitbutton')) {
124        case _("Edit Type"):
125            _open();
126            $form2 = new Whups_Form_Admin_EditTypeStepTwo($vars);
127            $form2->renderActive($renderer, $vars, $adminurl, 'post');
128            break;
129
130        case _("Delete Type"):
131            _open();
132            $form2 = new Whups_Form_Admin_DeleteType($vars);
133            $form2->renderActive($renderer, $vars, $adminurl, 'post');
134            break;
135
136        case _("Clone Type"):
137            _open();
138            $form2 = new Whups_Form_Admin_CloneType($vars);
139            $form2->renderActive($renderer, $vars, $adminurl, 'post');
140            break;
141        }
142    } else {
143        _open();
144        $form1->renderActive($renderer, $vars, $adminurl, 'post');
145    }
146    break;
147
148case 'whups_form_admin_clonetype':
149    $form = new Whups_Form_Admin_CloneType($vars);
150    if ($form->validate($vars)) {
151        // Create a new type and copy all attributes of the clone master to
152        // the new type.
153        $tid = $vars->get('type');
154        $type = $whups_driver->getType($tid);
155        $states = $whups_driver->getAllStateInfo($tid);
156        $priorities = $whups_driver->getAllPriorityInfo($tid);
157        $attributes = $whups_driver->getAttributeInfoForType($tid);
158
159        // Create the new type.
160        $nid = $ntype = $whups_driver->addType(
161            $vars->get('name'), $vars->get('description'));
162
163        // Add the states.
164        foreach ($states as $s) {
165            $whups_driver->addState(
166                $nid, $s['state_name'], $s['state_description'], $s['state_category']);
167        }
168
169        // Add the priorities.
170        foreach ($priorities as $p) {
171            $whups_driver->addPriority(
172                $nid, $p['priority_name'], $p['priority_description']);
173        }
174
175        // Add attributes.
176        foreach ($attributes as $attribute) {
177            $a = $whups_driver->getAttributeDesc($attribute['attribute_id']);
178            $whups_driver->addAttributeDesc(
179                $nid, $a['name'], $a['description'], $a['type'], $a['params'], $a['required']);
180        }
181
182        $notification->push(
183            sprintf(_("Successfully Cloned %s to %s."), $type['name'], $vars->get('name')),
184                    'horde.success');
185        Horde::url('admin/?action=type', true)->redirect();
186    } else {
187        _open();
188        $form->renderActive($renderer, $vars, $adminurl, 'post');
189    }
190    break;
191
192case 'whups_form_admin_edittypesteptwo':
193    $form = new Whups_Form_Admin_EditTypeStepTwo($vars);
194    if ($form->validate($vars)) {
195        try {
196            $whups_driver->updateType(
197                $vars->get('type'),
198                $vars->get('name'),
199                $vars->get('description'));
200            $notification->push(sprintf(_("The type \"%s\" has been modified."),
201                                        $vars->get('name')),
202                                'horde.success');
203            Horde::url('admin/?action=type', true)->redirect();
204        } catch (Whups_Exception $e) {
205            $notification->push(
206                _("There was an error modifying the type:") . ' ' . $e->getMessage(),
207                'horde.error');
208            _open();
209            $form->renderActive($renderer, $vars, $adminurl, 'post');
210        }
211    } else {
212        _open();
213        $form->renderActive($renderer, $vars, $adminurl, 'post');
214    }
215    break;
216
217case 'whups_form_admin_createdefaultstates':
218    $type = $vars->get('type');
219    foreach ($conf['states'] as $state) {
220        if ($state['active'] == 'active') {
221            $whups_driver->addState($type, $state['name'],
222                                    $state['desc'], $state['category']);
223        }
224    }
225
226    _open();
227    $form = new Whups_Form_Admin_EditTypeStepTwo($vars);
228    $form->renderActive($renderer, $vars, $adminurl, 'post');
229    break;
230
231case 'whups_form_admin_createdefaultpriorities':
232    $type = $vars->get('type');
233    foreach ($conf['priorities'] as $priority) {
234        if ($priority['active'] == 'active') {
235            $whups_driver->addPriority($type, $priority['name'],
236                                       $priority['desc']);
237        }
238    }
239
240    _open();
241    $form = new Whups_Form_Admin_EditTypeStepTwo($vars);
242    $form->renderActive($renderer, $vars, $adminurl, 'post');
243    break;
244
245case 'whups_form_admin_deletetype':
246    $form = new Whups_Form_Admin_DeleteType($vars);
247    if ($form->validate($vars)) {
248        if ($vars->get('yesno') == 1) {
249            try {
250                $whups_driver->deleteType($vars->get('type'));
251                $notification->push(
252                    _("The type has been deleted."), 'horde.success');
253            } catch (Whups_Exception $e) {
254                $notification->push(
255                    _("There was an error deleting the type:") . ' ' . $e->getMessage(),
256                    'horde.error');
257            }
258        } else {
259            $notification->push(_("The type was not deleted."),
260                                'horde.message');
261        }
262        $vars->set('action', 'type');
263    } else {
264        _open();
265        $form->renderActive($renderer, $vars, $adminurl, 'post');
266    }
267    break;
268
269case 'whups_form_admin_addqueue':
270    $form = new Whups_Form_Admin_AddQueue($vars);
271    if ($form->validate($vars)) {
272        try {
273            $result = $whups_driver->addQueue(
274                $vars->get('name'),
275                $vars->get('description'),
276                $vars->get('slug'),
277                $vars->get('email'));
278
279            $notification->push(
280                sprintf(_("The queue \"%s\" has been created."),
281                        $vars->get('name')),
282                'horde.success');
283
284            _open();
285            $vars->set('queue', $result);
286            $form2 = new Whups_Form_Admin_EditQueueStepTwo($vars);
287            $form2->renderActive($renderer, $vars, $adminurl, 'post');
288        } catch (Whups_Exception $e) {
289            $notification->push(
290                _("There was an error creating the queue:") . ' ' . $e->getMessage(),
291                'horde.error');
292            _open();
293            $form->renderActive($renderer, $vars, $adminurl, 'post');
294        }
295    } else {
296        _open();
297        $form->renderActive($renderer, $vars, $adminurl, 'post');
298    }
299    break;
300
301case 'whups_form_admin_editqueuestepone':
302    $form1 = new Whups_Form_Admin_EditQueueStepOne($vars);
303    if ($form1->validate($vars)) {
304        switch ($vars->get('submitbutton')) {
305        case _("Edit Queue"):
306            _open();
307            $form2 = new Whups_Form_Admin_EditQueueStepTwo($vars);
308            $form2->renderActive($renderer, $vars, $adminurl, 'post');
309            break;
310
311        case _("Delete Queue"):
312            _open();
313            $form2 = new Whups_Form_Admin_DeleteQueue($vars);
314            $form2->renderActive($renderer, $vars, $adminurl, 'post');
315            break;
316        }
317    } else {
318        _open();
319        $form1->renderActive($renderer, $vars, $adminurl, 'post');
320    }
321    break;
322
323case 'whups_form_admin_editqueuestepone':
324case 'whups_form_admin_editqueuesteptwo':
325    $form = new Whups_Form_Admin_EditQueueStepTwo($vars);
326
327    if ($vars->get('formname') == 'whups_form_admin_editqueuesteptwo' &&
328        $form->validate($vars)) {
329        try {
330            $whups_driver->updateQueue(
331                $vars->get('queue'),
332                $vars->get('name'),
333                $vars->get('description'),
334                $vars->get('types'),
335                $vars->get('versioned'),
336                $vars->get('slug'),
337                $vars->get('email'),
338                $vars->get('default'));
339            $notification->push(
340                _("The queue has been modified."), 'horde.success');
341            _open();
342            $form->renderInactive($renderer, $vars);
343        } catch (Whups_Exception $e) {
344            $notification->push(
345                _("There was an error editing the queue:") . ' ' . $e->getMessage(),
346                'horde.error');
347        }
348    } else {
349        _open();
350        $form->renderActive($renderer, $vars, $adminurl, 'post');
351    }
352    break;
353
354case 'whups_form_admin_deletequeue':
355    $form = new Whups_Form_Admin_DeleteQueue($vars);
356    if ($form->validate($vars)) {
357        if ($vars->get('yesno') == 1) {
358            try {
359                $whups_driver->deleteQueue($vars->get('queue'));
360                $notification->push(
361                    _("The queue has been deleted."),
362                    'horde.success');
363            } catch (Horde_Exception $e) {
364                $notification->push(
365                    _("There was an error deleting the queue:") . ' ' . $e->getMessage(),
366                    'horde.error');
367            }
368        } else {
369            $notification->push(
370                _("The queue was not deleted."),
371                'horde.message');
372        }
373    } else {
374        _open();
375        $form->renderActive($renderer, $vars, $adminurl, 'post');
376    }
377    break;
378
379case 'whups_form_admin_addstate':
380    $vars->set('action', 'type');
381    $form = new Whups_Form_Admin_AddState($vars);
382    if ($form->validate($vars)) {
383        try {
384            $whups_driver->addState(
385                $vars->get('type'),
386                $vars->get('name'),
387                $vars->get('description'),
388                $vars->get('category'));
389
390            $typename = $whups_driver->getType($vars->get('type'));
391            $typename = $typename['name'];
392            $notification->push(
393                sprintf(_("The state \"%s\" has been added to %s."),
394                        $vars->get('name'), $typename),
395                'horde.success');
396        } catch (Whups_Exception $e) {
397            $notification->push(
398                _("There was an error creating the state:") . ' ' . $e->getMessage(),
399                'horde.error');
400        }
401        $vars = new Horde_Variables(array('type' => $vars->get('type')));
402        _editStateForms();
403    } else {
404        _open();
405        $form->renderActive($renderer, $vars, $adminurl, 'post');
406    }
407    break;
408
409case 'whups_form_admin_editstatestepone':
410    $vars->set('action', 'type');
411    if (!$vars->get('submitbutton')) {
412        _editStateForms();
413    } else {
414        _open();
415        $form1 = new Whups_Form_Admin_EditStateStepOne($vars);
416        if ($form1->validate($vars)) {
417            switch ($vars->get('submitbutton')) {
418            case _("Edit State"):
419                $form2 = new Whups_Form_Admin_EditStateStepTwo($vars);
420                $form2->renderActive($renderer, $vars, $adminurl, 'post');
421                break;
422
423            case _("Delete State"):
424                $form2 = new Whups_Form_Admin_DeleteState($vars);
425                $form2->renderActive($renderer, $vars, $adminurl, 'post');
426                break;
427            }
428        } else {
429            $form1->renderActive($renderer, $vars, $adminurl, 'post');
430        }
431    }
432    break;
433
434case 'whups_form_admin_editstatesteptwo':
435    $vars->set('action', 'type');
436    $form = new Whups_Form_Admin_EditStateStepTwo($vars);
437    if ($form->validate($vars)) {
438        try {
439            $whups_driver->updateState(
440                $vars->get('state'),
441                $vars->get('name'),
442                $vars->get('description'),
443                $vars->get('category'));
444
445            $notification->push(
446                _("The state has been modified."),
447                'horde.success');
448            _open();
449            $form->renderInactive($renderer, $vars);
450        } catch (Whups_Exception $e) {
451            $notification->push(
452                _("There was an error editing the state:") . ' ' . $e->getMessage(),
453                'horde.error');
454        }
455        $vars = new Horde_Variables(array('type' => $vars->get('type')));
456        _editStateForms();
457    } else {
458        _open();
459        $form->renderActive($renderer, $vars, $adminurl, 'post');
460    }
461    break;
462
463case 'whups_form_admin_defaultstate':
464    $vars->set('action', 'type');
465    $form = new Whups_Form_Admin_DefaultState($vars);
466    if ($form->validate($vars)) {
467        try {
468            $whups_driver->setDefaultState(
469                $vars->get('type'), $vars->get('state'));
470            $notification->push(
471                _("The default state has been set."),
472                'horde.success');
473        } catch (Whups_Exception $e) {
474            $notification->push(
475                _("There was an error setting the default state:") . ' ' . $e->getMessage(),
476                'horde.error');
477        }
478        _editStateForms();
479    } else {
480        _open();
481        $form->renderActive($renderer, $vars, $adminurl, 'post');
482    }
483    break;
484
485case 'whups_form_admin_deletestate':
486    $vars->set('action', 'type');
487    $form = new Whups_Form_Admin_DeleteState($vars);
488    if ($form->validate($vars)) {
489        if ($vars->get('yesno') == 1) {
490            try {
491                $whups_driver->deleteState($vars->get('state'));
492                $notification->push(
493                    _("The state has been deleted."),
494                    'horde.success');
495            } catch (Whups_Exception $e) {
496                $notification->push(
497                    _("There was an error deleting the state:") . ' ' . $e->getMessage(),
498                    'horde.error');
499            }
500        } else {
501            $notification->push(_("The state was not deleted."),
502                                'horde.message');
503        }
504
505        _editStateForms();
506    } else {
507        _open();
508        $form->renderActive($renderer, $vars, $adminurl, 'post');
509    }
510    break;
511
512case 'whups_form_admin_addpriority':
513    $vars->set('action', 'type');
514    $form = new Whups_Form_Admin_AddPriority($vars);
515    if ($form->validate($vars)) {
516        try {
517            $whups_driver->addPriority(
518                $vars->get('type'),
519                $vars->get('name'),
520                $vars->get('description'));
521
522            $typename = $whups_driver->getType($vars->get('type'));
523            $typename = $typename['name'];
524            $notification->push(
525                sprintf(_("The priority \"%s\" has been added to %s."),
526                        $vars->get('name'), $typename),
527                'horde.success');
528            } catch (Whups_Exception $e) {
529            $notification->push(
530                _("There was an error creating the priority:") . ' ' . $e->getMessage(),
531                'horde.error');
532            }
533        $vars = new Horde_Variables(array('type' => $vars->get('type')));
534        _editPriorityForms();
535    } else {
536        _open();
537        $form->renderActive($renderer, $vars, $adminurl, 'post');
538    }
539    break;
540
541case 'whups_form_admin_editprioritystepone':
542    $vars->set('action', 'type');
543    if (!$vars->get('submitbutton')) {
544        _editPriorityForms();
545    } else {
546        _open();
547        $form1 = new Whups_Form_Admin_EditPriorityStepOne($vars);
548        if ($form1->validate($vars)) {
549            switch ($vars->get('submitbutton')) {
550            case _("Edit Priority"):
551                $form2 = new Whups_Form_Admin_EditPriorityStepTwo($vars);
552                $form2->renderActive($renderer, $vars, $adminurl, 'post');
553                break;
554
555            case _("Delete Priority"):
556                $form2 = new Whups_Form_Admin_DeletePriority($vars);
557                $form2->renderActive($renderer, $vars, $adminurl, 'post');
558                break;
559            }
560        } else {
561            $form1->renderActive($renderer, $vars, $adminurl, 'post');
562        }
563    }
564    break;
565
566case 'whups_form_admin_editprioritysteptwo':
567    $vars->set('action', 'type');
568    $form = new Whups_Form_Admin_EditPriorityStepTwo($vars);
569    if ($form->validate($vars)) {
570        try {
571            $whups_driver->updatePriority(
572                $vars->get('priority'),
573                $vars->get('name'),
574                $vars->get('description'));
575
576            $notification->push(
577                _("The priority has been modified."),
578                'horde.success');
579
580            _open();
581            $form->renderInactive($renderer, $vars);
582        } catch (Whups_Exception $e) {
583            $notification->push(
584                _("There was an error editing the priority:") . ' ' . $e->getMessage(),
585                'horde.error');
586        }
587
588        $vars = new Horde_Variables(array('type' => $vars->get('type')));
589        _editPriorityForms();
590    } else {
591        _open();
592        $form->renderActive($renderer, $vars, $adminurl, 'post');
593    }
594    break;
595
596case 'whups_form_admin_defaultpriority':
597    $vars->set('action', 'type');
598    $form = new Whups_Form_Admin_DefaultPriority($vars);
599    if ($form->validate($vars)) {
600        try {
601            $whups_driver->setDefaultPriority(
602                $vars->get('type'), $vars->get('priority'));
603            $notification->push(
604                _("The default priority has been set."),
605                'horde.success');
606        } catch (Whups_Exception $e) {
607            $notification->push(
608                _("There was an error setting the default priority:") . ' ' . $e->getMessage(),
609                'horde.error');
610        }
611        _editPriorityForms();
612    } else {
613        _open();
614        $form->renderActive($renderer, $vars, $adminurl, 'post');
615    }
616    break;
617
618case 'whups_form_admin_deletepriority':
619    $vars->set('action', 'type');
620    $form = new Whups_Form_Admin_DeletePriority($vars);
621    if ($form->validate($vars)) {
622        if ($vars->get('yesno') == 1) {
623            try {
624                $whups_driver->deletePriority($vars->get('priority'));
625                $notification->push(
626                    _("The priority has been deleted."),
627                    'horde.success');
628            } catch (Whups_Exception $e) {
629                $notification->push(
630                    _("There was an error deleting the priority:") . ' '
631                    . $e->getMessage(),
632                    'horde.error');
633            }
634        } else {
635            $notification->push(
636                _("The priority was not deleted."),
637                'horde.message');
638        }
639        _editPriorityForms();
640    } else {
641        _open();
642        $form->renderActive($renderer, $vars, $adminurl, 'post');
643    }
644    break;
645
646case 'whups_form_admin_adduser':
647    $form = new Whups_Form_Admin_AddUser($vars);
648    if ($form->validate($vars)) {
649        $info = $whups_driver->getQueue($vars->get('queue'));
650        try {
651            $whups_driver->addQueueUser(
652                $vars->get('queue'), $vars->get('user'));
653
654            $user = $vars->get('user');
655            if (is_array($user)) {
656                $userinfo = array();
657                foreach ($user as $userID) {
658                    $userinfo[] = Whups::formatUser($userID);
659                }
660                $userinfo = implode(', ', $userinfo);
661            } else {
662                $userinfo = Whups::formatUser($user);
663            }
664            $notification->push(
665                sprintf(_("%s added to those responsible for \"%s\""),
666                        $userinfo, $info['name']),
667                'horde.success');
668        } catch (Whups_Exception $e) {
669            $notification->push(
670                sprintf(_("There was an error adding \"%s\" to the responsible list for \"%s\":"),
671                        Whups::formatUser($vars->get('user')),
672                        $info['name'])
673                . ' ' . $e->getMessage(),
674                'horde.error');
675        }
676    }
677
678    _open();
679    $form1 = new Whups_Form_Admin_EditUser($vars);
680    $form1->renderActive($renderer, $vars, $adminurl, 'post');
681    echo '<br />';
682    $vars = new Horde_Variables(array('queue' => $vars->get('queue')));
683    $form->renderActive($renderer, $vars, $adminurl, 'post');
684    break;
685
686case 'edituserform':
687    $form1 = new Whups_Form_Admin_EditUser($vars);
688    $form2 = new Whups_Form_Admin_AddUser($vars);
689
690    _open();
691
692    $form1->renderActive($renderer, $vars, $adminurl, 'post');
693    echo '<br />';
694
695    $vars = new Horde_Variables(array('queue' => $vars->get('queue')));
696    $form2 = new Whups_Form_Admin_AddUser($vars);
697    $form2->renderActive($renderer, $vars, $adminurl, 'post');
698    break;
699
700case 'whups_form_admin_edituser':
701    $form = new Whups_Form_Admin_EditUser($vars);
702    if ($form->validate($vars)) {
703        $info = $whups_driver->getQueue($vars->get('queue'));
704        try {
705            $whups_driver->removeQueueUser($vars->get('queue'), $vars->get('user'));
706
707            $notification->push(
708                sprintf(_("\"%s\" is no longer among those responsible for \"%s\""),
709                        Whups::formatUser($vars->get('user')), $info['name']),
710                'horde.success');
711        } catch (Whups_Exception $e) {
712                $notification->push(
713                    sprintf(_("There was an error removing \"%s\" from the responsible list for \"%s\":"),
714                            Whups::formatUser($vars->get('user')), $info['name'])
715                    . ' ' . $e->getMessage(),
716                    'horde.error');
717        }
718    }
719
720    _open();
721    $vars = new Horde_Variables(array('queue' => $vars->get('queue')));
722    $form = new Whups_Form_Admin_EditUser($vars);
723    $form->renderActive($renderer, $vars, $adminurl, 'get');
724    $form1 = new Whups_Form_Admin_AddUser($vars);
725    $form1->renderActive($renderer, $vars, $adminurl, 'get');
726    break;
727
728case 'whups_form_admin_addversion':
729    $form = new Whups_Form_Admin_AddVersion($vars);
730    if ($form->validate($vars)) {
731        try {
732            $whups_driver->addVersion(
733                $vars->get('queue'),
734                $vars->get('name'),
735                $vars->get('description'),
736                $vars->get('active') == 'on');
737
738            $queuename = $whups_driver->getQueue($vars->get('queue'));
739            $queuename = $queuename['name'];
740            $notification->push(
741                sprintf(_("The version \"%s\" has been added to %s."),
742                        $vars->get('name'), $queuename),
743                'horde.success');
744        } catch (Whups_Exception $e) {
745            $notification->push(
746                _("There was an error creating the version:") . ' ' . $e->getMessage(),
747                'horde.error');
748        }
749
750        _open();
751        $vars = new Horde_Variables(array('queue' => $vars->get('queue')));
752        $form1 = new Whups_Form_Admin_EditVersionStepOne($vars);
753        $form1->renderActive($renderer, $vars, $adminurl, 'post');
754        $form2 = new Whups_Form_Admin_AddVersion($vars);
755        $form2->renderActive($renderer, $vars, $adminurl, 'post');
756    } else {
757        _open();
758        $form->renderActive($renderer, $vars, $adminurl, 'post');
759    }
760    break;
761
762case 'whups_form_admin_editversionstepone':
763    $form1 = new Whups_Form_Admin_EditVersionStepOne($vars);
764
765    _open();
766
767    if (!$vars->get('submitbutton')) {
768        $form1->renderActive($renderer, $vars, $adminurl, 'post');
769
770        $form2 = new Whups_Form_Admin_AddVersion($vars);
771        $form2->renderActive($renderer, $vars, $adminurl, 'post');
772    } else {
773        if ($form1->validate($vars)) {
774            switch ($vars->get('submitbutton')) {
775            case _("Edit Version"):
776                $form2 = new Whups_Form_Admin_EditVersionStepTwo($vars);
777                $form2->renderActive($renderer, $vars, $adminurl, 'post');
778                break;
779
780            case _("Delete Version"):
781                $form2 = new Whups_Form_Admin_DeleteVersion($vars);
782                $form2->renderActive($renderer, $vars, $adminurl, 'post');
783                break;
784            }
785        } else {
786            $form1->renderActive($renderer, $vars, $adminurl, 'post');
787        }
788    }
789    break;
790
791case 'whups_form_admin_editversionsteptwo':
792    $form = new Whups_Form_Admin_EditVersionStepTwo($vars);
793    if ($form->validate($vars)) {
794        try {
795            $whups_driver->updateVersion(
796                $vars->get('version'),
797                $vars->get('name'),
798                $vars->get('description'),
799                $vars->get('active') == 'on');
800
801            $notification->push(
802                _("The version has been modified."),
803                'horde.success');
804
805            _open();
806            $form->renderInactive($renderer, $vars);
807        } catch (Whups_Exception $e) {
808            $notification->push(
809                _("There was an error editing the version:") . ' ' . $e->getMessage(),
810                'horde.error');
811        }
812
813        _open();
814        $vars = new Horde_Variables(array('queue' => $vars->get('queue')));
815        $form1 = new Whups_Form_Admin_EditVersionStepOne($vars);
816        $form1->renderActive($renderer, $vars, $adminurl, 'post');
817        $form2 = new Whups_Form_Admin_AddVersion($vars);
818        $form2->renderActive($renderer, $vars, $adminurl, 'post');
819    } else {
820        _open();
821        $form->renderActive($renderer, $vars, $adminurl, 'post');
822    }
823    break;
824
825case 'whups_form_admin_deleteversion':
826    $form = new Whups_Form_Admin_DeleteVersion($vars);
827    if ($form->validate($vars)) {
828        if ($vars->get('yesno') == 1) {
829            try {
830                $whups_driver->deleteVersion($vars->get('version'));
831                $notification->push(
832                    _("The version has been deleted."),
833                    'horde.success');
834            } catch (Whups_Exception $e) {
835                $notification->push(
836                    _("There was an error deleting the version:") . ' ' . $e->getMessage(),
837                    'horde.error');
838            }
839        } else {
840            $notification->push(_("The version was not deleted."),
841                                'horde.message');
842        }
843
844        _open();
845        $form1 = new Whups_Form_Admin_EditVersionStepOne($vars);
846        $form1->renderActive($renderer, $vars, $adminurl, 'post');
847        $form2 = new Whups_Form_Admin_AddVersion($vars);
848        $form2->renderActive($renderer, $vars, $adminurl, 'post');
849    } else {
850        _open();
851        $form->renderActive($renderer, $vars, $adminurl, 'post');
852    }
853    break;
854
855case 'whups_form_admin_addattribute':
856case 'whups_form_admin_addattribute_reload':
857    $form = new Whups_Form_Admin_AddAttribute($vars);
858    $vars->set('action', 'type');
859    if ($vars->get('formname') == 'whups_form_admin_addattribute' &&
860        $form->validate($vars)) {
861
862        try {
863            $whups_driver->addAttributeDesc(
864                $vars->get('type'),
865                $vars->get('attribute_name'),
866                $vars->get('attribute_description'),
867                $vars->get('attribute_type'),
868                $vars->get('attribute_params', array()),
869                $vars->get('attribute_required'));
870
871            $typename = $whups_driver->getType($vars->get('type'));
872            $typename = $typename['name'];
873            $notification->push(
874                sprintf(_("The attribute \"%s\" has been added to %s."),
875                        $vars->get('attribute_name'), $typename),
876                'horde.success');
877            $vars = new Horde_Variables(array('type' => $vars->get('type')));
878        } catch (Whups_Exception $e) {
879            $notification->push(
880                _("There was an error creating the attribute:") . ' ' . $e->getMessage(),
881                'horde.error');
882        }
883
884        _open();
885        $form1 = new Whups_Form_Admin_EditAttributeStepOne($vars);
886        $form1->renderActive($renderer, $vars, $adminurl, 'post');
887        echo '<br />';
888        $form2 = new Whups_Form_Admin_AddAttribute($vars);
889        $form2->renderActive($renderer, $vars, $adminurl, 'post');
890    } else {
891        _open();
892        $form->renderActive($renderer, $vars, $adminurl, 'post');
893    }
894    break;
895
896case 'whups_form_admin_editattributestepone':
897    $form1 = new Whups_Form_Admin_EditAttributeStepOne($vars);
898    $vars->set('action', 'type');
899    _open();
900    if (!$vars->get('submitbutton')) {
901        $form1->renderActive($renderer, $vars, $adminurl, 'post');
902        echo '<br />';
903
904        $form2 = new Whups_Form_Admin_AddAttribute($vars);
905        $form2->renderActive($renderer, $vars, $adminurl, 'post');
906    } else {
907        if ($form1->validate($vars)) {
908            switch ($vars->get('submitbutton')) {
909            case _("Edit Attribute"):
910                $form2 = new Whups_Form_Admin_EditAttributeStepTwo($vars);
911                $form2->renderActive($renderer, $vars, $adminurl, 'post');
912                break;
913
914            case _("Delete Attribute"):
915                $form2 = new Whups_Form_Admin_DeleteAttribute($vars);
916                $form2->renderActive($renderer, $vars, $adminurl, 'post');
917                break;
918            }
919        } else {
920            $form1->renderActive($renderer, $vars, $adminurl, 'post');
921        }
922    }
923    break;
924
925case 'whups_form_admin_editattributesteptwo':
926case 'whups_form_admin_editattributesteptwo_reload':
927    $form = new Whups_Form_Admin_EditAttributeStepTwo($vars);
928    $vars->set('action', 'type');
929    if ($vars->get('formname') == 'whups_form_admin_editattributesteptwo' &&
930        $form->validate($vars)) {
931        $form->getInfo($vars, $info);
932        try {
933            $whups_driver->updateAttributeDesc(
934                $info['attribute'],
935                $info['attribute_name'],
936                $info['attribute_description'],
937                $info['attribute_type'],
938                !empty($info['attribute_params']) ? $info['attribute_params'] : array(),
939                $info['attribute_required']);
940
941            $notification->push(
942                _("The attribute has been modified."),
943                'horde.success');
944
945            _open();
946            $form->renderInactive($renderer, $vars);
947            echo '<br />';
948            $vars = new Horde_Variables(array('type' => $vars->get('type')));
949        } catch (Whups_Exception $e) {
950            $notification->push(
951                _("There was an error editing the attribute:") . ' ' . $e->getMessage(),
952                'horde.error');
953        }
954
955        _open();
956        $form1 = new Whups_Form_Admin_EditAttributeStepOne($vars);
957        $form1->renderActive($renderer, $vars, $adminurl, 'post');
958        echo '<br />';
959        $form2 = new Whups_Form_Admin_AddAttribute($vars);
960        $form2->renderActive($renderer, $vars, $adminurl, 'post');
961    } else {
962        _open();
963        $form->renderActive($renderer, $vars, $adminurl, 'post');
964    }
965    break;
966
967case 'whups_form_admin_deleteattribute':
968    $form = new Whups_Form_Admin_DeleteAttribute($vars);
969    if ($form->validate($vars)) {
970        if ($vars->get('yesno') == 1) {
971            try {
972                $whups_driver->deleteAttributeDesc($vars->get('attribute'));
973
974                $notification->push(
975                    _("The attribute has been deleted."),
976                    'horde.success');
977            } catch (Whups_Exception $e) {
978                $notification->push(
979                    _("There was an error deleting the attribute:")
980                    . ' ' . $e->getMessage(),
981                    'horde.error');
982            }
983        } else {
984            $notification->push(
985                _("The attribute was not deleted."),
986                'horde.message');
987        }
988
989        _open();
990        $form1 = new Whups_Form_Admin_EditAttributeStepOne($vars);
991        $form1->renderActive($renderer, $vars, $adminurl, 'post');
992        $form2 = new Whups_Form_Admin_AddAttribute($vars);
993        $form2->renderActive($renderer, $vars, $adminurl, 'post');
994    } else {
995        _open();
996        $form->renderActive($renderer, $vars, $adminurl, 'post');
997    }
998    break;
999
1000case 'whups_form_admin_addreply':
1001    $form = new Whups_Form_Admin_AddReply($vars);
1002    $vars->set('action', 'type');
1003    if ($form->validate($vars)) {
1004        try {
1005            $result = $whups_driver->addReply(
1006                $vars->get('type'),
1007                $vars->get('reply_name'),
1008                $vars->get('reply_text'));
1009
1010            $typename = $whups_driver->getType($vars->get('type'));
1011            $typename = $typename['name'];
1012            $notification->push(
1013                sprintf(_("The form reply \"%s\" has been added to %s."),
1014                        $vars->get('reply_name'), $typename),
1015                'horde.success');
1016            _open();
1017            $vars->set('reply', $result);
1018            $form = new Whups_Form_Admin_EditReplyStepTwo($vars);
1019            $form->renderInactive($renderer, $vars);
1020        } catch (Whups_Exception $e) {
1021            $notification->push(
1022                _("There was an error creating the form reply:") . ' ' . $e->getMessage(),
1023                'horde.error');
1024            _open();
1025            $form->renderActive($renderer, $vars, $adminurl, 'post');
1026        }
1027    } else {
1028        _open();
1029        $form->renderActive($renderer, $vars, $adminurl, 'post');
1030    }
1031    break;
1032
1033case 'whups_form_admin_editreplystepone':
1034    $form1 = new Whups_Form_Admin_EditReplyStepOne($vars);
1035    $vars->set('action', 'type');
1036    _open();
1037    if (!$vars->get('submitbutton')) {
1038        $form1->renderActive($renderer, $vars, $adminurl, 'post');
1039        echo '<br />';
1040
1041        $form2 = new Whups_Form_Admin_AddReply($vars);
1042        $form2->renderActive($renderer, $vars, $adminurl, 'post');
1043    } else {
1044        if ($form1->validate($vars)) {
1045            switch ($vars->get('submitbutton')) {
1046            case _("Edit Form Reply"):
1047                $form2 = new Whups_Form_Admin_EditReplyStepTwo($vars);
1048                $form2->renderActive($renderer, $vars, $adminurl, 'post');
1049                break;
1050
1051            case _("Delete Form Reply"):
1052                $form2 = new Whups_Form_Admin_DeleteReply($vars);
1053                $form2->renderActive($renderer, $vars, $adminurl, 'post');
1054                break;
1055            }
1056        } else {
1057            $form1->renderActive($renderer, $vars, $adminurl, 'post');
1058        }
1059    }
1060    break;
1061
1062case 'whups_form_admin_editreplysteptwo':
1063    $form = new Whups_Form_Admin_EditReplyStepTwo($vars);
1064    $vars->set('action', 'type');
1065    if ($vars->get('formname') == 'whups_form_admin_editreplysteptwo' &&
1066        $form->validate($vars)) {
1067        try {
1068            $whups_driver->updateReply(
1069                $vars->get('reply'),
1070                $vars->get('reply_name'),
1071                $vars->get('reply_text'));
1072            $notification->push(
1073                    _("The form reply has been modified."),
1074                    'horde.success');
1075            _open();
1076            $form->renderInactive($renderer, $vars);
1077            echo '<br />';
1078            $vars = new Horde_Variables(array('type' => $vars->get('type')));
1079        } catch (Whups_Exception $e) {
1080            $notification->push(
1081                _("There was an error editing the form reply:") . ' ' . $e->getMessage(),
1082                'horde.error');
1083        }
1084
1085        _open();
1086        $form1 = new Whups_Form_Admin_EditReplyStepOne($vars);
1087        $form1->renderActive($renderer, $vars, $adminurl, 'post');
1088        echo '<br />';
1089        $form2 = new Whups_Form_Admin_AddReply($vars);
1090        $form2->renderActive($renderer, $vars, $adminurl, 'post');
1091    } else {
1092        _open();
1093        $form->renderActive($renderer, $vars, $adminurl, 'post');
1094    }
1095    break;
1096
1097case 'whups_form_admin_deletereply':
1098    $form = new Whups_Form_Admin_DeleteReply($vars);
1099    if ($form->validate($vars)) {
1100        if ($vars->get('yesno') == 1) {
1101            try {
1102                $whups_driver->deleteReply($vars->get('reply'));
1103                $notification->push(
1104                    _("The form reply has been deleted."),
1105                    'horde.success');
1106            } catch (Whups_Exception $e) {
1107                $notification->push(
1108                    _("There was an error deleting the form reply:") . ' ' . $e->getMessage(),
1109                    'horde.error');
1110            }
1111        } else {
1112            $notification->push(
1113                _("The form reply was not deleted."),
1114                'horde.message');
1115        }
1116
1117        _open();
1118        $form1 = new Whups_Form_Admin_EditReplyStepOne($vars);
1119        $form1->renderActive($renderer, $vars, $adminurl, 'post');
1120        echo '<br />';
1121        $form2 = new Whups_Form_Admin_AddReply($vars);
1122        $form2->renderActive($renderer, $vars, $adminurl, 'post');
1123    } else {
1124        _open();
1125        $form->renderActive($renderer, $vars, $adminurl, 'post');
1126    }
1127    break;
1128
1129case 'whups_form_sendreminder':
1130    $form = new Whups_Form_SendReminder($vars);
1131    if ($form->validate($vars)) {
1132        try {
1133            Whups::sendReminders($vars);
1134            $notification->push(_("Reminders were sent."), 'horde.success');
1135        } catch (Whups_Exception $e) {
1136            $notification->push($e, 'horde.error');
1137            _open();
1138            $form->renderActive($renderer, $vars, $adminurl, 'post');
1139        }
1140    } else {
1141        _open();
1142        $form->renderActive($renderer, $vars, $adminurl, 'post');
1143    }
1144    break;
1145
1146case 'mtmatrix':
1147    $vars->set('action', 'mtmatrix');
1148    $queues = $whups_driver->getQueues();
1149    $types = $whups_driver->getAllTypes();
1150    $matrix = $vars->get('matrix');
1151
1152    // Validate data.
1153    $pairs = array();
1154    if (!empty($matrix)) {
1155        foreach ($matrix as $mid => $mtypes) {
1156            if (isset($queues[$mid])) {
1157                foreach ($mtypes as $tid => $on) {
1158                    if (isset($types[$tid])) {
1159                        $pairs[] = array($mid, $tid);
1160                    }
1161                }
1162            }
1163        }
1164    }
1165
1166    try {
1167        $whups_driver->updateTypesQueues($pairs);
1168        $notification->push(
1169            _("Associations updated successfully."),
1170            'horde.success');
1171    } catch (Whups_Exception $e) {
1172        $notification->push($e, 'horde.error');
1173    }
1174    break;
1175}
1176
1177if (!_open(true)) {
1178    // Check for actions.
1179    switch ($vars->get('action')) {
1180    case 'type':
1181        if (count($whups_driver->getAllTypes())) {
1182            $main1 = new Whups_Form_Admin_EditTypeStepOne($vars);
1183        }
1184        $main2 = new Whups_Form_Admin_AddType($vars);
1185        break;
1186
1187    case 'reminders':
1188        $main1 = new Whups_Form_SendReminder($vars);
1189        break;
1190
1191    case 'mtmatrix':
1192        _open();
1193        $queues = $whups_driver->getQueues();
1194        $types = $whups_driver->getAllTypes();
1195        $tlink = Horde::url('admin/?formname=whups_form_admin_edittypestepone');
1196        $mlink = Horde::url('admin/?formname=whups_form_admin_editqueuestepone');
1197        require WHUPS_TEMPLATES . '/admin/mtmatrix.inc';
1198        break;
1199
1200    case 'queue':
1201        if (count($whups_driver->getQueues())) {
1202            $main1 = new Whups_Form_Admin_EditQueueStepOne($vars);
1203        }
1204        if ($registry->hasMethod('tickets/listQueues') == $registry->getApp()) {
1205            $main2 = new Whups_Form_Admin_AddQueue($vars);
1206        }
1207        break;
1208    }
1209
1210    _open();
1211    if (isset($main1)) {
1212        $main1->renderActive($renderer, $vars, $adminurl, 'get');
1213    }
1214    if (isset($main1) && isset($main2)) {
1215        echo '<br />';
1216    }
1217    if (isset($main2)) {
1218        $main2->renderActive($renderer, $vars, $adminurl, 'get');
1219    }
1220}
1221
1222_open();
1223$page_output->footer();
1224