/** * * value should be array * array('dynamic-bootp 0.0.0.0 0.0.0.0') * or * array('0.0.0.0 0.0.0.0') * * @see sfValidatorBase */ protected function doClean($value) { $choices = $this->getOption('choices'); if ($choices instanceof sfCallable) { $choices = $choices->call(); } if (!is_array($value)) { throw new sfValidatorError($this, 'type_error'); } $match_bootp = '/^' . self::$bootp_flag . '/'; foreach ($value as $v) { if (preg_match($match_bootp, $v)) { $ranges_data = explode(' ', $v, 3); if (count($ranges_data) != 3) { throw new sfValidatorError($this, 'invalid', array('value' => $v)); } $dyn_bootp = $ranges_data[0]; $from_ip = $ranges_data[1]; $to_ip = $ranges_data[2]; $validate_bootp = new sfValidatorRegex(array('pattern' => '#^' . self::$bootp_flag . '#'), array('invalid' => $this->getMessage('invalid'))); $validate_bootp->doClean($dyn_bootp); // should be dynamic bootp flag $ip = new ValidatorIP(); $ip->doClean($from_ip); $ip->doClean($to_ip); } else { $ranges_data = explode(' ', $v, 2); if (count($ranges_data) != 2) { throw new sfValidatorError($this, 'invalid', array('value' => $v)); } $from_ip = $ranges_data[0]; $to_ip = $ranges_data[1]; $ip = new ValidatorIP(); $ip->doClean($from_ip); $ip->doClean($to_ip); } } return $value; }
private function validateIpsPairs($data, $field) { $ips_string = $this->getValue($data, $field); $ips = preg_replace('/\\s+/', ' ', $ips_string); $ips_split = explode(', ', $ips); foreach ($ips_split as $ip) { if ($ips = $this->isPair($ip)) { $validate_ip1 = new ValidatorIP(); $validate_ip1->validate($ips[0]); $this->addError($field, $validate_ip1->getError()); $validate_ip2 = new ValidatorIP(); $validate_ip2->validate($ips[1]); $this->addError($field, $validate_ip2->getError()); } else { $this->addError($field, new sfValidatorError($this, 'invalid', array('value' => $ip))); } } }