*/ public function getDefaultViewName() { return 'DashBoard'; } /** * Function returns latest comments across CRM * @param $pagingModel * @return */ public function getComments($pagingModel) { $db = PearDatabase::getInstance(); $nonAdminAccessQuery = Users_Privileges_Model::getNonAdminAccessControlQuery('ModComments'); $result = $db->pquery('SELECT *, vtiger_crmentity.createdtime AS createdtime, vtiger_crmentity.smownerid AS smownerid, crmentity2.crmid AS parentId, crmentity2.setype AS parentModule FROM vtiger_modcomments INNER JOIN vtiger_crmentity ON vtiger_modcomments.modcommentsid = vtiger_crmentity.crmid AND vtiger_crmentity.deleted = 0 INNER JOIN vtiger_crmentity crmentity2 ON vtiger_modcomments.related_to = crmentity2.crmid AND crmentity2.deleted = 0 '.$nonAdminAccessQuery.' ORDER BY vtiger_crmentity.crmid DESC LIMIT ?, ?', array($pagingModel->getStartIndex(), $pagingModel->getPageLimit())); $comments = array(); for($i=0; $i<$db->num_rows($result); $i++) { $row = $db->query_result_rowdata($result, $i); if(Users_Privileges_Model::isPermitted($row['setype'], 'DetailView', $row['related_to'])){ $commentModel = Vtiger_Record_Model::getCleanInstance('ModComments'); $commentModel->setData($row); $time = $commentModel->get('createdtime'); $comments[$time] = $commentModel; } } return $comments; } /** * Function returns comments and recent activities across CRM * @param $pagingModel * @param $type - comments, updates or all * @return */ public function getHistory($pagingModel, $type=false) { if(empty($type)) { $type = 'all'; } //TODO: need to handle security $comments = array(); if($type == 'all' || $type == 'comments') { $modCommentsModel = Vtiger_Module_Model::getInstance('ModComments'); if($modCommentsModel->isPermitted('DetailView')){ $comments = $this->getComments($pagingModel); } if($type == 'comments') { return $comments; } } $db = PearDatabase::getInstance(); //As getComments api is used to get comment infomation,no need of getting //comment information again,so avoiding from modtracker $result = $db->pquery('SELECT vtiger_modtracker_basic.* FROM vtiger_modtracker_basic INNER JOIN vtiger_crmentity ON vtiger_modtracker_basic.crmid = vtiger_crmentity.crmid AND deleted = 0 AND module != "ModComments" ORDER BY vtiger_modtracker_basic.id DESC LIMIT ?, ?', array($pagingModel->getStartIndex(), $pagingModel->getPageLimit())); $activites = array(); for($i=0; $i<$db->num_rows($result); $i++) { $row = $db->query_result_rowdata($result, $i); $moduleName = $row['module']; $recordId = $row['crmid']; if(Users_Privileges_Model::isPermitted($moduleName, 'DetailView', $recordId)){ $modTrackerRecorModel = new ModTracker_Record_Model(); $modTrackerRecorModel->setData($row)->setParent($recordId, $moduleName); $time = $modTrackerRecorModel->get('changedon'); $activites[$time] = $modTrackerRecorModel; } } $history = array_merge($activites, $comments); foreach($history as $time=>$model) { $dateTime[] = $time; } if(!empty($history)) { array_multisort($dateTime,SORT_DESC,SORT_STRING,$history); return $history; } return false; } /** * Function returns the Calendar Events for the module * @param $mode - upcoming/overdue mode * @param $pagingModel - $pagingModel * @param $user - all/userid * @param $recordId - record id * @return */ 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 INNER JOIN vtiger_crmentity ON vtiger_crmentity.crmid = vtiger_activity.activityid LEFT JOIN vtiger_groups ON vtiger_groups.groupid = vtiger_crmentity.smownerid"; $query .= Users_Privileges_Model::getNonAdminAccessControlQuery('Calendar'); $query .= " WHERE vtiger_crmentity.deleted=0 AND (vtiger_activity.activitytype NOT IN ('Emails')) AND (vtiger_activity.status is NULL OR vtiger_activity.status NOT IN ('Completed', 'Deferred')) AND (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; } }