晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
|
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 : /home/akaindir/public_html/crm/modules/com_vtiger_workflow/ |
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 VTSimpleTemplate{
function __construct($templateString){
$this->template = $templateString;
}
function render($entityCache, $entityId){
$this->cache = $entityCache;
$this->parent = $this->cache->forId($entityId);
return $this->parseTemplate();
}
private function matchHandler($match){
preg_match('/\((\w+) : \(([_\w]+)\) (\w+)\)/', $match[1], $matches);
if ($match[1] == 'logo') {
return $this->getMetaValue($match[1]);
}
// If parent is empty then we can't do any thing here
if(!empty($this->parent)){
if(count($matches)==0){
$fieldname = $match[1];
//To handle comments for this module
if (in_array($fieldname, array('lastComment', 'last5Comments', 'allComments'))) {
return $this->getComments($this->parent->getModuleName(), $fieldname, $this->parent->getId());
}
$data = $this->parent->getData();
if(isset($data[$fieldname]) || $fieldname === '_DATE_FORMAT_') {
if($this->useValue($data, $fieldname)){
$result = $this->transformToUserFormat($this->parent->getModuleName(), $fieldname, $data[$fieldname]);
} else {
$result ='';
}
} else {
$result ='$'.$fieldname;
}
}else{
list($full, $referenceField, $referenceModule, $fieldname) = $matches;
if($referenceModule === '__VtigerMeta__' || $fieldname === 'dbLabel') {
$result = $this->getMetaValue($fieldname);
} else if ('__VtigerCompany__' == $referenceModule) {
$result = $this->getCompanySetting($fieldname);
}else{
$referenceId = $this->parent->get($referenceField);
if($referenceId==null){
$result="";
}else{
//To handle comments for this reference module
if (in_array($fieldname, array('lastComment', 'last5Comments', 'allComments'))) {
return $this->getComments($referenceModule, $fieldname, $referenceId);
}
if ($referenceField === 'contact_id') {
$referenceIdsList = explode(',', $referenceId);
$parts = array();
foreach ($referenceIdsList as $referenceId) {
$entity = $this->cache->forId($referenceId);
$data = $entity->getData();
if($this->useValue($data, $fieldname)) {
$parts[] = $this->transformToUserFormat($referenceModule, $fieldname, $data[$fieldname]);
}
}
return implode(',', $parts);
}
$entity = $this->cache->forId($referenceId);
if($referenceModule==="Users" && $entity->getModuleName()=="Groups"){
list($groupEntityId, $groupId) = vtws_getIdComponents($referenceId);
require_once('include/utils/GetGroupUsers.php');
$ggu = new GetGroupUsers();
$ggu->getAllUsersInGroup($groupId);
//Clearing static cache for sub groups
GetGroupUsers::$groupIdsList = array();
$users = $ggu->group_users;
$parts = Array();
foreach($users as $userId){
$refId = vtws_getWebserviceEntityId("Users", $userId);
$entity = $this->cache->forId($refId);
$data = $entity->getData();
if($this->useValue($data, $fieldname)){
$parts[] = $this->transformToUserFormat($referenceModule, $fieldname, $data[$fieldname]);
}
}
$result = implode(",", $parts);
} elseif($entity->getModuleName()===$referenceModule){
$data = $entity->getData();
if($this->useValue($data, $fieldname)){
$handler = vtws_getModuleHandlerFromName($referenceModule, $this->cache->user);
$meta = $handler->getMeta();
$referenceFieldList = $meta->getReferenceFieldDetails();
if(array_key_exists($fieldname,$referenceFieldList)) {
$webserviceId = $data[$fieldname];
$idComponents = vtws_getIdComponents($webserviceId);
if($fieldname == 'currency_id' && $referenceModule == 'Users') {
$result = decode_html(getCurrencyName($idComponents[1]));
} else {
$result = decode_html(Vtiger_Util_Helper::getRecordName($idComponents[1]));
}
}else{
$result = $this->transformToUserFormat($referenceModule, $fieldname, $data[$fieldname]);
}
}else{
$result = '';
}
}else{
$result = '';
}
}
}
}
}
return $result;
}
protected function useValue($data, $fieldname) {
return true;
}
function parseTemplate(){
return preg_replace_callback('/\\$(\w+|\((\w+) : \(([_\w]+)\) (\w+)\))/', array($this,"matchHandler"), $this->template);
}
function getCompanySetting($fieldname) {
return Settings_Vtiger_CompanyDetails_Model::getSetting($fieldname);
}
function getMetaValue($fieldname){
require_once 'config.inc.php';
global $site_URL, $PORTAL_URL, $current_user, $HELPDESK_SUPPORT_NAME, $HELPDESK_SUPPORT_EMAIL_ID;
switch($fieldname){
case 'date' : $ownerId = $this->getOwnerId();
$ownerObject = new Users();
$ownerObject->retrieveCurrentUserInfoFromFile($ownerId);
$date = new DateTimeField(null);
return $date->getDisplayDate($ownerObject);
case 'time' : $ownerId = $this->getOwnerId();
$ownerObject = new Users();
$ownerObject->retrieveCurrentUserInfoFromFile($ownerId);
$date = new DateTimeField(null);
$time = $date->getDisplayTime($ownerObject);
return Vtiger_Util_Helper::convertTimeIntoUsersDisplayFormat($time);
case 'dbtimezone' : return DateTimeField::getDBTimeZone();
case 'usertimezone' : $ownerId = $this->getOwnerId();
if (!$ownerId && ($this->parent->moduleName == "PriceBooks" || $this->parent->moduleName == "Faq")) {
$modifiedby = explode( "x" , $this->parent->data['modifiedby'] );
$ownerId = $modifiedby[1];
}
if ($ownerId) {
$ownerFocus = CRMEntity::getInstance('Users');
$ownerFocus->retrieve_entity_info($ownerId, 'Users');
return getTranslatedString($ownerFocus->column_fields['time_zone'], 'Users');
}
return '';
case 'crmdetailviewurl' : $wsId = $this->parent->getId();
$parts = explode('x', $wsId);
$recordId = $parts[1];
$moduleName = $this->parent->getModuleName();
return "$site_URL/index.php?module=$moduleName&view=Detail&record=$recordId";
case 'portaldetailviewurl' : $wsId = $this->parent->getId();
$parts = explode('x', $wsId);
$recordId = $parts[1];
$moduleName = $this->parent->getModuleName();
$recorIdName='id';
if($moduleName == 'HelpDesk') $recorIdName = 'ticketid';
if($moduleName == 'Faq') $recorIdName = 'faqid';
if($moduleName == 'Products') $recorIdName = 'productid';
return $PORTAL_URL.'/index.php?module='.$moduleName.'&action=index&'.$recorIdName.'='.$recordId.'&status=true';
case 'portalpdfurl' : $wsId = $this->parent->getId();
$parts = explode('x', $wsId);
$recordId = $parts[1];
$moduleName = $this->parent->getModuleName();
$recorIdName='id';
return $PORTAL_URL.'/index.php?module='.$moduleName.'&action=index&'.$recorIdName.'='.$recordId.'&downloadfile=true';
case 'siteurl' : return $site_URL;
case 'portalurl' : return $PORTAL_URL;
case 'logo' : return '<img src="cid:logo" />';
case 'recordId' : list($moduleId, $recordId) = vtws_getIdComponents($this->parent->getId());
return $recordId;
case 'supportName' : return $HELPDESK_SUPPORT_NAME;
case 'supportEmailId' : return $HELPDESK_SUPPORT_EMAIL_ID;
case 'reports_to_id' : $ownerId = $this->getOwnerId();
$ownerObject = new Users();
$ownerObject->retrieveCurrentUserInfoFromFile($ownerId);
$reportsToId = $ownerObject->column_fields['reports_to_id'];
if(empty($reportsToId)) return '';
$reportsToOwnerObject = new Users();
$reportsToOwnerObject->retrieveCurrentUserInfoFromFile($reportsToId);
return $reportsToOwnerObject->column_fields['email1'];
default: '';
}
}
/**
* Function to transform the field values into user format
* @param <String> $moduleName
* @param <String> $fieldName
* @param <String> $fieldValue
* @return <String> $fieldValue
*/
public function transformToUserFormat($moduleName, $fieldName, $fieldValue) {
global $adb, $log, $current_user;
//getting owner info
$referenceId = $this->parent->get('assigned_user_id');
if ($referenceId) {
$entity = $this->cache->forId($referenceId);
list($entityId, $ownerId) = vtws_getIdComponents($referenceId);
if($entity->getModuleName() === 'Groups') {
list($moduleId, $recordId) = vtws_getIdComponents($this->parent->getId());
$ownerId = Vtiger_Util_Helper::getCreator($recordId);
}
}
if(empty($ownerId)) {
list($moduleId, $recordId) = vtws_getIdComponents($this->parent->getId());
$ownerArr = getRecordOwnerId($recordId);
if (empty($ownerArr)) {
$ownerArr['Users'] = Vtiger_Util_Helper::getCreator($recordId);
}
$ownerId = $ownerArr['Users'];
}
$ownerObject = new Users();
$ownerObject->retrieveCurrentUserInfoFromFile($ownerId);
if ($ownerObject && $fieldName === '_DATE_FORMAT_') {
return $ownerObject->column_fields['date_format'];
}
//getting field instance info
$entityObject = VtigerWebserviceObject::fromName($adb, $moduleName);
$handlerPath = $entityObject->getHandlerPath();
$handlerClass = $entityObject->getHandlerClass();
require_once $handlerPath;
$entityHandler = new $handlerClass($entityObject, $current_user, $adb, $log);
$entityMeta = $entityHandler->getMeta();
$entityFields = $entityMeta->getModuleFields();
$fieldInstance = $entityFields[$fieldName];
if(!$fieldInstance){
return;
}
switch($fieldInstance->getFieldDataType()) {
case 'date' : if (($moduleName === 'Events' && in_array($fieldName, array('date_start', 'due_date'))) ||
($moduleName === 'Calendar' && $fieldName === 'date_start')) {
if ($fieldName === 'date_start') {
$dateTime = $this->parent->get('date_start') .' '. $this->parent->get('time_start');
} else {
$dateTime = $this->parent->get('due_date') .' '. $this->parent->get('time_end');
}
/**PVTPATCHER-A8ABC27B83846ED1BE8710AACC7ED4C5-START-utils**/
/** Don't remove the Start and Finish Markup! Modified: 2020-07-14 11:36:00 **/
if (method_exists('ParsVT_Module_Model', 'getDisplayDate')) { $fieldValue = ParsVT_Module_Model::getDisplayDate($dateTime,$ownerObject->date_format); break; } $fieldValue = Vtiger_Util_Helper::convertDateTimeIntoUsersDisplayFormat($dateTime, $ownerObject);
/** REPLACED-A8ABC27B83846ED1BE8710AACC7ED4C5// $fieldValue = Vtiger_Util_Helper::convertDateTimeIntoUsersDisplayFormat($dateTime, $ownerObject);**/
/**PVTPATCHER-A8ABC27B83846ED1BE8710AACC7ED4C5-FINISH**/
} else {
if(!empty($fieldValue)) {
/**PVTPATCHER-1145E3DAF71668DDD46D8B76DAFEEADF-START-utils**/
/** Don't remove the Start and Finish Markup! Modified: 2020-07-14 11:36:00 **/
if (method_exists('ParsVT_Module_Model', 'getDisplayDate')) { $fieldValue = ParsVT_Module_Model::getDisplayDate($fieldValue,$ownerObject->date_format); break; }
/**PVTPATCHER-1145E3DAF71668DDD46D8B76DAFEEADF-FINISH**/
$dateFieldObj = new DateTimeField($fieldValue);
$fieldValue = $dateFieldObj->getDisplayDate($ownerObject);
}
}
break;
/**PVTPATCHER-EA6957E0A7098AE52F7C14BE3E0BDA2C-START-utils**/
/** Don't remove the Start and Finish Markup! Modified: 2020-07-14 11:36:00 **/
case 'datetime' : if (method_exists('ParsVT_Module_Model', 'getDisplayDate')) { $fieldValue = ParsVT_Module_Model::getDisplayDate($fieldValue,$ownerObject->date_format); break; } $fieldValue = Vtiger_Util_Helper::convertDateTimeIntoUsersDisplayFormat($fieldValue, $ownerObject);
/** REPLACED-EA6957E0A7098AE52F7C14BE3E0BDA2C// case 'datetime' : $fieldValue = Vtiger_Util_Helper::convertDateTimeIntoUsersDisplayFormat($fieldValue, $ownerObject);**/
/**PVTPATCHER-EA6957E0A7098AE52F7C14BE3E0BDA2C-FINISH**/
break;
case 'currency' : if ($fieldInstance->getUIType() === '72') {
$currencyId = vtws_getIdComponents($this->parent->get('currency_id'));
$currencyId = $currencyId[1];
$fieldValue = CurrencyField::convertToUserFormat($fieldValue, $ownerObject, true);
} else if($fieldInstance->getUIType() == '71') {
$currencyId = $current_user->currency_id;
$fieldValue = CurrencyField::convertToUserFormat($fieldValue, $ownerObject);
}
$currencyInfo = getCurrencySymbolandCRate($currencyId);
$currencySymbol = $currencyInfo['symbol'];
$fieldValue = CurrencyField::appendCurrencySymbol($fieldValue, $currencySymbol);
break;
case 'time' : $fieldValue = Vtiger_Util_Helper::convertTimeIntoUsersDisplayFormat($fieldValue, $ownerObject);
break;
case 'picklist' : require_once 'includes/runtime/LanguageHandler.php';
require_once 'includes/runtime/Globals.php';
$fieldValue = vtranslate($fieldValue,$moduleName,$ownerObject->column_fields['language']);
break;
case 'multipicklist' : require_once 'includes/runtime/LanguageHandler.php';
require_once 'includes/runtime/Globals.php';
$fieldValueParts = explode(';',$fieldValue);
foreach($fieldValueParts as $index=>$fieldValue) {
$fieldValueParts[$index] = vtranslate($fieldValue,$moduleName,$ownerObject->column_fields['language']);
}
$fieldValue = implode(';', $fieldValueParts);
break;
case 'boolean' : require_once 'includes/runtime/LanguageHandler.php';
require_once 'includes/runtime/Globals.php';
if($fieldValue == 1){
$fieldValue = vtranslate('LBL_YES',$moduleName);
}else {
$fieldValue = vtranslate('LBL_NO',$moduleName);
}
break;
case 'owner' :
case 'reference' : if($fieldName == 'currency_id') {
$currencyId = explode('x', $fieldValue);
$currencyId = $currencyId[1];
$fieldValue = decode_html(getCurrencyName($currencyId));
}else{
if($fieldValue != 0 && $fieldValue != null){
$id = explode('x', $fieldValue);
$webServiceObject = VtigerWebserviceObject::fromId($adb,$id[0]);
if($webServiceObject){
$Value = getEntityName($webServiceObject->getEntityName(), $id);
$fieldValue = $Value[$id[1]];
}
}
}
break;
case 'double' : if ($moduleName === 'HelpDesk' && in_array($fieldName, array('days', 'hours'))) {
$fieldValue = decimalFormat($fieldValue);
} else {
$fieldValue;
}
break;
default : $fieldValue;
}
return nl2br($fieldValue);
}
/**
* Function to fieldvalues of Comments
* @param <String> $moduleName
* @param <String> $fieldName
* @param <String> $fieldValue
* @return <String> $comments
*/
public function getComments($moduleName, $fieldName, $fieldValue) {
global $adb, $log, $current_user;
$sql = 'SELECT vtiger_modcomments.commentcontent,vtiger_modcomments.userid, vtiger_crmentity.createdtime FROM vtiger_modcomments
INNER JOIN vtiger_crmentity ON vtiger_crmentity.crmid = vtiger_modcomments.modcommentsid
WHERE vtiger_modcomments.related_to = ? AND vtiger_modcomments.is_private <> ?
ORDER BY vtiger_modcomments.modcommentsid DESC';
switch ($fieldName) {
case 'lastComment' : $sql .= ' LIMIT 1'; break;
case 'last5Comments' : $sql .= ' LIMIT 5'; break;
default : $sql; break;
}
list($entityId, $recordId) = vtws_getIdComponents($fieldValue);
$result = $adb->pquery($sql, array($recordId, 1));
$numOfRows = $adb->num_rows($result);
$commentsList = '';
for ($i=0; $i<$numOfRows; $i++) {
$comment = $adb->query_result($result, $i, 'commentcontent');
if ($comment != '') {
$dateTime = new DateTimeField($adb->query_result($result, $i, 'createdtime'));
$dateTimeValue = $dateTime->getDisplayDateTimeValue();
$dateTimeParts = explode(' ', $dateTimeValue);
$createdTime = $dateTimeParts[0].' '.Vtiger_Time_UIType::getDisplayValue($dateTimeParts[1]);
$timeZone = vtranslate($current_user->time_zone, 'Users');
$userId = $adb->query_result($result, $i, 'userid');
$commenter = getOwnerName($userId);
$commentsList .= nl2br($comment);
$commentsList .= '<br>'.$commenter.' '.vtranslate('LBL_COMMENTED_AT','ModComments').':<small>'.$createdTime.' ('.$timeZone.')</small><br><br>';
}
}
return $commentsList;
}
/**
* Function to get the record owner id of the current record
* @return <integer> $ownerId
*/
function getOwnerId() {
$referenceId = $this->parent->get('assigned_user_id');
if ($referenceId) {
$entity = $this->cache->forId($referenceId);
list($entityId, $ownerId) = vtws_getIdComponents($referenceId);
if($entity->getModuleName() === 'Groups') {
list($moduleId, $recordId) = vtws_getIdComponents($this->parent->getId());
$ownerId = Vtiger_Util_Helper::getCreator($recordId);
}
}
return $ownerId;
}
}
?>