晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
|
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/vtlib/Vtiger/ |
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.
* ********************************************************************************** */
/**
* Provides basic API to work with vtiger CRM Fields
* @package vtlib
*/
class Vtiger_FieldBasic {
/** ID of this field instance */
var $id;
var $name;
var $label = false;
var $table = false;
var $column = false;
var $columntype = false;
var $helpinfo = '';
var $summaryfield = 0;
var $masseditable = 1; // Default: Enable massedit for field
var $uitype = 1;
var $typeofdata = 'V~O';
var $displaytype = 1;
var $generatedtype = 1;
var $readonly = 1;
var $presence = 2;
var $defaultvalue = '';
var $maximumlength = 100;
var $sequence = false;
var $quickcreate = 1;
var $quicksequence = false;
var $info_type = 'BAS';
var $isunique = false;
var $block;
/**
* Constructor
*/
function __construct() {
}
/**
* Initialize this instance
* @param Array
* @param Vtiger_Module Instance of module to which this field belongs
* @param Vtiger_Block Instance of block to which this field belongs
* @access private
*/
function initialize($valuemap, $moduleInstance=false, $blockInstance=false) {
$this->id = $valuemap['fieldid'];
$this->name = $valuemap['fieldname'];
$this->label= $valuemap['fieldlabel'];
$this->column = $valuemap['columnname'];
$this->table = $valuemap['tablename'];
$this->uitype = $valuemap['uitype'];
$this->typeofdata = $valuemap['typeofdata'];
$this->helpinfo = $valuemap['helpinfo'];
$this->masseditable = $valuemap['masseditable'];
$this->displaytype = $valuemap['displaytype'];
$this->generatedtype = $valuemap['generatedtype'];
$this->readonly = $valuemap['readonly'];
$this->presence = $valuemap['presence'];
$this->defaultvalue = $valuemap['defaultvalue'];
$this->quickcreate = $valuemap['quickcreate'];
$this->sequence = $valuemap['sequence'];
$this->summaryfield = $valuemap['summaryfield'];
$this->isunique = $valuemap['isunique'];
$this->block= $blockInstance? $blockInstance : Vtiger_Block::getInstance($valuemap['block'], $moduleInstance);
$this->headerfield = $valuemap['headerfield'];
}
/** Cache (Record) the schema changes to improve performance */
static $__cacheSchemaChanges = Array();
/**
* Initialize vtiger schema changes.
* @access private
*/
function __handleVtigerCoreSchemaChanges() {
// Add helpinfo column to the vtiger_field table
if (empty(self::$__cacheSchemaChanges['vtiger_field.helpinfo'])) {
Vtiger_Utils::AddColumn('vtiger_field', 'helpinfo', ' TEXT');
self::$__cacheSchemaChanges['vtiger_field.helpinfo'] = true;
}
if (empty(self::$__cacheSchemaChanges['vtiger_field.summaryfield'])) {
Vtiger_Utils::AddColumn('vtiger_field', 'summaryfield', ' INT(10) NOT NULL DEFAULT 0');
self::$__cacheSchemaChanges['vtiger_field.summaryfield'] = 0;
}
if (empty(self::$__cacheSchemaChanges['vtiger_field.headerfield'])) {
Vtiger_Utils::AddColumn('vtiger_field', 'headerfield', ' INT(1) DEFAULT 0');
self::$__cacheSchemaChanges['vtiger_field.headerfield'] = 0;
}
}
/**
* Get unique id for this instance
* @access private
*/
function __getUniqueId() {
global $adb;
return $adb->getUniqueID('vtiger_field');
}
/**
* Get next sequence id to use within a block for this instance
* @access private
*/
function __getNextSequence() {
global $adb;
$result = $adb->pquery("SELECT MAX(sequence) AS max_seq FROM vtiger_field WHERE tabid=? AND block=?", Array($this->getModuleId(), $this->getBlockId()));
$maxseq = 0;
if ($result && $adb->num_rows($result)) {
$maxseq = $adb->query_result($result, 0, 'max_seq');
$maxseq += 1;
}
return $maxseq;
}
/**
* Get next quick create sequence id for this instance
* @access private
*/
function __getNextQuickCreateSequence() {
global $adb;
$result = $adb->pquery("SELECT MAX(quickcreatesequence) AS max_quickcreateseq FROM vtiger_field WHERE tabid=?", Array($this->getModuleId()));
$max_quickcreateseq = 0;
if ($result && $adb->num_rows($result)) {
$max_quickcreateseq = $adb->query_result($result, 0, 'max_quickcreateseq');
$max_quickcreateseq += 1;
}
return $max_quickcreateseq;
}
/**
* Create this field instance
* @param Vtiger_Block Instance of the block to use
* @access private
*/
function __create($blockInstance) {
$this->__handleVtigerCoreSchemaChanges();
global $adb;
$this->block = $blockInstance;
$moduleInstance = $this->getModuleInstance();
$this->id = $this->__getUniqueId();
if (!$this->sequence) {
$this->sequence = $this->__getNextSequence();
}
if ($this->quickcreate != 1) { // If enabled for display
if (!$this->quicksequence) {
$this->quicksequence = $this->__getNextQuickCreateSequence();
}
} else {
$this->quicksequence = null;
}
// Initialize other variables which are not done
if (!$this->table)
$this->table = $moduleInstance->basetable;
if (!$this->column) {
$this->column = strtolower($this->name);
}
if (!$this->columntype)
$this->columntype = 'VARCHAR(100)';
if (!$this->label)
$this->label = $this->name;
if (!empty($this->columntype)) {
Vtiger_Utils::AddColumn($this->table, $this->column, $this->columntype);
}
if (!$this->label) {
$this->label = $this->name;
}
$adb->pquery("INSERT INTO vtiger_field (tabid, fieldid, columnname, tablename, generatedtype,
uitype, fieldname, fieldlabel, readonly, presence, defaultvalue, maximumlength, sequence,
block, displaytype, typeofdata, quickcreate, quickcreatesequence, info_type, helpinfo,summaryfield,headerfield)
VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", Array($this->getModuleId(), $this->id, $this->column, $this->table, intval($this->generatedtype),
$this->uitype, $this->name, $this->label, $this->readonly, $this->presence, $this->defaultvalue,
$this->maximumlength, $this->sequence, $this->getBlockId(), $this->displaytype, $this->typeofdata,
intval($this->quickcreate), intval($this->quicksequence), $this->info_type, $this->helpinfo, intval($this->summaryfield), $this->headerfield));
// Set the field status for mass-edit (if set)
$adb->pquery('UPDATE vtiger_field SET masseditable=? WHERE fieldid=?', Array($this->masseditable, $this->id));
Vtiger_Profile::initForField($this);
self::log("Creating Field $this->name ... DONE");
self::log("Module language mapping for $this->label ... CHECK");
}
/**
* Update this field instance
* @access private
* @internal TODO
*/
function __update() {
self::log("Updating Field $this->name ... DONE");
}
/**
* Delete this field instance
* @access private
*/
function __delete() {
global $adb;
Vtiger_Profile::deleteForField($this);
//TODO : should we check if the field is realtion field or not
$this->getModuleInstance()->unsetRelatedListForField($this->id);
$adb->pquery("DELETE FROM vtiger_field WHERE fieldid=?", Array($this->id));
$em = new VTEventsManager($adb);
$em->triggerEvent('vtiger.field.afterdelete', $this);
self::log("Deleteing Field $this->name ... DONE");
}
/**
* Get block id to which this field instance is associated
*/
function getBlockId() {
return $this->block->id;
}
/**
* Get module id to which this field instance is associated
*/
function getModuleId() {
return $this->block->module->id;
}
/**
* Get module name to which this field instance is associated
*/
function getModuleName() {
return $this->block->module->name;
}
/**
* Get module instance to which this field instance is associated
*/
function getModuleInstance() {
return $this->block->module;
}
/**
* Save this field instance
* @param Vtiger_Block Instance of block to which this field should be added.
*/
function save($blockInstance = false) {
if ($this->id)
$this->__update();
else
$this->__create($blockInstance);
// Clearing cache
Vtiger_Cache::flushModuleandBlockFieldsCache($this->getModuleInstance(), $this->getBlockId());
return $this->id;
}
/**
* Delete this field instance
*/
function delete() {
$this->__delete();
// Clearing cache
Vtiger_Cache::flushModuleandBlockFieldsCache($this->getModuleInstance(), $this->getBlockId());
}
/**
* Set Help Information for this instance.
* @param String Help text (content)
*/
function setHelpInfo($helptext) {
// Make sure to initialize the core tables first
$this->__handleVtigerCoreSchemaChanges();
global $adb;
$adb->pquery('UPDATE vtiger_field SET helpinfo=? WHERE fieldid=?', Array($helptext, $this->id));
self::log("Updated help information of $this->name ... DONE");
}
/**
* Set Masseditable information for this instance.
* @param Integer Masseditable value
*/
function setMassEditable($value) {
global $adb;
$adb->pquery('UPDATE vtiger_field SET masseditable=? WHERE fieldid=?', Array($value, $this->id));
self::log("Updated masseditable information of $this->name ... DONE");
}
/**
* Set Summaryfield information for this instance.
* @param Integer Summaryfield value
*/
function setSummaryField($value) {
global $adb;
$adb->pquery('UPDATE vtiger_field SET summaryfield=? WHERE fieldid=?', Array($value, $this->id));
self::log("Updated summaryfield information of $this->name ... DONE");
}
/**
* Helper function to log messages
* @param String Message to log
* @param Boolean true appends linebreak, false to avoid it
* @access private
*/
static function log($message, $delim = true) {
Vtiger_Utils::Log($message, $delim);
}
}
?>