function createExtraFieldsCriteria($categoryId, $extraFieldsValues) { $c = new Criteria(); $extraFields = $this->getCategoryFields($categoryId); foreach ($extraFields as $extraField) { $fieldId = $extraField['fieldId']; if (empty($extraFieldsValues[$fieldId]) || $extraField['type'] == "range" && empty($extraFieldsValues[$fieldId]['from']) && empty($extraFieldsValues[$fieldId]['to'])) { continue; } $c2 = new Criteria(); $prefix = Config::get("DB_PREFIX"); $sql = "EXISTS (SELECT * FROM " . $prefix . "extrafieldvalues WHERE itemId = " . $prefix . "sites.siteId AND fieldId = '{$fieldId}' AND "; switch ($extraField['type']) { case "text": case "textarea": $c2->add("text", $extraFieldsValues[$fieldId], "LIKE"); break; case "checkbox": $value = 0; $checkboxValues = $extraFieldsValues[$fieldId]; foreach ($checkboxValues as $checkBoxValue) { $value += pow(2, $checkBoxValue - 1); //minus 1 because we count from 1,2,3,4.. to have 1,2,4,8 } $c2->add("value & {$value} = {$value}"); break; case "select": case "radio": $c2->add("value", $extraFieldsValues[$fieldId]); break; case "range": if (!empty($extraFieldsValues[$fieldId]['from'])) { $c2->add("value", $extraFieldsValues[$fieldId]['from'], ">="); } if (!empty($extraFieldsValues[$fieldId]['to'])) { $c2->add("value", $extraFieldsValues[$fieldId]['to'], "<="); } break; } $sql .= $c2->prepareQuery(); $sql .= ")"; $c->add($sql); } return $c; }
/** * Get field value from row which matched criteria * @param string $what Field Name * @param Criteria $c * @return mixed */ public function get($what, Criteria $c = null) { if (!$c) { $c = new Criteria(); } $where = $c->prepareQuery(); $prefix = Config::get("DB_PREFIX"); return $this->db->sqlGet($what, $prefix . $this->dbTable, $where); }