/** * 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); }
/** * 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; }