晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
|
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/include/Webservices/ |
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 VtigerCRMActorMeta extends EntityMeta {
protected $pearDB;
protected static $fieldTypeMapping = array();
protected static $referenceTypeMapping = array();
function VtigerCRMActorMeta($tableName,$webserviceObject,$adb,$user){
parent::__construct($webserviceObject,$user);
$this->baseTable = $tableName;
$this->idColumn = null;
$this->pearDB = $adb;
$this->tableList = array($this->baseTable);
$this->tableIndexList = null;
$this->defaultTableList = array();
}
public function getIdColumn() {
if($this->idColumn === null) {
$this->getModuleFields();
}
return parent::getIdColumn();
}
public function getObectIndexColumn() {
return $this->getIdColumn();
}
public function getEntityTableIndexList() {
if($this->tableIndexList === null){
$this->tableIndexList = array($this->baseTable=>$this->getIdColumn());
}
return parent::getEntityTableIndexList();
}
public function getModuleFields() {
if ($this->moduleFields === null) {
$fieldList = $this->getTableFieldList($this->baseTable);
$this->moduleFields = array();
foreach ($fieldList as $field) {
$this->moduleFields[$field->getFieldName()] = $field;
}
}
return $this->moduleFields;
}
protected function getTableFieldList($tableName){
$tableFieldList = array();
$factory = WebserviceField::fromArray($this->pearDB,array('tablename'=>$tableName));
$dbTableFields = $factory->getTableFields();
foreach ($dbTableFields as $dbField) {
if($dbField->primary_key){
if($this->idColumn === null){
$this->idColumn = $dbField->name;
}else{
throw new WebServiceException(WebServiceErrorCode::$UNKOWNENTITY,
"Entity table with multi column primary key is not supported");
}
}
$field = $this->getFieldArrayFromDBField($dbField,$tableName);
$webserviceField = WebserviceField::fromArray($this->pearDB,$field);
$fieldDataType = $this->getFieldType($dbField,$tableName);
if($fieldDataType === null){
$fieldDataType = $this->getFieldDataTypeFromDBType($dbField->type);
}
$webserviceField->setFieldDataType($fieldDataType);
if(strcasecmp($fieldDataType,'reference') === 0){
$webserviceField->setReferenceList($this->getReferenceList($dbField,$tableName));
}
array_push($tableFieldList,$webserviceField);
}
return $tableFieldList;
}
protected function getFieldArrayFromDBField($dbField,$tableName){
$field = array();
$field['fieldname'] = $dbField->name;
$field['columnname'] = $dbField->name;
$field['tablename'] = $tableName;
$field['fieldlabel'] = str_replace('_', ' ',$dbField->name);
$field['displaytype'] = 1;
$field['uitype'] = 1;
$fieldDataType = $this->getFieldType($dbField,$tableName);
if($fieldDataType !== null){
$fieldType = $this->getTypeOfDataForType($fieldDataType);
}else{
$fieldType = $this->getTypeOfDataForType($dbField->type);
}
$typeOfData = null;
if(($dbField->not_null && !$dbField->primary_key) || $dbField->unique_key == 1){
$typeOfData = $fieldType.'~M';
}else{
$typeOfData = $fieldType.'~O';
}
$field['typeofdata'] = $typeOfData;
$field['tabid'] = null;
$field['fieldid'] = null;
$field['masseditable'] = 0;
$field['presence'] = '0';
return $field;
}
protected function getReferenceList($dbField, $tableName){
static $referenceList = array();
if(isset($referenceList[$dbField->name])){
return $referenceList[$dbField->name];
}
if(!isset(VtigerCRMActorMeta::$fieldTypeMapping[$tableName][$dbField->name])){
$this->getFieldType($dbField, $tableName);
}
$fieldTypeData = VtigerCRMActorMeta::$fieldTypeMapping[$tableName][$dbField->name];
if (empty(VtigerCRMActorMeta::$referenceTypeMapping)) {
$sql = "SELECT * FROM vtiger_ws_entity_referencetype";
$result = $this->pearDB->pquery($sql, array());
for ($index =0, $count = $this->pearDB->num_rows($result); $index < $count; ++$index) {
$row = $this->pearDB->query_result_rowdata($result, $index);
VtigerCRMActorMeta::$referenceTypeMapping[$row['fieldtypeid']][] = $row['type'];
}
}
$referenceTypes = array();
if (isset(VtigerCRMActorMeta::$referenceTypeMapping[$fieldTypeData['fieldtypeid']])) {
$referenceTypes = VtigerCRMActorMeta::$referenceTypeMapping[$fieldTypeData['fieldtypeid']];
}
// update private cache
$referenceList[$dbField->name] = $referenceTypes;
return $referenceTypes;
}
protected function getFieldType($dbField,$tableName){
if(isset(VtigerCRMActorMeta::$fieldTypeMapping[$tableName][$dbField->name])){
if(VtigerCRMActorMeta::$fieldTypeMapping[$tableName][$dbField->name] === 'null'){
return null;
}
$row = VtigerCRMActorMeta::$fieldTypeMapping[$tableName][$dbField->name];
return $row['fieldtype'];
}
if (empty(VtigerCRMActorMeta::$fieldTypeMapping)) {
// Optimization to avoid repeated initialization
$sql = "select * from vtiger_ws_entity_fieldtype";
$result = $this->pearDB->pquery($sql,array());
$rowCount = $this->pearDB->num_rows($result);
while ($rowCount) {
$row = $this->pearDB->query_result_rowdata($result,$rowCount-1);
VtigerCRMActorMeta::$fieldTypeMapping[$row['table_name']][$row['field_name']] = $row;
--$rowCount;
}
}
if (!isset(VtigerCRMActorMeta::$fieldTypeMapping[$tableName][$dbField->name])) {
VtigerCRMActorMeta::$fieldTypeMapping[$tableName][$dbField->name] = 'null';
return null;
}
return VtigerCRMActorMeta::$fieldTypeMapping[$tableName][$dbField->name]['fieldtype'];
}
protected function getTypeOfDataForType($type){
switch($type){
case 'email': return 'E';
case 'password': return 'P';
case 'date': return 'D';
case 'datetime': return 'DT';
case 'timestamp': return 'T';
case 'int':
case 'integer': return 'I';
case 'decimal':
case 'numeric': return 'N';
case 'varchar':
case 'text':
default: return 'V';
}
}
protected function getFieldDataTypeFromDBType($type){
switch($type){
case 'date': return 'date';
case 'datetime': return 'datetime';
case 'timestamp': return 'time';
case 'int':
case 'integer': return 'integer';
case 'real':
case 'decimal':
case 'numeric': return 'double';
case 'text': return 'text';
case 'varchar': return 'string';
default: return $type;
}
}
public function hasPermission($operation,$webserviceId){
if(is_admin($this->user)){
return true;
}else{
if(strcmp($operation,EntityMeta::$RETRIEVE)===0){
return true;
}
return false;
}
}
public function hasAssignPrivilege($ownerWebserviceId){
if(is_admin($this->user)){
return true;
}else{
$idComponents = vtws_getIdComponents($webserviceId);
$userId=$idComponents[1];
if($this->user->id === $userId){
return true;
}
return false;
}
}
public function hasDeleteAccess(){
if(is_admin($this->user)){
return true;
}else{
return false;
}
}
public function hasAccess(){
return true;
}
public function hasReadAccess(){
return true;
}
public function hasCreateAccess() {
if (is_admin($this->user)) {
return true;
} else {
return false;
}
}
public function hasWriteAccess(){
if(is_admin($this->user)){
return true;
}else{
return false;
}
}
public function getEntityName(){
return $this->webserviceObject->getEntityName();
}
public function getEntityId(){
return $this->webserviceObject->getEntityId();
}
function getObjectEntityName($webserviceId){
$idComponents = vtws_getIdComponents($webserviceId);
$id=$idComponents[1];
if($this->exists($id)){
return $this->webserviceObject->getEntityName();
}
return null;
}
function exists($recordId){
$exists = false;
$sql = 'select 1 from '.$this->baseTable.' where '.$this->getObectIndexColumn().'=?';
$result = $this->pearDB->pquery($sql , array($recordId));
if($result != null && isset($result)){
if($this->pearDB->num_rows($result)>0){
$exists = true;
}
}
return $exists;
}
public function getNameFields(){
$query = "select name_fields from vtiger_ws_entity_name where entity_id = ?";
$result = $this->pearDB->pquery($query, array($this->objectId));
$fieldNames = '';
if($result){
$rowCount = $this->pearDB->num_rows($result);
if($rowCount > 0){
$fieldNames = $this->pearDB->query_result($result,0,'name_fields');
}
}
return $fieldNames;
}
public function getName($webserviceId){
$idComponents = vtws_getIdComponents($webserviceId);
$entityId = $idComponents[0];
$id=$idComponents[1];
$nameList = vtws_getActorEntityNameById($entityId, array($id));
return $nameList[$id];
}
public function getEntityAccessControlQuery() {
return '';
}
public function getEntityDeletedQuery() {
if($this->getEntityName() == 'Currency'){
return 'vtiger_currency_info.deleted=0';
}
return '';
}
public function isModuleEntity() {
return false;
}
}
?>