1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125
|
<?php
/**
* Copyright 2013-2017 Horde LLC (http://www.horde.org/)
*
* See the enclosed file LICENSE for license information (ASL). If you
* did not receive this file, see http://www.horde.org/licenses/apache.
*
* @category Horde
* @copyright 2013-2017 Horde LLC
* @license http://www.horde.org/licenses/apache ASL
* @package Ingo
*/
/**
* Blacklist page.
*
* @author Mike Cochrane <mike@graftonhall.co.nz>
* @author Michael Slusarz <slusarz@horde.org>
* @category Horde
* @copyright 2013-2017 Horde LLC
* @license http://www.horde.org/licenses/apache ASL
* @package Ingo
*/
class Ingo_Basic_Blacklist extends Ingo_Basic_Base
{
/**
*/
protected function _init()
{
global $injector, $notification, $page_output;
$this->_assertCategory(Ingo_Storage::ACTION_BLACKLIST, _("Blacklist"));
$ingo_script = $injector->getInstance('Ingo_Factory_Script')->create(Ingo::RULE_BLACKLIST);
$ingo_storage = $injector->getInstance('Ingo_Factory_Storage')->create();
$flagonly = ($ingo_script && in_array(Ingo_Storage::ACTION_FLAGONLY, $ingo_script->availableActions()));
/* Token checking & perform requested actions. */
switch ($this->_checkToken(array('rule_update'))) {
case 'rule_update':
switch ($this->vars->action) {
case 'delete':
$folder = '';
break;
case 'mark':
$folder = Ingo::BLACKLIST_MARKER;
break;
case 'folder':
$folder = $this->validateMbox('actionvalue');
break;
default:
$folder = null;
break;
}
if (!$flagonly && ($folder == Ingo::BLACKLIST_MARKER)) {
$notification->push("Not supported by this script generator.", 'horde.error');
} else {
try {
$blacklist = Ingo::updateListFilter($this->vars->blacklist, Ingo_Storage::ACTION_BLACKLIST);
$blacklist->setBlacklistFolder($folder);
$ingo_storage->store($blacklist);
$notification->push(_("Changes saved."), 'horde.success');
Ingo_Script_Util::update();
} catch (Ingo_Exception $e) {
$notification->push($e->getMessage(), $e->getCode());
}
}
break;
}
/* Get the blacklist object. */
if (!isset($blacklist)) {
try {
$blacklist = $ingo_storage->retrieve(Ingo_Storage::ACTION_BLACKLIST);
} catch (Ingo_Exception $e) {
$notification->push($e);
$blacklist = new Ingo_Storage_Blacklist();
}
}
/* Create the folder listing. */
$blacklist_folder = $blacklist->getBlacklistFolder();
$folder_list = Ingo_Flist::select($blacklist_folder, 'actionvalue');
/* Get the blacklist rule. */
$bl_rule = $ingo_storage->retrieve(Ingo_Storage::ACTION_FILTERS)->findRule(Ingo_Storage::ACTION_BLACKLIST);
/* Prepare the view. */
$view = new Horde_View(array(
'templatePath' => INGO_TEMPLATES . '/basic/blacklist'
));
$view->addHelper('Horde_Core_View_Helper_Help');
$view->addHelper('Horde_Core_View_Helper_Label');
$view->addHelper('FormTag');
$view->addHelper('Tag');
$view->addHelper('Text');
$view->blacklist = implode("\n", $blacklist->getBlacklist());
$view->disabled = !empty($bl_rule['disable']);
$view->flagonly = $flagonly;
$view->folder = $blacklist_folder;
$view->folderlist = $folder_list;
$view->formurl = $this->_addToken(self::url());
$page_output->addScriptFile('blacklist.js');
$page_output->addInlineJsVars(array(
'IngoBlacklist.filtersurl' => strval(Ingo_Basic_Filters::url()->setRaw(true))
));
$this->header = _("Blacklist Edit");
$this->output = $view->render('blacklist');
}
/**
*/
static public function url(array $opts = array())
{
return Horde::url('basic.php')->add('page', 'blacklist');
}
}
|