Index: branches/5.2.x/core/units/configuration/configuration_tag_processor.php
===================================================================
--- branches/5.2.x/core/units/configuration/configuration_tag_processor.php	(revision 15127)
+++ branches/5.2.x/core/units/configuration/configuration_tag_processor.php	(revision 15128)
@@ -1,261 +1,261 @@
 <?php
 /**
 * @version	$Id$
 * @package	In-Portal
 * @copyright	Copyright (C) 1997 - 2009 Intechnic. All rights reserved.
 * @license      GNU/GPL
 * In-Portal is Open Source software.
 * This means that this software may have been modified pursuant
 * the GNU General Public License, and as distributed it includes
 * or is derivative of works licensed under the GNU General Public License
 * or other free or open source software licenses.
 * See http://www.in-portal.org/license for copyright notices and details.
 */
 
 defined('FULL_PATH') or die('restricted access!');
 
 class ConfigurationTagProcessor extends kDBTagProcessor {
 
 	public function __construct()
 	{
 		parent::__construct();
 
 		$this->Application->LinkVar('module_key');
 	}
 
 	/**
 	 * Prints list content using block specified
 	 *
 	 * @param Array $params
 	 * @return string
 	 * @access public
 	 */
 	function PrintList($params)
 	{
 		$list =& $this->GetList($params);
-		$id_field = $this->Application->getUnitOption($this->Prefix,'IDField');
+		$id_field = $this->Application->getUnitOption($this->Prefix, 'IDField');
 
 		$list->Query();
 		$o = '';
 		$list->GoFirst();
 
-		$block_params=$this->prepareTagParams($params);
+		$block_params = $this->prepareTagParams($params);
 		$block_params['pass_params'] = 'true';
 		$block_params['IdField'] = $list->IDField;
 
 		$prev_heading = '';
 		$next_block = $params['full_block'];
 		$list->groupRecords('Heading');
-		$field_values = $this->Application->GetVar( $this->getPrefixSpecial(true) );
+		$field_values = $this->Application->GetVar($this->getPrefixSpecial(true));
 
 		while (!$list->EOL()) {
-			$this->Application->SetVar( $this->getPrefixSpecial() . '_id', $list->GetDBField($id_field) ); // for edit/delete links using GET
+			$this->Application->SetVar($this->getPrefixSpecial() . '_id', $list->GetDBField($id_field)); // for edit/delete links using GET
 
 			// using 2 blocks for drawing o row in case if current & next record titles match
 			$next_record =& $list->getCurrentRecord(1);
+			$this_key = $list->GetDBField('Prompt') . ':' . $list->GetDBField('DisplayOrder');
+			$next_key = $next_record !== false ? $next_record['Prompt'] . ':' . $next_record['DisplayOrder'] : '';
 
-			$next_item_prompt = $next_record !== false ? $next_record['Prompt'] : '';
-			$this_item_prompt = $list->GetDBField('Prompt');
-
-			if ($next_item_prompt == $this_item_prompt) {
+			if ( $next_key == $this_key ) {
 				$curr_block = $params['half_block1'];
 				$next_block = $params['half_block2'];
-			} else {
+			}
+			else {
 				$curr_block = $next_block;
 				$next_block = $params['full_block'];
 			}
 
 			$variable_name = $list->GetDBField('VariableName');
 
 			// allows to override value part of block
-			if ($this->Application->ParserBlockFound('cf_' . $variable_name . '_value')) {
+			if ( $this->Application->ParserBlockFound('cf_' . $variable_name . '_value') ) {
 				$block_params['value_render_as'] = 'cf_' . $variable_name . '_value';
 			}
 			else {
 				$block_params['value_render_as'] = $params['value_render_as'];
 			}
 
 			// allow to completely override whole block
-			if ($this->Application->ParserBlockFound('cf_' . $variable_name . '_element')) {
+			if ( $this->Application->ParserBlockFound('cf_' . $variable_name . '_element') ) {
 				$block_params['name'] = 'cf_' . $variable_name . '_element';
 				$block_params['original_render_as'] = $curr_block;
 			}
 			else {
 				$block_params['name'] = $curr_block;
 				$block_params['original_render_as'] = $curr_block;
 			}
 
-			$block_params['show_heading'] = ($prev_heading != $list->GetDBField('Heading') ) ? 1 : 0;
+			$block_params['show_heading'] = ($prev_heading != $list->GetDBField('Heading')) ? 1 : 0;
 
 			// set values from submit if any
-			if ($field_values) {
-				$list->SetDBField('VariableValue', $field_values[ $list->GetID() ]['VariableValue']);
+			if ( $field_values ) {
+				$list->SetDBField('VariableValue', $field_values[$list->GetID()]['VariableValue']);
 			}
 			$list->SetDBField('DirectOptions', '');
 
-			$o.= $this->Application->ParseBlock($block_params);
+			$o .= $this->Application->ParseBlock($block_params);
 			$prev_heading = $list->GetDBField('Heading');
 			$list->GoNext();
 		}
 
 		$this->Application->RemoveVar('ModuleRootCategory');
 		$this->Application->SetVar($this->getPrefixSpecial() . '_id', '');
 
 		return $o;
 	}
 
 	function getModuleItemName()
 	{
 		$module = $this->Application->GetVar('module');
 		$table = $this->Application->getUnitOption('confs', 'TableName');
 
 		$sql = 'SELECT ConfigHeader
 				FROM '.$table.'
 				WHERE ModuleName = '.$this->Conn->qstr($module);
 		return $this->Conn->GetOne($sql);
 	}
 
 	function PrintConfList($params)
 	{
 		$list =& $this->GetList($params);
 		$id_field = $this->Application->getUnitOption($this->Prefix, 'IDField');
 
 		$list->Query();
 		$o = '';
 		$list->GoFirst();
 
 		$tmp_row = Array();
 
 		while (!$list->EOL()) {
 			$rec = $list->getCurrentRecord();
 			$tmp_row[0][$rec['VariableName']] = $rec['VariableValue'];
 			$tmp_row[0][$rec['VariableName'].'_prompt'] = $rec['Prompt'];
 			$list->GoNext();
 		}
 
 		$list->Records = $tmp_row;
 
 		$block_params = $this->prepareTagParams($params);
 		$block_params['name'] = $this->SelectParam($params, 'render_as,block');
 		$block_params['module_key'] = $this->Application->GetVar('module_key');
 		$block_params['module_item'] = $this->getModuleItemName();
 		$list->GoFirst();
 
 		return $this->Application->ParseBlock($block_params);
 
 	}
 
 	function ShowRelevance($params)
 	{
 		return $this->Application->GetVar('module_key') != '_';
 	}
 
 	function ConfigValue($params)
 	{
 		return $this->Application->ConfigValue($params['name']);
 	}
 
 	function IsRequired($params)
 	{
 		$object =& $this->getObject($params);;
 		/* @var $object kDBList */
 
 		$field_options = $object->GetDBField('Validation');
 		$field_options = $field_options ? unserialize($field_options) : Array ();
 
 		return isset($field_options['required']) && $field_options['required'];
 	}
 
 	function Error($params)
 	{
 		$object =& $this->getObject($params);
 		/* @var $object kDBList */
 
 		$field = $object->GetDBField($params['id_field']);
 
 		$errors = $this->Application->GetVar('errors_' . $this->getPrefixSpecial(), Array ());
 
 		return array_key_exists($field, $errors) ? $errors[$field] : '';
 	}
 
 	/**
 	 * Allows to show category path of selected module
 	 *
 	 * @param Array $params
 	 * @return string
 	 */
 	function CategoryPath($params)
 	{
 		if (!isset($params['cat_id'])) {
 			$params['cat_id'] = $this->ModuleRootCategory( Array() );
 		}
 
 		return $this->Application->ProcessParsedTag('c', 'CategoryPath', $params);
 	}
 
 	/**
 	 * Shows edit warning in case if module root category changed but not saved
 	 *
 	 * @param Array $params
 	 * @return string
 	 */
 	function SaveWarning($params)
 	{
 		$temp_category_id = $this->Application->RecallVar('ModuleRootCategory');
 		if ($temp_category_id !== false) {
 			return $this->Application->ParseBlock($params);
 		}
 		return '';
 	}
 
 	function ModuleRootCategory($params)
 	{
 		$category_id = $this->Application->RecallVar('ModuleRootCategory');
 		if ($category_id === false) {
 			$category_id = $this->Application->findModule('Name', $this->Application->GetVar('module'), 'RootCat');
 		}
 		return $category_id;
 	}
 
 	/**
 	 * Returns variable ID by it's name (used on search relevance configuration screen)
 	 *
 	 * @param Array $params
 	 * @return int
 	 */
 	function GetVariableID($params)
 	{
 		static $cached_ids = Array ();
 
 		$var_name = $params['name'];
 		if (!isset($cached_ids[$var_name])) {
 			$id_field = $this->Application->getUnitOption($this->Prefix, 'IDField');
 			$table_name = $this->Application->getUnitOption($this->Prefix, 'TableName');
 
 			$sql = 'SELECT '.$id_field.'
 					FROM '.$table_name.'
 					WHERE VariableName = '.$this->Conn->qstr($params['name']);
 			$cached_ids[$var_name] = $this->Conn->GetOne($sql);
 		}
 
 		return $cached_ids[$var_name];
 	}
 
 	function GetVariableSection($params)
 	{
 		static $cached_sections = Array ();
 
 		$var_name = $params['name'];
 		if (!isset($cached_sections[$var_name])) {
 			$id_field = $this->Application->getUnitOption($this->Prefix, 'IDField');
 			$table_name = $this->Application->getUnitOption($this->Prefix, 'TableName');
 
 			$sql = 'SELECT Section
 					FROM '.$table_name.'
 					WHERE VariableName = '.$this->Conn->qstr($params['name']);
 			$cached_sections[$var_name] = $this->Conn->GetOne($sql);
 		}
 
 		return $cached_sections[$var_name];
 	}
 }
\ No newline at end of file