00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038 include_once( "kernel/classes/ezdatatype.php" );
00039 include_once( "lib/ezutils/classes/ezfloatvalidator.php" );
00040
00041 define( "EZ_DATATYPESTRING_FLOAT", "ezfloat" );
00042 define( "EZ_DATATYPESTRING_MIN_FLOAT_FIELD", "data_float1" );
00043 define( "EZ_DATATYPESTRING_MIN_FLOAT_VARIABLE", "_ezfloat_min_float_value_" );
00044 define( "EZ_DATATYPESTRING_MAX_FLOAT_FIELD", "data_float2" );
00045 define( "EZ_DATATYPESTRING_MAX_FLOAT_VARIABLE", "_ezfloat_max_float_value_" );
00046 define( "EZ_DATATYPESTRING_DEFAULT_FLOAT_FIELD", "data_float3" );
00047 define( "EZ_DATATYPESTRING_DEFAULT_FLOAT_VARIABLE", "_ezfloat_default_value_" );
00048 define( "EZ_DATATYPESTRING_FLOAT_INPUT_STATE_FIELD", "data_float4" );
00049 define( "EZ_FLOAT_NO_MIN_MAX_VALUE", 0 );
00050 define( "EZ_FLOAT_HAS_MIN_VALUE", 1 );
00051 define( "EZ_FLOAT_HAS_MAX_VALUE", 2 );
00052 define( "EZ_FLOAT_HAS_MIN_MAX_VALUE", 3 );
00053
00054 class eZFloatType extends eZDataType
00055 {
00056 function eZFloatType()
00057 {
00058 $this->eZDataType( EZ_DATATYPESTRING_FLOAT, ezi18n( 'kernel/classes/datatypes', "Float", 'Datatype name' ),
00059 array( 'serialize_supported' => true,
00060 'object_serialize_map' => array( 'data_float' => 'value' ) ) );
00061 $this->FloatValidator = new eZFloatValidator();
00062 }
00063
00064
00065
00066
00067 function initializeObjectAttribute( &$contentObjectAttribute, $currentVersion, &$originalContentObjectAttribute )
00068 {
00069 if ( $currentVersion != false )
00070 {
00071
00072
00073
00074 $dataFloat = $originalContentObjectAttribute->attribute( "data_float" );
00075 $contentObjectAttribute->setAttribute( "data_float", $dataFloat );
00076 }
00077 else
00078 {
00079 $contentClassAttribute =& $contentObjectAttribute->contentClassAttribute();
00080 $default = $contentClassAttribute->attribute( "data_float3" );
00081 if ( $default !== 0 )
00082 {
00083 $contentObjectAttribute->setAttribute( "data_float", $default );
00084 }
00085 }
00086 }
00087
00088
00089
00090
00091 function fetchObjectAttributeHTTPInput( &$http, $base, &$contentObjectAttribute )
00092 {
00093 if ( $http->hasPostVariable( $base . "_data_float_" . $contentObjectAttribute->attribute( "id" ) ) )
00094 {
00095 $data = $http->postVariable( $base . "_data_float_" . $contentObjectAttribute->attribute( "id" ) );
00096 $contentObjectAttribute->setHTTPValue( $data );
00097
00098 include_once( 'lib/ezlocale/classes/ezlocale.php' );
00099 $locale =& eZLocale::instance();
00100 $data = $locale->internalNumber( $data );
00101
00102 $data = str_replace(" ", "", $data);
00103
00104 $contentObjectAttribute->setAttribute( "data_float", $data );
00105 return true;
00106 }
00107 return false;
00108 }
00109
00110
00111
00112
00113
00114 function validateObjectAttributeHTTPInput( &$http, $base, &$contentObjectAttribute )
00115 {
00116 if ( $http->hasPostVariable( $base . "_data_float_" . $contentObjectAttribute->attribute( "id" ) ) )
00117 {
00118 $data = $http->postVariable( $base . "_data_float_" . $contentObjectAttribute->attribute( "id" ) );
00119 $data = str_replace(" ", "", $data );
00120 $classAttribute =& $contentObjectAttribute->contentClassAttribute();
00121 $min = $classAttribute->attribute( EZ_DATATYPESTRING_MIN_FLOAT_FIELD );
00122 $max = $classAttribute->attribute( EZ_DATATYPESTRING_MAX_FLOAT_FIELD );
00123 $input_state = $classAttribute->attribute( EZ_DATATYPESTRING_FLOAT_INPUT_STATE_FIELD );
00124
00125 if ( !$contentObjectAttribute->validateIsRequired() && ( $data == "" ) )
00126 {
00127 return EZ_INPUT_VALIDATOR_STATE_ACCEPTED;
00128 }
00129
00130 include_once( 'lib/ezlocale/classes/ezlocale.php' );
00131 $locale =& eZLocale::instance();
00132 $data = $locale->internalNumber( $data );
00133
00134 switch( $input_state )
00135 {
00136 case EZ_FLOAT_NO_MIN_MAX_VALUE:
00137 {
00138 $state = $this->FloatValidator->validate( $data );
00139 if( $state===1 )
00140 return EZ_INPUT_VALIDATOR_STATE_ACCEPTED;
00141 else
00142 $contentObjectAttribute->setValidationError( ezi18n( 'kernel/classes/datatypes',
00143 'The given input is not a floating point number.' ) );
00144 } break;
00145 case EZ_FLOAT_HAS_MIN_VALUE:
00146 {
00147 $this->FloatValidator->setRange( $min, false );
00148 $state = $this->FloatValidator->validate( $data );
00149 if( $state===1 )
00150 return EZ_INPUT_VALIDATOR_STATE_ACCEPTED;
00151 else
00152 $contentObjectAttribute->setValidationError( ezi18n( 'kernel/classes/datatypes',
00153 'The input must be greater than %1' ),
00154 $min );
00155 } break;
00156 case EZ_FLOAT_HAS_MAX_VALUE:
00157 {
00158 $this->FloatValidator->setRange( false, $max );
00159 $state = $this->FloatValidator->validate( $data );
00160 if( $state===1 )
00161 return EZ_INPUT_VALIDATOR_STATE_ACCEPTED;
00162 else
00163 $contentObjectAttribute->setValidationError( ezi18n( 'kernel/classes/datatypes',
00164 'The input must be less than %1' ),
00165 $max );
00166 } break;
00167 case EZ_FLOAT_HAS_MIN_MAX_VALUE:
00168 {
00169 $this->FloatValidator->setRange( $min, $max );
00170 $state = $this->FloatValidator->validate( $data );
00171 if( $state===1 )
00172 return EZ_INPUT_VALIDATOR_STATE_ACCEPTED;
00173 else
00174 $contentObjectAttribute->setValidationError( ezi18n( 'kernel/classes/datatypes',
00175 'The input is not in defined range %1 - %2' ),
00176 $min, $max );
00177 } break;
00178 }
00179 }
00180 return EZ_INPUT_VALIDATOR_STATE_INVALID;
00181 }
00182
00183 function fixupObjectAttributeHTTPInput( &$http, $base, &$contentObjectAttribute )
00184 {
00185 }
00186
00187 function storeObjectAttribute( &$attribute )
00188 {
00189 }
00190
00191 function fetchClassAttributeHTTPInput( &$http, $base, &$classAttribute )
00192 {
00193 $minValueName = $base . EZ_DATATYPESTRING_MIN_FLOAT_VARIABLE . $classAttribute->attribute( "id" );
00194 $maxValueName = $base . EZ_DATATYPESTRING_MAX_FLOAT_VARIABLE . $classAttribute->attribute( "id" );
00195 $defaultValueName = $base . EZ_DATATYPESTRING_DEFAULT_FLOAT_VARIABLE . $classAttribute->attribute( "id" );
00196
00197 if ( $http->hasPostVariable( $minValueName ) and
00198 $http->hasPostVariable( $maxValueName ) and
00199 $http->hasPostVariable( $defaultValueName ) )
00200 {
00201 include_once( 'lib/ezlocale/classes/ezlocale.php' );
00202 $locale =& eZLocale::instance();
00203
00204 $minValueValue = $http->postVariable( $minValueName );
00205 $minValueValue = str_replace(" ", "", $minValueValue );
00206 $minValueValue = $locale->internalNumber( $minValueValue );
00207 $maxValueValue = $http->postVariable( $maxValueName );
00208 $maxValueValue = str_replace(" ", "", $maxValueValue );
00209 $maxValueValue = $locale->internalNumber( $maxValueValue );
00210 $defaultValueValue = $http->postVariable( $defaultValueName );
00211 $defaultValueValue = str_replace(" ", "", $defaultValueValue );
00212 $defaultValueValue = $locale->internalNumber( $defaultValueValue );
00213
00214 $classAttribute->setAttribute( EZ_DATATYPESTRING_MIN_FLOAT_FIELD, $minValueValue );
00215 $classAttribute->setAttribute( EZ_DATATYPESTRING_MAX_FLOAT_FIELD, $maxValueValue );
00216 $classAttribute->setAttribute( EZ_DATATYPESTRING_DEFAULT_FLOAT_FIELD, $defaultValueValue );
00217
00218 if ( ( $minValueValue == "" ) && ( $maxValueValue == "") ){
00219 $input_state = EZ_FLOAT_NO_MIN_MAX_VALUE;
00220 $classAttribute->setAttribute( EZ_DATATYPESTRING_FLOAT_INPUT_STATE_FIELD, $input_state );
00221 }
00222 else if ( ( $minValueValue == "" ) && ( $maxValueValue !== "") )
00223 {
00224 $input_state = EZ_FLOAT_HAS_MAX_VALUE;
00225 $classAttribute->setAttribute( EZ_DATATYPESTRING_FLOAT_INPUT_STATE_FIELD, $input_state );
00226 }
00227 else if ( ( $minValueValue !== "" ) && ( $maxValueValue == "") )
00228 {
00229 $input_state = EZ_FLOAT_HAS_MIN_VALUE;
00230 $classAttribute->setAttribute( EZ_DATATYPESTRING_FLOAT_INPUT_STATE_FIELD, $input_state );
00231 }
00232 else
00233 {
00234 $input_state = EZ_FLOAT_HAS_MIN_MAX_VALUE;
00235 $classAttribute->setAttribute( EZ_DATATYPESTRING_FLOAT_INPUT_STATE_FIELD, $input_state );
00236 }
00237 return true;
00238 }
00239 return false;
00240 }
00241
00242 function validateClassAttributeHTTPInput( &$http, $base, &$classAttribute )
00243 {
00244 $minValueName = $base . EZ_DATATYPESTRING_MIN_FLOAT_VARIABLE . $classAttribute->attribute( "id" );
00245 $maxValueName = $base . EZ_DATATYPESTRING_MAX_FLOAT_VARIABLE . $classAttribute->attribute( "id" );
00246 $defaultValueName = $base . EZ_DATATYPESTRING_DEFAULT_FLOAT_VARIABLE . $classAttribute->attribute( "id" );
00247
00248 if ( $http->hasPostVariable( $minValueName ) and
00249 $http->hasPostVariable( $maxValueName ) and
00250 $http->hasPostVariable( $defaultValueName ) )
00251 {
00252 include_once( 'lib/ezlocale/classes/ezlocale.php' );
00253 $locale =& eZLocale::instance();
00254
00255 $minValueValue = $http->postVariable( $minValueName );
00256 $minValueValue = str_replace(" ", "", $minValueValue );
00257 $minValueValue = $locale->internalNumber( $minValueValue );
00258 $maxValueValue = $http->postVariable( $maxValueName );
00259 $maxValueValue = str_replace(" ", "", $maxValueValue );
00260 $maxValueValue = $locale->internalNumber( $maxValueValue );
00261 $defaultValueValue = $http->postVariable( $defaultValueName );
00262 $defaultValueValue = str_replace(" ", "", $defaultValueValue );
00263 $defaultValueValue = $locale->internalNumber( $defaultValueValue );
00264
00265 if ( ( $minValueValue == "" ) && ( $maxValueValue == "") ){
00266 return EZ_INPUT_VALIDATOR_STATE_ACCEPTED;
00267 }
00268 else if ( ( $minValueValue == "" ) && ( $maxValueValue !== "") )
00269 {
00270 $max_state = $this->FloatValidator->validate( $maxValueValue );
00271 return $max_state;
00272 }
00273 else if ( ( $minValueValue !== "" ) && ( $maxValueValue == "") )
00274 {
00275 $min_state = $this->FloatValidator->validate( $minValueValue );
00276 return $min_state;
00277 }
00278 else
00279 {
00280 $min_state = $this->FloatValidator->validate( $minValueValue );
00281 $max_state = $this->FloatValidator->validate( $maxValueValue );
00282 if ( ( $min_state == EZ_INPUT_VALIDATOR_STATE_ACCEPTED ) and
00283 ( $max_state == EZ_INPUT_VALIDATOR_STATE_ACCEPTED ) )
00284 {
00285 if ($minValueValue <= $maxValueValue)
00286 return EZ_INPUT_VALIDATOR_STATE_ACCEPTED;
00287 else
00288 {
00289 $state = EZ_INPUT_VALIDATOR_STATE_INTERMEDIATE;
00290 eZDebug::writeNotice( "Integer minimum value great than maximum value." );
00291 return $state;
00292 }
00293 }
00294 }
00295
00296 if ($defaultValueValue == ""){
00297 $default_state = EZ_INPUT_VALIDATOR_STATE_ACCEPTED;
00298 }
00299 else
00300 $default_state = $this->FloatValidator->validate( $defaultValueValue );
00301 }
00302 return EZ_INPUT_VALIDATOR_STATE_INVALID;
00303 }
00304
00305 function fixupClassAttributeHTTPInput( &$http, $base, &$classAttribute )
00306 {
00307 $minValueName = $base . EZ_DATATYPESTRING_MIN_FLOAT_VARIABLE . $classAttribute->attribute( "id" );
00308 $maxValueName = $base . EZ_DATATYPESTRING_MAX_FLOAT_VARIABLE . $classAttribute->attribute( "id" );
00309 if ( $http->hasPostVariable( $minValueName ) and $http->hasPostVariable( $maxValueName ) )
00310 {
00311 include_once( 'lib/ezlocale/classes/ezlocale.php' );
00312 $locale =& eZLocale::instance();
00313
00314 $minValueValue = $http->postVariable( $minValueName );
00315 $minValueValue = str_replace(" ", "", $minValueValue );
00316 $minValueValue = $locale->internalNumber( $minValueValue );
00317 $maxValueValue = $http->postVariable( $maxValueName );
00318 $maxValueValue = str_replace(" ", "", $maxValueValue );
00319 $maxValueValue = $locale->internalNumber( $maxValueValue );
00320
00321 if ($minValueValue > $maxValueValue)
00322 {
00323 $this->FloatValidator->setRange( $minValueValue, false );
00324 $maxValueValue = $this->FloatValidator->fixup( $maxValueValue );
00325 $http->setPostVariable( $maxValueName, $maxValueValue );
00326 }
00327 }
00328 }
00329
00330 function storeClassAttribute( &$attribute, $version )
00331 {
00332 }
00333
00334 function metaData( $contentObjectAttribute )
00335 {
00336 return $contentObjectAttribute->attribute( "data_float" );
00337 }
00338
00339
00340
00341
00342 function &objectAttributeContent( &$contentObjectAttribute )
00343 {
00344 return $contentObjectAttribute->attribute( 'data_float' );
00345 }
00346
00347
00348
00349
00350
00351 function title( &$contentObjectAttribute )
00352 {
00353 return $contentObjectAttribute->attribute( "data_float" );
00354 }
00355
00356 function hasObjectAttributeContent( &$contentObjectAttribute )
00357 {
00358 return true;
00359 }
00360
00361
00362
00363
00364 function toString( $contentObjectAttribute )
00365 {
00366 return $contentObjectAttribute->attribute( 'data_float' );
00367 }
00368
00369 function fromString( &$contentObjectAttribute, $string )
00370 {
00371 return $contentObjectAttribute->setAttribute( 'data_float', $string );
00372 }
00373
00374
00375
00376
00377 function serializeContentClassAttribute( &$classAttribute, &$attributeNode, &$attributeParametersNode )
00378 {
00379 $defaultValue = $classAttribute->attribute( EZ_DATATYPESTRING_DEFAULT_FLOAT_FIELD );
00380 $minValue = $classAttribute->attribute( EZ_DATATYPESTRING_MIN_FLOAT_FIELD );
00381 $maxValue = $classAttribute->attribute( EZ_DATATYPESTRING_MAX_FLOAT_FIELD );
00382 $minMaxState = $classAttribute->attribute( EZ_DATATYPESTRING_FLOAT_INPUT_STATE_FIELD );
00383 $attributeParametersNode->appendChild( eZDOMDocument::createElementTextNode( 'default-value', $defaultValue ) );
00384 if ( $minMaxState == EZ_FLOAT_HAS_MIN_VALUE or $minMaxState == EZ_FLOAT_HAS_MIN_MAX_VALUE )
00385 $attributeParametersNode->appendChild( eZDOMDocument::createElementTextNode( 'min-value', $minValue ) );
00386 if ( $minMaxState == EZ_FLOAT_HAS_MAX_VALUE or $minMaxState == EZ_FLOAT_HAS_MIN_MAX_VALUE )
00387 $attributeParametersNode->appendChild( eZDOMDocument::createElementTextNode( 'max-value', $maxValue ) );
00388 }
00389
00390
00391
00392
00393 function unserializeContentClassAttribute( &$classAttribute, &$attributeNode, &$attributeParametersNode )
00394 {
00395 $defaultValue = $attributeParametersNode->elementTextContentByName( 'default-value' );
00396 $minValue = $attributeParametersNode->elementTextContentByName( 'min-value' );
00397 $maxValue = $attributeParametersNode->elementTextContentByName( 'max-value' );
00398
00399 if ( strlen( $minValue ) > 0 and strlen( $maxValue ) > 0 )
00400 $minMaxState = EZ_FLOAT_HAS_MIN_MAX_VALUE;
00401 else if ( strlen( $minValue ) > 0 )
00402 $minMaxState = EZ_FLOAT_HAS_MIN_VALUE;
00403 else if ( strlen( $maxValue ) > 0 )
00404 $minMaxState = EZ_FLOAT_HAS_MAX_VALUE;
00405 else
00406 $minMaxState = EZ_FLOAT_NO_MIN_MAX_VALUE;
00407
00408 $classAttribute->setAttribute( EZ_DATATYPESTRING_DEFAULT_FLOAT_FIELD, $defaultValue );
00409 $classAttribute->setAttribute( EZ_DATATYPESTRING_MIN_FLOAT_FIELD, $minValue );
00410 $classAttribute->setAttribute( EZ_DATATYPESTRING_MAX_FLOAT_FIELD, $maxValue );
00411 $classAttribute->setAttribute( EZ_DATATYPESTRING_FLOAT_INPUT_STATE_FIELD, $minMaxState );
00412 }
00413
00414
00415
00416 var $FloatValidator;
00417 }
00418
00419 eZDataType::register( EZ_DATATYPESTRING_FLOAT, "ezfloattype" );
00420
00421 ?>