Files
server/usr/share/psa-horde/imp/lib/Prefs/Special/Flag.php
2026-01-07 20:52:11 +01:00

145 lines
4.4 KiB
PHP

<?php
/**
* Copyright 2012-2017 Horde LLC (http://www.horde.org/)
*
* See the enclosed file COPYING for license information (GPL). If you
* did not receive this file, see http://www.horde.org/licenses/gpl.
*
* @category Horde
* @copyright 2012-2017 Horde LLC
* @license http://www.horde.org/licenses/gpl GPL
* @package IMP
*/
/**
* Special prefs handling for the 'flagmanagement' preference.
*
* @author Michael Slusarz <slusarz@horde.org>
* @category Horde
* @copyright 2012-2017 Horde LLC
* @license http://www.horde.org/licenses/gpl GPL
* @package IMP
*/
class IMP_Prefs_Special_Flag implements Horde_Core_Prefs_Ui_Special
{
/**
*/
public function init(Horde_Core_Prefs_Ui $ui)
{
global $prefs;
if ($prefs->isLocked('msgflags') && $prefs->isLocked('msgflags_user')) {
$ui->nobuttons = true;
}
}
/**
*/
public function display(Horde_Core_Prefs_Ui $ui)
{
global $injector, $page_output, $prefs;
if (!$ui->nobuttons) {
$page_output->addScriptFile('hordecore.js', 'horde');
$page_output->addScriptFile('colorpicker.js', 'horde');
$page_output->addScriptFile('flagprefs.js');
}
$page_output->addInlineJsVars(array(
'ImpFlagPrefs.new_prompt' => _("Please enter the label for the new flag:"),
'ImpFlagPrefs.confirm_delete' => _("Are you sure you want to delete this flag?")
));
$view = new Horde_View(array(
'templatePath' => IMP_TEMPLATES . '/prefs'
));
$view->addHelper('FormTag');
$view->addHelper('Tag');
$view->locked = $prefs->isLocked('msgflags');
$view->picker_img = Horde_Themes_Image::tag('colorpicker.png', array(
'alt' => _("Color Picker")
));
$out = array();
$flaglist = $injector->getInstance('IMP_Flags')->getList();
foreach ($flaglist as $val) {
$hash = $val->hash;
$bgid = 'bg_' . $hash;
$color = $val->bgdefault ? '' : $val->bgcolor;
$tmp = array();
if ($val instanceof IMP_Flag_User) {
$tmp['label'] = htmlspecialchars($val->label);
$tmp['label_name'] = 'label_' . $hash;
$tmp['user'] = true;
} else {
$tmp['icon'] = $val->span;
$tmp['label'] = Horde::label($bgid, $val->label);
}
$tmp['color'] = $color;
$tmp['colorid'] = $bgid;
$tmp['colorstyle'] = 'color:' . $val->fgcolor . ';' .
(strlen($color) ? ('background-color:' . $color . ';') : '');
$out[] = $tmp;
}
$view->flags = $out;
return $view->render('flags');
}
/**
*/
public function update(Horde_Core_Prefs_Ui $ui)
{
global $injector, $notification;
$imp_flags = $injector->getInstance('IMP_Flags');
if ($ui->vars->flag_action == 'add') {
$notification->push(sprintf(_("Added flag \"%s\"."), $ui->vars->flag_data), 'horde.success');
$imp_flags->addFlag($ui->vars->flag_data);
return;
}
// Don't set updated on these actions. User may want to do more
// actions.
$update = false;
foreach ($imp_flags->getList() as $val) {
$hash = $val->hash;
switch ($ui->vars->flag_action) {
case 'delete':
if ($ui->vars->flag_data == ('bg_' . $hash)) {
unset($imp_flags[$val->id]);
$notification->push(sprintf(_("Deleted flag \"%s\"."), $val->label), 'horde.success');
}
break;
default:
/* Change labels for user-defined flags. */
if ($val instanceof IMP_Flag_User) {
$label = $ui->vars->get('label_' . $hash);
if (strlen($label) && ($label != $val->label)) {
$imp_flags->updateFlag($val->id, 'label', $label);
$update = true;
}
}
/* Change background for all flags. */
$bg = strtolower($ui->vars->get('bg_' . $hash));
if ($bg != $val->bgcolor) {
$imp_flags->updateFlag($val->id, 'bgcolor', $bg);
$update = true;
}
break;
}
}
return $update;
}
}