/** * Function returns the Calendar Events for the module * @param <Vtiger_Paging_Model> $pagingModel * @return <Array> */ public function getCalendarActivities($mode, $pagingModel, $user, $recordId = false) { $currentUser = Users_Record_Model::getCurrentUserModel(); $db = PearDatabase::getInstance(); if (!$user) { $user = $currentUser->getId(); } $nowInUserFormat = Vtiger_Datetime_UIType::getDisplayDateValue(date('Y-m-d H:i:s')); $nowInDBFormat = Vtiger_Datetime_UIType::getDBDateTimeValue($nowInUserFormat); list($currentDate, $currentTime) = explode(' ', $nowInDBFormat); $query = "SELECT vtiger_crmentity.crmid, crmentity2.crmid AS contact_id, vtiger_crmentity.smownerid, vtiger_crmentity.setype, vtiger_activity.* FROM vtiger_activity\n\t\t\t\t\tINNER JOIN vtiger_crmentity ON vtiger_crmentity.crmid = vtiger_activity.activityid\n\t\t\t\t\tINNER JOIN vtiger_cntactivityrel ON vtiger_cntactivityrel.activityid = vtiger_activity.activityid\n\t\t\t\t\tINNER JOIN vtiger_crmentity AS crmentity2 ON vtiger_cntactivityrel.contactid = crmentity2.crmid AND crmentity2.deleted = 0 AND crmentity2.setype = ?\n\t\t\t\t\tLEFT JOIN vtiger_groups ON vtiger_groups.groupid = vtiger_crmentity.smownerid"; $query .= Users_Privileges_Model::getNonAdminAccessControlQuery('Calendar'); $query .= " WHERE vtiger_crmentity.deleted=0\n\t\t\t\t\tAND (vtiger_activity.activitytype NOT IN ('Emails'))\n\t\t\t\t\tAND (vtiger_activity.status is NULL OR vtiger_activity.status NOT IN ('Completed', 'Deferred'))\n\t\t\t\t\tAND (vtiger_activity.eventstatus is NULL OR vtiger_activity.eventstatus NOT IN ('Held'))"; if ($recordId) { $query .= " AND vtiger_cntactivityrel.contactid = ?"; } elseif ($mode === 'upcoming') { $query .= " AND due_date >= '{$currentDate}'"; } elseif ($mode === 'overdue') { $query .= " AND due_date < '{$currentDate}'"; } $params = array($this->getName()); if ($recordId) { array_push($params, $recordId); } if ($user != 'all' && $user != '') { if ($user === $currentUser->id) { $query .= " AND vtiger_crmentity.smownerid = ?"; array_push($params, $user); } } $query .= " ORDER BY date_start, time_start LIMIT " . $pagingModel->getStartIndex() . ", " . ($pagingModel->getPageLimit() + 1); $result = $db->pquery($query, $params); $numOfRows = $db->num_rows($result); $activities = array(); for ($i = 0; $i < $numOfRows; $i++) { $row = $db->query_result_rowdata($result, $i); $model = Vtiger_Record_Model::getCleanInstance('Calendar'); $model->setData($row); $model->setId($row['crmid']); $activities[] = $model; } $pagingModel->calculatePageRange($activities); if ($numOfRows > $pagingModel->getPageLimit()) { array_pop($activities); $pagingModel->set('nextPageExists', true); } else { $pagingModel->set('nextPageExists', false); } return $activities; }
/** * Function returns Report Models for the folder * @param <Vtiger_Paging_Model> $pagingModel * @return <Reports_Record_Model> */ function getReports($pagingModel) { $paramsList = array('startIndex' => $pagingModel->getStartIndex(), 'pageLimit' => $pagingModel->getPageLimit(), 'orderBy' => $this->get('orderby'), 'sortBy' => $this->get('sortby')); $reportClassInstance = Vtiger_Module_Model::getClassInstance('Reports'); $fldrId = $this->getId(); if ($fldrId == 'All') { $fldrId = false; $paramsList = array('startIndex' => $pagingModel->getStartIndex(), 'pageLimit' => $pagingModel->getPageLimit(), 'orderBy' => 'reportname', 'sortBy' => 'ASC'); } $reportsList = $reportClassInstance->sgetRptsforFldr($fldrId, $paramsList); if (!$fldrId) { foreach ($reportsList as $reportId => $reports) { $reportsCount += count($reports); } } else { $reportsCount = count($reportsList); } $pageLimit = $pagingModel->getPageLimit(); if ($reportsCount > $pageLimit) { if (!$fldrId) { $lastKey = end(array_keys($reportsList)); array_pop($reportsList[$lastKey]); } else { array_pop($reportsList); } $pagingModel->set('nextPageExists', true); } else { $pagingModel->set('nextPageExists', false); } $reportModuleModel = Vtiger_Module_Model::getInstance('Reports'); if ($fldrId == false) { return $this->getAllReportModels($reportsList, $reportModuleModel); } else { $reportModels = array(); for ($i = 0; $i < count($reportsList); $i++) { $reportModel = new Reports_Record_Model(); $reportModel->setData($reportsList[$i])->setModuleFromInstance($reportModuleModel); $reportModels[] = $reportModel; unset($reportModel); } return $reportModels; } }
/** * Function returns the Calendar Events for the module * @param <String> $mode - upcoming/overdue mode * @param <Vtiger_Paging_Model> $pagingModel - $pagingModel * @param <String> $user - all/userid * @param <String> $recordId - record id * @return <Array> */ function getAssignedProjectsTasks($mode, $pagingModel, $user, $recordId = false) { $currentUser = Users_Record_Model::getCurrentUserModel(); $db = PearDatabase::getInstance(); if (!$user) { $user = $currentUser->getId(); } $nowInUserFormat = Vtiger_Datetime_UIType::getDisplayDateTimeValue(date('Y-m-d H:i:s')); $nowInDBFormat = Vtiger_Datetime_UIType::getDBDateTimeValue($nowInUserFormat); list($currentDate, $currentTime) = explode(' ', $nowInDBFormat); $instance = CRMEntity::getInstance('ProjectTask'); $UserAccessConditions = $instance->getUserAccessConditionsQuerySR('ProjectTask'); $params = array(); $query = "SELECT vtiger_crmentity.crmid, vtiger_crmentity.smownerid, vtiger_crmentity.setype, vtiger_projecttask.*\n\t\t\tFROM vtiger_projecttask\n\t\t\tINNER JOIN vtiger_crmentity ON vtiger_crmentity.crmid = vtiger_projecttask.projecttaskid\n\t\t\tWHERE vtiger_crmentity.deleted=0 AND vtiger_crmentity.smcreatorid = ?"; $params[] = $currentUser->getId(); $query .= $UserAccessConditions; if ($mode === 'upcoming') { $query .= " AND targetenddate >= ?"; } elseif ($mode === 'overdue') { $query .= " AND targetenddate < ?"; } $params[] = $currentDate; $accessibleUsers = $currentUser->getAccessibleUsers(); $accessibleGroups = $currentUser->getAccessibleGroups(); if ($user != 'all' && $user != '' && (array_key_exists($user, $accessibleUsers) || array_key_exists($user, $accessibleGroups))) { $query .= " AND vtiger_crmentity.smownerid = ?"; $params[] = $user; } $query .= " ORDER BY targetenddate LIMIT ?, ?"; $params[] = $pagingModel->getStartIndex(); $params[] = $pagingModel->getPageLimit() + 1; $result = $db->pquery($query, $params); $numOfRows = $db->num_rows($result); $projecttasks = array(); for ($i = 0; $i < $numOfRows; $i++) { $row = $db->query_result_rowdata($result, $i); $model = Vtiger_Record_Model::getCleanInstance('ProjectTask'); $model->setData($row); $model->setId($row['crmid']); if ($row['projectid']) { if (isRecordExists($row['projectid'])) { $record = Vtiger_Record_Model::getInstanceById($row['projectid'], 'Project'); if (isRecordExists($record->get('linktoaccountscontacts'))) { $model->set('account', '<a href="index.php?module=' . Vtiger_Functions::getCRMRecordType($record->get('linktoaccountscontacts')) . '&view=Detail&record=' . $record->get('linktoaccountscontacts') . '">' . Vtiger_Functions::getCRMRecordLabel($record->get('linktoaccountscontacts')) . '</a>'); } } } $projecttasks[] = $model; } $pagingModel->calculatePageRange($projecttasks); if ($numOfRows > $pagingModel->getPageLimit()) { array_pop($projecttasks); $pagingModel->set('nextPageExists', true); } else { $pagingModel->set('nextPageExists', false); } return $projecttasks; }
/** * Function returns the Calendar Events for the module * @param <String> $mode - upcoming/overdue mode * @param <Vtiger_Paging_Model> $pagingModel - $pagingModel * @param <String> $user - all/userid * @param <String> $recordId - record id * @return <Array> */ function getCalendarActivities($mode, $pagingModel, $user, $recordId = false) { $currentUser = Users_Record_Model::getCurrentUserModel(); $db = PearDatabase::getInstance(); if (!$user) { $user = $currentUser->getId(); } $nowInUserFormat = Vtiger_Datetime_UIType::getDisplayDateValue(date('Y-m-d H:i:s')); $nowInDBFormat = Vtiger_Datetime_UIType::getDBDateTimeValue($nowInUserFormat); list($currentDate, $currentTime) = explode(' ', $nowInDBFormat); $query = "SELECT vtiger_crmentity.crmid, crmentity2.crmid AS parent_id, vtiger_crmentity.smownerid, vtiger_crmentity.setype, vtiger_activity.* FROM vtiger_activity\n\t\t\t\t\tINNER JOIN vtiger_crmentity ON vtiger_crmentity.crmid = vtiger_activity.activityid\n\t\t\t\t\tINNER JOIN vtiger_seactivityrel ON vtiger_seactivityrel.activityid = vtiger_activity.activityid\n\t\t\t\t\tINNER JOIN vtiger_crmentity AS crmentity2 ON vtiger_seactivityrel.crmid = crmentity2.crmid AND crmentity2.deleted = 0 AND crmentity2.setype = ?\n\t\t\t\t\tLEFT JOIN vtiger_groups ON vtiger_groups.groupid = vtiger_crmentity.smownerid"; $query .= Users_Privileges_Model::getNonAdminAccessControlQuery('Calendar'); $query .= " WHERE vtiger_crmentity.deleted=0\n\t\t\t\t\tAND (vtiger_activity.activitytype NOT IN ('Emails'))\n\t\t\t\t\tAND (vtiger_activity.status is NULL OR vtiger_activity.status NOT IN ('Completed', 'Deferred'))\n\t\t\t\t\tAND (vtiger_activity.eventstatus is NULL OR vtiger_activity.eventstatus NOT IN ('Held'))"; if ($recordId) { $query .= " AND vtiger_seactivityrel.crmid = ?"; } elseif ($mode === 'upcoming') { $query .= " AND due_date >= '{$currentDate}'"; } elseif ($mode === 'overdue') { $query .= " AND due_date < '{$currentDate}'"; } $params = array($this->getName()); if ($user != 'all' && $user != '') { if ($user === $currentUser->id) { $query .= " AND vtiger_crmentity.smownerid = ?"; array_push($params, $user); } } $query .= " ORDER BY date_start, time_start LIMIT " . $pagingModel->getStartIndex() . ", " . ($pagingModel->getPageLimit() + 1); if ($recordId) { array_push($params, $recordId); } $result = $db->pquery($query, $params); $numOfRows = $db->num_rows($result); $groupsIds = Vtiger_Util_Helper::getGroupsIdsForUsers($currentUser->getId()); $activities = array(); for ($i = 0; $i < $numOfRows; $i++) { $newRow = $db->query_result_rowdata($result, $i); $model = Vtiger_Record_Model::getCleanInstance('Calendar'); $ownerId = $newRow['smownerid']; $currentUser = Users_Record_Model::getCurrentUserModel(); $visibleFields = array('activitytype', 'date_start', 'time_start', 'due_date', 'time_end', 'assigned_user_id', 'visibility', 'smownerid', 'crmid'); $visibility = true; if (in_array($ownerId, $groupsIds)) { $visibility = false; } else { if ($ownerId == $currentUser->getId()) { $visibility = false; } } if (!$currentUser->isAdminUser() && $newRow['activitytype'] != 'Task' && $newRow['visibility'] == 'Private' && $ownerId && $visibility) { foreach ($newRow as $data => $value) { if (in_array($data, $visibleFields) != -1) { unset($newRow[$data]); } } $newRow['subject'] = vtranslate('Busy', 'Events') . '*'; } if ($newRow['activitytype'] == 'Task') { unset($newRow['visibility']); } $model->setData($newRow); $model->setId($newRow['crmid']); $activities[] = $model; } $pagingModel->calculatePageRange($activities); if ($numOfRows > $pagingModel->getPageLimit()) { array_pop($activities); $pagingModel->set('nextPageExists', true); } else { $pagingModel->set('nextPageExists', false); } return $activities; }
/** * Function returns the Calendar Events for the module * @param <String> $mode - upcoming/overdue mode * @param <Vtiger_Paging_Model> $pagingModel - $pagingModel * @param <String> $user - all/userid * @param <String> $recordId - record id * @return <Array> */ function getCalendarActivities($mode, $pagingModel, $user, $recordId = false) { $currentUser = Users_Record_Model::getCurrentUserModel(); $db = PearDatabase::getInstance(); if (!$user) { $user = $currentUser->getId(); } $currentActivityLabels = Calendar_Module_Model::getComponentActivityStateLabel('current'); $nowInUserFormat = Vtiger_Datetime_UIType::getDisplayDateValue(date('Y-m-d H:i:s')); $nowInDBFormat = Vtiger_Datetime_UIType::getDBDateTimeValue($nowInUserFormat); list($currentDate, $currentTime) = explode(' ', $nowInDBFormat); if (in_array($this->getName(), ['Accounts', 'Leads', 'Contacts', 'Vendors', 'OSSEmployees'])) { $relationField = 'link'; } if (in_array($this->getName(), ['Campaigns', 'HelpDesk', 'Potentials', 'Project', 'ServiceContracts'])) { $relationField = 'process'; } $query = "SELECT vtiger_crmentity.crmid, crmentity2.crmid AS parent_id, vtiger_crmentity.description as description, vtiger_crmentity.smownerid, vtiger_crmentity.smcreatorid, vtiger_crmentity.setype, vtiger_activity.* FROM vtiger_activity\n\t\t\t\t\tINNER JOIN vtiger_crmentity ON vtiger_crmentity.crmid = vtiger_activity.activityid\n\t\t\t\t\tINNER JOIN vtiger_crmentity AS crmentity2 ON vtiger_activity." . $relationField . " = crmentity2.crmid AND crmentity2.deleted = 0 AND crmentity2.setype = ?\n\t\t\t\t\tLEFT JOIN vtiger_groups ON vtiger_groups.groupid = vtiger_crmentity.smownerid WHERE vtiger_crmentity.deleted=0"; $params = [$this->getName()]; if ($recordId) { $query .= ' AND vtiger_activity.' . $relationField . ' = ?'; array_push($params, $recordId); } if ($mode === 'current') { $query .= " AND (vtiger_activity.activitytype NOT IN ('Emails') AND vtiger_activity.status IN (" . generateQuestionMarks($currentActivityLabels) . "))"; $params = array_merge($params, $currentActivityLabels); } elseif ($mode === 'history') { $query .= " AND (vtiger_activity.activitytype NOT IN ('Emails') AND vtiger_activity.status NOT IN (" . generateQuestionMarks($currentActivityLabels) . "))"; $params = array_merge($params, $currentActivityLabels); } elseif ($mode === 'upcoming') { $query .= " AND (vtiger_activity.activitytype NOT IN ('Emails'))\n\t\t\t\t\tAND (vtiger_activity.status is NULL OR vtiger_activity.status NOT IN ('Completed', 'Deferred'))"; $query .= " AND due_date >= '{$currentDate}'"; } elseif ($mode === 'overdue') { $query .= " AND (vtiger_activity.activitytype NOT IN ('Emails'))\n\t\t\t\t\tAND (vtiger_activity.status is NULL OR vtiger_activity.status NOT IN ('Completed', 'Deferred'))"; $query .= " AND due_date < '{$currentDate}'"; } if ($user != 'all' && $user != '') { if ($user === $currentUser->id) { $query .= " AND vtiger_crmentity.smownerid = ?"; array_push($params, $user); } } $moduleName = 'Calendar'; $instance = CRMEntity::getInstance($moduleName); $securityParameter = $instance->getUserAccessConditionsQuerySR($moduleName, $currentUser, $recordId); if ($securityParameter != '') { $query .= $securityParameter; } $query .= " ORDER BY date_start, time_start LIMIT " . $pagingModel->getStartIndex() . ", " . ($pagingModel->getPageLimit() + 1); $result = $db->pquery($query, $params); $numOfRows = $db->num_rows($result); $groupsIds = Vtiger_Util_Helper::getGroupsIdsForUsers($currentUser->getId()); $activities = array(); for ($i = 0; $i < $numOfRows; $i++) { $newRow = $db->query_result_rowdata($result, $i); $model = Vtiger_Record_Model::getCleanInstance('Calendar'); $ownerId = $newRow['smownerid']; $currentUser = Users_Record_Model::getCurrentUserModel(); $visibleFields = array('activitytype', 'date_start', 'time_start', 'due_date', 'time_end', 'assigned_user_id', 'visibility', 'smownerid', 'crmid'); $visibility = true; if (in_array($ownerId, $groupsIds)) { $visibility = false; } else { if ($ownerId == $currentUser->getId()) { $visibility = false; } } if (!$currentUser->isAdminUser() && $newRow['activitytype'] != 'Task' && $newRow['visibility'] == 'Private' && $ownerId && $visibility) { foreach ($newRow as $data => $value) { if (in_array($data, $visibleFields) != -1) { unset($newRow[$data]); } } $newRow['subject'] = vtranslate('Busy', 'Events') . '*'; } if ($newRow['activitytype'] == 'Task') { unset($newRow['visibility']); } $sql = "SELECT * FROM vtiger_invitees WHERE activityid = '" . $newRow['crmid'] . "'"; $result_invitees = $db->query($sql); while ($recordinfo = $db->fetch_array($result_invitees)) { $newRow['selectedusers'][] = $recordinfo['inviteeid']; } $model->setData($newRow); $model->setId($newRow['crmid']); $activities[] = $model; } $pagingModel->calculatePageRange($activities); if ($numOfRows > $pagingModel->getPageLimit()) { array_pop($activities); $pagingModel->set('nextPageExists', true); } else { $pagingModel->set('nextPageExists', false); } return $activities; }
/** * Function returns the Calendar Events for the module * @param <String> $mode - upcoming/overdue mode * @param <Vtiger_Paging_Model> $pagingModel - $pagingModel * @param <String> $user - all/userid * @param <String> $recordId - record id * @return <Array> */ function getCalendarActivities($mode, $pagingModel, $user, $recordId = false) { $currentUser = Users_Record_Model::getCurrentUserModel(); $db = PearDatabase::getInstance(); if (!$user) { $user = $currentUser->getId(); } $nowInUserFormat = Vtiger_Datetime_UIType::getDisplayDateTimeValue(date('Y-m-d H:i:s')); $nowInDBFormat = Vtiger_Datetime_UIType::getDBDateTimeValue($nowInUserFormat); list($currentDate, $currentTime) = explode(' ', $nowInDBFormat); $query = "SELECT vtiger_crmentity.crmid, vtiger_crmentity.smownerid, vtiger_crmentity.setype, vtiger_activity.* FROM vtiger_activity\n\t\t\t\t\tINNER JOIN vtiger_crmentity ON vtiger_crmentity.crmid = vtiger_activity.activityid\n\t\t\t\t\tLEFT JOIN vtiger_groups ON vtiger_groups.groupid = vtiger_crmentity.smownerid"; $query .= Users_Privileges_Model::getNonAdminAccessControlQuery('Calendar'); $query .= " WHERE vtiger_crmentity.deleted=0\n\t\t\t\t\tAND (vtiger_activity.activitytype NOT IN ('Emails'))\n\t\t\t\t\tAND (vtiger_activity.status is NULL OR vtiger_activity.status NOT IN ('Completed', 'Deferred'))\n\t\t\t\t\tAND (vtiger_activity.eventstatus is NULL OR vtiger_activity.eventstatus NOT IN ('Held'))"; if ($mode === 'upcoming') { $query .= " AND CASE WHEN vtiger_activity.activitytype='Task' THEN due_date >= '{$currentDate}' ELSE CONCAT(due_date,' ',time_end) >= '{$nowInDBFormat}' END"; } elseif ($mode === 'overdue') { $query .= " AND CASE WHEN vtiger_activity.activitytype='Task' THEN due_date < '{$currentDate}' ELSE CONCAT(due_date,' ',time_end) < '{$nowInDBFormat}' END"; } $params = array(); if ($user != 'all' && $user != '') { if ($user === $currentUser->id) { $query .= " AND vtiger_crmentity.smownerid = ?"; $params[] = $user; } } $query .= " ORDER BY date_start, time_start LIMIT ?, ?"; $params[] = $pagingModel->getStartIndex(); $params[] = $pagingModel->getPageLimit() + 1; $result = $db->pquery($query, $params); $numOfRows = $db->num_rows($result); $activities = array(); for ($i = 0; $i < $numOfRows; $i++) { $row = $db->query_result_rowdata($result, $i); $model = Vtiger_Record_Model::getCleanInstance('Calendar'); $model->setData($row); if ($row['activitytype'] == 'Task') { $due_date = $row["due_date"]; $dayEndTime = "23:59:59"; $EndDateTime = Vtiger_Datetime_UIType::getDBDateTimeValue($due_date . " " . $dayEndTime); $dueDateTimeInDbFormat = explode(' ', $EndDateTime); $dueTimeInDbFormat = $dueDateTimeInDbFormat[1]; $model->set('time_end', $dueTimeInDbFormat); } $model->setId($row['crmid']); $activities[] = $model; } $pagingModel->calculatePageRange($activities); if ($numOfRows > $pagingModel->getPageLimit()) { array_pop($activities); $pagingModel->set('nextPageExists', true); } else { $pagingModel->set('nextPageExists', false); } return $activities; }