function enable_all_context_help() { $context_help_options = UserWsConfigOptions::getOptionsByCategoryName('context help', true); foreach ($context_help_options as $option) { set_user_config_option($option->getName(), true, logged_user()->getId()); } ajx_current("empty"); flash_success(lang('success enable all context help')); }
function show_context_help() { $show_context_help = array_var($_GET, 'show_context_help'); set_user_config_option('show_context_help', $show_context_help, logged_user()->getId()); ajx_current("empty"); if ($show_context_help == 'until_close') { flash_success(lang('success enable context help')); } else { flash_success(lang('success disable context help')); } }
function index() { $tasksUserId = array_var($_GET, 'tu'); if (is_null($tasksUserId)) { $tasksUserId = user_config_option('TM tasks user filter', logged_user()->getId()); } else { if (user_config_option('TM tasks user filter') != $tasksUserId) { set_user_config_option('TM tasks user filter', $tasksUserId, logged_user()->getId()); } } $timeslotsUserId = array_var($_GET, 'tsu'); if (is_null($timeslotsUserId)) { $timeslotsUserId = user_config_option('TM user filter', 0); } else { if (user_config_option('TM user filter') != $timeslotsUserId) { set_user_config_option('TM user filter', $timeslotsUserId, logged_user()->getId()); } } $showTimeType = array_var($_GET, 'stt'); if (is_null($showTimeType)) { $showTimeType = user_config_option('TM show time type', 0); } else { if (user_config_option('TM show time type') != $showTimeType) { set_user_config_option('TM show time type', $showTimeType, logged_user()->getId()); } } $start = array_var($_GET, 'start', 0); $limit = 20; $tasksUser = Contacts::findById($tasksUserId); $timeslotsUser = Contacts::findById($timeslotsUserId); //Active tasks view $open_timeslots = Timeslots::instance()->listing(array("extra_conditions" => " AND end_time = '" . EMPTY_DATETIME . "' AND contact_id = " . $tasksUserId))->objects; $tasks = array(); foreach ($open_timeslots as $open_timeslot) { $task = ProjectTasks::findById($open_timeslot->getRelObjectId()); if ($task instanceof ProjectTask && !$task->isCompleted() && !$task->isTrashed() && !$task->isArchived()) { $tasks[] = $task; } } ProjectTasks::populateTimeslots($tasks); //Timeslots view $total = 0; switch ($showTimeType) { case 0: //Show only timeslots added through the time panel $result = Timeslots::getGeneralTimeslots(active_context(), $timeslotsUser, $start, $limit); $timeslots = $result->objects; $total = $result->total; break; default: throw new Error('Unrecognised TM show time type: ' . $showTimeType); } //Get Users Info $users = array(); $context = active_context(); if (!can_manage_time(logged_user())) { if (can_add(logged_user(), $context, Timeslots::instance()->getObjectTypeId())) { $users = array(logged_user()); } } else { if (logged_user()->isMemberOfOwnerCompany()) { $users = Contacts::getAllUsers(); } else { $users = logged_user()->getCompanyId() > 0 ? Contacts::getAllUsers(" AND `company_id` = " . logged_user()->getCompanyId()) : array(logged_user()); } $tmp_users = array(); foreach ($users as $user) { if (can_add($user, $context, Timeslots::instance()->getObjectTypeId())) { $tmp_users[] = $user; } } $users = $tmp_users; } //Get Companies Info if (logged_user()->isMemberOfOwnerCompany() || logged_user()->isAdminGroup()) { $companies = Contacts::getCompaniesWithUsers(); } else { $companies = array(); if (logged_user()->getCompanyId() > 0) { $companies[] = logged_user()->getCompany(); } } $required_dimensions = DimensionObjectTypeContents::getRequiredDimensions(Timeslots::instance()->getObjectTypeId()); $draw_inputs = !$required_dimensions || count($required_dimensions) == 0; if (!$draw_inputs) { $ts_ots = DimensionObjectTypeContents::getDimensionObjectTypesforObject(Timeslots::instance()->getObjectTypeId()); $context = active_context(); foreach ($context as $sel) { if ($sel instanceof Member) { foreach ($ts_ots as $ts_ot) { if ($sel->getDimensionId() == $ts_ot->getDimensionId() && $sel->getObjectTypeId() == $ts_ot->getDimensionObjectTypeId()) { $draw_inputs = true; break; } } if ($draw_inputs) { break; } } } } tpl_assign('draw_inputs', $draw_inputs); tpl_assign('selected_user', logged_user()->getId()); tpl_assign('timeslots', $timeslots); tpl_assign('tasks', $tasks); if (count($tasks) > 0) { tpl_assign('all_users', Contacts::getAllUsers()); } tpl_assign('users', $users); tpl_assign('start', $start); tpl_assign('limit', $limit); tpl_assign('total', $total); tpl_assign('companies', $companies); ajx_set_no_toolbar(true); }
function reset_password() { $tok = array_var($_GET, 't'); $uid = array_var($_GET, 'uid'); if (!$tok || !$uid) { flash_error(lang('invalid parameters')); $this->redirectTo('access', 'login'); } $user = Users::findById($uid); if (!$user instanceof User) { flash_error(lang('user dnx')); $this->redirectTo('access', 'login'); } $stok = user_config_option('reset_password', null, $user->getId()); if (!$stok) { flash_error(lang('reset password expired', lang('forgot password'))); $this->redirectTo('access', 'login'); } $split = explode(";", $stok); if (count($split) < 2) { flash_error(lang('reset password expired', lang('forgot password'))); $this->redirectTo('access', 'login'); } $token = $split[0]; $timestamp = $split[1]; if ($timestamp < time()) { set_user_config_option('reset_password', '', $user->getId()); flash_error(lang('reset password expired', lang('forgot password'))); $this->redirectTo('access', 'login'); } if ($token != $tok) { flash_error(lang('reset password expired', lang('forgot password'))); $this->redirectTo('access', 'login'); } tpl_assign('token', $token); tpl_assign('user', $user); $new_password = array_var($_POST, 'new_password'); if ($new_password) { $repeat_password = array_var($_POST, 'repeat_password'); if ($new_password != $repeat_password) { flash_error(lang('passwords dont match')); return; } $user_password = new UserPassword(); $user_password->setUserId($user->getId()); $user_password->password_temp = $new_password; $user_password->setPasswordDate(DateTimeValueLib::now()); $user_password->setPassword(cp_encrypt($new_password, $user_password->getPasswordDate()->getTimestamp())); $user_password->save(); $user->setPassword($new_password); $user->setUpdatedOn(DateTimeValueLib::now()); $user->save(); set_user_config_option('reset_password', '', $user->getId()); flash_success(lang('success reset password')); $this->redirectTo('access', 'login'); } }
function update_user_preference() { ajx_current("empty"); $option_name = array_var($_GET, 'name'); $option_value = array_var($_GET, 'value'); if ($option_name != '') { try { DB::beginWork(); set_user_config_option($option_name, $option_value, logged_user()->getId()); DB::commit(); } catch (Exception $e) { DB::rollback(); flash_error($e->getMessage()); ajx_current("empty"); } } }
return; } /* get a list of locale settings */ $lang2locale = get_list_of_locales(); /* determine whether or not we can support the language */ /* user requests another language */ if (isset($_GET['language']) && isset($lang2locale[$_GET['language']])) { $cacti_locale = $_GET['language']; $cacti_country = $lang2locale[$_GET['language']]['country']; $_SESSION['language'] = $cacti_locale; /* save customized language setting (authenticated users only) */ set_user_config_option('language', $cacti_locale); /* language definition stored in the SESSION */ }elseif (isset($_SESSION['language']) && isset($lang2locale[$_SESSION['language']])){ $cacti_locale = $_SESSION['language']; $cacti_country = $lang2locale[$_SESSION['language']]['country']; /* look up for user customized language setting stored in Cacti DB */ }elseif ($user_locale = read_user_config_option('language')) { if(isset($lang2locale[$user_locale])) { $cacti_locale = $user_locale; $cacti_country = $lang2locale[$cacti_locale]['country']; $_SESSION['language'] = $cacti_locale; } /* detect browser settings if auto detection is enabled */
/** * Returns a list of emails according to the requested parameters * * @param string $action * @param string $tag * @param array $attributes * @param Project $project * @return array */ private function getEmails($tag, $attributes, $project = null, $start = null, $limit = null, $order_by = 'sent_date', $dir = 'ASC', &$totalCount = 0) { // Return if no emails should be displayed if (!isset($attributes["viewType"]) || $attributes["viewType"] != "all" && $attributes["viewType"] != "emails") { return null; } $account = array_var($attributes, "accountId"); $classif_filter = array_var($attributes, 'classifType'); $read_filter = array_var($attributes, 'readType'); set_user_config_option('mails account filter', $account, logged_user()->getId()); set_user_config_option('mails classification filter', $classif_filter, logged_user()->getId()); set_user_config_option('mails read filter', $read_filter, logged_user()->getId()); $state = array_var($attributes, 'stateType'); list($objects, $pagination) = MailContents::getEmails($tag, $account, $state, $read_filter, $classif_filter, $project, $start, $limit, $order_by, $dir); $totalCount = $pagination->getTotalItems(); //if standed in "All" check if all workspaces related to the email have been archived.. and if so, dont show them if (active_project() == null) { $aux = array(); foreach ($objects as $mail) { $check = WorkspaceObjects::getWorkspacesByObject('MailContents', $mail->getId()); $archived = true; foreach ($check as $wsobject) { $ws = Projects::findById($wsobject->getId()); if ($ws->getCompletedById() != '0') { continue; } $archived = false; break; } if (!$archived || $check == null) { $aux[] = $mail; } } return $aux; } return $objects; }
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 print_tasks_list() { $this->setLayout("html"); $request_conditions = $this->get_tasks_request_conditions(); $conditions = $request_conditions['conditions']; $groupId = array_var($_REQUEST, 'groupId', null); $start = 0; $limit = null; $show_more_conditions = array("groupId" => $groupId, "start" => $start, "limit" => $limit); //Groups $groupBy = array_var($_REQUEST, 'tasksGroupBy', user_config_option('tasksGroupBy')); if (array_var($_REQUEST, 'tasksOrderBy', false)) { set_user_config_option('tasksOrderBy', array_var($_REQUEST, 'tasksOrderBy'), logged_user()->getId()); } $groups = $this->getGroups($groupBy, $conditions, $show_more_conditions); if (is_null($groups)) { $groups = array(); } // Get subtasks $subtasks = array(); foreach ($groups as $group) { foreach ($group['group_tasks'] as $task) { if (count(array_var($task, 'subtasksIds')) > 0) { $t = ProjectTasks::findById($task['id']); $all_subtasks_info = $t->getAllSubtaskInfoInHierarchy(); $subtasks[$task['id']] = $all_subtasks_info; } } } // reorder tasks, put subtasks below the parent task if (count($subtasks) > 0) { foreach ($groups as &$group) { $old_tasks = $group['group_tasks']; $group['group_tasks'] = array(); foreach ($old_tasks as $t) { $group['group_tasks'][] = $t; if (isset($subtasks[$t['id']])) { foreach ($subtasks[$t['id']] as $subt) { $group['group_tasks'][] = $subt; } } } } } // ---------------------- $draw_options = json_decode(array_var($_REQUEST, 'draw_options'), true); $tasks_list_cols = json_decode(array_var($_REQUEST, 'tasks_list_cols'), true); $row_total_cols = json_decode(array_var($_REQUEST, 'row_total_cols'), true); tpl_assign('draw_options', $draw_options); tpl_assign('tasks_list_cols', $tasks_list_cols); tpl_assign('row_total_cols', $row_total_cols); tpl_assign('groups', $groups); }
function set_user_config_option_value() { ajx_current("empty"); if (!logged_user() instanceof Contact) { return; } $name = array_var($_GET, 'config_option_name'); $value = array_var($_GET, 'config_option_value'); set_user_config_option($name, $value, logged_user()->getId()); }
function create_user($user_data, $permissionsString) { $user = new User(); $user->setUsername(array_var($user_data, 'username')); $user->setDisplayName(array_var($user_data, 'display_name')); $user->setEmail(array_var($user_data, 'email')); $user->setCompanyId(array_var($user_data, 'company_id')); $user->setType(array_var($user_data, 'type')); $user->setTimezone(array_var($user_data, 'timezone')); if (!logged_user() instanceof User || can_manage_security(logged_user())) { $user->setCanEditCompanyData(array_var($user_data, 'can_edit_company_data')); $user->setCanManageSecurity(array_var($user_data, 'can_manage_security')); $user->setCanManageWorkspaces(array_var($user_data, 'can_manage_workspaces')); $user->setCanManageConfiguration(array_var($user_data, 'can_manage_configuration')); $user->setCanManageContacts(array_var($user_data, 'can_manage_contacts')); $user->setCanManageTemplates(array_var($user_data, 'can_manage_templates')); $user->setCanManageReports(array_var($user_data, 'can_manage_reports')); $user->setCanManageTime(array_var($user_data, 'can_manage_time')); $user->setCanAddMailAccounts(array_var($user_data, 'can_add_mail_accounts')); $other_permissions = array(); Hook::fire('add_user_permissions', $user, $other_permissions); foreach ($other_permissions as $k => $v) { $user->setColumnValue($k, array_var($user_data, $k)); } } if (array_var($user_data, 'password_generator', 'random') == 'random') { // Generate random password $password = UserPasswords::generateRandomPassword(); } else { // Validate input $password = array_var($user_data, 'password'); if (trim($password) == '') { throw new Error(lang('password value required')); } // if if ($password != array_var($user_data, 'password_a')) { throw new Error(lang('passwords dont match')); } // if } // if $user->setPassword($password); $user->save(); $user_password = new UserPassword(); $user_password->setUserId($user->getId()); $user_password->setPasswordDate(DateTimeValueLib::now()); $user_password->setPassword(cp_encrypt($password, $user_password->getPasswordDate()->getTimestamp())); $user_password->password_temp = $password; $user_password->save(); if (array_var($user_data, 'autodetect_time_zone', 1) == 1) { set_user_config_option('autodetect_time_zone', 1, $user->getId()); } if ($user->getType() == 'admin') { if ($user->getCompanyId() != owner_company()->getId() || logged_user() instanceof User && !can_manage_security(logged_user())) { // external users can't be admins or logged user has no rights to create admins => set as Normal $user->setType('normal'); } else { $user->setAsAdministrator(true); } } /* create contact for this user*/ if (array_var($user_data, 'create_contact', 1)) { // if contact with same email exists take it, else create new $contact = Contacts::getByEmail($user->getEmail(), true); if (!$contact instanceof Contact) { $contact = new Contact(); $contact->setEmail($user->getEmail()); } else { if ($contact->isTrashed()) { $contact->untrash(); } } $contact->setFirstname($user->getDisplayName()); $contact->setUserId($user->getId()); $contact->setTimezone($user->getTimezone()); $contact->setCompanyId($user->getCompanyId()); $contact->save(); } else { $contact_id = array_var($user_data, 'contact_id'); $contact = Contacts::findById($contact_id); if ($contact instanceof Contact) { // user created from a contact $contact->setUserId($user->getId()); $contact->save(); } else { // if contact with same email exists use it as user's contact, without changing it $contact = Contacts::getByEmail($user->getEmail(), true); if ($contact instanceof Contact) { $contact->setUserId($user->getId()); if ($contact->isTrashed()) { $contact->untrash(); } $contact->save(); } } } $contact = $user->getContact(); if ($contact instanceof Contact) { // update contact data with data entered for this user $contact->setCompanyId($user->getCompanyId()); if ($contact->getEmail() != $user->getEmail()) { // make user's email the contact's main email address if ($contact->getEmail2() == $user->getEmail()) { $contact->setEmail2($contact->getEmail()); } else { if ($contact->getEmail3() == $user->getEmail()) { $contact->setEmail3($contact->getEmail()); } else { if ($contact->getEmail2() == "") { $contact->setEmail2($contact->getEmail()); } else { $contact->setEmail3($contact->getEmail()); } } } } $contact->setEmail($user->getEmail()); $contact->save(); } if (!$user->isGuest()) { /* create personal project or assing the selected*/ //if recived a personal project assing this //project as personal project for this user $new_project = null; $personalProjectId = array_var($user_data, 'personal_project', 0); $project = Projects::findById($personalProjectId); if (!$project instanceof Project) { $project = new Project(); $wname = new_personal_project_name($user->getUsername()); $project->setName($wname); $wdesc = Localization::instance()->lang(lang('personal workspace description')); if (!is_null($wdesc)) { $project->setDescription($wdesc); } $project->setCreatedById($user->getId()); $project->save(); //Save to set an ID number $project->setP1($project->getId()); //Set ID number to the first project $project->save(); $new_project = $project; } $user->setPersonalProjectId($project->getId()); $project_user = new ProjectUser(); $project_user->setProjectId($project->getId()); $project_user->setUserId($user->getId()); $project_user->setCreatedById($user->getId()); $project_user->setAllPermissions(true); $project_user->save(); /* end personal project */ } $user->save(); ApplicationLogs::createLog($user, null, ApplicationLogs::ACTION_ADD); //TODO - Make batch update of these permissions if ($permissionsString && $permissionsString != '') { $permissions = json_decode($permissionsString); } else { $permissions = null; } if (is_array($permissions) && (!logged_user() instanceof User || can_manage_security(logged_user()))) { foreach ($permissions as $perm) { if (ProjectUser::hasAnyPermissions($perm->pr, $perm->pc)) { if (!$personalProjectId || $personalProjectId != $perm->wsid) { $relation = new ProjectUser(); $relation->setProjectId($perm->wsid); $relation->setUserId($user->getId()); $relation->setCheckboxPermissions($perm->pc, $user->isGuest() ? false : true); $relation->setRadioPermissions($perm->pr, $user->isGuest() ? false : true); $relation->save(); } } } } // if if ($new_project instanceof Project && logged_user() instanceof User && logged_user()->isProjectUser($new_project)) { evt_add("workspace added", array("id" => $new_project->getId(), "name" => $new_project->getName(), "color" => $new_project->getColor())); } // Send notification... try { if (array_var($user_data, 'send_email_notification')) { Notifier::newUserAccount($user, $password); } // if } catch (Exception $e) { } // try return $user; }
function send_notification($user_data, $contact_id) { $contact = Contacts::findById($contact_id); //$contact->getId() $password = ''; // Send notification try { if (array_var($user_data, 'send_email_notification') && $contact->getEmailAddress()) { if (array_var($user_data, 'password_generator', 'link') == 'link') { // Generate link password $user = Contacts::getByEmail(array_var($user_data, 'email')); $token = sha1(gen_id() . (defined('SEED') ? SEED : '')); $timestamp = time() + 60 * 60 * 24; set_user_config_option('reset_password', $token . ";" . $timestamp, $user->getId()); Notifier::newUserAccountLinkPassword($contact, $password, $token); } else { $password = array_var($user_data, 'password'); Notifier::newUserAccount($contact, $password); } } } catch (Exception $e) { Logger::log($e->getTraceAsString()); } // try }
*/ /* detect system time zone */ define("CACTI_SYSTEM_TIME_ZONE", date("e")); /* return to main if time zone support has been deactivated */ if (read_config_option("i18n_timezone_support") == 0) { define("CACTI_CUSTOM_TIME_ZONE", CACTI_SYSTEM_TIME_ZONE); return; } /* determine whether or not we can support a different time zone */ /* user requests another timezone (Validation is not required!)*/ if (isset($_GET['time_zone'])) { if(init_time_zone($_GET['time_zone'])) { set_user_config_option('time_zone', $_GET['time_zone']); $_SESSION['time_zone'] = $_GET['time_zone']; } /* time zone definition is stored in the SESSION */ }elseif (isset($_SESSION['time_zone'])) { init_time_zone($_SESSION['time_zone']); /* look up for user customized time zone stored in Cacti DB */ }elseif ($time_zone = read_user_config_option('time_zone')) { if(init_time_zone($time_zone)) { $_SESSION['time_zone'] = $time_zone; }; /* use the default time zone defined under "general" or fall back to sytsem time zone*/ }else {
function index() { if (!can_manage_time(logged_user(), true)) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } $tasksUserId = array_var($_GET, 'tu'); if (is_null($tasksUserId)) { $tasksUserId = user_config_option('TM tasks user filter', logged_user()->getId()); } else { if (user_config_option('TM tasks user filter') != $tasksUserId) { set_user_config_option('TM tasks user filter', $tasksUserId, logged_user()->getId()); } } $timeslotsUserId = array_var($_GET, 'tsu'); if (is_null($timeslotsUserId)) { $timeslotsUserId = user_config_option('TM user filter', 0); } else { if (user_config_option('TM user filter') != $timeslotsUserId) { set_user_config_option('TM user filter', $timeslotsUserId, logged_user()->getId()); } } $showTimeType = array_var($_GET, 'stt'); if (is_null($showTimeType)) { $showTimeType = user_config_option('TM show time type', 0); } else { if (user_config_option('TM show time type') != $showTimeType) { set_user_config_option('TM show time type', $showTimeType, logged_user()->getId()); } } $start = array_var($_GET, 'start', 0); $limit = 20; $tasksUser = Users::findById($tasksUserId); $timeslotsUser = Users::findById($timeslotsUserId); //Active tasks view $tasks = ProjectTasks::getOpenTimeslotTasks($tasksUser, logged_user()); ProjectTasks::populateData($tasks); $tasks_array = array(); //Timeslots view $total = 0; switch ($showTimeType) { case 0: //Show only timeslots added through the time panel $timeslots = Timeslots::getProjectTimeslots(logged_user()->getWorkspacesQuery(), $timeslotsUser, active_project(), $start, $limit); $total = Timeslots::countProjectTimeslots(logged_user()->getWorkspacesQuery(), $timeslotsUser, active_project()); break; case 1: //Show only timeslots added through the tasks panel / tasks throw new Error('not yet implemented' . $showTimeType); /*if (active_project() instanceof Project){ $workspacesCSV = active_project()->getAllSubWorkspacesQuery(false,logged_user()); } else { $workspacesCSV = logged_user()->getWorkspacesQuery(); } $taskTimeslots = Timeslots::getTaskTimeslots(null, $timeslotsUser, $workspacesCSV, null , null, null, null,0,20);*/ //break; /*if (active_project() instanceof Project){ $workspacesCSV = active_project()->getAllSubWorkspacesQuery(false,logged_user()); } else { $workspacesCSV = logged_user()->getWorkspacesQuery(); } $taskTimeslots = Timeslots::getTaskTimeslots(null, $timeslotsUser, $workspacesCSV, null , null, null, null,0,20);*/ //break; case 2: //Show timeslots added through both the time and tasks panel / tasks throw new Error('not yet implemented' . $showTimeType); //break; //break; default: throw new Error('Unrecognised TM show time type: ' . $showTimeType); } //Get Users Info if (logged_user()->isMemberOfOwnerCompany()) { $users = Users::getAll(); } else { $users = logged_user()->getCompany()->getUsers(); } //Get Companies Info if (logged_user()->isMemberOfOwnerCompany()) { $companies = Companies::getCompaniesWithUsers(); } else { $companies = array(logged_user()->getCompany()); } tpl_assign('timeslots', $timeslots); tpl_assign('tasks', $tasks); tpl_assign('users', $users); tpl_assign('start', $start); tpl_assign('limit', $limit); tpl_assign('total', $total); tpl_assign('companies', $companies); ajx_set_no_toolbar(true); }
/** * Returns a list of emails according to the requested parameters * * @param string $action * @param string $tag * @param array $attributes * @param Project $project * @return array */ private function getEmails($attributes, $context = null, $start = null, $limit = null, $order_by = 'sent_date', $dir = 'ASC',$join_params = null) { // Return if no emails should be displayed if (!isset($attributes["viewType"]) || ($attributes["viewType"] != "all" && $attributes["viewType"] != "emails")) return null; $account = array_var($attributes, "accountId"); $classif_filter = array_var($attributes, 'classifType'); $read_filter = array_var($attributes, 'readType'); set_user_config_option('mails account filter', $account, logged_user()->getId()); set_user_config_option('mails classification filter', $classif_filter, logged_user()->getId()); set_user_config_option('mails read filter', $read_filter, logged_user()->getId()); $state = array_var($attributes, 'stateType'); $result = MailContents::getEmails($account, $state, $read_filter, $classif_filter, $context, $start, $limit, $order_by, $dir, $join_params); return $result; }
function getUserPreferences(&$view_type = null, &$user_filter = null, &$status_filter = null, &$task_filter = null) { $view_type = array_var($_GET,'view_type'); if (is_null($view_type) || $view_type == '') { $view_type = user_config_option('calendar view type', 'viewweek'); } if (user_config_option('calendar view type', '') != $view_type) set_user_config_option('calendar view type', $view_type, logged_user()->getId()); $user_filter = array_var($_GET,'user_filter'); if (is_null($user_filter) || $user_filter == '') { $user_filter = user_config_option('calendar user filter', 0); } if ($user_filter == 0) $user_filter = logged_user()->getId(); if (user_config_option('calendar user filter', '') != $user_filter) set_user_config_option('calendar user filter', $user_filter, logged_user()->getId()); $status_filter = array_var($_GET,'status_filter'); if (is_null($status_filter)) { $status_filter = user_config_option('calendar status filter', ' 0 1 3'); } if (user_config_option('calendar status filter', '') != $status_filter) set_user_config_option('calendar status filter', $status_filter, logged_user()->getId()); $task_filter = array_var($_GET,'task_filter'); if (is_null($task_filter) || $task_filter == '') { $task_filter = user_config_option('calendar task filter', "pending"); } if (user_config_option('calendar task filter', '') != $task_filter) set_user_config_option('calendar task filter', $task_filter, logged_user()->getId()); }
function updateCookieChanges() { if (isset($_SESSION["sess_user_id"]) && $_SESSION["sess_user_id"] != read_config_option("guest_user")) { if (sizeof($_COOKIE)) { foreach($_COOKIE as $key => $data) { if ($key == "menu" || $key == "formvis" || substr($key, 0, 3) == "ui_") { if ((!isset($_SESSION["sess_cacti_ui_" . $key])) || ($data != $_SESSION["sess_cacti_ui_" . $key])) { set_user_config_option("sess_cacti_ui_" . $key, $data); $_SESSION["sess_cacti_ui_" . $key] = $data; } } } } } }
function set_settings_closed() { ajx_current("empty"); set_user_config_option('settings_closed', 1, logged_user()->getId()); }
/** * Add single mail * * @access public * @param void * @return null */ function add_mail() { if (logged_user()->isGuest()) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } $this->addHelper('textile'); $mail_accounts = MailAccounts::getMailAccountsByUser(logged_user()); if (count($mail_accounts) < 1) { flash_error(lang('no mail accounts set')); ajx_current("empty"); return; } $this->setTemplate('add_mail'); $mail_data = array_var($_POST, 'mail'); $sendBtnClick = array_var($mail_data, 'sendBtnClick', '') == 'true' ? true : false; $isDraft = array_var($mail_data, 'isDraft', '') == 'true' ? true : false; $isUpload = array_var($mail_data, 'isUpload', '') == 'true' ? true : false; $autosave = array_var($mail_data, 'autosave', '') == 'true'; $id = array_var($mail_data, 'id'); $mail = MailContents::findById($id); $isNew = false; if (!$mail) { $isNew = true; $mail = new MailContent(); } tpl_assign('mail_to', urldecode(array_var($_GET, 'to'))); tpl_assign('link_to_objects', array_var($_GET, 'link_to_objects')); $def_acc_id = $this->getDefaultAccountId(); if ($def_acc_id > 0) { $def_acc = MailAccounts::getAccountById($def_acc_id); if ($def_acc instanceof MailAccount) { tpl_assign('default_account', $def_acc); } } tpl_assign('mail', $mail); tpl_assign('mail_data', $mail_data); tpl_assign('mail_accounts', $mail_accounts); Hook::fire('send_to', array_var($_GET, 'ids'), array_var($_GET, 'me')); // Form is submited if (is_array($mail_data)) { $account = MailAccounts::findById(array_var($mail_data, 'account_id')); if (!$account instanceof MailAccount) { flash_error(lang('mail account dnx')); ajx_current("empty"); return; } $accountUser = MailAccountContacts::getByAccountAndContact($account, logged_user()); if (!$accountUser instanceof MailAccountContact) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } if ($account->getOutgoingTrasnportType() == 'ssl' || $account->getOutgoingTrasnportType() == 'tls') { $available_transports = stream_get_transports(); if (array_search($account->getOutgoingTrasnportType(), $available_transports) === FALSE) { flash_error('The server does not support SSL.'); ajx_current("empty"); return; } } $cp_errs = $this->checkRequiredCustomPropsBeforeSave(array_var($_POST, 'object_custom_properties', array())); if (is_array($cp_errs) && count($cp_errs) > 0) { foreach ($cp_errs as $err) { flash_error($err); } ajx_current("empty"); return; } $subject = array_var($mail_data, 'subject'); $body = array_var($mail_data, 'body'); if (($pre_body_fname = array_var($mail_data, 'pre_body_fname')) != "") { $body = str_replace(lang('content too long not loaded'), '', $body, $count = 1); $tmp_filename = ROOT . "/tmp/{$pre_body_fname}"; if (is_file($tmp_filename)) { $body .= file_get_contents($tmp_filename); if (!$isDraft) { @unlink($tmp_filename); } } } if (array_var($mail_data, 'format') == 'html') { $css = "font-family:sans-serif,Arial,Verdana; font-size:14px; line-height:1.6; color:#222;"; Hook::fire('email_base_css', null, $css); str_replace(array("\r", "\n"), "", $css); $body = '<div style="' . $css . '">' . $body . '</div>'; $body = str_replace('<blockquote>', '<blockquote style="border-left:1px solid #987ADD;padding-left:10px;">', $body); } $type = 'text/' . array_var($mail_data, 'format'); $to = trim(array_var($mail_data, 'to')); if (str_ends_with($to, ",") || str_ends_with($to, ";")) { $to = substr($to, 0, strlen($to) - 1); } $mail_data['to'] = $to; $cc = trim(array_var($mail_data, 'cc')); if (str_ends_with($cc, ",") || str_ends_with($cc, ";")) { $cc = substr($cc, 0, strlen($cc) - 1); } $mail_data['cc'] = $cc; $bcc = trim(array_var($mail_data, 'bcc')); if (str_ends_with($bcc, ",") || str_ends_with($bcc, ";")) { $bcc = substr($bcc, 0, strlen($bcc) - 1); } $mail_data['bcc'] = $bcc; if (!$isDraft && trim($to . $cc . $bcc) == '') { flash_error(lang('recipient must be specified')); ajx_current("empty"); return; } $invalid_to = MailUtilities::validate_email_addresses($to); if (is_array($invalid_to)) { flash_error(lang('error invalid recipients', lang('mail to'), implode(", ", $invalid_to))); ajx_current("empty"); return; } $invalid_cc = MailUtilities::validate_email_addresses($cc); if (is_array($invalid_cc)) { flash_error(lang('error invalid recipients', lang('mail CC'), implode(", ", $invalid_cc))); ajx_current("empty"); return; } $invalid_bcc = MailUtilities::validate_email_addresses($bcc); if (is_array($invalid_bcc)) { flash_error(lang('error invalid recipients', lang('mail BCC'), implode(", ", $invalid_bcc))); ajx_current("empty"); return; } $last_mail_in_conversation = array_var($mail_data, 'last_mail_in_conversation'); $conversation_id = array_var($mail_data, 'conversation_id'); if ($last_mail_in_conversation && $conversation_id) { $new_mail_in_conversation = MailContents::getLastMailIdInConversation($conversation_id, true); if ($new_mail_in_conversation != $last_mail_in_conversation) { ajx_current("empty"); evt_add("new email in conversation", array('id' => $new_mail_in_conversation, 'genid' => array_var($_POST, 'instanceName'))); return; } } $mail->setFromAttributes($mail_data); $mail->setTo($to); $mail->setCc($cc); $mail->setBcc($bcc); $mail->setSubject($mail_data['subject']); $utils = new MailUtilities(); // attachment $linked_attachments = array(); $attachments = array(); $project_files_attachments = array(); $objects = array_var($_POST, 'linked_objects'); $attach_contents = array_var($_POST, 'attach_contents', array()); $original_email = isset($mail_data['original_id']) ? MailContents::findById($mail_data['original_id']) : null; if (is_array($objects)) { $err = 0; $count = -1; foreach ($objects as $objid) { $count++; $split = explode(":", $objid); if (count($split) == 2) { $object = Objects::instance()->findObject($split[1]); } else { if (count($split) == 4) { if ($split[0] == 'FwdMailAttach') { $tmp_filename = ROOT . "/tmp/" . logged_user()->getId() . "_" . ($original_email ? $original_email->getAccountId() : $mail_data['account_id']) . "_FwdMailAttach_" . $split[3]; if (is_file($tmp_filename)) { $attachments[] = array("data" => file_get_contents($tmp_filename), "name" => $split[1], "type" => $split[2]); continue; } } } } if (!isset($object) || !$object) { flash_error(lang('file dnx')); $err++; } else { if (isset($attach_contents[$count])) { if ($split[0] == 'ProjectFiles') { $file = ProjectFiles::findById($object->getId()); if (!$file instanceof ProjectFile) { flash_error(lang('file dnx')); $err++; } // if // if(!$file->canDownload(logged_user())) { // flash_error(lang('no access permissions')); // $err++; // } // if $project_files_attachments[] = $file; $attachments[] = array("data" => $file->getFileContent(), "name" => $file->getFilename(), "type" => $file->getTypeString()); } else { if ($split[0] == 'MailContents') { $email = MailContents::findById($object->getId()); if (!$email instanceof MailContent) { flash_error(lang('email dnx')); $err++; } // if if (!$email->canView(logged_user())) { flash_error(lang('no access permissions')); $err++; } // if $attachments[] = array("data" => $email->getContent(), "name" => $email->getSubject() . ".eml", "type" => 'message/rfc822'); } } } else { $linked_attachments[] = array("data" => $object->getViewUrl(), "name" => clean($object->getObjectName()), "type" => lang($object->getObjectTypeName()), "id" => $object->getId()); } } } if ($err > 0) { flash_error(lang('some objects could not be linked', $err)); ajx_current('empty'); return; } } $to = preg_split('/;|,/', $to); $to = $utils->parse_to($to); if ($body == '') { $body .= ' '; } try { $linked_users = array(); //create contacts from recipients of email if (user_config_option('create_contacts_from_email_recipients') || can_manage_contacts(logged_user())) { foreach ($to as $to_user) { $linked_user = Contacts::getByEmail($to_user[1]); if (!$linked_user instanceof Contact) { try { DB::beginWork(); $linked_user = create_user_from_email($to_user[1], $to_user[0], null, false); DB::commit(); } catch (Exception $e) { Logger::log($e->getMessage()); DB::rollback(); } } if ($linked_user instanceof Contact) { $linked_users[] = $linked_user; } } } if (count($linked_attachments)) { $linked_atts = $type == 'text/html' ? '<div style="font-family:arial;"><br><br><br><span style="font-size:12pt;font-weight:bold;color:#777">' . lang('linked attachments') . '</span><ul>' : "\n\n\n-----------------------------------------\n" . lang('linked attachments') . "\n\n"; foreach ($linked_attachments as $att) { $linked_atts .= $type == 'text/html' ? '<li><a href="' . $att['data'] . '">' . $att['name'] . ' (' . $att['type'] . ')</a></li>' : $att['name'] . ' (' . $att['type'] . '): ' . $att['data'] . "\n"; foreach ($linked_users as $linked_user) { try { $linked_user->giveAccessToObject(Objects::findObject($att['id'])); } catch (Exception $e) { //Logger::log($e->getMessage()); } } } $linked_atts .= $type == 'text/html' ? '</ul></div>' : ''; } else { $linked_atts = ''; } $body .= $linked_atts; if (count($attachments) > 0) { $i = 0; $str = ""; /* foreach ($attachments as $att) { $str .= "--000000000000000000000000000$i\n"; $str .= "Name: ".$att['name'] .";\n"; $str .= "Type: ".$att['type'] .";\n"; //$str .= "Encoding: ".$att['type'] .";\n"; $str .= base64_encode($att['data']) ."\n"; $str .= "--000000000000000000000000000$i--\n"; $i++; } */ $str = "#att_ver 2\n"; foreach ($attachments as $att) { $rep_id = $utils->saveContent($att['data']); if (str_starts_with($att['name'], "#")) { $att['name'] = str_replace_first("#", "@@sharp@@", $att['name']); } $str .= $att['name'] . "|" . $att['type'] . "|" . $rep_id . "\n"; } // save attachments, when mail is sent this file is deleted and full content is saved $repository_id = $utils->saveContent($str); if (!$isNew) { if (FileRepository::isInRepository($mail->getContentFileId())) { // delete old attachments $content = FileRepository::getFileContent($mail->getContentFileId()); if (str_starts_with($content, "#att_ver")) { $lines = explode("\n", $content); foreach ($lines as $line) { if (!str_starts_with($line, "#") && trim($line) !== "") { $data = explode("|", $line); if (isset($data[2]) && FileRepository::isInRepository($data[2])) { FileRepository::deleteFile($data[2]); } } } } FileRepository::deleteFile($mail->getContentFileId()); } } $mail->setContentFileId($repository_id); } $mail->setHasAttachments(is_array($attachments) && count($attachments) > 0 ? 1 : 0); $mail->setAccountEmail($account->getEmailAddress()); $mail->setSentDate(DateTimeValueLib::now()); $mail->setReceivedDate(DateTimeValueLib::now()); DB::beginWork(); $msg_id = MailUtilities::generateMessageId($account->getEmailAddress()); $conversation_id = array_var($mail_data, 'conversation_id'); $in_reply_to_id = array_var($mail_data, 'in_reply_to_id'); if ($conversation_id) { $in_reply_to = MailContents::findById(array_var($mail_data, 'original_id')); if ($in_reply_to instanceof MailContent && $in_reply_to->getSubject() && strpos(strtolower($mail->getSubject()), strtolower($in_reply_to->getSubject())) === false) { $conversation_id = null; $in_reply_to_id = ''; } } if (!$conversation_id) { $conversation_id = MailContents::getNextConversationId($account->getId()); } $mail->setMessageId($msg_id); $mail->setConversationId($conversation_id); $mail->setInReplyToId($in_reply_to_id); $mail->setUid(gen_id()); $mail->setState($isDraft && !$sendBtnClick ? 2 : 200); set_user_config_option('last_mail_format', array_var($mail_data, 'format', 'plain'), logged_user()->getId()); $body = utf8_safe($body); if (array_var($mail_data, 'format') == 'html') { $body = preg_replace("/<body*[^>]*>/i", '<body>', $body); // commented because sometimes brokes the html and leaves the body in blank //$body = convert_to_links(preg_replace("/<body*[^>]*>/i",'<body>', $body)); $mail->setBodyHtml($body); $mail->setBodyPlain(utf8_safe(html_to_text($body))); } else { $mail->setBodyPlain($body); $mail->setBodyHtml(''); } $mail->setFrom($account->getEmailAddress()); if ($accountUser->getIsDefault() && $accountUser->getSenderName() == "") { $mail->setFromName(logged_user()->getObjectName()); } else { $mail->setFromName($accountUser->getSenderName()); } $mail->save(); //$mail->setIsRead(logged_user()->getId(), true); if (Plugins::instance()->isActivePlugin('mail_rules')) { if (array_var($mail_data, 'format') == 'html') { $img = MailTracks::get_track_mark_img($mail->getId()); $body = $body . $img; $mail->setBodyHtml($body); $mail->setBodyPlain(utf8_safe(html_to_text($body))); $mail->save(); } } foreach ($project_files_attachments as $pfatt) { if ($pfatt instanceof ProjectFile) { $pfatt->setMailId($mail->getId()); $pfatt->save(); $pfatt->addToSharingTable(); } } $member_ids = active_context_members(false); // if replying a classified email classify on same workspace $classified_with_conversation = false; if (array_var($mail_data, 'original_id')) { $in_reply_to = MailContents::findById(array_var($mail_data, 'original_id')); if ($in_reply_to instanceof MailContent) { $member_ids = array_merge($member_ids, $in_reply_to->getMemberIds()); $classified_with_conversation = true; } } // autoclassify sent email if not classified if (!$classified_with_conversation) { $acc_mem_ids = explode(',', $account->getMemberId()); foreach ($acc_mem_ids as $acc_mem_id) { $member_ids[] = $acc_mem_id; } } $object_controller = new ObjectController(); foreach ($member_ids as $k => &$mem_id) { if ($mem_id == "") { unset($member_ids[$k]); } } if (count($member_ids) > 0) { //$object_controller->add_to_members($mail, $member_ids); $members = Members::instance()->findAll(array('conditions' => 'id IN (' . implode(',', $member_ids) . ')')); $mail->addToMembers($members, true); $mail->addToSharingTable(); } $object_controller->link_to_new_object($mail); $object_controller->add_subscribers($mail); /* if (array_var($mail_data, 'link_to_objects') != ''){ $lto = explode('|', array_var($mail_data, 'link_to_objects')); foreach ($lto as $object_string){ $split_object = explode('-', $object_string); $object = Objects::findObject($split_object[1]); if ($object instanceof ContentDataObject){ $mail->linkObject($object); } } }*/ //subscribe user $user = Contacts::findById($account->getContactId()); if ($user instanceof Contact) { $mail->subscribeUser($user); } /*if (user_config_option('create_contacts_from_email_recipients') && can_manage_contacts(logged_user())) { // automatically create contacts foreach ($to as $recipient) { $recipient_name = trim($recipient[0]); $recipient_address = trim($recipient[1]); if (!$recipient_address) continue; $contact = Contacts::getByEmail($recipient_address); if (!$contact instanceof Contact) { try { $contact = new Contact(); $contact->addEmail($recipient_address, 'personal'); if ($recipient_name && $recipient_name != $recipient_address) { $contact->setFirstName($recipient_name); } else { $index = strpos($recipient_address, "@"); $recipient_name = substr($recipient_address, 0, $index); $contact->setFirstName($recipient_name); } $contact->save(); } catch (Exception $e) { Logger::log($e->getMessage()); } } } }*/ $mail->addToSharingTable(); $mail->orderConversation(); DB::commit(); ApplicationLogs::createLog($mail, ApplicationLogs::ACTION_ADD, false, true); $mail->setIsRead(logged_user()->getId(), true); if (!$autosave) { if ($isDraft && !$sendBtnClick) { flash_success(lang('success save mail')); ajx_current("empty"); } else { evt_add("must send mails", array("account" => $mail->getAccountId())); //flash_success(lang('mail is being sent')); ajx_current("back"); } evt_add("email saved", array("id" => $mail->getId(), "instance" => array_var($_POST, 'instanceName'))); } else { evt_add("draft mail autosaved", array("id" => $mail->getId(), "hf_id" => $mail_data['hf_id'])); flash_success(lang('success autosave draft')); ajx_current("empty"); } } catch (Exception $e) { DB::rollback(); flash_error($e->getMessage()); ajx_current("empty"); } // try } // if }
/** * Edit file properties * * @access public * @param void * @return null */ function edit_file() { if (logged_user()->isGuest()) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } $this->setTemplate('add_file'); $file = ProjectFiles::findById(get_id()); if (!$file instanceof ProjectFile) { flash_error(lang('file dnx')); ajx_current("empty"); return; } // if if (!$file->canEdit(logged_user())) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } // if $file_data = array_var($_POST, 'file'); if (!is_array($file_data)) { // set layout for modal form if (array_var($_REQUEST, 'modal')) { $this->setLayout("json"); tpl_assign('modal', true); } $file_data = array('description' => $file->getDescription(), 'attach_to_notification' => $file->getAttachToNotification(), 'default_subject' => $file->getDefaultSubject(), 'file_id' => get_id()); // array } // if tpl_assign('file', $file); tpl_assign('file_data', $file_data); if (is_array(array_var($_POST, 'file'))) { foreach ($file_data as $k => &$v) { $v = remove_scripts($v); } try { DB::beginWork(); $handle_file = array_var($file_data, 'update_file'); // change file? $post_revision = $handle_file && array_var($file_data, 'version_file_change'); // post revision? $revision_comment = trim(array_var($file_data, 'revision_comment')); // user comment? $file->setFromAttributes($file_data); $file->setAttachToNotification(array_var($file_data, 'attach_to_notification')); if (array_var($file_data, 'default_subject_sel') == 'subject') { $file->setDefaultSubject(array_var($file_data, 'default_subject_text')); } else { $file->setDefaultSubject(''); } $fname = array_var($file_data, 'name'); $ext = trim(array_var($file_data, 'extension')); if ($ext != '') { $fname .= "." . $ext; } $file->setFilename($fname); if ($file->getType() == ProjectFiles::TYPE_WEBLINK) { $url = array_var($file_data, 'url', ''); if ($url && strpos($url, ':') === false) { $url = $this->protocol . $url; } $file->setUrl($url); $revision = $file->getLastRevision(); /* @var $revision ProjectFileRevision */ if (!$revision instanceof ProjectFileRevision || $post_revision) { $revision = new ProjectFileRevision(); $revision->setFileId($file->getId()); $revision->setRevisionNumber($file->getNextRevisionNumber()); $revision->setFileTypeId(FileTypes::getByExtension('webfile')->getId()); $revision->setRepositoryId('webfile'); $revision->setComment($revision_comment); } $revision->setTypeString($file->getUrl()); $revision->save(); } $file->save(); if ($handle_file) { // handle uploaded file $upload_id = array_var($file_data, 'upload_id'); $uploaded_file = array_var($_SESSION, $upload_id, array()); $file->handleUploadedFile($uploaded_file, $post_revision, $revision_comment); // handle uploaded file @unlink($uploaded_file['tmp_name']); } // if $member_ids = json_decode(array_var($_POST, 'members')); $object_controller = new ObjectController(); $object_controller->add_to_members($file, $member_ids); $object_controller->link_to_new_object($file); $object_controller->add_subscribers($file); $object_controller->add_custom_properties($file); $file->resetIsRead(); DB::commit(); set_user_config_option('notify_myself_too', array_var($file_data, 'notify_myself_too')); if (array_var($file_data, 'notify_myself_too')) { logged_user()->notify_myself = true; } ApplicationLogs::createLog($file, ApplicationLogs::ACTION_EDIT); if (array_var($file_data, 'notify_myself_too')) { logged_user()->notify_myself = false; } flash_success(lang('success edit file', $file->getFilename())); ajx_current("back"); if (array_var($_REQUEST, 'modal')) { evt_add("reload current panel"); } } 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, true); } else { flash_error($e->getMessage()); } ajx_current("empty"); } // try } // if }
/** * Contruct controller and execute specific action * * @access public * @param string $controller_name * @param string $action * @return null */ static function executeAction($controller_name, $action) { $max_users = config_option('max_users'); if ($max_users && Users::count() > $max_users) { echo lang("error") . ": " . lang("maximum number of users exceeded error"); return; } ajx_check_login(); if (isset($_GET['active_project']) && logged_user() instanceof User) { $dont_update = false; if (GlobalCache::isAvailable()) { $option_value = GlobalCache::get('user_config_option_' . logged_user()->getId() . '_lastAccessedWorkspace', $success); if ($success) { $dont_update = $option_value == $_GET['active_project']; } } if (!$dont_update) { set_user_config_option('lastAccessedWorkspace', $_GET['active_project'], logged_user()->getId()); if (GlobalCache::isAvailable()) { GlobalCache::update('user_config_option_' . logged_user()->getId() . '_lastAccessedWorkspace', $_GET['active_project']); } } } Env::useController($controller_name); $controller_class = Env::getControllerClass($controller_name); if (!class_exists($controller_class, false)) { throw new ControllerDnxError($controller_name); } // if $controller = new $controller_class(); if (!instance_of($controller, 'Controller')) { throw new ControllerDnxError($controller_name); } // if if (is_ajax_request()) { // if request is an ajax request return a json response // execute the action $controller->setAutoRender(false); $controller->execute($action); // fill the response $response = AjaxResponse::instance(); if (!$response->hasCurrent()) { // set the current content $response->setCurrentContent("html", $controller->getContent(), page_actions(), ajx_get_panel()); } $response->setEvents(evt_pop()); $error = flash_pop('error'); $success = flash_pop('success'); if (!is_null($error)) { $response->setError(1, clean($error)); } else { if (!is_null($success)) { $response->setError(0, clean($success)); } } // display the object as json tpl_assign("object", $response); $content = tpl_fetch(Env::getTemplatePath("json")); tpl_assign("content_for_layout", $content); TimeIt::start("Transfer"); if (is_iframe_request()) { tpl_display(Env::getLayoutPath("iframe")); } else { tpl_display(Env::getLayoutPath("json")); } TimeIt::stop(); } else { return $controller->execute($action); } }
function reset_password() { $tok = array_var($_GET, 't'); $uid = array_var($_GET, 'uid'); $type_notifier = array_var($_GET, 'type_notifier'); if (!$tok || !$uid) { flash_error(lang('invalid parameters')); $this->redirectTo('access', 'login'); } $user = Contacts::findById($uid); if (!($user instanceof Contact && $user->isUser()) || $user->getDisabled()) { flash_error(lang('user dnx')); $this->redirectTo('access', 'login'); } $stok = user_config_option('reset_password', null, $user->getId()); if (!$stok) { flash_error(lang('reset password expired', lang('forgot password'))); $this->redirectTo('access', 'login'); } $split = explode(";", $stok); if (count($split) < 2) { flash_error(lang('reset password expired', lang('forgot password'))); $this->redirectTo('access', 'login'); } $token = $split[0]; $timestamp = $split[1]; if ($timestamp < time()) { set_user_config_option('reset_password', '', $user->getId()); flash_error(lang('reset password expired', lang('forgot password'))); $this->redirectTo('access', 'login'); } if ($token != $tok) { flash_error(lang('reset password expired', lang('forgot password'))); $this->redirectTo('access', 'login'); } tpl_assign('token', $token); tpl_assign('user', $user); tpl_assign('type_notifier', $type_notifier); $new_password = array_var($_POST, 'new_password'); if ($new_password) { $repeat_password = array_var($_POST, 'repeat_password'); if ($new_password != $repeat_password) { flash_error(lang('passwords dont match')); return; } try { $user_password = new ContactPassword(); $user_password->setContactId($user->getId()); $user_password->password_temp = $new_password; $user_password->setPasswordDate(DateTimeValueLib::now()); $user_password->setPassword(cp_encrypt($new_password, $user_password->getPasswordDate()->getTimestamp())); $user_password->save(); $user->setPassword($new_password); $user->setUpdatedOn(DateTimeValueLib::now()); $user->save(); set_user_config_option('reset_password', '', $user->getId()); flash_success(lang('success reset password')); CompanyWebsite::instance()->logUserOut(); $this->redirectTo('access', 'login'); } catch (Exception $e) { flash_error($e->getMessage()); } } }
function create_user($user_data, $permissionsString) { // try to find contact by some properties $contact_id = array_var($user_data, "contact_id") ; $contact = Contacts::instance()->findById($contact_id) ; if (!is_valid_email(array_var($user_data, 'email'))) { throw new Exception(lang("email value is required")); } if (!$contact instanceof Contact) { // Create a new user $contact = new Contact(); $contact->setUsername(array_var($user_data, 'username')); $contact->setDisplayName(array_var($user_data, 'display_name')); $contact->setCompanyId(array_var($user_data, 'company_id')); $contact->setUserType(array_var($user_data, 'type')); $contact->setTimezone(array_var($user_data, 'timezone')); $contact->setFirstname($contact->getObjectName() != "" ? $contact->getObjectName() : $contact->getUsername()); $contact->setObjectName(); } else { // Create user from contact $contact->setUserType(array_var($user_data, 'type')); if (array_var($user_data, 'company_id')) { $contact->setCompanyId(array_var($user_data, 'company_id')); } $contact->setUsername(array_var($user_data, 'username')); $contact->setTimezone(array_var($user_data, 'timezone')); } $contact->save(); if (is_valid_email(array_var($user_data, 'email'))) { $contact->addEmail(array_var($user_data, 'email'), 'personal', true); } //permissions $permission_group = new PermissionGroup(); $permission_group->setName('User '.$contact->getId().' Personal'); $permission_group->setContactId($contact->getId()); $permission_group->setIsContext(false); $permission_group->setType("permission_groups"); $permission_group->save(); $contact->setPermissionGroupId($permission_group->getId()); $contact_pg = new ContactPermissionGroup(); $contact_pg->setContactId($contact->getId()); $contact_pg->setPermissionGroupId($permission_group->getId()); $contact_pg->save(); if ( can_manage_security(logged_user()) ) { $sp = new SystemPermission(); $rol_permissions=SystemPermissions::getRolePermissions(array_var($user_data, 'type')); foreach($rol_permissions as $pr){ $sp->setPermission($pr); } $sp->setPermissionGroupId($permission_group->getId()); $sp->setCanManageSecurity(array_var($user_data, 'can_manage_security')); $sp->setCanManageConfiguration(array_var($user_data, 'can_manage_configuration')); $sp->setCanManageTemplates(array_var($user_data, 'can_manage_templates')); $sp->setCanManageTime(array_var($user_data, 'can_manage_time')); $sp->setCanAddMailAccounts(array_var($user_data, 'can_add_mail_accounts')); $sp->setCanManageDimensions(array_var($user_data, 'can_manage_dimensions')); $sp->setCanManageDimensionMembers(array_var($user_data, 'can_manage_dimension_members')); $sp->setCanManageTasks(array_var($user_data, 'can_manage_tasks')); $sp->setCanTasksAssignee(array_var($user_data, 'can_task_assignee')); $sp->setCanManageBilling(array_var($user_data, 'can_manage_billing')); $sp->setCanViewBilling(array_var($user_data, 'can_view_billing')); Hook::fire('add_user_permissions', $sp, $other_permissions); if (!is_null($other_permissions) && is_array($other_permissions)) { foreach ($other_permissions as $k => $v) { $sp->setColumnValue($k, array_var($user_data, $k)); } } $sp->save(); if ($contact->isAdminGroup()) { // allow all un all dimensions if new user is admin $dimensions = Dimensions::findAll(); $permissions = array(); foreach ($dimensions as $dimension) { if ($dimension->getDefinesPermissions()) { $cdp = ContactDimensionPermissions::findOne(array("conditions" => "`permission_group_id` = ".$contact->getPermissionGroupId()." AND `dimension_id` = ".$dimension->getId())); if (!$cdp instanceof ContactDimensionPermission) { $cdp = new ContactDimensionPermission(); $cdp->setPermissionGroupId($contact->getPermissionGroupId()); $cdp->setContactDimensionId($dimension->getId()); } $cdp->setPermissionType('allow all'); $cdp->save(); // contact member permisssion entries $members = $dimension->getAllMembers(); foreach ($members as $member) { $ots = DimensionObjectTypeContents::getContentObjectTypeIds($dimension->getId(), $member->getObjectTypeId()); $ots[]=$member->getObjectId(); foreach ($ots as $ot) { $cmp = ContactMemberPermissions::findOne(array("conditions" => "`permission_group_id` = ".$contact->getPermissionGroupId()." AND `member_id` = ".$member->getId()." AND `object_type_id` = $ot")); if (!$cmp instanceof ContactMemberPermission) { $cmp = new ContactMemberPermission(); $cmp->setPermissionGroupId($contact->getPermissionGroupId()); $cmp->setMemberId($member->getId()); $cmp->setObjectTypeId($ot); } $cmp->setCanWrite(1); $cmp->setCanDelete(1); $cmp->save(); // Add persmissions to sharing table $perm = new stdClass(); $perm->m = $member->getId(); $perm->r= 1; $perm->w= 1; $perm->d= 1; $perm->o= $ot; $permissions[] = $perm ; } } } } if(count($permissions)){ $sharingTableController = new SharingTableController(); $sharingTableController->afterPermissionChanged($contact->getPermissionGroupId(), $permissions); } } } if(!isset($_POST['sys_perm'])){ $rol_permissions=SystemPermissions::getRolePermissions(array_var($user_data, 'type')); $_POST['sys_perm']=array(); foreach($rol_permissions as $pr){ $_POST['sys_perm'][$pr]=1; } } if(!isset($_POST['mod_perm'])){ $tabs_permissions=TabPanelPermissions::getRoleModules(array_var($user_data, 'type')); $_POST['mod_perm']=array(); foreach($tabs_permissions as $pr){ $_POST['mod_perm'][$pr]=1; } } $password = ''; if (array_var($user_data, 'password_generator') == 'specify') { $perform_password_validation = true; // Validate input $password = array_var($user_data, 'password'); if (trim($password) == '') { throw new Error(lang('password value required')); } // if if ($password <> array_var($user_data, 'password_a')) { throw new Error(lang('passwords dont match')); } // if } else { $user_data['password_generator'] = 'link'; $perform_password_validation = false; } $contact->setPassword($password); $contact->save(); $user_password = new ContactPassword(); $user_password->setContactId($contact->getId()); $user_password->setPasswordDate(DateTimeValueLib::now()); $user_password->setPassword(cp_encrypt($password, $user_password->getPasswordDate()->getTimestamp())); $user_password->password_temp = $password; $user_password->perform_validation = $perform_password_validation; $user_password->save(); if (array_var($user_data, 'autodetect_time_zone', 1) == 1) { set_user_config_option('autodetect_time_zone', 1, $contact->getId()); } /* create contact for this user*/ ApplicationLogs::createLog($contact, ApplicationLogs::ACTION_ADD); // Set role permissions for active members $active_context = active_context(); $sel_members = array(); foreach ($active_context as $selection) { if ($selection instanceof Member) { $sel_members[] = $selection; $has_project_permissions = ContactMemberPermissions::instance()->count("permission_group_id = '".$contact->getPermissionGroupId()."' AND member_id = ".$selection->getId()) > 0; if (!$has_project_permissions) { RoleObjectTypePermissions::createDefaultUserPermissions($contact, $selection); } } } save_permissions($contact->getPermissionGroupId(), $contact->isGuest()); Hook::fire('after_user_add', $contact, $null); // add user content object to associated members if (count($sel_members) > 0) { ObjectMembers::addObjectToMembers($contact->getId(), $sel_members); $contact->addToSharingTable(); } // Send notification try { if (array_var($user_data, 'send_email_notification') && $contact->getEmailAddress()) { if (array_var($user_data, 'password_generator', 'link') == 'link') { // Generate link password $user = Contacts::getByEmail(array_var($user_data, 'email')); $token = sha1(gen_id() . (defined('SEED') ? SEED : '')); $timestamp = time() + 60*60*24; set_user_config_option('reset_password', $token . ";" . $timestamp, $user->getId()); Notifier::newUserAccountLinkPassword($contact, $password, $token); } else { Notifier::newUserAccount($contact, $password); } } } catch(Exception $e) { Logger::log($e->getTraceAsString()); } // try return $contact; }
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', 'no_filter'); $filter = array_var($_GET, 'filter'); if (is_null($filter) || $filter == '') { $filter = $previous_filter; } else { if ($previous_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', null, 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"); } $template_condition = "`is_template` = 0 "; //Get the task query conditions $task_filter_condition = ""; switch ($filter) { case 'assigned_to': $assigned_to = $filter_value; if ($assigned_to > 0) { $task_filter_condition = " AND (`assigned_to_contact_id` = " . $assigned_to . ") "; } else { if ($assigned_to == -1) { $task_filter_condition = " AND `assigned_to_contact_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)); } $task_status_condition = ""; $now = DateTimeValueLib::now()->format('Y-m-j 00:00:00'); 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 $task_status_condition = " AND `completed_on` = " . DB::escape(EMPTY_DATETIME) . " AND `start_date` <= '{$now}'"; break; case 11: // Overdue tasks $task_status_condition = " AND `completed_on` = " . DB::escape(EMPTY_DATETIME) . " AND `due_date` < '{$now}'"; break; case 12: // Today tasks $task_status_condition = " AND `completed_on` = " . DB::escape(EMPTY_DATETIME) . " AND `due_date` = '{$now}'"; break; case 13: // Today + Overdue tasks $task_status_condition = " AND `completed_on` = " . DB::escape(EMPTY_DATETIME) . " AND `due_date` <= '{$now}'"; break; case 14: // Today + Overdue tasks $task_status_condition = " AND `completed_on` = " . DB::escape(EMPTY_DATETIME) . " AND `due_date` <= '{$now}'"; break; case 20: // Actives task by current user $task_status_condition = " AND `completed_on` = " . DB::escape(EMPTY_DATETIME) . " AND `start_date` <= '{$now}' AND `assigned_to_contact_id` = " . logged_user()->getId(); break; case 21: // Subscribed tasks by current user $res20 = DB::execute("SELECT object_id FROM " . TABLE_PREFIX . "object_subscriptions WHERE `contact_id` = " . logged_user()->getId()); $subs_rows = $res20->fetchAll($res20); foreach ($subs_rows as $row) { $subs[] = $row['object_id']; } unset($res20, $subs_rows, $row); $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'); } $conditions = "AND {$template_condition} {$task_filter_condition} {$task_status_condition}"; //Now get the tasks //$tasks = ProjectTasks::getContentObjects(active_context(), ObjectTypes::findById(ProjectTasks::instance()->getObjectTypeId()), null, null, $conditions,null)->objects; $tasks = ProjectTasks::instance()->listing(array("extra_conditions" => $conditions, "start" => 0, "limit" => 501, "count_results" => false))->objects; $pendingstr = $status == 0 ? " AND `completed_on` = " . DB::escape(EMPTY_DATETIME) . " " : ""; $milestone_conditions = " AND `is_template` = false " . $pendingstr; //Find all internal milestones for these tasks //$internalMilestones = ProjectMilestones::getContentObjects(active_context(), ObjectTypes::findById(ProjectMilestones::instance()->getObjectTypeId()), null, null, $milestone_conditions,null)->objects; $internalMilestones = ProjectMilestones::instance()->listing(array("extra_conditions" => $milestone_conditions))->objects; //Find all external milestones for these tasks, external milestones are the ones that belong to a parent member and have tasks in the current member $milestone_ids = array(); if ($tasks) { foreach ($tasks as $task) { if ($task->getMilestoneId() != 0) { $milestone_ids[$task->getMilestoneId()] = $task->getMilestoneId(); } } } $int_milestone_ids = array(); foreach ($internalMilestones as $milestone) { $int_milestone_ids[] = $milestone->getId(); } $milestone_ids = array_diff($milestone_ids, $int_milestone_ids); if (count($milestone_ids) == 0) { $milestone_ids[] = 0; } $ext_milestone_conditions = " `is_template` = false " . $pendingstr . ' AND `object_id` IN (' . implode(',', $milestone_ids) . ')'; $externalMilestones = ProjectMilestones::findAll(array('conditions' => $ext_milestone_conditions)); // Get Users Info $users = allowed_users_in_context(ProjectTasks::instance()->getObjectTypeId(), active_context(), ACCESS_LEVEL_READ); $allUsers = Contacts::getAllUsers(); $user_ids = array(-1); foreach ($users as $user) { $user_ids[] = $user->getId(); } // only companies with users $companies = Contacts::findAll(array("conditions" => "e.is_company = 1", "join" => array("table" => Contacts::instance()->getTableName(), "jt_field" => "object_id", "j_sub_q" => "SELECT xx.object_id FROM " . Contacts::instance()->getTableName(true) . " xx WHERE \n\t\t\t\t\txx.is_company=0 AND xx.company_id = e.object_id AND xx.object_id IN (" . implode(",", $user_ids) . ") LIMIT 1"))); tpl_assign('tasks', $tasks); if (config_option('use tasks dependencies')) { $dependency_count = array(); foreach ($tasks as $task) { $previous = 0; $ptasks = ProjectTaskDependencies::getDependenciesForTask($task->getId()); foreach ($ptasks as $pdep) { $ptask = ProjectTasks::findById($pdep->getPreviousTaskId()); if ($ptask instanceof ProjectTask && !$ptask->isCompleted()) { $previous++; } } $dependants = ProjectTaskDependencies::getDependantsForTask($task->getId()); $dep_csv = ""; foreach ($dependants as $dep) { $dep_csv .= ($dep_csv == "" ? "" : ",") . $dep->getTaskId(); } $dependency_count[] = array('id' => $task->getId(), 'count' => $previous, 'dependants' => $dep_csv); } tpl_assign('dependency_count', $dependency_count); } if (!$isJson) { $all_templates = COTemplates::findAll(array('conditions' => '`trashed_by_id` = 0 AND `archived_by_id` = 0')); tpl_assign('all_templates', $all_templates); 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('object_subtypes', array()); tpl_assign('internalMilestones', $internalMilestones); tpl_assign('externalMilestones', $externalMilestones); tpl_assign('users', $users); tpl_assign('allUsers', $allUsers); tpl_assign('companies', $companies); $userPref = array(); $userPref = array('filterValue' => isset($filter_value) ? $filter_value : '', 'filter' => $filter, 'status' => $status, 'showWorkspaces' => user_config_option('tasksShowWorkspaces', 1), 'showTime' => user_config_option('tasksShowTime'), 'showDates' => user_config_option('tasksShowDates'), 'showTags' => user_config_option('tasksShowTags', 0), 'showEmptyMilestones' => user_config_option('tasksShowEmptyMilestones', 1), 'showTimeEstimates' => user_config_option('tasksShowTimeEstimates', 1), 'groupBy' => user_config_option('tasksGroupBy', 'milestone'), 'orderBy' => user_config_option('tasksOrderBy', 'priority'), 'defaultNotifyValue' => user_config_option('can notify from quick add')); hook::fire('tasks_user_preferences', null, $userPref); tpl_assign('userPreferences', $userPref); ajx_set_no_toolbar(true); } }
/** * Edit specific contact * * @access public * @param void * @return null */ function edit() { if (logged_user()->isGuest()) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } $this->setTemplate('edit_contact'); $contact = Contacts::findById(get_id()); if (!$contact instanceof Contact) { flash_error(lang('contact dnx')); ajx_current("empty"); return; } // if if (!$contact->canEdit(logged_user())) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } // if $im_types = ImTypes::findAll(array('order' => '`id`')); // telephone types $all_telephone_types = TelephoneTypes::getAllTelephoneTypesInfo(); tpl_assign('all_telephone_types', $all_telephone_types); // address types $all_address_types = AddressTypes::getAllAddressTypesInfo(); tpl_assign('all_address_types', $all_address_types); // webpage types $all_webpage_types = WebpageTypes::getAllWebpageTypesInfo(); tpl_assign('all_webpage_types', $all_webpage_types); // email types $all_email_types = EmailTypes::getAllEmailTypesInfo(); tpl_assign('all_email_types', $all_email_types); $contact_data = array_var($_POST, 'contact'); // Populate form fields if (!is_array($contact_data)) { // set layout for modal form if (array_var($_REQUEST, 'modal')) { $this->setLayout("json"); tpl_assign('modal', true); } $contact_data = $this->get_contact_data_from_contact($contact); if ($contact->isUser()) { $_REQUEST['is_user'] = 1; tpl_assign('user_type', $contact->getUserType()); } if (is_array($im_types)) { foreach ($im_types as $im_type) { $contact_data['im_' . $im_type->getId()] = $contact->getImValue($im_type); } // foreach } // if $null = null; Hook::fire('before_edit_contact_form', array('object' => $contact), $null); } // if tpl_assign('isEdit', array_var($_GET, 'isEdit', false)); tpl_assign('contact', $contact); tpl_assign('contact_data', $contact_data); tpl_assign('im_types', $im_types); tpl_assign('active_tab', array_var($_REQUEST, 'active_tab')); //Contact Submit if (is_array(array_var($_POST, 'contact'))) { foreach ($contact_data as $k => &$v) { $v = remove_scripts($v); } try { DB::beginWork(); $contact_data['email'] = trim($contact_data['email']); $contact_data['contact_type'] = 'contact'; Contacts::validate($contact_data, get_id()); $newCompany = false; if (array_var($contact_data, 'isNewCompany') == 'true' && is_array(array_var($_POST, 'company'))) { $company_data = array_var($_POST, 'company'); $company_data['contact_type'] = 'company'; Contacts::validate($company_data); $company = new Contact(); $company->setFromAttributes($company_data); $company->setIsCompany(true); $company->setObjectName(); $company->save(); // save phones, addresses and webpages $this->save_phones_addresses_webpages($company_data, $company); if ($company_data['email'] != "") { $company->addEmail($company_data['email'], 'work', true); } $newCompany = true; } $contact_data['birthday'] = getDateValue($contact_data["birthday"]); if (isset($contact_data['specify_username'])) { if ($contact_data['user']['username'] != "") { $contact_data['name'] = $contact_data['user']['username']; } else { $contact_data['name'] = $contact_data['first_name'] . " " . $contact_data['surname']; } } else { $contact_data['name'] = $contact_data['first_name'] . " " . $contact_data['surname']; } $user_data = array_var($_POST, 'user'); if (is_array($user_data) && trim(array_var($user_data, 'username', '')) != "") { $contact_data['username'] = trim(array_var($user_data, 'username', '')); } $contact->setFromAttributes($contact_data); if ($newCompany) { $contact->setCompanyId($company->getId()); } $contact->setObjectName(); $contact->save(); // save phones, addresses and webpages $this->save_phones_addresses_webpages($contact_data, $contact); //Emails $personal_email_type_id = EmailTypes::getEmailTypeId('personal'); $main_emails = $contact->getMainEmails(); $more_main_emails = array(); $main_mail = null; foreach ($main_emails as $me) { if ($main_mail == null) { $main_mail = $me; } else { $more_main_emails[] = $me; } } if ($main_mail) { $main_mail->editEmailAddress($contact_data['email']); } else { if ($contact_data['email'] != "") { $contact->addEmail($contact_data['email'], 'personal', true); } } foreach ($more_main_emails as $mme) { $mme->setIsMain(false); $mme->save(); } // save additional emails $this->save_non_main_emails($contact_data, $contact); // autodetect timezone $autotimezone = array_var($contact_data, 'autodetect_time_zone', null); if ($autotimezone !== null) { set_user_config_option('autodetect_time_zone', $autotimezone, $contact->getId()); } // IM values $contact->clearImValues(); foreach ($im_types as $im_type) { $value = trim(array_var($contact_data, 'im_' . $im_type->getId())); if ($value != '') { $contact_im_value = new ContactImValue(); $contact_im_value->setContactId($contact->getId()); $contact_im_value->setImTypeId($im_type->getId()); $contact_im_value->setValue($value); $contact_im_value->setIsMain(array_var($contact_data, 'default_im') == $im_type->getId()); $contact_im_value->save(); } // if } // foreach $member_ids = json_decode(array_var($_POST, 'members')); $object_controller = new ObjectController(); if (!is_null($member_ids)) { $object_controller->add_to_members($contact, $member_ids); } $no_perm_members_ids = json_decode(array_var($_POST, 'no_perm_members')); if (count($no_perm_members_ids)) { $object_controller->add_to_members($contact, $no_perm_members_ids); } if ($newCompany) { $object_controller->add_to_members($company, $member_ids); } $object_controller->link_to_new_object($contact); $object_controller->add_subscribers($contact); $object_controller->add_custom_properties($contact); // User settings $user = array_var(array_var($_POST, 'contact'), 'user'); if ($user && $contact->canUpdatePermissions(logged_user())) { $user_type_changed = false; if (array_var($user, 'type')) { $user_type_changed = $contact->getUserType() != array_var($user, 'type'); $contact->setUserType(array_var($user, 'type')); $contact->save(); } if ($user_type_changed) { $this->cut_max_user_permissions($contact); } // update user groups if (isset($_REQUEST['user_groups'])) { $insert_values = ""; $group_ids = explode(',', $_REQUEST['user_groups']); foreach ($group_ids as $gid) { if (trim($gid) == "" || !is_numeric($gid)) { continue; } $insert_values .= ($insert_values == "" ? "" : ",") . "(" . $contact->getId() . ", {$gid})"; } ContactPermissionGroups::instance()->delete("contact_id=" . $contact->getId() . " AND permission_group_id <> " . $contact->getPermissionGroupId()); if ($insert_values != "") { DB::execute("INSERT INTO " . TABLE_PREFIX . "contact_permission_groups VALUES {$insert_values} ON DUPLICATE KEY UPDATE contact_id=contact_id;"); } ContactMemberCaches::updateContactMemberCacheAllMembers($contact); } } $null = null; Hook::fire('after_edit_contact', $contact, $null); DB::commit(); // save user permissions if ($user && $contact->canUpdatePermissions(logged_user())) { save_user_permissions_background(logged_user(), $contact->getPermissionGroupId(), $contact->isGuest()); } if (array_var($contact_data, 'isNewCompany') == 'true' && is_array(array_var($_POST, 'company'))) { ApplicationLogs::createLog($company, ApplicationLogs::ACTION_ADD); } ApplicationLogs::createLog($contact, ApplicationLogs::ACTION_EDIT); flash_success(lang('success edit contact', $contact->getObjectName())); ajx_current("back"); if (array_var($_REQUEST, 'modal')) { evt_add("reload current panel"); } } catch (Exception $e) { DB::rollback(); flash_error($e->getMessage()); ajx_current("empty"); } // try } // if }
/** * Add contact * * @access public * @param void * @return null */ function add() { if (logged_user()->isGuest()) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } $this->setTemplate('edit_contact'); //$this->setTemplate('add_contact'); if (array_var($_GET, 'is_user') || array_var(array_var(array_var($_POST, 'contact'), 'user'), 'create-user')) { if (!can_manage_security(logged_user())) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } } else { $notAllowedMember = ''; if(!Contact::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("contacts"), $notAllowedMember)); ajx_current("empty"); return; } } $contact = new Contact(); $im_types = ImTypes::findAll(array('order' => '`id`')); $contact_data = array_var($_POST, 'contact'); if(!array_var($contact_data,'company_id')){ $contact_data['company_id'] = get_id('company_id'); $contact_data['timezone'] = logged_user()->getTimezone(); } $redirect_to = get_url('contact'); // Create contact from mail content, when writing an email... $contact_email = array_var($_GET, 'ce'); if ($contact_email) $contact_data['email'] = $contact_email; if (array_var($_GET, 'div_id')) { $contact_data['new_contact_from_mail_div_id'] = array_var($_GET, 'div_id'); $contact_data['hf_contacts'] = array_var($_GET, 'hf_contacts'); } if(!array_var($_GET, 'is_user')) { tpl_assign('contact_mail', true); }else{ tpl_assign('contact_mail', false); } tpl_assign('contact', $contact); tpl_assign('contact_data', $contact_data); tpl_assign('im_types', $im_types); // Submit if(is_array(array_var($_POST, 'contact'))) { ajx_current("empty"); try { DB::beginWork(); $contact_data['email'] = trim($contact_data['email']); Contacts::validate($contact_data); $newCompany = false; if (array_var($contact_data, 'isNewCompany') == 'true' && is_array(array_var($_POST, 'company'))){ $company_data = array_var($_POST, 'company'); $company = new Contact(); $company->setFromAttributes($company_data); $company->setIsCompany(true); $company->setObjectName(); $company->save(); if($company_data['address'] != "") { $company->addAddress($company_data['address'], $company_data['city'], $company_data['state'], $company_data['country'], $company_data['zipcode'], 'work', true); } if($company_data['phone_number'] != "") $company->addPhone($company_data['phone_number'], 'work', true); if($company_data['fax_number'] != "") $company->addPhone($company_data['fax_number'], 'fax', true); if($company_data['homepage'] != "") $company->addWebpage($company_data['homepage'], 'work'); if($company_data['email'] != "") $company->addEmail($company_data['email'], 'work', true); ApplicationLogs::createLog($company, ApplicationLogs::ACTION_ADD); $newCompany = true; } $contact_data['birthday'] = getDateValue($contact_data["birthday"]); $contact_data['name'] = $contact_data['first_name']." ".$contact_data['surname']; $contact->setFromAttributes($contact_data); if($newCompany) { $contact->setCompanyId($company->getId()); } $contact->save(); //Home form if($contact_data['h_address'] != "") $contact->addAddress($contact_data['h_address'], $contact_data['h_city'], $contact_data['h_state'], $contact_data['h_country'], $contact_data['h_zipcode'], 'home'); if($contact_data['h_phone_number'] != "") $contact->addPhone($contact_data['h_phone_number'], 'home', true); if($contact_data['h_phone_number2'] != "") $contact->addPhone($contact_data['h_phone_number2'], 'home'); if($contact_data['h_mobile_number'] != "") $contact->addPhone($contact_data['h_mobile_number'], 'mobile'); if($contact_data['h_fax_number'] != "") $contact->addPhone($contact_data['h_fax_number'], 'fax'); if($contact_data['h_pager_number'] != "") $contact->addPhone($contact_data['h_pager_number'], 'pager'); if($contact_data['h_web_page'] != "") $contact->addWebpage($contact_data['h_web_page'], 'personal'); //Work form if($contact_data['w_address'] != "") $contact->addAddress($contact_data['w_address'], $contact_data['w_city'], $contact_data['w_state'], $contact_data['w_country'], $contact_data['w_zipcode'], 'work'); if($contact_data['w_phone_number'] != "") $contact->addPhone($contact_data['w_phone_number'], 'work', true); if($contact_data['w_phone_number2'] != "") $contact->addPhone($contact_data['w_phone_number2'], 'work'); if($contact_data['w_assistant_number'] != "") $contact->addPhone($contact_data['w_assistant_number'], 'assistant'); if($contact_data['w_callback_number'] != "") $contact->addPhone($contact_data['w_callback_number'], 'callback'); if($contact_data['w_fax_number'] != "") $contact->addPhone($contact_data['w_fax_number'], 'fax', true); if($contact_data['w_web_page'] != "") $contact->addWebpage($contact_data['w_web_page'], 'work'); //Other form if($contact_data['o_address'] != "") $contact->addAddress($contact_data['o_address'], $contact_data['o_city'], $contact_data['o_state'], $contact_data['o_country'], $contact_data['o_zipcode'], 'other'); if($contact_data['o_phone_number'] != "") $contact->addPhone($contact_data['o_phone_number'], 'other', true); if($contact_data['o_phone_number2'] != "") $contact->addPhone($contact_data['o_phone_number2'], 'other'); //if($contact_data['o_fax_number'] != "") $contact->addPhone($contact_data['o_fax_number'], 'fax'); if($contact_data['o_web_page'] != "") $contact->addWebpage($contact_data['o_web_page'], 'other'); //Emails and instant messaging form if($contact_data['email'] != "") $contact->addEmail($contact_data['email'], 'personal', true); if($contact_data['email2'] != "") $contact->addEmail($contact_data['email2'], 'personal'); if($contact_data['email3'] != "") $contact->addEmail($contact_data['email3'], 'personal'); //link it! $object_controller = new ObjectController(); if($newCompany) { $object_controller->add_to_members($company, $member_ids); } $member_ids = json_decode(array_var($_POST, 'members')); if (count($member_ids) && !array_var(array_var($contact_data, 'user'), 'create_user')) { $object_controller->add_to_members($contact, $member_ids); } $object_controller->link_to_new_object($contact); $object_controller->add_subscribers($contact); $object_controller->add_custom_properties($contact); foreach($im_types as $im_type) { $value = trim(array_var($contact_data, 'im_' . $im_type->getId())); if($value <> '') { $contact_im_value = new ContactImValue(); $contact_im_value->setContactId($contact->getId()); $contact_im_value->setImTypeId($im_type->getId()); $contact_im_value->setValue($value); $contact_im_value->setIsMain(array_var($contact_data, 'default_im') == $im_type->getId()); $contact_im_value->save(); } // if } // foreach ApplicationLogs::createLog($contact, ApplicationLogs::ACTION_ADD); //NEW ! User data in the same form $user = array_var(array_var($_POST, 'contact'),'user'); $user['username'] = str_replace(" ","",strtolower($contact_data['name'])) ; $this->createUserFromContactForm($user, $contact->getId(), $contact_data['email'],isset($_POST['notify-user'])); if(isset($_POST['notify-user'])){ set_user_config_option("sendEmailNotification", 1,logged_user()->getId()); }else{ set_user_config_option("sendEmailNotification", 0,logged_user()->getId()); } DB::commit(); if (isset($contact_data['new_contact_from_mail_div_id'])) { $combo_val = trim($contact->getFirstName() . ' ' . $contact->getSurname() . ' <' . $contact->getEmailAddress('personal') . '>'); evt_add("contact added from mail", array("div_id" => $contact_data['new_contact_from_mail_div_id'], "combo_val" => $combo_val, "hf_contacts" => $contact_data['hf_contacts'])); } flash_success(lang('success add contact', $contact->getObjectName())); ajx_current("back"); // Error... } catch(Exception $e) { DB::rollback(); flash_error($e->getMessage()); } // try } // if } // add
function total_task_times($report_data = null, $task = null, $csv = null) { if (!$report_data) { $report_data = array_var($_POST, 'report'); set_user_config_option('timeReportDate', $report_data['date_type'], logged_user()->getId()); $dateStart = getDateValue($report_data['start_value']); if ($dateStart instanceof DateTimeValue) { set_user_config_option('timeReportDateStart', $dateStart, logged_user()->getId()); } $dateEnd = getDateValue($report_data['end_value']); if ($dateEnd instanceof DateTimeValue) { set_user_config_option('timeReportDateEnd', $dateEnd, logged_user()->getId()); } set_user_config_option('timeReportShowEstimatedTime', array_var($report_data, 'show_estimated_time') == 'checked', logged_user()->getId()); set_user_config_option('timeReportPerson', $report_data['user'], logged_user()->getId()); set_user_config_option('timeReportTimeslotType', $report_data['timeslot_type'], logged_user()->getId()); set_user_config_option('timeReportShowBilling', isset($report_data['show_billing']) ? 1 : 0, logged_user()->getId()); $group = $report_data['group_by_1'] . ", " . $report_data['group_by_2'] . ", " . $report_data['group_by_3']; $altGroup = $report_data['alt_group_by_1'] . "," . $report_data['alt_group_by_2'] . "," . $report_data['alt_group_by_3']; set_user_config_option('timeReportGroupBy', $group, logged_user()->getId()); set_user_config_option('timeReportAltGroupBy', $altGroup, logged_user()->getId()); $_SESSION['total_task_times_report_data'] = $report_data; } if (array_var($_GET, 'export') == 'csv' || isset($csv) && $csv == true) { $context = build_context_array(array_var($_REQUEST, 'context')); CompanyWebsite::instance()->setContext($context); if (!$report_data) { if (isset($_REQUEST['parameters'])) { $report_data = json_decode(str_replace("'", '"', $_REQUEST['parameters']), true); } else { $report_data = $_REQUEST; } } tpl_assign('context', $context); $this->setTemplate('total_task_times_csv'); } else { $context = active_context(); } $columns = array_var($report_data, 'columns'); if (!is_array($columns)) { $columns = array_var($_POST, 'columns', array()); } asort($columns); //sort the array by column order foreach ($columns as $column => $order) { if ($order > 0) { $newColumn = new ReportColumn(); //$newColumn->setReportId($newReport->getId()); if (is_numeric($column)) { $newColumn->setCustomPropertyId($column); } else { $newColumn->setFieldName($column); } } } $user = Contacts::findById(array_var($report_data, 'user')); $now = DateTimeValueLib::now(); $now->advance(logged_user()->getTimezone() * 3600, true); switch (array_var($report_data, 'date_type')) { case 1: //Today $st = DateTimeValueLib::make(0, 0, 0, $now->getMonth(), $now->getDay(), $now->getYear()); $et = DateTimeValueLib::make(23, 59, 59, $now->getMonth(), $now->getDay(), $now->getYear()); break; case 2: //This week $monday = $now->getMondayOfWeek(); $nextMonday = $now->getMondayOfWeek()->add('w', 1)->add('d', -1); $st = DateTimeValueLib::make(0, 0, 0, $monday->getMonth(), $monday->getDay(), $monday->getYear()); $et = DateTimeValueLib::make(23, 59, 59, $nextMonday->getMonth(), $nextMonday->getDay(), $nextMonday->getYear()); break; case 3: //Last week $monday = $now->getMondayOfWeek()->add('w', -1); $nextMonday = $now->getMondayOfWeek()->add('d', -1); $st = DateTimeValueLib::make(0, 0, 0, $monday->getMonth(), $monday->getDay(), $monday->getYear()); $et = DateTimeValueLib::make(23, 59, 59, $nextMonday->getMonth(), $nextMonday->getDay(), $nextMonday->getYear()); break; case 4: //This month $st = DateTimeValueLib::make(0, 0, 0, $now->getMonth(), 1, $now->getYear()); $et = DateTimeValueLib::make(23, 59, 59, $now->getMonth(), 1, $now->getYear())->add('M', 1)->add('d', -1); break; case 5: //Last month $now->add('M', -1); $st = DateTimeValueLib::make(0, 0, 0, $now->getMonth(), 1, $now->getYear()); $et = DateTimeValueLib::make(23, 59, 59, $now->getMonth(), 1, $now->getYear())->add('M', 1)->add('d', -1); break; case 6: //Date interval $st = getDateValue(array_var($report_data, 'start_value')); $st = $st->beginningOfDay(); $et = getDateValue(array_var($report_data, 'end_value')); $et = $et->endOfDay(); break; } if ($st instanceof DateTimeValue) { $st->add('h', -logged_user()->getTimezone()); } if ($et instanceof DateTimeValue) { $et->add('h', -logged_user()->getTimezone()); } $timeslotType = array_var($report_data, 'timeslot_type', 0); $group_by = array(); for ($i = 1; $i <= 3; $i++) { if ($timeslotType == 0) { $gb = array_var($report_data, 'group_by_' . $i); } else { $gb = array_var($report_data, 'alt_group_by_' . $i); } if ($gb != '0') { $group_by[] = $gb; } } $dateFormat = user_config_option('date_format'); $date_format_tip = date_format_tip($dateFormat); $extra_conditions = ""; $conditions = array_var($_POST, 'conditions', array()); foreach ($conditions as $cond) { if ($cond['deleted'] > 0) { continue; } if (array_var($cond, 'custom_property_id') > 0) { if (!in_array($cond['condition'], array('like', 'not like', '=', '<=', '>=', '<', '>', '<>', '%'))) { continue; } $cp = CustomProperties::getCustomProperty($cond['custom_property_id']); if (!$cp instanceof CustomProperty) { continue; } $current_condition = ' AND e.rel_object_id IN ( SELECT object_id as id FROM ' . TABLE_PREFIX . 'custom_property_values cpv WHERE cpv.custom_property_id = ' . $cond['custom_property_id']; $value = $cond['value']; if ($cond['condition'] == 'like' || $cond['condition'] == 'not like') { $value = '%' . $cond['value'] . '%'; } if ($cp->getType() == 'date') { if ($value == $date_format_tip) { continue; } $dtValue = DateTimeValueLib::dateFromFormatAndString($dateFormat, $value); $value = $dtValue->format('Y-m-d H:i:s'); } if ($cond['condition'] != '%') { if ($cp->getType() == 'numeric') { $current_condition .= ' AND cpv.value ' . $cond['condition'] . ' ' . DB::escape($value); } else { if ($cp->getType() == 'boolean') { $current_condition .= ' AND cpv.value ' . $cond['condition'] . ' ' . ($value ? '1' : '0'); if (!$value) { $current_condition .= ') OR o.id NOT IN (SELECT object_id as id FROM ' . TABLE_PREFIX . 'custom_property_values cpv2 WHERE cpv2.object_id=o.id AND cpv2.value=1 AND cpv2.custom_property_id = ' . $cp->getId(); } } else { $current_condition .= ' AND cpv.value ' . $cond['condition'] . ' ' . DB::escape($value); } } } else { $current_condition .= ' AND cpv.value like ' . DB::escape("%{$value}"); } $current_condition .= ')'; $extra_conditions .= $current_condition; } } $timeslots = Timeslots::getTaskTimeslots($context, null, $user, $st, $et, array_var($report_data, 'task_id', 0), $group_by, null, null, null, $timeslotType, $extra_conditions); $unworkedTasks = null; if (array_var($report_data, 'include_unworked') == 'checked') { $unworkedTasks = ProjectTasks::getPendingTasks(logged_user(), $workspace); tpl_assign('unworkedTasks', $unworkedTasks); } $gb_criterias = array(); foreach ($group_by as $text) { if (in_array($text, array('contact_id', 'rel_object_id'))) { $gb_criterias[] = array('type' => 'column', 'value' => $text); } else { if (in_array($text, array('milestone_id', 'priority'))) { $gb_criterias[] = array('type' => 'assoc_obj', 'fk' => 'rel_object_id', 'value' => $text); } else { if (str_starts_with($text, 'dim_')) { $gb_criterias[] = array('type' => 'dimension', 'value' => str_replace_first('dim_', '', $text)); } } } } $grouped_timeslots = groupObjects($gb_criterias, $timeslots); tpl_assign('columns', $columns); tpl_assign('timeslotsArray', array()); tpl_assign('grouped_timeslots', $grouped_timeslots); if (array_var($report_data, 'date_type') == 6) { $st->advance(logged_user()->getTimezone() * 3600, true); $et->advance(logged_user()->getTimezone() * 3600, true); } tpl_assign('start_time', $st); tpl_assign('end_time', $et); tpl_assign('user', $user); tpl_assign('post', $report_data); tpl_assign('title', lang('task time report')); tpl_assign('allow_export', false); if (array_var($_GET, 'export') == 'csv' || isset($csv) && $csv == true) { $filename = $this->total_task_times_csv_export($grouped_timeslots); ajx_extra_data(array('filename' => "{$filename}.csv")); ajx_current("empty"); } else { tpl_assign('template_name', 'total_task_times'); $this->setTemplate('report_wrapper'); } }