/** * Performs the count check * * @param \Cake\Datasource\EntityInterface $entity The entity from where to extract the fields. * @param array $options Options passed to the check. * @return bool True if successful, else false. */ public function __invoke(EntityInterface $entity, array $options) { $value = $entity->{$this->_field}; if (!is_array($value) && !$value instanceof Countable) { return false; } return Validation::comparison(count($value), $options['operator'], $options['count']); }
public static function height($check, $operator = null, $check2 = null) { if (is_array($check) && isset($check['tmp_name'])) { $check = $check['tmp_name']; } $imagine = new Imagine(); $image = $imagine->open($check); $size = $image->getSize(); $height = $size->getHeight(); return \Cake\Validation\Validation::comparison($height, $operator, $check2); }
/** * testComparisonAsArray method * * @return void */ public function testComparisonAsArray() { $this->assertTrue(Validation::comparison(['check1' => 7, 'operator' => 'is greater', 'check2' => 6])); $this->assertTrue(Validation::comparison(['check1' => 7, 'operator' => '>', 'check2' => 6])); $this->assertTrue(Validation::comparison(['check1' => 6, 'operator' => 'is less', 'check2' => 7])); $this->assertTrue(Validation::comparison(['check1' => 6, 'operator' => '<', 'check2' => 7])); $this->assertTrue(Validation::comparison(['check1' => 7, 'operator' => 'greater or equal', 'check2' => 7])); $this->assertTrue(Validation::comparison(['check1' => 7, 'operator' => '>=', 'check2' => 7])); $this->assertTrue(Validation::comparison(['check1' => 7, 'operator' => 'greater or equal', 'check2' => 6])); $this->assertTrue(Validation::comparison(['check1' => 7, 'operator' => '>=', 'check2' => 6])); $this->assertTrue(Validation::comparison(['check1' => 6, 'operator' => 'less or equal', 'check2' => 7])); $this->assertTrue(Validation::comparison(['check1' => 6, 'operator' => '<=', 'check2' => 7])); $this->assertTrue(Validation::comparison(['check1' => 7, 'operator' => 'equal to', 'check2' => 7])); $this->assertTrue(Validation::comparison(['check1' => 7, 'operator' => '==', 'check2' => 7])); $this->assertTrue(Validation::comparison(['check1' => 7, 'operator' => 'not equal', 'check2' => 6])); $this->assertTrue(Validation::comparison(['check1' => 7, 'operator' => '!=', 'check2' => 6])); $this->assertFalse(Validation::comparison(['check1' => 6, 'operator' => 'is greater', 'check2' => 7])); $this->assertFalse(Validation::comparison(['check1' => 6, 'operator' => '>', 'check2' => 7])); $this->assertFalse(Validation::comparison(['check1' => 7, 'operator' => 'is less', 'check2' => 6])); $this->assertFalse(Validation::comparison(['check1' => 7, 'operator' => '<', 'check2' => 6])); $this->assertFalse(Validation::comparison(['check1' => 6, 'operator' => 'greater or equal', 'check2' => 7])); $this->assertFalse(Validation::comparison(['check1' => 6, 'operator' => '>=', 'check2' => 7])); $this->assertFalse(Validation::comparison(['check1' => 6, 'operator' => 'greater or equal', 'check2' => 7])); $this->assertFalse(Validation::comparison(['check1' => 6, 'operator' => '>=', 'check2' => 7])); $this->assertFalse(Validation::comparison(['check1' => 7, 'operator' => 'less or equal', 'check2' => 6])); $this->assertFalse(Validation::comparison(['check1' => 7, 'operator' => '<=', 'check2' => 6])); $this->assertFalse(Validation::comparison(['check1' => 7, 'operator' => 'equal to', 'check2' => 6])); $this->assertFalse(Validation::comparison(['check1' => 7, 'operator' => '==', 'check2' => 6])); $this->assertFalse(Validation::comparison(['check1' => 7, 'operator' => 'not equal', 'check2' => 7])); $this->assertFalse(Validation::comparison(['check1' => 7, 'operator' => '!=', 'check2' => 7])); }
/** * Test comparison casting values before comparisons. * * @return void */ public function testComparisonTypeChecks() { $this->assertFalse(Validation::comparison('\\x028', '>=', 1), 'hexish encoding fails'); $this->assertFalse(Validation::comparison('0b010', '>=', 1), 'binary string data fails'); $this->assertFalse(Validation::comparison('0x01', '>=', 1), 'hex string data fails'); $this->assertFalse(Validation::comparison('0x1', '>=', 1), 'hex string data fails'); $this->assertFalse(Validation::comparison('\\x028', '>=', 1.5), 'hexish encoding fails'); $this->assertFalse(Validation::comparison('0b010', '>=', 1.5), 'binary string data fails'); $this->assertFalse(Validation::comparison('0x02', '>=', 1.5), 'hex string data fails'); }
/** * Image size validation method * * @param mixed $check * @param array $options is an array with key width or height and a value of array * with two options, operator and value. For example: * array('height' => array('==', 100)) will only be true if the image has a * height of exactly 100px. See the CakePHP core class and method * Validation::comparison for all operators. * @return boolean true * @see Validation::comparison() * @throws \InvalidArgumentException */ public function validateImageSize($check, array $options = []) { if (!isset($options['height']) && !isset($options['width'])) { throw new \InvalidArgumentException('Missing image size validation options! You must provide a hight and / or width.'); } if (is_string($check)) { $imageFile = $check; } else { $check = array_values($check); $check = $check[0]; if (is_array($check) && isset($check['tmp_name'])) { $imageFile = $check['tmp_name']; } else { $imageFile = $check; } } $imageSizes = $this->getImageSize($imageFile); if (isset($options['height'])) { $height = Validation::comparison($imageSizes[1], $options['height'][0], $options['height'][1]); } else { $height = true; } if (isset($options['width'])) { $width = Validation::comparison($imageSizes[0], $options['width'][0], $options['width'][1]); } else { $width = true; } if ($height === false || $width === false) { return false; } return true; }
/** * Validates the image size. * * @param array $value * @param array $options * @return boolean */ public function imageSize($value, $options) { if (!isset($options['height']) && !isset($options['width'])) { throw new \InvalidArgumentException(__d('file_storage', 'Invalid image size validation parameters!')); } list($width, $height) = getimagesize($value['tmp_name']); if (isset($options['height'])) { $validHeight = Validation::comparison($height, $options['height'][1], $options['height'][0]); } if (isset($options['width'])) { $validWidth = Validation::comparison($width, $options['width'][1], $options['width'][0]); } if (isset($validHeight) && isset($validWidth)) { return $validHeight && $validWidth; } if (isset($validHeight)) { return $validHeight; } if (isset($validWidth)) { return $validWidth; } throw new \InvalidArgumentException('The 2nd argument is missing one or more configuration keyes.'); }