templatefield.php

来自「SugarCRM5.1 开源PHP客户关系管理系统」· PHP 代码 · 共 439 行

PHP
439
字号
<?phpif(!defined('sugarEntry') || !sugarEntry) die('Not A Valid Entry Point');/********************************************************************************* * SugarCRM is a customer relationship management program developed by * SugarCRM, Inc. Copyright (C) 2004 - 2007 SugarCRM Inc. *  * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License version 3 as published by the * Free Software Foundation with the addition of the following permission added * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK * IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS. *  * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more * details. *  * You should have received a copy of the GNU General Public License along with * this program; if not, see http://www.gnu.org/licenses or write to the Free * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301 USA. *  * You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road, * SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com. *  * The interactive user interfaces in modified source and object code versions * of this program must display Appropriate Legal Notices, as required under * Section 5 of the GNU General Public License version 3. *  * In accordance with Section 7(b) of the GNU General Public License version 3, * these Appropriate Legal Notices must retain the display of the "Powered by * SugarCRM" logo. If the display of the logo is not reasonably feasible for * technical reasons, the Appropriate Legal Notices must display the words * "Powered by SugarCRM". ********************************************************************************/$GLOBALS['studioReadOnlyFields'] = array('date_entered'=>1, 'date_modified'=>1, 'created_by'=>1, 'id'=>1, 'modified_user_id'=>1);class TemplateField{	/*		The view is the context this field will be used in		-edit		-list		-detail		-search	*/	var $view = 'edit';	var $name = '';	var $vname = '';	var $id = '';	var $size = '20';	var $len = '255';	var $required = false;	var $default = null;	var $default_value = null;	var $type = 'varchar';	var $comment = '';	var $bean;	var $ext1 = '';	var $ext2 = '';	var $ext3 = '';	var $ext4 = '';	var $audited= 0;	var $massupdate = 0;    var $duplicate_merge=0;	var $new_field_definition;	var $reportable = false;	var $label_value = '';	var $help = '';		var $vardef_map = array(		'name'=>'name',		'label'=>'vname',		// bug 15801 - need to ALWAYS keep default and default_value consistent as some methods/classes use one, some use another...		'default_value'=>'default',		'default'=>'default_value',//		'default_value'=>'default_value',//		'default'=>'default_value',		'len'=>'len',		'required'=>'required',		'type'=>'type',		'audited'=>'audited',		'massupdate'=>'massupdate',		'options'=>'ext1',		'help'=>'help',	    'comments'=>'comment',		'duplicate_merge'=>'duplicate_merge',		//'duplicate_merge_dom_value'=>'duplicate_merge', //bug #14897		'reportable' => 'reportable',		'min'=>'ext1',		'max'=>'ext2',		'ext2'=>'ext2',		'ext4'=>'ext4',	    //'disable_num_format'=>'ext3',	    'ext3'=>'ext3',		'label_value'=>'label_value',	);	/*		HTML FUNCTIONS	*/	function get_html(){		$view = $this->view;		if(!empty($GLOBALS['studioReadOnlyFields'][$this->name]))$view = 'detail';		switch($view){			case 'search':return $this->get_html_search();			case 'edit': return $this->get_html_edit();			case 'list': return $this->get_html_list();			case 'detail': return $this->get_html_detail();						}			}	function set($values){		foreach($values as $name=>$value){			$this->$name = $value;			}			}		function get_html_edit(){		return 'not implemented';		}		function get_html_list(){		return $this->get_html_detail();		}		function get_html_detail(){		return 'not implemented';		}		function get_html_search(){		return $this->get_html_edit();		}	function get_html_label(){				$label =  "{MOD." .$this->vname . "}";			if(!empty($GLOBALS['app_strings'][$this->vname])){			$label = "{APP." .$this->label . "}";			}		if($this->view == 'edit' && $this->is_required()){			$label .= '<span class="required">*</span>';		}		if($this->view == 'list'){			if(isset($this->bean)){				if(!empty($this->id)){					$name = $this->bean->table_name . '_cstm.'. $this->name;					$arrow = $this->bean->table_name . '_cstm_'. $this->name;				}else{					$name = $this->bean->table_name . '.'. $this->name;					$arrow = $this->bean->table_name . '_'. $this->name;					}			}else{				$name = $this->name;					$arrow = $name;			}			$label = "<a href='{ORDER_BY}$name' class='listViewThLinkS1'>{MOD.$this->label}{arrow_start}{".$arrow."_arrow}{arrow_end}</a>";		}		return $label;				}		/*		XTPL FUNCTIONS	*/		function get_xtpl($bean = false){		if($bean)		$this->bean = $bean;		$view = $this->view;		if(!empty($GLOBALS['studioReadOnlyFields'][$this->name]))$view = 'detail';		switch($view){			case 'search':return $this->get_xtpl_search();			case 'edit': return $this->get_xtpl_edit();			case 'list': return $this->get_xtpl_list();			case 'detail': return $this->get_xtpl_detail();						}			}		function get_xtpl_edit(){		return '/*not implemented*/';		}		function get_xtpl_list(){		return get_xtpl_detail();		}		function get_xtpl_detail(){		return '/*not implemented*/';		}		function get_xtpl_search(){		//return get_xtpl_edit();		}		function is_required(){		if($this->required){			return true;		}		return false;				}				/*		DB FUNCTIONS	*/		function get_db_type(){		switch($GLOBALS['db']->dbType){			case 'oci8': return " varchar2($this->len)";			default: return " varchar($this->len)";			}	}		function get_db_default($modify=false){		$GLOBALS['log']->debug('get_db_default(): default_value='.$this->default_value);		if (!$modify or empty($this->new_field_definition['default_value']) or $this->new_field_definition['default_value'] != $this->default_value ) {			if(!is_null($this->default_value)){ // add a default value if it is not null - we want to set a default even if default_value is '0', which is not null, but which is empty()				return " DEFAULT '$this->default_value'";				}else{				return '';				}		}	}		/*	 * Return the required clause for this field	 * Confusingly, when modifying an existing field ($modify=true) there are two exactly opposite cases:	 * 1. if called by Studio, only $this->required is set. If set, we return "NOT NULL" otherwise we return "NULL"	 * 2. if not called by Studio, $this->required holds the OLD value of required, and new_field_definition['required'] is the NEW	 * So if not called by Studio we want to return NULL if required=true (because we are changing FROM this setting)	 */		function get_db_required($modify=false){//		$GLOBALS['log']->debug('get_db_required required='.$this->required." and ".(($modify)?"true":"false")." and ".print_r($this->new_field_definition,true));        $req = "";        		if ($modify) {        	if (!empty($this->new_field_definition['required'])) {        		if ($this->required and $this->new_field_definition['required'] != $this->required) {        			$req = " NULL ";        		}        	}        	else        	{        		$req = ($this->required) ? " NOT NULL " : " NULL "; // bug 17184 tyoung - set required correctly when modifying custom field in Studio        	}        }        else        {          	if (empty($this->new_field_definition['required']) or $this->new_field_definition['required'] != $this->required ) {        		if(!empty($this->required) && $this->required){        			$req = " NOT NULL";	        		}        	}        }		        return $req;	}	/*	function get_db_required($modify=false){		$GLOBALS['log']->debug('get_db_required required='.$this->required." and ".(($modify)?"true":"false")." and ".print_r($this->new_field_definition,true));        if ($modify) {        	if (!empty($this->new_field_definition['required'])) {        		if ($this->required and $this->new_field_definition['required'] != $this->required) {        			return " null ";        		}        		return "";        	}        }   		if (empty($this->new_field_definition['required']) or $this->new_field_definition['required'] != $this->required ) {			if(!empty($this->required) && $this->required){				return " NOT NULL";				}		}        return '';	}*/		/**	 * Oracle Support: do not set required constraint if no default value is supplied.	 * In this case the default value will be handled by the application/sugarbean.	 */	function get_db_add_alter_table($table){		$db_default=$this->get_db_default();        $db_required=$this->get_db_required();        if (!empty($db_required) and empty($db_default)) {            $db_required='';        }		$query="ALTER TABLE $table ADD $this->name " . $this->get_db_type();			if ($query) {			$query .= $db_default . $db_required;		} else { 			if (!empty($db_default)) {				$query .= $db_default;			}		}		return $query;	}	/**	 * mysql requires the datatype caluse in the alter statment.it will be no-op anyway.	 */		function get_db_modify_alter_table($table){		$db_default=$this->get_db_default(true);		$db_required=$this->get_db_required(true);        switch ($GLOBALS['db']->dbType) {        	            case "mssql":                $query="ALTER TABLE $table ALTER COLUMN $this->name "  .$this->get_db_type();                break;            case "mysql":                $query="ALTER TABLE $table MODIFY $this->name " .$this->get_db_type();                break;            default:                $query="ALTER TABLE $table MODIFY $this->name " .$this->get_db_type();;                break;        }		if (!empty($db_default) && !empty($db_required)) {			$query .= $db_default . $db_required ;		} else if (!empty($db_default)) {			$query .= $db_default;		}		return $query;	}		/*	 * BEAN FUNCTIONS	 * 	 */	function get_field_def(){		$array =  array(			'required'=>$this->required, 			'source'=>'custom_fields', 			'name'=>$this->name, 			'vname'=>$this->vname,			'type'=>$this->type,			'massupdate'=>$this->massupdate,			'default'=>$this->default,			'comments'=> (isset($this->comments)) ? $this->comments : '', 		    'help'=> (isset($this->help)) ?  $this->help : '',			'duplicate_merge'=>$this->duplicate_merge,			'duplicate_merge_dom_value'=>$this->duplicate_merge, //nsingh: bug #14897 The UI did not get updated according to $app_list_strings['custom_fields_merge_dup_dom'], so include an extra field for the dom and leave the original duplicate_merge logic intact.			'audited'=>($this->audited ? 1 : 0),			'reportable'=>($this->reportable ? 1 : 0),			);				if(!empty($this->len)){				$array['len'] = $this->len;			}			$this->get_dup_merge_def($array);			return $array;	}	        /* if the field is duplicate merge enabled this function will return the vardef entry for the same.     */        function get_dup_merge_def(&$def) {            switch ($this->duplicate_merge) {            case 0:                $def['duplicate_merge']='disabled';                break;            case 1:                   $def['duplicate_merge']='enabled';                break;             case 2:                $def['merge_filter']='enabled';                            break;            case 3:                $def['merge_filter']='selected';                            break;            case 4:                $def['merge_filter']='enabled';                            $def['duplicate_merge']='disabled';                            break;        }    }	    	/*		HELPER FUNCTIONS	*/			function prepare(){		if(empty($this->id)){			$this->id = $this->name;			}		}		/**	 * populateFromRow	 * This function supports setting the values of all TemplateField instances.       * @param $row The Array key/value pairs from fields_meta_data table	 */	function populateFromRow($row=array()) {		if(!is_array($row)) {		   $GLOBALS['log']->error("Error: TemplateField->populateFromRow expecting Array");		}	    foreach($row as	$key=>$value) {	       $this->$key = $value;		    }	}		function populateFromPost(){		foreach($this->vardef_map as $vardef=>$field){			if(!empty($_POST[$vardef])){				$this->$vardef = $_POST[$vardef];				if($vardef != $field){					$this->$field = $this->$vardef;				}			}		}//		$GLOBALS['log']->debug('populate: '.print_r($this,true));			}		function get_additional_defs(){		return array();	}		function delete($df){		$df->deleteField($this->name);	}		function save($df){//	    $GLOBALS['log']->debug('saving field: '.print_r($this,true));		$df->addFieldObject($this);		}	}?>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?