function quick_add_task() { if (logged_user()->isGuest()) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } $notAllowedMember = ''; if (!ProjectTask::canAdd(logged_user(), active_context(), $notAllowedMember)) { if (str_starts_with($notAllowedMember, '-- req dim --')) { flash_error(lang('must choose at least one member of', str_replace_first('-- req dim --', '', $notAllowedMember, $in))); } else { flash_error(lang('no context permissions to add', lang("tasks"), $notAllowedMember)); } ajx_current("empty"); return; } ajx_current("empty"); $task = new ProjectTask(); $task_data = array_var($_POST, 'task'); $parent_id = array_var($task_data, 'parent_id', 0); $parent = ProjectTasks::findById($parent_id); if (is_array($task_data)) { $task_data['due_date'] = getDateValue(array_var($task_data, 'task_due_date')); $task_data['start_date'] = getDateValue(array_var($task_data, 'task_start_date')); if ($task_data['due_date'] instanceof DateTimeValue) { $duetime = getTimeValue(array_var($task_data, 'task_due_time')); if (is_array($duetime)) { $task_data['due_date']->setHour(array_var($duetime, 'hours')); $task_data['due_date']->setMinute(array_var($duetime, 'mins')); } $task_data['due_date']->advance(logged_user()->getTimezone() * -3600); $task_data['use_due_time'] = is_array($duetime); } if ($task_data['start_date'] instanceof DateTimeValue) { $starttime = getTimeValue(array_var($task_data, 'task_start_time')); if (is_array($starttime)) { $task_data['start_date']->setHour(array_var($starttime, 'hours')); $task_data['start_date']->setMinute(array_var($starttime, 'mins')); } $task_data['start_date']->advance(logged_user()->getTimezone() * -3600); $task_data['use_start_time'] = is_array($starttime); } if (config_option("wysiwyg_tasks")) { $task_data['type_content'] = "html"; $task_data['text'] = preg_replace("/[\n|\r|\n\r]/", '', array_var($task_data, 'text')); } else { $task_data['type_content'] = "text"; } $task_data['object_type_id'] = $task->getObjectTypeId(); $task->setFromAttributes($task_data); if (array_var($task_data, 'is_completed', false) == 'true') { $task->setCompletedOn(DateTimeValueLib::now()); $task->setCompletedById(logged_user()->getId()); } try { DB::beginWork(); $task->save(); $totalMinutes = array_var($task_data, 'hours') * 60 + array_var($task_data, 'minutes'); $task->setTimeEstimate($totalMinutes); $task->save(); $gb_member_id = array_var($task_data, 'member_id'); $member_ids = array(); $persons_dim = Dimensions::findByCode('feng_persons'); $persons_dim_id = $persons_dim instanceof Dimension ? $persons_dim->getId() : 0; if ($parent) { if (count($parent->getMembers()) > 0) { foreach ($parent->getMembers() as $member) { if ($member->getDimensionId() != $persons_dim_id) { $member_ids[] = $member->getId(); } } } $task->setMilestoneId($parent->getMilestoneId()); $task->save(); } if (count($member_ids) == 0) { $member_ids = active_context_members(false); } if ($gb_member_id && is_numeric($gb_member_id)) { $member_ids[] = $gb_member_id; } $object_controller = new ObjectController(); $object_controller->add_to_members($task, $member_ids); //Add new work timeslot for this task // if (array_var($task_data,'hours') != '' && array_var($task_data,'hours') > 0){ // $hours = array_var($task_data, 'hours'); // $hours = - $hours; // // $timeslot = new Timeslot(); // $dt = DateTimeValueLib::now(); // $dt2 = DateTimeValueLib::now(); // $timeslot->setEndTime($dt); // $dt2 = $dt2->add('h', $hours); // $timeslot->setStartTime($dt2); // $timeslot->setContactId(logged_user()->getId()); // $timeslot->setObjectId($task->getId()); // $timeslot->save(); // } ApplicationLogs::createLog($task, ApplicationLogs::ACTION_ADD); $assignee = $task->getAssignedToContact(); if ($assignee instanceof Contact) { $task->subscribeUser($assignee); } // create default reminder $reminder = new ObjectReminder(); $reminder->setMinutesBefore(1440); $reminder->setType("reminder_email"); $reminder->setContext("due_date"); $reminder->setObject($task); $reminder->setUserId(0); $date = $task->getDueDate(); if (!isset($minutes)) { $minutes = 0; } if ($date instanceof DateTimeValue) { $rdate = new DateTimeValue($date->getTimestamp() - $minutes * 60); $reminder->setDate($rdate); } $reminder->save(); $subs = array(); if (config_option('multi_assignment') && Plugins::instance()->isActivePlugin('crpm')) { $json_subtasks = json_decode(array_var($_POST, 'multi_assignment')); $line = 0; foreach ($json_subtasks as $json_subtask) { $subtasks[$line]['assigned_to_contact_id'] = $json_subtask->assigned_to_contact_id; $subtasks[$line]['name'] = $json_subtask->name; $subtasks[$line]['time_estimate_hours'] = $json_subtask->time_estimate_hours; $subtasks[$line]['time_estimate_minutes'] = $json_subtask->time_estimate_minutes; $line++; } Hook::fire('save_subtasks', $task, $subtasks); $subtasks = ProjectTasks::findAll(array('conditions' => '`parent_id` = ' . DB::escape($task->getId()))); // findAll foreach ($subtasks as $sub) { $subs[] = $sub->getArrayInfo(); } } // subscribe $task->subscribeUser(logged_user()); DB::commit(); // notify asignee if (array_var($task_data, 'notify') == 'true') { try { Notifier::taskAssigned($task); } catch (Exception $e) { } // try } ajx_extra_data(array("task" => $task->getArrayInfo(), 'subtasks' => $subs)); flash_success(lang('success add task', $task->getObjectName())); } catch (Exception $e) { DB::rollback(); flash_error($e->getMessage()); } // try } // if }
function quick_add_task() { if (logged_user()->isGuest()) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } ajx_current("empty"); $task = new ProjectTask(); $task_data = array_var($_POST, 'task'); $parent_id = array_var($task_data, 'parent_id', 0); $parent = ProjectTasks::findById($parent_id); $project = Projects::findById(array_var($task_data, 'project_id', 0)); if (!$project instanceof Project) { if ($parent instanceof ProjectTask) { $project = $parent->getProject(); } else { $milestone_id = array_var($task_data, 'milestone_id', null); if ($milestone_id) { $milestone = ProjectMilestones::findById($milestone_id); if ($milestone) { $project = $milestone->getProject(); } } if (!$project instanceof Project) { $project = active_or_personal_project(); } } } if (!ProjectTask::canAdd(logged_user(), $project)) { flash_error(lang('no access permissions')); return; } // if if (is_array($task_data)) { $task_data['due_date'] = getDateValue(array_var($task_data, 'task_due_date')); $task_data['start_date'] = getDateValue(array_var($task_data, 'task_start_date')); $task->setFromAttributes($task_data); //$task->setOrder(ProjectTasks::maxOrder(array_var($task_data, "parent_id", 0), array_var($task_data, "milestone_id", 0))); // Set assigned to $assigned_to = explode(':', array_var($task_data, 'assigned_to', '')); $company_id = array_var($assigned_to, 0, 0); $user_id = array_var($assigned_to, 1, 0); $can_assign = can_assign_task_to_company_user(logged_user(), $task, $company_id, $user_id); if ($can_assign !== true) { flash_error($can_assign); return; } $task->setAssignedToCompanyId($company_id); $task->setAssignedToUserId($user_id); $task->setIsPrivate(false); // Not used, but defined as not null. if (array_var($task_data, 'is_completed', false) == 'true') { $task->setCompletedOn(DateTimeValueLib::now()); $task->setCompletedById(logged_user()->getId()); } try { DB::beginWork(); $task->save(); $task->setProject($project); $task->setTagsFromCSV(array_var($task_data, 'tags')); //Add new work timeslot for this task if (array_var($task_data, 'hours') != '' && array_var($task_data, 'hours') > 0) { $hours = array_var($task_data, 'hours'); $hours = -$hours; $timeslot = new Timeslot(); $dt = DateTimeValueLib::now(); $dt2 = DateTimeValueLib::now(); $timeslot->setEndTime($dt); $dt2 = $dt2->add('h', $hours); $timeslot->setStartTime($dt2); $timeslot->setUserId(logged_user()->getId()); $timeslot->setObjectManager("ProjectTasks"); $timeslot->setObjectId($task->getId()); $timeslot->save(); } // subscribe $task->subscribeUser(logged_user()); ApplicationLogs::createLog($task, $task->getWorkspaces(), ApplicationLogs::ACTION_ADD); $assignee = $task->getAssignedToUser(); if ($assignee instanceof User) { $task->subscribeUser($assignee); } // create default reminder $reminder = new ObjectReminder(); $reminder->setMinutesBefore(1440); $reminder->setType("reminder_email"); $reminder->setContext("due_date"); $reminder->setObject($task); $reminder->setUserId(0); $date = $task->getDueDate(); if (!isset($minutes)) { $minutes = 0; } if ($date instanceof DateTimeValue) { $rdate = new DateTimeValue($date->getTimestamp() - $minutes * 60); $reminder->setDate($rdate); } $reminder->save(); DB::commit(); // notify asignee if (array_var($task_data, 'notify') == 'true') { try { Notifier::taskAssigned($task); } catch (Exception $e) { } // try } ajx_extra_data(array("task" => $task->getArrayInfo())); flash_success(lang('success add task', $task->getTitle())); } catch (Exception $e) { DB::rollback(); flash_error($e->getMessage()); } // try } // if }
/** * Add new task list * * @access public * @param void * @return null */ function add_list() { if (!ProjectTaskList::canAdd(logged_user(), active_project())) { flash_error(lang('no access permissions')); $this->redirectToReferer(get_url('task')); } // if $task_list = new ProjectTaskList(); $task_list->setProjectId(active_project()->getId()); $task_list_data = array_var($_POST, 'task_list'); if (!is_array($task_list_data)) { $task_list_data = array('milestone_id' => array_var($_GET, 'milestone_id'), 'start_date' => DateTimeValueLib::now(), 'is_private' => config_option('default_private', false), 'task0' => array('start_date' => DateTimeValueLib::now()), 'task1' => array('start_date' => DateTimeValueLib::now()), 'task2' => array('start_date' => DateTimeValueLib::now()), 'task3' => array('start_date' => DateTimeValueLib::now()), 'task4' => array('start_date' => DateTimeValueLib::now()), 'task5' => array('start_date' => DateTimeValueLib::now())); // array } else { for ($i = 0; $i < 6; $i++) { $due_date = $_POST["task_list_task{$i}_due_date"]; $task_list_data["task{$i}"]['due_date'] = $due_date; $start_date = $_POST["task_list_task{$i}_start_date"]; $task_list_data["task{$i}"]['start_date'] = $start_date; } } // if tpl_assign('task_list_data', $task_list_data); tpl_assign('task_list', $task_list); if (is_array(array_var($_POST, 'task_list'))) { if (isset($_POST['task_list_start_date'])) { $task_list_data['start_date'] = DateTimeValueLib::makeFromString($_POST['task_list_start_date']); } if (isset($_POST['task_list_due_date'])) { $task_list_data['due_date'] = DateTimeValueLib::makeFromString($_POST['task_list_due_date']); } //$task_list_data['due_date'] = DateTimeValueLib::make(0, 0, 0, array_var($_POST, 'task_list_due_date_month', 1), array_var($_POST, 'task_list_due_date_day', 1), array_var($_POST, 'task_list_due_date_year', 1970)); $task_list->setFromAttributes($task_list_data); if (!logged_user()->isMemberOfOwnerCompany()) { $task_list->setIsPrivate(false); } $tasks = array(); for ($i = 0; $i < 6; $i++) { if (isset($task_list_data["task{$i}"]) && is_array($task_list_data["task{$i}"]) && trim(array_var($task_list_data["task{$i}"], 'text')) != '') { $assigned_to = explode(':', array_var($task_list_data["task{$i}"], 'assigned_to', '')); if (isset($_POST["task_list_task{$i}_start_date"])) { $start_date = DateTimeValueLib::makeFromString($_POST["task_list_task{$i}_start_date"]); } if (isset($_POST["task_list_task{$i}_due_date"])) { $due_date = DateTimeValueLib::makeFromString($_POST["task_list_task{$i}_due_date"]); } $tasks[] = array('text' => array_var($task_list_data["task{$i}"], 'text'), 'order' => 1 + $i, 'start_date' => $start_date, 'due_date' => $due_date, 'assigned_to_company_id' => array_var($assigned_to, 0, 0), 'assigned_to_user_id' => array_var($assigned_to, 1, 0), 'send_notification' => array_var($task_list_data["task{$i}"], 'send_notification')); // array } // if } // for try { DB::beginWork(); $task_list->save(); if (plugin_active('tags')) { $task_list->setTagsFromCSV(array_var($task_list_data, 'tags')); } foreach ($tasks as $task_data) { $task = new ProjectTask(); $task->setFromAttributes($task_data); $task_list->attachTask($task); $task->save(); tpl_assign('task', $task); // notify user if (array_var($task_data, 'send_notification') == 'checked') { try { $notify_people = array(); $project_companies = array(); if ($task->getAssignedTo() == null) { $project_companies = active_project()->getCompanies(); } if ($task->getAssignedTo() instanceof Company) { $project_companies = array($task->getAssignedTo()); } if ($task->getAssignedTo() instanceof User) { $notify_people = array($task->getAssignedTo()); } foreach ($project_companies as $project_company) { $company_users = $project_company->getUsersOnProject(active_project()); if (is_array($company_users)) { foreach ($company_users as $company_user) { $notify_people[] = $company_user; } } } // if Notifier::newTask($task, $notify_people); } catch (Exception $e) { Logger::log("Error: Notification failed, " . $e->getMessage(), Logger::ERROR); } // try } // if } // foreach ApplicationLogs::createLog($task_list, active_project(), ApplicationLogs::ACTION_ADD); DB::commit(); flash_success(lang('success add task list', $task_list->getName())); $this->redirectToUrl($task_list->getViewUrl()); } catch (Exception $e) { DB::rollback(); tpl_assign('error', $e); } // try } // if }
function quick_add_task() { if (logged_user()->isGuest()) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } $notAllowedMember = ''; if (!ProjectTask::canAdd(logged_user(), active_context(), $notAllowedMember)) { if (str_starts_with($notAllowedMember, '-- req dim --')) { flash_error(lang('must choose at least one member of', str_replace_first('-- req dim --', '', $notAllowedMember, $in))); } else { trim($notAllowedMember) == "" ? flash_error(lang('you must select where to keep', lang('the task'))) : flash_error(lang('no context permissions to add', lang("tasks"), $notAllowedMember)); } ajx_current("empty"); return; } ajx_current("empty"); $task = new ProjectTask(); $task_data = array_var($_POST, 'task'); $parent_id = array_var($task_data, 'parent_id', 0); $parent = ProjectTasks::findById($parent_id); if (is_array($task_data)) { $task_data['due_date'] = getDateValue(array_var($task_data, 'task_due_date')); $task_data['start_date'] = getDateValue(array_var($task_data, 'task_start_date')); if ($task_data['due_date'] instanceof DateTimeValue) { $duetime = getTimeValue(array_var($task_data, 'task_due_time')); if (is_array($duetime)) { $task_data['due_date']->setHour(array_var($duetime, 'hours')); $task_data['due_date']->setMinute(array_var($duetime, 'mins')); $task_data['due_date']->advance(logged_user()->getTimezone() * -3600); } $task_data['use_due_time'] = is_array($duetime); } if ($task_data['start_date'] instanceof DateTimeValue) { $starttime = getTimeValue(array_var($task_data, 'task_start_time')); if (is_array($starttime)) { $task_data['start_date']->setHour(array_var($starttime, 'hours')); $task_data['start_date']->setMinute(array_var($starttime, 'mins')); $task_data['start_date']->advance(logged_user()->getTimezone() * -3600); } $task_data['use_start_time'] = is_array($starttime); } if (config_option("wysiwyg_tasks")) { $task_data['type_content'] = "html"; $task_data['text'] = str_replace(array("\r", "\n", "\r\n"), array('', '', ''), array_var($task_data, 'text')); } else { $task_data['type_content'] = "text"; } $task_data['object_type_id'] = $task->getObjectTypeId(); $task->setFromAttributes($task_data); if (array_var($task_data, 'is_completed', false) == 'true') { $task->setCompletedOn(DateTimeValueLib::now()); $task->setCompletedById(logged_user()->getId()); } try { DB::beginWork(); $task->save(); $totalMinutes = array_var($task_data, 'hours') * 60 + array_var($task_data, 'minutes'); $task->setTimeEstimate($totalMinutes); $task->save(); $gb_member_ids = array_var($task_data, 'members'); $member_ids = array(); $persons_dim = Dimensions::findByCode('feng_persons'); $persons_dim_id = $persons_dim instanceof Dimension ? $persons_dim->getId() : 0; if ($parent) { if (count($parent->getMembers()) > 0) { foreach ($parent->getMembers() as $member) { if ($member->getDimensionId() != $persons_dim_id) { $member_ids[] = $member->getId(); } } } $task->setMilestoneId($parent->getMilestoneId()); $task->save(); } if (count($member_ids) == 0) { $member_ids = active_context_members(false); } // get member ids if ($gb_member_ids && !empty($gb_member_ids)) { $member_ids = json_decode(array_var($task_data, 'members')); } $object_controller = new ObjectController(); $object_controller->add_to_members($task, $member_ids); $assignee = $task->getAssignedToContact(); $assignee_to_me = false; if ($assignee instanceof Contact) { $task->subscribeUser($assignee); //do not notify my self if ($assignee->getId() == logged_user()->getId()) { $assignee_to_me = true; } } // create default reminder by user config option if ($task->getDueDate() != null && user_config_option("add_task_default_reminder")) { $reminder = new ObjectReminder(); $def = explode(",", user_config_option("reminders_tasks")); $minutes = $def[2] * $def[1]; $reminder->setMinutesBefore($minutes); $reminder->setType($def[0]); $reminder->setContext("due_date"); $reminder->setObject($task); $reminder->setUserId(0); $date = $task->getDueDate(); if ($date instanceof DateTimeValue) { $rdate = new DateTimeValue($date->getTimestamp() - $minutes * 60); $reminder->setDate($rdate); } $reminder->save(); } $subs = array(); if (config_option('multi_assignment') && Plugins::instance()->isActivePlugin('crpm')) { $json_subtasks = json_decode(array_var($_POST, 'multi_assignment'), true); $subtasks = array(); $line = 0; if (is_array($json_subtasks)) { foreach ($json_subtasks as $json_subtask) { $subtasks[$line]['assigned_to_contact_id'] = $json_subtask['assigned_to_contact_id']; $subtasks[$line]['name'] = $json_subtask['name']; $subtasks[$line]['time_estimate_hours'] = $json_subtask['time_estimate_hours']; $subtasks[$line]['time_estimate_minutes'] = $json_subtask['time_estimate_minutes']; $line++; } } Hook::fire('save_subtasks', $task, $subtasks); $subtasks = ProjectTasks::findAll(array('conditions' => '`parent_id` = ' . DB::escape($task->getId()))); // findAll foreach ($subtasks as $sub) { $subs[] = $sub->getArrayInfo(); } } // subscribe $task->subscribeUser(logged_user()); //for calculate member status we save de task again after the object have the members $task->save(); DB::commit(); $isSailent = true; // notify asignee if ((array_var($task_data, 'notify') == 'true' || user_config_option("can notify from quick add") && !user_config_option("show_notify_checkbox_in_quick_add")) && !$assignee_to_me) { $isSailent = false; try { Notifier::taskAssigned($task); } catch (Exception $e) { Logger::log($e->getMessage()); Logger::log($e->getTraceAsString()); } // try } ApplicationLogs::createLog($task, ApplicationLogs::ACTION_ADD, null, $isSailent); ajx_extra_data(array("task" => $task->getArrayInfo(), 'subtasks' => $subs)); flash_success(lang('success add task', $task->getObjectName())); } catch (Exception $e) { DB::rollback(); flash_error($e->getMessage()); } // try } // if }
/** * Add new task list * * @access public * @param void * @return null */ function add_list() { if (!ProjectTaskList::canAdd(logged_user(), active_project())) { flash_error(lang('no access permissions')); $this->redirectToReferer(get_url('task')); } // if $task_list = new ProjectTaskList(); $task_list_data = array_var($_POST, 'task_list'); if (!is_array($task_list_data)) { $task_list_data = array('milestone_id' => array_var($_GET, 'milestone_id')); // array } // if tpl_assign('task_list_data', $task_list_data); tpl_assign('task_list', $task_list); if (is_array(array_var($_POST, 'task_list'))) { $task_list->setFromAttributes($task_list_data); $task_list->setProjectId(active_project()->getId()); if (!logged_user()->isMemberOfOwnerCompany()) { $task_list->setIsPrivate(false); } $tasks = array(); for ($i = 0; $i < 6; $i++) { if (isset($task_list_data["task{$i}"]) && is_array($task_list_data["task{$i}"]) && trim(array_var($task_list_data["task{$i}"], 'text')) != '') { $assigned_to = explode(':', array_var($task_list_data["task{$i}"], 'assigned_to', '')); $tasks[] = array('text' => array_var($task_list_data["task{$i}"], 'text'), 'assigned_to_company_id' => array_var($assigned_to, 0, 0), 'assigned_to_user_id' => array_var($assigned_to, 1, 0)); // array } // if } // for try { DB::beginWork(); $task_list->save(); $task_list->setTagsFromCSV(array_var($task_list_data, 'tags')); foreach ($tasks as $task_data) { $task = new ProjectTask(); $task->setFromAttributes($task_data); $task_list->attachTask($task); $task->save(); } // foreach ApplicationLogs::createLog($task_list, active_project(), ApplicationLogs::ACTION_ADD); DB::commit(); flash_success(lang('success add task list', $task_list->getName())); $this->redirectToUrl($task_list->getViewUrl()); } catch (Exception $e) { DB::rollback(); tpl_assign('error', $e); } // try } // if }
$end_of_task = false; if ($event['due_date'] != EMPTY_DATETIME) { $due_date = new DateTimeValue(strtotime($event['due_date']) + logged_user()->getTimezone() * 3600); if ($dtv->getTimestamp() == mktime(0, 0, 0, $due_date->getMonth(), $due_date->getDay(), $due_date->getYear())) { $end_of_task = true; } } if ($event['start_date'] != EMPTY_DATETIME) { $start_date = new DateTimeValue(strtotime($event['start_date']) + logged_user()->getTimezone() * 3600); if ($dtv->getTimestamp() == mktime(0, 0, 0, $start_date->getMonth(), $start_date->getDay(), $start_date->getYear())) { $start_of_task = true; } } if ($start_of_task || $end_of_task) { $task = new ProjectTask(); $task->setFromAttributes($event); $task->setId($event['id']); $task->setNew(false); if ($start_of_task && $end_of_task) { $tip_title = lang('task'); $ico = "ico-task"; $tip_pre = ''; } else { if ($end_of_task) { $tip_title = lang('end of task'); $ico = "ico-task-end"; $tip_pre = 'end_'; } else { $tip_title = lang('start of task'); $ico = "ico-task-start"; $tip_pre = 'st_';
function replicateRepetitiveTaskForCalendar(ProjectTask $task, $from_date, $to_date) { $new_task_array = array($task); if ($task->isRepetitive()) { $res = forwardRepDate($task, $from_date); $ref_date = $res['date']; $top_repeat_num = $task->getRepeatNum() - $res['count']; $last_repeat = $task->getRepeatEnd() instanceof DateTimeValue ? new DateTimeValue($task->getRepeatEnd()->getTimestamp()) : null; if ($task->getRepeatNum() > 0 && $top_repeat_num <= 0 || $last_repeat instanceof DateTimeValue && $last_repeat->getTimestamp() < $ref_date->getTimestamp()) { return array(); } $num_repetitions = 0; while ($ref_date->getTimestamp() < $to_date->getTimestamp()) { if ($task->getRepeatBy() == 'start_date' && !$task->getStartDate() instanceof DateTimeValue) { return $new_task_array; } if ($task->getRepeatBy() == 'due_date' && !$task->getDueDate() instanceof DateTimeValue) { return $new_task_array; } if ($task->getRepeatBy() == 'start_date') { $diff = $ref_date->getTimestamp() - $task->getStartDate()->getTimestamp(); $task->setStartDate(new DateTimeValue($ref_date->getTimestamp())); if ($task->getDueDate() instanceof DateTimeValue) { $task->getDueDate()->advance($diff); } } else { if ($task->getRepeatBy() == 'due_date') { $diff = $ref_date->getTimestamp() - $task->getDueDate()->getTimestamp(); $task->setDueDate(new DateTimeValue($ref_date->getTimestamp())); if ($task->getStartDate() instanceof DateTimeValue) { $task->getStartDate()->advance($diff); } } } $info = array('name' => $task->getObjectName(), 'text' => $task->getText(), 'due_date' => $task->getDueDate() instanceof DateTimeValue ? new DateTimeValue($task->getDueDate()->getTimestamp()) : null, 'start_date' => $task->getStartDate() instanceof DateTimeValue ? new DateTimeValue($task->getStartDate()->getTimestamp()) : null, 'use_due_time' => $task->getUseDueTime(), 'use_start_time' => $task->getUseStartTime(), 'assigned_to_contact_id' => $task->getAssignedToContactId(), 'priority' => $task->getPriority(), 'state' => $task->getState(), 'milestone_id' => $task->getMilestoneId(), 'repeat_by' => $task->getRepeatBy(), 'repeat_d' => $task->getRepeatD(), 'repeat_m' => $task->getRepeatM(), 'repeat_y' => $task->getRepeatY()); $new_task = new ProjectTask(); $new_task->setFromAttributes($info); $new_task->setId($task->getId()); $new_task->setNew(false); $new_due_date = null; $new_st_date = null; if ($task->getStartDate() instanceof DateTimeValue) { $new_st_date = new DateTimeValue($task->getStartDate()->getTimestamp()); } if ($task->getDueDate() instanceof DateTimeValue) { $new_due_date = new DateTimeValue($task->getDueDate()->getTimestamp()); } if ($task->getRepeatD() > 0) { if ($new_st_date instanceof DateTimeValue) { $new_st_date = $new_st_date->add('d', $task->getRepeatD()); } if ($new_due_date instanceof DateTimeValue) { $new_due_date = $new_due_date->add('d', $task->getRepeatD()); } $ref_date->add('d', $task->getRepeatD()); } else { if ($task->getRepeatM() > 0) { if ($new_st_date instanceof DateTimeValue) { $new_st_date = $new_st_date->add('M', $task->getRepeatM()); } if ($new_due_date instanceof DateTimeValue) { $new_due_date = $new_due_date->add('M', $task->getRepeatM()); } $ref_date->add('M', $task->getRepeatM()); } else { if ($task->getRepeatY() > 0) { if ($new_st_date instanceof DateTimeValue) { $new_st_date = $new_st_date->add('y', $task->getRepeatY()); } if ($new_due_date instanceof DateTimeValue) { $new_due_date = $new_due_date->add('y', $task->getRepeatY()); } $ref_date->add('y', $task->getRepeatY()); } } } if ($new_st_date instanceof DateTimeValue) { $new_task->setStartDate($new_st_date); } if ($new_due_date instanceof DateTimeValue) { $new_task->setDueDate($new_due_date); } $num_repetitions++; if ($top_repeat_num > 0 && $top_repeat_num == $num_repetitions) { break; } if ($last_repeat instanceof DateTimeValue && $last_repeat->getTimestamp() < $ref_date->getTimestamp()) { break; } $new_task_array[] = $new_task; $task = $new_task; } } return $new_task_array; }
/** * Add user * * @access public * @param void * @return null */ function add() { $this->setTemplate('add_user'); $company = Companies::findById(get_id('company_id')); if (!$company instanceof Company) { flash_error(lang('company dnx')); $this->redirectTo('administration'); } // if if (!User::canAdd(logged_user(), $company)) { flash_error(lang('no access permissions')); $this->redirectToReferer(get_url('dashboard')); } // if $user = new User(); $user_data = array_var($_POST, 'user'); if (!is_array($user_data)) { $user_data = array('password_generator' => 'random', 'company_id' => $company->getId(), 'timezone' => $company->getTimezone()); // array } // if $projects = $company->getProjects(); $permissions = PermissionManager::getPermissionsText(); tpl_assign('user', $user); tpl_assign('company', $company); tpl_assign('projects', $projects); tpl_assign('permissions', $permissions); tpl_assign('user_data', $user_data); if (is_array(array_var($_POST, 'user'))) { $user->setFromAttributes($user_data); $user->setCompanyId($company->getId()); try { // Generate random password if (array_var($user_data, 'password_generator') == 'random') { $password = substr(sha1(uniqid(rand(), true)), rand(0, 25), 13); // Validate user input } else { $password = array_var($user_data, 'password'); if (trim($password) == '') { throw new Error(lang('password value required')); } // if if ($password != array_var($user_data, 'password_a')) { throw new Error(lang('passwords dont match')); } // if } // if $user->setPassword($password); if (config_option('check_email_unique', '1') == '1') { if (!$user->validateUniquenessOf('email')) { throw new Error(lang('email address is already used')); } } DB::beginWork(); $user->save(); ApplicationLogs::createLog($user, null, ApplicationLogs::ACTION_ADD); if (is_array($projects)) { foreach ($projects as $project) { if (array_var($user_data, 'project_permissions_' . $project->getId()) == 'checked') { $relation = new ProjectUser(); $relation->setProjectId($project->getId()); $relation->setUserId($user->getId()); foreach ($permissions as $permission => $permission_text) { $permission_value = array_var($user_data, 'project_permission_' . $project->getId() . '_' . $permission) == 'checked'; $user->setProjectPermission($project, $permission, $permission_value); } // foreach $relation->save(); } // if } // foreach } // if DB::commit(); // Send notification... try { if (array_var($user_data, 'send_email_notification')) { Notifier::newUserAccount($user, $password); } // if } catch (Exception $e) { } // try // Add task to Welcome project... try { if (array_var($user_data, 'add welcome task')) { $task_data = array('text' => lang('welcome task text', $user->getName(), get_url('account', 'edit')), 'due date' => DateTimeValueLib::now() + 7 * 24 * 60 * 60, 'assigned_to_company_id' => $user->getCompanyId(), 'assigned_to_user_id' => $user->getId()); $task_list = ProjectTaskLists::instance()->findById(2, true); DB::beginWork(); $task = new ProjectTask(); $task->setFromAttributes($task_data); $task_list->attachTask($task); $task->save(); DB::commit(); } // if } catch (Exception $e) { DB::rollback(); } // try flash_success(lang('success add user', $user->getDisplayName())); $projects = $company->getProjects(); if (is_array($projects) || count($projects)) { $this->redirectToUrl(get_url('account', 'update_permissions', $user->getId())); // Continue to permissions page } // if $this->redirectToUrl($company->getViewUrl()); } catch (Exception $e) { DB::rollback(); tpl_assign('error', $e); } // try } // if }