diff --git a/include/class.forms.php b/include/class.forms.php index e926ae07af7b75a32f23d9918b38d9f3f4b371f1..901ae34c04bfd92e787efe6b38d71d7782058c9d 100644 --- a/include/class.forms.php +++ b/include/class.forms.php @@ -2257,6 +2257,11 @@ class AssigneeField extends ChoiceField { $id = key($id); } + if ($id[0] == 's') + return Staff::lookup(substr($id, 1)); + elseif ($id[0] == 't') + return Team::lookup(substr($id, 1)); + return $id; } @@ -3941,13 +3946,8 @@ class AssignmentForm extends Form { function getAssignee() { - if (!isset($this->_assignee)) { - $value = $this->getField('assignee')->getClean(); - if ($value[0] == 's') - $this->_assignee = Staff::lookup(substr($value, 1)); - elseif ($value[0] == 't') - $this->_assignee = Team::lookup(substr($value, 1)); - } + if (!isset($this->_assignee)) + $this->_assignee = $this->getField('assignee')->getClean(); return $this->_assignee; } @@ -3958,6 +3958,7 @@ class AssignmentForm extends Form { return array('dept_id' =>$dept); }; } + } class TransferForm extends Form { diff --git a/include/class.task.php b/include/class.task.php index 5f9206e8069ced89007d7cace68f54d35ec2d4fb..348e693932f62acef199d42ab493035399e286af 100644 --- a/include/class.task.php +++ b/include/class.task.php @@ -1129,9 +1129,11 @@ class Task extends TaskModel implements RestrictedAccess, Threadable { } static function create($vars=false) { - global $cfg; + global $thisstaff, $cfg; - if (!is_array($vars)) + if (!is_array($vars) + || !$thisstaff + || !$thisstaff->hasPerm(Task::PERM_CREATE, false)) return null; $task = parent::create(array( @@ -1142,15 +1144,14 @@ class Task extends TaskModel implements RestrictedAccess, Threadable { 'created' => new SqlFunction('NOW'), 'updated' => new SqlFunction('NOW'), )); - // Save internal fields. - if ($vars['internal_formdata']['staff_id']) - $task->staff_id = $vars['internal_formdata']['staff_id']; + if ($vars['internal_formdata']['dept_id']) $task->dept_id = $vars['internal_formdata']['dept_id']; if ($vars['internal_formdata']['duedate']) $task->duedate = $vars['internal_formdata']['duedate']; - $task->save(true); + if (!$task->save(true)) + return false; // Add dynamic data $task->addDynamicData($vars['default_formdata']); @@ -1158,6 +1159,23 @@ class Task extends TaskModel implements RestrictedAccess, Threadable { // Create a thread + message. $thread = TaskThread::create($task); $thread->addDescription($vars); + + + $task->logEvent('created', null, $thisstaff); + + // Get role for the dept + $role = $thisstaff->getRole($task->dept_id); + + // Assignment + if ($vars['internal_formdata']['assignee'] + // skip assignment if the user doesn't have perm. + && $role->hasPerm(Task::PERM_ASSIGN)) { + $_errors = array(); + $form = AssignmentForm::instantiate(array( + 'assignee' => $vars['internal_formdata']['assignee'])); + $task->assign($form, $_errors); + } + Signal::send('task.created', $task); return $task; @@ -1348,7 +1366,7 @@ extends AbstractForm { 'required' => true, 'layout' => new GridFluidCell(6), )), - 'staff_id' => new AssigneeField(array( + 'assignee' => new AssigneeField(array( 'id'=>2, 'label' => __('Assignee'), 'required' => false,