Пример #1
0
 /**
  * Getter similar to DataObject::get(); returns a SS_List of products filtered by the requirements in self::getRequiredAttributes();
  * If an product is free of charge, it can have no price. This is for giveaways and gifts.
  *
  * Expected format of $joins:
  * <pre>
  * array(
  *      array(
  *          'table' => 'JoinTableName_1',
  *          'on'    => 'JoinTableOnClause_1',
  *          'alias' => 'JoinTableAlias_1',
  *      ),
  *      array(
  *          'table' => 'JoinTableName_2',
  *          'on'    => 'JoinTableOnClause_2',
  *          'alias' => 'JoinTableAlias_2',
  *      ),
  *      ...
  * )
  * </pre>
  * 
  * @param string  $whereClause to be inserted into the sql where clause
  * @param string  $sort        string with sort clause
  * @param array   $joins       left join data as multi dimensional array
  * @param integer $limit       DataObject limit
  *
  * @return PaginatedList|ArrayList PaginatedList of products or empty ArrayList
  * 
  * @author Roland Lehmann <*****@*****.**>,
  *         Sebastian Diel <*****@*****.**>
  * @since 03.02.2015
  */
 public static function getProducts($whereClause = "", $sort = null, $joins = null, $limit = null)
 {
     $requiredAttributes = self::getRequiredAttributes();
     $pricetype = SilvercartConfig::Pricetype();
     $filter = "";
     if (!empty($requiredAttributes)) {
         foreach ($requiredAttributes as $requiredAttribute) {
             //find out if we are dealing with a real attribute or a multilingual field
             if (array_key_exists($requiredAttribute, DataObject::custom_database_fields('SilvercartProduct')) || $requiredAttribute == "Price") {
                 if ($requiredAttribute == "Price") {
                     // Gross price as default if not defined
                     if ($pricetype == "net") {
                         $filter .= sprintf("(PriceNetAmount != 0.0) AND ");
                     } else {
                         $filter .= sprintf("(PriceGrossAmount != 0.0) AND ");
                     }
                 } else {
                     $filter .= sprintf("%s != '' AND ", $requiredAttribute);
                 }
             } else {
                 // if its a multilingual attribute it comes from a relational class
                 $filter .= sprintf("SilvercartProductLanguage.%s != '' AND ", $requiredAttribute);
             }
         }
     }
     if ($whereClause != "") {
         $filter = $filter . $whereClause . ' AND ';
     }
     $filter .= 'isActive = 1 AND SilvercartProductGroupID > 0';
     if ($sort === null) {
         $sort = self::defaultSort();
     }
     $onclause = sprintf('"SPL"."SilvercartProductID" = "SilvercartProduct"."ID" AND "SPL"."Locale" = \'%s\'', Translatable::get_current_locale());
     $databaseFilteredProducts = SilvercartProduct::get()->leftJoin('SilvercartProductLanguage', $onclause, 'SPL')->where($filter)->sort($sort);
     if (!is_null($joins) && is_array($joins)) {
         foreach ($joins as $joinData) {
             $table = $alias = $joinData['table'];
             $onClause = $joinData['on'];
             if (array_key_exists('alias', $joinData)) {
                 $alias = $joinData['alias'];
             }
             $databaseFilteredProducts = $databaseFilteredProducts->leftJoin($table, $onClause, $alias);
         }
     }
     if (!is_null($limit)) {
         $offset = 0;
         if (strpos($limit, ',') !== false) {
             list($offset, $limit) = explode(',', $limit);
         }
         $databaseFilteredProducts = $databaseFilteredProducts->limit($limit, $offset);
     }
     if (Controller::curr()->hasMethod('getProductsPerPageSetting') && $databaseFilteredProducts) {
         $databaseFilteredProducts = new PaginatedList($databaseFilteredProducts, $_GET);
         $databaseFilteredProducts->setPageLength(Controller::curr()->getProductsPerPageSetting());
     }
     return $databaseFilteredProducts;
 }
 /**
  * Return fields for popup.
  *
  * @return FieldList
  *
  * @author Sascha Koehler <*****@*****.**>
  * @since 21.03.2012
  */
 public function getCMSFields_forPopup()
 {
     $fields = new FieldList();
     $orderId = 0;
     $fields->push(new HiddenField('SilvercartOrderID', '', $orderId));
     $fields->push(new DropdownField('SilvercartProductID', $this->fieldLabel('SilvercartProduct'), SilvercartProduct::get()->map('ID', 'Title')->toArray()));
     $fields->push(new TextField('Quantity', $this->fieldLabel('Quantity'), '1'));
     $this->extend('updateGetCMSFields_forPopup', $fields);
     return $fields;
 }
 /**
  * handles the requested action.
  * If a product detail view is requested, the detail view template will be
  * rendered an displayed.
  *
  * @param SS_HTTPRequest $request request data
  * @param string         $action  Action
  *
  * @return mixed
  * 
  * @author Sebastian Diel <*****@*****.**>
  * @since 03.03.2014
  */
 public function handleAction($request, $action)
 {
     if (is_numeric($this->urlParams['Action'])) {
         $this->urlParams['Action'] = (int) $this->urlParams['Action'];
         $product = SilvercartProduct::get()->byID(Convert::raw2sql($this->urlParams['Action']));
         if ($product instanceof SilvercartProduct) {
             $this->redirect($product->Link());
             return;
         }
     } elseif ($this->isFilteredByManufacturer()) {
         $url = str_replace($this->urlParams['Action'] . '/' . $this->urlParams['ID'], '', $_REQUEST['url']);
         $this->urlParams['Action'] = '';
         $this->urlParams['ID'] = '';
         $customRequest = new SS_HTTPRequest('GET', $url, array(), array(), null);
         return parent::handleAction($customRequest, $action);
         exit;
     }
     return parent::handleAction($request, $action);
 }
Пример #4
0
 /**
  * Returns the link.
  *
  * @return mixed SiteTree|boolean false
  *
  * @author Sebastian Diel <*****@*****.**>
  * @since 16.06.2014
  */
 public function Link()
 {
     if (is_null($this->link)) {
         $this->link = false;
         if (!empty($this->ProductNumberToReference)) {
             $product = SilvercartProduct::get()->filter('ProductNumberShop', $this->ProductNumberToReference)->first();
             if ($product instanceof SilvercartProduct) {
                 $this->link = $product->Link();
             }
         }
     }
     return $this->link;
 }
 /**
  * Returns the related products.
  * 
  * @return DataObjectSet
  */
 public function getProducts()
 {
     $products = SilvercartProduct::get("SilvercartManufacturerID = " . $this->ID);
     return $products;
 }
 /**
  * Returns the linked SiteTree object.
  *
  * @return mixed SiteTree|boolean false
  *
  * @author Sascha Koehler <*****@*****.**>,
  *         Sebastian Diel <*****@*****.**>
  * @since 16.06.2014
  */
 public function LinkedSite()
 {
     $linkedSite = false;
     if (!empty($this->ProductNumberToReference)) {
         $product = SilvercartProduct::get()->filter('ProductNumberShop', $this->ProductNumberToReference)->first();
         if ($product instanceof SilvercartProduct) {
             $linkedSite = $product;
         }
     }
     if ($linkedSite == false && $this->SiteTreeID > 0) {
         $linkedSite = $this->SiteTree();
     }
     return $linkedSite;
 }