3
* This file contains all Horde_Form extensions required for editing tasks.
5
* See the enclosed file COPYING for license information (GPL). If you
6
* did not receive this file, see http://www.horde.org/licenses/gpl.
12
* The Nag_Form_Task class provides the form for adding and editing a task.
14
* @author Jan Schneider <jan@horde.org>
17
class Nag_Form_Task extends Horde_Form
22
* @param Horde_Form_Variables $vars The form variables.
23
* @param string $title The form title.
25
* @return Nag_Form_Task
27
public function __construct($vars, $title = '')
29
parent::__construct($vars, $title);
31
$tasklist_enums = array();
32
foreach (Nag::listTasklists(false, Horde_Perms::EDIT) as $tl_id => $tl) {
33
$tasklist_enums[$tl_id] = Nag::getLabel($tl);
35
$tasklist = $vars->get('tasklist_id');
36
if (empty($tasklist)) {
37
reset($tasklist_enums);
38
$tasklist = key($tasklist_enums);
42
1 => '1 ' . _("(highest)"),
46
5 => '5 ' . _("(lowest)")
48
$this->addHidden('', 'mobile', 'boolean', false);
49
$this->addHidden('', 'task_id', 'text', false);
50
$this->addHidden('', 'old_tasklist', 'text', false);
51
$this->addHidden('', 'url', 'text', false);
52
$this->addVariable(_("Name"), 'name', 'text', true);
53
$this->addHidden('', 'uid', 'text', false);
54
$this->addHidden('', 'owner', 'text', false);
56
if (!$GLOBALS['prefs']->isLocked('default_tasklist') &&
57
count($tasklist_enums) > 1) {
58
$v = $this->addVariable(
59
_("Task List"), 'tasklist_id', 'enum', true, false, false,
60
array($tasklist_enums));
61
if (!$vars->get('mobile')) {
62
$v->setAction(Horde_Form_Action::factory('reload'));
66
if (!$vars->get('mobile')) {
67
$tasks = Nag::listTasks(array(
68
'tasklists' => array($tasklist),
69
'complete' => Nag::VIEW_FUTURE_INCOMPLETE,
70
'include_history' => false)
72
$task_enums = array('' => _("No parent task"));
74
while ($task = $tasks->each()) {
75
if ($vars->get('task_id') == $task->id) {
78
$task_enums[htmlspecialchars($task->id)] = str_repeat(' ', $task->indent * 4) . htmlspecialchars($task->name);
81
$v = $this->addVariable(
82
_("Parent task"), 'parent', 'enum', false, false, false, array($task_enums));
83
$v->setOption('htmlchars', true);
86
$this->addVariable(_("Tags"), 'tags', 'Nag:NagTags', false);
88
// Only display the delete button if this is an existing task and the
89
// user has HORDE_PERMS::DELETE
90
$share = $GLOBALS['nag_shares']->getShare($tasklist);
91
$delete = $share->hasPermission($GLOBALS['registry']->getAuth(), Horde_Perms::DELETE) && $vars->get('task_id');
93
if (!$vars->get('mobile')) {
95
$users = $share->listUsers(Horde_Perms::READ);
96
$groups = $share->listGroups(Horde_Perms::READ);
98
$horde_group = $GLOBALS['injector']->getInstance('Horde_Group');
99
foreach ($groups as $group) {
100
$users = array_merge($users,
101
$horde_group->listUsers($group));
104
$users = array_flip($users);
106
foreach (array_keys($users) as $user) {
107
$identity = $GLOBALS['injector']->getInstance('Horde_Core_Factory_Identity')->create($user);
108
$fullname = $identity->getValue('fullname');
109
$users[$user] = strlen($fullname) ? $fullname : $user;
112
$this->addVariable(_("Assignee"), 'assignee', 'enum', false, false,
113
null, array($users, _("None")));
116
$this->addVariable(_("Private?"), 'private', 'boolean', false);
117
$this->addVariable(_("Due By"), 'due', 'Nag:NagDue', false);
118
if (!$vars->get('mobile')) {
119
$this->addVariable(_("Delay Start Until"), 'start', 'Nag:NagStart', false);
121
$this->addVariable(_("Alarm"), 'alarm', 'Nag:NagAlarm', false);
123
if (!$vars->get('mobile')) {
124
$v = $this->addVariable(_("Notification"), 'methods', 'Nag:NagMethod', false);
125
$v->setAction(Horde_Form_Action::factory('reload'));
127
$v = $this->addVariable(_("Priority"), 'priority', 'enum', false, false, false, array($priorities));
130
$this->addVariable(_("Estimated Time"), 'estimate', 'number', false);
131
$this->addVariable(_("Completed?"), 'completed', 'boolean', false);
135
$description = Horde::callHook('description_help', array(), 'nag');
136
} catch (Horde_Exception_HookNotSet $e) {
139
$this->addVariable(_("Description"), 'desc', 'longtext', false, false, $description);
141
$buttons = array(array('value' => _("Save")));
143
$buttons[] = array('value' => _("Delete"), 'name' => 'deletebutton', 'class' => 'horde-delete');
145
if (!$vars->get('task_id')) {
146
$buttons[] = array('value' => _("Save and New"), 'name' => 'savenewbutton', 'class' => 'horde-create');
148
$this->setButtons($buttons);
151
public function renderActive()
153
return parent::renderActive($this->getRenderer(array('varrenderer_driver' => array('nag', 'nag'))), $this->_vars, Horde::url('t/save'), 'post');
b'\\ No newline at end of file'