/**
  * Return the start value for the limit part of the sql query that
  * retrieves the product list for the current product group page.
  * 
  * @param int|bool $numberOfProducts The number of products to return
  *
  * @return int
  *
  * @author Sascha Koehler <*****@*****.**>, Sebastian Diel <*****@*****.**>
  * @since 23.11.2012
  */
 public function getSqlOffset($numberOfProducts = false)
 {
     $sqlOffsetKey = $numberOfProducts;
     if ($numberOfProducts === false) {
         $sqlOffsetKey = 'false';
     }
     if (!array_key_exists($sqlOffsetKey, $this->sqlOffsets)) {
         $productsPerPage = $this->getProductsPerPageSetting();
         if ($numberOfProducts !== false) {
             $productsPerPage = (int) $numberOfProducts;
         }
         if ($productsPerPage === SilvercartConfig::getProductsPerPageUnlimitedNumber()) {
             $SQL_start = 0;
         } else {
             if (!isset($_GET['start']) || !is_numeric($_GET['start']) || (int) $_GET['start'] < 1) {
                 if (isset($_GET['offset'])) {
                     // --------------------------------------------------------
                     // Use offset for getting the current item rage
                     // --------------------------------------------------------
                     $offset = (int) $_GET['offset'];
                     if ($offset > 0) {
                         $offset -= 1;
                     }
                     // Prevent too high values
                     if ($offset > 999999) {
                         $offset = 0;
                     }
                     $SQL_start = $offset * $productsPerPage;
                 } else {
                     // --------------------------------------------------------
                     // Use item number for getting the current item range
                     // --------------------------------------------------------
                     $SQL_start = 0;
                 }
             } else {
                 $SQL_start = (int) $_GET['start'];
             }
         }
         $this->sqlOffsets[$sqlOffsetKey] = $SQL_start;
     }
     return $this->sqlOffsets[$sqlOffsetKey];
 }
 /**
  * Returns the number of products per page according to where it is set.
  * Highest priority has the customer's configuration setting if available.
  * Next comes the shop owners setting for this page; if that's not
  * configured we use the global setting from SilvercartConfig.
  *
  * @return int
  */
 public function getProductsPerPageSetting()
 {
     $productsPerPage = 0;
     $member = SilvercartCustomer::currentUser();
     if ($member && $member->getSilvercartCustomerConfig() && $member->getSilvercartCustomerConfig()->productsPerPage !== null) {
         $productsPerPage = $member->getSilvercartCustomerConfig()->productsPerPage;
         if ($productsPerPage == 0) {
             $productsPerPage = SilvercartConfig::getProductsPerPageUnlimitedNumber();
         }
     } else {
         if ($this->productsPerPage) {
             $productsPerPage = $this->productsPerPage;
         } else {
             $productsPerPage = SilvercartConfig::ProductsPerPage();
         }
     }
     return $productsPerPage;
 }
 /**
  * Returns the form fields for this form
  *
  * @param bool $withUpdate Call the method with decorator updates or not?
  * 
  * @return array
  * 
  * @author Sebastian Diel <*****@*****.**>
  * @since 13.09.2013
  */
 public function getFormFields($withUpdate = true)
 {
     if (!array_key_exists('SortOrder', $this->formFields)) {
         $productsPerPage = $this->controller->getProductsPerPageSetting();
         if ($productsPerPage == SilvercartConfig::getProductsPerPageUnlimitedNumber()) {
             $productsPerPage = 0;
         }
         $product = singleton('SilvercartProduct');
         $sortableFrontendFields = $product->sortableFrontendFields();
         $sortableFrontendFieldValues = array_keys($sortableFrontendFields);
         $sortableFrontendFieldValues = array_flip($sortableFrontendFieldValues);
         if (!array_key_exists($product->getDefaultSort(), $sortableFrontendFieldValues)) {
             $sortableFrontendFieldValues[$product->getDefaultSort()] = 0;
         }
         $sortOrder = $sortableFrontendFieldValues[$product->getDefaultSort()];
         $sortableFrontendFieldsForDropdown = array_values($sortableFrontendFields);
         asort($sortableFrontendFieldsForDropdown);
         $this->formFields = array('SortOrder' => array('type' => 'DropdownField', 'title' => _t('SilvercartProductGroupPageSelector.SORT_ORDER'), 'value' => $sortableFrontendFieldsForDropdown, 'selectedValue' => $sortOrder, 'checkRequirements' => array()));
         $productsPerPageOptions = SilvercartConfig::getProductsPerPageOptions();
         if (!empty($productsPerPageOptions)) {
             $this->formFields['productsPerPage'] = array('type' => 'DropdownField', 'title' => _t('SilvercartProductGroupPageSelector.PRODUCTS_PER_PAGE'), 'value' => SilvercartConfig::getProductsPerPageOptions(), 'selectedValue' => $productsPerPage, 'checkRequirements' => array());
         } else {
             $this->formFields['productsPerPage'] = array('type' => 'HiddenField', 'value' => SilvercartConfig::getProductsPerPageDefault());
         }
     }
     return parent::getFormFields($withUpdate = true);
 }