/**
  * @param string $orderNumber
  * @param string $transactionId
  * @return array
  */
 public function getInstructionsByOrderNumberAndTransactionId($orderNumber, $transactionId)
 {
     $sql = "SELECT *\n                FROM s_payment_paypal_plus_payment_instruction\n                WHERE ordernumber = :orderNumber\n                  AND reference_number = :referenceNumber;";
     $result = $this->db->fetchRow($sql, array('orderNumber' => $orderNumber, 'referenceNumber' => $transactionId));
     if ($result) {
         $links = json_decode($result['links'], true);
         $result['links'] = $links;
     }
     return $result;
 }
 /**
  * Insert articles in comparision chart
  * @param  int               $articleId s_articles.id
  * @throws Enlight_Exception
  * @return bool              true/false
  */
 public function sAddComparison($articleId)
 {
     $articleId = (int) $articleId;
     if (!$articleId) {
         return null;
     }
     // Check if this article is already noted
     $checkForArticle = $this->db->fetchRow("SELECT id FROM s_order_comparisons WHERE sessionID=? AND articleID=?", [$this->session->offsetGet('sessionId'), $articleId]);
     // Check if max. numbers of articles for one comparison-session is reached
     $checkNumberArticles = $this->db->fetchRow("SELECT COUNT(id) AS countArticles FROM s_order_comparisons WHERE sessionID=?", [$this->session->offsetGet('sessionId')]);
     if ($checkNumberArticles["countArticles"] >= $this->config->offsetGet("sMAXCOMPARISONS")) {
         return "max_reached";
     }
     if (!$checkForArticle["id"]) {
         $articleName = $this->db->fetchOne("SELECT s_articles.name AS articleName FROM s_articles WHERE id = ?", [$articleId]);
         if (!$articleName) {
             return false;
         }
         $sql = "\n            INSERT INTO s_order_comparisons (sessionID, userID, articlename, articleID, datum)\n            VALUES (?,?,?,?,now())\n            ";
         $queryNewPrice = $this->db->executeUpdate($sql, [$this->session->offsetGet('sessionId'), empty($this->session["sUserId"]) ? 0 : $this->session["sUserId"], $articleName, $articleId]);
         if (!$queryNewPrice) {
             throw new Enlight_Exception("sArticles##sAddComparison##01: Error in SQL-query");
         }
     }
     return true;
 }
 /**
  * @param $id
  * @return mixed
  */
 public function getOptionRow($id)
 {
     $sql = 'SELECT `id`, `group_id`, `name`, `position`
             FROM s_article_configurator_options
             WHERE `id` = ?';
     return $this->db->fetchRow($sql, array($id));
 }
示例#4
0
 /**
  * Gets related pages for the given subpage
  * If a shop id is provided, only content for that shop is displayed
  *
  * @param array $staticPage
  * @param int|null $shopId
  * @return mixed
  */
 private function getRelatedForSubPage($staticPage, $shopId = null)
 {
     $andWhere = '';
     $siblingsParams = array('pageId' => $staticPage['id'], 'parentId' => $staticPage['parentID']);
     $parentParams = array('parentId' => $staticPage['parentID']);
     if ($shopId) {
         $andWhere .= ' AND (p.shop_ids IS NULL OR p.shop_ids LIKE :shopId)';
         $siblingsParams['shopId'] = '%|' . $shopId . '|%';
         $parentParams['shopId'] = '%|' . $shopId . '|%';
     }
     $siblingsSql = '
             SELECT p.id, p.description, p.link, p.target, IF(p.id=:pageId, 1, 0) as active, p.page_title
             FROM s_cms_static p
             WHERE p.parentID = :parentId
             ' . $andWhere . '
             ORDER BY p.position
         ';
     $staticPage['siblingPages'] = $this->db->fetchAll($siblingsSql, $siblingsParams);
     $parentSql = '
             SELECT p.id, p.description, p.link, p.target, p.page_title
             FROM s_cms_static p
             WHERE p.id = :parentId
             ' . $andWhere;
     $staticPage['parent'] = $this->db->fetchRow($parentSql, $parentParams);
     $staticPage['parent'] = $staticPage['parent'] ?: array();
     return $staticPage;
 }
示例#5
0
 /**
  * Convenience function to check if there is at least one order with the
  * provided cleared status.
  *
  * @param int $cleared
  * @return boolean
  */
 private function riskCheckClearedLevel($cleared)
 {
     if (!$this->session->offsetGet('sUserId')) {
         return false;
     }
     $checkOrder = $this->db->fetchRow("\n            SELECT id FROM s_order\n            WHERE cleared = ? AND userID = ?", array($cleared, $this->session->offsetGet('sUserId')));
     return $checkOrder && $checkOrder["id"];
 }
示例#6
0
 /**
  * Read a specific, static page (E.g. terms and conditions, etc.)
  *
  * @param int $staticId The page id
  * @return array|false Page data, or false if none found by given id
  */
 public function sGetStaticPage($staticId = null)
 {
     if (empty($staticId)) {
         $staticId = (int) $this->front->Request()->getQuery('sCustom', $staticId);
     }
     if (empty($staticId)) {
         return false;
     }
     // Load static page data from database
     $staticPage = $this->db->fetchRow("SELECT * FROM s_cms_static WHERE id = ?", array($staticId));
     if ($staticPage === false) {
         return false;
     }
     /**
      * Add support for sub pages
      */
     if (!empty($staticPage['parentID'])) {
         $sql = '
             SELECT p.id, p.description, p.link, p.target, IF(p.id=?, 1, 0) as active, p.page_title
             FROM s_cms_static p
             WHERE p.parentID = ?
             ORDER BY p.position
         ';
         $staticPage['siblingPages'] = $this->db->fetchAll($sql, array($staticId, $staticPage['parentID']));
         $sql = '
             SELECT p.id, p.description, p.link, p.target, p.page_title
             FROM s_cms_static p
             WHERE p.id = ?
         ';
         $staticPage['parent'] = $this->db->fetchRow($sql, array($staticPage['parentID']));
         $staticPage['parent'] = $staticPage['parent'] ?: array();
     } else {
         $sql = '
             SELECT p.id, p.description, p.link, p.target, p.page_title
             FROM s_cms_static p
             WHERE p.parentID = ?
             ORDER BY p.position
         ';
         $staticPage['subPages'] = $this->db->fetchAll($sql, array($staticId));
     }
     return $staticPage;
 }
示例#7
0
 /**
  * Returns the article data for the trusted shop article calculated by the current basket amount
  *
  * @param $amount
  * @return array
  */
 private function getTsArticleByAmount($amount)
 {
     if (empty($amount)) {
         return array();
     }
     $currency = $this->shop->getCurrency()->toArray();
     $currencyForSelect = '%' . $currency['currency'];
     $sql = "SELECT a.id AS id,\n                REPLACE(ROUND(ap.price * (100+t.tax) / 100, 2), '.', ',') AS grossFee,\n                ROUND(ap.price, 2) AS netFee,\n                aa.swag_trusted_range AS protectedAmountDecimal,\n                aa.swag_trusted_duration AS protectionDurationInt,\n                ad.ordernumber AS tsProductID\n\n                FROM s_articles AS a\n                  INNER JOIN s_articles_attributes AS aa\n                    ON a.id = aa.articleID\n                  INNER JOIN s_articles_details AS ad\n                    ON a.id = ad.articleID\n                  INNER JOIN s_core_tax AS t\n                    ON t.id = a.taxID\n                  INNER JOIN s_articles_prices AS ap\n                    ON a.id = ap.articleID\n                     AND ap.pricegroup = 'EK'\n                     AND ap.from = 1\n\n                WHERE aa.swag_trusted_range >= :amount AND ad.ordernumber LIKE :currency\n                ORDER BY aa.swag_trusted_range ASC LIMIT 1;";
     $nextProtectionItem = $this->db->fetchRow($sql, array('amount' => $amount, 'currency' => $currencyForSelect));
     $nextProtectionItem['currency'] = $currency['currency'];
     return $nextProtectionItem;
 }
示例#8
0
 /**
  * @param int $shippingId
  * @param array $postData
  * @return array
  */
 private function filterShippingAttributeData($shippingId, $postData)
 {
     $data = $this->db->fetchRow("SELECT * FROM s_user_shippingaddress_attributes WHERE shippingID = ?", [$shippingId]);
     unset($data['id']);
     unset($data['shippingID']);
     $allowedKeys = array_keys($data);
     foreach ($postData as $key => $value) {
         if (!in_array($key, $allowedKeys)) {
             continue;
         }
         $data[$key] = $value;
     }
     return $data;
 }
示例#9
0
 /**
  * Get article data for sAddArticle
  *
  * @param int $id Article ordernumber
  * @return array|false Article data, or false if none found
  */
 private function getArticleForAddArticle($id)
 {
     $sql = "\n            SELECT s_articles.id AS articleID, name AS articleName, taxID,\n              additionaltext, s_articles_details.shippingfree, laststock, instock,\n              s_articles_details.id as articledetailsID, ordernumber\n            FROM s_articles, s_articles_details\n            WHERE s_articles_details.ordernumber = ?\n            AND s_articles_details.articleID = s_articles.id\n            AND s_articles.active = 1\n            AND (\n                SELECT articleID\n                FROM s_articles_avoid_customergroups\n                WHERE articleID = s_articles.id AND customergroupID = ?\n            ) IS NULL\n        ";
     $article = $this->db->fetchRow($sql, array($id, $this->sSYSTEM->sUSERGROUPDATA["id"]));
     $article = $this->eventManager->filter('Shopware_Modules_Basket_getArticleForAddArticle_FilterArticle', $article, array("id" => $id, 'subject' => $this, "partner" => $this->sSYSTEM->_SESSION["sPartner"]));
     if (!$article) {
         return false;
     }
     $name = $this->moduleManager->Articles()->sGetArticleNameByOrderNumber($article["ordernumber"], true);
     if (!empty($name)) {
         $article["articleName"] = $name["articleName"];
         $article["additionaltext"] = $name["additionaltext"];
     }
     return $article;
 }
示例#10
0
 /**
  * Get article data for sAddArticle
  *
  * @param int $id Article ordernumber
  * @return array|false Article data, or false if none found
  */
 private function getArticleForAddArticle($id)
 {
     $sql = "\n            SELECT s_articles.id AS articleID, s_articles.main_detail_id, name AS articleName, taxID,\n              additionaltext, s_articles_details.shippingfree, laststock, instock,\n              s_articles_details.id as articledetailsID, ordernumber,\n              s_articles.configurator_set_id\n            FROM s_articles, s_articles_details\n            WHERE s_articles_details.ordernumber = ?\n            AND s_articles_details.articleID = s_articles.id\n            AND s_articles.active = 1\n            AND (\n                SELECT articleID\n                FROM s_articles_avoid_customergroups\n                WHERE articleID = s_articles.id AND customergroupID = ?\n            ) IS NULL\n        ";
     $article = $this->db->fetchRow($sql, array($id, $this->sSYSTEM->sUSERGROUPDATA["id"]));
     $article = $this->eventManager->filter('Shopware_Modules_Basket_getArticleForAddArticle_FilterArticle', $article, array("id" => $id, 'subject' => $this, "partner" => $this->sSYSTEM->_SESSION["sPartner"]));
     if (!$article) {
         return false;
     }
     $article = $this->moduleManager->Articles()->sGetTranslation($article, $article['articleID'], "article");
     $article = $this->moduleManager->Articles()->sGetTranslation($article, $article['articledetailsID'], "variant");
     if ($article['configurator_set_id'] > 0) {
         $context = $this->contextService->getProductContext();
         $product = Shopware()->Container()->get('shopware_storefront.list_product_service')->get($article['ordernumber'], $context);
         $product = $this->additionalTextService->buildAdditionalText($product, $context);
         $article['additionaltext'] = $product->getAdditional();
     }
     return $article;
 }
示例#11
0
 private function createProperties($groupCount, $optionCount, $namePrefix = 'Test')
 {
     $this->propertyNames[] = $namePrefix;
     $this->deleteProperties($namePrefix);
     $this->db->insert('s_filter', array('name' => $namePrefix . '-Set', 'comparable' => 1));
     $data = $this->db->fetchRow("SELECT * FROM s_filter WHERE name = '" . $namePrefix . "-Set'");
     for ($i = 0; $i < $groupCount; $i++) {
         $this->db->insert('s_filter_options', array('name' => $namePrefix . '-Gruppe-' . $i, 'filterable' => 1));
         $group = $this->db->fetchRow("SELECT * FROM s_filter_options WHERE name = '" . $namePrefix . "-Gruppe-" . $i . "'");
         for ($i2 = 0; $i2 < $optionCount; $i2++) {
             $this->db->insert('s_filter_values', array('value' => $namePrefix . '-Option-' . $i . '-' . $i2, 'optionID' => $group['id']));
         }
         $group['options'] = $this->db->fetchAll("SELECT * FROM s_filter_values WHERE optionID = ?", array($group['id']));
         $data['groups'][] = $group;
         $this->db->insert('s_filter_relations', array('optionID' => $group['id'], 'groupID' => $data['id']));
     }
     return $data;
 }
示例#12
0
 private function createAclResource()
 {
     // If exists: find existing SwagImportExport resource
     $pluginId = $this->db->fetchRow('SELECT pluginID FROM s_core_acl_resources WHERE name = ? ', ["swagimportexport"]);
     $pluginId = isset($pluginId['pluginID']) ? $pluginId['pluginID'] : null;
     if ($pluginId) {
         // prevent creation of new acl resource
         return;
     }
     $resource = new \Shopware\Models\User\Resource();
     $resource->setName('swagimportexport');
     $resource->setPluginId($this->getId());
     foreach (['export', 'import', 'profile', 'read'] as $action) {
         $privilege = new \Shopware\Models\User\Privilege();
         $privilege->setResource($resource);
         $privilege->setName($action);
         $this->em->persist($privilege);
     }
     $this->em->persist($resource);
     $this->em->flush();
 }
 /**
  * @param array $article
  * @return array
  */
 protected function findExistingEntries($article)
 {
     $articleId = null;
     $mainDetailId = null;
     $detailId = null;
     // Try to find an existing main variant
     if ($article['mainNumber']) {
         $result = $this->db->fetchRow('SELECT ad.id, ad.articleID FROM s_articles_details ad WHERE ordernumber = ?', $article['mainNumber']);
         if (!empty($result)) {
             $mainDetailId = $result['id'];
             $articleId = $result['articleID'];
         }
     }
     // try to find the existing detail
     $result = $this->db->fetchRow('SELECT ad.id, ad.articleID FROM s_articles_details ad WHERE ordernumber = ?', array($article['orderNumber']));
     if (!empty($result)) {
         $detailId = $result['id'];
         $articleId = $result['articleID'];
     }
     return array($mainDetailId, $articleId, $detailId);
 }
示例#14
0
 /**
  * Helper method for sAdmin::sGetPremiumDispatchSurcharge()
  * Calculates the surcharge for the current basket and dispatches
  *
  * @param $basket
  * @param $dispatches
  * @return float
  */
 private function calculateDispatchSurcharge($basket, $dispatches)
 {
     $surcharge = 0;
     if (empty($dispatches)) {
         return $surcharge;
     }
     foreach ($dispatches as $dispatch) {
         if (empty($dispatch['calculation'])) {
             $from = round($basket['weight'], 3);
         } elseif ($dispatch['calculation'] == 1) {
             if ($this->config->get('sARTICLESOUTPUTNETTO') && !$this->sSYSTEM->sUSERGROUPDATA["tax"] || !$this->sSYSTEM->sUSERGROUPDATA["tax"] && $this->sSYSTEM->sUSERGROUPDATA["id"]) {
                 $from = round($basket['amount_net'], 2);
             } else {
                 $from = round($basket['amount'], 2);
             }
         } elseif ($dispatch['calculation'] == 2) {
             $from = round($basket['count_article']);
         } elseif ($dispatch['calculation'] == 3) {
             $from = round($basket['calculation_value_' . $dispatch['id']]);
         } else {
             continue;
         }
         $result = $this->db->fetchRow('SELECT `value` , factor
             FROM s_premium_shippingcosts
             WHERE `from` <= ?
             AND dispatchID = ?
             ORDER BY `from` DESC
             LIMIT 1', array($from, $dispatch['id']));
         if ($result === false) {
             continue;
         }
         $surcharge += $result['value'];
         if (!empty($result['factor'])) {
             //die($result["factor"].">".$from);
             $surcharge += $result['factor'] / 100 * $from;
         }
     }
     return $surcharge;
 }
示例#15
0
 /**
  * @param array $article
  * @return bool|array
  */
 private function getArticleNumbers(array $article)
 {
     if (empty($article['articleID']) && empty($article['articledetailsID']) && empty($article['ordernumber'])) {
         return false;
     }
     if (!empty($article['articledetailsID'])) {
         $article['articledetailsID'] = intval($article['articledetailsID']);
         $where = "id = {$article['articledetailsID']}";
     } elseif (!empty($article['articleID'])) {
         $article['articleID'] = intval($article['articleID']);
         $where = "articleID = {$article['articleID']} AND kind = 1";
     } else {
         $article['ordernumber'] = $this->db->quote((string) $article['ordernumber']);
         $where = "ordernumber = {$article['ordernumber']}";
     }
     $sql = "SELECT id AS articledetailsID, ordernumber, articleID\n                FROM s_articles_details\n                WHERE {$where}";
     $numbers = $this->db->fetchRow($sql);
     if (empty($numbers['articledetailsID'])) {
         return false;
     }
     return $numbers;
 }
 /**
  * @return bool
  */
 public function hasAdditionalShippingAddress()
 {
     $sql = "SHOW COLUMNS FROM `s_user_shippingaddress` LIKE 'additional_address_line1'";
     $result = $this->db->fetchRow($sql);
     return !empty($result);
 }
示例#17
0
    /**
     * Replacement for: Shopware()->Api()->Export()->sOrderCustomers(array('orderID' => $orderId));
     *
     * @param $orderId
     * @return array|false
     */
    public function getCustomerInformationByOrderId($orderId)
    {
        $sql = <<<EOT
SELECT
    `b`.`company` AS `billing_company`,
    `b`.`department` AS `billing_department`,
    `b`.`salutation` AS `billing_salutation`,
    `ub`.`customernumber`,
    `b`.`firstname` AS `billing_firstname`,
    `b`.`lastname` AS `billing_lastname`,
    `b`.`street` AS `billing_street`,
    `b`.`zipcode` AS `billing_zipcode`,
    `b`.`city` AS `billing_city`,
    `b`.`phone` AS `phone`,
    `b`.`phone` AS `billing_phone`,
    `b`.`fax` AS `fax`,
    `b`.`fax` AS `billing_fax`,
    `b`.`countryID` AS `billing_countryID`,
    `b`.`stateID` AS `billing_stateID`,
    `bc`.`countryname` AS `billing_country`,
    `bc`.`countryiso` AS `billing_countryiso`,
    `bca`.`name` AS `billing_countryarea`,
    `bc`.`countryen` AS `billing_countryen`,
    `b`.`ustid`,
    `ba`.`text1` AS `billing_text1`,
    `ba`.`text2` AS `billing_text2`,
    `ba`.`text3` AS `billing_text3`,
    `ba`.`text4` AS `billing_text4`,
    `ba`.`text5` AS `billing_text5`,
    `ba`.`text6` AS `billing_text6`,
    `b`.`orderID` as `orderID`,
    `s`.`company` AS `shipping_company`,
    `s`.`department` AS `shipping_department`,
    `s`.`salutation` AS `shipping_salutation`,
    `s`.`firstname` AS `shipping_firstname`,
    `s`.`lastname` AS `shipping_lastname`,
    `s`.`street` AS `shipping_street`,
    `s`.`zipcode` AS `shipping_zipcode`,
    `s`.`city` AS `shipping_city`,
    `s`.`stateID` AS `shipping_stateID`,
    `s`.`countryID` AS `shipping_countryID`,
    `sc`.`countryname` AS `shipping_country`,
    `sc`.`countryiso` AS `shipping_countryiso`,
    `sca`.`name` AS `shipping_countryarea`,
    `sc`.`countryen` AS `shipping_countryen`,
    `sa`.`text1` AS `shipping_text1`,
    `sa`.`text2` AS `shipping_text2`,
    `sa`.`text3` AS `shipping_text3`,
    `sa`.`text4` AS `shipping_text4`,
    `sa`.`text5` AS `shipping_text5`,
    `sa`.`text6` AS `shipping_text6`,
    `u`.*,
       ub.birthday,
       `g`.`id` AS `preisgruppe`,
       `g`.`tax` AS `billing_net`
FROM
    `s_order_billingaddress` as `b`
LEFT JOIN `s_order_shippingaddress` as `s`
    ON `s`.`orderID` = `b`.`orderID`
LEFT JOIN `s_user_billingaddress` as `ub`
    ON `ub`.`userID` = `b`.`userID`
LEFT JOIN `s_user` as `u`
    ON `b`.`userID` = `u`.`id`
LEFT JOIN `s_core_countries` as `bc`
    ON `bc`.`id` = `b`.`countryID`
LEFT JOIN `s_core_countries` as `sc`
    ON `sc`.`id` = `s`.`countryID`
LEFT JOIN `s_core_customergroups` as `g`
    ON `u`.`customergroup` = `g`.`groupkey`
LEFT JOIN s_core_countries_areas bca
    ON bc.areaID = bca.id
LEFT JOIN s_core_countries_areas sca
    ON sc.areaID = sca.id
LEFT JOIN s_order_billingaddress_attributes ba
    ON b.id = ba.billingID
LEFT JOIN s_order_shippingaddress_attributes sa
    ON s.id = sa.shippingID
WHERE
    `b`.`orderID`=:orderId
EOT;
        $row = $this->db->fetchRow($sql, ['orderId' => $orderId]);
        return $row;
    }
 /**
  * @param integer $subShopID
  * @return array
  */
 protected function getMainShopDefaultPaymentId($subShopID)
 {
     $query = "SELECT `value`.value\n                   FROM s_core_config_elements AS element\n                   JOIN s_core_config_values AS `value` ON `value`.element_id = element.id\n                   WHERE `value`.shop_id = (SELECT main_id FROM s_core_shops WHERE id = ?)\n                         AND element.name = ?";
     return $this->db->fetchRow($query, [$subShopID, 'defaultpayment']);
 }
示例#19
0
 public function sGetArticlePremiumShippingcosts($article, $payment, $country, $dispatch = null)
 {
     $basket = $this->sGetDispatchBasket($article, $country['id'], $payment['id']);
     if (empty($basket)) {
         return false;
     }
     $dispatch = $this->sGetPremiumDispatch($basket, $dispatch);
     if (empty($dispatch)) {
         return false;
     }
     if (!empty($dispatch['shippingfree']) && $dispatch['shippingfree'] <= $basket['amount'] || empty($basket['count_article']) || !empty($basket['shippingfree']) && empty($dispatch['bind_shippingfree'])) {
         if (empty($dispatch['surcharge_calculation'])) {
             return $payment['surcharge'];
         } else {
             return 0;
         }
     }
     if (empty($dispatch['calculation'])) {
         $from = round($basket['weight'], 3);
     } elseif ($dispatch['calculation'] == 1) {
         $from = round($basket['amount'], 2);
     } elseif ($dispatch['calculation'] == 2) {
         $from = round($basket['count_article']);
     } elseif ($dispatch['calculation'] == 3) {
         $from = round($basket['calculation_value_' . $dispatch['id']]);
     } else {
         return false;
     }
     $sql = "\n            SELECT `value` , `factor`\n            FROM `s_premium_shippingcosts`\n            WHERE `from`<={$from}\n            AND `dispatchID`={$dispatch['id']}\n            ORDER BY `from` DESC\n            LIMIT 1\n        ";
     $result = $this->db->fetchRow($sql);
     if (empty($result)) {
         return false;
     }
     $result['shippingcosts'] = $result['value'];
     if (!empty($result['factor'])) {
         $result['shippingcosts'] += $result['factor'] / 100 * $from;
     }
     $result['surcharge'] = $this->sGetPremiumDispatchSurcharge($basket);
     if (!empty($result['surcharge'])) {
         $result['shippingcosts'] += $result['surcharge'];
     }
     $result['shippingcosts'] *= $this->sCurrency["factor"];
     $result['shippingcosts'] = round($result['shippingcosts'], 2);
     if (!empty($payment['surcharge']) && $dispatch['surcharge_calculation'] != 2 && (empty($article['shippingfree']) || empty($dispatch['surcharge_calculation']))) {
         $result['shippingcosts'] += $payment['surcharge'];
     }
     return $result['shippingcosts'];
 }
示例#20
0
 /**
  * Get article taxrate by id
  * @param int $id article id
  * @return float tax or false
  */
 public function sGetArticleTaxById($id)
 {
     $checkForArticle = $this->db->fetchRow("\n        SELECT s_core_tax.tax AS tax FROM s_core_tax, s_articles WHERE s_articles.id=? AND\n        s_articles.taxID = s_core_tax.id\n        ", array($id));
     if (isset($checkForArticle["tax"])) {
         return $checkForArticle["tax"];
     } else {
         return false;
     }
 }
示例#21
0
 /**
  * @covers sBasket::sAddArticle
  */
 public function testsAddArticle()
 {
     // No id, expect false
     $this->assertFalse($this->module->sAddArticle(null));
     $this->module->sSYSTEM->sSESSION_ID = uniqid();
     $this->session->offsetSet('sessionId', $this->module->sSYSTEM->sSESSION_ID);
     // Get random article with stock controll and add it to the basket
     $randomArticleOne = $this->db->fetchRow('SELECT detail.* FROM s_articles_details detail
         INNER JOIN s_articles article
           ON article.id = detail.articleID
         LEFT JOIN s_articles_avoid_customergroups avoid
           ON avoid.articleID = article.id
         WHERE detail.active = 1
         AND laststock = 1
         AND instock > 3
         AND avoid.articleID IS NULL
         AND article.id NOT IN (
           SELECT articleID
           FROM s_articles_avoid_customergroups
           WHERE customergroupID = 1
         )
         ORDER BY RAND() LIMIT 1');
     // Adding article without quantity adds one
     $this->module->sAddArticle($randomArticleOne['ordernumber']);
     $basket = $this->module->sGetBasket();
     $this->assertEquals(1, $basket['Quantity']);
     $this->assertEquals(1, $basket['content'][0]['quantity']);
     // Adding article with quantity adds correctly, finds stacks
     $this->module->sAddArticle($randomArticleOne['ordernumber'], 2);
     $basket = $this->module->sGetBasket();
     $this->assertEquals(1, $basket['Quantity']);
     $this->assertEquals(3, $basket['content'][0]['quantity']);
     // Start over
     $this->module->sDeleteBasket();
     // Adding article with quantity over stock, check that we have the available stock
     $this->module->sAddArticle($randomArticleOne['ordernumber'], $randomArticleOne['instock'] + 200);
     $basket = $this->module->sGetBasket();
     $this->assertEquals(1, $basket['Quantity']);
     $this->assertEquals(min($randomArticleOne['instock'], 100), $basket['content'][0]['quantity']);
     // Start over
     $this->module->sDeleteBasket();
     // Get random article and add it to the basket
     $randomArticleTwo = $this->db->fetchRow('SELECT detail.* FROM s_articles_details detail
         INNER JOIN s_articles article
           ON article.id = detail.articleID
         WHERE detail.active = 1
         AND laststock = 0
         AND instock > 20
         AND instock < 70
         AND article.id NOT IN (
           SELECT articleID
           FROM s_articles_avoid_customergroups
           WHERE customergroupID = 1
         )
         ORDER BY RAND() LIMIT 1');
     // Adding article with quantity over stock, check that we have the desired quantity
     $this->module->sAddArticle($randomArticleTwo['ordernumber'], $randomArticleTwo['instock'] + 20);
     $basket = $this->module->sGetBasket();
     $this->assertEquals(1, $basket['Quantity']);
     $this->assertEquals(min($randomArticleTwo['instock'] + 20, 100), $basket['content'][0]['quantity']);
     // Housekeeping
     $this->db->delete('s_order_basket', array('sessionID = ?' => $this->session->get('sessionId')));
 }
示例#22
0
 /**
  * Create status mail
  *
  * @param int $orderId
  * @param int $statusId
  * @param string $templateName
  * @return Enlight_Components_Mail
  */
 public function createStatusMail($orderId, $statusId, $templateName = null)
 {
     $statusId = (int) $statusId;
     $orderId = (int) $orderId;
     if (empty($templateName)) {
         $templateName = 'sORDERSTATEMAIL' . $statusId;
     }
     if (empty($orderId) || !is_numeric($statusId)) {
         return;
     }
     $order = $this->getOrderForStatusMail($orderId);
     $orderDetails = $this->getOrderDetailsForStatusMail($orderId);
     if (!empty($order['dispatchID'])) {
         $dispatch = $this->db->fetchRow('
             SELECT name, description FROM s_premium_dispatch
             WHERE id=?
         ', array($order['dispatchID']));
     }
     $user = Shopware()->Api()->Export()->sOrderCustomers(array('orderID' => $orderId));
     $user = current($user);
     if (empty($order) || empty($orderDetails) || empty($user)) {
         return;
     }
     $repository = Shopware()->Models()->getRepository('Shopware\\Models\\Shop\\Shop');
     $shopId = is_numeric($order['language']) ? $order['language'] : $order['subshopID'];
     $shop = $repository->getActiveById($shopId);
     $shop->registerResources(Shopware()->Bootstrap());
     /* @var $mailModel \Shopware\Models\Mail\Mail */
     $mailModel = Shopware()->Models()->getRepository('Shopware\\Models\\Mail\\Mail')->findOneBy(array('name' => $templateName));
     if (!$mailModel) {
         return;
     }
     $context = array('sOrder' => $order, 'sOrderDetails' => $orderDetails, 'sUser' => $user);
     if (!empty($dispatch)) {
         $context['sDispatch'] = $dispatch;
     }
     $result = $this->eventManager->notify('Shopware_Controllers_Backend_OrderState_Notify', array('subject' => Shopware()->Front(), 'id' => $orderId, 'status' => $statusId, 'mailname' => $templateName));
     if (!empty($result)) {
         $context['EventResult'] = $result->getValues();
     }
     $mail = Shopware()->TemplateMail()->createMail($templateName, $context, $shop);
     $return = array('content' => $mail->getPlainBodyText(), 'subject' => $mail->getPlainSubject(), 'email' => trim($user['email']), 'frommail' => $mail->getFrom(), 'fromname' => $mail->getFromName());
     $return = $this->eventManager->filter('Shopware_Controllers_Backend_OrderState_Filter', $return, array('subject' => Shopware()->Front(), 'id' => $orderId, 'status' => $statusId, 'mailname' => $templateName, 'mail' => $mail, 'engine' => Shopware()->Template()));
     $mail->clearSubject();
     $mail->setSubject($return['subject']);
     $mail->setBodyText($return['content']);
     $mail->clearFrom();
     $mail->setFrom($return['frommail'], $return['fromname']);
     $mail->addTo($return['email']);
     return $mail;
 }
示例#23
0
 public function sMailCampaignsGetDetail($id)
 {
     $sql = "\n        SELECT * FROM s_campaigns_mailings\n        WHERE id={$id}\n        ";
     $getCampaigns = $this->db->fetchRow($sql);
     if (!$getCampaigns) {
         return false;
     } else {
         // Fetch all positions
         $sql = "\n            SELECT id, type, description, value FROM s_campaigns_containers\n            WHERE promotionID={$id}\n            ORDER BY position\n            ";
         $sql = Enlight()->Events()->filter('Shopware_Modules_Marketing_MailCampaignsGetDetail_FilterSQL', $sql, array('subject' => $this, 'id' => $id));
         $getCampaignContainers = $this->db->fetchAll($sql);
         foreach ($getCampaignContainers as $campaignKey => $campaignValue) {
             switch ($campaignValue["type"]) {
                 case "ctBanner":
                     // Query Banner
                     $getBanner = $this->db->fetchRow("\n                        SELECT image, link, linkTarget, description FROM s_campaigns_banner\n                        WHERE parentID={$campaignValue["id"]}\n                        ");
                     // Rewrite banner
                     if ($getBanner["image"]) {
                         $getBanner["image"] = $this->sSYSTEM->sPathBanner . $getBanner["image"];
                     }
                     if (!preg_match("/http/", $getBanner["link"]) && $getBanner["link"]) {
                         $getBanner["link"] = "http://" . $getBanner["link"];
                     }
                     $getCampaignContainers[$campaignKey]["description"] = $getBanner["description"];
                     $getCampaignContainers[$campaignKey]["data"] = $getBanner;
                     break;
                 case "ctLinks":
                     // Query links
                     $getLinks = $this->db->fetchAll("\n                        SELECT description, link, target FROM s_campaigns_links\n                        WHERE parentID={$campaignValue["id"]}\n                        ORDER BY position\n                        ");
                     $getCampaignContainers[$campaignKey]["data"] = $getLinks;
                     break;
                 case "ctArticles":
                     $sql = "\n                        SELECT articleordernumber, type FROM s_campaigns_articles\n                        WHERE parentID={$campaignValue["id"]}\n                        ORDER BY position\n                        ";
                     $getArticles = $this->db->fetchAll($sql);
                     unset($articleData);
                     $context = $this->contextService->getShopContext();
                     foreach ($getArticles as $article) {
                         if ($article["type"]) {
                             $category = $this->sSYSTEM->_GET["sCategory"] ?: $context->getShop()->getCategory()->getId();
                             $tmpContainer = $this->sSYSTEM->sMODULES['sArticles']->sGetPromotionById($article["type"], $category, $article['articleordernumber']);
                             if (count($tmpContainer) && isset($tmpContainer["articleName"])) {
                                 $articleData[] = $tmpContainer;
                             }
                         }
                     }
                     $getCampaignContainers[$campaignKey]["data"] = $articleData;
                     break;
                 case "ctText":
                 case "ctVoucher":
                     $getText = $this->db->fetchRow("\n                            SELECT headline, html,image,alignment,link FROM s_campaigns_html\n                            WHERE parentID={$campaignValue["id"]}\n                        ");
                     if ($getText["image"]) {
                         $getText["image"] = $this->sSYSTEM->sPathBanner . $getText["image"];
                     }
                     if (!preg_match("/http/", $getText["link"]) && $getText["link"]) {
                         $getText["link"] = "http://" . $getText["link"];
                     }
                     $getCampaignContainers[$campaignKey]["description"] = $getText["headline"];
                     $getCampaignContainers[$campaignKey]["data"] = $getText;
                     break;
             }
         }
         $getCampaigns["containers"] = $getCampaignContainers;
         return $getCampaigns;
     }
 }
 /**
  * @param $name
  * @return mixed
  */
 protected function getMediaByName($name)
 {
     $media = $this->db->fetchRow('SELECT id, name, description, extension FROM s_media media WHERE media.name = ?', array($name));
     return $media;
 }