Merge branch 'master' of github.com:roundcube/roundcubemail
| | |
| | | // use only strict comparison (mode = 1) |
| | | // @TODO: partial search, e.g. match only day and month |
| | | if (in_array($colname, $this->date_cols)) { |
| | | return (($value = rcube_utils::strtotime($value)) |
| | | && ($search = rcube_utils::strtotime($search)) |
| | | && date('Ymd', $value) == date('Ymd', $search)); |
| | | return (($value = rcube_utils::anytodatetime($value)) |
| | | && ($search = rcube_utils::anytodatetime($search)) |
| | | && $value->format('Ymd') == $search->format('Ymd')); |
| | | } |
| | | |
| | | // composite field, e.g. address |
| | |
| | | foreach ($save_data as $key => $values) { |
| | | list($field, $section) = explode(':', $key); |
| | | $fulltext = in_array($field, $this->fulltext_cols); |
| | | // avoid casting DateTime objects to array |
| | | if (is_object($values) && is_a($values, 'DateTime')) { |
| | | $values = array(0 => $values); |
| | | } |
| | | foreach ((array)$values as $value) { |
| | | if (isset($value)) |
| | | $vcard->set($field, $value, $section); |
| | |
| | | return (int) $ts; |
| | | } |
| | | |
| | | /** |
| | | * Date parsing function that turns the given value into a DateTime object |
| | | * |
| | | * @param string $date Date string |
| | | * |
| | | * @return object DateTime instance or false on failure |
| | | */ |
| | | public static function anytodatetime($date) |
| | | { |
| | | if (is_object($date) && is_a($date, 'DateTime')) { |
| | | return $date; |
| | | } |
| | | |
| | | $dt = false; |
| | | $date = trim($date); |
| | | |
| | | // try to parse string with DateTime first |
| | | if (!empty($date)) { |
| | | try { |
| | | $dt = new DateTime($date); |
| | | } |
| | | catch (Exception $e) { |
| | | // ignore |
| | | } |
| | | } |
| | | |
| | | // try our advanced strtotime() method |
| | | if (!$dt && ($timestamp = self::strtotime($date))) { |
| | | try { |
| | | $dt = new DateTime("@".$timestamp); |
| | | } |
| | | catch (Exception $e) { |
| | | // ignore |
| | | } |
| | | } |
| | | |
| | | return $dt; |
| | | } |
| | | |
| | | /* |
| | | * Idn_to_ascii wrapper. |
| | |
| | | |
| | | case 'birthday': |
| | | case 'anniversary': |
| | | if (($val = rcube_utils::strtotime($value)) && ($fn = self::$fieldmap[$field])) { |
| | | $this->raw[$fn][] = array(0 => date('Y-m-d', $val), 'value' => array('date')); |
| | | if (($val = rcube_utils::anytodatetime($value)) && ($fn = self::$fieldmap[$field])) { |
| | | $this->raw[$fn][] = array(0 => $val->format('Y-m-d'), 'value' => array('date')); |
| | | } |
| | | break; |
| | | |
| | |
| | | } |
| | | else if (isset($_POST[$fname])) { |
| | | $a_record[$col] = get_input_value($fname, RCUBE_INPUT_POST, true); |
| | | |
| | | // normalize the submitted date strings |
| | | if ($colprop['type'] == 'date') { |
| | | if ($timestamp = rcube_utils::strtotime($a_record[$col])) { |
| | | $a_record[$col] = date('Y-m-d', $timestamp); |
| | | } |
| | | else { |
| | | unset($a_record[$col]); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |