function smarty_block_view_section($params, $content, &$smarty, $repeat) { if (!empty($content)) { $attrs = array(); $attrs['class'][] = 'heading'; if (isset($params['class'])) { $attrs['class'][] = $params['class']; } if (isset($params['dont_prettify'])) { $heading = $params['heading']; } else { $heading = prettify($params['heading']); } if ($heading === 'EGS_HIDDEN_SECTION') { return ''; } // convert attrs array to a string if (isset($params['expand'])) { $attrs['class'][] = 'expand'; $attrs['class'][] = $params['expand']; $data['expand'] = $params['expand'] == 'closed' ? 'hidden' : ''; } $data['attrs'] = build_attribute_string($attrs); $data['heading'] = $heading; $data['content'] = $content; // fetch smarty plugin template return smarty_plugin_template($smarty, $data, 'block.view_section'); } }
function smarty_block_showhidediv_body($params, $content, &$smarty) { // Smarty Plug In to display collapsible structure // // Parameters - // id - id to uniquely identify the div to collapse/expand // hide - false(default) shows structure expanded // Opening Tag if (empty($content)) { return; } $data = array('content' => $content, 'ul' => array('attrs' => array())); if (isset($params['hide']) && $params['hide']) { $data['div']['attrs']['style'][] = 'display:none;'; } if (isset($params['class_name'])) { $data['ul']['attrs']['class'][] = $params['class_name']; $data['div']['attrs']['class'][] = $params['class_name']; } $data['div']['attrs']['id'] = $params['id']; // convert attrs array to a string $data['ul']['attrs'] = build_attribute_string($data['ul']['attrs']); $data['div']['attrs'] = build_attribute_string($data['div']['attrs']); // fetch smarty plugin template return smarty_plugin_template($smarty, $data, 'block.showhidediv_body'); }
function smarty_block_grid_row($params, $content, &$smarty, $repeat) { $data_attr = build_data_attributes($params); // build the attribute string based on the attribute array $attr_string = build_attribute_string($data_attr); if (!empty($content)) { return '<tr ' . $attr_string . '>' . $content . '</tr>' . "\n"; } else { $model = $params['model']; $smarty->assign('gridrow_id', $model->{$model->idField}); } }
function smarty_block_heading_cell($params, $content, &$smarty, $repeat) { if (!empty($content)) { // why isn't this being done way sooner?! if (substr($params['field'], -2) == 'id') { return ''; } // attribute variables $attrs = array(); // merge data attributes with attributes array $attrs = array_merge($attrs, build_data_attributes($params)); if ($smarty->getTemplateVars('no_ordering') !== TRUE) { $link = $smarty->getTemplateVars('self'); $link['value'] = prettify($content); $action = $smarty->getTemplateVars('action'); if (empty($action)) { $action = 'index'; } $link['action'] = $action; if (isset($params['field'])) { $link['orderby'] = $params['field']; $attrs['data-column'] = $params['field']; } $content = link_to($link, $data = true); // WTF } else { $content = prettify($content); } $model = $params['model']; if ($model && $model->getField($params['field'])->type == 'numeric' || $params['field'] == 'right') { $attrs['class'][] = 'right'; } if (isset($params['class'])) { $attrs['class'][] = $params['class']; } // build the attribute string based on the attribute array $attrs = build_attribute_string($attrs); // return the built string return '<th ' . $attrs . '>' . $content . '</th>' . "\n"; } }
function smarty_block_data_table($params, $content, &$smarty, $repeat) { if (!empty($content)) { // set initial vars $data = array('content' => $content, 'attrs' => array()); // set id $data['attrs']['id'] = 'datagrid1'; // set classes $data['attrs']['class'][] = 'datagrid'; if (isset($params['class'])) { $data['attrs']['class'][] = $params['class']; } /* * Generate and output final HTML ***********************************************************/ // convert attrs array to a string $data['attrs'] = build_attribute_string($data['attrs']); // fetch smarty plugin template return smarty_plugin_template($smarty, $data, 'block.data_table'); } }
function smarty_block_showhidediv($params, $content, &$smarty) { // Smarty Plug In to display collapsible structure // // Parameters - // images - array of images to indicate closed/open focus/nofocus notexpandable // id - id to uniquely identify the div to collapse/expand // name - Title of the controlling div // class_name - css class_name for formatting the structure // hide - false(default) shows structure expanded // opening Tag if (empty($content)) { return; } $data = array('content' => $content, 'div' => array('attrs' => array()), 'img' => array('attrs' => array())); // Closing tag so wrap content within if (isset($params['images'])) { $images = $params['images']; } else { $images = array('open_nofocus' => THEME_URL . THEME . '/graphics/menu_open_nofocus.png', 'open_focus' => THEME_URL . THEME . '/graphics/menu_open_focus.png', 'closed_nofocus' => THEME_URL . THEME . '/graphics/menu_closed_nofocus.png', 'closed_focus' => THEME_URL . THEME . '/graphics/menu_closed_focus.png', 'noexpand' => THEME_URL . THEME . '/graphics/menu_noexpand.png'); } if (isset($params['hide']) && $params['hide']) { $data['image']['attrs']['src'] = $images['closed_nofocus']; $data['image']['attrs']['class'][] = 'eglet_closed'; } else { $data['image']['attrs']['src'] = $images['open_nofocus']; $data['image']['attrs']['class'][] = 'eglet_opened'; } if (isset($params['class_name'])) { $data['div']['attrs']['class'][] = $params['class_name']; } $data['image']['attrs']['id'] = 'image_' . $params['id']; // convert attrs array to a string $data['image']['attrs'] = build_attribute_string($data['image']['attrs']); $data['div']['attrs'] = build_attribute_string($data['div']['attrs']); // fetch smarty plugin template return smarty_plugin_template($smarty, $data, 'block.showhidediv'); }
function smarty_function_datetime($params, &$smarty) { $with =& $smarty->getTemplateVars('with'); $data['display_tags'] = FALSE; $data['display_tags'] = !isset($params['notags']); $data['label']['value'] = prettify(isset($params['attribute']) ? $params['attribute'] : ''); if (!empty($params['model'])) { $model =& $params['model']; } else { $model = $with['model']; } if (!empty($params['readonly']) && $params['readonly']) { $data['date']['attrs']['readonly'] = $params['readonly']; $data['hour']['attrs']['readonly'] = $params['readonly']; $data['minute']['attrs']['readonly'] = $params['readonly']; $data['date']['additional_class'] = ''; } else { $data['date']['additional_class'] = 'datefield'; } $controller_data =& $smarty->getTemplateVars('controller_data'); # $html = <<<EOT #<input type="text" name="%s" id="%s" class="icon date slim datefield%s" value="%s"/> #<input type="text" name="%s" id="%s" class="timefield" value="%s" />:<input type="text" name="%s" id="%s" class="timefield" value="%s" /> #EOT; $basename = $params['attribute']; $model_name = get_class($model); $field = $model->getField($basename); $data['date']['attrs']['type'] = 'text'; $data['hour']['attrs']['type'] = 'text'; $data['minute']['attrs']['type'] = 'text'; $data['date']['attrs']['name'] = $model_name . '[' . $basename . ']'; $data['hour']['attrs']['name'] = $model_name . '[' . $basename . '_hours]'; $data['minute']['attrs']['name'] = $model_name . '[' . $basename . '_minutes]'; $data['date']['attrs']['id'] = strtolower($model_name . '_' . $basename); $data['hour']['attrs']['id'] = strtolower($model_name . '_' . $basename . '_hours'); $data['minute']['attrs']['id'] = strtolower($model_name . '_' . $basename . '_minutes'); $data['label']['for'] = $data['date']['attrs']['id']; $hidden = FALSE; require_once __DIR__ . '/function.sessionvalue.php'; $start_date = smarty_function_sessionvalue($params, $model_name, $basename); $start_date_hour = smarty_function_sessionvalue($params, $model_name, $basename . '_hours'); $start_date_minute = smarty_function_sessionvalue($params, $model_name, $basename . '_minutes'); if (!empty($start_date)) { $value = $start_date; $value .= ' ' . (empty($start_date_hour) ? '00' : $start_date_hour); $value .= ':' . (empty($start_date_minute) ? '00' : $start_date_minute); } if (isset($controller_data[$basename])) { $hidden = TRUE; $value = $controller_data[$basename]; } elseif (empty($value)) { $value = $field->value; if (empty($value) && !empty($params['value'])) { $value = $params['value']; } if (empty($value) && $field->has_default == 1) { $value = date(DATE_TIME_FORMAT, $field->default_value); } $data['label']['value'] = $field->tag; if ($field->not_null == 1) { $data['label']['value'] .= '*'; $data['date']['additional_class'] .= ' required'; } } $data['label']['value'] = isset($params['label']) ? $params['label'] : $data['label']['value']; if (!empty($value)) { $format = format_for_strptime(DATE_TIME_FORMAT); if (strptime($value, $format) !== FALSE) { $date_value = array_shift(explode(' ', $value)); $hour_value = array_shift(explode(':', array_pop(explode(' ', $value)))); $minute_value = array_pop(explode(':', array_pop(explode(' ', $value)))); } else { list($date_value, $rest) = explode(' ', $value, 2); $date_value = date(DATE_FORMAT, strtotime($date_value)); list($hour_value, $minute_value) = explode(':', $rest); } $data['date']['attrs']['value'] = $date_value; $data['hour']['attrs']['value'] = $hour_value; $data['minute']['attrs']['value'] = $minute_value; } if ($hidden) { $data['date']['attrs']['type'] = 'hidden'; $data['hour']['attrs']['type'] = 'hidden'; $data['minute']['attrs']['type'] = 'hidden'; } foreach (array('date', 'hour', 'minute') as $type) { $data[$type]['attrs'] = build_attribute_string($data[$type]['attrs']); } return smarty_plugin_template($smarty, $data, 'function.datetime'); }
public function generateTemplate() { $html = ''; $data = array(); $data['attrs']['name'] = '__moduleName'; $data['attrs']['id'] = '__moduleName_id'; $data['attrs']['type'] = 'hidden'; $data['attrs']['value'] = $this->moduleName; $data['attrs'] = build_attribute_string($data['attrs']); $data['label']['attrs'] = build_attribute_string($data['label']['attrs']); $this->view->set('function_input', $data); $html .= $this->view->fetch('smarty/function.input'); $fields = array_merge($this->preferences, $this->additionalFields, $this->handledPreferences); usort($fields, array('ModulePreferences', 'sortOnPosition')); foreach ($fields as $preference) { switch ($preference['type']) { case 'select_multiple': $data = array(); $data['select']['attrs']['name'] = $preference['name'] . '[]'; $data['select']['attrs']['multiple'] = 'multiple'; $data['select']['attrs']['id'] = $preference['name'] . '_id'; $data['dt']['attrs']['class'] = 'for_multiple'; $data['dd']['attrs']['class'] = 'for_multiple'; if (isset($preference['display_name'])) { $data['select']['label'] = $preference['display_name']; } else { $data['select']['label'] = $preference['name']; } $data['select']['label'] = $preference['display_name']; $data['select']['id'] = $preference['name']; if (isset($preference['value'])) { $selected = $preference['value']; } else { $selected = ''; } foreach ($preference['data'] as $index => $option) { $option_attrs = array(); $key = $option['value']; $option_attrs['value'] = h($key, ENT_COMPAT); if (isset($option['selected']) && $option['selected']) { $option_attrs['selected'] = 'selected'; } $data['select']['options'][$index]['attrs'] = build_attribute_string($option_attrs); $data['select']['options'][$index]['value'] = h($option['label']); } $data['display_tags'] = TRUE; $data['select']['attrs'] = build_attribute_string($data['select']['attrs']); $data['dt']['attrs'] = build_attribute_string($data['dt']['attrs']); $data['dd']['attrs'] = build_attribute_string($data['dd']['attrs']); $this->view->set('function_select', $data); $html .= $this->view->fetch('smarty/function.select'); break; case 'select': $data = array(); $data['select']['attrs']['name'] = $preference['name']; $data['select']['attrs']['id'] = $preference['name'] . '_id'; if (isset($preference['display_name'])) { $data['select']['label'] = $preference['display_name']; } else { $data['select']['label'] = $preference['name']; } $data['select']['id'] = $preference['name']; if (isset($preference['value'])) { $selected = $preference['value']; } else { $selected = ''; } foreach ($preference['data'] as $index => $option) { $option_attrs = array(); $key = $option['value']; $option_attrs['value'] = h($key, ENT_COMPAT); if (is_array($selected) && in_array($key, $selected) || $selected == $key) { $option_attrs['selected'] = 'selected'; } $data['select']['options'][$index]['attrs'] = build_attribute_string($option_attrs); $data['select']['options'][$index]['value'] = h($option['label']); } $data['display_tags'] = TRUE; $data['select']['attrs'] = build_attribute_string($data['select']['attrs']); $this->view->set('function_select', $data); $html .= $this->view->fetch('smarty/function.select'); break; case 'checkbox': $data = array(); $data['attrs']['name'] = $preference['name']; $data['attrs']['id'] = $preference['name'] . '_id'; $data['label']['attrs']['for'] = $preference['name']; if (isset($preference['display_name'])) { $data['label']['value'] = $preference['display_name']; } if (isset($preference['status']) && $preference['status'] == 'on') { $data['attrs']['checked'] = 'checked'; } $data['attrs']['type'] = 'checkbox'; $data['attrs']['class'] = 'checkbox'; $data['display_tags'] = TRUE; $data['display_label'] = TRUE; $data['attrs'] = build_attribute_string($data['attrs']); $data['label']['attrs'] = build_attribute_string($data['label']['attrs']); $this->view->set('function_input', $data); $html .= $this->view->fetch('smarty/function.input'); break; case 'numeric': case 'password': case 'text': $data = array(); $data['attrs']['name'] = $preference['name']; $data['attrs']['id'] = $preference['name'] . '_id'; $data['label']['attrs']['for'] = $preference['name']; if (isset($preference['display_name'])) { $data['label']['value'] = $preference['display_name']; } if (isset($preference['value'])) { $data['attrs']['value'] = $preference['value']; } $data['attrs']['type'] = $preference['type'] == 'password' ? 'password' : 'text'; $data['attrs']['class'] = $preference['type'] == 'numeric' ? ' class="numeric"' : ''; $data['display_tags'] = TRUE; $data['display_label'] = TRUE; $data['attrs'] = build_attribute_string($data['attrs']); $data['label']['attrs'] = build_attribute_string($data['label']['attrs']); $this->view->set('function_input', $data); $html .= $this->view->fetch('smarty/function.input'); } } return $html; }
function smarty_function_interval($params, &$smarty) { $with =& $smarty->getTemplateVars('with'); $data = array('class' => array()); if (!empty($params['model'])) { $model =& $params['model']; } else { $model = $with['model']; } if (!empty($params['readonly']) && $params['readonly']) { $data['attrs']['readonly'] = $params['readonly']; } $controller_data =& $smarty->getTemplateVars('controller_data'); $modelname = get_class($model); $basename = $params['attribute']; $unitname = $basename . '_unit'; $name = $modelname . '[' . $basename . ']'; $field = $model->getField($basename); if (isset($params['postfix'])) { $name .= $params['postfix']; } $data['select_name'] = $modelname . '[' . $unitname . ']'; if (isset($params['postfix'])) { $data['select_name'] .= $params['postfix']; } $data['attrs']['id'] = strtolower($modelname) . '_' . $basename; $data['attrs']['name'] = $name; $data['label']['attrs']['for'] = strtolower($modelname) . '_' . $basename; $data['label']['value'] = $field->tag; $data['hidden'] = FALSE; $data['hours_selected'] = ''; $data['days_selected'] = ''; if (isset($params['value'])) { $data['attrs']['value'] = $params['value']; } elseif (isset($controller_data[$basename])) { $data['attrs']['value'] = $controller_data[$basename]; $data['hidden'] = TRUE; } elseif (isset($_POST[$modelname][$basename])) { $data['attrs']['value'] = $_POST[$modelname][$basename]; } elseif (!empty($params['group']) && isset($_POST[$params['group']][$modelname][$basename])) { $data['attrs']['value'] = $_POST[$params['group']][$modelname][$basename]; } elseif (!empty($params['number']) && isset($_POST[$modelname][$params['number']][$basename])) { $data['attrs']['value'] = $_POST[$modelname][$params['number']][$basename]; } elseif (isset($_SESSION['_controller_data'][$modelname][$basename])) { $data['attrs']['value'] = $_SESSION['_controller_data'][$modelname][$basename]; } else { $data['attrs']['value'] = $field->value; } if (isset($_POST[$modelname][$unitname])) { $units = $_POST[$modelname][$unitname]; } elseif (!empty($params['group']) && isset($_POST[$params['group']][$modelname][$unitname])) { $units = $_POST[$params['group']][$modelname][$unitname]; } elseif (!empty($params['number']) && isset($_POST[$modelname][$params['number']][$unitname])) { $units = $_POST[$modelname][$params['number']][$unitname]; } elseif (isset($_SESSION['_controller_data'][$modelname][$unitname])) { $units = $_SESSION['_controller_data'][$modelname][$unitname]; } else { $units = 'hours'; } $data['days_label'] = prettify('days'); $data['hours_label'] = prettify('hours'); $data['minutes_label'] = prettify('minutes'); if (!isset($data['attrs']['value']) && $field->has_default == 1) { $data['attrs']['value'] = $field->default_value; } if (!empty($data['attrs']['value'])) { if (is_array($data['attrs']['value'])) { $units = $data['attrs']['value'][1]; $data['attrs']['value'] = $data['attrs']['value'][0]; } else { // ATTN: setting units twice? $data['attrs']['value'] = to_working_days($data['attrs']['value'], false); $data['attrs']['value'] = $data['attrs']['value'] * SystemCompanySettings::DAY_LENGTH; } $data[$units . '_selected'] = 'selected="selected"'; } // processing over, collect vars // ATTN: should the above be $value, then converted to $data['attrs']['value']? if ($hidden) { if (isset($days_selected)) { $data['unit_value'] = 'days'; } else { $data['unit_value'] = 'hours'; } } $data['class'] = implode(' ', $data['class']); // convert attrs array to a string $data['attrs'] = build_attribute_string($data['attrs']); $data['label']['attrs'] = build_attribute_string($data['label']['attrs']); // fetch smarty plugin template return smarty_plugin_template($smarty, $data, 'function.interval'); }
function smarty_function_textarea($params, &$smarty) { $controller_data =& $smarty->getTemplateVars('controller_data'); $attribute = $params['attribute']; $row_id = ''; $params['alias'] = ''; // set default data array $data = array('label' => array('position' => 'left', 'attrs' => array(), 'value' => ''), 'textarea' => array('value' => '', 'attrs' => array('name' => $attribute)), 'dt' => array('attrs' => array()), 'dd' => array('attrs' => array())); if (!empty($params['model'])) { $model =& $params['model']; } else { $with =& $smarty->getTemplateVars('with'); $model = $with['model']; } if (empty($params['alias'])) { if (isset($with['alias'])) { $params['alias'] = $with['alias']; } } if (isset($params['rowid'])) { $row_id = $params['rowid']; } if (isset($model)) { if (!empty($params['alias'])) { $alias = $model->getAlias($params['alias']); $aliasModelName = $alias['modelName']; $newmodel = new $aliasModelName(); $field = $newmodel->getField($attribute); $data['textarea']['attrs']['name'] = get_class($model) . '[' . $params['alias'] . '][' . $attribute . ']'; $data['textarea']['attrs']['id'] = get_class($model) . '_' . $params['alias'] . '_' . $attribute; if (!empty($_POST[get_class($model)][$params['alias']][$attribute])) { $data['textarea']['value'] = $_POST[get_class($model)][$params['alias']][$attribute]; } elseif ($model->isLoaded()) { $newmodel = $model->{$params}['alias']; $data['textarea']['value'] = $newmodel->{$attribute}; } } else { if (!empty($_POST[get_class($model)][$attribute])) { $data['textarea']['value'] = $_POST[get_class($model)][$attribute]; } elseif (!empty($params['group']) && !empty($_POST[$params['group']][$model->get_name()][$attribute])) { $data['textarea']['value'] = $_POST[$params['group']][$model->get_name()][$attribute]; } elseif (!empty($params['number']) && !empty($_POST[$model->get_name()][$params['number']][$attribute])) { $data['textarea']['value'] = $_POST[$model->get_name()][$params['number']][$attribute]; } elseif (!empty($_SESSION['_controller_data'][get_class($model)][$attribute])) { $data['textarea']['value'] = $_SESSION['_controller_data'][get_class($model)][$attribute]; } $field = $model->getField($attribute); if (!empty($params['group'])) { $data['textarea']['attrs']['name'] = $params['group'] . '[' . $model->get_name() . '][' . $attribute . ']'; } elseif (isset($params['number'])) { $data['textarea']['attrs']['name'] = $model->get_name() . '[' . $params['number'] . '][' . $attribute . ']'; } else { $data['textarea']['attrs']['name'] = get_class($model) . '[' . $attribute . ']'; } $data['textarea']['attrs']['id'] = strtolower(get_class($model) . '_' . $attribute . $row_id); if ($model->loaded) { $data['textarea']['value'] = $model->{$attribute}; } // If force=true then use the avaiable data if ($params['force']) { $data['textarea']['value'] = $controller_data[$attribute]; } } //check whether required field if ($field->not_null == 1) { $data['label']['value'] .= '*'; } } if (isset($params['editor']) && $params['editor'] == 'tinymce') { $data['textarea']['attrs']['class'][] = "tinymce"; } if (isset($params['class']) && $params['class'] != '') { $data['textarea']['attrs']['class'][] = $params['class']; } if (!empty($params['label'])) { $data['label']['value'] = $params['label']; } else { $data['label']['value'] = $field->tag; } if (!empty($params['value'])) { $data['textarea']['value'] = $params['value']; } $data['display_tags'] = !(isset($params['tags']) && $params['tags'] == 'none'); if (!empty($params['label_position'])) { $data['label']['position'] = $params['label_position']; } // NOTE: these are inline styles... I know it's now ideal :-( if (in_array($data['label']['position'], array('top', 'above'))) { $data['dt']['attrs']['style'][] = 'text-align: left;'; $data['dt']['attrs']['style'][] = 'border-bottom: 0;'; $data['dd']['attrs']['style'][] = 'clear: both;'; $data['dd']['attrs']['style'][] = 'width: 100%;'; $data['dd']['attrs']['style'][] = 'padding: 0;'; } // convert attrs array to a string $data['textarea']['attrs'] = build_attribute_string($data['textarea']['attrs']); $data['dt']['attrs'] = build_attribute_string($data['dt']['attrs']); $data['dd']['attrs'] = build_attribute_string($data['dd']['attrs']); // fetch smarty plugin template return smarty_plugin_template($smarty, $data, 'function.textarea'); }
/** * Generate a link based on params and permissions * * @access public * @param array $params * @param boolean $data * @param boolean $html * @return string */ function link_to($params, $data = FALSE, $html = TRUE) { $script = ''; $url = '?'; $attr_array = array(); $attr_string = ''; $modules = array(); $module = ''; $tag = ''; $ao = AccessObject::Instance(); if (isset($params['modules'])) { $modules = $params['modules']; while (empty($module) && count($modules) > 0) { $module = array_pop($modules); } } else { $modkey = 'module'; while (key_exists($modkey, $params)) { if (!empty($params[$modkey])) { $module = $params[$modkey]; } $modkey = 'sub' . $modkey; } } // loop through each item here, check the params array and set the type variable foreach (array('pid', 'controller', 'action') as $type) { if (isset($params[$type])) { ${$type} = $params[$type]; } else { ${$type} = ''; } } // build data attributes, apply them to attributes array if (isset($params['data_attrs'])) { $attr_array[] = build_attribute_string(build_data_attributes($params['data_attrs'])); } // if we're handling a print link we want to test permissions // against the print action and not the dialog action if (isset($params['printaction'])) { $action = $params['printaction']; } if (empty($pid)) { $pid = $ao->getPermission($module, $controller, $action); } $allowed = $ao->hasPermission($module, $controller, $action, $pid); $modules = array(); if (!empty($pid)) { $modules['pid'] = $pid; } if (!empty($pid) && !isset($params['value'])) { if (!empty($params['action'])) { $permission = $params['action']; } elseif (!empty($params['controller'])) { $permission = $params['controller']; } elseif (!empty($module)) { $permission = $module; } $per = DataObjectFactory::Factory('Permission'); $per->load($pid); switch ($per->type) { case 'g': case 'm': case 's': if ($per->permission == $permission) { $tag = $per->title; } break; case 'c': if ($per->permission == $permission) { $tag = $per->title; } break; case 'a': if ($per->permission == $permission) { $tag = $per->title; } } } if (empty($tag) && isset($params['value'])) { $tag = $params['value']; } if (isset($params['modules'])) { $modulekey = 'module'; foreach ($params['modules'] as $module) { $modules[$modulekey] = $module; $modulekey = 'sub' . $modulekey; } unset($params['modules']); } $params = array_merge($modules, $params); // remove the data attrs item unset($params['data_attrs']); foreach ($params as $key => $val) { //special cases if (substr($key, 0, 1) === '_') { $attr_array[str_replace('_', '', $key)] = $val; continue; } if ($key == 'value' || $key == 'img' || $key == 'alt' || $key == 'no_prettify') { continue; } if (!is_array($val)) { $url .= strtolower($key) . '=' . urlencode($val) . '&'; } } //remove last ampersand $url = substr($url, 0, -5); $url = '/' . $url; if (isset($params['link'])) { $url = $params['link']; } $attr_array['href'] = $url; // convert the attributes array to string $attr_string = build_attribute_string($attr_array); if (!$allowed) { if (isset($params['img']) || $data) { $string = $params['value']; } else { $string = prettify($tag); } } else { if ($html === TRUE) { if ($params['value'] == '') { $params['value'] = 'link'; } if (isset($params['img'])) { $params['value'] = '<img src="' . $params['img'] . '" alt="' . $params['alt'] . '" />'; $string = '<a ' . $attr_string . ' >' . $params['value'] . '</a>'; } else { if ($data) { $string = '<a ' . $attr_string . ' >' . $params['value'] . '</a>'; } elseif (isset($params['no_prettify'])) { $string = '<a ' . $attr_string . ' >' . $tag . '</a>'; } else { $string = '<a ' . $attr_string . ' >' . prettify($tag) . '</a>'; } } } else { $string = str_replace('&', '&', $url); } } return $string; }
/** * (c) 2000-2012 uzERP LLP (support#uzerp.com). All rights reserved. * * Released under GPLv3 license; see LICENSE. **/ function smarty_block_content_wrapper($params, $content, &$smarty, $repeat) { /************************************************************** * Content Wrapper block ************************************************************** * The purpose of the content wrapper block is to encapsulate * each page used by uzERP. Its initial purpose was to provide * a simple alternative to the page identifier, however it has * also been used to house the page title and flash, the reason * being is that the page title and flash are content specific * things, not page specific. When ajaxing content the page * title and flash are not dragged along with it. * * $Revision: 1.6 $ * **************************************************************/ // set initial vars $data = array('attrs' => array(), 'title' => '', 'flash' => FALSE, 'content' => $content); if (!empty($content)) { /* * Page Identifier ***********************************************************/ if (isset($params['module']) && !empty($params['module'])) { $module = $params['module']; } else { $module = trim($smarty->getTemplateVars('module'), '_'); } if (isset($params['controller']) && !empty($params['controller'])) { $controller = $params['controller']; } else { $controller = trim($smarty->getTemplateVars('controller'), '_'); } if (isset($params['action']) && !empty($params['action'])) { $action = $params['action']; } else { $action = trim(basename($smarty->getTemplateVars('templateName'), ".tpl"), '_'); } if (!isset($params['page_identifier']) || $params['page_identifier'] !== FALSE) { $data['attrs']['id'] = strToLower($module . '-' . $controller . '-' . $action); } $data['attrs']['data-module'] = $module; $data['attrs']['data-controller'] = $controller; $data['attrs']['data-action'] = $action; $self = $smarty->getTemplateVars('self'); unset($self['modules']); unset($self['module']); unset($self['controller']); unset($self['action']); // This is used by popup dialog forms to refresh the calling form/page foreach ($self as $key => $value) { if ($key != '_') { $data['attrs']['data-' . $key] = $value; } } /* * Class ***********************************************************/ $data['attrs']['class'][] = 'content_wrapper'; if (isset($params['class'])) { $data['attrs']['class'][] = $params['class']; } /* * Page Title ***********************************************************/ if (!isset($params['title']) || $params['title'] !== FALSE) { if (isset($params['title'])) { $data['title'] = prettify($params['title']); } else { $data['title'] = prettify($smarty->getTemplateVars('page_title')); } } /* * Flash ***********************************************************/ if (!isset($params['flash']) || $params['flash'] !== FALSE) { $data['flash'] = TRUE; } /* * Generate and output final HTML ***********************************************************/ // convert attrs array to a string $data['attrs'] = build_attribute_string($data['attrs']); // fetch smarty plugin template return smarty_plugin_template($smarty, $data, 'block.content_wrapper'); } }
function smarty_block_grid_cell($params, $content, &$smarty, $repeat) { if (!empty($content)) { // no point continuing if we're dealing with an id field if (substr($params['field'], -2) == 'id') { return ''; } // set vars $attrs = array(); $id = $smarty->getTemplateVars('gridrow_id'); $with =& $smarty->getTemplateVars('with'); if (!empty($params['model'])) { $model =& $params['model']; } else { $model = $with['model']; } if ($model->getField($params['field'])->type !== 'html' && !isset($params['no_escape'])) { $content = h(trim($content)); } if ($params['cell_num'] == 1) { if ($smarty->getTemplateVars('clickaction') != 'none') { $link = array(); $self = $smarty->getTemplateVars('self'); if ($smarty->getTemplateVars('clickmodule')) { $link['modules'] = $smarty->getTemplateVars('clickmodule'); } else { $link['modules'] = $self['modules']; } if ($smarty->getTemplateVars('clickcontroller')) { $clickcontroller = $smarty->getTemplateVars('clickcontroller'); } else { $clickcontroller = $self['controller']; } if ($params['collection']->clickcontroller) { $clickcontroller = $params['collection']->clickcontroller; } $link['controller'] = $clickcontroller; if ($params['collection']->editclickaction) { $link['action'] = $params['collection']->editclickaction; } else { $link['action'] = $smarty->getTemplateVars('clickaction'); } if ($smarty->getTemplateVars('linkfield')) { $linkfield = $smarty->getTemplateVars('linkfield'); } else { $linkfield = $model->idField; } if ($smarty->getTemplateVars('linkvaluefield')) { $link[$linkfield] = $model->{$smarty->getTemplateVars('linkvaluefield')}; } else { $link[$linkfield] = $model->{$linkfield}; } if ($smarty->getTemplateVars('linkdata')) { foreach ($smarty->getTemplateVars('linkdata') as $field => $value) { $link[$field] = $value; } } foreach ($params as $field => $value) { if (substr($field, 0, 1) == '_' && $model->isField(substr($field, 1))) { $link[substr($field, 1)] = $value; } } $link['value'] = $content; if (empty($link['pid'])) { $ao = AccessObject::Instance(); $link['pid'] = $ao->getPermission($link['modules'], $link['controller'], $link['action']); } if (!empty($link['pid']) && !empty($link['action'])) { $content = link_to($link, $data = true); $_SESSION['cache'][get_class($model)][$params['field']] = array('pid' => $link['pid'], 'modules' => $link['modules'], 'controller' => $link['controller'], 'action' => $link['action']); } } } elseif (!empty($content) && isset($_SESSION['cache'][get_class($model)][$params['field']])) { $content = link_to(array('pid' => $_SESSION['cache'][get_class($model)][$params['field']]['pid'], 'module' => $_SESSION['cache'][get_class($model)][$params['field']]['module'], 'controller' => $_SESSION['cache'][get_class($model)][$params['field']]['controller'], 'action' => 'view', $_SESSION['cache'][get_class($model)][$params['field']]['id_field'] => $model->{$_SESSION['cache'][get_class($model)][$params['field']]['fk_field']}, 'value' => $content)); } elseif (!empty($content)) { // If the field is in a belongsTo FK link, then enable the link // if the user has access to the target function // TODO: this code is copied from view_data so could be moved to generic function? $temp_lookups = array(); if (isset($model->belongsToField[$params['field']])) { $belongs_field = strtolower($model->belongsToField[$params['field']]); $belongs_model = strtolower($model->belongsTo[$belongs_field]['model']); $fk_field = $model->belongsTo[$belongs_field]['field']; } if (isset($model->belongsTo[$params['field']])) { $belongs_model = strtolower($model->belongsTo[$params['field']]['model']); $fk_field = $model->belongsTo[$params['field']]['field']; } if (!empty($belongs_model)) { if (!isset($temp_lookups[$belongs_model])) { $modulecomponent = DataObjectFactory::Factory('ModuleComponent'); $modulecomponent->loadBy(array('name', 'type'), array($belongs_model . 'scontroller', 'C')); if ($modulecomponent->isLoaded()) { $temp_lookups[$params['field']] = $modulecomponent->module->name; } } } else { $belongs_model = $params['field']; } if (isset($temp_lookups[$params['field']]) || isset($temp_lookups[$params['fk']])) { if (isset($params['fk_field'])) { $fk_field = $params['fk_field']; } elseif (empty($fk_field)) { $fk_field = $params['field'] . '_id'; } if (isset($params['fk'])) { $belongs_model = $params['fk']; $module = $temp_lookups[$params['fk']]; } else { $module = $temp_lookups[$params['field']]; } if (method_exists($belongs_model . 'scontroller', 'view') && !is_null($model->{$fk_field})) { $ao = AccessObject::Instance(); $pid = $ao->getPermission($module, $belongs_model . 's', 'view'); if (!empty($pid)) { $link_model = DataObjectFactory::Factory($belongs_model); $content = link_to(array('pid' => $pid, 'module' => $module, 'controller' => $belongs_model . 's', 'action' => 'view', $link_model->idField => $model->{$fk_field}, 'value' => $content)); $_SESSION['cache'][get_class($model)][$params['field']] = array('pid' => $pid, 'module' => $module, 'controller' => $belongs_model . 's', 'id_field' => $link_model->idField, 'fk_field' => $fk_field); } } } } if ($params['field'] == $smarty->getTemplateVars('wide_column')) { $attrs['class'][] = 'wide_column'; } if ($model->getField($params['field'])->type == 'numeric') { $attrs['class'][] = 'numeric'; } if ($model->getField($params['field'])->type == 'bool') { $attrs['class'][] = 'icon'; $content = '<img src="/themes/default/graphics/' . ($model->{$params['field']} == 't' ? 'true' : 'false') . '.png" alt="' . ($model->{$params['field']} == 't' ? 'true' : 'false') . '" />'; } if (isset($params['class'])) { $attrs['class'][] = $params['class']; } $attrs['class'][] = 'row_' . $params['field']; if ($params['field'] == 'email') { $email = $model->getField($params['field'])->value; if (!empty($email)) { $content = '<a href="mailto:' . $email . '">' . $content . '</a>'; } } if ($params['field'] == 'company') { $field = $model->companydetail->is_lead == 't' ? 'lead' : $params['field']; } else { $field = $params['field']; } if (($params['field'] == 'company' || $params['field'] == 'person') && !is_null($model->{$params['field'] . '_id'})) { $content = sprintf('<a href="/?module=contacts&controller=%s&action=view&id=%s">%s</a>', $field . 's', $model->{$params['field'] . '_id'}, $content); } // convert attrs array to a string $attrs = build_attribute_string($attrs); return '<td ' . $attrs . ' >' . $content . '</td>' . "\n"; } }
function smarty_function_input($params, &$smarty) { $controller_data =& $smarty->getTemplateVars('controller_data'); $attribute = $params['attribute']; $with =& $smarty->getTemplateVars('with'); // no point in continuing if we're only going to return false anyway if (prettify($attribute) == 'EGS_HIDDEN_FIELD') { return ''; } // continue setting vars $rowid = ''; $data = array('attrs' => array('value' => '', 'type' => 'text'), 'display_tags' => !(isset($params['tags']) && $params['tags'] == 'none' || isset($with['tags']) && $with['tags'] == 'none'), 'display_label' => !isset($params['nolabel']) || $params['nolabel'] === FALSE); // append any data attributes passed in through params with the attrs array $data['attrs'] += build_data_attributes($params); if (empty($params['group'])) { $params['group'] = isset($with['group']) ? $with['group'] : ''; } if (empty($params['alias'])) { $params['alias'] = isset($with['alias']) ? $with['alias'] : ''; } if (empty($params['composite'])) { $params['composite'] = isset($with['composite']) ? $with['composite'] : ''; } if (!empty($params['model'])) { $model =& $params['model']; } else { $model = $with['model']; } if (!empty($params['hidden'])) { $params['type'] = 'hidden'; } // ATTN: used anymore? if (isset($params['onchange'])) { $data['attrs']['onchange'] = $params['onchange']; } if (isset($params['onclick'])) { $data['attrs']['onclick'] = $params['onclick']; } if (isset($params['label'])) { $params['label'] = trim($params['label']); if (strtoupper($params['label']) === 'FALSE' || empty($params['label'])) { $data['display_label'] = FALSE; } else { $data['label']['value'] = prettify($params['label']); } } if (isset($params['rowid'])) { $rowid = $params['rowid']; } // ATTN: above set params if (empty($data['attrs']['value'])) { $data['attrs']['value'] = $params['value']; } if (isset($model)) { if (!empty($params['alias'])) { $alias = $model->getAlias($params['alias']); $aliasModelName = $alias['modelName']; $newmodel = new $aliasModelName(); $field = $newmodel->getField($attribute); if (empty($params['label'])) { $data['label']['value'] = $field->tag; } $data['attrs']['name'] = $model->get_name() . '[' . $params['alias'] . '][' . $attribute . ']'; $data['attrs']['id'] = $model->get_name() . '_' . $params['alias'] . '_' . $attribute; if (isset($_POST[$model->get_name()][$params['alias']][$attribute])) { $data['attrs']['value'] = $_POST[$model->get_name()][$params['alias']][$attribute]; } elseif (isset($_SESSION['_controller_data'][$model->get_name()][$attribute])) { $data['attrs']['value'] = $_SESSION['_controller_data'][$model->get_name()][$attribute]; } elseif ($model->isLoaded()) { $newmodel = $model->{$params}['alias']; $data['attrs']['value'] = $newmodel->{$attribute}; } if ((!isset($data['attrs']['value']) || empty($data['attrs']['value'])) && isset($params['value'])) { $data['attrs']['value'] = $params['value']; } } elseif (!empty($params['composite'])) { $alias = $model->getComposite($params['composite']); $aliasModelName = $alias['modelName']; $newmodel = new $aliasModelName(); $field = $newmodel->getField($attribute); if (empty($params['label'])) { $data['label']['value'] = $field->tag; } $data['attrs']['name'] = $model->get_name() . '[' . $aliasModelName . '][' . $attribute . ']'; $data['attrs']['id'] = $model->get_name() . '_' . $aliasModelName . '_' . $attribute; if (isset($_POST[$model->get_name()][$aliasModelName][$attribute])) { $data['attrs']['value'] = $_POST[$model->get_name()][$aliasModelName][$attribute]; } elseif (isset($_SESSION['_controller_data'][$model->get_name()][$attribute])) { $data['attrs']['value'] = $_SESSION['_controller_data'][$model->get_name()][$attribute]; } elseif ($model->isLoaded()) { $newmodel = $model->{$params}['composite']; $data['attrs']['value'] = $newmodel->{$attribute}; } if ((!isset($data['attrs']['value']) || empty($data['attrs']['value'])) && isset($params['value'])) { $data['attrs']['value'] = $params['value']; } } else { $field = $model->getField($attribute); if ($field !== FALSE) { // If data for the field is available and it is not the idfield, make it hidden // unless this is overridden (force=true) // or it is pop-up dialog form field that is not to be hidden if ((!isset($controller_data['dialog']) || isset($params['hidden']) || $params['type'] == 'hidden') && isset($controller_data[$attribute]) && $model->idField != $attribute && $params['force'] != true) { $data['attrs']['value'] = $controller_data[$attribute]; $params['type'] = 'hidden'; } // If force=true then use the avaiable data if ($params['force']) { $data['attrs']['value'] = $controller_data[$attribute]; } //Set "not editable" fields to DISABLED, but only if not already hidden if ($model->isNotEditable($field->name) && $model->isDisplayedField($field->name)) { $params['disabled'] = 'disabled'; } if (empty($params['label'])) { $data['label']['value'] = $field->tag; } $data['attrs']['name'] = $model->get_name() . '[' . $attribute . ']'; if (isset($params['postfix'])) { $data['attrs']['name'] .= $params['postfix']; } if (!empty($params['group'])) { $data['attrs']['name'] = $params['group'] . '[' . $model->get_name() . '][' . $attribute . ']'; } elseif (isset($params['number'])) { $data['attrs']['name'] = $model->get_name() . '[' . $params['number'] . '][' . $attribute . ']'; } else { $data['attrs']['name'] = $model->get_name() . '[' . $attribute . ']'; } if (isset($params['postfix'])) { $data['attrs']['name'] .= $params['postfix']; } $data['attrs']['id'] = $model->get_name() . '_' . $attribute . $rowid; // ATTN: wow, big condition if ($params['type'] == 'checkbox' && (!isset($_POST[$model->get_name()][$attribute]) && isset($_POST[$model->get_name()]['_checkbox_exists_' . $attribute]) || !isset($_POST[$params['group']][$model->get_name()][$attribute]) && isset($_POST[$params['group']][$model->get_name()]['_checkbox_exists_' . $attribute]) || !isset($_POST[$model->get_name()][$params['number']][$attribute]) && isset($_POST[$model->get_name()][$params['number']]['_checkbox_exists_' . $attribute]) || !isset($_SESSION['_controller_data'][$model->get_name()][$attribute]) && isset($_SESSION['_controller_data'][$model->get_name()]['_checkbox_exists_' . $attribute]))) { $data['attrs']['value'] = 'f'; } else { if (isset($_POST[$model->get_name()][$attribute])) { $data['attrs']['value'] = $_POST[$model->get_name()][$attribute]; } elseif (!empty($params['group']) && isset($_POST[$params['group']][$model->get_name()][$attribute])) { $data['attrs']['value'] = $_POST[$params['group']][$model->get_name()][$attribute]; } elseif (!empty($params['number']) && isset($_POST[$model->get_name()][$params['number']][$attribute])) { $data['attrs']['value'] = $_POST[$model->get_name()][$params['number']][$attribute]; } elseif (isset($_SESSION['_controller_data'][$model->get_name()][$attribute])) { $data['attrs']['value'] = $_SESSION['_controller_data'][$model->get_name()][$attribute]; } elseif ($model->isLoaded()) { $data['attrs']['value'] = $model->{$attribute}; } } if ((empty($data['attrs']['value']) || $params['type'] == 'radio') && $field->has_default == 1 && $field->name != $model->idField && !$model->isLoaded()) { $data['attrs']['value'] = $field->default_value; } if ((!isset($data['attrs']['value']) || empty($data['attrs']['value'])) && isset($params['value'])) { $data['attrs']['value'] = $params['value']; } } else { if (!empty($params['group'])) { $data['attrs']['name'] = $params['group'] . '[' . $model->get_name() . '][' . $attribute . ']'; if (isset($_POST[$params['group']][$model->get_name()][$attribute])) { $data['attrs']['value'] = $_POST[$params['group']][$model->get_name()][$attribute]; } } elseif (isset($params['number'])) { $data['attrs']['name'] = $model->get_name() . '[' . $params['number'] . '][' . $attribute . ']'; if (isset($_POST[$model->get_name()][$params['number']][$attribute])) { $data['attrs']['value'] = $_POST[$model->get_name()][$params['number']][$attribute]; } } else { $data['attrs']['name'] = $model->get_name() . '[' . $attribute . ']'; if (isset($_POST[$model->get_name()][$attribute])) { $data['attrs']['value'] = $_POST[$model->get_name()][$attribute]; } } $data['attrs']['id'] = $model->get_name() . '_' . $attribute . $rowid; } } } else { if (!empty($params['group'])) { $data['attrs']['name'] = $params['group'] . '[' . $attribute . ']'; } elseif (isset($params['number'])) { $data['attrs']['name'] = $attribute . '[' . $params['number'] . ']'; } else { $data['attrs']['name'] = $attribute; } $data['attrs']['id'] = $attribute . $rowid; } // set field (data) attribute if (isset($field) && !empty($field)) { $data['attrs']['data-field'] = $field->name; } else { $data['attrs']['data-field'] = $attribute; } // set row number (data) attribute if (isset($params['rowid']) && !empty($params['rowid'])) { $data['attrs']['data-row-number'] = $params['rowid']; } if (strpos($attribute, 'confirmation_') === 0) { if (empty($label)) { $data['label']['value'] = prettify($attribute); } $data['attrs']['class'][] = 'confirmation'; } if ($field->not_null == 1 && $params['type'] !== 'checkbox' && empty($params['alias']) && !isset($params['readonly'])) { $data['label']['value'] .= ' *'; $data['attrs']['class'][] = 'required'; } if (isset($params['readonly']) && $params['readonly'] !== FALSE) { $data['attrs']['readonly'] = 'readonly'; } if (!empty($params['class']) && $params['class'] !== 'compulsory') { $data['attrs']['class'][] = $params['class']; } if (isset($params['id'])) { $data['attrs']['id'] = $params['id']; } if (isset($params['name'])) { $data['attrs']['name'] = $params['name']; } if (!empty($params['type'])) { $data['attrs']['type'] = $params['type']; } switch ($params['type']) { case 'hidden': $data['display_tags'] = FALSE; $data['display_label'] = FALSE; $data['attrs']['type'] = 'hidden'; break; case 'checkbox': if (in_array($data['attrs']['value'], array('t', 'true', 'on'))) { $data['attrs']['checked'] = 'checked'; } if (isset($params['disabled']) && $params['disabled']) { $data['attrs']['disabled'] = 'disabled'; } $data['attrs']['value'] = 'on'; $data['attrs']['class'][] = 'checkbox'; $data['attrs_checkbox']['name'] = str_replace('[' . $attribute, '[_checkbox_exists_' . $attribute, $data['attrs']['name']); $data['attrs_checkbox']['value'] = 'true'; $data['attrs_checkbox']['type'] = 'hidden'; break; case 'date': if (is_numeric($data['attrs']['value'])) { $data['attrs']['value'] = date(DATE_FORMAT, $data['attrs']['value']); } else { if (!empty($data['attrs']['value'])) { $modelvalue = $data['attrs']['value']; } else { $modelvalue = $model->{$attribute}; } if (!empty($modelvalue)) { if (strpos($modelvalue, '/')) { $data['attrs']['value'] = $modelvalue; } else { $data['attrs']['value'] = date(DATE_FORMAT, strtotime($modelvalue)); } } } $data['attrs']['type'] = 'text'; $data['attrs']['class'][] = 'icon date slim datefield'; break; case 'datetime': if (is_numeric($data['attrs']['value'])) { if ($field->type === 'timestamp') { $data['attrs']['value'] = date(DATE_TIME_FORMAT, $data['attrs']['value']); } else { $data['attrs']['value'] = date(DATE_FORMAT, $data['attrs']['value']); } } $data['attrs']['type'] = 'text'; $data['attrs']['class'][] = 'datetimefield'; break; case 'file': $data['attrs']['class'][] = 'file'; break; case 'radio': // $data['attrs']['value'] should either be the field default (new) or the field value (edit) // check this against the $params['value'] and set checked if match if ($data['attrs']['value'] == $params['value'] || $data['attrs']['value'] == ($params['value'] == 't')) { $data['attrs']['checked'] = ''; } // The actual value for the radio button is the $params['value'] if (isset($params['value'])) { $data['attrs']['value'] = $params['value']; } $data['attrs']['class'][] = $attribute; default: $data['attrs']['value'] = h(trim($data['attrs']['value']), ENT_QUOTES); break; } $data['label']['attrs']['for'] = $data['attrs']['id']; $data['label']['attrs']['id'] = $data['attrs']['id'] . '_label'; // convert attrs array to a string if (isset($data['attrs_checkbox'])) { $data['attrs_checkbox'] = build_attribute_string($data['attrs_checkbox']); } $data['attrs'] = build_attribute_string($data['attrs']); $data['label']['attrs'] = build_attribute_string($data['label']['attrs']); // fetch smarty plugin template return smarty_plugin_template($smarty, $data, 'function.input'); }
function smarty_function_select($params, &$smarty) { // set a few variables $attribute = $params['attribute']; $fallback = TRUE; $use_autocomplete = FALSE; $rowid = ''; $selected = ''; $opt_counter = 0; $data = array('select' => array('attrs' => array()), 'display_tags' => !(isset($params['tags']) && $params['tags'] == 'none')); // append any data attributes passed in through params with the attrs array $data['select']['attrs'] += build_data_attributes($params); $controller_data =& $smarty->getTemplateVars('controller_data'); if (empty($params['force']) && (isset($controller_data[$attribute]) || !empty($params['hidden']))) { if (isset($controller_data['dialog'])) { // force select to be hidden on a dialog $params['hidden'] = ''; } return smarty_function_input($params, $smarty); } $with =& $smarty->getTemplateVars('with'); // not empty = TRUE, empty = FALSE $use_collection = !empty($params['use_collection']); if (!empty($params['model'])) { $model =& $params['model']; } else { $model = $with['model']; } $field = $model->getField($attribute); $cc = new ConstraintChain(); if (!empty($params['constraint'])) { $constraint = $params['constraint']; if (class_exists($constraint . 'Constraint')) { $cname = $constraint . 'Constraint'; $constraint = new $cname($attribute); if (!$constraint instanceof Constraint) { throw new Exception($cname . ' is not a valid Constraint'); } } else { $exp = explode(',', $constraint); $constraint = new Constraint($exp[0], $exp[1], $exp[2]); } $cc->add($constraint); } if (empty($params['alias'])) { $params['alias'] = isset($with['alias']) ? $with['alias'] : ''; } if (!empty($params['alias'])) { $alias = $model->getAlias($params['alias']); $aliasModelName = $alias['modelName']; $newmodel = new $aliasModelName(); $name = $model->get_name() . '[' . $params['alias'] . '][' . $attribute . ']'; $id = $model->get_name() . '_' . $params['alias'] . '_' . $attribute; if (isset($_POST[$model->get_name()][$params['alias']][$attribute])) { $value = $_POST[$model->get_name()][$params['alias']][$attribute]; } elseif ($model->isLoaded()) { $newmodel = $model->{$params}['alias']; $value = $newmodel->{$attribute}; } $model = $newmodel; } if (empty($params['composite'])) { $params['composite'] = isset($with['composite']) ? $with['composite'] : ''; // DEFAULT } if (!empty($params['composite'])) { $alias = $model->getComposite($params['composite']); $aliasModelName = $alias['modelName']; $newmodel = new $aliasModelName(); $name = $model->get_name() . '[' . $aliasModelName . '][' . $attribute . ']'; $id = $model->get_name() . '_' . $aliasModelName . '_' . $attribute; if (isset($_POST[$model->get_name()][$aliasModelName][$attribute])) { $value = $_POST[$model->get_name()][$aliasModelName][$attribute]; } elseif ($model->isLoaded()) { $newmodel = $model->{$params}['composite']; $value = $newmodel->{$attribute}; } $model = $newmodel; } if (isset($params['options'])) { $get_options = $params['options']; } else { $get_options = ''; } if (!isset($params['autocomplete']) || empty($get_options)) { $use_autocomplete = false; } else { $use_autocomplete = true; } if (!is_null($field->options)) { $get_options = $field->options->_data; $use_autocomplete = $field->options->_autocomplete; $text_value = $model->{$model->belongsToField[$attribute]}; if (trim($text_value) == '' && count($get_options) > 0) { $text_value = current($get_options); } $selected = key($get_options); } if (!empty($params['label'])) { $data['select']['label'] = $params['label']; } else { $data['select']['label'] = $field->tag; } if (isset($params['number'])) { $name = $model->get_name() . '[' . $params['number'] . '][' . $attribute . ']'; } elseif (!isset($name)) { $name = $model->get_name() . '[' . $attribute . ']'; } if (isset($params['rowid']) && !empty($params['rowid'])) { $rowid = $params['rowid']; $data['select']['attrs']['data-row-number'] = $params['rowid']; } $id = $model->get_name() . '_' . $attribute . $rowid; if (!isset($name)) { $name = $model->get_name() . '[' . $attribute . ']'; $id = $model->get_name() . '_' . $attribute . $rowid; } if (isset($params['postfix'])) { $name .= $params['postfix']; } // set field (data) attribute if (isset($field) && !empty($field)) { $data['select']['attrs']['data-field'] = $field->name; } else { $data['select']['attrs']['data-field'] = $attribute; } if (!empty($params['depends'])) { $depends = explode(',', $params['depends']); } elseif (!is_null($field->options->_depends)) { $depends = array_keys($field->options->_depends); } else { $depends = ''; } // echo 'Smarty function.select depends='.$depends.'<br>'; if (!empty($params['constrains'])) { $affects = explode(',', $params['constrains']); $constrains = true; } elseif (!is_null($field->options->_affects)) { $affects = array_keys($field->options->_affects); $constrains = true; } else { $affects = ''; $constrains = false; } // set the selected value from the value of the field, if present if ($model->isLoaded()) { $selected = $model->{$attribute}; } elseif (isset($controller_data[$attribute])) { $selected = $controller_data[$attribute]; } // set the selected value from the params value // can override the value of the field, if present if (isset($params['value'])) { $selected = $params['value']; } $autocomplete_select_limit = get_config('AUTOCOMPLETE_SELECT_LIMIT'); if (!empty($get_options) && !isset($params['forceselect']) && count($get_options) > $autocomplete_select_limit) { $use_autocomplete = true; } if (isset($model->belongsToField[$attribute])) { $x = $model->belongsTo[$model->belongsToField[$attribute]]["model"]; $controllername = strtolower($x) . 's'; if (isset($_SESSION['cache']['select'][$controllername])) { $data['select']['fk_link']['module'] = $_SESSION['cache']['select'][$controllername]; } else { $component = new ModuleComponent(); $component->loadBy(array('name', 'type'), array($controllername . 'controller', 'C')); if ($component->isLoaded()) { $data['select']['fk_link']['module'] = $_SESSION['cache']['select'][$controllername] = $component->module_name; } } if (isset($data['select']['fk_link']['module'])) { $data['select']['fk_link']['controller'] = $controllername; $data['select']['fk_link']['action'] = 'new'; } if (isset($params['data'])) { if ($params['data'] instanceof DataObjectCollection) { $options = $params['data']->getAssoc(); } elseif (is_array($params['data'])) { $options = $params['data']; } else { throw new Exception('"data" paramater should be an associative array, or a DataObjectCollection'); } } elseif (empty($get_options)) { if ($model->belongsTo[$model->belongsToField[$attribute]]["cc"] instanceof ConstraintChain) { $cc->add($model->belongsTo[$model->belongsToField[$attribute]]["cc"]); } if (!empty($depends)) { foreach ($depends as $depends_field) { if (!is_null($model->{$depends_field})) { $cc->add(new Constraint($depends_field, '=', $model->{$depends_field})); } } } $model->belongsTo[$model->belongsToField[$attribute]]["cc"] = $cc; if (!isset($params['forceselect']) && $model->getOptionsCount($attribute) > $autocomplete_select_limit) { $use_autocomplete = TRUE; $text_value = $model->{$model->belongsToField[$attribute]}; if (trim($text_value) == '') { if (empty($selected) && !$model->isLoaded() && $field->has_default) { $selected = $field->default_value; } $temp = new $x(); $temp->load($selected); $text_value = $temp->getIdentifierValue(); } } else { $x = DataObjectFactory::Factory($x); if ($model->checkUniqueness($attribute)) { // TODO: this can be inefficient in large data sets // needs to be 'not exists' correlated subquery $cc->add(new Constraint($x->idField, 'NOT IN', '(SELECT ' . $attribute . ' FROM ' . $model->getTableName() . ')')); $options = $x->getAll($cc, TRUE, $use_collection); $fallback = FALSE; } elseif ($attribute == 'assigned') { $c_user = $smarty->getTemplateVars('current_user'); $cc = new ConstraintChain(); $db = DB::Instance(); if (!is_null($c_user->person_id)) { $cc->add(new Constraint('person_id', 'IN', '(SELECT px.id FROM person px JOIN company cx ON (px.company_id=cx.id) JOIN person pz ON (pz.company_id=cx.id) WHERE pz.id=' . $db->qstr($c_user->person_id) . ')')); } $options = $x->getAll($cc, TRUE, $use_collection); } elseif (get_class($x) == 'User') { $options = $x->getActive($cc, FALSE); } else { $options = $x->getAll($cc, FALSE, $use_collection); } } } } elseif ($model->hasParentRelationship($attribute) && !isset($params['ignore_parent_rel'])) { $db = DB::Instance(); $x = clone $model; if ($model->isLoaded()) { $cc->add(new Constraint($model->idField, '<>', $model->{$model->idField})); } $options = $x->getAll($cc, FALSE, $use_collection); } elseif ($model->isEnum($attribute)) { //enumeration $options = $model->getEnumOptions($attribute); foreach ($options as $key => $option) { if ($selected == $option) { $selected = $key; break; } } } if ($field->not_null == 1) { $data['select']['label'] .= ' *'; $data['select']['class'][] = 'required'; } if (isset($_POST[$model->get_name()][$attribute])) { $selected = $_POST[$model->get_name()][$attribute]; } elseif (isset($_SESSION['_controller_data'][get_class($model)][$attribute])) { $selected = $_SESSION['_controller_data'][get_class($model)][$attribute]; } elseif (isset($_POST[$model->get_name()][$params['number']])) { $selected = $_POST[$model->get_name()][$params['number']][$attribute]; } if (empty($selected) && $field->has_default && !$model->isLoaded()) { $selected = $field->default_value; } if (isset($params['nonone']) && $params['nonone'] == 'true' || !is_null($field->options->_nonone) && $field->options->_nonone) { $data['select']['class'][] = "nonone"; } if (!empty($depends)) { $data['select']['attrs']['data-depends'] = htmlspecialchars(json_encode($depends)); } if (!empty($affects)) { $data['select']['attrs']['data-constrains'] = htmlspecialchars(json_encode($affects)); } //*************************** // COMPILE SELECT ATTRIBUTES $data['select']['attrs']['name'] = $name; $data['select']['attrs']['id'] = $id; if (isset($data['select']['fk_link'])) { $data['select']['id'] = $id; } // join the select class items with a space and pop them in the attrs class item if (!empty($data['select']['class'])) { $data['select']['attrs']['class'] = implode(' ', $data['select']['class']); } // append any class passed in from params if (!empty($params['class'])) { $data['select']['attrs']['class'] .= ' ' . $params['class']; } // For new records, initialise the model attribute with the selected value if (!empty($selected)) { $model->{$attribute} = $selected; } if (!$use_autocomplete || isset($params['multiple']) && $params['multiple']) { if ($constrains) { $data['select']['attrs']['class'] .= ' uz-constrains'; } if (isset($params['multiple']) && $params['multiple']) { $data['dd']['attrs']['class'] = 'for_multiple'; $data['select']['id'] = $id; $data['select']['attrs']['name'] = $data['select']['attrs']['name'] . '[]'; $data['select']['attrs']['multiple'] = 'multiple'; } if (isset($params['onchange'])) { $data['select']['attrs']['onchange'] = $params['onchange']; } if (isset($params['size'])) { $data['select']['attrs']['size'] = $params['size']; } if (isset($params['disabled'])) { $data['select']['attrs']['disabled'] = 'disabled'; } // for the sake of it, trim the class string $data['select']['attrs']['class'] = trim($data['select']['attrs']['class']); // build the attribute string // $data['select']['attrs'] is no longer an array!!! $data['select']['attrs'] = build_attribute_string($data['select']['attrs']); //***************** // COMPILE OPTIONS // check whether required field if (!$field->not_null == 1 && (!isset($params['nonone']) || $params['nonone'] != 'true') && (is_null($field->options->_nonone) || !$field->options->_nonone)) { $opt_counter++; $option_attrs = array('value' => ''); if (empty($selected)) { $option_attrs['selected'] = 'selected'; $selected = 'None'; } $data['select']['options'][$opt_counter]['attrs'] = build_attribute_string($option_attrs); $data['select']['options'][$opt_counter]['value'] = 'None'; } if (isset($params['start'])) { $opt_counter++; $option_attrs = array('value' => ''); if (empty($selected)) { $option_attrs['selected'] = 'selected'; $selected = $params['start']; } $data['select']['options'][$opt_counter]['attrs'] = build_attribute_string($option_attrs); $data['select']['options'][$opt_counter]['value'] = $params['start']; } // fallback is a horrible hack for now (for uniqueness constraints on dropdowns) if ($fallback && is_array($get_options)) { $options = $get_options; } if (!empty($options)) { foreach ($options as $key => $value) { $option_attrs = array(); $opt_counter++; $option_attrs['value'] = h($key, ENT_COMPAT); if (is_array($selected) && in_array($key, $selected) || $selected == $key) { $option_attrs['selected'] = 'selected'; } $data['select']['options'][$opt_counter]['attrs'] = build_attribute_string($option_attrs); $data['select']['options'][$opt_counter]['value'] = h($value); $data['autocomplete'] = false; } } $data['dt']['attrs'] = empty($data['dt']['attrs']) ? '' : build_attribute_string($data['dt']['attrs']); $data['dd']['attrs'] = empty($data['dd']['attrs']) ? '' : build_attribute_string($data['dd']['attrs']); } elseif (is_null($field->options) && !empty($get_options)) { if (empty($selected)) { $selected = key($get_options); } $data['autocomplete'] = true; $data['data_inline'] = true; $data['select']['selected'] = $selected; $data['select']['value'] = $get_options[$selected]; $data['select']['options'] = json_encode(dataObject::toJSONArray($get_options)); $data['select']['attrs']['class'] = 'uz-autocomplete ui-autocomplete-input icon ' . $data['select']['attrs']['class']; } else { $data['autocomplete'] = true; $data['data_inline'] = false; if (isset($params['action'])) { $data['select']['attrs']['data-action'] = $params['action']; } elseif (!is_null($field->options)) { $data['select']['attrs']['data-action'] = $field->options->_action; } else { $data['select']['attrs']['data-action'] = 'getOptions'; } if (!empty($params['identifierfield'])) { $data['select']['attrs']['data-identifierfield'] = json_encode(explode(',', $params['identifierfield'])); } elseif (!is_null($field->options->_identifierfield)) { $data['select']['attrs']['data-identifierfield'] = json_encode(array_keys($field->options->_identifierfield)); } else { $data['select']['attrs']['data-identifierfield'] = '""'; } if (!empty($params['use_collection'])) { $data['select']['attrs']['data-use_collection'] = $params['use_collection'] ? 'true' : 'false'; } elseif (!is_null($field->options->_use_collection)) { $data['select']['attrs']['data-use_collection'] = $field->options->_use_collection ? 'true' : 'false'; } else { $data['select']['attrs']['data-use_collection'] = '""'; } if (empty($text_value) && !empty($selected)) { $text_value = $selected; } $text_attribute = $attribute . '_text'; $text_name = str_replace($attribute, $text_attribute, $name); if (isset($_POST[$model->get_name()][$text_attribute])) { $text_value = $_POST[$model->get_name()][$text_attribute]; } elseif (isset($_SESSION['_controller_data'][get_class($model)][$text_attribute])) { $text_value = $_SESSION['_controller_data'][get_class($model)][$text_attribute]; } elseif (isset($_POST[$model->get_name()][$params['number']])) { $text_value = $_POST[$model->get_name()][$params['number']][$text_attribute]; } $data['select']['attrs']['data-attribute'] = $attribute; $data['select']['attrs']['class'] = 'uz-autocomplete ui-autocomplete-input icon ' . $data['select']['attrs']['class']; $attrs = array('name' => $data['select']['attrs']['name'], 'id' => $data['select']['attrs']['id'], 'value' => h($selected, ENT_COMPAT), 'data-text_id' => $data['select']['attrs']['id'] . '_text'); if (isset($data['select']['attrs']['data-depends'])) { $attrs['data-depends'] = $data['select']['attrs']['data-depends']; } if (isset($data['select']['attrs']['data-constrains'])) { $attrs['data-constrains'] = $data['select']['attrs']['data-constrains']; unset($data['select']['attrs']['data-constrains']); } if ($constrains) { $attrs['class'] = '"uz-constrains"'; } $data['select']['attrs']['data-id'] = $data['select']['attrs']['id']; $data['select']['attrs']['value'] = $text_value; $data['select']['attrs']['id'] = $data['select']['attrs']['id'] . '_text'; $data['select']['attrs']['name'] = $text_name; $data['select']['attrs_text'] = build_attribute_string($data['select']['attrs']); $data['select']['attrs'] = build_attribute_string($attrs); } // this should be further up? if (prettify($params['attribute']) == 'EGS_HIDDEN_FIELD') { return ''; } // fetch smarty plugin template return smarty_plugin_template($smarty, $data, 'function.select'); }