<?php
/**
* Joomla Community Builder Decimal Field Type Plugin: plug_cbdecimalfield
* @version $Id$
* @package plug_cbdecimalfield
* @subpackage cb.decimalfield.php
* @author Joe Palmer
* @copyright (C) 2009 www.softforge.co.uk
* @license Limited http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU/GPL version 2
* @final 1.0
*/

/** ensure this file is being included by a parent file */
if ( ! ( defined( '_VALID_CB' ) || defined( '_JEXEC' ) || defined( '_VALID_MOS' ) ) ) { die( 'Direct Access to this location is not allowed.' ); }

global $_PLUGINS;
$_PLUGINS->loadPluginGroup( 'user', array( (int) 1 ) );
$_PLUGINS->registerUserFieldTypes( array( 'semfield' => 'CBfield_sem' ) );
$_PLUGINS->registerUserFieldParams();

class CBfield_semfield extends CBfield_select_multi_radio{ //CBfield_text {

	/**
	 * Accessor:
	 * Returns a field in specified format
	 *
	 * @param  moscomprofilerField  $field
	 * @param  moscomprofilerUser   $user
	 * @param  string               $output  'html', 'xml', 'json', 'php', 'csvheader', 'csv', 'rss', 'fieldslist', 'htmledit'
	 * @param  string               $reason  'profile' for user profile view, 'edit' for profile edit, 'register' for registration, 'list' for user-lists
	 * @param  int                  $list_compare_types   IF reason == 'search' : 0 : simple 'is' search, 1 : advanced search with modes, 2 : simple 'any' search
	 * @return mixed                
	 */
	 
	function getField( &$field, &$user, $output, $reason, $list_compare_types ) {
			$value=$user->get( $field->name );
			
			if($value=='0')$value='';
			// Semesterformat Umwandlung für Ansicht, Default ansicht
			if($value!=''){ //unterdrückt Fehlermeldung leeres Array
		    list ($semjahr,$sem)= split("-",$value);
			if($sem=="ss") $eintritsem="SS $semjahr";
			if($sem=="ws")  {
							$semjahr2=$semjahr+1;	
							$eintritsem="WS $semjahr / $semjahr2";
						    }
			}
			//Semester Dropdown erstellen			    
			$startyear=$field->params->get( 'startyear', '1940' );  			
			$stopyear=date('Y');
			$allValues=array();

			$k=0;

			for($i=$stopyear;$i>=$startyear;$i--)
			{
				$j=$i+1;
		
				$pushArray1=(object) array ( 'value' => ''.$i.'-ws','text' => 'WS '.$i.' / '.$j.'','id' => 'sem'.$i.'' );
				$pushArray2=(object) array ( 'value' => ''.$i.'-ss','text' => 'SS '.$i.'','id' => 'sem'.$i.'' );


				$allValues[$k]=$pushArray1;
				$allValues[$k+1]=$pushArray2;
				$k=$k+2;
			}

		switch ( $output ) {
			case 'htmledit':
				if ( $reason == 'search' ) {$ret=null;}
				else{
					//$ret			= 	$this->_formatFieldOutput( $field->name, $value, $output );
					//$ret			=	$this->_fieldEditToHtml( $field, $user, $reason, 'input', 'text', $value,'' );
					$ret			=	$this->_fieldEditToHtml( $field, $user, $reason, 'input', 'select', $value, '', $allValues );
					}
				break;
				
			case 'html':
			case 'rss':
			case 'json':
			case 'php':
			case 'xml':
			case 'csvheader':
			case 'fieldslist':
			case 'csv':
			default:
				$ret				= $this->_formatFieldOutput( $field->name, $eintritsem , $output );
				//$ret=				parent::getField( $field, $user, $output, $reason, $list_compare_types );
				break;
		}
		return $ret;
	}

	/**
	 * Mutator:
	 * Prepares field data for saving to database (safe transfer from $postdata to $user)
	 * Override
	 *
	 * @param  moscomprofilerFields  $field
	 * @param  moscomprofilerUser    $user      RETURNED populated: touch only variables related to saving this field (also when not validating for showing re-edit)
	 * @param  array                 $postdata  Typically $_POST (but not necessarily), filtering required.
	 * @param  string                $reason    'edit' for save profile edit, 'register' for registration, 'search' for searches
	 */
	function prepareFieldDataSave( &$field, &$user, &$postdata, $reason ) {
		$this->_prepareFieldMetaSave( $field, $user, $postdata, $reason );

		foreach ( $field->getTableColumns() as $col ) {
			$value					=	cbGetParam( $postdata, $col );
			if ( ! is_array( $value ) ) {
				$value				=	stripslashes( $value );
				$validated			=	$this->validate( $field, $user, $col, $value, $postdata, $reason );
				if ( $value === '' ) {
					$value			=	null;
				} else {
					$value			=	$value;		
				}
				if ( $validated && isset( $user->$col ) && ( ( (string) $user->$col ) !== (string) $value ) ) {
					$this->_logFieldUpdate( $field, $user, $reason, $user->$col, $value );
				}
				$user->$col		=	$value;
			}
		}
	}

	/**
	 * Finder:
	 * Prepares field data for saving to database (safe transfer from $postdata to $user)
	 * Override
	 *
	 * @param  moscomprofilerFields  $field
	 * @param  moscomprofilerUser    $searchVals  RETURNED populated: touch only variables related to saving this field (also when not validating for showing re-edit)
	 * @param  array                 $postdata    Typically $_POST (but not necessarily), filtering required.
	 * @param  int                   $list_compare_types   IF reason == 'search' : 0 : simple 'is' search, 1 : advanced search with modes, 2 : simple 'any' search
	 * @param  string                $reason      'edit' for save profile edit, 'register' for registration, 'search' for searches
	 * @return array of cbSqlQueryPart
	 */
	function bindSearchCriteria( &$field, &$searchVals, &$postdata, $list_compare_types, $reason ) {
		$query							=	array();
		foreach ( $field->getTableColumns() as $col ) {
			$minNam						=	$col . '__minval';
			$maxNam						=	$col . '__maxval';
			$searchMode					=	$this->_bindSearchRangeMode( $field, $searchVals, $postdata, $minNam, $maxNam, $list_compare_types );
			if ( $searchMode ) {
				$minVal					=	(double) cbGetParam( $postdata, $minNam, 0 );
				$maxVal					=	(double) cbGetParam( $postdata, $maxNam, 0 );

				if ( $minVal && ( cbGetParam( $postdata, $minNam, '' ) !== '' ) ) {
					$searchVals->$minNam =	$minVal;
					$query[]			=	$this->_intToSql( $field, $col, $minVal, '>=', $searchMode );
				}
				if ( $maxVal && ( cbGetParam( $postdata, $maxNam, '' ) !== '' ) ) {
					$searchVals->$maxNam =	$maxVal;
					$query[]			=	$this->_intToSql( $field, $col, $maxVal, '<=', $searchMode );
				}
			}
		}
		return $query;
	}
	function _intToSql( &$field, $col, $value, $operator, $searchMode ) {
		$value							=	$value;
		// $this->validate( $field, $user, $col, $value, $postdata, $reason );
		$sql							=	new cbSqlQueryPart();
		$sql->tag						=	'column';
		$sql->name						=	$col;
		$sql->table						=	$field->table;
		$sql->type						=	'sql:field';
		$sql->operator					=	$operator;
		$sql->value						=	$value;
		$sql->valuetype					=	'const:double';
		$sql->searchmode				=	$searchMode;
		return $sql;
	}

	
}//end of class field
?>