function init() { // require_javascript("og/HtmlPanel.js"); require_javascript("og/MessageManager.js"); ajx_current("panel", "messages", null, null, true); ajx_replace(true); }
/** * Execute search * * @param void * @return null */ function search() { if (active_project() && !logged_user()->isProjectUser(active_project())) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } // if $pageType = array_var($_GET, 'page_type'); $search_for = array_var($_GET, 'search_for'); $objectManagers = array("ProjectWebpages", "ProjectMessages", "MailContents", "ProjectFiles", "ProjectMilestones", "ProjectTasks", "ProjectEvents"); $objectTypes = array(lang('webpages'), lang('messages'), lang('emails'), lang('files'), lang('milestones'), lang('tasks'), lang('events')); $iconTypes = array('webpage', 'message', 'email', 'file', 'milestone', 'task', 'event'); if (user_config_option('show_file_revisions_search')) { array_splice($objectManagers, 4, 0, 'ProjectFileRevisions'); array_splice($objectTypes, 4, 0, lang('file contents')); array_splice($iconTypes, 4, 0, 'file'); } $search_results = array(); $timeBegin = microtime(true); if (trim($search_for) == '') { $search_results = null; $pagination = null; } else { $search_results = $this->searchWorkspaces($search_for, $search_results, 5); $search_results = $this->searchUsers($search_for, $search_results, 5); $search_results = $this->searchContacts($search_for, $search_results, 5); if (array_var($_GET, 'search_all_projects') != "true" && active_project() instanceof Project) { $projects = active_project()->getAllSubWorkspacesCSV(true); } else { $projects = null; } $c = 0; foreach ($objectManagers as $om) { $user_id = $om == "MailContents" ? logged_user()->getId() : 0; $results = SearchableObjects::searchByType($search_for, $projects, $om, true, 5, 1, null, $user_id); if (count($results[0]) > 0) { $sr = array(); $sr['result'] = $results[0]; $sr['pagination'] = $results[1]; $sr['type'] = $objectTypes[$c]; $sr['icontype'] = $iconTypes[$c]; $sr['manager'] = $om; $search_results[] = $sr; } $c++; } } // if $timeEnd = microtime(true); if (str_starts_with($search_for, '"') && str_ends_with($search_for, '"')) { $search_for = str_replace('"', '', $search_for); } tpl_assign('search_string', $search_for); tpl_assign('search_results', $search_results); tpl_assign('time', $timeEnd - $timeBegin); ajx_set_no_toolbar(true); ajx_replace(true); }
function init() { $js_manager_info = array('js_file' => "og/FileManager.js"); Hook::fire('change_js_manager', $this, $js_manager_info); require_javascript(array_var($js_manager_info, 'js_file'), array_var($js_manager_info, 'plugin')); ajx_current("panel", "files", null, null, true); ajx_replace(true); }
function init() { $ot = ObjectTypes::findById(array_var($_REQUEST, 'type_id')); $dim = Dimensions::findById(array_var($_REQUEST, 'dim_id')); evt_add("refresh member list parameters", array('object_type_id' => array_var($_REQUEST, 'type_id'), 'dimension_id' => array_var($_REQUEST, 'dim_id'), 'dimension_code' => $dim instanceof Dimension ? $dim->getCode() : '', 'object_type_name' => $ot instanceof ObjectType ? $ot->getName() : '')); require_javascript("og/MemberManager.js"); ajx_current("panel", "members", null, null, true); ajx_replace(true); }
function help_options() { $show_context_help = user_config_option('show_context_help', 'until_close', logged_user()->getId()); $show = true; if ($show_context_help == 'never') { $show = false; } tpl_assign('show_help', $show); ajx_set_panel('help'); ajx_replace(true); }
/** * Show events index page (list recent events) * * @param void * @return null */ function index($view_type = null, $user_filter = null, $status_filter = null, $task_filter = null) { ajx_set_no_toolbar(true); ajx_replace(true); $this->getActualDateToShow($day, $month, $year); if ($view_type == null) { $this->getUserPreferences($view_type, $user_filter, $status_filter, $task_filter); } $this->setTemplate('calendar'); $this->setViewVariables($view_type, $user_filter, $status_filter, $task_filter); }
/** * Show events index page (list recent events) * * @param void * @return null */ function index($view_type = null, $user_filter = null, $status_filter = null) { //auth check in cal_query_get_eventlist if (!logged_user()->isAdministrator() && (active_project() && !logged_user()->isProjectUser(active_project()))) { flash_error(lang('no access permissions')); $this->redirectTo('dashboard'); return; } ajx_set_no_toolbar(true); ajx_replace(true); $this->getActualDateToShow($day, $month, $year); if ($view_type == null) { $this->getUserPreferences($view_type, $user_filter, $status_filter); } $tag = active_tag(); tpl_assign('tags', $tag); $this->setTemplate('calendar'); $this->setViewVariables($view_type, $user_filter, $status_filter); }
/** * Classify specific email * */ function classify() { if (logged_user()->isGuest()) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } $email = MailContents::findById(get_id()); if (!$email instanceof MailContent) { flash_error(lang('email dnx')); ajx_current("empty"); return; } if ($email->getIsDeleted()) { flash_error(lang('email dnx deleted')); ajx_current("empty"); return; } if (!$email->canEdit(logged_user())) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } // if MailUtilities::parseMail($email->getContent(), $decoded, $parsedEmail, $warnings); $projects = logged_user()->getActiveProjects(); tpl_assign('projects', $projects); $classification_data = array_var($_POST, 'classification'); if (!is_array($classification_data)) { $tag_names = $email->getTagNames(); $classification_data = array('tag' => is_array($tag_names) ? implode(', ', $tag_names) : ''); // array } // if if (is_array(array_var($_POST, 'classification'))) { try { $create_task = array_var($classification_data, 'create_task') == 'checked'; $canWriteFiles = $this->checkFileWritability($classification_data, $parsedEmail); if ($canWriteFiles) { $project_ids = $classification_data["project_ids"]; $enteredWS = Projects::findByCSVIds($project_ids); $validWS = array(); if (isset($enteredWS)) { foreach ($enteredWS as $ws) { if (ProjectFile::canAdd(logged_user(), $ws)) { $validWS[] = $ws; } } } if (empty($validWS)) { flash_error(lang('must choose at least one workspace error')); ajx_current("empty"); return; } DB::beginWork(); $conversation = MailContents::getMailsFromConversation($email); foreach ($conversation as $conv_email) { $conv_email->removeFromWorkspaces(logged_user()->getWorkspacesQuery()); foreach ($validWS as $w) { $conv_email->addToWorkspace($w); } $conv_email->save(); MailUtilities::parseMail($conv_email->getContent(), $decoded, $parsedEmail, $warnings); $csv = array_var($classification_data, 'tag'); $conv_email->setTagsFromCSV($csv); if ($conv_email->getHasAttachments()) { //Classify attachments $this->classifyFile($classification_data, $conv_email, $parsedEmail, $validWS, true, $csv); } } DB::commit(); flash_success(lang('success classify email')); if ($create_task) { ajx_replace(true); $this->redirectTo('task', 'add_task', array('from_email' => $email->getId(), 'replace' => 1)); } else { ajx_current("back"); evt_add("reload mails panel", array()); } } else { flash_error(lang("error classifying attachment cant open file")); ajx_current("empty"); } // If can write files // Error... } catch (Exception $e) { DB::rollback(); flash_error($e->getMessage()); ajx_current("empty"); } // try } else { $classification_data["project_ids"] = $email->getWorkspaces(); } tpl_assign('classification_data', $classification_data); tpl_assign('email', $email); tpl_assign('parsedEmail', $parsedEmail); }
/** * Add new task * * @access public * @param void * @return null */ function add_task() { if (logged_user()->isGuest()) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } $project = active_or_personal_project(); if (!ProjectTask::canAdd(logged_user(), $project)) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } // if $task = new ProjectTask(); $task_data = array_var($_POST, 'task'); if (!is_array($task_data)) { $task_data = array('milestone_id' => array_var($_POST, 'milestone_id', 0), 'project_id' => array_var($_POST, 'project_id', active_or_personal_project()->getId()), 'title' => array_var($_POST, 'title', ''), 'assigned_to' => array_var($_POST, 'assigned_to', '0:0'), 'parent_id' => array_var($_POST, 'parent_id', 0), 'priority' => array_var($_POST, 'priority', ProjectTasks::PRIORITY_NORMAL), 'text' => array_var($_POST, 'text', ''), 'start_date' => getDateValue(array_var($_POST, 'task_start_date', '')), 'due_date' => getDateValue(array_var($_POST, 'task_due_date', '')), 'is_template' => array_var($_POST, "is_template", array_var($_GET, "is_template", false)), 'tags' => array_var($_POST, "tags", ''), 'object_subtype' => array_var($_POST, "object_subtype", config_option('default task co type')), 'send_notification' => array_var($_POST, 'notify') && array_var($_POST, 'notify') == 'true'); // array $from_email = array_var($_GET, 'from_email'); $email = MailContents::findById($from_email); if ($email instanceof MailContent) { $task_data['title'] = $email->getSubject(); $task_data['text'] = lang('create task from email description', $email->getSubject(), $email->getFrom(), $email->getTextBody()); $task_data['tags'] = implode(", ", $email->getTagNames()); tpl_assign('from_email', $email); } } // if if (array_var($_GET, 'replace')) { ajx_replace(true); } tpl_assign('task_data', $task_data); tpl_assign('task', $task); if (is_array(array_var($_POST, 'task'))) { $proj = Projects::findById(array_var($task_data, 'project_id')); if ($proj instanceof Project) { $project = $proj; } // order $task->setOrder(ProjectTasks::maxOrder(array_var($task_data, "parent_id", 0), array_var($task_data, "milestone_id", 0))); $task_data['due_date'] = getDateValue(array_var($_POST, 'task_due_date')); $task_data['start_date'] = getDateValue(array_var($_POST, 'task_start_date')); try { $err_msg = $this->setRepeatOptions($task_data); if ($err_msg) { flash_error($err_msg); ajx_current("empty"); return; } $task->setFromAttributes($task_data); $totalMinutes = array_var($task_data, 'time_estimate_hours', 0) * 60 + array_var($task_data, 'time_estimate_minutes', 0); $task->setTimeEstimate($totalMinutes); $task->setIsPrivate(false); // Not used, but defined as not null. // 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); ajx_current("empty"); return; } $task->setAssignedToCompanyId($company_id); $task->setAssignedToUserId($user_id); $id = array_var($_GET, 'id', 0); $parent = ProjectTasks::findById($id); if ($parent instanceof ProjectTask) { $task->setParentId($id); if ($parent->getIsTemplate()) { $task->setIsTemplate(true); } } if ($task->getParentId() > 0 && $task->hasChild($task->getParentId())) { flash_error(lang('task child of child error')); ajx_current("empty"); return; } //Add handins $handins = array(); for ($i = 0; $i < 4; $i++) { if (isset($task_data["handin{$i}"]) && is_array($task_data["handin{$i}"]) && trim(array_var($task_data["handin{$i}"], 'title')) != '') { $assigned_to = explode(':', array_var($task_data["handin{$i}"], 'assigned_to', '')); $handins[] = array('title' => array_var($task_data["handin{$i}"], 'title'), 'responsible_company_id' => array_var($assigned_to, 0, 0), 'responsible_user_id' => array_var($assigned_to, 1, 0)); // array } // if } // for DB::beginWork(); $task->save(); //$task->setProject($project); //echo 'pepe'; DB::rollback(); die(); $task->setTagsFromCSV(array_var($task_data, 'tags')); foreach ($handins as $handin_data) { $handin = new ObjectHandin(); $handin->setFromAttributes($handin_data); $handin->setObjectId($task->getId()); $handin->setObjectManager(get_class($task->manager())); $handin->save(); } // foreach*/ if (array_var($_GET, 'copyId', 0) > 0) { // copy remaining stuff from the task with id copyId $toCopy = ProjectTasks::findById(array_var($_GET, 'copyId')); if ($toCopy instanceof ProjectTask) { ProjectTasks::copySubTasks($toCopy, $task, array_var($task_data, 'is_template', false)); } } //Link objects $object_controller = new ObjectController(); if ($parent instanceof ProjectTask) { // task is being added as subtask of another, so place in same workspace $task->addToWorkspace($parent->getProject()); } else { $object_controller->add_to_workspaces($task); } $object_controller->link_to_new_object($task); $object_controller->add_subscribers($task); $object_controller->add_custom_properties($task); $object_controller->add_reminders($task); ApplicationLogs::createLog($task, $task->getWorkspaces(), ApplicationLogs::ACTION_ADD); DB::commit(); // notify asignee if (array_var($task_data, 'send_notification') == 'checked') { try { Notifier::taskAssigned($task); } catch (Exception $e) { evt_add("debug", $e->getMessage()); } // try } if ($task->getIsTemplate()) { flash_success(lang('success add template', $task->getTitle())); } else { flash_success(lang('success add task list', $task->getTitle())); } if (array_var($task_data, 'inputtype') != 'taskview') { ajx_current("back"); } else { ajx_current("reload"); } } catch (Exception $e) { DB::rollback(); flash_error($e->getMessage()); ajx_current("empty"); } // try } // if }
/** * Edit task * * @access public * @param void * @return null */ function edit_task() { $isTemplateTask = false; if (array_var($_REQUEST, 'template_task') == true) { $isTemplateTask = true; } if (logged_user()->isGuest()) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } $this->setTemplate('add_task'); if (array_var($_REQUEST, "template_task")) { $task = TemplateTasks::findById(array_var($_REQUEST, "template_task_id", get_id())); $this->setTemplate(get_template_path('add_template_task', 'template_task')); if (array_var($_REQUEST, 'template_id')) { $template_id = array_var($_REQUEST, 'template_id'); } else { $template_id = $task->getTemplateId(); } tpl_assign('additional_tt_params', array_var($_REQUEST, 'additional_tt_params')); tpl_assign('template_id', $template_id); if (!$task instanceof TemplateTask) { flash_error(lang('task list dnx')); ajx_current("empty"); return; } // if } else { $task = ProjectTasks::findById(get_id()); if (!$task instanceof ProjectTask) { flash_error(lang('task list dnx')); ajx_current("empty"); return; } // if if (!$task->canEdit(logged_user())) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } // if } if (array_var($_GET, 'replace')) { ajx_replace(true); } $task_data = array_var($_POST, 'task'); $time_estimate = array_var($_POST, 'hours', 0) * 60 + array_var($_POST, 'minutes', 0); if ($time_estimate > 0) { $estimatedTime = $time_estimate; } else { $estimatedTime = $task->getTimeEstimate(); } if (!is_array($task_data)) { // set layout for modal form if (array_var($_REQUEST, 'modal')) { $this->setLayout("json"); tpl_assign('modal', true); } $this->getRepeatOptions($task, $occ, $rsel1, $rsel2, $rsel3, $rnum, $rend, $rjump); $dd = $task->getDueDate() instanceof DateTimeValue ? $task->getDueDate() : null; if ($dd instanceof DateTimeValue && $task->getUseDueTime()) { $dd->advance(logged_user()->getTimezone() * 3600); } $sd = $task->getStartDate() instanceof DateTimeValue ? $task->getStartDate() : null; if ($sd instanceof DateTimeValue && $task->getUseStartTime()) { $sd->advance(logged_user()->getTimezone() * 3600); } $post_dd = null; if (array_var($_POST, 'task_due_date')) { $post_dd = getDateValue(array_var($_POST, 'task_due_date')); if ($post_dd instanceof DateTimeValue) { $duetime = getTimeValue(array_var($_POST, 'task_due_time')); if (is_array($duetime)) { $post_dd->setHour(array_var($duetime, 'hours')); $post_dd->setMinute(array_var($duetime, 'mins')); $post_dd->advance(logged_user()->getTimezone() * 3600); } } } $post_st = null; if (array_var($_POST, 'task_start_date')) { $post_st = getDateValue(array_var($_POST, 'task_start_date')); if ($post_st instanceof DateTimeValue) { $starttime = getTimeValue(array_var($_POST, 'task_start_time')); if (is_array($starttime)) { $post_st->setHour(array_var($starttime, 'hours')); $post_st->setMinute(array_var($starttime, 'mins')); $post_st->advance(logged_user()->getTimezone() * 3600); } } } if (config_option("wysiwyg_tasks")) { $text_post = preg_replace("/[\n|\r|\n\r]/", '', array_var($_POST, 'text', $task->getText())); } else { $text_post = array_var($_POST, 'text', $task->getText()); } $task_data = array('name' => array_var($_POST, 'name', $task->getObjectName()), 'text' => $text_post, 'milestone_id' => array_var($_POST, 'milestone_id', $task->getMilestoneId()), 'due_date' => getDateValue($post_dd, $dd), 'start_date' => getDateValue($post_st, $sd), 'parent_id' => $task->getParentId(), 'assigned_to_contact_id' => array_var($_POST, 'assigned_to_contact_id', $task->getAssignedToContactId()), 'selected_members_ids' => json_decode(array_var($_POST, 'members', null)), 'priority' => array_var($_POST, 'priority', $task->getPriority()), 'time_estimate' => $estimatedTime, 'percent_completed' => $task->getPercentCompleted(), 'forever' => $task->getRepeatForever(), 'rend' => $rend, 'rnum' => $rnum, 'rjump' => $rjump, 'rsel1' => $rsel1, 'rsel2' => $rsel2, 'rsel3' => $rsel3, 'occ' => $occ, 'repeat_by' => $task->getRepeatBy(), 'object_subtype' => array_var($_POST, "object_subtype", $task->getObjectSubtype() != 0 ? $task->getObjectSubtype() : config_option('default task co type')), 'type_content' => $task->getTypeContent(), 'multi_assignment' => $task->getColumnValue('multi_assignment', 0), 'send_notification_subscribers' => user_config_option("can notify subscribers")); // array //control dates of parent and subtasks $task_data['type_control'] = ""; $parent_data = $task->getParent(); if ($parent_data) { $task_data['type_control'] = "child"; $task_data['control_title'] = $parent_data->getObjectName(); $task_data['control_due_date'] = $parent_data->getDueDate() instanceof DateTimeValue ? $parent_data->getDueDate()->getTimestamp() + logged_user()->getTimezone() * 3600 : null; $task_data['control_start_date'] = $parent_data->getStartDate() instanceof DateTimeValue ? $parent_data->getStartDate()->getTimestamp() + logged_user()->getTimezone() * 3600 : null; } $subtask_data = $task->getAllSubTasks(); if ($subtask_data) { $task_data['type_control'] = "father"; $task_data['control_title'] = $task->getObjectName(); $task_data['control_due_date'] = getDateValue($post_dd, $dd) instanceof DateTimeValue ? getDateValue($post_dd, $dd)->getTimestamp() : null; $task_data['control_start_date'] = getDateValue($post_st, $sd) instanceof DateTimeValue ? getDateValue($post_st, $sd)->getTimestamp() : null; } } // if //I find all those related to the task to find out if the original $task_related = ProjectTasks::findByRelated($task->getObjectId()); if (!$task_related) { //is not the original as the original look plus other related if ($task->getOriginalTaskId() != "0") { $task_related = ProjectTasks::findByTaskAndRelated($task->getObjectId(), $task->getOriginalTaskId()); } } if ($task_related) { $pending_id = 0; foreach ($task_related as $t_rel) { if ($task->getStartDate() <= $t_rel->getStartDate() && $task->getDueDate() <= $t_rel->getDueDate() && !$t_rel->isCompleted()) { $pending_id = $t_rel->getId(); break; } } tpl_assign('pending_task_id', $pending_id); tpl_assign('task_related', true); } else { tpl_assign('pending_task_id', 0); tpl_assign('task_related', false); } tpl_assign('task', $task); tpl_assign('task_data', $task_data); if (is_array(array_var($_POST, 'task'))) { foreach ($task_data as $k => &$v) { $v = remove_scripts($v); } $send_edit = false; if ($task->getAssignedToContactId() == array_var($task_data, 'assigned_to_contact_id')) { $send_edit = true; } $old_owner = $task->getAssignedTo(); if (array_var($task_data, 'parent_id') == $task->getId()) { flash_error(lang("task own parent error")); ajx_current("empty"); return; } try { try { $task_data['due_date'] = getDateValue(array_var($_POST, 'task_due_date')); $task_data['start_date'] = getDateValue(array_var($_POST, 'task_start_date')); } catch (Exception $e) { throw new Exception(lang('date format error', date_format_tip(user_config_option('date_format')))); } if ($task_data['due_date'] instanceof DateTimeValue) { $duetime = getTimeValue(array_var($_POST, '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($_POST, '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); } //control date subtask whit parent if (array_var($_POST, 'control_dates') == "child") { $parent = $task->getParent(); if ($parent->getStartDate() instanceof DateTimeValue && $task_data['start_date'] instanceof DateTimeValue) { if ($task_data['start_date']->getTimestamp() < $parent->getStartDate()->getTimestamp()) { $parent->setStartDate($task_data['start_date']); $parent->setUseStartTime($task_data['use_start_time']); } } else { $parent->setStartDate($task_data['start_date']); $parent->setUseStartTime(array_var($task_data, 'use_start_time', 0)); } if ($parent->getDueDate() instanceof DateTimeValue && $task_data['due_date'] instanceof DateTimeValue) { if ($task_data['due_date']->getTimestamp() > $parent->getDueDate()->getTimestamp()) { $parent->setDueDate($task_data['due_date']); $parent->setUseDueTime($task_data['use_due_time']); } } else { $parent->setDueDate($task_data['due_date']); $parent->setUseDueTime(array_var($task_data, 'use_due_time', 0)); } // calculate and set estimated time $totalMinutes = array_var($task_data, 'time_estimate_hours') * 60 + array_var($task_data, 'time_estimate_minutes'); $parent->setTimeEstimate($totalMinutes); $parent->save(); } $err_msg = $this->setRepeatOptions($task_data); if ($err_msg) { throw new Exception($err_msg); } if (!isset($task_data['parent_id'])) { $task_data['parent_id'] = 0; } $member_ids = json_decode(array_var($_POST, 'members')); // keep old dates to check for subtasks $old_start_date = $task->getStartDate(); $old_due_date = $task->getDueDate(); 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->setFromAttributes($task_data); $totalMinutes = array_var($task_data, 'time_estimate_hours') * 60 + array_var($task_data, 'time_estimate_minutes'); $task->setTimeEstimate($totalMinutes); if ($task->getParentId() > 0 && $task->hasChild($task->getParentId())) { flash_error(lang('task child of child error')); ajx_current("empty"); return; } if (isset($task_data['percent_completed']) && $task_data['percent_completed'] >= 0 && $task_data['percent_completed'] <= 100) { $task->setPercentCompleted($task_data['percent_completed']); } DB::beginWork(); $task->save(); if (!isset($task_data['percent_completed'])) { $task->calculatePercentComplete(); } // dependencies if (config_option('use tasks dependencies')) { $previous_tasks = array_var($task_data, 'previous'); if (is_array($previous_tasks)) { foreach ($previous_tasks as $ptask) { if ($ptask == $task->getId()) { continue; } $dep = ProjectTaskDependencies::findById(array('previous_task_id' => $ptask, 'task_id' => $task->getId())); if (!$dep instanceof ProjectTaskDependency) { $dep = new ProjectTaskDependency(); $dep->setPreviousTaskId($ptask); $dep->setTaskId($task->getId()); $dep->save(); } } $saved_ptasks = ProjectTaskDependencies::findAll(array('conditions' => 'task_id = ' . $task->getId())); foreach ($saved_ptasks as $pdep) { if (!in_array($pdep->getPreviousTaskId(), $previous_tasks)) { $pdep->delete(); } } } else { ProjectTaskDependencies::delete('task_id = ' . $task->getId()); } } // Add assigned user to the subscibers list if ($task->getAssignedToContactId() > 0 && Contacts::instance()->findById($task->getAssignedToContactId())) { if (!isset($_POST['subscribers'])) { $_POST['subscribers'] = array(); } $_POST['subscribers']['user_' . $task->getAssignedToContactId()] = '1'; } $object_controller = new ObjectController(); if ($isTemplateTask) { $object_controller->add_to_members($task, $member_ids, null, false); } else { $object_controller->add_to_members($task, $member_ids); } $is_template = $task instanceof TemplateTask; $object_controller->add_subscribers($task, null, !$is_template); $object_controller->link_to_new_object($task); $object_controller->add_custom_properties($task); if (!$task->isCompleted()) { //to make sure the task it is not completed yet, and that it has subscribed people $old_reminders = ObjectReminders::getByObject($task); $object_controller->add_reminders($task); //adding the new reminders, if any $object_controller->update_reminders($task, $old_reminders); //updating the old ones if (logged_user() instanceof Contact && (!is_array($old_reminders) || count($old_reminders) == 0) && (user_config_option("add_task_autoreminder") && logged_user()->getId() != $task->getAssignedToContactId() || user_config_option("add_self_task_autoreminder") && logged_user()->getId() == $task->getAssignedToContactId())) { //if there is no asignee, but it still has subscribers $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(); } } if (!is_array($member_ids) || count($member_ids) == 0) { $member_ids = array(0); } $members = Members::findAll(array('conditions' => "id IN (" . implode(',', $member_ids) . ")")); $task->apply_members_to_subtasks($members, true); // apply values to subtasks $assigned_to = $task->getAssignedToContactId(); $subtasks = $task->getAllSubTasks(); $milestone_id = $task->getMilestoneId(); $apply_ms = array_var($task_data, 'apply_milestone_subtasks'); $apply_at = array_var($task_data, 'apply_assignee_subtasks', ''); foreach ($subtasks as $sub) { $modified = false; //if ($apply_at || !($sub->getAssignedToContactId() > 0)) { if ($apply_at) { $sub->setAssignedToContactId($assigned_to); $modified = true; } if ($apply_ms) { $sub->setMilestoneId($milestone_id); $modified = true; } if ($modified) { $sub->save(); } //control date parent whit subtask if ($_POST['control_dates'] == "father") { if ($sub->getStartDate() instanceof DateTimeValue) { if ($task->getStartDate() instanceof DateTimeValue) { if ($task->getStartDate()->getTimestamp() > $sub->getStartDate()->getTimestamp()) { $sub->setStartDate($task->getStartDate()); } } } else { if ($task->getStartDate() instanceof DateTimeValue) { $sub->setStartDate($task->getStartDate()); } } $sub->setUseStartTime($task->getUseStartTime()); if ($sub->getDueDate() instanceof DateTimeValue) { if ($task->getDueDate() instanceof DateTimeValue) { if ($task->getDueDate()->getTimestamp() < $sub->getDueDate()->getTimestamp()) { $sub->setDueDate($task->getDueDate()); } } } else { if ($task->getDueDate() instanceof DateTimeValue) { $sub->setDueDate($task->getDueDate()); } } $sub->setUseDueTime($task->getUseDueTime()); $sub->save(); } } $task->resetIsRead(); $log_info = ''; if ($send_edit == true) { $log_info = $task->getAssignedToContactId(); } else { if ($send_edit == false) { $task->setAssignedBy(logged_user()); $task->save(); } } if (config_option('repeating_task') == 1) { $opt_rep_day['saturday'] = false; $opt_rep_day['sunday'] = false; if (array_var($task_data, 'repeat_saturdays', false)) { $opt_rep_day['saturday'] = true; } if (array_var($task_data, 'repeat_sundays', false)) { $opt_rep_day['sunday'] = true; } $this->repetitive_task($task, $opt_rep_day); } if (isset($_POST['type_related'])) { if ($_POST['type_related'] == "all" || $_POST['type_related'] == "news") { $task_data['members'] = json_decode(array_var($_POST, 'members')); 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); } } 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); } } //for calculate member status we save de task again after the object have the members $task->save(); // save subtasks added in 'subtasks' tab $sub_tasks_to_log = $this->saveSubtasks($task, array_var($task_data, 'subtasks'), $member_ids); DB::commit(); foreach ($sub_tasks_to_log['add'] as $st_to_log) { ApplicationLogs::createLog($st_to_log, ApplicationLogs::ACTION_ADD); } foreach ($sub_tasks_to_log['edit'] as $st_to_log) { ApplicationLogs::createLog($st_to_log, ApplicationLogs::ACTION_EDIT); } foreach ($sub_tasks_to_log['trash'] as $st_to_log) { ApplicationLogs::createLog($st_to_log, ApplicationLogs::ACTION_TRASH); } //Send Template task to view if ($task instanceof TemplateTask) { $objectId = $task->getObjectId(); $id = $task->getId(); $objectTypeName = $task->getObjectTypeName(); $objectName = $task->getObjectName(); $manager = get_class($task->manager()); $milestoneId = $task instanceof TemplateTask ? $task->getMilestoneId() : '0'; $subTasks = $task->getSubTasks(); $parentId = $task->getParentId(); $ico = "ico-task"; $action = "edit"; $object = TemplateController::prepareObject($objectId, $id, $objectName, $objectTypeName, $manager, $action, $milestoneId, $subTasks, $parentId, $ico); $template_task_data = array('object' => $object); if (array_var($_REQUEST, 'additional_tt_params')) { $additional_tt_params = json_decode(str_replace("'", '"', array_var($_REQUEST, 'additional_tt_params')), true); foreach ($additional_tt_params as $k => $v) { $template_task_data[$k] = $v; } } if (!array_var($_REQUEST, 'modal')) { evt_add("template object added", $template_task_data); } } try { // notify asignee if (array_var($task_data, 'send_notification') && $task->getAssignedToContactId() != $task->getAssignedById()) { $new_owner = $task->getAssignedTo(); if ($new_owner instanceof Contact) { Notifier::taskAssigned($task); } // if } // if if (array_var($task_data, 'send_notification')) { foreach ($sub_tasks_to_log['assigned'] as $st_to_log) { Notifier::taskAssigned($st_to_log); } } } catch (Exception $e) { } // try //notify subscribers $isSilent = true; if (array_var($task_data, 'send_notification_subscribers')) { $isSilent = false; } ApplicationLogs::createLog($task, ApplicationLogs::ACTION_EDIT, false, false, true, $log_info); //flash_success(lang('success edit task list', $task->getObjectName())); if (array_var($_REQUEST, 'modal')) { if (array_var($_REQUEST, 'reload')) { evt_add("reload current panel"); } else { ajx_current("empty"); $this->setLayout("json"); $this->setTemplate(get_template_path("empty")); // reload task info because plugins may have updated some task info (for example: name prefix) if ($is_template) { $task = TemplateTasks::findById($task->getId()); } else { $task = ProjectTasks::findById($task->getId()); } $params = array('msg' => lang('success edit task list', $task->getObjectName()), 'task' => $task->getArrayInfo(), 'reload' => array_var($_REQUEST, 'reload')); if ($task instanceof TemplateTask) { //$params['msg'] = lang('success edit template', $task->getObjectName()); $params['object'] = $template_task_data['object']; } //print_modal_json_response($params, true, array_var($_REQUEST, 'use_ajx')); ajx_extra_data($params); } } else { ajx_current("back"); } // if has subtasks and dates were changed, ask the user if the subtasks dates should also be changed if ($task instanceof ProjectTask && $task->countOpenSubTasks() > 0) { // check if there was any due date changes $dd_advance_info = null; if ($task->getDueDate() instanceof DateTimeValue && $old_due_date instanceof DateTimeValue && $old_due_date->getTimestamp() != $task->getDueDate()->getTimestamp()) { $dd_to_advance_ts = $task->getDueDate()->getTimestamp() - $old_due_date->getTimestamp(); if ($dd_to_advance_ts != 0) { $dd_advance_info = get_time_info($dd_to_advance_ts); } } // check if there was any start date changes $sd_advance_info = null; if ($task->getStartDate() instanceof DateTimeValue && $old_start_date instanceof DateTimeValue && $old_start_date->getTimestamp() != $task->getStartDate()->getTimestamp()) { $sd_to_advance_ts = $task->getStartDate()->getTimestamp() - $old_start_date->getTimestamp(); if ($sd_to_advance_ts != 0) { $sd_advance_info = get_time_info($sd_to_advance_ts); } } if ($dd_advance_info != null || $sd_advance_info != null) { evt_add('ask to change subtasks dates', array('dd_diff' => $dd_advance_info, 'sd_diff' => $sd_advance_info, 'task_id' => $task->getId())); } } } catch (Exception $e) { DB::rollback(); if (array_var($_REQUEST, 'modal')) { $this->setLayout("json"); $this->setTemplate(get_template_path("empty")); print_modal_json_response(array('errorCode' => 1, 'errorMessage' => $e->getMessage(), 'showMessage' => 1), true, array_var($_REQUEST, 'use_ajx')); } else { flash_error($e->getMessage()); } ajx_current("empty"); } // try } // if }
/** * Classify specific email * */ function classify() { if (logged_user()->isGuest()) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } $email = MailContents::findById(get_id()); if (!$email instanceof MailContent) { flash_error(lang('email dnx')); ajx_current("empty"); return; } if ($email->getIsDeleted()) { flash_error(lang('email dnx deleted')); ajx_current("empty"); return; } if (!$email->canEdit(logged_user())) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } MailUtilities::parseMail($email->getContent(), $decoded, $parsedEmail, $warnings); if (array_var($_POST, 'submit')) { try { $ctrl = new ObjectController(); $create_task = array_var($classification_data, 'create_task') == 'checked'; $canWriteFiles = $this->checkFileWritability($classification_data, $parsedEmail); if ($canWriteFiles) { DB::beginWork(); if ($members = json_decode(array_var($_POST, 'members'))) { $ctrl->add_to_members($email, $members); } $conversation = MailContents::getMailsFromConversation($email); foreach ($conversation as $conv_email) { $ctrl->add_to_members($conv_email, $members); MailUtilities::parseMail($conv_email->getContent(), $decoded, $parsedEmail, $warnings); if ($conv_email->getHasAttachments()) { $this->classifyFile($classification_data, $conv_email, $parsedEmail, $members); } } DB::commit(); flash_success(lang('success classify email')); if ($create_task) { ajx_replace(true); $this->redirectTo('task', 'add_task', array('from_email' => $email->getId(), 'replace' => 1)); } else { ajx_current("back"); evt_add("reload mails panel", array()); } } else { flash_error(lang("error classifying attachment cant open file")); ajx_current("empty"); } // If can write files // Error... } catch (Exception $e) { DB::rollback(); flash_error($e->getMessage()); ajx_current("empty"); } } tpl_assign('email', $email); tpl_assign('parsedEmail', $parsedEmail); }
function init() { require_javascript("og/MemberManager.js"); ajx_current("panel", "members", null, null, true); ajx_replace(true); }
function init() { require_javascript("og/CalendarManager.js"); ajx_current("panel", "events", null, null, true); ajx_replace(true); }
/** * @param $email MailContent to classify * @param $members array of member ids in which the $email will be classified * @param $classification_data additional data needed for classification * @param $process_conversation boolean, if true all the conversation will be classified * @param $after_receiving boolean, indicates wheather the function was called after receiving the email or if only the user is classiffying the email */ function do_classify_mail($email, $members, $classification_data = null, $process_conversation = true, $after_receiving = false) { try { $ctrl = new ObjectController(); $create_task = false; //array_var($classification_data, 'create_task') == 'checked'; if (is_null($classification_data)) { $classification_data = array(); MailUtilities::parseMail($email->getContent(), $decoded, $parsedEmail, $warnings); for ($j = 0; $j < count(array_var($parsedEmail, "Attachments", array())); $j++) { $classification_data["att_" . $j] = true; } } foreach ($members as $k => &$mem_id) { if ($mem_id == "") { unset($members[$k]); } } $canWriteFiles = $this->checkFileWritability($classification_data, $parsedEmail); if ($canWriteFiles) { // if $after_receiving == true transaction has already been started, so dont start a new one if (!$after_receiving) { DB::beginWork(); } if (count($members) > 0) { $account_owner = logged_user() instanceof contact ? logged_user() : Contacts::findById($email->getAccount()->getContactId()); $ctrl->add_to_members($email, $members, $account_owner); if ($after_receiving && $email->getHasAttachments() && user_config_option('auto_classify_attachments') || !$after_receiving && $email->getHasAttachments() && (user_config_option('mail_drag_drop_prompt') == 'classify' || user_config_option('mail_drag_drop_prompt') == 'prompt' && intval(array_var($_REQUEST, 'classify_attachments')) > 0)) { if (count($members) > 0) { $member_instances = Members::findAll(array('conditions' => 'id IN (' . implode(',', $members) . ')')); MailUtilities::parseMail($email->getContent(), $decoded, $parsedEmail, $warnings); $this->classifyFile($classification_data, $email, $parsedEmail, $member_instances, false, !$after_receiving); } } } else { $email->removeFromMembers(logged_user() instanceof contact ? logged_user() : Contacts::findById($email->getAccount()->getContactId(), $email->getMembers())); } if ($process_conversation) { $conversation = MailContents::getMailsFromConversation($email); if (count($members) > 0) { $member_instances = Members::findAll(array('conditions' => 'id IN (' . implode(',', $members) . ')')); foreach ($conversation as $conv_email) { // dont process orignal email again if ($conv_email->getId() == $email->getId()) { continue; } $account_owner = logged_user() instanceof contact ? logged_user() : Contacts::findById($conv_email->getAccount()->getContactId()); $ctrl->add_to_members($conv_email, $members, $account_owner); MailUtilities::parseMail($conv_email->getContent(), $decoded, $parsedEmail, $warnings); if ($conv_email->getHasAttachments()) { if ($after_receiving && user_config_option('auto_classify_attachments') || !$after_receiving && (user_config_option('mail_drag_drop_prompt') == 'classify' || user_config_option('mail_drag_drop_prompt') == 'prompt' && intval(array_var($_REQUEST, 'classify_attachments')) > 0)) { $this->classifyFile($classification_data, $conv_email, $parsedEmail, $member_instances, false, !$after_receiving); } } } } else { if (!$after_receiving) { foreach ($conversation as $conv_email) { $conv_email->removeFromMembers(logged_user() instanceof contact ? logged_user() : Contacts::findById($email->getAccount()->getContactId(), $conv_email->getMembers())); } } } } if (!$after_receiving) { DB::commit(); } flash_success(lang('success classify email')); if ($create_task) { ajx_replace(true); $this->redirectTo('task', 'add_task', array('from_email' => $email->getId(), 'replace' => 1)); } else { ajx_current("back"); if (!$after_receiving) { evt_add("reload current panel", array()); } } } else { flash_error(lang("error classifying attachment cant open file")); ajx_current("empty"); } // If can write files // Error... } catch (Exception $e) { if (!$after_receiving) { DB::rollback(); } flash_error($e->getMessage()); ajx_current("empty"); } }
function do_classify_mail($email, $members, $classification_data = null) { try { $ctrl = new ObjectController(); $create_task = false;//array_var($classification_data, 'create_task') == 'checked'; if (is_null($classification_data)) { $classification_data = array(); MailUtilities::parseMail($email->getContent(), $decoded, $parsedEmail, $warnings); for ($j=0; $j < count(array_var($parsedEmail, "Attachments", array())); $j++) { $classification_data["att_".$j] = true; } } $canWriteFiles = $this->checkFileWritability($classification_data, $parsedEmail); if ($canWriteFiles) { DB::beginWork(); if ($members) { $account_owner = logged_user() instanceof contact ? logged_user() : Contacts::findById($email->getAccount()->getContactId()); $ctrl->add_to_members($email, $members, $account_owner); } $conversation = MailContents::getMailsFromConversation($email); if (count($members) > 0) { $member_instances = Members::findAll(array('conditions' => 'id IN ('.implode(',',$members).')')); foreach ($conversation as $conv_email) { $account_owner = logged_user() instanceof contact ? logged_user() : Contacts::findById($conv_email->getAccount()->getContactId()); $ctrl->add_to_members($conv_email, $members, $account_owner); MailUtilities::parseMail($conv_email->getContent(), $decoded, $parsedEmail, $warnings); if ($conv_email->getHasAttachments()) { $this->classifyFile($classification_data, $conv_email, $parsedEmail, $member_instances, true); } } } DB::commit(); flash_success(lang('success classify email')); if ($create_task) { ajx_replace(true); $this->redirectTo('task', 'add_task', array('from_email' => $email->getId(), 'replace' => 1)); } else { ajx_current("back"); evt_add("reload mails panel", array()); } } else { flash_error(lang("error classifying attachment cant open file")); ajx_current("empty"); } // If can write files // Error... } catch(Exception $e) { DB::rollback(); flash_error($e->getMessage()); ajx_current("empty"); } }
function show_all_linked_objects() { require_javascript("og/LinkedObjectsManager.js"); ajx_current("panel", "linkedobject", null, array('linked_object' => array_var($_GET, 'linked_object'), 'linked_object_name' => array_var($_GET, 'linked_object_name'), 'linked_object_ico' => array_var($_GET, 'linked_object_ico'))); ajx_replace(true); }
/** * Edit task * * @access public * @param void * @return null */ function edit_task() { if (logged_user()->isGuest()) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } $this->setTemplate('add_task'); $task = ProjectTasks::findById(get_id()); if (!$task instanceof ProjectTask) { flash_error(lang('task list dnx')); ajx_current("empty"); return; } // if if (!$task->canEdit(logged_user())) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } // if if (array_var($_GET, 'replace')) { ajx_replace(true); } $task_data = array_var($_POST, 'task'); $time_estimate = array_var($_POST, 'hours', 0) * 60 + array_var($_POST, 'minutes', 0); if ($time_estimate > 0) { $estimatedTime = $time_estimate; } else { $estimatedTime = $task->getTimeEstimate(); } if (!is_array($task_data)) { $this->getRepeatOptions($task, $occ, $rsel1, $rsel2, $rsel3, $rnum, $rend, $rjump); $dd = $task->getDueDate() instanceof DateTimeValue ? $task->getDueDate()->advance(logged_user()->getTimezone() * 3600, false) : null; $sd = $task->getStartDate() instanceof DateTimeValue ? $task->getStartDate()->advance(logged_user()->getTimezone() * 3600, false) : null; $post_dd = null; if (array_var($_POST, 'task_due_date')) { $post_dd = getDateValue(array_var($_POST, 'task_due_date')); if ($post_dd instanceof DateTimeValue) { $duetime = getTimeValue(array_var($_POST, 'task_due_time')); if (is_array($duetime)) { $post_dd->setHour(array_var($duetime, 'hours')); $post_dd->setMinute(array_var($duetime, 'mins')); $post_dd->advance(logged_user()->getTimezone() * 3600, false); } } } $post_st = null; if (array_var($_POST, 'task_start_date')) { $post_st = getDateValue(array_var($_POST, 'task_start_date')); if ($post_st instanceof DateTimeValue) { $starttime = getTimeValue(array_var($_POST, 'task_start_time')); if (is_array($starttime)) { $post_st->setHour(array_var($starttime, 'hours')); $post_st->setMinute(array_var($starttime, 'mins')); $post_st->advance(logged_user()->getTimezone() * 3600, false); } } } $task_data = array('name' => array_var($_POST, 'name', $task->getObjectName()), 'text' => array_var($_POST, 'text', $task->getText()), 'milestone_id' => array_var($_POST, 'milestone_id', $task->getMilestoneId()), 'due_date' => getDateValue($post_dd, $dd), 'start_date' => getDateValue($post_st, $sd), 'parent_id' => $task->getParentId(), 'assigned_to_contact_id' => array_var($_POST, 'assigned_to_contact_id', $task->getAssignedToContactId()), 'priority' => array_var($_POST, 'priority', $task->getPriority()), 'send_notification' => array_var($_POST, 'notify') == 'true', 'time_estimate' => $estimatedTime, 'percent_completed' => $task->getPercentCompleted(), 'forever' => $task->getRepeatForever(), 'rend' => $rend, 'rnum' => $rnum, 'rjump' => $rjump, 'rsel1' => $rsel1, 'rsel2' => $rsel2, 'rsel3' => $rsel3, 'occ' => $occ, 'repeat_by' => $task->getRepeatBy(), 'object_subtype' => array_var($_POST, "object_subtype", $task->getObjectSubtype() != 0 ? $task->getObjectSubtype() : config_option('default task co type')), 'type_content' => $task->getTypeContent(), 'multi_assignment' => $task->getColumnValue('multi_assignment', 0)); // array } // if //I find all those related to the task to find out if the original $task_related = ProjectTasks::findByRelated($task->getObjectId()); if (!$task_related) { //is not the original as the original look plus other related if ($task->getOriginalTaskId() != "0") { $task_related = ProjectTasks::findByTaskAndRelated($task->getObjectId(), $task->getOriginalTaskId()); } } if ($task_related) { $pending_id = 0; foreach ($task_related as $t_rel) { if ($task->getStartDate() <= $t_rel->getStartDate() && $task->getDueDate() <= $t_rel->getDueDate() && !$t_rel->isCompleted()) { $pending_id = $t_rel->getId(); break; } } tpl_assign('pending_task_id', $pending_id); tpl_assign('task_related', true); } else { tpl_assign('pending_task_id', 0); tpl_assign('task_related', false); } tpl_assign('task', $task); tpl_assign('task_data', $task_data); if (is_array(array_var($_POST, 'task'))) { $send_edit = false; if ($task->getAssignedToContactId() == array_var($task_data, 'assigned_to_contact_id')) { $send_edit = true; } $old_owner = $task->getAssignedTo(); if (array_var($task_data, 'parent_id') == $task->getId()) { flash_error(lang("task own parent error")); ajx_current("empty"); return; } $task_data['due_date'] = getDateValue(array_var($_POST, 'task_due_date')); $task_data['start_date'] = getDateValue(array_var($_POST, 'task_start_date')); if ($task_data['due_date'] instanceof DateTimeValue) { $duetime = getTimeValue(array_var($_POST, '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($_POST, '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); } try { $err_msg = $this->setRepeatOptions($task_data); if ($err_msg) { flash_error($err_msg); ajx_current("empty"); return; } if (!isset($task_data['parent_id'])) { $task_data['parent_id'] = 0; } $member_ids = json_decode(array_var($_POST, 'members')); $was_template = $task->getIsTemplate(); 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); $task->setIsTemplate($was_template); // is_template value must not be changed from ui $totalMinutes = array_var($task_data, 'time_estimate_hours') * 60 + array_var($task_data, 'time_estimate_minutes'); $task->setTimeEstimate($totalMinutes); if ($task->getParentId() > 0 && $task->hasChild($task->getParentId())) { flash_error(lang('task child of child error')); ajx_current("empty"); return; } DB::beginWork(); $task->save(); $this->calculate_time_estimate($task, array_var($task_data, "percent_completed")); // dependencies if (config_option('use tasks dependencies')) { $previous_tasks = array_var($task_data, 'previous'); if (is_array($previous_tasks)) { foreach ($previous_tasks as $ptask) { if ($ptask == $task->getId()) { continue; } $dep = ProjectTaskDependencies::findById(array('previous_task_id' => $ptask, 'task_id' => $task->getId())); if (!$dep instanceof ProjectTaskDependency) { $dep = new ProjectTaskDependency(); $dep->setPreviousTaskId($ptask); $dep->setTaskId($task->getId()); $dep->save(); } } $saved_ptasks = ProjectTaskDependencies::findAll(array('conditions' => 'task_id = ' . $task->getId())); foreach ($saved_ptasks as $pdep) { if (!in_array($pdep->getPreviousTaskId(), $previous_tasks)) { $pdep->delete(); } } } else { ProjectTaskDependencies::delete('task_id = ' . $task->getId()); } } // Add assigned user to the subscibers list if ($task->getAssignedToContactId() > 0 && Contacts::instance()->findById($task->getAssignedToContactId())) { if (!isset($_POST['subscribers'])) { $_POST['subscribers'] = array(); } $_POST['subscribers']['user_' . $task->getAssignedToContactId()] = 'checked'; } $object_controller = new ObjectController(); $object_controller->add_to_members($task, $member_ids); $object_controller->add_subscribers($task); $object_controller->link_to_new_object($task); $object_controller->add_custom_properties($task); $object_controller->add_reminders($task); // apply values to subtasks $assigned_to = $task->getAssignedToContactId(); $subtasks = $task->getAllSubTasks(); $milestone_id = $task->getMilestoneId(); $apply_ms = array_var($task_data, 'apply_milestone_subtasks') == "checked"; $apply_at = array_var($task_data, 'apply_assignee_subtasks', '') == "checked"; foreach ($subtasks as $sub) { $modified = false; //if ($apply_at || !($sub->getAssignedToContactId() > 0)) { if ($apply_at) { $sub->setAssignedToContactId($assigned_to); $modified = true; } if ($apply_ms) { $sub->setMilestoneId($milestone_id); $modified = true; } if ($modified) { $sub->save(); } } $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); if (config_option('repeating_task') == 1) { $opt_rep_day['saturday'] = false; $opt_rep_day['sunday'] = false; if (array_var($task_data, 'repeat_saturdays', false)) { $opt_rep_day['saturday'] = true; } if (array_var($task_data, 'repeat_sundays', false)) { $opt_rep_day['sunday'] = true; } $this->repetitive_task($task, $opt_rep_day); } if (isset($_POST['type_related'])) { if ($_POST['type_related'] == "all" || $_POST['type_related'] == "news") { $task_data['members'] = json_decode(array_var($_POST, 'members')); 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); } } 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); } } DB::commit(); try { if (array_var($task_data, 'send_notification') == 'checked' && $send_edit == false) { $new_owner = $task->getAssignedTo(); if ($new_owner instanceof Contact) { Notifier::taskAssigned($task); } // if } // if } catch (Exception $e) { } // try flash_success(lang('success edit task list', $task->getObjectName())); ajx_current("back"); } catch (Exception $e) { DB::rollback(); flash_error($e->getMessage()); ajx_current("empty"); } // try } // if }
function init() { require_javascript("og/WebpageManager.js"); ajx_current("panel", "webpages", null, null, true); ajx_replace(true); }
function view_history() { $id = array_var($_GET, 'id'); $obj = Objects::findObject($id); $page_size = 20; $limit = $page_size; // get submitted modification logs page $mod_page_submitted = array_var($_REQUEST, 'mod_page'); $mod_page = $mod_page_submitted ? $mod_page_submitted : 1; $mod_offset = $page_size * ($mod_page - 1); // get submitted read logs page $view_page_submitted = array_var($_REQUEST, 'view_page'); $view_page = $view_page_submitted ? $view_page_submitted : 1; $view_offset = $page_size * ($view_page - 1); $isUser = $obj instanceof Contact && $obj->isUser() ? true : false; if (!$obj instanceof ApplicationDataObject) { flash_error(lang('object dnx')); ajx_current("empty"); return; } // if if ($isUser && (logged_user()->getId() != $id && !logged_user()->isAdministrator())) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } // if if (!$isUser && !$obj->canView(logged_user())) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } // if logged user is guest don't show other users logs $extra_conditions = ""; if (logged_user()->isGuest()) { $extra_conditions = " AND `created_by_id` = " . logged_user()->getId(); } $logs = ApplicationLogs::getObjectLogs($obj, false, true, $limit, $mod_offset, $extra_conditions); $logs_read = ApplicationReadLogs::getObjectLogs($obj, $limit, $view_offset, $extra_conditions); // build modification logs pagination object $total_logs = ApplicationLogs::countObjectLogs($obj, false, true, $extra_conditions); $mod_logs_pagination = array('total_pages' => ceil($total_logs / $page_size), 'current_page' => $mod_page); // build read logs pagination object $total_read_logs = ApplicationReadLogs::countObjectLogs($obj, $extra_conditions); $view_logs_pagination = array('total_pages' => ceil($total_read_logs / $page_size), 'current_page' => $view_page); if ($mod_page_submitted || $view_page_submitted) { ajx_replace(true); } tpl_assign('object', $obj); tpl_assign('logs', $logs); tpl_assign('logs_read', $logs_read); tpl_assign('mod_logs_pagination', $mod_logs_pagination); tpl_assign('view_logs_pagination', $view_logs_pagination); tpl_assign('curtab', array_var($_REQUEST, 'curtab', '')); }
/** * Show reporting index page * * @param void * @return null */ function add_chart() { if (logged_user()->isGuest()) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } $factory = new ProjectChartFactory(); $types = $factory->getChartTypes(); $chart_data = array_var($_POST, 'chart'); if (!is_array($chart_data)) { $chart_data = array('type_id' => 1, 'display_id' => 20, 'show_in_project' => 1, 'show_in_parents' => 0); // array } // if tpl_assign('chart_data', $chart_data); if (is_array(array_var($_POST, 'chart'))) { $project = Projects::findById(array_var($chart_data, 'project_id')); if (!$project instanceof Project) { flash_error(lang('project dnx')); ajx_current("empty"); return; } $chart = $factory->getChart(array_var($chart_data, 'type_id')); $chart->setDisplayId(array_var($chart_data, 'display_id')); $chart->setTitle(array_var($chart_data, 'title')); if (array_var($chart_data, 'save') == 1) { $chart->setFromAttributes($chart_data); try { DB::beginWork(); $chart->save(); $chart->setProject($project); DB::commit(); flash_success(lang('success add chart', $chart->getTitle())); ajx_current('back'); } catch (Exception $e) { DB::rollback(); flash_error($e->getMessage()); ajx_current("empty"); } return; } $chart->ExecuteQuery(); tpl_assign('chart', $chart); ajx_replace(true); } tpl_assign('chart_displays', $factory->getChartDisplays()); tpl_assign('chart_list', $factory->getChartTypes()); }
function init_overview() { require_javascript("og/OverviewManager.js"); ajx_current("panel", "overview", null, null, true); ajx_replace(true); }
function list_members() { if (!logged_user()->isAdminGroup()) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } ajx_set_no_toolbar(); $dim_id = array_var($_REQUEST, 'dim', 0); $dimension = Dimensions::findById($dim_id); if (!$dimension instanceof Dimension) { flash_error(lang('dimension snx')); ajx_current("empty"); return; } if (isset($_REQUEST['page'])) { ajx_replace(true); } // parameters $page = array_var($_REQUEST, 'page'); $order_by = array_var($_REQUEST, 'order'); $order_by_dir = array_var($_REQUEST, 'order_dir'); // pagination params $items_x_page = array_var($_REQUEST, 'items_x_page', 20); if (!$page) { $page = 1; } $offset = $items_x_page * ($page - 1); // order defaults if (!$order_by) { $order_by = 'name'; } if (!in_array($order_by_dir, array('ASC', 'DESC'))) { $order_by_dir = 'ASC'; } // this function already checks dimension options $dim_name = $dimension->getName(); // permissions sql $perm_sql = ""; if ($dimension->getDefinesPermissions() && !logged_user()->isAdministrator()) { $pg_ids = logged_user()->getPermissionGroupIds(); $perm_sql = " AND EXISTS (SELECT cmp.member_id FROM " . TABLE_PREFIX . "contact_member_permissions cmp WHERE cmp.member_id=m.id AND cmp.permission_group_id IN (" . implode(',', $pg_ids) . "))"; } $main_sql = "SELECT m.id, l.created_on, l.created_by_id, l.member_id FROM " . TABLE_PREFIX . "members m LEFT JOIN " . TABLE_PREFIX . "application_logs l ON l.member_id=m.id AND l.action='add' WHERE m.dimension_id='{$dim_id}' {$perm_sql}"; $sql = "{$main_sql}\r\n\t\t\t\tORDER BY {$order_by} {$order_by_dir} \r\n\t\t\t\tLIMIT {$offset}, {$items_x_page}"; $rows = DB::executeAll($sql); $count_sql = str_replace("SELECT m.id, l.created_on, l.created_by_id, l.member_id FROM", "SELECT count(*) as total FROM", $main_sql); $count_row = DB::executeAll($count_sql); $members = array(); $ids = array(); $log_data = array(); foreach ($rows as $row) { $members[] = Members::findById($row['id']); $log_data[$row['id']] = array('created_on' => $row['created_on'], 'created_by_id' => $row['created_by_id']); } $member_type_ids = array_flat(DB::executeAll("SELECT object_type_id FROM " . TABLE_PREFIX . "dimension_object_types WHERE dimension_id={$dim_id} AND is_root=1")); $member_types = ObjectTypes::findAll(array('conditions' => 'id IN (' . implode(',', $member_type_ids) . ')')); tpl_assign('members', $members); tpl_assign('log_data', $log_data); tpl_assign('dimension', $dimension); tpl_assign('dimension_name', $dim_name); tpl_assign('member_types', $member_types); tpl_assign('page', $page); tpl_assign('total_items', $count_row[0]['total']); tpl_assign('items_x_page', $items_x_page); tpl_assign('order_by', $order_by); tpl_assign('order_by_dir', $order_by_dir); }
function view_custom_report() { $report_id = array_var($_GET, 'id'); if (array_var($_GET, 'replace')) { ajx_replace(); } tpl_assign('id', $report_id); if (isset($report_id)) { $report = Reports::getReport($report_id); $conditions = ReportConditions::getAllReportConditions($report_id); $paramConditions = array(); foreach ($conditions as $condition) { if ($condition->getIsParametrizable()) { $paramConditions[] = $condition; } } $ot = ObjectTypes::findById($report->getReportObjectTypeId()); eval('$managerInstance = ' . $ot->getHandlerClass() . "::instance();"); $externalCols = $managerInstance->getExternalColumns(); $externalFields = array(); foreach ($externalCols as $extCol) { $externalFields[$extCol] = $this->get_ext_values($extCol, $report->getReportObjectTypeId()); } $params = array_var($_GET, 'params'); if (count($paramConditions) > 0 && !isset($params)) { $this->setTemplate('custom_report_parameters'); tpl_assign('model', $report->getReportObjectTypeId()); tpl_assign('title', $report->getObjectName()); tpl_assign('description', $report->getDescription()); tpl_assign('conditions', $paramConditions); tpl_assign('external_fields', $externalFields); } else { $this->setTemplate('report_wrapper'); tpl_assign('template_name', 'view_custom_report'); tpl_assign('title', $report->getObjectName()); tpl_assign('genid', gen_id()); $parameters = ''; if (isset($params)) { foreach ($params as $id => $value) { $parameters .= '¶ms[' . $id . ']=' . $value; } } tpl_assign('parameterURL', $parameters); $offset = array_var($_GET, 'offset'); if (!isset($offset)) { $offset = 0; } $limit = array_var($_GET, 'limit'); if (!isset($limit)) { $limit = 50; } $order_by = array_var($_GET, 'order_by'); if (!isset($order_by)) { $order_by = ''; } tpl_assign('order_by', $order_by); $order_by_asc = array_var($_GET, 'order_by_asc'); if (!isset($order_by_asc)) { $order_by_asc = null; } tpl_assign('order_by_asc', $order_by_asc); $results = Reports::executeReport($report_id, $params, $order_by, $order_by_asc, $offset, $limit); if (!isset($results['columns'])) { $results['columns'] = array(); } tpl_assign('columns', $results['columns']); tpl_assign('db_columns', $results['db_columns']); if (!isset($results['rows'])) { $results['rows'] = array(); } tpl_assign('rows', $results['rows']); if (!isset($results['pagination'])) { $results['pagination'] = ''; } tpl_assign('pagination', $results['pagination']); tpl_assign('types', self::get_report_column_types($report_id)); tpl_assign('post', $params); $ot = ObjectTypes::findById($report->getReportObjectTypeId()); tpl_assign('model', $ot->getHandlerClass()); tpl_assign('description', $report->getDescription()); tpl_assign('conditions', $conditions); tpl_assign('parameters', $params); tpl_assign('id', $report_id); tpl_assign('to_print', false); } ApplicationReadLogs::createLog($report, ApplicationReadLogs::ACTION_READ); } }
function init() { require_javascript("og/ContactManager.js"); ajx_current("panel", "contacts", null, null, true); ajx_replace(true); }
/** * @author Ignacio Vazquez */ function main_dashboard() { if (user_config_option("overviewAsList")) { require_javascript("og/OverviewManager.js"); ajx_current("panel", "overview", null, null, true); ajx_replace(true); } else { ajx_set_no_toolbar(true); } }