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 ?>