晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
|
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/www/crm/modules/Vtiger/handlers/ |
Upload File : |
<?php
/* +**********************************************************************************
* The contents of this file are subject to the vtiger CRM Public License Version 1.1
* ("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.
* ***********************************************************************************/
require_once 'include/events/VTEventHandler.inc';
class FollowRecordHandler extends VTEventHandler {
function handleEvent($eventName, $entityData) {
if ($eventName == 'vtiger.entity.aftersave') {
global $site_URL;
$db = PearDatabase::getInstance();
//current user details
$currentUserModel = Users_Record_Model::getCurrentUserModel();
$currentUserId = $currentUserModel->getId();
//record details
$recordId = $entityData->getId();
$moduleName = $entityData->getModuleName();
$restrictedModules = array('CustomerPortal', 'Dashboard', 'Emails', 'EmailTemplates', 'ExtensionStore', 'Google', 'Home',
'Import', 'MailManager', 'Mobile', 'ModComments', 'ModTracker', 'PBXManager', 'Portal',
'RecycleBin', 'Reports', 'Rss', 'SMSNotifier', 'Users', 'Webforms', 'Webmails', 'WSAPP');
if (!in_array($moduleName, $restrictedModules)) {
$tableName = Vtiger_Functions::getUserSpecificTableName($moduleName);
//following users
$userIdsList = array();
$result = $db->pquery("SELECT userid FROM $tableName WHERE recordid = ? AND starred = ? AND userid != ?", array($recordId, '1', $currentUserId));
if ($result && $db->num_rows($result)) {
while ($rowData = $db->fetch_row($result)) {
$userIdsList[] = $rowData['userid'];
}
}
if ($userIdsList) {
//changed fields data
$vtEntityDelta = new VTEntityDelta();
$delta = $vtEntityDelta->getEntityDelta($moduleName, $recordId, true);
if ($delta) {
$newEntity = $vtEntityDelta->getNewEntity($moduleName, $recordId);
$label = decode_html(trim($newEntity->get('label')));
$fieldModels = array();
$changedValues = array();
$skipFields = array('modifiedtime', 'modifiedby', 'label');
$moduleModel = Vtiger_Module_Model::getInstance($moduleName);
foreach ($delta as $fieldName => $fieldInfo) {
if (!in_array($fieldName, $skipFields)) {
$fieldModel = Vtiger_Field_Model::getInstance($fieldName, $moduleModel);
if ($fieldModel) {
$fieldModels[$fieldName] = $fieldModel;
$changedValues[$fieldName] = $fieldInfo;
}
}
}
if ($fieldModels) {
$companyDetails = getCompanyDetails();
$userModuleModel = Users_Module_Model::getInstance('Users');
foreach ($userIdsList as $userId) {
$userRecordModel = Users_Record_Model::getInstanceById($userId, $userModuleModel);
if ($userRecordModel && $userRecordModel->get('status') == 'Active') {
$changedFieldString = $this->getChangedFieldString($fieldModels, $changedValues, $userRecordModel);
$detailViewLink = "$site_URL/index.php?module=$moduleName&view=Detail&record=$recordId";
$recordDetailViewLink = '<a style="text-decoration:none;" target="_blank" href="'.$detailViewLink.'">'.$label.'</a>';
$data = vtranslate('LBL_STARRED_RECORD_UPDATED', $moduleName, $currentUserModel->getName(), $recordDetailViewLink).$changedFieldString;
$body = '<table><tbody><tr><td style="padding:10px">'.nl2br(decode_html($data)).'</td></tr></tbody></table>';
$notificationMessage = ucwords($companyDetails['companyname']).' '.vtranslate('LBL_NOTIFICATION', $moduleName).' - '.$currentUserModel->getName();
$subject = vtranslate('LBL_STARRED_RECORD_UPDATED', $moduleName, $notificationMessage, $label);
$this->sendEmail($userRecordModel->get('email1'), $subject, $body, $recordId);
}
}
}
}
}
}
}
}
public function getChangedFieldString($fieldModels, $changedValues, $userRecordModel) {
$userEntity = $userRecordModel->entity;
$changedFieldString = '';
foreach ($fieldModels as $fieldName => $fieldModel) {
$moduleName = $fieldModel->getModule()->getName();
$fieldCurrentValue = $changedValues[$fieldName]['currentValue'];
if ($fieldModel->isReferenceField()) {
$fieldDisplayValue = Vtiger_Util_Helper::getRecordName($fieldCurrentValue);
} else if ($fieldModel->isOwnerField()) {
$fieldDisplayValue = getOwnerName($fieldCurrentValue);
} else if ($fieldModel->get('uitype') == 117 && $fieldCurrentValue) {
$fieldDisplayValue = getCurrencyName($fieldCurrentValue, FALSE);
} else {
$fieldDataType = $fieldModel->getFieldDataType();
switch ($fieldDataType) {
case 'boolean' :
case 'multipicklist': $fieldDisplayValue = $fieldModel->getDisplayValue($fieldCurrentValue);break;
case 'date' : $fieldDisplayValue = DateTimeField::convertToUserFormat($fieldCurrentValue, $userEntity);break;
case 'double' : $fieldDisplayValue = CurrencyField::convertToUserFormat(decimalFormat($fieldCurrentValue), $userEntity, true);break;
case 'time' : if ($userRecordModel->get('hour_format') == '12') {
$fieldDisplayValue = Vtiger_Time_UIType::getTimeValueInAMorPM($fieldCurrentValue);
} else {
$fieldDisplayValue = $fieldModel->getEditViewDisplayValue($fieldCurrentValue);
}
break;
case 'currency' : $skipConversion = false;
if ($fieldModel->get('uitype') == 72) {
$skipConversion = true;
}
$fieldDisplayValue = CurrencyField::convertToUserFormat($fieldCurrentValue, $userEntity, $skipConversion);
break;
default : $fieldDisplayValue = $fieldModel->getEditViewDisplayValue($fieldCurrentValue);break;
}
}
$changedFieldString .= '<br/>'.vtranslate('LBL_STARRED_RECORD_TO', $moduleName, vtranslate($fieldModel->get('label'), $moduleName), $fieldDisplayValue);
}
return $changedFieldString;
}
public function sendEmail($toEmailId, $subject, $body, $recordId) {
//It will not show in CRM
$generatedMessageId = Emails_Mailer_Model::generateMessageID();
Emails_Mailer_Model::updateMessageIdByCrmId($generatedMessageId, $recordId);
$mailer = new Emails_Mailer_Model();
$mailer->reinitialize();
$mailer->Body = $body;
$mailer->Subject = decode_html($subject);
$activeUserModel = $this->getActiveUserModel();
$replyTo = decode_html($activeUserModel->email1);
$replyToName = decode_html($activeUserModel->first_name.' '.$activeUserModel->last_name);
$fromEmail = decode_html($activeUserModel->email1);
$mailer->ConfigSenderInfo($fromEmail, $replyTo, $replyToName);
$mailer->IsHTML();
$mailer->AddCustomHeader("In-Reply-To", $generatedMessageId);
$mailer->AddAddress($toEmailId);
$response = $mailer->Send(true);
}
var $activeAdmin = '';
public function getActiveUserModel() {
if (!$this->activeAdmin) {
$activeUserModel = new Users();
$activeUserModel->retrieveCurrentUserInfoFromFile(Users::getActiveAdminId());
$this->activeAdmin = $activeUserModel;
}
return $this->activeAdmin;
}
}