public function buildFilterQuery($filter, &$joins, array &$where, Register $parameter_output)
 {
     $filter = $this->processFilter($filter);
     $filter_join = DataSource::FILTER_OR;
     $db = Symphony::Database();
     // Boolean searches:
     if ($filter->type == 'boolean-search') {
         $handle = $this->buildFilterJoin($joins);
         $value = DataSource::replaceParametersInString(trim($filter->value), $parameter_output);
         $mode = preg_match('/^not(\\W)/i', $value) ? '-' : '+';
         // Replace ' and ' with ' +':
         $value = preg_replace('/(\\W)and(\\W)/i', '\\1+\\2', $value);
         $value = preg_replace('/(^)and(\\W)|(\\W)and($)/i', '\\2\\3', $value);
         $value = preg_replace('/(\\W)not(\\W)/i', '\\1-\\2', $value);
         $value = preg_replace('/(^)not(\\W)|(\\W)not($)/i', '\\2\\3', $value);
         $value = preg_replace('/([\\+\\-])\\s*/', '\\1', $mode . $value);
         $statement = $db->prepareQuery("MATCH ({$handle}.value) AGAINST ('%s' IN BOOLEAN MODE)", array($value));
         $where[] = "(\n\t{$statement}\n)";
         return true;
     }
     return parent::buildFilterQuery($filter, $joins, $where, $parameter_output);
 }
 public function buildFilterQuery($filter, &$joins, array &$where, Register $parameter_output = null)
 {
     $filter = $this->processFilter($filter);
     $db = Symphony::Database();
     $statements = array();
     if (!is_array($values)) {
         $values = array();
     }
     // Exact matches:
     switch ($filter->type) {
         case 'is':
             $operator = '=';
             break;
         case 'is-not':
             $operator = '!=';
             break;
         case 'earlier-than':
             $operator = '>';
             break;
         case 'earlier-than-or-equal':
             $operator = '>=';
             break;
         case 'later-than':
             $operator = '<';
             break;
         case 'later-than-or-equal':
             $operator = '<=';
             break;
     }
     if (empty($this->last_handle)) {
         $this->join_handle = $this->buildFilterJoin($joins);
     }
     $handle = $this->join_handle;
     $value = DataSource::replaceParametersInString(trim($filter->value), $parameter_output);
     if ($filter->gmt == 'yes') {
         $value = strtotime($value);
     } else {
         $value = DateTimeObj::fromGMT($value);
     }
     $value = date('Y-m-d H:i:s', $value);
     $statements[] = $db->prepareQuery("'%s' {$operator} {$handle}.value", array($value));
     if (empty($statements)) {
         return true;
     }
     if ($filter_join == DataSource::FILTER_OR) {
         $statement = "(\n\t" . implode("\n\tOR ", $statements) . "\n)";
     } else {
         $statement = "(\n\t" . implode("\n\tAND ", $statements) . "\n)";
     }
     $where[] = $statement;
     return true;
 }
 public function render(Register $parameter_output)
 {
     $document = new XMLDocument();
     $root = $document->createElement($this->parameters()->{'root-element'});
     $addresses = DataSource::replaceParametersInString(trim($this->parameters()->{'addresses'}), $parameter_output);
     $addresses = preg_split('%,\\s*%', $addresses);
     $params = array('s' => $this->parameters()->{'size'}, 'r' => $this->parameters()->{'rating'}, 'd' => $this->parameters()->{'default'});
     foreach ($params as $key => $value) {
         $value = DataSource::replaceParametersInString($value, $parameter_output);
         if ($key == 's') {
             $value = (int) $value;
         }
         $params[$key] = $value;
     }
     if ($params['s'] < 1 or $params['s'] > 512) {
         unset($params['s']);
     }
     if (!in_array($params['r'], array('g', 'pg', 'r', 'x'))) {
         unset($params['r']);
     }
     if (is_null($params['d'])) {
         unset($params['d']);
     }
     foreach ($addresses as $address) {
         $address = trim($address);
         if (empty($address)) {
             continue;
         }
         $hash = md5($address);
         $url = new URLWriter('http://www.gravatar.com/avatar/' . $hash, $params);
         $element = $document->createElement('avatar');
         $element->setAttribute('email', $address);
         $element->setAttribute('url', (string) $url);
         $root->appendChild($element);
     }
     $document->appendChild($root);
     return $document;
 }