Example #1
0
 /**
  * Creates a smart search condition for a given search value, and adds it
  * to the query that will be used for performing the actual search.
  *
  * @param int $id The unique smart search criterium identifier.
  * @param int $nr The element number in the path.
  * @param array $path The remaining attribute path.
  * @param Query $query The query to which the condition will be added.
  * @param string $ownerAlias The owner table alias to use.
  * @param mixed $value The value the user has entered in the searchbox.
  * @param string $mode The searchmode to use.
  */
 public function smartSearchCondition($id, $nr, $path, $query, $ownerAlias, $value, $mode)
 {
     // one-to-many join means we need to perform a distinct select
     $query->setDistinct(true);
     if (count($path) > 0) {
         $this->createDestination();
         $destAlias = "ss_{$id}_{$nr}_" . $this->fieldName();
         $query->addJoin($this->m_destInstance->m_table, $destAlias, $this->getJoinCondition($query, $ownerAlias, $destAlias), false);
         $attrName = array_shift($path);
         $attr = $this->m_destInstance->getAttribute($attrName);
         if (is_object($attr)) {
             $attr->smartSearchCondition($id, $nr + 1, $path, $query, $destAlias, $value, $mode);
         }
     } else {
         $this->searchCondition($query, $ownerAlias, $value, $mode);
     }
 }
Example #2
0
 /**
  * Creates an search condition for a given search value.
  *
  * @param Query $query The query to which the condition will be added.
  * @param string $table The name of the table in which this attribute
  *                                 is stored
  * @param mixed $value The value the user has entered in the searchbox
  * @param string $searchmode The searchmode to use. This can be any one
  *                                 of the supported modes, as returned by this
  *                                 attribute's getSearchModes() method.
  * @param string $fieldaliasprefix optional prefix for the fieldalias in the table
  */
 public function searchCondition($query, $table, $value, $searchmode, $fieldaliasprefix = '')
 {
     $ownerFields = $this->getOwnerFields();
     // We only support 'exact' matches.
     // But you can select more than one value, which we search using the IN() statement,
     // which should work in any ansi compatible database.
     if (is_array($value) && count($value) > 0 && $value[0] != '') {
         // This last condition is for when the user selected the 'search all' option, in which case, we don't add conditions at all.
         $this->createLink();
         $query->addJoin($this->m_linkInstance->m_table, $this->fieldName(), $table . '.' . $ownerFields[0] . '=' . $this->fieldName() . '.' . $this->getLocalKey(), false);
         $query->setDistinct(true);
         if (count($value) == 1) {
             // exactly one value
             $query->addSearchCondition($query->exactCondition($this->fieldName() . '.' . $this->getRemoteKey(), $this->escapeSQL($value[0])));
         } else {
             // search for more values using IN()
             $query->addSearchCondition($this->fieldName() . '.' . $this->getRemoteKey() . " IN ('" . implode("','", $value) . "')");
         }
     }
 }