<?php

	class CustomFieldsTagProcessor extends kDBTagProcessor {
	
		function CustomField($params)
		{
			$object =& $this->getObject($params);
			$parent_item =& $this->Application->recallObject($params['SourcePrefix']);
			
			$field = $this->SelectParam($params, 'name,field');
			return $parent_item->GetField('cust_'.$object->GetField($field));
		}
		
		function CustomInputName($params)
		{
			$object =& $this->getObject($params);
			$source_prefix = $this->Application->Parser->GetParam('SourcePrefix');
			
			$source_tp =& $this->Application->recallTagProcessor($source_prefix);
			$params['name'] = 'cust_'.$object->GetDBField('FieldName');
			return $source_tp->InputName($params);
		}
		
		/**
		 * 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');
	
			$list->Query();
			$o = '';
			$list->GoFirst();
	
			$block_params=$this->prepareTagParams($params);
			$block_params['name'] = $this->SelectParam($params, 'render_as,block');
			$block_params['pass_params'] = 'true';
			
			$prev_heading = '';
			$source_prefix = getArrayValue($params, 'SourcePrefix');
			if ($source_prefix) {
				$source_object =& $this->Application->recallObject($source_prefix);
			}
			
			if ($this->Special == 'general') {
				$this->sortCustomFields($list->Records);
			}
			
			while (!$list->EOL())
			{
				$this->Application->SetVar( $this->getPrefixSpecial().'_id', $list->GetDBField($id_field) ); // for edit/delete links using GET
				
				if ($source_prefix) {				
					$list->SetDBField($params['value_field'], $source_object->GetDBField('cust_'.$list->GetDBField('FieldName')));
					$block_params['show_heading'] = ($prev_heading != $list->GetDBField('Heading') ) ? 1 : 0;
				}
				
				$o.= $this->Application->ParseBlock($block_params, 1);
				$prev_heading = $list->GetDBField('Heading');
				$list->GoNext();
			}
	
			$this->Application->SetVar( $this->getPrefixSpecial().'_id', '');
			return $o;
		}
		
			
		
		function sortCustomFields(&$records)
		{
			$sorted = Array();
			$i = 0; $record_count = count($records);
			while ($i < $record_count) {
				$sorted[ $records[$i]['Heading'] ][] = $records[$i];
				$i++;
			}
		
			$records = Array();
			foreach ($sorted as $heading => $heading_records) {
				$records = array_merge_recursive($records, $heading_records);
			}
		}
	}

?>