function ExecuteQuery() { $this->data = array(); $date = new DateTimeValue(Time()); $notYet = ProjectTasks::findAll(array('conditions' => 'created_by_id = ' . logged_user()->getId() . ' AND ( due_date = \'0000-00-00 00:00:00\' OR due_date > \'' . substr($date->toMySQL(), 0, strpos($date->toMySQL(), ' ')) . "')")); $today = ProjectTasks::findAll(array('conditions' => 'created_by_id = ' . logged_user()->getId() . ' AND due_date = \'' . substr($date->toMySQL(), 0, strpos($date->toMySQL(), ' ')) . "'")); $past = ProjectTasks::findAll(array('conditions' => 'created_by_id = ' . logged_user()->getId() . ' AND due_date > \'1900-01-01 00:00:00\' AND due_date < \'' . substr($date->toMySQL(), 0, strpos($date->toMySQL(), ' ')) . "'")); $value = 0; if (isset($past)) { $value = count($past); } $this->data['values'][0]['labels'][] = 'Overdue'; $this->data['values'][0]['values'][] = $value; $value = 0; if (isset($notYet)) { $value = count($notYet); } $this->data['values'][0]['labels'][] = 'Not yet due'; $this->data['values'][0]['values'][] = $value; $value = 0; if (isset($today)) { $value = count($today); } $this->data['values'][0]['labels'][] = 'Due today'; $this->data['values'][0]['values'][] = $value; }
/** * Return array of task that are assigned to specific user or his company * * @param User $user * @return array */ function getUsersTasks(User $user) { $task_lists = $this->getTaskLists(); if (!is_array($task_lists)) { return false; } // if $task_list_ids = array(); foreach ($task_lists as $task_list) { if (!$user->isMemberOfOwnerCompany() && $task_list->isPrivate()) { continue; } // if $task_list_ids[] = $task_list->getId(); } // if return ProjectTasks::findAll(array('conditions' => array('`task_list_id` IN (?) AND ((`assigned_to_user_id` = ? AND `assigned_to_company_id` = ?) OR (`assigned_to_user_id` = ? AND `assigned_to_company_id` = ?) OR (`assigned_to_user_id` = ? AND `assigned_to_company_id` = ?)) AND `completed_on` = ?', $task_list_ids, $user->getId(), $user->getCompanyId(), 0, $user->getCompanyId(), 0, 0, EMPTY_DATETIME), 'order' => '`created_on`')); // findAll }
function quick_edit_task() { if (logged_user()->isGuest()) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } ajx_current("empty"); $task = ProjectTasks::findById(get_id()); if (!$task instanceof ProjectTask) { flash_error(lang('task list dnx')); return; } if (!$task->canEdit(logged_user())) { flash_error(lang('no access permissions')); return; } $task_data = array_var($_POST, 'task'); // set task dates if (is_array($task_data)) { $send_edit = false; if ($task->getAssignedToContactId() == array_var($task_data, 'assigned_to_contact_id')) { $send_edit = true; } $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->setFromAttributes($task_data); if (array_var($_GET, 'dont_mark_as_read')) { $is_read = $task->getIsRead(logged_user()->getId()); } try { DB::beginWork(); $subs = array(); if (config_option('multi_assignment') && Plugins::instance()->isActivePlugin('crpm')) { if (array_var($task_data, 'multi_assignment_aplly_change') == 'subtask') { $null = null; Hook::fire('edit_subtasks', $task, $null); $subtasks = ProjectTasks::findAll(array('conditions' => '`parent_id` = ' . DB::escape($task->getId()))); // findAll foreach ($subtasks as $sub) { $subs[] = $sub->getArrayInfo(); } } } $task->save(); // get member ids $member_ids = array(); if (array_var($task_data, 'members')) { $member_ids = json_decode(array_var($task_data, 'members')); } // get member id when changing member via drag & drop if (array_var($task_data, 'member_id')) { $member_ids[] = array_var($task_data, 'member_id'); } // drag & drop - also apply changes to subtasks $tasks_to_update = $task->getAllSubTasks(); $tasks_to_update[] = $task; // calculate and set time estimate $totalMinutes = array_var($task_data, 'hours') * 60 + array_var($task_data, 'minutes'); $task->setTimeEstimate($totalMinutes); $task->save(); $assignee = $task->getAssignedToContact(); if ($assignee instanceof Contact) { $task->subscribeUser($assignee); } // add to members, subscribers, etc $object_controller = new ObjectController(); if (count($member_ids) > 0) { foreach ($tasks_to_update as $task_to_update) { $object_controller->add_to_members($task_to_update, $member_ids); } } $task->resetIsRead(); $log_info = ''; if ($send_edit == true) { $log_info = $task->getAssignedToContactId(); } else { if ($send_edit == false) { $task->setAssignedBy(logged_user()); $task->save(); } } ApplicationLogs::createLog($task, ApplicationLogs::ACTION_EDIT, false, false, true, $log_info); // subscribe $task->subscribeUser(logged_user()); if (isset($_POST['type_related'])) { if ($_POST['type_related'] == "all" || $_POST['type_related'] == "news") { $task_data['members'] = $member_ids; unset($task_data['due_date']); unset($task_data['use_due_time']); unset($task_data['start_date']); unset($task_data['use_start_time']); $this->repetitive_tasks_related($task, "edit", $_POST['type_related'], $task_data); } } DB::commit(); // notify asignee if (array_var($task_data, 'notify') == 'true' && $send_edit == false) { try { Notifier::taskAssigned($task); } catch (Exception $e) { } // try } ajx_extra_data(array("task" => $task->getArrayInfo(), 'subtasks' => $subs)); flash_success(lang('success edit task', $task->getObjectName())); } catch (Exception $e) { DB::rollback(); flash_error($e->getMessage()); } // try } // if }
function findByTaskAndRelated($task_id,$original_task_id) { return ProjectTasks::findAll(array('conditions' => array('(`original_task_id` = ? OR `object_id` = ?) AND `object_id` <> ?', $original_task_id,$original_task_id,$task_id))); }
/** * Return completed tasks * * @access public * @param void * @return array */ function getCompletedTasks() { if (is_null($this->completed_tasks)) { $this->completed_tasks = ProjectTasks::findAll(array('conditions' => '`task_list_id` = ' . DB::escape($this->getId()) . ' AND `completed_on` > ' . DB::escape(EMPTY_DATETIME), 'order' => '`completed_on` DESC')); // findAll } // if return $this->completed_tasks; }
function new_list_tasks() { //load config options into cache for better performance load_user_config_options_by_category_name('task panel'); // get query parameters, save user preferences if necessary $status = array_var($_GET, 'status', null); if (is_null($status) || $status == '') { $status = user_config_option('task panel status', 2); } else { if (user_config_option('task panel status') != $status) { set_user_config_option('task panel status', $status, logged_user()->getId()); } } $previous_filter = user_config_option('task panel filter', 'assigned_to'); $filter = array_var($_GET, 'filter'); if (is_null($filter) || $filter == '') { $filter = user_config_option('task panel filter', 'assigned_to'); } else { if (user_config_option('task panel filter') != $filter) { set_user_config_option('task panel filter', $filter, logged_user()->getId()); } } if ($filter != 'no_filter') { $filter_value = array_var($_GET, 'fval'); if (is_null($filter_value) || $filter_value == '') { $filter_value = user_config_option('task panel filter value', logged_user()->getCompanyId() . ':' . logged_user()->getId()); set_user_config_option('task panel filter value', $filter_value, logged_user()->getId()); $filter = $previous_filter; set_user_config_option('task panel filter', $filter, logged_user()->getId()); } else { if (user_config_option('task panel filter value') != $filter_value) { set_user_config_option('task panel filter value', $filter_value, logged_user()->getId()); } } } $isJson = array_var($_GET, 'isJson', false); if ($isJson) { ajx_current("empty"); } $project = active_project(); $tag = active_tag(); $template_condition = "`is_template` = 0 "; //Get the task query conditions $task_filter_condition = ""; switch ($filter) { case 'assigned_to': $assigned_to = explode(':', $filter_value); $assigned_to_user = array_var($assigned_to, 1, 0); $assigned_to_company = array_var($assigned_to, 0, 0); if ($assigned_to_user > 0) { $task_filter_condition = " AND (`assigned_to_user_id` = " . $assigned_to_user . " OR (`assigned_to_company_id` = " . $assigned_to_company . " AND `assigned_to_user_id` = 0)) "; } else { if ($assigned_to_company > 0) { $task_filter_condition = " AND `assigned_to_company_id` = " . $assigned_to_company . " AND `assigned_to_user_id` = 0"; } else { if ($assigned_to_company == -1 && $assigned_to_user == -1) { $task_filter_condition = " AND `assigned_to_company_id` = 0 AND `assigned_to_user_id` = 0 "; } } } break; case 'assigned_by': if ($filter_value != 0) { $task_filter_condition = " AND `assigned_by_id` = " . $filter_value . " "; } break; case 'created_by': if ($filter_value != 0) { $task_filter_condition = " AND `created_by_id` = " . $filter_value . " "; } break; case 'completed_by': if ($filter_value != 0) { $task_filter_condition = " AND `completed_by_id` = " . $filter_value . " "; } break; case 'milestone': $task_filter_condition = " AND `milestone_id` = " . $filter_value . " "; break; case 'priority': $task_filter_condition = " AND `priority` = " . $filter_value . " "; break; case 'subtype': if ($filter_value != 0) { $task_filter_condition = " AND `object_subtype` = " . $filter_value . " "; } break; case 'no_filter': $task_filter_condition = ""; break; default: flash_error(lang('task filter criteria not recognised', $filter)); } if ($project instanceof Project) { $pids = $project->getAllSubWorkspacesQuery(true); $projectstr = " AND " . ProjectTasks::getWorkspaceString($pids); } else { $pids = ""; $projectstr = ""; } $permissions = " AND " . permissions_sql_for_listings(ProjectTasks::instance(), ACCESS_LEVEL_READ, logged_user()); $task_status_condition = ""; switch ($status) { case 0: // Incomplete tasks $task_status_condition = " AND `completed_on` = " . DB::escape(EMPTY_DATETIME); break; case 1: // Complete tasks $task_status_condition = " AND `completed_on` > " . DB::escape(EMPTY_DATETIME); break; case 10: // Active tasks $now = date('Y-m-j 00:00:00'); $task_status_condition = " AND `completed_on` = " . DB::escape(EMPTY_DATETIME) . " AND `start_date` <= '{$now}'"; break; case 11: // Overdue tasks $now = date('Y-m-j 00:00:00'); $task_status_condition = " AND `completed_on` = " . DB::escape(EMPTY_DATETIME) . " AND `due_date` < '{$now}'"; break; case 12: // Today tasks $now = date('Y-m-j 00:00:00'); $task_status_condition = " AND `completed_on` = " . DB::escape(EMPTY_DATETIME) . " AND `due_date` = '{$now}'"; break; case 13: // Today + Overdue tasks $now = date('Y-m-j 00:00:00'); $task_status_condition = " AND `completed_on` = " . DB::escape(EMPTY_DATETIME) . " AND `due_date` <= '{$now}'"; break; case 14: // Today + Overdue tasks $now = date('Y-m-j 00:00:00'); $task_status_condition = " AND `completed_on` = " . DB::escape(EMPTY_DATETIME) . " AND `due_date` <= '{$now}'"; break; case 20: // Actives task by current user $now = date('Y-m-j 00:00:00'); $task_status_condition = " AND `completed_on` = " . DB::escape(EMPTY_DATETIME) . " AND `start_date` <= '{$now}' AND `assigned_to_user_id` = " . logged_user()->getId(); break; case 21: // Subscribed tasks by current user $res20 = DB::execute("SELECT object_id FROM " . TABLE_PREFIX . "object_subscriptions WHERE `object_manager` LIKE 'ProjectTasks' AND `user_id` = " . logged_user()->getId()); $subs_rows = $res20->fetchAll($res20); foreach ($subs_rows as $row) { $subs[] = $row['object_id']; } unset($res20, $subs_rows, $row); $now = date('Y-m-j 00:00:00'); $task_status_condition = " AND `completed_on` = " . DB::escape(EMPTY_DATETIME) . " AND `id` IN(" . implode(',', $subs) . ")"; break; case 2: // All tasks break; default: throw new Exception('Task status "' . $status . '" not recognised'); } if (!$tag) { $tagstr = ""; } else { $tagstr = " AND (select count(*) from " . TABLE_PREFIX . "tags where " . TABLE_PREFIX . "project_tasks.id = " . TABLE_PREFIX . "tags.rel_object_id and " . TABLE_PREFIX . "tags.tag = " . DB::escape($tag) . " and " . TABLE_PREFIX . "tags.rel_object_manager ='ProjectTasks' ) > 0 "; } $conditions = $template_condition . $task_filter_condition . $task_status_condition . $permissions . $tagstr . $projectstr . " AND `trashed_by_id` = 0 AND `archived_by_id` = 0"; //Now get the tasks $tasks = ProjectTasks::findAll(array('conditions' => $conditions, 'order' => 'created_on DESC', 'limit' => user_config_option('task_display_limit') > 0 ? user_config_option('task_display_limit') + 1 : null)); ProjectTasks::populateData($tasks); //Find all internal milestones for these tasks $internalMilestones = ProjectMilestones::getProjectMilestones(active_or_personal_project(), null, 'DESC', "", null, null, null, $status == 0, false); ProjectMilestones::populateData($internalMilestones); //Find all external milestones for these tasks $milestone_ids = array(); if ($tasks) { foreach ($tasks as $task) { if ($task->getMilestoneId() != 0) { $milestone_ids[$task->getMilestoneId()] = $task->getMilestoneId(); } } } $milestone_ids_condition = ''; if (count($milestone_ids) > 0) { $milestone_ids_condition = ' OR id in (' . implode(',', $milestone_ids) . ')'; } if ($status == 0) { $pendingstr = " AND `completed_on` = " . DB::escape(EMPTY_DATETIME) . " "; } else { $pendingstr = ""; } if (!$tag) { $tagstr = ""; } else { $tagstr = " AND (select count(*) from " . TABLE_PREFIX . "tags where " . TABLE_PREFIX . "project_milestones.id = " . TABLE_PREFIX . "tags.rel_object_id and " . TABLE_PREFIX . "tags.tag = " . DB::escape($tag) . " and " . TABLE_PREFIX . "tags.rel_object_manager ='ProjectMilestones' ) > 0 "; } $projectstr = " AND (" . ProjectMilestones::getWorkspaceString($pids) . $milestone_ids_condition . ")"; $archivedstr = " AND `archived_by_id` = 0 "; $milestone_conditions = " `is_template` = false " . $archivedstr . $projectstr . $pendingstr; $externalMilestonesTemp = ProjectMilestones::findAll(array('conditions' => $milestone_conditions)); $externalMilestones = array(); if ($externalMilestonesTemp) { foreach ($externalMilestonesTemp as $em) { $found = false; if ($internalMilestones) { foreach ($internalMilestones as $im) { if ($im->getId() == $em->getId()) { $found = true; break; } } } if (!$found) { $externalMilestones[] = $em; } } } ProjectMilestones::populateData($externalMilestones); //Get Users Info if (logged_user()->isMemberOfOwnerCompany()) { $users = Users::getAll(); $allUsers = array(); } else { $users = logged_user()->getAssignableUsers(); $allUsers = Users::getAll(); } //Get Companies Info if (logged_user()->isMemberOfOwnerCompany()) { $companies = Companies::getCompaniesWithUsers(); } else { $companies = logged_user()->getAssignableCompanies(); } if (!$isJson) { if (active_project() instanceof Project) { $task_templates = WorkspaceTemplates::getTemplatesByWorkspace(active_project()->getId()); } else { $task_templates = array(); } tpl_assign('project_templates', $task_templates); tpl_assign('all_templates', COTemplates::findAll()); if (user_config_option('task_display_limit') > 0 && count($tasks) > user_config_option('task_display_limit')) { tpl_assign('displayTooManyTasks', true); array_pop($tasks); } tpl_assign('tasks', $tasks); tpl_assign('object_subtypes', ProjectCoTypes::getObjectTypesByManager('ProjectTasks')); tpl_assign('internalMilestones', $internalMilestones); tpl_assign('externalMilestones', $externalMilestones); tpl_assign('users', $users); tpl_assign('allUsers', $allUsers); tpl_assign('companies', $companies); tpl_assign('userPreferences', array('filterValue' => isset($filter_value) ? $filter_value : '', 'filter' => $filter, 'status' => $status, 'showWorkspaces' => user_config_option('tasksShowWorkspaces', 1), 'showTime' => user_config_option('tasksShowTime', 0), 'showDates' => user_config_option('tasksShowDates', 0), 'showTags' => user_config_option('tasksShowTags', 0), 'showEmptyMilestones' => user_config_option('tasksShowEmptyMilestones', 0), 'groupBy' => user_config_option('tasksGroupBy', 'milestone'), 'orderBy' => user_config_option('tasksOrderBy', 'priority'), 'defaultNotifyValue' => user_config_option('can notify from quick add'))); ajx_set_no_toolbar(true); } }
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 }
?> <b><?php echo lang('task list'); ?> :</b> <?php echo $taskList->getName() . "<br>\n"; ?> <ol> <?php $condition = 'task_list_id = ' . $taskList->getId(); if (!$settings->getIncludeEveryone()) { $condition .= " and assigned_to_user_id = " . $user->getId(); } $condition .= " and completed_on is null"; $condition .= " and due_date < Interval " . $settings->getRemindersFuture() . " day + now()"; $tasks = ProjectTasks::findAll(array('conditions' => $condition)); foreach ($tasks as $task) { echo "<li>"; echo "<a href='" . str_replace('&', '&', externalUrl($task->getViewUrl())) . "'>"; echo $task->getText(); echo "</a> "; if ($settings->getIncludeEveryone() && $task->getAssignedTo() && $task->getAssignedTo()->getObjectName() != $user->getObjectName()) { echo " - <i>assigned to " . $task->getAssignedTo()->getObjectName() . "</i> - "; } else { if (!$task->getAssignedTo()) { echo " - <i>assigned to anyone</i> - "; } } if ($task->getDueDate()->isUpcoming()) { echo format_days('is future', $task->getDueDate()->getLeftInDays()); } elseif ($task->getDueDate()->isToday()) {
function send_reports() { $company = Companies::findById(1); $lTime = time() + 60 * 60 * $company->getTimezone(); $dayOfWeek = date("l", $lTime); $footer = '<a href="' . externalUrl(ROOT_URL) . '">' . externalUrl(ROOT_URL) . "</a>"; $people = Reminders::findAll(array('conditions' => 'reports_enabled = 1 and report_day = "' . $dayOfWeek . '"')); if (is_array($people) && count($people)) { foreach ($people as $person) { tpl_assign('settings', $person); $user = Users::findById($person->getUserId()); tpl_assign('user', $user); $offset = 60 * 60 * $user->getTimezone(); tpl_assign('offset', $offset); $allProjects = $user->getProjects(); $emailBody = ''; $recipient = Notifier::prepareEmailAddress($user->getEmail(), $user->getDisplayName()); foreach ($allProjects as $project) { if ($project->isActive() || $project->getCompletedOn()->getLeftInDays() > -7) { tpl_assign('project', $project); $condition = 'project_id = ' . $project->getId(); $condition .= " and is_private = 0 and is_silent = 0"; if (!$person->getReportsIncludeEveryone()) { $condition .= ' and taken_by_id = ' . $user->getId(); } $logs = array(); if ($person->getReportsIncludeActivity()) { $condition .= " and created_on > Interval -7 day + now()"; $logs = ApplicationLogs::findAll(array('conditions' => $condition)); } tpl_assign('logs', $logs); $taskLists = $project->getAllTaskLists(); $emailTaskLists = array(); if (is_array($taskLists) && count($taskLists)) { foreach ($taskLists as $taskList) { $condition = 'task_list_id = ' . $taskList->getId(); if (!$person->getReportsIncludeEveryone()) { $condition .= " and assigned_to_user_id = " . $user->getId(); } $condition .= " and completed_on > Interval -7 day + now()"; $tasks = ProjectTasks::findAll(array('conditions' => $condition)); if (is_array($tasks) && count($tasks)) { $emailTaskLists[] = $taskList; } } } if (count($emailTaskLists) || count($logs)) { tpl_assign('taskLists', $emailTaskLists); $emailBody .= tpl_fetch(get_template_path('report_per_project', 'reminders')); if ($person->getReportsSummarizedBy()) { try { Notifier::sendEmail($recipient, $recipient, "[ProjectPier] - Project Report - " . $project->getObjectName(), $emailBody . $footer, 'text/html'); // send $emailBody = ''; } catch (Exception $e) { echo $e; } } } } } if (strlen($emailBody) && !$person->getReportsSummarizedBy()) { $time = time() + 60 * 60 * $user->getTimezone(); try { Notifier::sendEmail($recipient, $recipient, "[ProjectPier] - Activity Report - " . gmdate('Y/m/d', $time), $emailBody . $footer, 'text/html'); // send $emailBody = ''; } catch (Exception $e) { echo $e; } } } } }
?> this.dialog.setTitle(lang('tasks related')); this.dialog.show(); } <?php if (!$task->isCompleted()) { ?> og.changeTaskRepeat(); <?php } ?> <?php if (!$task->isNew()) { $subtasks = ProjectTasks::findAll(array('conditions' => "parent_id=" . $task->getId() . " AND trashed_by_id=0")); foreach ($subtasks as $st) { $st_name = clean(escape_character($st->getObjectName())); ?> ogTasks.drawAddSubTaskInputs('<?php echo $genid; ?> ', {id:'<?php echo $st->getId(); ?> ', name:'<?php echo $st_name; ?> ', assigned_to:'<?php echo $st->getAssignedToContactId(); ?>
/** * Return completed tasks * * @access public * @param void * @return array */ function getCompletedSubTasks() { if (is_null($this->completed_tasks)) { $this->completed_tasks = ProjectTasks::findAll(array('conditions' => '`milestone_id` = ' . DB::escape($this->getId()) . ' AND `trashed_on` = " . DB::escape(EMPTY_DATETIME) . " AND `completed_on` > ' . DB::escape(EMPTY_DATETIME) . " AND " . permissions_sql_for_listings(new ProjectTasks(), ACCESS_LEVEL_READ, logged_user()), 'order' => '`completed_on` DESC')); // findAll } // if return $this->completed_tasks; }
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 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()); DB::commit(); // notify asignee if(array_var($task_data, 'notify') == 'true') { try { Notifier::taskAssigned($task); } catch(Exception $e) { Logger::log($e->getMessage()); Logger::log($e->getTraceAsString()); } // 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 }