晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
|
Server : Apache System : Linux srv.rainic.com 4.18.0-553.47.1.el8_10.x86_64 #1 SMP Wed Apr 2 05:45:37 EDT 2025 x86_64 User : rainic ( 1014) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /proc/thread-self/root/home/akaindir/public_html/crm/modules/Home/models/ |
Upload File : |
<?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();
}
}