/** * Fill the object's arrProducts array * * @param array|null $arrCacheIds * * @return array */ protected function findProducts($arrCacheIds = null) { $t = Product::getTable(); $arrColumns = array(); $arrCategories = $this->findCategories(); $arrProductIds = \Database::getInstance()->query("\n SELECT pid\n FROM tl_iso_product_category\n WHERE page_id IN (" . implode(',', $arrCategories) . ")\n ")->fetchEach('pid'); $arrTypes = \Database::getInstance()->query("SELECT id FROM tl_iso_producttype WHERE variants='1'")->fetchEach('id'); if (empty($arrProductIds)) { return array(); } $queryBuilder = new FilterQueryBuilder(Isotope::getRequestCache()->getFiltersForModules($this->iso_filterModules)); $arrColumns[] = "(\n ({$t}.id IN (" . implode(',', $arrProductIds) . ") AND {$t}.type NOT IN (" . implode(',', $arrTypes) . "))\n OR {$t}.pid IN (" . implode(',', $arrProductIds) . ")\n )"; if (!empty($arrCacheIds) && is_array($arrCacheIds)) { $arrColumns[] = Product::getTable() . ".id IN (" . implode(',', $arrCacheIds) . ")"; } // Apply new/old product filter if ($this->iso_newFilter == 'show_new') { $arrColumns[] = Product::getTable() . ".dateAdded>=" . Isotope::getConfig()->getNewProductLimit(); } elseif ($this->iso_newFilter == 'show_old') { $arrColumns[] = Product::getTable() . ".dateAdded<" . Isotope::getConfig()->getNewProductLimit(); } if ($this->iso_list_where != '') { $arrColumns[] = $this->iso_list_where; } if ($queryBuilder->hasSqlCondition()) { $arrColumns[] = $queryBuilder->getSqlWhere(); } $arrSorting = Isotope::getRequestCache()->getSortingsForModules($this->iso_filterModules); if (empty($arrSorting) && $this->iso_listingSortField != '') { $direction = $this->iso_listingSortDirection == 'DESC' ? Sort::descending() : Sort::ascending(); $arrSorting[$this->iso_listingSortField] = $direction; } $objProducts = Product::findAvailableBy($arrColumns, $queryBuilder->getSqlValues(), array('order' => 'c.sorting', 'filters' => $queryBuilder->getFilters(), 'sorting' => $arrSorting)); return null === $objProducts ? array() : $objProducts->getModels(); }
public function modifyDC(&$arrDca = null) { // get the product switch ($this->iso_direct_checkout_product_mode) { case 'product_type': if (($objTypes = FieldPaletteModel::findByPidAndTableAndField($this->objModule->id, 'tl_module', 'iso_direct_checkout_product_types')) !== null) { while ($objTypes->next()) { $arrColumns = array('type=?'); $arrValues = array($objTypes->iso_direct_checkout_product_type); if ($this->iso_listingSortField) { $arrSorting = array($this->iso_listingSortField => $this->iso_listingSortDirection == 'DESC' ? Sort::descending() : Sort::ascending()); } else { $arrSorting = array(); } $objProducts = Product::findPublishedBy($arrColumns, $arrValues, array('sorting' => $arrSorting)); if ($objProducts->count() > 0) { $objProduct = $objProducts->current(); $this->arrProducts[] = array('product' => $objProduct, 'useQuantity' => $objTypes->iso_use_quantity); $this->addProductFields($objProduct, $objTypes->iso_use_quantity, $objTypes->iso_addSubscriptionCheckbox, $arrDca); } } } break; default: if (($objProducts = FieldPaletteModel::findByPidAndTableAndField($this->objModule->id, 'tl_module', 'iso_direct_checkout_products')) !== null) { while ($objProducts->next()) { $objProduct = Product::findByPk($objProducts->iso_direct_checkout_product); $this->arrProducts[] = array('product' => $objProduct, 'useQuantity' => $objProducts->iso_use_quantity); $this->addProductFields($objProduct, $objProducts->iso_use_quantity, $objProducts->iso_addSubscriptionCheckbox, $arrDca); } } break; } // add address fields \Controller::loadDataContainer('tl_iso_address'); \System::loadLanguageFile('tl_iso_address'); $arrAddressFields = deserialize(Config::findByPk($this->iso_config_id)->address_fields, true); // add billing address fields foreach ($arrAddressFields as $strName => $arrAddressField) { $arrData = $GLOBALS['TL_DCA']['tl_iso_address']['fields'][$strName]; if (!is_array($arrData) || $arrAddressField['billing'] == 'disabled') { continue; } $arrData['eval']['mandatory'] = $arrAddressField['billing'] == 'mandatory'; $this->arrBillingAddressFields[] = $strName; $this->addEditableField($strName, $arrData); } if ($this->iso_use_notes) { $this->addEditableField('notes', array('label' => &$GLOBALS['TL_LANG']['MSC']['iso_note'], 'exclude' => true, 'inputType' => 'textarea', 'eval' => array('tl_class' => 'clr w50'), 'sql' => "text NULL")); } $this->addEditableField('shippingaddress', array('label' => array($GLOBALS['TL_LANG']['MSC']['differentShippingAddress'], $GLOBALS['TL_LANG']['MSC']['differentShippingAddress']), 'inputType' => 'checkbox', 'eval' => array('submitOnChange' => true))); // add shipping address fields $arrShippingAddressFields = array(); foreach ($arrAddressFields as $strName => $arrAddressField) { $arrData = $GLOBALS['TL_DCA']['tl_iso_address']['fields'][$strName]; if (!is_array($arrData) || $arrAddressField['shipping'] == 'disabled') { continue; } $arrData['eval']['mandatory'] = $arrAddressField['shipping'] == 'mandatory'; $this->addEditableField('shippingaddress_' . $strName, $arrData); $arrShippingAddressFields[] = 'shippingaddress_' . $strName; } $this->dca['palettes']['__selector__'][] = 'shippingaddress'; $this->dca['subpalettes']['shippingaddress'] = implode(',', $arrShippingAddressFields); $this->arrShippingAddressFields = $arrShippingAddressFields; }
/** * Generate a sorting form */ protected function generateSorting() { $this->Template->hasSorting = false; if (is_array($this->iso_sortingFields) && count($this->iso_sortingFields)) { $arrOptions = array(); // Cache new request value // @todo should support multiple sorting fields list($sortingField, $sortingDirection) = explode(':', \Input::post('sorting')); if ($this->blnUpdateCache && in_array($sortingField, $this->iso_sortingFields)) { Isotope::getRequestCache()->setSortingForModule($sortingField, $sortingDirection == 'DESC' ? Sort::descending() : Sort::ascending(), $this->id); } elseif (array_diff(array_keys(Isotope::getRequestCache()->getSortingsForModules(array($this->id))), $this->iso_sortingFields)) { // Request cache contains wrong value, delete it! $this->blnUpdateCache = true; Isotope::getRequestCache()->unsetSortingsForModule($this->id); RequestCache::deleteById(\Input::get('isorc')); } elseif (!$this->blnUpdateCache) { // No need to generate options if we reload anyway $first = Isotope::getRequestCache()->getFirstSortingFieldForModule($this->id); foreach ($this->iso_sortingFields as $field) { list($asc, $desc) = $this->getSortingLabels($field); $objSorting = $first == $field ? Isotope::getRequestCache()->getSortingForModule($field, $this->id) : null; if ($field === "releaseDate") { $arrOptions[] = array('label' => $desc, 'value' => $field . ':DESC', 'default' => null !== $objSorting && $objSorting->isDescending() ? '1' : ''); $arrOptions[] = array('label' => $asc, 'value' => $field . ':ASC', 'default' => null !== $objSorting && $objSorting->isAscending() ? '1' : ''); } else { $arrOptions[] = array('label' => $asc, 'value' => $field . ':ASC', 'default' => null !== $objSorting && $objSorting->isAscending() ? '1' : ''); $arrOptions[] = array('label' => $desc, 'value' => $field . ':DESC', 'default' => null !== $objSorting && $objSorting->isDescending() ? '1' : ''); } } } $this->Template->hasSorting = true; $this->Template->sortingLabel = $GLOBALS['TL_LANG']['MSC']['orderByLabel']; $this->Template->sortingOptions = $arrOptions; } }
/** * Get filter & sorting configuration * @param boolean * @return array */ protected function getFiltersAndSorting($blnNativeSQL = true) { $arrFilters = Isotope::getRequestCache()->getFiltersForModules($this->iso_filterModules); $arrSorting = Isotope::getRequestCache()->getSortingsForModules($this->iso_filterModules); if (empty($arrSorting) && $this->iso_listingSortField != '') { $arrSorting[$this->iso_listingSortField] = $this->iso_listingSortDirection == 'DESC' ? Sort::descending() : Sort::ascending(); } if ($blnNativeSQL) { list($arrFilters, $strWhere, $arrValues) = RequestCache::buildSqlFilters($arrFilters); return array($arrFilters, $arrSorting, $strWhere, $arrValues); } return array($arrFilters, $arrSorting); }
/** * Get sorting configuration * @param boolean * @return array */ protected function getSorting() { $arrSorting = array(); if ($this->iso_listingSortField != '') { $arrSorting[$this->iso_listingSortField] = $this->iso_listingSortDirection == 'DESC' ? Sort::descending() : Sort::ascending(); } return $arrSorting; }
/** * Get filter & sorting configuration * * @param boolean * * @return array * * @deprecated Deprecated since Isotope 2.3, to be removed in 3.0. * Use Isotope\RequestCache\FilterQueryBuilder instead. */ protected function getFiltersAndSorting($blnNativeSQL = true) { $arrFilters = Isotope::getRequestCache()->getFiltersForModules($this->iso_filterModules); $arrSorting = Isotope::getRequestCache()->getSortingsForModules($this->iso_filterModules); if (empty($arrSorting) && $this->iso_listingSortField != '') { $direction = $this->iso_listingSortDirection == 'DESC' ? Sort::descending() : Sort::ascending(); $arrSorting[$this->iso_listingSortField] = $direction; } if (!$blnNativeSQL) { return array($arrFilters, $arrSorting); } $queryBuilder = new FilterQueryBuilder($arrFilters); return array($queryBuilder->getFilters(), $arrSorting, $queryBuilder->getSqlWhere(), $queryBuilder->getSqlValues()); }