first commit
This commit is contained in:
291
modules/Home/models/Module.php
Normal file
291
modules/Home/models/Module.php
Normal file
@@ -0,0 +1,291 @@
|
||||
<?php
|
||||
/*+***********************************************************************************
|
||||
* The contents of this file are subject to the vtiger CRM Public License Version 1.0
|
||||
* ("License"); You may not use this file except in compliance with the License
|
||||
* The Original Code is: vtiger CRM Open Source
|
||||
* The Initial Developer of the Original Code is vtiger.
|
||||
* Portions created by vtiger are Copyright (C) vtiger.
|
||||
* All Rights Reserved.
|
||||
*************************************************************************************/
|
||||
|
||||
class Home_Module_Model extends Vtiger_Module_Model {
|
||||
|
||||
/**
|
||||
* Function returns the default view for the Home module
|
||||
* @return <String>
|
||||
*/
|
||||
public function getDefaultViewName() {
|
||||
return 'DashBoard';
|
||||
}
|
||||
|
||||
/**
|
||||
* Function returns latest comments across CRM
|
||||
* @param <Vtiger_Paging_Model> $pagingModel
|
||||
* @return <Array>
|
||||
*/
|
||||
public function getComments($pagingModel, $user, $dateFilter='') {
|
||||
$db = PearDatabase::getInstance();
|
||||
|
||||
$sql = 'SELECT vtiger_modcomments.*,vtiger_crmentity.setype AS setype,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
|
||||
INNER JOIN vtiger_modtracker_basic ON vtiger_modtracker_basic.crmid = vtiger_crmentity.crmid';
|
||||
|
||||
$currentUser = Users_Record_Model::getCurrentUserModel();
|
||||
$params = array();
|
||||
|
||||
if($user === 'all') {
|
||||
if(!$currentUser->isAdminUser()){
|
||||
$accessibleUsers = array_keys($currentUser->getAccessibleUsers());
|
||||
$nonAdminAccessQuery = Users_Privileges_Model::getNonAdminAccessControlQuery('ModComments');
|
||||
$sql .= $nonAdminAccessQuery;
|
||||
$sql .= ' AND userid IN('. generateQuestionMarks($accessibleUsers).')';
|
||||
$params = array_merge($params,$accessibleUsers);
|
||||
}
|
||||
}else{
|
||||
$sql .= ' AND userid = ?';
|
||||
$params[] = $user;
|
||||
}
|
||||
//handling date filter for history widget in home page
|
||||
if(!empty($dateFilter)) {
|
||||
$sql .= ' AND vtiger_modtracker_basic.changedon BETWEEN ? AND ? ';
|
||||
$params[] = $dateFilter['start'];
|
||||
$params[] = $dateFilter['end'];
|
||||
}
|
||||
|
||||
$sql .= ' ORDER BY vtiger_crmentity.crmid DESC LIMIT ?, ?';
|
||||
$params[] = $pagingModel->getStartIndex();
|
||||
$params[] = $pagingModel->getPageLimit();
|
||||
$result = $db->pquery($sql,$params);
|
||||
|
||||
$noOfRows = $db->num_rows($result);
|
||||
//setting up the count of records before checking permissions in history
|
||||
$pagingModel->set('historycount', $noOfRows);
|
||||
$comments = array();
|
||||
for($i=0; $i<$noOfRows; $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);
|
||||
$commentModel->set('commentcontent', $commentModel->getParsedContent());
|
||||
$comments[] = $commentModel;
|
||||
}
|
||||
}
|
||||
|
||||
return $comments;
|
||||
}
|
||||
|
||||
/**
|
||||
* Function returns comments and recent activities across CRM
|
||||
* @param <Vtiger_Paging_Model> $pagingModel
|
||||
* @param <String> $type - comments, updates or all
|
||||
* @return <Array>
|
||||
*/
|
||||
public function getHistory($pagingModel, $type='', $userId='', $dateFilter='') {
|
||||
if(!$userId) $userId = 'all';
|
||||
if(!$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, $userId, $dateFilter);
|
||||
}
|
||||
if($type == 'comments') {
|
||||
return $comments;
|
||||
}
|
||||
}
|
||||
$db = PearDatabase::getInstance();
|
||||
$params = array();
|
||||
$sql = 'SELECT vtiger_modtracker_basic.*
|
||||
FROM vtiger_modtracker_basic
|
||||
INNER JOIN vtiger_crmentity ON vtiger_modtracker_basic.crmid = vtiger_crmentity.crmid
|
||||
AND module NOT IN ("ModComments","Users") ';
|
||||
|
||||
$currentUser = Users_Record_Model::getCurrentUserModel();
|
||||
if($userId === 'all') {
|
||||
if(!$currentUser->isAdminUser()) {
|
||||
$accessibleUsers = array_keys($currentUser->getAccessibleUsers());
|
||||
$sql .= ' AND whodid IN ('. generateQuestionMarks($accessibleUsers).')';
|
||||
$params = array_merge($params, $accessibleUsers);
|
||||
}
|
||||
}else{
|
||||
$sql .= ' AND whodid = ?';
|
||||
$params[] = $userId;
|
||||
}
|
||||
//handling date filter for history widget in home page
|
||||
if(!empty($dateFilter)) {
|
||||
$sql .= ' AND vtiger_modtracker_basic.changedon BETWEEN ? AND ? ';
|
||||
$params[] = $dateFilter['start'];
|
||||
$params[] = $dateFilter['end'];
|
||||
}
|
||||
$sql .= ' ORDER BY vtiger_modtracker_basic.id DESC LIMIT ?, ?';
|
||||
$params[] = $pagingModel->getStartIndex();
|
||||
$params[] = $pagingModel->getPageLimit();
|
||||
|
||||
//As getComments api is used to get comment infomation,no need of getting
|
||||
//comment information again,so avoiding from modtracker
|
||||
$result = $db->pquery($sql,$params);
|
||||
|
||||
$activites = array();
|
||||
$noOfRows = $db->num_rows($result);
|
||||
//set the records count before checking permissions and unsetting it
|
||||
//If updates count more than comments count, this count should consider
|
||||
if($pagingModel->get('historycount') < $noOfRows) {
|
||||
$pagingModel->set('historycount', $noOfRows);
|
||||
}
|
||||
for($i=0; $i<$noOfRows; $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);
|
||||
$activites[] = $modTrackerRecorModel;
|
||||
}
|
||||
}
|
||||
|
||||
$history = array_merge($activites, $comments);
|
||||
|
||||
$dateTime = array();
|
||||
foreach($history as $model) {
|
||||
if(get_class($model) == 'ModComments_Record_Model') {
|
||||
$time = $model->get('createdtime');
|
||||
} else {
|
||||
$time = $model->get('changedon');
|
||||
}
|
||||
$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 <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) {
|
||||
$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', 'Cancelled'))
|
||||
AND (vtiger_activity.eventstatus is NULL OR vtiger_activity.eventstatus NOT IN ('Held', 'Cancelled'))";
|
||||
|
||||
if(!$currentUser->isAdminUser()) {
|
||||
$moduleFocus = CRMEntity::getInstance('Calendar');
|
||||
$condition = $moduleFocus->buildWhereClauseConditionForCalendar();
|
||||
if($condition) {
|
||||
$query .= ' AND '.$condition;
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
$groupsIds = Vtiger_Util_Helper::getGroupsIdsForUsers($currentUser->getId());
|
||||
$activities = array();
|
||||
$recordsToUnset = 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']);
|
||||
|
||||
$due_date = $newRow["due_date"];
|
||||
$dayEndTime = "23:59:59";
|
||||
$EndDateTime = Vtiger_Datetime_UIType::getDBDateTimeValue($due_date." ".$dayEndTime);
|
||||
$dueDateTimeInDbFormat = explode(' ',$EndDateTime);
|
||||
$dueTimeInDbFormat = $dueDateTimeInDbFormat[1];
|
||||
$newRow['time_end'] = $dueTimeInDbFormat;
|
||||
}
|
||||
$model->setData($newRow);
|
||||
$model->setId($newRow['crmid']);
|
||||
$activities[$newRow['crmid']] = $model;
|
||||
if(!$currentUser->isAdminUser() && $newRow['activitytype'] == 'Task' && isToDoPermittedBySharing($newRow['crmid']) == 'no') {
|
||||
$recordsToUnset[] = $newRow['crmid'];
|
||||
}
|
||||
}
|
||||
|
||||
$pagingModel->calculatePageRange($activities);
|
||||
if($numOfRows > $pagingModel->getPageLimit()){
|
||||
array_pop($activities);
|
||||
$pagingModel->set('nextPageExists', true);
|
||||
} else {
|
||||
$pagingModel->set('nextPageExists', false);
|
||||
}
|
||||
//after setting paging model, unsetting the records which has no permissions
|
||||
foreach($recordsToUnset as $record) {
|
||||
unset($activities[$record]);
|
||||
}
|
||||
return $activities;
|
||||
}
|
||||
|
||||
/*
|
||||
* Function to get supported utility actions for a module
|
||||
*/
|
||||
function getUtilityActionsNames() {
|
||||
return array();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user