/**
  * @param mixed $val
  * @param array $data
  * @return $this
  */
 public function setValue($val, $data = array())
 {
     // convert to a number
     parent::setValue(str_replace('%', '', $val));
     $dataVal = $this->dataValue();
     // divide by 100 if needed and set again
     if (strpos($val, '%') !== false || $dataVal > 1 || $dataVal < -1) {
         $dataVal = (double) $dataVal / 100.0;
         parent::setValue($dataVal);
     }
     return $this;
 }
 public function setValue($val)
 {
     $this->value = $val;
     if (is_array($val)) {
         $this->fieldCurrency->setValue($val['Currency']);
         $this->fieldAmount->setValue($val['Amount']);
     } elseif ($val instanceof DBMoney) {
         $this->fieldCurrency->setValue($val->getCurrency());
         $this->fieldAmount->setValue($val->getAmount());
     }
     // @todo Format numbers according to current locale, incl.
     //  decimal and thousands signs, while respecting the stored
     //  precision in the database without truncating it during display
     //  and subsequent save operations
     return $this;
 }
 protected function checkInputValidation($locale, $tests)
 {
     i18n::set_locale($locale);
     $field = new NumericField('Number');
     $validator = new RequiredFields('Number');
     foreach ($tests as $input => $output) {
         // Both decimal and thousands B
         $field->setValue($input);
         if ($output === false) {
             $this->assertFalse($field->validate($validator), "Expect validation to fail for input {$input} in locale {$locale}");
             $this->assertEquals(0, $field->dataValue(), "Expect invalid value to be rewritten to 0 in locale {$locale}");
             // Even invalid values shouldn't be rewritten
             $this->assertEquals($this->clean($input), $field->Value(), "Expected input {$input} to be saved in the field in locale {$locale}");
         } else {
             $this->assertTrue($field->validate($validator), "Expect validation to succeed for {$input} in locale {$locale}");
             $this->assertEquals($output, $field->dataValue(), "Expect value {$input} to be mapped to {$output} in locale {$locale}");
         }
     }
 }
예제 #4
0
 public function testValidator()
 {
     i18n::set_locale('en_US');
     $field = new NumericField('Number');
     $field->setValue('12.00');
     $validator = new RequiredFields('Number');
     $this->assertTrue($field->validate($validator));
     $field->setValue('12,00');
     $this->assertFalse($field->validate($validator));
     $field->setValue('0');
     $this->assertTrue($field->validate($validator));
     $field->setValue(false);
     $this->assertFalse($field->validate($validator));
     i18n::set_locale('de_DE');
     $field->setValue('12,00');
     $validator = new RequiredFields();
     $this->assertTrue($field->validate($validator));
     $field->setValue('12.00');
     $this->assertFalse($field->validate($validator));
     $field->setValue(0);
     $this->assertRegExp("#<span[^>]+>\\s*0\\s*<\\/span>#", "" . $field->performReadonlyTransformation()->Field() . "");
 }
 public function testValidator()
 {
     i18n::set_locale('en_US');
     $field = new NumericField('Number');
     $field->setValue('12.00');
     $validator = new RequiredFields('Number');
     $this->assertTrue($field->validate($validator));
     $field->setValue('12,00');
     $this->assertFalse($field->validate($validator));
     $field->setValue('0');
     $this->assertTrue($field->validate($validator));
     $field->setValue(false);
     $this->assertFalse($field->validate($validator));
     i18n::set_locale('de_DE');
     $field->setValue('12,00');
     $validator = new RequiredFields();
     $this->assertTrue($field->validate($validator));
     $field->setValue('12.00');
     $this->assertFalse($field->validate($validator));
 }
 /**
  * Test empty values
  */
 public function testEmptyValidator()
 {
     i18n::set_locale('en_US');
     $field = new NumericField('Number');
     $validator = new RequiredFields('Number');
     // Treats '0' as given for the sake of required fields
     $field->setValue('0');
     $this->assertTrue($field->validate($validator));
     $this->assertEquals(0, $field->dataValue());
     // Treat literal 0
     $field->setValue(0);
     $this->assertTrue($field->validate($validator));
     $this->assertEquals(0, $field->dataValue());
     // Should fail the 'required but not given' test
     $field->setValue('');
     $this->assertFalse($field->validate($validator));
     $field->setValue(false);
     $this->assertFalse($field->validate($validator));
 }
 /**
  * Set value of the {@link NumericField} because that is the actual value 
  * of the stock level. If unlimited stock is selected the value is -1.
  * 
  * (non-PHPdoc)
  * @see FormField::setValue()
  * @return StockField
  */
 function setValue($value)
 {
     $this->value = $value;
     $this->stockLevelField->setValue($value);
     return $this;
 }
 public function GameSignupFields($reg)
 {
     $fields = new FieldList();
     $currentID = $this->getCurrentEvent()->ID;
     $event = Event::get()->byID($currentID);
     $prefNum = $event->PreferencesPerSession;
     $reg = $this->getCurrentRegistration();
     $fields->push(new HiddenField('RegistrationID', 'Reg', $reg->ID));
     $fields->push($fav = new HiddenField('FavouriteID', 'Favourite'));
     $fav->addExtraClass('favourite-id');
     $fields->push(new LiteralField('no-js', '<p class="js-hide">This page works better with javascript. If you can\'t use javascript, rank the items below in your order of preference. 1 for your first choice, 2 for your second. Note, only the top ' . $prefNum . ' will be recorded</p>'));
     for ($session = 1; $session <= $event->NumberOfSessions; $session++) {
         $evenOdd = $session % 2 == 0 ? 'even' : 'odd';
         $fieldset = '<fieldset id="round' . $session . '" class="preference-group preference-' . $prefNum . ' data-preference-select="preference-select-group">';
         $fields->push(new LiteralField('Heading_' . $session, '<h5>Round ' . $session . ' preferences</h5>' . $fieldset));
         $games = Game::get()->filter(array('Session' => $session, 'ParentID' => $currentID, 'Status' => true))->sort('RAND()');
         $i = 1;
         foreach ($games as $game) {
             $gameOptions = new NumericField("GameID_" . $game->ID, '');
             $gameOptions->setValue($i)->setRightTitle($game->Title)->setAttribute('type', 'number')->setAttribute('data-id', $game->ID)->addExtraClass('small-input js-hide-input');
             $fields->push($gameOptions);
             $i++;
         }
         // Add not playing option
         $gameOptions = new NumericField("NotPlaying_" . $session, '');
         $gameOptions->setValue($i)->setRightTitle("No game (or Facilitating)")->setAttribute('type', 'number')->addExtraClass('small-input js-hide-input not-playing');
         $fields->push($gameOptions);
         $fields->push(new LiteralField('fieldset', '</fieldset>'));
     }
     return $fields;
 }