Index: branches/RC/core/kernel/db/db_tag_processor.php
===================================================================
diff -u -N
--- branches/RC/core/kernel/db/db_tag_processor.php (revision 11913)
+++ branches/RC/core/kernel/db/db_tag_processor.php (revision 0)
@@ -1,2543 +0,0 @@
-Conn =& $this->Application->GetADODBConnection();
- }
-
-
- /**
- * Returns true if "new" button was pressed in toolbar
- *
- * @param Array $params
- * @return bool
- */
- function IsNewMode($params)
- {
- $object =& $this->getObject($params);
- return $object->GetID() <= 0;
- }
-
- /**
- * Returns view menu name for current prefix
- *
- * @param Array $params
- * @return string
- */
- function GetItemName($params)
- {
- $item_name = $this->Application->getUnitOption($this->Prefix, 'ViewMenuPhrase');
- return $this->Application->Phrase($item_name);
- }
-
- function ViewMenu($params)
- {
- $block_params = $params;
- unset($block_params['block']);
- $block_params['name'] = $params['block'];
-
- $list =& $this->GetList($params);
- $block_params['PrefixSpecial'] = $list->getPrefixSpecial();
- return $this->Application->ParseBlock($block_params);
- }
-
- function SearchKeyword($params)
- {
- $list =& $this->GetList($params);
- return $this->Application->RecallVar($list->getPrefixSpecial().'_search_keyword');
- }
-
- /**
- * Draw filter menu content (for ViewMenu) based on filters defined in config
- *
- * @param Array $params
- * @return string
- */
- function DrawFilterMenu($params)
- {
- $block_params = $this->prepareTagParams($params);
- $block_params['name'] = $params['spearator_block'];
- $separator = $this->Application->ParseBlock($block_params);
- $filter_menu = $this->Application->getUnitOption($this->Prefix,'FilterMenu');
- if (!$filter_menu) {
- trigger_error('no filters defined for prefix '.$this->Prefix.', but DrawFilterMenu tag used', E_USER_WARNING);
- return '';
- }
-
- // Params: label, filter_action, filter_status
- $block_params['name'] = $params['item_block'];
-
- $view_filter = $this->Application->RecallVar($this->getPrefixSpecial().'_view_filter');
- if ($view_filter === false) {
- $event_params = Array ('prefix' => $this->Prefix, 'special' => $this->Special, 'name' => 'OnRemoveFilters');
- $this->Application->HandleEvent( new kEvent($event_params) );
- $view_filter = $this->Application->RecallVar($this->getPrefixSpecial().'_view_filter');
- }
- $view_filter = unserialize($view_filter);
-
- $filters = Array();
- $prefix_special = $this->getPrefixSpecial();
-
- foreach ($filter_menu['Filters'] as $filter_key => $filter_params) {
- $group_params = isset($filter_params['group_id']) ? $filter_menu['Groups'][ $filter_params['group_id'] ] : Array();
- if (!isset($group_params['element_type'])) {
- $group_params['element_type'] = 'checkbox';
- }
-
- if (!$filter_params) {
- $filters[] = $separator;
- continue;
- }
-
- $block_params['label'] = addslashes( $this->Application->Phrase($filter_params['label']) );
- if (getArrayValue($view_filter,$filter_key)) {
- $submit = 0;
- if (isset($params['old_style'])) {
- $status = $group_params['element_type'] == 'checkbox' ? 1 : 2;
- }
- else {
- $status = $group_params['element_type'] == 'checkbox' ? '[\'img/check_on.gif\']' : '[\'img/menu_dot.gif\']';
- }
- }
- else {
- $submit = 1;
- $status = 'null';
- }
- $block_params['filter_action'] = 'set_filter("'.$prefix_special.'","'.$filter_key.'","'.$submit.'",'.$params['ajax'].');';
- $block_params['filter_status'] = $status; // 1 - checkbox, 2 - radio, 0 - no image
- $filters[] = $this->Application->ParseBlock($block_params);
- }
-
- return implode('', $filters);
- }
-
- /**
- * Draws auto-refresh submenu in View Menu.
- *
- * @param Array $params
- * @return string
- */
- function DrawAutoRefreshMenu($params)
- {
- $refresh_intervals = $this->Application->ConfigValue('AutoRefreshIntervals');
- if (!$refresh_intervals) {
- trigger_error('no filters defined for prefix '.$this->Prefix.', but DrawAutoRefreshMenu tag used', E_USER_WARNING);
- return '';
- }
-
- $refresh_intervals = explode(',', $refresh_intervals);
- $view_name = $this->Application->RecallVar($this->getPrefixSpecial().'_current_view');
- $current_refresh_interval = $this->Application->RecallPersistentVar($this->getPrefixSpecial().'_refresh_interval.'.$view_name);
- if ($current_refresh_interval === false) {
- // if no interval was selected before, then choose 1st interval
- $current_refresh_interval = $refresh_intervals[0];
- }
-
- $ret = '';
- $block_params = $this->prepareTagParams($params);
- $block_params['name'] = $params['render_as'];
-
- foreach ($refresh_intervals as $refresh_interval) {
- $block_params['label'] = $this->_formatInterval($refresh_interval);
- $block_params['refresh_interval'] = $refresh_interval;
- $block_params['selected'] = $current_refresh_interval == $refresh_interval;
- $ret .= $this->Application->ParseBlock($block_params);
- }
- return $ret;
- }
-
- /**
- * Tells, that current grid is using auto refresh
- *
- * @param Array $params
- * @return bool
- */
- function UseAutoRefresh($params)
- {
- $view_name = $this->Application->RecallVar($this->getPrefixSpecial().'_current_view');
- return $this->Application->RecallPersistentVar($this->getPrefixSpecial().'_auto_refresh.'.$view_name);
- }
-
- /**
- * Returns current grid refresh interval
- *
- * @param Array $params
- * @return bool
- */
- function AutoRefreshInterval($params)
- {
- $view_name = $this->Application->RecallVar($this->getPrefixSpecial().'_current_view');
- return $this->Application->RecallPersistentVar($this->getPrefixSpecial().'_refresh_interval.'.$view_name);
- }
-
- /**
- * Formats time interval using given text for hours and minutes
- *
- * @param int $intervalmMinutes
- * @param string $hour_text Text for hours
- * @param string $min_text Text for minutes
- * @return unknown
- */
- function _formatInterval($interval, $hour_text = 'h', $min_text = 'min')
- {
- // 65
- $minutes = $interval % 60;
- $hours = ($interval - $minutes) / 60;
-
- $ret = '';
- if ($hours) {
- $ret .= $hours.$hour_text.' ';
- }
-
- if ($minutes) {
- $ret .= $minutes.$min_text;
- }
-
- return $ret;
- }
-
- function IterateGridFields($params)
- {
- $mode = $params['mode'];
- $def_block = isset($params['block']) ? $params['block'] : '';
- $force_block = isset($params['force_block']) ? $params['force_block'] : false;
-
- $grids = $this->Application->getUnitOption($this->Prefix,'Grids');
- $grid_config = $grids[$params['grid']]['Fields'];
-
- $picker_helper =& $this->Application->RecallObject('ColumnPickerHelper');
- /* @var $picker_helper kColumnPickerHelper */
- $picker_helper->ApplyPicker($this->getPrefixSpecial(), $grid_config, $params['grid']);
-
- if ($mode == 'fields') {
- return "'".join("','", array_keys($grid_config))."'";
- }
-
- $std_params['pass_params'] = 'true';
- $std_params['PrefixSpecial'] = $this->getPrefixSpecial();
-
- $object =& $this->GetList($params);
-
- $o = '';
- $i = 0;
- foreach ($grid_config as $field => $options) {
- $i++;
- $block_params = Array();
- $block_params['name'] = $force_block ? $force_block : (isset($options[$mode.'_block']) ? $options[$mode.'_block'] : $def_block);
- $block_params['field'] = $field;
- $block_params['sort_field'] = isset($options['sort_field']) ? $options['sort_field'] : $field;
- $block_params['filter_field'] = isset($options['filter_field']) ? $options['filter_field'] : $field;
-
- $w = $picker_helper->GetWidth($field);
- if ($w) $options['width'] = $w;
-
- /*if (isset($options['filter_width'])) {
- $block_params['filter_width'] = $options['filter_width'];
- }
- elseif (isset($options['width'])) {
- if (isset($options['filter_block']) && preg_match('/range/', $options['filter_block'])) {
- if ($options['width'] < 60) {
- $options['width'] = 60;
- $block_params['filter_width'] = 20;
- }
- else {
- $block_params['filter_width'] = $options['width'] - 40;
- }
- }
- else {
- $block_params['filter_width'] = max($options['width']-10, 20);
- }
- }*/
- /*if (isset($block_params['filter_width'])) $block_params['filter_width'] .= 'px';
-
-
- if (isset($options['filter_block']) && preg_match('/range/', $options['filter_block'])) {
- $block_params['filter_width'] = '20px';
- }
- else {
- $block_params['filter_width'] = '97%';
-// $block_params['filter_width'] = max($options['width']-10, 20);
- }*/
-
-
- $field_options = $object->GetFieldOptions($field);
- if (array_key_exists('use_phrases', $field_options)) {
- $block_params['use_phrases'] = $field_options['use_phrases'];
- }
-
- $block_params['is_last'] = ($i == count($grid_config));
- $block_params = array_merge($std_params, $options, $block_params);
- $o.= $this->Application->ParseBlock($block_params, 1);
- }
- return $o;
- }
-
- function PickerCRC($params)
- {
- /* @var $picker_helper kColumnPickerHelper */
- $picker_helper =& $this->Application->RecallObject('ColumnPickerHelper');
- $picker_helper->SetGridName($params['grid']);
- $data = $picker_helper->LoadColumns($this->getPrefixSpecial());
- return $data['crc'];
- }
-
- function FreezerPosition($params)
- {
- /* @var $picker_helper kColumnPickerHelper */
- $picker_helper =& $this->Application->RecallObject('ColumnPickerHelper');
- $picker_helper->SetGridName($params['grid']);
- $data = $picker_helper->LoadColumns($this->getPrefixSpecial());
- $freezer_pos = array_search('__FREEZER__', $data['order']);
- return $freezer_pos === false || in_array('__FREEZER__', $data['hidden_fields']) ? 1 : ++$freezer_pos;
- }
-
- function GridFieldsCount($params)
- {
- $grids = $this->Application->getUnitOption($this->Prefix, 'Grids');
- $grid_config = $grids[$params['grid']]['Fields'];
-
- return count($grid_config);
- }
-
- /**
- * Prints list content using block specified
- *
- * @param Array $params
- * @return string
- * @access public
- */
- function PrintList($params)
- {
- $params['no_table'] = 1;
- return $this->PrintList2($params);
- }
-
- function InitList($params)
- {
- $list_name = isset($params['list_name']) ? $params['list_name'] : '';
-
- $names_mapping = $this->Application->GetVar('NamesToSpecialMapping');
-
- if( !getArrayValue($names_mapping, $this->Prefix, $list_name) )
- {
- $list =& $this->GetList($params);
- }
- }
-
- function BuildListSpecial($params)
- {
- return $this->Special;
- }
-
- /**
- * Returns key, that identifies each list on template (used internally, not tag)
- *
- * @param Array $params
- * @return string
- */
- function getUniqueListKey($params)
- {
- $types = $this->SelectParam($params, 'types');
- $except = $this->SelectParam($params, 'except');
- $list_name = $this->SelectParam($params, 'list_name');
- if (!$list_name) {
- $list_name = $this->Application->Parser->GetParam('list_name');
- }
-
- return $types.$except.$list_name;
- }
-
- /**
- * Enter description here...
- *
- * @param Array $params
- * @return kDBList
- */
- function &GetList($params)
- {
- $list_name = $this->SelectParam($params, 'list_name,name');
- if (!$list_name) {
- $list_name = $this->Application->Parser->GetParam('list_name');
- }
-
- $requery = isset($params['requery']) && $params['requery'];
- if ($list_name && !$requery){
- $names_mapping = $this->Application->GetVar('NamesToSpecialMapping');
-
- $special = is_array($names_mapping) && isset($names_mapping[$this->Prefix]) && isset($names_mapping[$this->Prefix][$list_name]) ? $names_mapping[$this->Prefix][$list_name] : false;
-// $special = getArrayValue($names_mapping, $this->Prefix, $list_name);
- if(!$special)
- {
- $special = $this->BuildListSpecial($params);
- }
- }
- else
- {
- $special = $this->BuildListSpecial($params);
- }
-
- $prefix_special = rtrim($this->Prefix.'.'.$special, '.');
- $params['skip_counting'] = true;
- $list =& $this->Application->recallObject( $prefix_special, $this->Prefix.'_List', $params);
- /* @var $list kDBList */
-
- if ($requery) {
- $this->Application->HandleEvent($an_event, $prefix_special.':OnListBuild', $params);
- }
-
- if (array_key_exists('offset', $params)) {
- $list->Offset += $params['offset']; // apply custom offset
- }
-
- $list->Query($requery);
-
- if (array_key_exists('offset', $params)) {
- $list->Offset -= $params['offset']; // remove custom offset
- }
-
- $this->Special = $special;
-
- if ($list_name) {
- $names_mapping[$this->Prefix][$list_name] = $special;
- $this->Application->SetVar('NamesToSpecialMapping', $names_mapping);
- }
-
- return $list;
- }
-
- function ListMarker($params)
- {
- $list =& $this->GetList($params);
- $ret = $list->getPrefixSpecial();
- if( getArrayValue($params, 'as_preg') ) $ret = preg_quote($ret, '/');
- return $ret;
- }
-
- /**
- * Prepares name for field with event in it (used only on front-end)
- *
- * @param Array $params
- * @return string
- */
- function SubmitName($params)
- {
- $list =& $this->GetList($params);
-
- $prefix_special = $list->getPrefixSpecial();
-
- return 'events['.$prefix_special.']['.$params['event'].']';
- }
-
- /**
- * Prints list content using block specified
- *
- * @param Array $params
- * @return string
- * @access public
- */
- function PrintList2($params)
- {
- $per_page = $this->SelectParam($params, 'per_page,max_items');
- if ($per_page !== false) $params['per_page'] = $per_page;
-
- $list =& $this->GetList($params);
- $o = '';
-
- $direction = (isset($params['direction']) && $params['direction']=="H")?"H":"V";
- $columns = (isset($params['columns'])) ? $params['columns'] : 1;
-
- $id_field = (isset($params['id_field'])) ? $params['id_field'] : $this->Application->getUnitOption($this->Prefix, 'IDField');
-
- if ($columns > 1 && $direction == 'V') {
- $records_left = array_splice($list->Records, $list->SelectedCount); // because we have 1 more record for "More..." link detection (don't need to sort it)
- $list->Records = $this->LinearToVertical($list->Records, $columns, $list->GetPerPage());
- $list->Records = array_merge($list->Records, $records_left);
- }
-
- $list->GoFirst();
-
- $block_params=$this->prepareTagParams($params);
- $block_params['name'] = $this->SelectParam($params, 'render_as,block');
- $block_params['pass_params'] = 'true';
- $block_params['column_width'] = $params['column_width'] = 100 / $columns;
- $block_start_row_params = $this->prepareTagParams($params);
- $block_start_row_params['name'] = $this->SelectParam($params, 'row_start_render_as,block_row_start,row_start_block');
-
- $block_end_row_params=$this->prepareTagParams($params);
- $block_end_row_params['name'] = $this->SelectParam($params, 'row_end_render_as,block_row_end,row_end_block');
-
- $block_empty_cell_params = $this->prepareTagParams($params);
- $block_empty_cell_params['name'] = $this->SelectParam($params, 'empty_cell_render_as,block_empty_cell,empty_cell_block');
-
- $i=0;
-
- $backup_id=$this->Application->GetVar($this->Prefix."_id");
- $displayed = array();
- $column_number = 1;
-
- $cache_mod_rw = $this->Application->getUnitOption($this->Prefix, 'CacheModRewrite') && $this->Application->RewriteURLs();
- $limit = isset($params['limit']) ? $params['limit'] : false;
-
- while (!$list->EOL() && (!$limit || $i<$limit))
- {
- $this->Application->SetVar( $this->getPrefixSpecial().'_id', $list->GetDBField($id_field) ); // for edit/delete links using GET
- $this->Application->SetVar( $this->Prefix.'_id', $list->GetDBField($id_field) );
- $block_params['is_last'] = ($i == $list->SelectedCount - 1);
- $block_params['last_row'] = ($i + (($i+1) % $columns) >= $list->SelectedCount - 1);
- $block_params['not_last'] = !$block_params['is_last']; // for front-end
-
- if ($cache_mod_rw) {
- if ($this->Prefix == 'c') {
- // for listing subcategories in category
- $this->Application->setCache('filenames', $this->Prefix.'_'.$list->GetDBField($id_field), $list->GetDBField('NamedParentPath'));
- $this->Application->setCache('category_tree', $list->GetDBField($id_field), $list->GetDBField('TreeLeft') . ';' . $list->GetDBField('TreeRight'));
- } else {
- // for listing items in category
- $this->Application->setCache('filenames', 'c_'.$list->GetDBField('CategoryId'), $list->GetDBField('CategoryFilename'));
- $this->Application->setCache('filenames', $this->Prefix.'_'.$list->GetDBField($id_field), $list->GetDBField('Filename'));
- }
- }
-
- if ($i % $columns == 0) {
- // record in this iteration is first in row, then open row
- $column_number = 1;
- $o.= $block_start_row_params['name'] ?
- $this->Application->ParseBlock($block_start_row_params, 1) :
- (!isset($params['no_table']) ? '
' : '');
- }
- else {
- $column_number++;
- }
-
- $block_params['first_col'] = $column_number == 1 ? 1 : 0;
- $block_params['last_col'] = $column_number == $columns ? 1 : 0;
-
- $block_params['column_number'] = $column_number;
- $block_params['num'] = ($i+1);
-
- $this->PrepareListElementParams($list, $block_params); // new, no need to rewrite PrintList
- $o.= $this->Application->ParseBlock($block_params, 1);
- array_push($displayed, $list->GetDBField($id_field));
-
- if($direction == 'V' && $list->SelectedCount % $columns > 0 && $column_number == ($columns - 1) && ceil(($i + 1) / $columns) > $list->SelectedCount % ceil($list->SelectedCount / $columns)) {
- // if vertical output, then draw empty cells vertically, not horizontally
- $o .= $block_empty_cell_params['name'] ? $this->Application->ParseBlock($block_empty_cell_params, 1) : ' | ';
- $i++;
- }
-
- if (($i + 1) % $columns == 0) {
- // record in next iteration is first in row too, then close this row
- $o.= $block_end_row_params['name'] ?
- $this->Application->ParseBlock($block_end_row_params, 1) :
- (!isset($params['no_table']) ? '
' : '');
- }
-
- $list->GoNext();
- $i++;
- }
-
- // append empty cells in place of missing cells in last row
- while ($i % $columns != 0) {
- // until next cell will be in new row append empty cells
- $o .= $block_empty_cell_params['name'] ? $this->Application->ParseBlock($block_empty_cell_params, 1) : ' | ';
-
- if (($i+1) % $columns == 0) {
- // record in next iteration is first in row too, then close this row
- $o .= $block_end_row_params['name'] ? $this->Application->ParseBlock($block_end_row_params, 1) : '';
- }
- $i++;
- }
-
- $cur_displayed = $this->Application->GetVar($this->Prefix.'_displayed_ids');
- if (!$cur_displayed) {
- $cur_displayed = Array();
- }
- else {
- $cur_displayed = explode(',', $cur_displayed);
- }
-
- $displayed = array_unique(array_merge($displayed, $cur_displayed));
- $this->Application->SetVar($this->Prefix.'_displayed_ids', implode(',',$displayed));
-
- $this->Application->SetVar( $this->Prefix.'_id', $backup_id);
- $this->Application->SetVar( $this->getPrefixSpecial().'_id', '');
-
- if (isset($params['more_link_render_as'])) {
- $block_params = $params;
- $params['render_as'] = $params['more_link_render_as'];
- $o .= $this->MoreLink($params);
- }
-
- return $o;
- }
-
- /**
- * Allows to modify block params & current list record before PrintList parses record
- *
- * @param kDBList $object
- * @param Array $block_params
- */
- function PrepareListElementParams(&$object, &$block_params)
- {
-// $fields_hash =& $object->getCurrentRecord();
-
- }
-
- function MoreLink($params)
- {
- $per_page = $this->SelectParam($params, 'per_page,max_items');
- if ($per_page !== false) $params['per_page'] = $per_page;
- $list =& $this->GetList($params);
- if ($list->PerPage < $list->RecordsCount) {
- $block_params = $this->prepareTagParams($params);
- $block_params['name'] = $this->SelectParam($params, 'render_as,block');
-
- return $this->Application->ParseBlock($block_params);
- }
- }
-
- function NotLastItem($params)
- {
- $object =& $this->getList($params); // maybe we should use $this->GetList($params) instead
- return ($object->CurrentIndex < min($object->PerPage == -1 ? $object->RecordsCount : $object->PerPage, $object->RecordsCount) - 1);
- }
-
- function PageLink($params)
- {
- $t = isset($params['template']) ? $params['template'] : '';
- unset($params['template']);
-
- if (!$t) $t = $this->Application->GetVar('t');
-
- if (isset($params['page'])) {
- $this->Application->SetVar($this->getPrefixSpecial().'_Page', $params['page']);
- unset($params['page']);
- }
-
- if (!isset($params['pass'])) {
- $params['pass'] = 'm,'.$this->getPrefixSpecial();
- }
-
- return $this->Application->HREF($t, '', $params);
- }
-
- function ColumnWidth($params)
- {
- $columns = $this->Application->Parser->GetParam('columns');
- return round(100/$columns).'%';
- }
-
- /**
- * Append prefix and special to tag
- * params (get them from tagname) like
- * they were really passed as params
- *
- * @param Array $tag_params
- * @return Array
- * @access protected
- */
- function prepareTagParams($tag_params = Array())
- {
- /*if (isset($tag_params['list_name'])) {
- $list =& $this->GetList($tag_params);
- $this->Init($list->Prefix, $list->Special);
- }*/
-
- $ret = $tag_params;
- $ret['Prefix'] = $this->Prefix;
- $ret['Special'] = $this->Special;
- $ret['PrefixSpecial'] = $this->getPrefixSpecial();
- return $ret;
- }
-
- function GetISO($currency)
- {
- if ($currency == 'selected') {
- $iso = $this->Application->RecallVar('curr_iso');
- }
- elseif ($currency == 'primary' || $currency == '') {
- $iso = $this->Application->GetPrimaryCurrency();
- }
- else { //explicit currency
- $iso = $currency;
- }
- return $iso;
- }
-
- function ConvertCurrency($value, $iso)
- {
- $converter =& $this->Application->recallObject('kCurrencyRates');
- // convery primary currency to selected (if they are the same, converter will just return)
- $value = $converter->Convert($value, 'PRIMARY', $iso);
- return $value;
- }
-
- function AddCurrencySymbol($value, $iso)
- {
- $currency =& $this->Application->recallObject('curr.-'.$iso, null, Array('skip_autoload' => true));
- if( !$currency->isLoaded() ) $currency->Load($iso, 'ISO');
-
- $symbol = $currency->GetDBField('Symbol');
- if (!$symbol) $symbol = $currency->GetDBField('ISO').' ';
- if ($currency->GetDBField('SymbolPosition') == 0) {
- $value = $symbol.$value;
- }
- if ($currency->GetDBField('SymbolPosition') == 1) {
- $value = $value.$symbol;
- }
- return $value;
- }
-
- /**
- * Get's requested field value
- *
- * @param Array $params
- * @return string
- * @access public
- */
- function Field($params)
- {
- $field = $this->SelectParam($params, 'name,field');
-
- if( !$this->Application->IsAdmin() ) $params['no_special'] = 'no_special';
-
- $object =& $this->getObject($params);
-
- if ( $this->HasParam($params, 'db') )
- {
- $value = $object->GetDBField($field);
- }
- else
- {
- if( $this->HasParam($params, 'currency') )
- {
- $iso = $this->GetISO($params['currency']);
- $original = $object->GetDBField($field);
- $value = $this->ConvertCurrency($original, $iso);
- $object->SetDBField($field, $value);
- $object->Fields[$field]['converted'] = true;
- }
-
- $format = getArrayValue($params, 'format');
- if (!$format || $format == '$format') {
- $format = null;
- }
-
- $value = $object->GetField($field, $format);
-
- if( $this->SelectParam($params, 'negative') )
- {
- if(strpos($value, '-') === 0)
- {
- $value = substr($value, 1);
- }
- else
- {
- $value = '-'.$value;
- }
- }
-
- if( $this->HasParam($params, 'currency') )
- {
- $value = $this->AddCurrencySymbol($value, $iso);
- $params['no_special'] = 1;
- }
- }
-
- if( !$this->HasParam($params, 'no_special') ) $value = htmlspecialchars($value);
- if( getArrayValue($params,'checked' ) ) $value = ($value == ( isset($params['value']) ? $params['value'] : 1)) ? 'checked' : '';
- if( isset($params['plus_or_as_label']) ) {
- $value = substr($value, 0,1) == '+' ? substr($value, 1) : $this->Application->Phrase($value);
- }
- elseif( isset($params['as_label']) && $params['as_label'] ) $value = $this->Application->Phrase($value);
-
- $first_chars = $this->SelectParam($params,'first_chars,cut_first');
- if($first_chars)
- {
- $needs_cut = mb_strlen($value) > $first_chars;
- $value = mb_substr($value, 0, $first_chars);
- if ($needs_cut) $value .= ' ...';
- }
- if( getArrayValue($params,'nl2br' ) ) $value = nl2br($value);
-
- if ($value != '') $this->Application->Parser->DataExists = true;
-
- if( $this->HasParam($params, 'currency') )
- {
- //restoring value in original currency, for other Field tags to work properly
- $object->SetDBField($field, $original);
- }
-
- return $value;
- }
-
- function SetField($params)
- {
- //
-
- $object =& $this->getObject($params);
- $dst_field = $this->SelectParam($params, 'name,field');
-
- list($prefix_special, $src_field) = explode(':', $params['src']);
- $src_object =& $this->Application->recallObject($prefix_special);
- $object->SetDBField($dst_field, $src_object->GetDBField($src_field));
- }
-
- /**
- * Checks if parameter is passed
- * Note: works like Tag and line simple method too
- *
- * @param Array $params
- * @param string $param_name
- * @return bool
- */
- function HasParam($params, $param_name = null)
- {
- if( !isset($param_name) )
- {
- $param_name = $this->SelectParam($params, 'name');
- $params = $this->Application->Parser->Params;
- }
- $value = isset($params[$param_name]) ? $params[$param_name] : false;
- return $value && ($value != '$'.$param_name);
- }
-
- function PhraseField($params)
- {
- $field_label = $this->Field($params);
- $translation = $this->Application->Phrase( $field_label );
- return $translation;
- }
-
- function Error($params)
- {
- $field = $this->SelectParam($params, 'name,field');
- $object =& $this->getObject($params);
- $msg = $object->GetErrorMsg($field, false);
- return $msg;
- }
-
- function HasError($params)
- {
- if ($params['field'] == 'any')
- {
- $object =& $this->getObject($params);
-
- $skip_fields = getArrayValue($params, 'except');
- $skip_fields = $skip_fields ? explode(',', $skip_fields) : Array();
-
- return $object->HasErrors($skip_fields);
- }
- else
- {
- $fields = $this->SelectParam($params, 'field,fields');
- $fields = explode(',', $fields);
- $res = false;
- foreach($fields as $field)
- {
- $params['field'] = $field;
- $res = $res || ($this->Error($params) != '');
- }
- return $res;
- }
- }
-
- function ErrorWarning($params)
- {
- if (!isset($params['field'])) {
- $params['field'] = 'any';
- }
- if ($this->HasError($params)) {
- $params['prefix'] = $this->getPrefixSpecial();
- return $this->Application->ParseBlock($params);
- }
- }
-
- function IsRequired($params)
- {
- $field = $params['field'];
- $object =& $this->getObject($params);;
-
- $formatter_class = getArrayValue($object->Fields, $field, 'formatter');
- if ($formatter_class == 'kMultiLanguage')
- {
- $formatter =& $this->Application->recallObject($formatter_class);
- $field = $formatter->LangFieldName($field);
- }
-
- $options = $object->GetFieldOptions($field);
- return getArrayValue($options,'required');
- }
-
- function FieldOption($params)
- {
- $object =& $this->getObject($params);;
- $options = $object->GetFieldOptions($params['field']);
- $ret = isset($options[$params['option']]) ? $options[$params['option']] : '';
- if (isset($params['as_label']) && $params['as_label']) $ret = $this->Application->ReplaceLanguageTags($ret);
- return $ret;
- }
-
- function PredefinedOptions($params)
- {
- $object =& $this->getObject($params);
-
- $field = $params['field'];
- $value = array_key_exists('value', $params) ? $params['value'] : $object->GetDBField($field);
- $field_options = $object->GetFieldOptions($field);
- if (!array_key_exists('options', $field_options) || !is_array($field_options['options'])) {
- trigger_error('Options not defined for '.$object->Prefix.' field '.$field.'', E_USER_WARNING);
- return '';
- }
-
- $options = $field_options['options'];
-
- if ($this->HasParam($params, 'has_empty')) {
- $empty_value = array_key_exists('empty_value', $params) ? $params['empty_value'] : '';
- $options = array_merge_recursive2(Array ($empty_value => ''), $options); // don't use other array merge function, because they will reset keys !!!
- }
-
- $block_params = $this->prepareTagParams($params);
- $block_params['name'] = $this->SelectParam($params, 'render_as,block');
- $block_params['pass_params'] = 'true';
- if (method_exists($object, 'EOL') && count($object->Records) == 0) {
- // for drawing grid column filter
- $block_params['field_name'] = '';
- }
- else {
- $block_params['field_name'] = $this->InputName($params); // depricated (produces warning when used as grid filter), but used in Front-End (submission create), admin (submission view)
- }
-
- $selected_param_name = getArrayValue($params, 'selected_param');
- if (!$selected_param_name) {
- $selected_param_name = $params['selected'];
- }
- $selected = $params['selected'];
-
- $o = '';
- if ($this->HasParam($params, 'no_empty') && !getArrayValue($options, '')) {
- // removes empty option, when present (needed?)
- array_shift($options);
- }
-
- if (strpos($value, '|') !== false) {
- // multiple checkboxes OR multiselect
- $value = explode('|', substr($value, 1, -1) );
- foreach ($options as $key => $val) {
- $block_params['key'] = $key;
- $block_params['option'] = $val;
- $block_params[$selected_param_name] = ( in_array($key, $value) ? ' '.$selected : '');
- $o .= $this->Application->ParseBlock($block_params, 1);
- }
- }
- else {
- // single selection radio OR checkboxes OR dropdown
- foreach ($options as $key => $val) {
- $block_params['key'] = $key;
- $block_params['option'] = $val;
- $block_params[$selected_param_name] = (strlen($key) == strlen($value) && ($key == $value) ? ' '.$selected : '');
- $o .= $this->Application->ParseBlock($block_params, 1);
- }
- }
- return $o;
- }
-
- function PredefinedSearchOptions($params)
- {
- $object =& $this->getObject($params);
- /* @var $object kDBList */
-
- $params['value'] = $this->SearchField($params);
-
- return $this->PredefinedOptions($params);
- }
-
- function Format($params)
- {
- $field = $this->SelectParam($params, 'name,field');
- $object =& $this->getObject($params);
-
- $options = $object->GetFieldOptions($field);
-
- $format = $options[ $this->SelectParam($params, 'input_format') ? 'input_format' : 'format' ];
-
- $formatter_class = getArrayValue($options,'formatter');
- if ($formatter_class) {
- $formatter =& $this->Application->recallObject($formatter_class);
- $human_format = getArrayValue($params,'human');
- $edit_size = getArrayValue($params,'edit_size');
- $sample = getArrayValue($params,'sample');
- if($sample)
- {
- return $formatter->GetSample($field, $options, $object);
- }
- elseif($human_format || $edit_size)
- {
- $format = $formatter->HumanFormat($format);
- return $edit_size ? strlen($format) : $format;
- }
- }
-
- return $format;
- }
-
- /**
- * Returns grid padination information
- * Can return links to pages
- *
- * @param Array $params
- * @return mixed
- */
- function PageInfo($params)
- {
- $object =& $this->GetList($params);
- /* @var $object kDBList */
-
- $type = $params['type'];
- unset($params['type']); // remove parameters used only by current tag
-
- $ret = '';
- switch ($type) {
- case 'current':
- $ret = $object->Page;
- break;
-
- case 'total':
- $ret = $object->GetTotalPages();
- break;
-
- case 'prev':
- $ret = $object->Page > 1 ? $object->Page - 1 : false;
- break;
-
- case 'next':
- $ret = $object->Page < $object->GetTotalPages() ? $object->Page + 1 : false;
- break;
- }
-
- if ($ret && isset($params['as_link']) && $params['as_link']) {
- unset($params['as_link']); // remove parameters used only by current tag
- $params['page'] = $ret;
- $current_page = $object->Page; // backup current page
- $ret = $this->PageLink($params);
- $this->Application->SetVar($object->getPrefixSpecial().'_Page', $current_page); // restore page
- }
-
- return $ret;
- }
-
- /**
- * Print grid pagination using
- * block names specified
- *
- * @param Array $params
- * @return string
- * @access public
- */
- function PrintPages($params)
- {
- $list =& $this->GetList($params);
- $prefix_special = $list->getPrefixSpecial();
- $total_pages = $list->GetTotalPages();
-
- if ($total_pages > 1) $this->Application->Parser->DataExists = true;
-
- if($total_pages == 0) $total_pages = 1; // display 1st page as selected in case if we have no pages at all
- $o = '';
-
- // what are these 2 lines for?
- $this->Application->SetVar($prefix_special.'_event','');
- $this->Application->SetVar($prefix_special.'_id','');
-
- $current_page = $list->Page; // $this->Application->RecallVar($prefix_special.'_Page');
-
- $block_params = $this->prepareTagParams($params);
-
- $split = ( isset($params['split'] ) ? $params['split'] : 10 );
-
- $split_start = $current_page - ceil($split/2);
- if ($split_start < 1){
- $split_start = 1;
- }
- $split_end = $split_start + $split-1;
-
- if ($split_end > $total_pages) {
- $split_end = $total_pages;
- $split_start = max($split_end - $split + 1, 1);
- }
-
- if ($current_page > 1){
- $prev_block_params = $this->prepareTagParams();
-
- if ($total_pages > $split){
- $prev_block_params['page'] = max($current_page-$split, 1);
- $prev_block_params['name'] = $this->SelectParam($params, 'prev_page_split_render_as,prev_page_split_block');
- if ($prev_block_params['name']){
- $o .= $this->Application->ParseBlock($prev_block_params, 1);
- }
- }
-
- $prev_block_params['name'] = 'page';
- $prev_block_params['page'] = $current_page-1;
- $prev_block_params['name'] = $this->SelectParam($params, 'prev_page_render_as,block_prev_page,prev_page_block');
- if ($prev_block_params['name']) {
- $this->Application->SetVar($this->getPrefixSpecial().'_Page', $current_page-1);
- $o .= $this->Application->ParseBlock($prev_block_params, 1);
- }
- }
- else {
- if ( $no_prev_page_block = $this->SelectParam($params, 'no_prev_page_render_as,block_no_prev_page') ) {
- $block_params['name'] = $no_prev_page_block;
- $o .= $this->Application->ParseBlock($block_params, 1);
- }
- }
-
- $separator_params['name'] = $this->SelectParam($params, 'separator_render_as,block_separator');
- for ($i = $split_start; $i <= $split_end; $i++)
- {
- if ($i == $current_page) {
- $block = $this->SelectParam($params, 'current_render_as,active_render_as,block_current,active_block');
- }
- else {
- $block = $this->SelectParam($params, 'link_render_as,inactive_render_as,block_link,inactive_block');
- }
-
- $block_params['name'] = $block;
- $block_params['page'] = $i;
- $this->Application->SetVar($this->getPrefixSpecial().'_Page', $i);
- $o .= $this->Application->ParseBlock($block_params, 1);
-
- if ($this->SelectParam($params, 'separator_render_as,block_separator')
- && $i < $split_end)
- {
- $o .= $this->Application->ParseBlock($separator_params, 1);
- }
- }
-
- if ($current_page < $total_pages){
- $next_block_params = $this->prepareTagParams();
- $next_block_params['page']=$current_page+1;
- $next_block_params['name'] = $this->SelectParam($params, 'next_page_render_as,block_next_page,next_page_block');
- if ($next_block_params['name']){
- $this->Application->SetVar($this->getPrefixSpecial().'_Page', $current_page+1);
- $o .= $this->Application->ParseBlock($next_block_params, 1);
- }
- if ($total_pages > $split){
- $next_block_params['page']=min($current_page+$split, $total_pages);
- $next_block_params['name'] = $this->SelectParam($params, 'next_page_split_render_as,next_page_split_block');
- if ($next_block_params['name']){
- $o .= $this->Application->ParseBlock($next_block_params, 1);
- }
- }
- }
- else {
- if ( $no_next_page_block = $this->SelectParam($params, 'no_next_page_render_as,block_no_next_page') ) {
- $block_params['name'] = $no_next_page_block;
- $o .= $this->Application->ParseBlock($block_params, 1);
- }
- }
-
- $this->Application->SetVar($this->getPrefixSpecial().'_Page', $current_page);
- return $o;
- }
-
- /**
- * Print grid pagination using
- * block names specified
- *
- * @param Array $params
- * @return string
- * @access public
- */
- function PaginationBar($params)
- {
- return $this->PrintPages($params);
- }
-
-
- /**
- * Returns field name (processed by kMultiLanguage formatter
- * if required) and item's id from it's IDField or field required
- *
- * @param Array $params
- * @return Array (id,field)
- * @access private
- */
- function prepareInputName($params)
- {
- $field = $this->SelectParam($params, 'name,field');
- $object =& $this->getObject($params);
-
- $formatter_class = getArrayValue($object->Fields, $field, 'formatter');
- if ($formatter_class == 'kMultiLanguage') {
- $formatter =& $this->Application->recallObject($formatter_class);
- /* @var $formatter kMultiLanguage */
-
- $force_primary = isset($object->Fields[$field]['force_primary']) && $object->Fields[$field]['force_primary'];
- $field = $formatter->LangFieldName($field, $force_primary);
- }
-
- if (array_key_exists('force_id', $params)) {
- $id = $params['force_id'];
- }
- else {
- $id_field = getArrayValue($params, 'IdField');
- $id = $id_field ? $object->GetDBField($id_field) : $object->GetID();
- }
-
- return Array($id, $field);
- }
-
-
- /**
- * Returns input field name to
- * be placed on form (for correct
- * event processing)
- *
- * @param Array $params
- * @return string
- * @access public
- */
- function InputName($params)
- {
- list($id, $field) = $this->prepareInputName($params);
-
- $ret = $this->getPrefixSpecial().'['.$id.']['.$field.']';
- if( getArrayValue($params, 'as_preg') ) $ret = preg_quote($ret, '/');
- return $ret;
- }
-
- /**
- * Allows to override various field options through hidden fields with specific names in submit.
- * This tag generates this special names
- *
- * @param Array $params
- * @return string
- * @author Alex
- */
- function FieldModifier($params)
- {
- list($id, $field) = $this->prepareInputName($params);
-
- $ret = 'field_modifiers['.$this->getPrefixSpecial().']['.$field.']['.$params['type'].']';
- if( getArrayValue($params, 'as_preg') ) $ret = preg_quote($ret, '/');
-
- if (isset($params['value'])) {
- $object =& $this->getObject($params);
- $field_modifiers[$field][$params['type']] = $params['value'];
- $object->ApplyFieldModifiers($field_modifiers);
- }
-
- return $ret;
- }
-
- /**
- * Returns index where 1st changable sorting field begins
- *
- * @return int
- * @access private
- */
- function getUserSortIndex()
- {
- $list_sortings = $this->Application->getUnitOption($this->Prefix, 'ListSortings');
- $sorting_prefix = getArrayValue($list_sortings, $this->Special) ? $this->Special : '';
-
- $user_sorting_start = 0;
- if ( $forced_sorting = getArrayValue($list_sortings, $sorting_prefix, 'ForcedSorting') ) {
- $user_sorting_start = count($forced_sorting);
- }
- return $user_sorting_start;
- }
-
- /**
- * Returns order direction for given field
- *
- *
- *
- * @param Array $params
- * @return string
- * @access public
- */
- function Order($params)
- {
- $field = $params['field'];
- $user_sorting_start = $this->getUserSortIndex();
-
- $list =& $this->GetList($params);
-
- if ($list->GetOrderField($user_sorting_start) == $field)
- {
- return strtolower($list->GetOrderDirection($user_sorting_start));
- }
- elseif($this->Application->ConfigValue('UseDoubleSorting') && $list->GetOrderField($user_sorting_start+1) == $field)
- {
- return '2_'.strtolower($list->GetOrderDirection($user_sorting_start+1));
- }
- else
- {
- return 'no';
- }
- }
-
- /**
- * Detects, that current sorting is not default
- *
- * @param Array $params
- * @return bool
- */
- function OrderChanged($params)
- {
- $list =& $this->GetList($params);
- $user_sorting_start = $this->getUserSortIndex();
-
- $sorting_configs = $this->Application->getUnitOption($this->Prefix, 'ConfigMapping', Array ());
- $list_sortings = $this->Application->getUnitOption($this->Prefix, 'ListSortings', Array ());
- $sorting_prefix = getArrayValue($list_sortings, $this->Special) ? $this->Special : '';
-
- if (array_key_exists('DefaultSorting1Field', $sorting_configs)) {
- $list_sortings[$sorting_prefix]['Sorting'] = Array (
- $this->Application->ConfigValue($sorting_configs['DefaultSorting1Field']) => $this->Application->ConfigValue($sorting_configs['DefaultSorting1Dir']),
- $this->Application->ConfigValue($sorting_configs['DefaultSorting2Field']) => $this->Application->ConfigValue($sorting_configs['DefaultSorting2Dir']),
- );
- }
-
- $sorting = getArrayValue($list_sortings, $sorting_prefix, 'Sorting');
- $sort_fields = is_array($sorting) ? array_keys($sorting) : Array ();
-
- for ($order_number = 0; $order_number < 2; $order_number++) {
- // currect sorting in list
- $sorting_pos = $user_sorting_start + $order_number;
- $current_order_field = $list->GetOrderField($sorting_pos, true);
- $current_order_direction = $list->GetOrderDirection($sorting_pos, true);
-
- if (!$current_order_field || !$current_order_direction) {
- // no sorting defined for this sorting position
- continue;
- }
-
- // user sorting found
- if (array_key_exists($order_number, $sort_fields)) {
- // default sorting found
- $default_order_field = $sort_fields[$order_number];
- $default_order_direction = $sorting[$default_order_field];
-
- if ($current_order_field != $default_order_field || $current_order_direction != $default_order_direction) {
- // #1. user sorting differs from default sorting -> changed
- return true;
- }
- }
- else {
- // #2. user sorting + no default sorting -> changed
- return true;
- }
- }
-
- // #3. user sorting match default or not defined -> not changed
- return false;
- }
-
- /**
- * Get's information of sorting field at "pos" position,
- * like sorting field name (type="field") or sorting direction (type="direction")
- *
- * @param Array $params
- * @return mixed
- */
- function OrderInfo($params)
- {
- $user_sorting_start = $this->getUserSortIndex() + --$params['pos'];
- $list =& $this->GetList($params);
-// $object =& $this->Application->recallObject( $this->getPrefixSpecial() );
-
- if($params['type'] == 'field') return $list->GetOrderField($user_sorting_start);
- if($params['type'] == 'direction') return $list->GetOrderDirection($user_sorting_start);
- }
-
- /**
- * Checks if sorting field/direction matches passed field/direction parameter
- *
- * @param Array $params
- * @return bool
- */
- function IsOrder($params)
- {
- $params['type'] = isset($params['field']) ? 'field' : 'direction';
- $value = $this->OrderInfo($params);
-
- if( isset($params['field']) ) return $params['field'] == $value;
- if( isset($params['direction']) ) return $params['direction'] == $value;
- }
-
- /**
- * Returns list perpage
- *
- * @param Array $params
- * @return int
- */
- function PerPage($params)
- {
- $object =& $this->getObject($params);
- return $object->PerPage;
- }
-
- /**
- * Checks if list perpage matches value specified
- *
- * @param Array $params
- * @return bool
- */
- function PerPageEquals($params)
- {
- $object =& $this->getObject($params);
- return $object->PerPage == $params['value'];
- }
-
- function SaveEvent($params)
- {
- // SaveEvent is set during OnItemBuild, but we may need it before any other tag calls OnItemBuild
- $object =& $this->getObject($params);
- return $this->Application->GetVar($this->getPrefixSpecial().'_SaveEvent');
- }
-
- function NextId($params)
- {
- $object =& $this->getObject($params);
-
- $wid = $this->Application->GetTopmostWid($this->Prefix);
- $session_name = rtrim($this->getPrefixSpecial().'_selected_ids_'.$wid, '_');
- $ids = explode(',', $this->Application->RecallVar($session_name));
-
- $cur_id = $object->GetID();
-
- $i = array_search($cur_id, $ids);
- if ($i !== false) {
- return $i < count($ids) - 1 ? $ids[$i + 1] : '';
- }
- return '';
- }
-
- function PrevId($params)
- {
- $object =& $this->getObject($params);
-
- $wid = $this->Application->GetTopmostWid($this->Prefix);
- $session_name = rtrim($this->getPrefixSpecial().'_selected_ids_'.$wid, '_');
- $ids = explode(',', $this->Application->RecallVar($session_name));
-
- $cur_id = $object->GetID();
-
- $i = array_search($cur_id, $ids);
- if ($i !== false) {
- return $i > 0 ? $ids[$i - 1] : '';
- }
- return '';
- }
-
- function IsSingle($params)
- {
- return ($this->NextId($params) === '' && $this->PrevId($params) === '');
- }
-
- function IsLast($params)
- {
- return ($this->NextId($params) === '');
- }
-
- function IsFirst($params)
- {
- return ($this->PrevId($params) === '');
- }
-
- /**
- * Checks if field value is equal to proposed one
- *
- * @param Array $params
- * @return bool
- */
- function FieldEquals($params)
- {
- $object =& $this->getObject($params);
- $ret = $object->GetDBField($this->SelectParam($params, 'name,field')) == $params['value'];
-// if( getArrayValue($params,'inverse') ) $ret = !$ret;
- return $ret;
- }
-
- /**
- * Checks, that grid has icons defined and they should be shown
- *
- * @param Array $params
- * @return bool
- */
- function UseItemIcons($params)
- {
- $grids = $this->Application->getUnitOption($this->Prefix, 'Grids');
- return array_key_exists('Icons', $grids[ $params['grid'] ]);
- }
-
- /**
- * Returns corresponding to grid layout selector column width
- *
- * @param Array $params
- * @return int
- */
- function GridSelectorColumnWidth($params)
- {
- $width = 0;
- if ($params['selector']) {
- $width += $params['selector_width'];
- }
-
- if ($this->UseItemIcons($params)) {
- $width += $params['icon_width'];
- }
-
- return $width;
- }
-
- /**
- * Returns grids item selection mode (checkbox, radio, )
- *
- * @param Array $params
- * @return string
- */
- function GridSelector($params)
- {
- $grids = $this->Application->getUnitOption($this->Prefix, 'Grids');
-
- return array_key_exists('Selector', $grids[ $params['grid'] ]) ? $grids[ $params['grid'] ]['Selector'] : $params['default'];
- }
-
- function ItemIcon($params)
- {
- $object =& $this->getObject($params);
-
- $grids = $this->Application->getUnitOption($this->Prefix,'Grids');
- $icons =& $grids[ $params['grid'] ]['Icons'];
-
- $key = '';
- $status_fields = $this->Application->getUnitOption($this->Prefix,'StatusField');
- if(!$status_fields) return $icons['default'];
-
- foreach($status_fields as $status_field)
- {
- $key .= $object->GetDBField($status_field).'_';
- }
- $key = rtrim($key,'_');
- $value = ($key !== false) ? $key : 'default';
-
- return isset($icons[$value]) ? $icons[$value] : $icons['default'];
- }
-
- /**
- * Generates bluebar title + initializes prefixes used on page
- *
- * @param Array $params
- * @return string
- */
- function SectionTitle($params)
- {
- $preset_name = replaceModuleSection($params['title_preset']);
- $title_presets = $this->Application->getUnitOption($this->Prefix,'TitlePresets');
- $title_info = getArrayValue($title_presets, $preset_name);
- if ($title_info === false) {
- $title = str_replace('#preset_name#', $preset_name, $params['title']);
- if ($this->Application->ConfigValue('UseSmallHeader') && isset($params['group_title']) && $params['group_title']) {
- $title .= ' - '.$params['group_title'];
- }
- return $title;
- }
-
- if (getArrayValue($title_presets,'default')) {
- // use default labels + custom labels specified in preset used
- $title_info = array_merge_recursive2($title_presets['default'], $title_info);
- }
-
- $title = $title_info['format'];
-
- // 1. get objects in use for title construction
- $objects = Array();
- $object_status = Array();
- $status_labels = Array();
-
- $prefixes = getArrayValue($title_info,'prefixes');
- $all_tag_params = getArrayValue($title_info,'tag_params');
- if ($prefixes) {
- // extract tag_perams passed directly to SectionTitle tag for specific prefix
- foreach ($params as $tp_name => $tp_value) {
- if (preg_match('/(.*)\[(.*)\]/', $tp_name, $regs)) {
- $all_tag_params[ $regs[1] ][ $regs[2] ] = $tp_value;
- unset($params[$tp_name]);
- }
- }
-
- $tag_params = Array();
- foreach ($prefixes as $prefix_special) {
- $prefix_data = $this->Application->processPrefix($prefix_special);
- $prefix_data['prefix_special'] = rtrim($prefix_data['prefix_special'],'.');
-
- if ($all_tag_params) {
- $tag_params = getArrayValue($all_tag_params, $prefix_data['prefix_special']);
- if (!$tag_params) $tag_params = Array();
- }
-
- $tag_params = array_merge_recursive2($params, $tag_params);
- $objects[ $prefix_data['prefix_special'] ] =& $this->Application->recallObject($prefix_data['prefix_special'], $prefix_data['prefix'], $tag_params);
- $object_status[ $prefix_data['prefix_special'] ] = $objects[ $prefix_data['prefix_special'] ]->IsNewItem() ? 'new' : 'edit';
-
- // a. set object's status field (adding item/editing item) for each object in title
- if (getArrayValue($title_info[ $object_status[ $prefix_data['prefix_special'] ].'_status_labels' ],$prefix_data['prefix_special'])) {
- $status_labels[ $prefix_data['prefix_special'] ] = $title_info[ $object_status[ $prefix_data['prefix_special'] ].'_status_labels' ][ $prefix_data['prefix_special'] ];
- $title = str_replace('#'.$prefix_data['prefix_special'].'_status#', $status_labels[ $prefix_data['prefix_special'] ], $title);
- }
-
- // b. setting object's titlefield value (in titlebar ONLY) to default in case if object beeing created with no titlefield filled in
- if ($object_status[ $prefix_data['prefix_special'] ] == 'new') {
- $new_value = $this->getInfo( $objects[ $prefix_data['prefix_special'] ], 'titlefield' );
- if(!$new_value && getArrayValue($title_info['new_titlefield'],$prefix_data['prefix_special']) ) $new_value = $this->Application->Phrase($title_info['new_titlefield'][ $prefix_data['prefix_special'] ]);
- $title = str_replace('#'.$prefix_data['prefix_special'].'_titlefield#', $new_value, $title);
- }
- }
- }
-
- // replace to section title
- $section = array_key_exists('section', $params) ? $params['section'] : false;
- if ($section) {
- $sections_helper =& $this->Application->recallObject('SectionsHelper');
- /* @var $sections_helper kSectionsHelper */
-
- $section_data =& $sections_helper->getSectionData($section);
- $title = str_replace('#section_label#', '!' . $section_data['label'] . '!', $title);
- }
-
- // 2. replace phrases if any found in format string
- $title = $this->Application->ReplaceLanguageTags($title, false);
-
- // 3. find and replace any replacement vars
- preg_match_all('/#(.*_.*)#/Uis',$title,$rets);
- if ($rets[1]) {
- $replacement_vars = array_keys( array_flip($rets[1]) );
- foreach ($replacement_vars as $replacement_var) {
- $var_info = explode('_',$replacement_var,2);
- $object =& $objects[ $var_info[0] ];
- $new_value = $this->getInfo($object,$var_info[1]);
- $title = str_replace('#'.$replacement_var.'#', $new_value, $title);
- }
- }
-
- // replace trailing spaces inside title preset + '' occurences into single space
- $title = preg_replace('/[ ]*\'\'[ ]*/', ' ', $title);
-
- if ($this->Application->ConfigValue('UseSmallHeader') && isset($params['group_title']) && $params['group_title']) {
- $title .= ' - '.$params['group_title'];
- }
-
- $cut_first = getArrayValue($params, 'cut_first');
- if ($cut_first && mb_strlen($title) > $cut_first) {
- if (!preg_match('/(.*)<\/a>/',$title)) {
- $title = mb_substr($title, 0, $cut_first).' ...';
- }
- }
-
- return $title;
- }
-
- function getInfo(&$object, $info_type)
- {
- switch ($info_type)
- {
- case 'titlefield':
- $field = $this->Application->getUnitOption($object->Prefix,'TitleField');
- return $field !== false ? $object->GetField($field) : 'TitleField Missing';
- break;
-
- case 'recordcount':
- $of_phrase = $this->Application->Phrase('la_of');
- return $object->NoFilterCount != $object->RecordsCount ? $object->RecordsCount.' '.$of_phrase.' '.$object->NoFilterCount : $object->RecordsCount;
- break;
-
- default:
- return $object->GetField($info_type);
- break;
- }
- }
-
- function GridInfo($params)
- {
- $object =& $this->GetList($params);
- /* @var $object kDBList */
-
- switch ($params['type']) {
- case 'filtered':
- return $object->GetRecordsCount();
- case 'total':
- return $object->GetNoFilterCount();
- case 'from':
- return $object->RecordsCount ? $object->Offset+1 : 0; //0-based
- case 'to':
- return $object->PerPage > 0 ? min($object->Offset + $object->PerPage, $object->RecordsCount) : $object->RecordsCount;
- case 'total_pages':
- return $object->GetTotalPages();
- case 'needs_pagination':
- return ($object->PerPage != -1) && (($object->RecordsCount > $object->PerPage) || ($object->Page > 1));
- }
- }
-
- /**
- * Parses block depending on its element type.
- * For radio and select elements values are taken from 'value_list_field' in key1=value1,key2=value2
- * format. key=value can be substituted by SELECT f1 AS OptionName, f2 AS OptionValue... FROM TableName
- * where prefix is TABLE_PREFIX
- *
- * @param Array $params
- * @return string
- */
- function ConfigFormElement($params)
- {
- $object =& $this->getObject($params);
- $field = $params['field'];
-
- $helper =& $this->Application->recallObject('InpCustomFieldsHelper');
- /* @var $helper InpCustomFieldsHelper */
-
- $element_type = $object->GetDBField($params['element_type_field']);
-
- if($element_type == 'label') $element_type = 'text';
- $params['name'] = $params['blocks_prefix'].$element_type;
-
- switch ($element_type) {
- case 'select':
- case 'multiselect':
- case 'radio':
- $field_options = $object->GetFieldOptions($field, 'options');
-
- if ($object->GetDBField('DirectOptions')) {
- // used for custom fields
- $field_options['options'] = $object->GetDBField('DirectOptions');
- }
- else {
- // used for configuration
- $field_options['options'] = $helper->GetValuesHash($object->GetDBField($params['value_list_field']), ',');
- }
-
- $object->SetFieldOptions($field, $field_options);
- break;
-
- case 'text':
- case 'textarea':
- $params['field_params'] = $helper->ParseConfigSQL($object->GetDBField($params['value_list_field']));
- break;
-
- case 'password':
- case 'checkbox':
- default:
- break;
- }
- return $this->Application->ParseBlock($params, 1);
- }
-
- /**
- * Get's requested custom field value
- *
- * @param Array $params
- * @return string
- * @access public
- */
- function CustomField($params)
- {
- $params['name'] = 'cust_'.$this->SelectParam($params, 'name,field');
- return $this->Field($params);
- }
-
- function CustomFieldLabel($params)
- {
- $object =& $this->getObject($params);
-
- $field = $this->SelectParam($params, 'name,field');
-
- $sql = 'SELECT FieldLabel
- FROM '.$this->Application->getUnitOption('cf', 'TableName').'
- WHERE FieldName = '.$this->Conn->qstr($field);
- return $this->Application->Phrase($this->Conn->GetOne($sql));
- }
-
- /**
- * transposes 1-dimensional array elements for vertical alignment according to given columns and per_page parameters
- *
- * @param array $arr
- * @param int $columns
- * @param int $per_page
- * @return array
- */
- function LinearToVertical(&$arr, $columns, $per_page)
- {
- $rows = $columns;
- // in case if after applying per_page limit record count less then
- // can fill requrested column count, then fill as much as we can
- $cols = min(ceil($per_page / $columns), ceil(count($arr) / $columns));
- $imatrix = array();
- for ($row = 0; $row < $rows; $row++) {
- for ($col = 0; $col < $cols; $col++) {
- $source_index = $row * $cols + $col;
- if (!isset($arr[$source_index])) {
- // in case if source array element count is less then element count in one row
- continue;
- }
- $imatrix[$col * $rows + $row] = $arr[$source_index];
- }
- }
-
- ksort($imatrix);
- return array_values($imatrix);
- }
-
- /**
- * If data was modfied & is in TempTables mode, then parse block with name passed;
- * remove modification mark if not in TempTables mode
- *
- * @param Array $params
- * @return string
- * @access public
- * @author Alexey
- */
- function SaveWarning($params)
- {
- $main_prefix = getArrayValue($params, 'main_prefix');
- if ($main_prefix && $main_prefix != '$main_prefix') {
- $top_prefix = $main_prefix;
- }
- else {
- $top_prefix = $this->Application->GetTopmostPrefix($this->Prefix);
- }
-
- $temp_tables = substr($this->Application->GetVar($top_prefix.'_mode'), 0, 1) == 't';
- $modified = $this->Application->RecallVar($top_prefix.'_modified');
-
- if ($temp_tables && $modified) {
- $block_params = $this->prepareTagParams($params);
- $block_params['name'] = $this->SelectParam($params, 'render_as,name');
- $block_params['edit_mode'] = $temp_tables ? 1 : 0;
- return $this->Application->ParseBlock($block_params);
- }
- $this->Application->RemoveVar($top_prefix.'_modified');
- return '';
- }
-
- /**
- * Returns list record count queries (on all pages)
- *
- * @param Array $params
- * @return int
- */
- function TotalRecords($params)
- {
- $list =& $this->GetList($params);
- if (!$list->Counted) $list->CountRecs();
- return $list->RecordsCount;
- }
-
- /**
- * Range filter field name
- *
- * @param Array $params
- * @return string
- */
- function SearchInputName($params)
- {
- $field = $this->SelectParam($params, 'field,name');
-
- $ret = 'custom_filters['.$this->getPrefixSpecial().']['.$params['grid'].']['.$field.']['.$params['filter_type'].']';
-
- if (isset($params['type'])) {
- $ret .= '['.$params['type'].']';
- }
-
- return $ret;
- }
-
- /**
- * Return range filter field value
- *
- * @param Array $params
- * @return string
- */
- function SearchField($params) // RangeValue
- {
- $field = $this->SelectParam($params, 'field,name');
-
- $view_name = $this->Application->RecallVar($this->getPrefixSpecial().'_current_view');
- $custom_filter = $this->Application->RecallPersistentVar($this->getPrefixSpecial().'_custom_filter.'.$view_name/*, ALLOW_DEFAULT_SETTINGS*/);
- $custom_filter = $custom_filter ? unserialize($custom_filter) : Array();
-
- if (isset($custom_filter[ $params['grid'] ][$field])) {
- $ret = $custom_filter[ $params['grid'] ][$field][ $params['filter_type'] ]['submit_value'];
- if (isset($params['type'])) {
- $ret = $ret[ $params['type'] ];
- }
-
- if( !$this->HasParam($params, 'no_special') ) $ret = htmlspecialchars($ret);
- return $ret;
- }
-
- return '';
- }
-
- function SearchFormat($params)
- {
- $field = $params['field'];
- $object =& $this->GetList($params);
-
- $options = $object->GetFieldOptions($field);
-
- $format = $options[ $this->SelectParam($params, 'input_format') ? 'input_format' : 'format' ];
-
- $formatter_class = getArrayValue($options,'formatter');
- if($formatter_class)
- {
- $formatter =& $this->Application->recallObject($formatter_class);
- $human_format = getArrayValue($params,'human');
- $edit_size = getArrayValue($params,'edit_size');
- $sample = getArrayValue($params,'sample');
- if($sample)
- {
- return $formatter->GetSample($field, $options, $object);
- }
- elseif($human_format || $edit_size)
- {
- $format = $formatter->HumanFormat($format);
- return $edit_size ? strlen($format) : $format;
- }
- }
-
- return $format;
- }
-
- /**
- * Returns error of range field
- *
- * @param unknown_type $params
- * @return unknown
- */
- function SearchError($params)
- {
- $field = $this->SelectParam($params, 'field,name');
-
- $error_var_name = $this->getPrefixSpecial().'_'.$field.'_error';
- $pseudo = $this->Application->RecallVar($error_var_name);
- if ($pseudo) {
- $this->Application->RemoveVar($error_var_name);
- }
-
- $object =& $this->Application->recallObject($this->Prefix.'.'.$this->Special.'-item', null, Array('skip_autoload' => true));
- /* @var $object kDBItem */
-
- $object->SetError($field, $pseudo);
- return $object->GetErrorMsg($field, false);
- }
-
- /**
- * Returns templates path for module, which is gathered from prefix module
- *
- * @param Array $params
- * @return string
- * @author Alex
- */
- function ModulePath($params)
- {
- $force_module = getArrayValue($params, 'module');
- if ($force_module) {
- if ($force_module == '#session#') {
- $force_module = preg_replace('/([^:]*):.*/', '\1', $this->Application->RecallVar('module'));
- if (!$force_module) $force_module = 'core';
- }
- else {
- $force_module = mb_strtolower($force_module);
- }
-
- if ($force_module == 'core') {
- $module_folder = 'core';
- }
- else {
- $module_folder = trim( $this->Application->findModule('Name', $force_module, 'Path'), '/');
- }
- }
- else {
- $module_folder = $this->Application->getUnitOption($this->Prefix, 'ModuleFolder');
- }
- return '../../'.$module_folder.'/admin_templates/';
- }
-
- /**
- * Returns object used in tag processor
- *
- * @access public
- * @return kDBBase
- */
- function &getObject($params = Array())
- {
- $object =& $this->Application->recallObject($this->getPrefixSpecial(), $this->Prefix, $params);
- if (isset($params['requery']) && $params['requery']) {
- $this->Application->HandleEvent($q_event, $this->getPrefixSpecial().':LoadItem', $params);
- }
- return $object;
- }
-
- /**
- * Checks if object propery value matches value passed
- *
- * @param Array $params
- * @return bool
- */
- function PropertyEquals($params)
- {
- $object =& $this->getObject($params);
- $property_name = $this->SelectParam($params, 'name,var,property');
- return $object->$property_name == $params['value'];
- }
-
- /**
- * Group list records by header, saves internal order in group
- *
- * @param Array $records
- * @param string $heading_field
- */
- function groupRecords(&$records, $heading_field)
- {
- $sorted = Array();
- $i = 0; $record_count = count($records);
- while ($i < $record_count) {
- $sorted[ $records[$i][$heading_field] ][] = $records[$i];
- $i++;
- }
-
- $records = Array();
- foreach ($sorted as $heading => $heading_records) {
- $records = array_merge_recursive($records, $heading_records);
- }
- }
-
- function DisplayOriginal($params)
- {
- return false;
- }
-
- function MultipleEditing($params)
- {
- $wid = $this->Application->GetTopmostWid($this->Prefix);
- $session_name = rtrim($this->getPrefixSpecial().'_selected_ids_'.$wid, '_');
- $selected_ids = explode(',', $this->Application->RecallVar($session_name));
-
- $ret = '';
- if ($selected_ids) {
- $selected_ids = explode(',', $selected_ids);
- $object =& $this->getObject( array_merge_recursive2($params, Array('skip_autoload' => true)) );
- $params['name'] = $params['render_as'];
- foreach ($selected_ids as $id) {
- $object->Load($id);
- $ret .= $this->Application->ParseBlock($params);
- }
- }
-
- return $ret;
- }
-
- /**
- * Returns import/export process percent
- *
- * @param Array $params
- * @return int
- * @deprecated Please convert to event-model, not tag based
- */
- function ExportStatus($params)
- {
- $export_object =& $this->Application->recallObject('CatItemExportHelper');
-
- $event = new kEvent($this->getPrefixSpecial().':OnDummy');
-
- $action_method = 'perform'.ucfirst($this->Special);
- $field_values = $export_object->$action_method($event);
-
- // finish code is done from JS now
- if ($field_values['start_from'] >= $field_values['total_records'])
- {
- if ($this->Special == 'import') {
- // this is used?
- $this->Application->StoreVar('PermCache_UpdateRequired', 1);
- $this->Application->Redirect('categories/cache_updater', Array('m_opener' => 'r', 'pass' => 'm', 'continue' => 1, 'no_amp' => 1));
- }
- elseif ($this->Special == 'export') {
- // used for orders export in In-Commerce
- $finish_t = $this->Application->RecallVar('export_finish_t');
- $this->Application->Redirect($finish_t, Array('pass' => 'all'));
- $this->Application->RemoveVar('export_finish_t');
- }
- }
-
- $export_options = $export_object->loadOptions($event);
- return $export_options['start_from'] * 100 / $export_options['total_records'];
- }
-
- /**
- * Returns path where exported category items should be saved
- *
- * @param Array $params
- */
- function ExportPath($params)
- {
- $ret = EXPORT_PATH.'/';
-
- if( getArrayValue($params, 'as_url') )
- {
- $ret = str_replace( FULL_PATH.'/', $this->Application->BaseURL(), $ret);
- }
-
- $export_options = unserialize($this->Application->RecallVar($this->getPrefixSpecial().'_options'));
- $ret .= $export_options['ExportFilename'].'.'.($export_options['ExportFormat'] == 1 ? 'csv' : 'xml');
-
- return $ret;
- }
-
- function FieldTotal($params)
- {
- $list =& $this->GetList($params);
-
- return $list->GetFormattedTotal($this->SelectParam($params, 'field,name'), $params['function']);
- }
-
- /**
- * Returns FCKEditor locale, that matches default site language
- *
- * @return string
- */
- function _getFCKLanguage()
- {
- static $language_code = null;
-
- if (!isset($language_code)) {
- $language_code = 'en'; // defaut value
-
- $sql = 'SELECT Locale
- FROM '. $this->Application->getUnitOption('lang', 'TableName') . '
- WHERE LanguageId = ' . $this->Application->GetDefaultLanguageId(); // $this->Application->GetVar('m_lang');
- $locale = strtolower( $this->Conn->GetOne($sql) );
-
- if (file_exists(FULL_PATH . EDITOR_PATH . 'editor/lang/' . $locale . '.js')) {
- // found language file, that exactly matches locale name (e.g. "en")
- $language_code = $locale;
- }
- else {
- $locale = explode('-', $locale);
- if (file_exists(FULL_PATH . EDITOR_PATH . 'editor/lang/' . $locale[0] . '.js')) {
- // language file matches first part of locale (e.g. "ru-RU")
- $language_code = $locale[0];
- }
- }
- }
-
- return $language_code;
- }
-
-
- function FCKEditor($params)
- {
- $params['no_special'] = 1;
- $params['format'] = array_key_exists('format', $params) ? $params['format'] . ';fck_ready' : 'fck_ready';
- $value = $this->Field($params);
- $name = array_key_exists('name', $params) ? $params['name'] : $this->InputName($params);
-
- $theme_path = substr($this->Application->GetFrontThemePath(), 1) . '/inc/';
- if (!file_exists(FULL_PATH . '/' . $theme_path . 'style.css')) {
- $theme_path = EDITOR_PATH;
- }
-
- $styles_xml = $this->Application->BaseURL() . $theme_path . 'styles.xml';
- $styles_css = $this->Application->BaseURL() . $theme_path . 'style.css';
-
- $bgcolor = array_key_exists('bgcolor', $params) ? $params['bgcolor'] : $this->Application->GetVar('bgcolor');
- if (!$bgcolor) {
- $bgcolor = '#ffffff';
- }
-
- $preview_url = '';
- $page_id = $this->Application->GetVar('c_id');
- $content_id = $this->Application->GetVar('content_id');
- if ($page_id && $content_id) {
- // editing content block from Front-End, not category in admin
- $sql = 'SELECT NamedParentPath
- FROM ' . $this->Application->getUnitOption('c', 'TableName') . '
- WHERE ' . $this->Application->getUnitOption('c', 'IDField') . ' = ' . $page_id;
- $template = strtolower( $this->Conn->GetOne($sql) );
-
- $url_params = Array ('m_cat_id' => $page_id, 'no_amp' => 1, 'editing_mode' => EDITING_MODE_CMS, 'pass' => 'm');
- $preview_url = $this->Application->HREF($template, '_FRONT_END_', $url_params, 'index.php');
- $preview_url = preg_replace('/&(admin|editing_mode)=[\d]/', '', $preview_url);
- }
-
- include_once(FULL_PATH . EDITOR_PATH . 'fckeditor.php');
-
- $oFCKeditor = new FCKeditor($name);
- $oFCKeditor->FullUrl = $this->Application->BaseURL();
- $oFCKeditor->BaseUrl = BASE_PATH . '/';
- $oFCKeditor->BasePath = BASE_PATH . EDITOR_PATH;
- $oFCKeditor->Width = $params['width'] ;
- $oFCKeditor->Height = $params['height'] ;
- $oFCKeditor->ToolbarSet = $page_id && $content_id ? 'Advanced' : 'Default';
- $oFCKeditor->Value = $value;
- $oFCKeditor->PreviewUrl = $preview_url;
- $oFCKeditor->DefaultLanguage = $this->_getFCKLanguage();
- $oFCKeditor->LateLoad = array_key_exists('late_load', $params) && $params['late_load'];
- $oFCKeditor->Config = Array (
- //'UserFilesPath' => $pathtoroot.'kernel/user_files',
- 'ProjectPath' => BASE_PATH . '/',
- 'CustomConfigurationsPath' => $this->Application->BaseURL() . 'core/admin_templates/js/inp_fckconfig.js',
- 'StylesXmlPath' => $styles_xml,
- 'EditorAreaCSS' => $styles_css,
- 'DefaultStyleLabel' => $this->Application->Phrase('la_editor_default_style'),
-// 'Debug' => 1,
- 'Admin' => 1,
- 'K4' => 1,
- 'newBgColor' => $bgcolor,
- 'PreviewUrl' => $preview_url,
- 'BaseUrl' => BASE_PATH . '/',
- 'DefaultLanguage' => $this->_getFCKLanguage(),
- 'EditorAreaStyles' => 'body { background-color: '.$bgcolor.' }',
- );
-
- return $oFCKeditor->CreateHtml();
- }
-
- function IsNewItem($params)
- {
- $object =& $this->getObject($params);
- return $object->IsNewItem();
- }
-
- /**
- * Creates link to an item including only it's id
- *
- * @param Array $params
- * @return string
- */
- function ItemLink($params)
- {
- $object =& $this->getObject($params);
-
- if (!isset($params['pass'])) {
- $params['pass'] = 'm';
- }
-
- $params[$object->getPrefixSpecial().'_id'] = $object->GetID();
-
- $m =& $this->Application->recallObject('m_TagProcessor');
- return $m->t($params);
- }
-
- /**
- * Calls OnNew event from template, when no other event submitted
- *
- * @param Array $params
- */
- function PresetFormFields($params)
- {
- $prefix = $this->getPrefixSpecial();
- if (!$this->Application->GetVar($prefix.'_event')) {
- $this->Application->HandleEvent(new kEvent($prefix.':OnNew'));
- }
- }
-
- function PrintSerializedFields($params)
- {
- $object =& $this->getObject();
- $field = $this->SelectParam($params, 'field');
- $data = unserialize($object->GetDBField($field));
- $o = '';
- $std_params['name'] = $params['render_as'];
- $std_params['field'] = $params['field'];
- $std_params['pass_params'] = true;
- foreach ($data as $key => $row) {
- $block_params = array_merge($std_params, $row, array('key'=>$key));
- $o .= $this->Application->ParseBlock($block_params);
- }
- return $o;
- }
- /**
- * Checks if current prefix is main item
- *
- * @param Array $params
- * @return bool
- */
- function IsTopmostPrefix($params)
- {
- return $this->Prefix == $this->Application->GetTopmostPrefix($this->Prefix);
- }
-
- function PermSection($params)
- {
- $section = $this->SelectParam($params, 'section,name');
- $perm_sections = $this->Application->getUnitOption($this->Prefix, 'PermSection');
- return isset($perm_sections[$section]) ? $perm_sections[$section] : '';
- }
-
- function PerPageSelected($params)
- {
- $list =& $this->GetList($params);
- return $list->PerPage == $params['per_page'] ? $params['selected'] : '';
- }
-
- /**
- * Returns prefix + generated sepcial + any word
- *
- * @param Array $params
- * @return string
- */
- function VarName($params)
- {
- $list =& $this->GetList($params);
-
- return $list->getPrefixSpecial().'_'.$params['type'];
- }
-
- /**
- * Returns edit tabs by specified preset name or false in case of error
- *
- * @param string $preset_name
- * @return mixed
- */
- function getEditTabs($preset_name)
- {
- $presets = $this->Application->getUnitOption($this->Prefix, 'EditTabPresets');
-
- if (!$presets || !isset($presets[$preset_name]) || count($presets[$preset_name]) == 0) {
- return false;
- }
-
- return count($presets[$preset_name]) > 1 ? $presets[$preset_name] : false;
- }
-
- /**
- * Detects if specified preset has tabs in it
- *
- * @param Array $params
- * @return bool
- */
- function HasEditTabs($params)
- {
- return $this->getEditTabs($params['preset_name']) ? true : false;
- }
-
- /**
- * Sorts edit tabs based on their priority
- *
- * @param Array $tab_a
- * @param Array $tab_b
- * @return int
- */
- function sortEditTabs($tab_a, $tab_b)
- {
- if ($tab_a['priority'] == $tab_b['priority']) {
- return 0;
- }
-
- return $tab_a['priority'] < $tab_b['priority'] ? -1 : 1;
- }
-
- /**
- * Prints edit tabs based on preset name specified
- *
- * @param Array $params
- * @return string
- */
- function PrintEditTabs($params)
- {
- $edit_tabs = $this->getEditTabs($params['preset_name']);
- if (!$edit_tabs) {
- return ;
- }
- usort($edit_tabs, Array (&$this, 'sortEditTabs'));
-
- $ret = '';
- $block_params = $this->prepareTagParams($params);
- $block_params['name'] = $params['render_as'];
-
- foreach ($edit_tabs as $tab_info) {
- $block_params['title'] = $tab_info['title'];
- $block_params['template'] = $tab_info['t'];
- $ret .= $this->Application->ParseBlock($block_params);
- }
-
- return $ret;
- }
-
- /**
- * Performs image resize to required dimensions and returns resulting url (cached resized image)
- *
- * @param Array $params
- * @return string
- */
- function ImageSrc($params)
- {
- $max_width = isset($params['MaxWidth']) ? $params['MaxWidth'] : false;
- $max_height = isset($params['MaxHeight']) ? $params['MaxHeight'] : false;
-
- $logo_filename = isset($params['LogoFilename']) ? $params['LogoFilename'] : false;
- $logo_h_margin = isset($params['LogoHMargin']) ? $params['LogoHMargin'] : false;
- $logo_v_margin = isset($params['LogoVMargin']) ? $params['LogoVMargin'] : false;
- $object =& $this->getObject($params);
-
- $field = $this->SelectParam($params, 'name,field');
- return $object->GetField($field, 'resize:'.$max_width.'x'.$max_height.';wm:'.$logo_filename.'|'.$logo_h_margin.'|'.$logo_v_margin);
- }
-
- /**
- * Allows to retrieve given setting from unit config
- *
- * @param Array $params
- * @return mixed
- */
- function UnitOption($params)
- {
- return $this->Application->getUnitOption($this->Prefix, $params['name']);
- }
-
- /**
- * Returns list of allowed toolbar buttons or false, when all is allowed
- *
- * @param Array $params
- * @return string
- */
- function VisibleToolbarButtons($params)
- {
- $preset_name = replaceModuleSection($params['title_preset']);
- $title_presets = $this->Application->getUnitOption($this->Prefix, 'TitlePresets');
-
- if (!array_key_exists($preset_name, $title_presets)) {
- trigger_error('Title preset not specified or missing (in tag "' . $this->getPrefixSpecial() . ':' . __METHOD__ . '")', E_USER_WARNING);
- return false;
- }
-
- $preset_info = $title_presets[$preset_name];
- if (!array_key_exists('toolbar_buttons', $preset_info) || !is_array($preset_info['toolbar_buttons'])) {
- return false;
- }
-
- // always add search buttons
- array_push($preset_info['toolbar_buttons'], 'search', 'search_reset_alt');
- $toolbar_buttons = array_map('addslashes', $preset_info['toolbar_buttons']);
-
- return $toolbar_buttons ? "'" . implode("', '", $toolbar_buttons) . "'" : 'false';
- }
-
- /**
- * Checks, that "To" part of at least one of range filters is used
- *
- * @param Array $params
- * @return bool
- */
- function RangeFiltersUsed($params)
- {
- $search_helper =& $this->Application->recallObject('SearchHelper');
- /* @var $search_helper kSearchHelper */
-
- return $search_helper->rangeFiltersUsed($this->getPrefixSpecial(), $params['grid']);
- }
-
- /**
- * This is abstract tag, used to modify unit config data based on template, where it's used.
- * Tag is called from "combined_header" block in admin only.
- *
- * @param Array $params
- */
- function ModifyUnitConfig($params)
- {
-
- }
-
- /**
- * Checks, that field is visible on edit form
- *
- * @param Array $params
- * @return bool
- */
- function FieldVisible($params)
- {
- $check_field = $params['field'];
- $fields = $this->Application->getUnitOption($this->Prefix, 'Fields');
-
- if (!array_key_exists($check_field, $fields)) {
- // field not found in real fields array -> it's 100% virtual then
- $fields = $this->Application->getUnitOption($this->Prefix, 'VirtualFields');
- }
-
- if (!array_key_exists($check_field, $fields)) {
- $params['field'] = 'Password';
- return $check_field == 'VerifyPassword' ? $this->FieldVisible($params) : true;
- }
-
- $show_mode = array_key_exists('show_mode', $fields[$check_field]) ? $fields[$check_field]['show_mode'] : true;
-
- if ($show_mode === smDEBUG) {
- return defined('DEBUG_MODE') && DEBUG_MODE;
- }
-
- return $show_mode;
- }
-
- /**
- * Checks, that there area visible fields in given section on edit form
- *
- * @param Array $params
- * @return bool
- */
- function FieldsVisible($params)
- {
- if (!$params['fields']) {
- return true;
- }
-
- $check_fields = explode(',', $params['fields']);
- $fields = $this->Application->getUnitOption($this->Prefix, 'Fields');
- $virtual_fields = $this->Application->getUnitOption($this->Prefix, 'VirtualFields');
-
- foreach ($check_fields as $check_field) {
- // when at least one field in subsection is visible, then subsection is visible too
-
- if (array_key_exists($check_field, $fields)) {
- $show_mode = array_key_exists('show_mode', $fields[$check_field]) ? $fields[$check_field]['show_mode'] : true;
- }
- else {
- $show_mode = array_key_exists('show_mode', $virtual_fields[$check_field]) ? $virtual_fields[$check_field]['show_mode'] : true;
- }
-
- if (($show_mode === true) || (($show_mode === smDEBUG) && (defined('DEBUG_MODE') && DEBUG_MODE))) {
- // field is visible
- return true;
- }
- }
-
- return false;
- }
-}
-
-?>
\ No newline at end of file