Index: trunk/kernel/admin_templates/incs/form_blocks.tpl
===================================================================
--- trunk/kernel/admin_templates/incs/form_blocks.tpl	(revision 2389)
+++ trunk/kernel/admin_templates/incs/form_blocks.tpl	(revision 2390)
@@ -1,254 +1,254 @@
 <inp2:m_block name="section_header"/>
 
 		<table cellpadding="0" cellspacing="0" border="0" width="100%">
 			<tr class="section_header_bg">
 				<td valign="top" class="admintitle" align="left" style="padding-top: 2px; padding-bottom: 2px;">
 		    		<img width="46" height="46" src="img/icons/<inp2:m_param name="icon"/>.gif" align="absmiddle" title="<inp2:m_phrase label="$title"/>">&nbsp;<inp2:m_phrase label="$title"/>
 		    		
 		   		</td>
 			</tr>
 		</table>
 <inp2:m_blockend/>
 
 <inp2:m_block name="blue_bar"/>
 	<table border="0" cellpadding="2" cellspacing="0" class="tableborder_full" width="100%" height="30">
 		<tr>
 			<td class="header_left_bg" nowrap width="80%" valign="middle">
 				<span class="tablenav_link" id="blue_bar"><inp2:$prefix_SectionTitle title_preset="$title_preset" title="Invalid OR Missing title preset" cut_first="100"/></span>
 			</td>
 			<td align="right" class="tablenav" width="20%" valign="middle">
 				<script>
 					var $help_url='<inp2:m_t t="help" h_prefix="$prefix" h_icon="$icon" h_module="$module" h_title_preset="$title_preset" pass="all,m,h" escape="escape" front="1" />';
 					set_window_title( document.getElementById('blue_bar').innerHTML );
 				</script>
 				<a href="javascript: OpenHelp($help_url);">
 					<img src="img/blue_bar_help.gif" border="0">
 				</a>
 			</td>
 		</tr>
 	</table>
 <inp2:m_blockend/>
 
 <inp2:m_block name="subsection"/>  
  <tr class="subsectiontitle">
   <td colspan="5"><inp2:m_phrase label="$title"/></td>
  </tr>
 <inp2:m_blockend/>
 
 <inp2:m_block name="inp_edit_field_caption"/>
 	<inp2:m_inc param="tab_index" by="1"/>
 	<td class="text">
 		<label for="<inp2:m_param name="NamePrefix"/><inp2:$prefix_InputName field="$field" subfield="$subfield"/>">
 			<span class="<inp2:m_if prefix="$prefix" function="HasError" field="$field"/>error<inp2:m_endif/>">
 			<inp2:m_phrase label="$title"/></span><inp2:m_if prefix="$prefix" function="IsRequired" field="$field"/><span class="error"> *</span><inp2:m_endif/>:
 		</label>
 	</td>
 <inp2:m_blockend/>
 
 <inp2:m_block name="inp_label"/>
 	<tr class="<inp2:m_odd_even odd="table_color1" even="table_color2"/>">
 		<inp2:m_ParseBlock name="inp_edit_field_caption" prefix="$prefix" field_name="$field_name" title_phrase="$title_phrase" title="$title" is_last="$is_last"/>
-		<td valign="top"><span class="text"><inp2:$prefix_Field field="$field" as_label="$as_label"/></span></td>
+		<td valign="top"><span class="text"><inp2:$prefix_Field field="$field" as_label="$as_label" currency="$currency"/></span></td>
     	<td class="error"><inp2:$prefix_Error field="$field"/>&nbsp;</td>
 	</tr>
 <inp2:m_blockend/>
 
 <inp2:m_block name="inp_id_label"/>
 	<inp2:m_if prefix="$prefix" function="FieldEquals" field="$field" value="" inverse="inverse"/>
 		<inp2:m_ParseBlock name="inp_label" pass_params="true"/>
 	<inp2:m_endif/>
 <inp2:m_blockend/>
 
 <inp2:m_block name="inp_edit_box"/>
 	<tr class="<inp2:m_odd_even odd="table_color1" even="table_color2"/>">
 		<inp2:m_ParseBlock name="inp_edit_field_caption" prefix="$prefix" field="$field" subfield="$subfield" title_phrase="$title_phrase" title="$title" is_last="$is_last"/>
 		<td>
 			<input type="text" name="<inp2:$prefix_InputName field="$field" subfield="$subfield"/>" id="<inp2:$prefix_InputName field="$field" subfield="$subfield"/>" value="<inp2:$prefix_Field field="$field" subfield="$subfield"/>" tabindex="<inp2:m_get param="tab_index"/>" size="<inp2:m_param name="size"/>" maxlength="<inp2:m_param name="maxlength"/>" class="<inp2:m_param name="class"/>" onblur="<inp2:m_Param name="onblur"/>">
 		</td>
 		<td class="error"><inp2:$prefix_Error field="$field"/>&nbsp;</td>
 	</tr>
 <inp2:m_blockend/>
 
 <inp2:m_block name="inp_edit_upload"/>
 	<tr class="<inp2:m_odd_even odd="table_color1" even="table_color2"/>">
 		<inp2:m_ParseBlock name="inp_edit_field_caption" prefix="$prefix" field="$field" title_phrase="$title_phrase" title="$title" is_last="$is_last"/>
 		<td>
 			<input type="file" name="<inp2:$prefix_InputName field="$field"/>" id="<inp2:$prefix_InputName field="$field"/>" tabindex="<inp2:m_get param="tab_index"/>" size="<inp2:m_param name="size"/>" class="<inp2:m_param name="class"/>">
 		</td>
 		<td class="error"><inp2:$prefix_Error field="$field"/>&nbsp;</td>
 	</tr>
 <inp2:m_blockend/>
 
 <inp2:m_block name="inp_edit_box_ml"/>
 	<tr class="<inp2:m_odd_even odd="table_color1" even="table_color2"/>">
 		<td class="text" valign="top">
 			<span class="<inp2:m_if prefix="$prefix" function="HasError" field="$field"/>error<inp2:m_endif/>">
 			<inp2:m_phrase label="$title"/><inp2:m_if prefix="$prefix" function="IsRequired" field="$field"/><span class="error"> *</span><inp2:m_endif/>:</span><br>
 			<a href="javascript:PreSaveAndOpenTranslator('<inp2:m_param name="prefix"/>', '<inp2:m_param name="field"/>', 'popups/translator');" title="<inp2:m_Phrase label="la_Translate"/>"><img src="img/icons/icon24_translate.gif" style="cursor:hand" border="0"></a>
 		</td>
 		<td>
 			<input type="text" name="<inp2:$prefix_InputName field="$field"/>" id="<inp2:$prefix_InputName field="$field"/>" value="<inp2:$prefix_Field field="$field" format="no_default"/>" tabindex="<inp2:m_get param="tab_index"/>" size="<inp2:m_param name="size"/>" maxlength="<inp2:m_param name="maxlength"/>" class="<inp2:m_param name="class"/>" onblur="<inp2:m_Param name="onblur"/>">
 		</td>
 		<td class="error"><inp2:$prefix_Error field="$field"/>&nbsp;</td>
 	</tr>
 <inp2:m_blockend/>
 
 <inp2:m_block name="inp_edit_hidden"/>
 	<input type="hidden" name="<inp2:$prefix_InputName field="$field"/>" id="<inp2:$prefix_InputName field="$field"/>" value="<inp2:$prefix_Field field="$field" db="$db"/>">
 <inp2:m_blockend/>
 
 <inp2:m_block name="inp_edit_date"/>
 	<inp2:m_if check="m_GetEquals" name="calendar_included" value="1" inverse="inverse">
 		<script type="text/javascript" src="incs/calendar.js"></script>
 		<inp2:m_set calendar_included="1"/>
 	</inp2:m_if>
 	<tr class="<inp2:m_odd_even odd="table_color1" even="table_color2"/>">
 		<inp2:m_ParseBlock name="inp_edit_field_caption" prefix="$prefix" field="$field" title_phrase="$title_phrase" title="$title" is_last="$is_last"/>
 		<td>
 			<input type="text" name="<inp2:$prefix_InputName field="{$field}_date"/>" id="<inp2:$prefix_InputName field="{$field}_date"/>" value="<inp2:$prefix_Field field="{$field}_date"/>" tabindex="<inp2:m_get param="tab_index"/>" size="<inp2:$prefix_Format field="{$field}_date" edit_size="edit_size"/>" class="<inp2:m_param name="class"/>" datepickerIcon="<inp2:m_ProjectBase/>admin/images/ddarrow.gif">&nbsp;<span class="small">(<inp2:$prefix_Format field="{$field}_date" human="true"/>)</span>
 			<script type="text/javascript">
 				initCalendar("<inp2:$prefix_InputName field="{$field}_date"/>", "<inp2:$prefix_Format field="{$field}_date"/>");
 			</script>
 			<input type="hidden" name="<inp2:$prefix_InputName field="{$field}_time"/>" id="<inp2:$prefix_InputName field="{$field}_time"/>" value="">
 		</td>
 		<td class="error"><inp2:$prefix_Error field="{$field}_date"/>&nbsp;</td>
 	</tr>
 <inp2:m_blockend/>
 
 
 <inp2:m_block name="inp_edit_date_time"/>
 	<inp2:m_if check="m_GetEquals" name="calendar_included" value="1" inverse="inverse">
 		<script type="text/javascript" src="incs/calendar.js"></script>
 		<inp2:m_set calendar_included="1"/>
 	</inp2:m_if>
 	<tr class="<inp2:m_odd_even odd="table_color1" even="table_color2"/>">
 		<inp2:m_ParseBlock name="inp_edit_field_caption" prefix="$prefix" field="$field" title_phrase="$title_phrase" title="$title" is_last="$is_last"/>
 		<td>
 			<!--<input type="hidden" id="<inp2:$prefix_InputName field="$field"/>" name="<inp2:$prefix_InputName field="$field"/>" value="<inp2:$prefix_Field field="$field" db="db"/>">		-->
 			<input type="text" name="<inp2:$prefix_InputName field="{$field}_date"/>" id="<inp2:$prefix_InputName field="{$field}_date"/>" value="<inp2:$prefix_Field field="{$field}_date"/>" tabindex="<inp2:m_get param="tab_index"/>" size="<inp2:$prefix_Format field="{$field}_date" edit_size="edit_size"/>" class="<inp2:m_param name="class"/>" datepickerIcon="<inp2:m_ProjectBase/>admin/images/ddarrow.gif">
 				<span class="small">(<inp2:$prefix_Format field="{$field}_date" human="true"/>)</span>
 			<script type="text/javascript">
 				initCalendar("<inp2:$prefix_InputName field="{$field}_date"/>", "<inp2:$prefix_Format field="{$field}_date"/>");
 			</script>
 			&nbsp;<input type="text" name="<inp2:$prefix_InputName field="{$field}_time"/>" id="<inp2:$prefix_InputName field="{$field}_time"/>" value="<inp2:$prefix_Field field="{$field}_time"/>" tabindex="<inp2:m_get param="tab_index"/>" size="<inp2:$prefix_Format field="{$field}_time" edit_size="edit_size"/>" class="<inp2:m_param name="class"/>"><span class="small"> (<inp2:$prefix_Format field="{$field}_time" human="true"/>)</span>
 		</td>
 		<td class="error"><inp2:$prefix_Error field="$field"/>&nbsp;</td>
 	</tr>
 <inp2:m_blockend/>
 
 <inp2:m_block name="inp_edit_textarea"/>
 	<tr class="<inp2:m_odd_even odd="table_color1" even="table_color2"/>">
 		<td class="text" valign="top">
 			<span class="<inp2:m_if prefix="$prefix" function="HasError" field="$field"/>error<inp2:m_endif/>">
 			<inp2:m_phrase label="$title"/><inp2:m_if prefix="$prefix" function="IsRequired" field="$field"/><span class="error"> *</span><inp2:m_endif/>:</span><br>
 			<a href="javascript:OpenEditor('&section=in-link:editlink_general','kernel_form','<inp2:$prefix_InputName field="$field"/>');"><img src="img/icons/icon24_link_editor.gif" style="cursor:hand" border="0"></a>
 		</td>
 		<td>
 			<textarea tabindex="<inp2:m_get param="tab_index"/>" id="<inp2:$prefix_InputName field="$field"/>" name="<inp2:$prefix_InputName field="$field"/>" cols="<inp2:m_param name="cols"/>" rows="<inp2:m_param name="rows"/>" class="<inp2:m_param name="class"/>"><inp2:$prefix_Field field="$field"/></textarea>
 		</td>
 		<td class="error"><inp2:$prefix_Error field="$field"/>&nbsp;</td>
 	</tr>
 <inp2:m_blockend/>
 
 
 <inp2:m_block name="inp_edit_user"/>
 	<tr class="<inp2:m_odd_even odd="table_color1" even="table_color2"/>">
 		<inp2:m_ParseBlock name="inp_edit_field_caption" prefix="$prefix" field="$field" title_phrase="$title_phrase" title="$title" is_last="$is_last"/>
 		<td>
 			<input type="text" name="<inp2:$prefix_InputName field="$field"/>" id="<inp2:$prefix_InputName field="$field"/>" value="<inp2:$prefix_Field field="$field"/>" tabindex="<inp2:m_get param="tab_index"/>" size="<inp2:m_param name="size"/>" class="<inp2:m_param name="class"/>">
 			<a href="#" onclick="return OpenUserSelector('','kernel_form','<inp2:$prefix_InputName field="$field"/>');">
           		 <img src="img/icons/icon24_link_user.gif" style="cursor:hand;" border="0">
          	</a>  
 		</td>
 		<td class="error"><inp2:$prefix_Error field="$field"/>&nbsp;</td>
 	</tr>
 <inp2:m_blockend/>
 
 
 <inp2:m_block name="inp_option_item"/>
 	<option value="<inp2:m_param name="key"/>"<inp2:m_param name="selected"/>><inp2:m_param name="option"/></option>	
 <inp2:m_blockend/>
 
 <inp2:m_block name="inp_option_phrase"/>
 	<option value="<inp2:m_param name="key"/>"<inp2:m_param name="selected"/>><inp2:m_phrase label="$option"/></option>	
 <inp2:m_blockend/>
 
 <inp2:m_block name="inp_edit_options"/>
 	<tr class="<inp2:m_odd_even odd="table_color1" even="table_color2"/>">
 		<inp2:m_ParseBlock name="inp_edit_field_caption" prefix="$prefix" field="$field" title_phrase="$title_phrase" title="$title" is_last="$is_last"/>
 		<td>
 			<select tabindex="<inp2:m_get param="tab_index"/>" name="<inp2:$prefix_InputName field="$field"/>" id="<inp2:$prefix_InputName field="$field"/>" onchange="<inp2:m_Param name="onchange"/>">
 				<inp2:m_if prefix="m" function="ParamEquals" name="use_phrases" value="1"/>
 					<inp2:$prefix_PredefinedOptions field="$field" block="inp_option_phrase" selected="selected"/>
 				<inp2:m_else/>
 					<inp2:$prefix_PredefinedOptions field="$field" block="inp_option_item" selected="selected"/>
 				<inp2:m_endif/>
 			</select>
 		</td>
 		<td class="error"><inp2:$prefix_Error field="$field"/>&nbsp;</td>
 	</tr>
 <inp2:m_blockend/>
 
 <inp2:m_block name="inp_radio_item"/>
 	<input type="radio" <inp2:m_param name="checked"/> name="<inp2:$prefix_InputName field="$field"/>" id="<inp2:$prefix_InputName field="$field"/>_<inp2:m_param name="key"/>" value="<inp2:m_param name="key"/>" onclick="<inp2:m_param name="onclick"/>"><label for="<inp2:$prefix_InputName field="$field"/>_<inp2:m_param name="key"/>"><inp2:m_phrase label="$option"/></label>&nbsp;	
 <inp2:m_blockend/>
 
 <inp2:m_block name="inp_checkbox_item"/>
 	<input type="checkbox" <inp2:m_param name="checked"/> name="<inp2:$prefix_InputName field="$field"/>[]" id="<inp2:$prefix_InputName field="$field"/>_<inp2:m_param name="key"/>" value="<inp2:m_param name="key"/>"><label for="<inp2:$prefix_InputName field="$field"/>_<inp2:m_param name="key"/>"><inp2:m_phrase label="$option"/></label>&nbsp;	
 	<inp2:m_if check="$prefix_HasParam" name="hint_label"><inp2:m_phrase label="$hint_label"/></inp2:m_if>
 <inp2:m_blockend/>
 
 <inp2:m_block name="inp_edit_radio"/>
 	<tr class="<inp2:m_odd_even odd="table_color1" even="table_color2"/>">
 		<inp2:m_ParseBlock name="inp_edit_field_caption" prefix="$prefix" field="$field" title_phrase="$title_phrase" title="$title" is_last="$is_last"/>
 		<td>
 			<inp2:$prefix_PredefinedOptions field="$field" tabindex="$pass_tabindex" block="inp_radio_item" selected="checked" onclick="$onclick" />
 		</td>
 		<td class="error"><inp2:$prefix_Error field="$field"/>&nbsp;</td>
 	</tr>
 <inp2:m_blockend/>
 
 <inp2:m_block name="inp_edit_checkbox"/>
 	<tr class="<inp2:m_odd_even odd="table_color1" even="table_color2"/>">
 		<inp2:m_ParseBlock name="inp_edit_field_caption" prefix="$prefix" field="$field" title_phrase="$title_phrase" title="$title" is_last="$is_last" NamePrefix="_cb_"/>
 		<td>
 			<input type="hidden" id="<inp2:$prefix_InputName field="$field"/>" name="<inp2:$prefix_InputName field="$field"/>" value="<inp2:$prefix_Field field="$field" db="db"/>">
 			<input tabindex="<inp2:m_get param="tab_index"/>" type="checkbox" id="_cb_<inp2:$prefix_InputName field="$field"/>" name="_cb_<inp2:$prefix_InputName field="$field"/>" <inp2:$prefix_Field field="$field" checked="checked" db="db"/> class="<inp2:m_param name="field_class"/>" onclick="update_checkbox(this, document.getElementById('<inp2:$prefix_InputName field="$field"/>'))" onchange="<inp2:m_param name="onchange" />">
 			<inp2:m_if check="$prefix_HasParam" name="hint_label"><inp2:m_phrase label="$hint_label"/></inp2:m_if>
 		</td>
 		<td class="error"><inp2:$prefix_Error field="$field"/>&nbsp;</td>
 	</tr>
 <inp2:m_blockend/>
 
 <inp2:m_block name="inp_edit_checkboxes"/>
 	<tr class="<inp2:m_odd_even odd="table_color1" even="table_color2"/>">
 		<inp2:m_ParseBlock name="inp_edit_field_caption" prefix="$prefix" field="$field" title_phrase="$title_phrase" title="$title" is_last="$is_last"/>
 		<td>
 			<inp2:m_if check="m_ParamEquals" name="use_phrases" value="1">
 				<inp2:$prefix_PredefinedOptions field="$field" no_empty="$no_empty" tabindex="$pass_tabindex" hint_label="$hint_label" block="inp_checkbox_phrase" selected="checked"/>	
 			<inp2:m_else/>
 				<inp2:$prefix_PredefinedOptions field="$field" no_empty="$no_empty" tabindex="$pass_tabindex" hint_label="$hint_label" block="inp_checkbox_item" selected="checked"/>
 			</inp2:m_if>
 		</td>
 		<td class="error"><inp2:$prefix_Error field="$field"/>&nbsp;</td>
 	</tr>
 <inp2:m_blockend/>
 
 <inp2:m_block name="inp_edit_weight" />
 	<tr class="<inp2:m_odd_even odd="table_color1" even="table_color2"/>">
 		<inp2:m_ParseBlock name="inp_edit_field_caption" prefix="$prefix" field="$field" subfield="$subfield" title_phrase="$title_phrase" title="$title" is_last="$is_last"/>
 		<td>
 			<inp2:m_if check="lang.current_FieldEquals" field="UnitSystem" value="1">
 				<input type="text" name="<inp2:$prefix_InputName field="$field" subfield="$subfield"/>" id="<inp2:$prefix_InputName field="$field" subfield="$subfield"/>" value="<inp2:$prefix_Field field="$field" subfield="$subfield"/>" tabindex="<inp2:m_get param="tab_index"/>" size="<inp2:m_param name="size"/>" maxlength="<inp2:m_param name="maxlength"/>" class="<inp2:m_param name="class"/>" onblur="<inp2:m_Param name="onblur"/>">
 				<inp2:m_phrase label="la_kg" />
 			</inp2:m_if>
 			<inp2:m_if check="lang.current_FieldEquals" field="UnitSystem" value="2">
 				<input type="text" name="<inp2:$prefix_InputName field="{$field}_a" subfield="$subfield"/>" id="<inp2:$prefix_InputName field="{$field}_a" subfield="$subfield"/>" value="<inp2:$prefix_Field field="{$field}_a" subfield="$subfield"/>" tabindex="<inp2:m_get param="tab_index"/>" size="<inp2:m_param name="size"/>" maxlength="<inp2:m_param name="maxlength"/>" class="<inp2:m_param name="class"/>" onblur="<inp2:m_Param name="onblur"/>">
 				<inp2:m_phrase label="la_lbs" />
 				<input type="text" name="<inp2:$prefix_InputName field="{$field}_b" subfield="$subfield"/>" id="<inp2:$prefix_InputName field="{$field}_b" subfield="$subfield"/>" value="<inp2:$prefix_Field field="{$field}_b" subfield="$subfield"/>" tabindex="<inp2:m_get param="tab_index"/>" size="<inp2:m_param name="size"/>" maxlength="<inp2:m_param name="maxlength"/>" class="<inp2:m_param name="class"/>" onblur="<inp2:m_Param name="onblur"/>">
 				<inp2:m_phrase label="la_oz" />
 			</inp2:m_if>			
 		</td>
 		<td class="error"><inp2:$prefix_Error field="$field"/>&nbsp;</td>
 	</tr>
 <inp2:m_blockend />
\ No newline at end of file

Property changes on: trunk/kernel/admin_templates/incs/form_blocks.tpl
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.9
\ No newline at end of property
+1.10
\ No newline at end of property
Index: trunk/core/kernel/db/db_tag_processor.php
===================================================================
--- trunk/core/kernel/db/db_tag_processor.php	(revision 2389)
+++ trunk/core/kernel/db/db_tag_processor.php	(revision 2390)
@@ -1,1242 +1,1245 @@
 <?php
 
 class kDBTagProcessor extends TagProcessor {
 	
 	/**
 	* Description
 	*
 	* @var kDBConnection
 	* @access public
 	*/
 	var $Conn;
 	
 	function kDBTagProcessor()
 	{
 		parent::kBase();
 		$this->Conn =& $this->Application->GetADODBConnection();
 	}
 	
 	
 	/**
 	 * Returns true if "new" button was pressed in toolbar
 	 *
 	 * @param Array $params
 	 * @return bool
 	 */
 	function IsNewMode($params)
 	{
 		$object =& $this->Application->recallObject( $this->getPrefixSpecial(), $this->Prefix, $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');
 		
 		// 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)
 		{
 			if(!$filter_params)
 			{
 				$filters[] = $separator;
 				continue;
 			}
 			
 			$block_params['label'] = addslashes( $this->Application->Phrase($filter_params['label']) );
 			if( getArrayValue($view_filter,$filter_key) )
 			{
 				$submit = 0;
 				$status = 1;
 			}
 			else
 			{
 				$submit = 1;
 				$status = 0;	
 			}
 			$block_params['filter_action'] = 'set_filter("'.$prefix_special.'","'.$filter_key.'","'.$submit.'");';
 			$block_params['filter_status'] = $status;
 			$filters[] = $this->Application->ParseBlock($block_params);
 		}
 		return implode('', $filters);
 	}
 	
 	function IterateGridFields($params)
 	{
 		$mode = $params['mode'];
 		$def_block = $params['block'];
 		
 		$grids = $this->Application->getUnitOption($this->Prefix,'Grids');
 		$grid_config = $grids[$params['grid']]['Fields'];
 		
 		$std_params['pass_params']='true';
 		$std_params['PrefixSpecial']=$this->getPrefixSpecial();
 		
 		$o = '';
 		foreach ($grid_config as $field => $options) {
 			$block_params = Array();
 			$block_params['name'] = 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 = array_merge($std_params, $block_params, $options);
 			$o.= $this->Application->ParseBlock($block_params, 1);
 		}
 		return $o;
 	}
 	
 	/**
 	 * Prints list content using block specified
 	 *
 	 * @param Array $params
 	 * @return string
 	 * @access public
 	 */
 	function PrintList($params)
 	{
 //		$list =& $this->Application->recallObject( $this->getPrefixSpecial(), $this->Prefix.'_List',$params);
 		$list =& $this->GetList($params);
 		$id_field = $this->Application->getUnitOption($this->Prefix,'IDField');
 
 		$list->Query();
 		$o = '';
 		$list->GoFirst();
 		
 		$block_params=$this->prepareTagParams($params);
 		$block_params['name'] = $this->SelectParam($params, 'render_as,block');
 		$block_params['pass_params'] = 'true';
 		
 		while (!$list->EOL()) 
 		{
 			$this->Application->SetVar( $this->getPrefixSpecial().'_id', $list->GetDBField($id_field) ); // for edit/delete links using GET
 			$o.= $this->Application->ParseBlock($block_params, 1);
 			$list->GoNext();
 		}
 		
 		$this->Application->SetVar( $this->getPrefixSpecial().'_id', '');
 		return $o;	
 	}
 	
 	function InitList($params)
 	{
 		$list_name = $params['list_name'];
 		
 		$names_mapping = $this->Application->GetVar('NamesToSpecialMapping');
 		
 		if( !getArrayValue($names_mapping,$list_name) )
 		{
 			$list =& $this->GetList($params);
 		}
 	}
 	
 	function BuildListSpecial($params)
 	{
 		return $this->Special;
 	}
 	
 	/**
 	 * Enter description here...
 	 *
 	 * @param unknown_type $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 = getArrayValue($params, 'requery');
 		if ($list_name && !$requery){
 			$names_mapping  = $this->Application->GetVar('NamesToSpecialMapping');
 			
 			$special = getArrayValue($names_mapping, $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);
 		$list->Query();
 		$this->Special = $special;
 		
 		if ($list_name) {
 			$names_mapping[$list_name] = $special;
 			$this->Application->SetVar('NamesToSpecialMapping', $names_mapping);
 		}
 		
 		return $list;
 	}
 	
 	function ListMarker($params)
 	{
 		$list =& $this->GetList($params);
 		return $list->getPrefixSpecial();
 	}
 	
 	function SubmitName($params)
 	{
 		$list =& $this->GetList($params);
 		
 		$prefix_special = $list->getPrefixSpecial();
 		
 		return 'events['.$prefix_special.']['.$params['event'].']';
 	}
 	
 	
 	function CombinedSortingDropDownName($params)
 	{
 		$list =& $this->GetList($params);
 		$prefix_special = $list->getPrefixSpecial();
 		
 		return $prefix_special.'_CombinedSorting';
 	}
 	
 	function SortingSelected($params)
 	{
 		$list =& $this->GetList($params);
 		$user_sorting_start = $this->getUserSortIndex();
 		
 		$sorting = strtolower($list->GetOrderField($user_sorting_start).'|'.$list->GetOrderDirection($user_sorting_start));
 		
 		if ($sorting == strtolower($params['sorting'])) return $params['selected'];
 	}
 	
 	
 	
 	/**
 	 * 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") {
 			$list->Records = $this->LinearToVertical($list->Records, $columns, $list->GetPerPage());
 			$list->SelectedCount=count($list->Records);
 			ksort($list->Records);
 		}
 		
 		$list->GoFirst();
 		
 		$block_params=$this->prepareTagParams($params);
 		$block_params['name']=$this->SelectParam($params, 'render_as,block');
 		$block_params['pass_params']='true';
 		
 		$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();
 		while (!$list->EOL()) 
 		{
 			$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) ); 
 			
 			if ($i % $columns == 0) {
 				$o.= $block_start_row_params['name'] ? $this->Application->ParseBlock($block_start_row_params, 1) : '<tr>';
 			}
 			
 			if (!$list->getCurrentRecord()){
 				$o.= $block_empty_cell_params['name'] ? $this->Application->ParseBlock($block_params, 1) : '<td>&nbsp;</td>';
 			}
 			else {
 				$o.= $this->Application->ParseBlock($block_params, 1);
 				array_push($displayed, $list->GetDBField($id_field));
 			}
 			
 			if (($i+1) % $columns == 0) {
 				$o.= $block_end_row_params['name'] ? $this->Application->ParseBlock($block_end_row_params, 1) : '</tr>';
 			}
 			
 			$list->GoNext();
 			
 			$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;	
 	}
 	
 	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 = array();
 			$block_params['name'] = $this->SelectParam($params, 'render_as,block');
 			return $this->Application->ParseBlock($block_params, 1);
 		}
 	}
 	
 	function NotLastItem($params)
 	{
 		$list =& $this->Application->recallObject($this->getPrefixSpecial());
 		
 		return ($list->CurrentIndex < min($list->PerPage, $list->RecordsCount)-1);
 	}
 	
 	function PageLink($params)
 	{
 		$t = isset($params['template']) ? $param['template'] : '';
 		if (!$t) $t = $this->Application->GetVar('t');
 		
 		if (isset($params['page'])) {
 			$this->Application->SetVar($this->getPrefixSpecial().'_Page', $params['page']);
 		}
 		
 		$pass = Array('pass' => 'all,'.$this->getPrefixSpecial());
 //		$pass = Array('pass' => 'all');
 		$http_query =& $this->Application->recallObject('HTTPQuery');
 		$get = $http_query->Get;
 		unset($get['env']);
 //		$pass = array_merge($get, $pass);
 		
 		return $this->Application->HREF($t, '', $pass);
 	}
 	
 	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())
 	{
 		$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)
 	{
 		$this->Application->setUnitOption('curr', 'AutoLoad', false);
 		$currency =& $this->Application->recallObject('curr.-'.$iso);
 		if( !$currency->isLoaded() ) $currency->Load($iso, 'ISO');
 		
 		$symbol = $currency->GetDBField('Symbol');
 		if (!$symbol) $symbol = $currency->GetDBField('ISO').'&nbsp;';
 		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->Application->recallObject($this->getPrefixSpecial(),$this->Prefix, $params);
 		
 		if ( getArrayValue($params, 'db') !== false )
 		{
 			$value = $object->GetDBField($field);	
 		}
 		else
 		{
-			if (isset($params['currency'])) {
+			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;
 			}
 			else
 			{
 				if(preg_match("/_regional_(.*)/", $format, $regs))
 				{
 					$lang =& $this->Application->recallObject('lang.current');
 					$format = $lang->GetDBField($regs[1]);
 				}
 			}
 			$value = $object->GetField($field, $format);
 			
-			if (isset($params['currency'])) {
+			if( $this->HasParam($params, 'currency') )
+			{
 				$value = $this->AddCurrencySymbol($value, $iso);
 				$params['no_special'] = 1;
 			}
 		}
 		
 		if( getArrayValue($params,'nl2br'	) ) $value = nl2br($value);
 		if( !$this->HasParam($params, 'no_special') ) $value = htmlspecialchars($value);
 		if( getArrayValue($params,'checked'	) ) $value = ($value == 1) ? 'checked' : '';
 		if( getArrayValue($params,'as_label') ) $value = $this->Application->Phrase($value);
 		
 		$first_chars = $this->SelectParam($params,'first_chars,cut_first');
 		if($first_chars)
 		{
 			$needs_cut = strlen($value) > $first_chars;
 			$value = substr($value,0,$first_chars);
 			if($needs_cut) $value .= ' ...';
 		}
 		
 		if ($value != '') $this->Application->Parser->DataExists = true;
 		
-		if (isset($params['currency'])) {
+		if( $this->HasParam($params, 'currency') )
+		{
 			//restoring value in original currency, for other Field tags to work properly
 			$object->SetDBField($field, $original); 
 		}
 				
 		return $value;
 	}
 	
 	/**
 	 * 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 = getArrayValue($params, $param_name);
 		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 = $params['field'];
 		$object =& $this->Application->recallObject($this->getPrefixSpecial(), $this->Prefix, $params);
 		
 		$msg = $object->GetErrorMsg($field, false);
 				
 		return $msg;
 	}
 	
 	function HasError($params)
 	{
 		if ($params['field'] == 'any') {
 			$object =& $this->Application->recallObject($this->getPrefixSpecial());
 			return $object->HasErrors();
 		}
 		else {
 			return $this->Error($params) != '';
 		}
 	}
 	
 	function IsRequired($params)
 	{
 		$field = $params['field'];
 		$object =& $this->Application->recallObject($this->getPrefixSpecial(),$this->Prefix, $params);
 		
 		$options = $object->GetFieldOptions($field);
 		return getArrayValue($options,'required');
 	}
 	
 	function PredefinedOptions($params)
 	{
 		$field = $params['field'];
 		$object =& $this->Application->recallObject($this->getPrefixSpecial(),$this->Prefix, $params);
 		
 		$value = $object->GetDBField($field);
 		$options = $object->GetFieldOptions($field);
 		
 		$block_params = $this->prepareTagParams($params);
 		
 		$block_params['name'] = $this->SelectParam($params, 'render_as,block');
 		$block_params['field'] = $params['field'];
 		$block_params['pass_params'] = 'true';
 		
 		$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['options'],'') ) array_shift($options['options']);
 		foreach ($options['options'] as $key => $val) {
 			$block_params['key'] = $key;
 			$block_params['option'] = $val;
 			$block_params['field_name'] = $this->InputName($params);
 			$block_params[$selected_param_name] = ( $key == $value ? ' '.$selected : '');
 			$block_params['PrefixSpecial'] = $this->getPrefixSpecial();
 			$o .= $this->Application->ParseBlock($block_params, 1);
 		}
 		
 		return $o;
 	}
 	
 	function Format($params)
 	{
 		$field = $params['field'];
 		$object =& $this->Application->recallObject($this->getPrefixSpecial(),$this->Prefix, $params);
 		
 		$options = $object->GetFieldOptions($field);
 		
 		$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($options['format']);
 				return $edit_size ? strlen($format) : $format;
 			}
 		}
 		
 		return $options['format'];
 	}
 	
 	/**
 	 * 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) $this->Application->Parser->DataExists = true;
 		
 		$o = '';
 		
 		// what are these 2 lines for?
 		$this->Application->SetVar($prefix_special.'_event','');
 		$this->Application->SetVar($prefix_special.'_id','');
 		
 		$current_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);		
 				}
 			}
 		}
 
 		return $o;
 	}
 
 	/**
 	 * Print grid pagination using
 	 * block names specified
 	 *
 	 * @param Array $params
 	 * @return string
 	 * @access public
 	 */
 	function PaginationBar($params)
 	{
 		return $this->PrintPages($params);
 	}	
 	
 	/**
 	 * Returns input field name to
 	 * be placed on form (for correct
 	 * event processing)
 	 *
 	 * @param Array $params
 	 * @return string
 	 * @access public
 	 */
 	function InputName($params)
 	{
 		$prefix_special=$this->getPrefixSpecial();
 		$object =& $this->Application->recallObject($prefix_special);
 		
 		if ( $formatter = getArrayValue($object->Fields, $params['field'], 'formatter') ) {
 			if ( $formatter == 'kMultiLanguage' ) {
 				$formatter =& $this->Application->recallObject($formatter);			
 				$params['field'] = $formatter->LangFieldName($params['field']);
 			}
 		}
 		
 		if ( $idfield = getArrayValue($params, 'IdField') ) {
 			$id = $object->GetDBField($idfield);
 		}
 		else {
 			$id = $object->GetID();
 		}
 		
 		return $prefix_special.'['.$id.']['.$params['field'].']';
 	}
 	
 	
 	
 	/**
 	 * 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($list->GetOrderField($user_sorting_start+1) == $field)
 		{
 			return '2_'.strtolower($list->GetOrderDirection($user_sorting_start+1));
 		}
 		else
 		{
 			return 'no';
 		}
 	}
 
 	/**
 	 * 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->Application->recallObject( $this->getPrefixSpecial() );
 		return $object->PerPage;
 	}
 	
 	/**
 	 * Checks if list perpage matches value specified
 	 *
 	 * @param Array $params
 	 * @return bool
 	 */
 	function PerPageEquals($params)
 	{
 		$object =& $this->Application->recallObject( $this->getPrefixSpecial() );
 		return $object->PerPage == $params['value'];
 	}
 	
 	function SaveEvent($params)
 	{
 		// SaveEvent is set during onbuild, but we may need it before any other tag calls onBuild
 		$prefix_special = $this->getPrefixSpecial();
 		$item = $this->Application->recallObject($prefix_special);
 
 		return $this->Application->GetVar($prefix_special.'_SaveEvent');
 	}
 	
 	function NextId($params)
 	{
 		$prefix_special=$this->getPrefixSpecial();
 		$ids = explode(',', $this->Application->RecallVar($prefix_special.'_selected_ids'));
 		$item = $this->Application->recallObject($prefix_special);
 		$cur_id = $item->GetId();
 		
 		$i = array_search($cur_id,$ids);
 		if ($i !== false) {
 			return $i < count($ids)-1 ? $ids[$i+1] : '';
 		}
 		return '';
 	}
 	
 	function PrevId($params)
 	{
 		$prefix_special=$this->getPrefixSpecial();
 		$ids = explode(',', $this->Application->RecallVar($prefix_special.'_selected_ids'));
 		$item = $this->Application->recallObject($prefix_special);
 		$cur_id = $item->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->Application->recallObject($this->getPrefixSpecial(),$this->Prefix, $params);
 		$ret = $object->GetDBField($this->SelectParam($params, 'name,field')) == $params['value'];
 //		if( getArrayValue($params,'inverse') ) $ret = !$ret;
 		return $ret;
 	}
 	
 	function ItemIcon($params)
 	{
 		$object =& $this->Application->recallObject($this->getPrefixSpecial(),$this->Prefix, $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)
 	{
 		$title_presets = $this->Application->getUnitOption($this->Prefix,'TitlePresets');
 		$title_info = getArrayValue($title_presets, $params['title_preset'] );
 		if($title_info === false) return $params['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)
 		{
 			$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'] ]->GetID() ? 'edit' : 'new';
 
 				// 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);
 				}
 			}
 		}
 		
 		// 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);
 			}
 		}
 		
 		$cut_first = getArrayValue($params,'cut_first');
 		if( $cut_first && strlen($title) > $cut_first && !preg_match('/<a href="(.*)">(.*)<\/a>/',$title) ) $title = 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:
 				break;
 		}
 	}
 	
 	/**
 	 * 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 <SQL>SELECT f1 AS OptionName, f2 AS OptionValue... FROM <PREFIX>TableName </SQL>
 	 * where prefix is TABLE_PREFIX
 	 *
 	 * @param Array $params
 	 * @return string
 	 */
 	function ConfigFormElement($params)
 	{
 		$object =& $this->Application->recallObject( $this->getPrefixSpecial() );
 		$field = $params['field'];
 		
 		$helper =& $this->Application->recallObject('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 'radio':
 				$field_options = $object->GetFieldOptions($field, 'options');
 				$field_options['options'] = $helper->GetValuesHash( $object->GetDBField($params['value_list_field']) );
 				$object->SetFieldOptions($field, $field_options);
 				break;
 				
 			case 'textarea':
 				$params['field_params'] = $helper->ParseConfigSQL($object->GetDBField($params['value_list_field']));
 				break;					
 			
 			case 'password':
 			case 'text':
 			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)
 	{
 		$object =& $this->Application->recallObject( $this->getPrefixSpecial(), $this->Prefix, $params );
 		
 		$field = $this->SelectParam($params, 'name,field');
 		
 		$lang_id = $this->Application->GetVar('m_lang');
 		
 		$sql = '	SELECT cv.l'.$lang_id.'_Value FROM '.TABLE_PREFIX.'CustomField cf
 					LEFT JOIN '.TABLE_PREFIX.'CustomMetaData cv
 					ON cf.CustomFieldId = cv.CustomFieldId
 					WHERE cf.Type = '.$this->Application->getUnitOption($this->Prefix, 'ItemType').' 
 					AND cv.ResourceId = '.$object->GetDBField('ResourceId').'
 					AND cf.FieldName = "'.$field.'"';
 		return $this->Conn->GetOne($sql);
 	}
 
 	function CustomFieldLabel($params)
 	{
 		$prefix = $this->Prefix;
 		$object =& $this->Application->recallObject( $prefix );
 		
 		$field = $this->SelectParam($params, 'name,field');
 		
 		$sql = '	SELECT FieldLabel FROM '.TABLE_PREFIX.'CustomField WHERE FieldName = "'.$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;
 			$cols=min(ceil($per_page/$columns), ceil(sizeof($arr)/$columns));
 			$imatrix=array();
 			for ($row=0; $row<$rows; $row++) {
 				for ($col=0; $col<$cols; $col++){
 						$imatrix[$col*$rows+$row]=$arr[$row*$cols+$col];
 					}
 			}
 			ksort($imatrix);
 			reset($imatrix);
 			return $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 = $this->Application->GetVar($top_prefix.'_mode') == 't';
 		$modified = $this->Application->RecallVar($top_prefix.'_modified');
 		
 		if($temp_tables && $modified)
 		{
 			return $this->Application->ParseBlock($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;
 	}
 }
 
 ?>
\ No newline at end of file

Property changes on: trunk/core/kernel/db/db_tag_processor.php
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.18
\ No newline at end of property
+1.19
\ No newline at end of property