Ejemplo n.º 1
0
 /**
  * Get active request cache
  *
  * @return RequestCache
  */
 public static function getRequestCache()
 {
     if (null === static::$objRequestCache) {
         static::$objRequestCache = RequestCache::findByIdAndStore(\Input::get('isorc'), static::getCart()->store_id);
         if (null === static::$objRequestCache) {
             static::$objRequestCache = new RequestCache();
             static::$objRequestCache->store_id = static::getCart()->store_id;
         }
     }
     return static::$objRequestCache;
 }
Ejemplo n.º 2
0
$GLOBALS['TL_MODELS'][\Isotope\Model\Group::getTable()] = 'Isotope\\Model\\Group';
$GLOBALS['TL_MODELS'][\Isotope\Model\Label::getTable()] = 'Isotope\\Model\\Label';
$GLOBALS['TL_MODELS'][\Isotope\Model\OrderStatus::getTable()] = 'Isotope\\Model\\OrderStatus';
$GLOBALS['TL_MODELS'][\Isotope\Model\Payment::getTable()] = 'Isotope\\Model\\Payment';
$GLOBALS['TL_MODELS'][\Isotope\Model\Product::getTable()] = 'Isotope\\Model\\Product';
$GLOBALS['TL_MODELS'][\Isotope\Model\ProductCategory::getTable()] = 'Isotope\\Model\\ProductCategory';
$GLOBALS['TL_MODELS'][\Isotope\Model\ProductCollection::getTable()] = 'Isotope\\Model\\ProductCollection';
$GLOBALS['TL_MODELS'][\Isotope\Model\ProductCollectionDownload::getTable()] = 'Isotope\\Model\\ProductCollectionDownload';
$GLOBALS['TL_MODELS'][\Isotope\Model\ProductCollectionItem::getTable()] = 'Isotope\\Model\\ProductCollectionItem';
$GLOBALS['TL_MODELS'][\Isotope\Model\ProductCollectionSurcharge::getTable()] = 'Isotope\\Model\\ProductCollectionSurcharge';
$GLOBALS['TL_MODELS'][\Isotope\Model\ProductPrice::getTable()] = 'Isotope\\Model\\ProductPrice';
$GLOBALS['TL_MODELS'][\Isotope\Model\ProductCache::getTable()] = 'Isotope\\Model\\ProductCache';
$GLOBALS['TL_MODELS'][\Isotope\Model\ProductType::getTable()] = 'Isotope\\Model\\ProductType';
$GLOBALS['TL_MODELS'][\Isotope\Model\RelatedCategory::getTable()] = 'Isotope\\Model\\RelatedCategory';
$GLOBALS['TL_MODELS'][\Isotope\Model\RelatedProduct::getTable()] = 'Isotope\\Model\\RelatedProduct';
$GLOBALS['TL_MODELS'][\Isotope\Model\RequestCache::getTable()] = 'Isotope\\Model\\RequestCache';
$GLOBALS['TL_MODELS'][\Isotope\Model\Shipping::getTable()] = 'Isotope\\Model\\Shipping';
$GLOBALS['TL_MODELS'][\Isotope\Model\TaxClass::getTable()] = 'Isotope\\Model\\TaxClass';
$GLOBALS['TL_MODELS'][\Isotope\Model\TaxRate::getTable()] = 'Isotope\\Model\\TaxRate';
/**
 * Checkout steps
 */
$GLOBALS['ISO_CHECKOUTSTEP'] = array('address' => array('\\Isotope\\CheckoutStep\\BillingAddress', '\\Isotope\\CheckoutStep\\ShippingAddress'), 'shipping' => array('\\Isotope\\CheckoutStep\\ShippingMethod'), 'payment' => array('\\Isotope\\CheckoutStep\\PaymentMethod'), 'review' => array('\\Isotope\\CheckoutStep\\OrderConditionsOnTop', '\\Isotope\\CheckoutStep\\OrderInfo', '\\Isotope\\CheckoutStep\\OrderConditionsBeforeProducts', '\\Isotope\\CheckoutStep\\OrderProducts', '\\Isotope\\CheckoutStep\\OrderConditionsAfterProducts'));
/**
 * Permissions are access settings for user and groups (fields in tl_user and tl_user_group)
 */
$GLOBALS['TL_PERMISSIONS'][] = 'iso_modules';
$GLOBALS['TL_PERMISSIONS'][] = 'iso_product_types';
$GLOBALS['TL_PERMISSIONS'][] = 'iso_product_typep';
$GLOBALS['TL_PERMISSIONS'][] = 'iso_payment_modules';
$GLOBALS['TL_PERMISSIONS'][] = 'iso_payment_modulep';
Ejemplo n.º 3
0
 /**
  * Truncate the request cache table
  */
 public static function truncateRequestCache()
 {
     RequestCache::purge();
 }
 /**
  * Generate a filter form
  */
 protected function generateFilters()
 {
     $this->Template->hasFilters = false;
     if (is_array($this->iso_filterFields) && count($this->iso_filterFields)) {
         $time = time();
         $arrFilters = array();
         $arrInput = \Input::post('filter');
         $arrCategories = $this->findCategories();
         foreach ($this->iso_filterFields as $strField) {
             $arrValues = array();
             $objValues = \Database::getInstance()->execute("\n                    SELECT DISTINCT p1.{$strField} FROM tl_iso_product p1\n                    LEFT OUTER JOIN tl_iso_product p2 ON p1.pid=p2.id\n                    WHERE\n                        p1.language=''\n                        " . (BE_USER_LOGGED_IN === true ? '' : "AND p1.published='1' AND (p1.start='' OR p1.start<{$time}) AND (p1.stop='' OR p1.stop>{$time}) ") . "\n                        AND (\n                            p1.id IN (\n                                SELECT pid FROM " . \Isotope\Model\ProductCategory::getTable() . " WHERE page_id IN (" . implode(',', $arrCategories) . ")\n                            )\n                            OR p1.pid IN (\n                                SELECT pid FROM " . \Isotope\Model\ProductCategory::getTable() . " WHERE page_id IN (" . implode(',', $arrCategories) . ")\n                            )\n                        )\n                        " . (BE_USER_LOGGED_IN === true ? '' : " AND (p1.pid=0 OR (p2.published='1' AND (p2.start='' OR p2.start<{$time}) AND (p2.stop='' OR p2.stop>{$time})))") . "\n                        " . ($this->iso_list_where == '' ? '' : " AND " . Haste::getInstance()->call('replaceInsertTags', $this->iso_list_where)));
             while ($objValues->next()) {
                 $arrValues[] = deserialize($objValues->{$strField}, false);
             }
             if ($this->blnUpdateCache && in_array($arrInput[$strField], $arrValues)) {
                 Isotope::getRequestCache()->setFilterForModule($strField, Filter::attribute($strField)->isEqualTo($arrInput[$strField]), $this->id);
             } elseif ($this->blnUpdateCache && $arrInput[$strField] == '') {
                 Isotope::getRequestCache()->removeFilterForModule($strField, $this->id);
             } elseif (($objFilter = Isotope::getRequestCache()->getFilterForModule($strField, $this->id)) !== null && $objFilter->valueNotIn($arrValues)) {
                 // Request cache contains wrong value, delete it!
                 $this->blnUpdateCache = true;
                 Isotope::getRequestCache()->removeFilterForModule($strField, $this->id);
                 RequestCache::deleteById(\Input::get('isorc'));
             } elseif (!$this->blnUpdateCache) {
                 // Only generate options if we do not reload anyway
                 if (empty($arrValues)) {
                     continue;
                 }
                 $arrData = $GLOBALS['TL_DCA']['tl_iso_product']['fields'][$strField];
                 if (is_array($GLOBALS['ISO_ATTR'][$arrData['inputType']]['callback']) && !empty($GLOBALS['ISO_ATTR'][$arrData['inputType']]['callback'])) {
                     foreach ($GLOBALS['ISO_ATTR'][$arrData['inputType']]['callback'] as $callback) {
                         $objCallback = \System::importStatic($callback[0]);
                         $arrData = $objCallback->{$callback[1]}($strField, $arrData, $this);
                     }
                 }
                 // Use the default routine to initialize options data
                 $arrWidget = \Widget::getAttributesFromDca($arrData, $strField);
                 $objFilter = Isotope::getRequestCache()->getFilterForModule($strField, $this->id);
                 if (($objAttribute = $GLOBALS['TL_DCA']['tl_iso_product']['attributes'][$strField]) !== null && $objAttribute instanceof IsotopeAttributeWithOptions) {
                     $objAttribute->optionsSource = 'attribute';
                     $arrWidget['options'] = $objAttribute->getOptionsForProductFilter($arrValues);
                 }
                 foreach ($arrValues as $value) {
                     $arrWidget['options'][] = array('value' => $value, 'label' => $value == '' ? ' ' : 'text');
                 }
                 // Must have options to apply the filter
                 if (!is_array($arrWidget['options'])) {
                     continue;
                 }
                 foreach ($arrWidget['options'] as $k => $option) {
                     if ($option['value'] == '') {
                         $arrWidget['blankOptionLabel'] = $option['label'];
                         unset($arrWidget['options'][$k]);
                         continue;
                     } elseif (!in_array($option['value'], $arrValues) || $option['value'] == '-') {
                         // @deprecated IsotopeAttributeWithOptions::getOptionsForProductFilter already checks this
                         unset($arrWidget['options'][$k]);
                         continue;
                     }
                     $arrWidget['options'][$k]['default'] = null !== $objFilter && $objFilter->valueEquals($option['value']) ? '1' : '';
                 }
                 // Hide fields with just one option (if enabled)
                 if ($this->iso_filterHideSingle && count($arrWidget['options']) < 2) {
                     continue;
                 }
                 $arrFilters[$strField] = $arrWidget;
             }
         }
         // !HOOK: alter the filters
         if (isset($GLOBALS['ISO_HOOKS']['generateFilters']) && is_array($GLOBALS['ISO_HOOKS']['generateFilters'])) {
             foreach ($GLOBALS['ISO_HOOKS']['generateFilters'] as $callback) {
                 $objCallback = \System::importStatic($callback[0]);
                 $arrFilters = $objCallback->{$callback}[1]($arrFilters);
             }
         }
         if (!empty($arrFilters)) {
             $this->Template->hasFilters = true;
             $this->Template->filterOptions = $arrFilters;
         }
     }
 }
Ejemplo n.º 5
0
 /**
  * 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);
 }
Ejemplo n.º 6
0
 private function purgeCaches()
 {
     ProductCache::purge();
     RequestCache::purge();
 }
Ejemplo n.º 7
0
 /**
  * Truncate the request cache table
  */
 public static function truncateRequestCache()
 {
     \Isotope\Model\RequestCache::purge();
 }
Ejemplo n.º 8
0
 private function purgeCaches()
 {
     \Isotope\Model\ProductCache::purge();
     \Isotope\Model\RequestCache::purge();
 }
Ejemplo n.º 9
0
 /**
  * Generate a limit form
  */
 protected function generateLimit()
 {
     $this->Template->hasLimit = false;
     if ($this->iso_enableLimit) {
         $arrOptions = array();
         $arrLimit = array_map('intval', trimsplit(',', $this->iso_perPage));
         $objLimit = Isotope::getRequestCache()->getFirstLimitForModules(array($this->id));
         $arrLimit = array_unique($arrLimit);
         sort($arrLimit);
         if ($this->blnUpdateCache && in_array(\Input::post('limit'), $arrLimit)) {
             // Cache new request value
             Isotope::getRequestCache()->setLimitForModule(Limit::to(\Input::post('limit')), $this->id);
         } elseif ($objLimit->notIn($arrLimit)) {
             // Request cache contains wrong value, delete it!
             $this->blnUpdateCache = true;
             Isotope::getRequestCache()->setLimitForModule(Limit::to($arrLimit[0]), $this->id);
             RequestCache::deleteById(\Input::get('isorc'));
         } elseif (!$this->blnUpdateCache) {
             // No need to generate options if we reload anyway
             foreach ($arrLimit as $limit) {
                 $arrOptions[] = array('label' => $limit, 'value' => $limit, 'default' => $objLimit->equals($limit) ? '1' : '');
             }
             $this->Template->hasLimit = true;
             $this->Template->limitLabel = $GLOBALS['TL_LANG']['MSC']['perPageLabel'];
             $this->Template->limitOptions = $arrOptions;
         }
     }
 }