type = $type;
$this->ss = new Sugar_Smarty();
}
function fetch($path){
$additional = '';
if(!$this->hasButton && !empty($this->button)){
$additional .= 'button . '>';
}
if(!empty($this->buttons)){
foreach($this->buttons as $v){
$additional .= ' ';
}
}
if(!empty($this->image)){
$additional .= ' image . '>';
}
return $this->ss->fetch($path) . $additional;
}
function findTemplate($view){
static $tplCache = array();
if ( isset($tplCache[$this->type][$view]) ) {
return $tplCache[$this->type][$view];
}
$lastClass = get_class($this);
$classList = array($this->type,str_replace('SugarField','',$lastClass));
while ( $lastClass = get_parent_class($lastClass) ) {
$classList[] = str_replace('SugarField','',$lastClass);
}
$tplName = '';
foreach ( $classList as $className ) {
global $current_language;
if(isset($current_language)) {
$tplName = 'include/SugarFields/Fields/'. $className .'/'. $current_language . '.' . $view .'.tpl';
if ( file_exists('custom/'.$tplName) ) {
$tplName = 'custom/'.$tplName;
break;
}
if ( file_exists($tplName) ) {
break;
}
}
$tplName = 'include/SugarFields/Fields/'. $className .'/'. $view .'.tpl';
if ( file_exists('custom/'.$tplName) ) {
$tplName = 'custom/'.$tplName;
break;
}
if ( file_exists($tplName) ) {
break;
}
}
$tplCache[$this->type][$view] = $tplName;
return $tplName;
}
public function formatField($rawField, $vardef){
// The base field doesn't do any formatting, so override it in subclasses for more specific actions
return $rawField;
}
public function unformatField($formattedField, $vardef){
// The base field doesn't do any formatting, so override it in subclasses for more specific actions
return $formattedField;
}
function getSmartyView($parentFieldArray, $vardef, $displayParams, $tabindex = -1, $view){
$this->setup($parentFieldArray, $vardef, $displayParams, $tabindex);
return $this->fetch($this->findTemplate($view));
}
function getListViewSmarty($parentFieldArray, $vardef, $displayParams, $col) {
// FIXME: Rework the listview to use two-pass rendering like the DetailView
$tabindex = 1;
$isArray = is_array($parentFieldArray);
$fieldName = $vardef['name'];
if ( $isArray ) {
$fieldNameUpper = strtoupper($fieldName);
if ( isset($parentFieldArray[$fieldNameUpper])) {
$parentFieldArray[$fieldName] = $this->formatField($parentFieldArray[$fieldNameUpper],$vardef);
} else {
$parentFieldArray[$fieldName] = '';
}
} else {
if ( isset($parentFieldArray->$fieldName) ) {
$parentFieldArray->$fieldName = $this->formatField($parentFieldArray->$fieldName,$vardef);
} else {
$parentFieldArray->$fieldName = '';
}
}
$this->setup($parentFieldArray, $vardef, $displayParams, $tabindex, false);
$this->ss->left_delimiter = '{';
$this->ss->right_delimiter = '}';
$this->ss->assign('col',$vardef['name']);
return $this->fetch($this->findTemplate('ListView'));
}
/**
* Returns a smarty template for the DetailViews
*
* @param parentFieldArray string name of the variable in the parent template for the bean's data
* @param vardef vardef field defintion
* @param displayParam parameters for display
* available paramters are:
* * labelSpan - column span for the label
* * fieldSpan - column span for the field
*/
function getDetailViewSmarty($parentFieldArray, $vardef, $displayParams, $tabindex) {
return $this->getSmartyView($parentFieldArray, $vardef, $displayParams, $tabindex, 'DetailView');
}
// 99% of all fields will just format like a listview, but just in case, it's here to override
function getChangeLogSmarty($parentFieldArray, $vardef, $displayParams, $tabindex) {
return $this->formatField($parentFieldArray[$vardef['name']],$vardef);
}
function getEditViewSmarty($parentFieldArray, $vardef, $displayParams, $tabindex) {
if(!empty($vardef['function']['returns']) && $vardef['function']['returns'] == 'html'){
$type = $this->type;
$this->type = 'Base';
$result= $this->getDetailViewSmarty($parentFieldArray, $vardef, $displayParams, $tabindex);
$this->type = $type;
return $result;
}
return $this->getSmartyView($parentFieldArray, $vardef, $displayParams, $tabindex, 'EditView');
}
function getImportViewSmarty($parentFieldArray, $vardef, $displayParams, $tabindex)
{
return $this->getEditViewSmarty($parentFieldArray, $vardef, $displayParams, $tabindex);
}
function getSearchViewSmarty($parentFieldArray, $vardef, $displayParams, $tabindex) {
if(!empty($vardef['auto_increment']))$vardef['len']=255;
return $this->getSmartyView($parentFieldArray, $vardef, $displayParams, $tabindex, 'EditView');
}
function getPopupViewSmarty($parentFieldArray, $vardef, $displayParams, $tabindex){
if (is_array($displayParams) && !isset($displayParams['formName']))
$displayParams['formName'] = 'popup_query_form';
else if (empty($displayParams))
$displayParams = array('formName' => 'popup_query_form');
return $this->getSearchViewSmarty($parentFieldArray, $vardef, $displayParams, $tabindex);
}
public function getEmailTemplateValue($inputField, $vardef, $context = null){
// This does not return a smarty section, instead it returns a direct value
return $this->formatField($inputField,$vardef);
}
function displayFromFunc( $displayType, $parentFieldArray, $vardef, $displayParams, $tabindex = 0 ) {
if ( ! is_array($vardef['function']) ) {
$funcName = $vardef['function'];
$includeFile = '';
$onListView = false;
$returnsHtml = false;
} else {
$funcName = $vardef['function']['name'];
$includeFile = '';
if ( isset($vardef['function']['include']) ) {
$includeFile = $vardef['function']['include'];
}
if ( isset($vardef['function']['onListView']) && $vardef['function']['onListView'] == true ) {
$onListView = true;
} else {
$onListView = false;
}
if ( isset($vardef['function']['returns']) && $vardef['function']['returns'] == 'html' ) {
$returnsHtml = true;
} else {
$returnsHtml = false;
}
}
if ( $displayType == 'ListView'
|| $displayType == 'popupView'
|| $displayType == 'searchView'
|| $displayType == 'wirelessEditView'
|| $displayType == 'wirelessDetailView'
|| $displayType == 'wirelessListView'
) {
// Traditionally, before 6.0, additional functions were never called, so this code doesn't get called unless the vardef forces it
if ( $onListView ) {
if ( !empty($includeFile) ) {
require_once($includeFile);
}
return $funcName($parentFieldArray, $vardef['name'], $parentFieldArray[$vardef['name']], $displayType);
} else {
$displayTypeFunc = 'get'.$displayType.'Smarty';
return $this->$displayTypeFunc($parentFieldArray, $vardef, $displayParams, $tabindex);
}
} else {
if ( !empty($displayParams['idName']) ) {
$fieldName = $displayParams['idName'];
} else {
$fieldName = $vardef['name'];
}
if ( $returnsHtml ) {
$this->setup($parentFieldArray, $vardef, $displayParams, $tabindex);
$tpl = $this->findTemplate($displayType.'Function');
if ( $tpl == '' ) {
// Can't find a function template, just use the base
$tpl = $this->findTemplate('DetailViewFunction');
}
return "" . $this->fetch($tpl) . '';
} else {
return '{sugar_run_helper include="'.$includeFile.'" func="'.$funcName.'" bean=$bean field="'.$fieldName.'" value=$fields.'.$fieldName.'.value displayType="'.$displayType.'"}';
}
}
}
function getEditView() {
}
function getSearchInput() {
}
function getQueryLike() {
}
function getQueryIn() {
}
/**
* Setup function to assign values to the smarty template, should be called before every display function
*/
function setup($parentFieldArray, $vardef, $displayParams, $tabindex, $twopass=true) {
$this->button = '';
$this->buttons = '';
$this->image = '';
if ($twopass){
$this->ss->left_delimiter = '{{';
$this->ss->right_delimiter = '}}';
}
$this->ss->assign('parentFieldArray', $parentFieldArray);
$this->ss->assign('vardef', $vardef);
$this->ss->assign('tabindex', $tabindex);
//for adding attributes to the field
if(!empty($displayParams['field'])){
$plusField = '';
foreach($displayParams['field'] as $key=>$value){
$plusField .= ' ' . $key . '="' . $value . '"';//bug 27381
}
$displayParams['field'] = $plusField;
}
//for adding attributes to the button
if(!empty($displayParams['button'])){
$plusField = '';
foreach($displayParams['button'] as $key=>$value){
$plusField .= ' ' . $key . '="' . $value . '"';
}
$displayParams['button'] = $plusField;
$this->button = $displayParams['button'];
}
if(!empty($displayParams['buttons'])){
$plusField = '';
foreach($displayParams['buttons'] as $keys=>$values){
foreach($values as $key=>$value){
$plusField[$keys] .= ' ' . $key . '="' . $value . '"';
}
}
$displayParams['buttons'] = $plusField;
$this->buttons = $displayParams['buttons'];
}
if(!empty($displayParams['image'])){
$plusField = '';
foreach($displayParams['image'] as $key=>$value){
$plusField .= ' ' . $key . '="' . $value . '"';
}
$displayParams['image'] = $plusField;
$this->image = $displayParams['image'];
}
$this->ss->assign('displayParams', $displayParams);
}
/**
* This should be called when the bean is saved. The bean itself will be passed by reference
* @param SugarBean bean - the bean performing the save
* @param array params - an array of paramester relevant to the save, most likely will be $_REQUEST
*/
public function save($bean, $params, $field, $properties, $prefix = ''){
if ( isset($params[$prefix.$field]) ) {
if(isset($properties['len']) && isset($properties['type']) && 'varchar' == $properties['type']){
$bean->$field = trim($this->unformatField($params[$prefix.$field],$properties));
}
else {
$bean->$field = $this->unformatField($params[$prefix.$field],$properties);
}
}
}
/**
* Handles import field sanitizing for an field type
*
* @param $value string value to be sanitized
* @param $vardefs array
* @param $focus SugarBean object
* @param $settings ImportFieldSanitize object
* @return string sanitized value or boolean false if there's a problem with the value
*/
public function importSanitize(
$value,
$vardef,
$focus,
ImportFieldSanitize $settings
)
{
if( isset($vardef['len']) ) {
// check for field length
$value = sugar_substr($value, $vardef['len']);
}
return $value;
}
/**
* isRangeSearchView
* This method helps determine whether or not to display the range search view code for the sugar field
* @param array $vardef entry representing the sugar field's definition
* @return boolean true if range search view should be displayed, false otherwise
*/
protected function isRangeSearchView($vardef)
{
return !empty($vardef['enable_range_search']) && !empty($_REQUEST['action']) && $_REQUEST['action']!='Popup';
}
}