/** * Returns the calculated month * * @param string $calc Calculation to make * @param string|integer|array|IfwPsn_Vendor_Zend_Date $month Month to calculate with, if null the actual month is taken * @param string|IfwPsn_Vendor_Zend_Locale $locale Locale for parsing input * @return integer|IfwPsn_Vendor_Zend_Date new time * @throws IfwPsn_Vendor_Zend_Date_Exception */ private function _month($calc, $month, $locale) { if ($month === null) { require_once IFW_PSN_LIB_ROOT . 'IfwPsn/Vendor/Zend/Date/Exception.php'; throw new IfwPsn_Vendor_Zend_Date_Exception('parameter $month must be set, null is not allowed'); } if ($locale === null) { $locale = $this->getLocale(); } if ($month instanceof IfwPsn_Vendor_Zend_Date) { // extract month from object $found = $month->toString(self::MONTH_SHORT, 'iso', $locale); } else { if (is_numeric($month)) { $found = $month; } else { if (is_array($month)) { if (isset($month['month']) === true) { $month = $month['month']; } else { require_once IFW_PSN_LIB_ROOT . 'IfwPsn/Vendor/Zend/Date/Exception.php'; throw new IfwPsn_Vendor_Zend_Date_Exception("no month given in array"); } } else { $monthlist = IfwPsn_Vendor_Zend_Locale_Data::getList($locale, 'month'); $monthlist2 = IfwPsn_Vendor_Zend_Locale_Data::getList($locale, 'month', array('gregorian', 'format', 'abbreviated')); $monthlist = array_merge($monthlist, $monthlist2); $found = 0; $cnt = 0; foreach ($monthlist as $key => $value) { if (strtoupper($value) == strtoupper($month)) { $found = $key % 12 + 1; break; } ++$cnt; } if ($found == 0) { foreach ($monthlist2 as $key => $value) { if (strtoupper(iconv_substr($value, 0, 1, 'UTF-8')) == strtoupper($month)) { $found = $key + 1; break; } ++$cnt; } } if ($found == 0) { require_once IFW_PSN_LIB_ROOT . 'IfwPsn/Vendor/Zend/Date/Exception.php'; throw new IfwPsn_Vendor_Zend_Date_Exception("unknown month name ({$month})", 0, null, $month); } } } } $return = $this->_calcdetail($calc, $found, self::MONTH_SHORT, $locale); if ($calc != 'cmp') { return $this; } return $return; }
/** * Check if the given date fits the given format * * @param string $value Date to check * @return boolean False when date does not fit the format */ private function _checkFormat($value) { try { require_once IFW_PSN_LIB_ROOT . 'IfwPsn/Vendor/Zend/Locale/Format.php'; $parsed = IfwPsn_Vendor_Zend_Locale_Format::getDate($value, array('date_format' => $this->_format, 'format_type' => 'iso', 'fix_date' => false)); if (isset($parsed['year']) and (strpos(strtoupper($this->_format), 'YY') !== false and strpos(strtoupper($this->_format), 'YYYY') === false)) { $parsed['year'] = IfwPsn_Vendor_Zend_Date::getFullYear($parsed['year']); } } catch (Exception $e) { // Date can not be parsed return false; } if ((strpos($this->_format, 'Y') !== false or strpos($this->_format, 'y') !== false) and !isset($parsed['year'])) { // Year expected but not found return false; } if (strpos($this->_format, 'M') !== false and !isset($parsed['month'])) { // Month expected but not found return false; } if (strpos($this->_format, 'd') !== false and !isset($parsed['day'])) { // Day expected but not found return false; } if ((strpos($this->_format, 'H') !== false or strpos($this->_format, 'h') !== false) and !isset($parsed['hour'])) { // Hour expected but not found return false; } if (strpos($this->_format, 'm') !== false and !isset($parsed['minute'])) { // Minute expected but not found return false; } if (strpos($this->_format, 's') !== false and !isset($parsed['second'])) { // Second expected but not found return false; } // Date fits the format return true; }
/** * Generate a new Cookie object from a cookie string * (for example the value of the Set-Cookie HTTP header) * * @param string $cookieStr * @param IfwPsn_Vendor_Zend_Uri_Http|string $refUri Reference URI for default values (domain, path) * @param boolean $encodeValue Whether or not the cookie's value should be * passed through urlencode/urldecode * @return IfwPsn_Vendor_Zend_Http_Cookie A new IfwPsn_Vendor_Zend_Http_Cookie object or false on failure. */ public static function fromString($cookieStr, $refUri = null, $encodeValue = true) { // Set default values if (is_string($refUri)) { $refUri = IfwPsn_Vendor_Zend_Uri_Http::factory($refUri); } $name = ''; $value = ''; $domain = ''; $path = ''; $expires = null; $secure = false; $parts = explode(';', $cookieStr); // If first part does not include '=', fail if (strpos($parts[0], '=') === false) { return false; } // Get the name and value of the cookie list($name, $value) = explode('=', trim(array_shift($parts)), 2); $name = trim($name); if ($encodeValue) { $value = urldecode(trim($value)); } // Set default domain and path if ($refUri instanceof IfwPsn_Vendor_Zend_Uri_Http) { $domain = $refUri->getHost(); $path = $refUri->getPath(); $path = substr($path, 0, strrpos($path, '/')); } // Set other cookie parameters foreach ($parts as $part) { $part = trim($part); if (strtolower($part) == 'secure') { $secure = true; continue; } $keyValue = explode('=', $part, 2); if (count($keyValue) == 2) { list($k, $v) = $keyValue; switch (strtolower($k)) { case 'expires': if (($expires = strtotime($v)) === false) { /** * The expiration is past Tue, 19 Jan 2038 03:14:07 UTC * the maximum for 32-bit signed integer. IfwPsn_Vendor_Zend_Date * can get around that limit. * * @see IfwPsn_Vendor_Zend_Date */ require_once IFW_PSN_LIB_ROOT . 'IfwPsn/Vendor/Zend/Date.php'; $expireDate = new IfwPsn_Vendor_Zend_Date($v); $expires = $expireDate->getTimestamp(); } break; case 'path': $path = $v; break; case 'domain': $domain = $v; break; default: break; } } } if ($name !== '') { $ret = new self($name, $value, $domain, $expires, $path, $secure); $ret->encodeValue = $encodeValue ? true : false; return $ret; } else { return false; } }
/** * Defined by IfwPsn_Vendor_Zend_Filter_Interface * * Normalizes the given input * * @param string $value Value to normalized * @return string|array The normalized value */ public function filter($value) { if (is_array($value)) { require_once IFW_PSN_LIB_ROOT . 'IfwPsn/Vendor/Zend/Date.php'; $date = new IfwPsn_Vendor_Zend_Date($value, $this->_options['locale']); return $date->toString($this->_options['date_format']); } else { if ($this->_options['precision'] === 0) { return IfwPsn_Vendor_Zend_Locale_Format::toInteger($value, $this->_options); } else { if ($this->_options['precision'] === null) { return IfwPsn_Vendor_Zend_Locale_Format::toFloat($value, $this->_options); } } } return IfwPsn_Vendor_Zend_Locale_Format::toNumber($value, $this->_options); }