public function addCondition(OnlineShop_Framework_AbstractFilterDefinitionType $filterDefinition, OnlineShop_Framework_IProductList $productList, $currentFilter, $params, $isPrecondition = false) { $field = $this->getField($filterDefinition); $preSelect = $this->getPreSelect($filterDefinition); $value = $params[$field]; if (empty($value) && !$params['is_reload']) { $o = $preSelect; if (!empty($o)) { if (is_object($o)) { $value = $o->getId(); } else { $value = $o; } } } else { if ($value == OnlineShop_Framework_FilterService_AbstractFilterType::EMPTY_STRING) { $value = null; } } $currentFilter[$field] = $value; if (!empty($value)) { $productList->addRelationCondition($field, $value); } return $currentFilter; }
public function addCondition(OnlineShop_Framework_AbstractFilterDefinitionType $filterDefinition, OnlineShop_Framework_IProductList $productList, $currentFilter, $params, $isPrecondition = false) { $field = $this->getField($filterDefinition); $preSelect = $this->getPreSelect($filterDefinition); $value = $params[$field]; if (empty($value) && !$params['is_reload'] && $preSelect) { $value = explode(",", $preSelect); } else { if (!empty($value) && in_array(OnlineShop_Framework_FilterService_AbstractFilterType::EMPTY_STRING, $value)) { $value = null; } } $currentFilter[$field] = $value; if (!empty($value)) { $quotedValues = array(); foreach ($value as $v) { if (!empty($v)) { $quotedValues[] = $v; } } if (!empty($quotedValues)) { if ($filterDefinition->getUseAndCondition()) { foreach ($quotedValues as $value) { $productList->addCondition($value, $field); } } else { $productList->addCondition(['terms' => ["attributes." . $field => $quotedValues]], $field); } } } return $currentFilter; }
public function addCondition(OnlineShop_Framework_AbstractFilterDefinitionType $filterDefinition, OnlineShop_Framework_IProductList $productList, $currentFilter, $params, $isPrecondition = false) { $field = $filterDefinition->getField(); $rawValue = $params[$field]; if (!empty($rawValue) && $rawValue != OnlineShop_Framework_FilterService_AbstractFilterType::EMPTY_STRING) { $values = explode("-", $rawValue); $value['from'] = trim($values[0]); $value['to'] = trim($values[1]); } else { if ($rawValue == OnlineShop_Framework_FilterService_AbstractFilterType::EMPTY_STRING) { $value = null; } else { $value['from'] = $filterDefinition->getPreSelectFrom(); $value['to'] = $filterDefinition->getPreSelectTo(); } } $currentFilter[$field] = $value; if (!empty($value)) { $range = []; if (!empty($value['from'])) { $range['gte'] = $value['from']; } if (!empty($value['to'])) { $range['lte'] = $value['from']; } $productList->addCondition(['range' => ['attributes.' . $field => $range]], $field); } return $currentFilter; }
public function addCondition(OnlineShop_Framework_AbstractFilterDefinitionType $filterDefinition, OnlineShop_Framework_IProductList $productList, $currentFilter, $params, $isPrecondition = false) { $rawValue = $params[$filterDefinition->getField()]; if (!empty($rawValue) && $rawValue != OnlineShop_Framework_FilterService_AbstractFilterType::EMPTY_STRING) { $values = explode("-", $rawValue); $value['from'] = trim($values[0]); $value['to'] = trim($values[1]); } else { if ($rawValue == OnlineShop_Framework_FilterService_AbstractFilterType::EMPTY_STRING) { $value = null; } else { $value['from'] = $filterDefinition->getPreSelectFrom(); $value['to'] = $filterDefinition->getPreSelectTo(); } } $currentFilter[$filterDefinition->getField()] = $value; if (!empty($value)) { if (!empty($value['from'])) { if ($isPrecondition) { $productList->addCondition($filterDefinition->getField() . " >= " . $productList->quote($value['from']), "PRECONDITION_" . $filterDefinition->getField()); } else { $productList->addCondition($filterDefinition->getField() . " >= " . $productList->quote($value['from']), $filterDefinition->getField()); } } if (!empty($value['to'])) { if ($isPrecondition) { $productList->addCondition($filterDefinition->getField() . " <= " . $productList->quote($value['to']), "PRECONDITION_" . $filterDefinition->getField()); } else { $productList->addCondition($filterDefinition->getField() . " <= " . $productList->quote($value['to']), $filterDefinition->getField()); } } } return $currentFilter; }
public function getFilterFrontend(OnlineShop_Framework_AbstractFilterDefinitionType $filterDefinition, OnlineShop_Framework_IProductList $productList, $currentFilter) { // init $script = $filterDefinition->getScriptPath() ?: $this->script; $rawValues = $productList->getGroupByValues('CategoryPath', true); $values = array(); // ... $availableRelations = array(); if ($filterDefinition->getAvailableCategories()) { foreach ($filterDefinition->getAvailableCategories() as $rel) { $availableRelations[$rel->getId()] = true; } } // prepare values foreach ($rawValues as $v) { $explode = explode(",", $v['value']); foreach ($explode as $e) { if (!empty($e) && (empty($availableRelations) || $availableRelations[$e] === true)) { if ($values[$e]) { $count = $values[$e]['count'] + $v['count']; } else { $count = $v['count']; } $values[$e] = array('value' => $e, "count" => $count); } } } // done return $this->view->partial($script, ['hideFilter' => $filterDefinition->getRequiredFilterField() && empty($currentFilter[$filterDefinition->getRequiredFilterField()]), 'label' => $filterDefinition->getLabel(), 'currentValue' => $currentFilter[$filterDefinition->getField()], 'values' => array_values($values), 'fieldname' => $filterDefinition->getField(), 'metaData' => $filterDefinition->getMetaData()]); }
public function addCondition(OnlineShop_Framework_AbstractFilterDefinitionType $filterDefinition, OnlineShop_Framework_IProductList $productList, $currentFilter, $params, $isPrecondition = false) { $field = $this->getField($filterDefinition); $value = $params[$field]; if (empty($value)) { $value['from'] = $filterDefinition->getPreSelectFrom(); $value['to'] = $filterDefinition->getPreSelectTo(); } $currentFilter[$field] = $value; if (!empty($value)) { if (!empty($value['from'])) { if ($isPrecondition) { $productList->addCondition($this->getField($filterDefinition) . " >= " . $productList->quote($value['from']), "PRECONDITION_" . $this->getField($filterDefinition)); } else { $productList->addCondition($this->getField($filterDefinition) . " >= " . $productList->quote($value['from']), $this->getField($filterDefinition)); } } if (!empty($value['to'])) { if ($isPrecondition) { $productList->addCondition($this->getField($filterDefinition) . " <= " . $productList->quote($value['to']), "PRECONDITION_" . $this->getField($filterDefinition)); } else { $productList->addCondition($this->getField($filterDefinition) . " <= " . $productList->quote($value['to']), $this->getField($filterDefinition)); } } } return $currentFilter; }
/** * @param OnlineShop_Framework_AbstractFilterDefinitionType $filterDefinition * @param OnlineShop_Framework_IProductList $productList * @param array $currentFilter * @param $params * @param bool $isPrecondition * * @return string[] */ public function addCondition(OnlineShop_Framework_AbstractFilterDefinitionType $filterDefinition, OnlineShop_Framework_IProductList $productList, $currentFilter, $params, $isPrecondition = false) { $field = $this->getField($filterDefinition); $preSelect = $this->getPreSelect($filterDefinition); $value = $params[$field]; if (empty($value) && !$params['is_reload']) { if (is_array($preSelect)) { $value = $preSelect; } else { $value = explode(",", $preSelect); } foreach ($value as $key => $v) { if (!$v) { unset($value[$key]); } } } else { if (!empty($value) && in_array(OnlineShop_Framework_FilterService_AbstractFilterType::EMPTY_STRING, $value)) { $value = null; } } $currentFilter[$field] = $value; if (!empty($value)) { $quotedValues = array(); foreach ($value as $v) { if ($v) { $v = ".*\"" . OnlineShop_Framework_IndexService_Tenant_IWorker::MULTISELECT_DELIMITER . $v . OnlineShop_Framework_IndexService_Tenant_IWorker::MULTISELECT_DELIMITER . "\".*"; $quotedValues[] = $v; } } if ($quotedValues) { if ($filterDefinition->getUseAndCondition()) { foreach ($quotedValues as $value) { $productList->addCondition(['regexp' => ["attributes." . $field => $value]], $field); } } else { $regexArray = []; foreach ($quotedValues as $value) { $regexArray[] = ['regexp' => ["attributes." . $field => $value]]; } $productList->addCondition(['or' => ['filters' => $regexArray]], $field); } } } return $currentFilter; }
/** * @param OnlineShop_Framework_AbstractFilterDefinitionType $filterDefinition * @param OnlineShop_Framework_IProductList $productList * @param $currentFilter * @param $params * @param bool $isPrecondition * * @return mixed */ public function addCondition(OnlineShop_Framework_AbstractFilterDefinitionType $filterDefinition, OnlineShop_Framework_IProductList $productList, $currentFilter, $params, $isPrecondition = false) { // init $field = $this->getField($filterDefinition); $value = $params[$field]; // set default preselect if (empty($value)) { $value['from'] = $filterDefinition->getPreSelectFrom(); $value['to'] = $filterDefinition->getPreSelectTo(); $currentFilter[$field] = $value; } // add condition if (!empty($value)) { $productList->addPriceCondition($value['from'], $value['to']); } return $currentFilter; }
public function addCondition(OnlineShop_Framework_AbstractFilterDefinitionType $filterDefinition, OnlineShop_Framework_IProductList $productList, $currentFilter, $params, $isPrecondition = false) { $field = $this->getField($filterDefinition); $preSelect = $this->getPreSelect($filterDefinition); $value = $params[$field]; if (empty($value) && !$params['is_reload']) { $objects = $preSelect; $value = array(); if (!is_array($objects)) { $objects = explode(",", $objects); } if (is_array($objects)) { foreach ($objects as $o) { if (is_object($o)) { $value[] = $o->getId(); } else { $value[] = $o; } } } } else { if (!empty($value) && in_array(OnlineShop_Framework_FilterService_AbstractFilterType::EMPTY_STRING, $value)) { $value = null; } } $currentFilter[$field] = $value; if (!empty($value)) { $quotedValues = array(); foreach ($value as $v) { if (!empty($v)) { $quotedValues[] = $productList->quote($v); } } if (!empty($quotedValues)) { if ($filterDefinition->getUseAndCondition()) { foreach ($quotedValues as $value) { $productList->addRelationCondition($field, "dest = " . $value); } } else { $productList->addRelationCondition($field, "dest IN (" . implode(",", $quotedValues) . ")"); } } } return $currentFilter; }
/** * @param OnlineShop_Framework_AbstractFilterDefinitionType $filterDefinition * @param OnlineShop_Framework_IProductList $productList * @param array $currentFilter * @param $params * @param bool $isPrecondition * * @return string[] */ public function addCondition(OnlineShop_Framework_AbstractFilterDefinitionType $filterDefinition, OnlineShop_Framework_IProductList $productList, $currentFilter, $params, $isPrecondition = false) { $field = $this->getField($filterDefinition); $preSelect = $this->getPreSelect($filterDefinition); $value = $params[$field]; if (empty($value) && !$params['is_reload']) { if (is_array($preSelect)) { $value = $preSelect; } else { $value = explode(",", $preSelect); } foreach ($value as $key => $v) { if (!$v) { unset($value[$key]); } } } else { if (!empty($value) && in_array(OnlineShop_Framework_FilterService_AbstractFilterType::EMPTY_STRING, $value)) { $value = null; } } // $value = trim($value); $currentFilter[$field] = $value; if (!empty($value)) { $quotedValues = array(); foreach ($value as $v) { $v = "%" . OnlineShop_Framework_IndexService_Tenant_IWorker::MULTISELECT_DELIMITER . $v . OnlineShop_Framework_IndexService_Tenant_IWorker::MULTISELECT_DELIMITER . "%"; $quotedValues[] = $field . ' like ' . $productList->quote($v); } if ($filterDefinition->getUseAndCondition()) { $quotedValues = implode(' and ', $quotedValues); } else { $quotedValues = implode(' or ', $quotedValues); } $quotedValues = '(' . $quotedValues . ')'; if (!empty($quotedValues)) { if ($isPrecondition) { $productList->addCondition($quotedValues, "PRECONDITION_" . $field); } else { $productList->addCondition($quotedValues, $field); } } } return $currentFilter; }
public function addCondition(OnlineShop_Framework_AbstractFilterDefinitionType $filterDefinition, OnlineShop_Framework_IProductList $productList, $currentFilter, $params, $isPrecondition = false) { $field = $filterDefinition->getField($filterDefinition); $preSelect = $filterDefinition->getPreSelect($filterDefinition); $value = $params[$field]; if ($value == OnlineShop_Framework_FilterService_AbstractFilterType::EMPTY_STRING) { $value = null; } else { if (empty($value) && !$params['is_reload']) { $value = $preSelect; } } $value = trim($value); $currentFilter[$field] = $value; if (!empty($value)) { $value = ".*\"" . $value . "\".*"; $productList->addCondition(['regexp' => ["attributes." . $field => $value]], $field); } return $currentFilter; }
public function addCondition(OnlineShop_Framework_AbstractFilterDefinitionType $filterDefinition, OnlineShop_Framework_IProductList $productList, $currentFilter, $params, $isPrecondition = false) { $value = $params[$filterDefinition->getField()]; if ($value == OnlineShop_Framework_FilterService_AbstractFilterType::EMPTY_STRING) { $value = null; } else { if (empty($value) && !$params['is_reload']) { $value = $filterDefinition->getPreSelect(); if (is_object($value)) { $value = $value->getId(); } } } $currentFilter[$filterDefinition->getField()] = $value; if (!empty($value)) { $value = trim($value); $productList->addCondition($value, $filterDefinition->getField()); } return $currentFilter; }
public function addCondition(OnlineShop_Framework_AbstractFilterDefinitionType $filterDefinition, OnlineShop_Framework_IProductList $productList, $currentFilter, $params, $isPrecondition = false) { $field = $this->getField($filterDefinition); $value = $params[$field]; if (empty($value)) { $value['from'] = $filterDefinition->getPreSelectFrom(); $value['to'] = $filterDefinition->getPreSelectTo(); } $currentFilter[$field] = $value; if (!empty($value)) { $range = []; if (!empty($value['from'])) { $range['gte'] = $value['from']; } if (!empty($value['to'])) { $range['lte'] = $value['from']; } $productList->addCondition(['range' => ['attributes.' . $field => $range]], $field); } return $currentFilter; }
/** * @param OnlineShop_Framework_AbstractFilterDefinitionType $filterDefinition * @param OnlineShop_Framework_IProductList $productList * @param array $currentFilter * @param array $params * @param bool $isPrecondition * * @return array */ public function addCondition(OnlineShop_Framework_AbstractFilterDefinitionType $filterDefinition, OnlineShop_Framework_IProductList $productList, $currentFilter, $params, $isPrecondition = false) { // init $field = $this->getField($filterDefinition); $preSelect = $this->getPreSelect($filterDefinition); $value = $params[$field]; // set defaults if ($value == OnlineShop_Framework_FilterService_AbstractFilterType::EMPTY_STRING) { $value = null; } else { if (empty($value) && !$params['is_reload']) { $value = $preSelect; } } $value = trim($value); $currentFilter[$field] = $value; // add condition if (!empty($value)) { $productList->addCondition(trim($value), $field); } return $currentFilter; }
public function addCondition(OnlineShop_Framework_AbstractFilterDefinitionType $filterDefinition, OnlineShop_Framework_IProductList $productList, $currentFilter, $params, $isPrecondition = false) { $field = $this->getField($filterDefinition); $preSelect = $this->getPreSelect($filterDefinition); $value = $params[$field]; if ($value == OnlineShop_Framework_FilterService_AbstractFilterType::EMPTY_STRING) { $value = null; } else { if (empty($value) && !$params['is_reload']) { $value = $preSelect; } } $value = trim($value); $currentFilter[$field] = $value; if (!empty($value)) { if ($isPrecondition) { $productList->addCondition("TRIM(`" . $field . "`) LIKE " . $productList->quote("%" . $value . "%"), "PRECONDITION_" . $field); } else { $productList->addCondition("TRIM(`" . $field . "`) LIKE " . $productList->quote("%" . $value . "%"), $field); } } return $currentFilter; }
/** * returns all possible group by values for given column group, product list and field combination * * @param $columnGroup * @param OnlineShop_Framework_IProductList $productList * @param string $field * @return array */ public static function getGroupByValuesForFilterGroup($columnGroup, OnlineShop_Framework_IProductList $productList, $field) { $columnType = self::getColumnTypeForColumnGroup($columnGroup); $data = array(); if ($columnType == "relation") { $productList->prepareGroupByRelationValues($field); $values = $productList->getGroupByRelationValues($field); foreach ($values as $v) { $obj = \Pimcore\Model\Object\AbstractObject::getById($v); if ($obj) { $name = $obj->getKey(); if (method_exists($obj, "getName")) { $name = $obj->getName(); } $data[$v] = array("key" => $v, "value" => $name . " (" . $obj->getId() . ")"); } } } else { if ($columnType == "multiselect") { $values = $productList->getGroupByValues($field); sort($values); foreach ($values as $v) { $helper = explode(OnlineShop_Framework_IndexService_Tenant_IWorker::MULTISELECT_DELIMITER, $v); foreach ($helper as $h) { $data[$h] = array("key" => $h, "value" => $h); } } } else { if ($columnType == "category") { $values = $productList->getGroupByValues($field); foreach ($values as $v) { $helper = explode(",", $v); foreach ($helper as $h) { $obj = \Pimcore\Model\Object\AbstractObject::getById($h); if ($obj) { $name = $obj->getKey(); if (method_exists($obj, "getName")) { $name = $obj->getName(); } $data[$h] = array("key" => $h, "value" => $name . " (" . $obj->getId() . ")"); } } } } else { $values = $productList->getGroupByValues($field); sort($values); foreach ($values as $v) { $data[] = array("key" => $v, "value" => $v); } } } } return $data; }
/** * returns order by statement for simularity calculations based on given fields and object ids * * @param $fields * @param $objectId */ public function buildSimularityOrderBy($fields, $objectId) { try { $fieldString = ""; $maxFieldString = ""; foreach ($fields as $f) { if (!empty($fieldString)) { $fieldString .= ","; $maxFieldString .= ","; } $fieldString .= $this->db->quoteIdentifier($f->getField()); $maxFieldString .= "MAX(" . $this->db->quoteIdentifier($f->getField()) . ") as " . $this->db->quoteIdentifier($f->getField()); } $query = "SELECT " . $fieldString . " FROM " . $this->model->getCurrentTenantConfig()->getTablename() . " a WHERE a.o_id = ?;"; OnlineShop_Plugin::getSQLLogger()->log("Query: " . $query, Zend_Log::INFO); $objectValues = $this->db->fetchRow($query, $objectId); OnlineShop_Plugin::getSQLLogger()->log("Query done.", Zend_Log::INFO); $query = "SELECT " . $maxFieldString . " FROM " . $this->model->getCurrentTenantConfig()->getTablename() . " a"; OnlineShop_Plugin::getSQLLogger()->log("Query: " . $query, Zend_Log::INFO); $maxObjectValues = $this->db->fetchRow($query); OnlineShop_Plugin::getSQLLogger()->log("Query done.", Zend_Log::INFO); if (!empty($objectValues)) { $subStatement = array(); foreach ($fields as $f) { $subStatement[] = "(" . $this->db->quoteIdentifier($f->getField()) . "/" . $maxObjectValues[$f->getField()] . " - " . $objectValues[$f->getField()] / $maxObjectValues[$f->getField()] . ") * " . $f->getWeight(); } $statement = "ABS(" . implode(" + ", $subStatement) . ")"; OnlineShop_Plugin::getSQLLogger()->log("Similarity Statement: " . $statement, Zend_Log::INFO); return $statement; } else { throw new Exception("Field array for given object id is empty"); } } catch (Exception $e) { OnlineShop_Plugin::getSQLLogger()->err($e); return ""; } }
public function addCondition(OnlineShop_Framework_AbstractFilterDefinitionType $filterDefinition, OnlineShop_Framework_IProductList $productList, $currentFilter, $params, $isPrecondition = false) { $field = $this->getField($filterDefinition); $preSelect = $this->getPreSelect($filterDefinition); $value = $params[$field]; if (empty($value) && !$params['is_reload']) { if (!empty($preSelect) || $preSelect == '0') { $value = explode(",", $preSelect); } } else { if (!empty($value) && in_array(OnlineShop_Framework_FilterService_AbstractFilterType::EMPTY_STRING, $value)) { $value = null; } } $currentFilter[$field] = $value; if (!empty($value)) { $quotedValues = array(); foreach ($value as $v) { if (!empty($v)) { $quotedValues[] = $productList->quote($v); } } if (!empty($quotedValues)) { if ($filterDefinition->getUseAndCondition()) { foreach ($quotedValues as $value) { if ($isPrecondition) { $productList->addCondition($field . " = " . $value, "PRECONDITION_" . $field); } else { $productList->addCondition($field . " = " . $value, $field); } } } else { if ($isPrecondition) { $productList->addCondition($field . " IN (" . implode(",", $quotedValues) . ")", "PRECONDITION_" . $field); } else { $productList->addCondition($field . " IN (" . implode(",", $quotedValues) . ")", $field); } } } } return $currentFilter; }
/** * @param \Pimcore\Model\Object\FilterDefinition $filterDefinition * @param OnlineShop_Framework_IProductList $productList * @param $params * @param Zend_View $view * @param OnlineShop_Framework_FilterService $filterService * @param $loadFullPage * @param bool $excludeLimitOfFirstpage */ public static function setupProductList(\Pimcore\Model\Object\FilterDefinition $filterDefinition, OnlineShop_Framework_IProductList $productList, $params, Zend_View $view, OnlineShop_Framework_FilterService $filterService, $loadFullPage, $excludeLimitOfFirstpage = false) { $orderByOptions = array(); $orderKeysAsc = explode(",", $filterDefinition->getOrderByAsc()); if (!empty($orderKeysAsc)) { foreach ($orderKeysAsc as $orderByEntry) { if (!empty($orderByEntry)) { $orderByOptions[$orderByEntry]["asc"] = true; } } } $orderKeysDesc = explode(",", $filterDefinition->getOrderByDesc()); if (!empty($orderKeysDesc)) { foreach ($orderKeysDesc as $orderByEntry) { if (!empty($orderByEntry)) { $orderByOptions[$orderByEntry]["desc"] = true; } } } $offset = 0; $pageLimit = intval($params["perPage"]); if (!$pageLimit) { $pageLimit = $filterDefinition->getPageLimit(); } if (!$pageLimit) { $pageLimit = 50; } $limitOnFirstLoad = $filterDefinition->getLimitOnFirstLoad(); if (!$limitOnFirstLoad) { $limitOnFirstLoad = 6; } if ($params["page"]) { $view->currentPage = intval($params["page"]); $offset = $pageLimit * ($params["page"] - 1); } if ($filterDefinition->getAjaxReload()) { if ($loadFullPage && !$excludeLimitOfFirstpage) { $productList->setLimit($pageLimit); } else { if ($loadFullPage && $excludeLimitOfFirstpage) { $offset += $limitOnFirstLoad; $productList->setLimit($pageLimit - $limitOnFirstLoad); } else { $productList->setLimit($limitOnFirstLoad); } } } else { $productList->setLimit($pageLimit); } $productList->setOffset($offset); $view->pageLimit = $pageLimit; $orderBy = $params["orderBy"]; $orderBy = explode("#", $orderBy); $orderByField = $orderBy[0]; $orderByDirection = $orderBy[1]; if (array_key_exists($orderByField, $orderByOptions)) { $view->currentOrderBy = htmlentities($params["orderBy"]); $productList->setOrderKey($orderByField); $productList->setOrder($orderByDirection); } else { $orderByCollection = $filterDefinition->getDefaultOrderBy(); $orderByList = array(); if ($orderByCollection) { foreach ($orderByCollection as $orderBy) { $orderByList[] = array($orderBy->getField(), $orderBy->getDirection()); } } $productList->setOrderKey($orderByList); $productList->setOrder("ASC"); } if ($filterService) { $view->currentFilter = $filterService->initFilterService($filterDefinition, $productList, $params); } $view->orderByOptions = $orderByOptions; }