예제 #1
0
 public function getProducts($data)
 {
     $result = $search = array();
     if (isset($data['path'])) {
         $categories = explode('_', $data['path']);
         $category_id = end($categories);
     }
     if (!empty($data['data']['filter_category_id'])) {
         $category_id = $data['data']['filter_category_id'];
     }
     if (empty($data['data']['start'])) {
         $data['data']['start'] = 0;
     }
     if (empty($data['data']['limit'])) {
         $data['data']['limit'] = 15;
     }
     if (empty($data['data']['sort'])) {
         $data['data']['sort'] = 'p.sort_order';
     }
     if (empty($data['data']['order']) || !in_array($data['data']['order'], array('ASC', 'DESC'))) {
         $data['data']['order'] = 'ASC';
     }
     $cache = 'wsp_plist_product_category_' . md5(json_encode($data));
     $result = Sumo\Cache::find($cache);
     if (is_array($result) && count($result)) {
         Sumo\Logger::info('Got products from cache: ');
         return $result;
     }
     if ($data['type'] == 'category') {
         $sql = 'SELECT p.product_id, COUNT(*) AS total
         FROM PREFIX_product AS p';
         if ($data['data']['sort'] == 'pd.name') {
             $sql .= ' LEFT JOIN PREFIX_product_description pd
             ON (p.product_id = pd.product_id)';
         }
         if (!empty($data['data']['filter_filter'])) {
             $sql .= ' LEFT JOIN PREFIX_product_attribute AS pa ON pa.product_id = p.product_id ';
         }
         $sql .= '
         LEFT JOIN PREFIX_product_to_category AS ptc
             ON ptc.product_id = p.product_id
         WHERE ptc.category_id = :category_id
             AND p.status = 1 ';
         if (!empty($data['data']['filter_filter'])) {
             $filter = array();
             if (is_array($data['data']['filter_filter'])) {
                 foreach ($data['data']['filter_filter'] as $id => $unused) {
                     if (!is_numeric($id) || empty($id)) {
                         continue;
                     }
                     $filter[] = $id;
                 }
             } else {
                 if (is_numeric($data['data']['filter_filter']) && !empty($data['data']['filter_filter'])) {
                     $filter[] = $data['data']['filter_filter'];
                 }
             }
             if (count($filter)) {
                 $sql .= ' AND pa.attribute_id IN (' . implode(',', $filter) . ') ';
             }
         }
         $sql .= '
         GROUP BY p.product_id ';
         switch ($data['data']['sort']) {
             case 'pd.name':
                 $sql .= 'ORDER BY pd.name ' . $data['data']['order'];
                 break;
             case 'p.price':
                 $sql .= 'ORDER BY p.price ' . $data['data']['order'];
                 break;
             case 'p.model':
                 $sql .= 'ORDER BY p.model_2 ' . $data['data']['order'];
                 break;
             default:
                 $sql .= 'ORDER BY p.sort_order ' . $data['data']['order'];
                 break;
         }
         $values = array('category_id' => $category_id);
     }
     if ($data['type'] == 'category_path') {
         $categoriesData = $this->fetchAll("SELECT category_id FROM PREFIX_category_path WHERE path_id = :id", array('id' => $category_id));
         $categories = array();
         foreach ($categoriesData as $item) {
             $categories[] = $item['category_id'];
         }
         $sql = 'SELECT p.product_id, COUNT(*) AS total
         FROM PREFIX_product AS p';
         if ($data['data']['sort'] == 'pd.name') {
             $sql .= ' LEFT JOIN PREFIX_product_description pd
             ON (p.product_id = pd.product_id)';
         }
         if (!empty($data['data']['filter_filter'])) {
             $sql .= ' LEFT JOIN PREFIX_product_attribute AS pa ON pa.product_id = p.product_id ';
         }
         $sql .= '
         LEFT JOIN PREFIX_product_to_category AS ptc
             ON ptc.product_id = p.product_id
         WHERE ';
         if (count($categories)) {
             $sql .= 'ptc.category_id IN(' . implode(',', $categories) . ')
             AND p.status = 1 ';
         } else {
             $sql .= 'p.status = 1 ';
         }
         if (!empty($data['data']['filter_filter'])) {
             $filter = array();
             if (is_array($data['data']['filter_filter'])) {
                 foreach ($data['data']['filter_filter'] as $id => $unused) {
                     if (!is_numeric($id) || empty($id)) {
                         continue;
                     }
                     $filter[] = $id;
                 }
             } else {
                 if (is_numeric($data['data']['filter_filter']) && !empty($data['data']['filter_filter'])) {
                     $filter[] = $data['data']['filter_filter'];
                 }
             }
             if (count($filter)) {
                 $sql .= ' AND pa.attribute_id IN (' . implode(',', $filter) . ') ';
             }
         }
         $sql .= '
         GROUP BY p.product_id ';
         switch ($data['data']['sort']) {
             case 'pd.name':
                 $sql .= 'ORDER BY pd.name ' . $data['data']['order'];
                 break;
             case 'p.price':
                 $sql .= 'ORDER BY p.price ' . $data['data']['order'];
                 break;
             case 'p.model':
                 $sql .= 'ORDER BY p.model_2 ' . $data['data']['order'];
                 break;
             default:
                 $sql .= 'ORDER BY p.sort_order ' . $data['data']['order'];
                 break;
         }
         $values = array();
     }
     if ($data['type'] == 'manufacturer') {
         $sql = 'SELECT p.product_id, COUNT(*) AS total
         FROM PREFIX_product AS p';
         if ($data['data']['sort'] == 'pd.name') {
             $sql .= ' LEFT JOIN PREFIX_product_description pd
             ON (p.product_id = pd.product_id)';
         }
         if (!empty($data['data']['filter_filter'])) {
             $sql .= ' LEFT JOIN PREFIX_product_attribute AS pa ON pa.product_id = p.product_id ';
         }
         $sql .= '
         LEFT JOIN PREFIX_product_to_category AS ptc
             ON ptc.product_id = p.product_id
         WHERE p.manufacturer_id = :manufacturer_id
             AND p.status = 1 ';
         if (!empty($data['data']['filter_filter'])) {
             $filter = array();
             if (is_array($data['data']['filter_filter'])) {
                 foreach ($data['data']['filter_filter'] as $id => $unused) {
                     if (!is_numeric($id) || empty($id)) {
                         continue;
                     }
                     $filter[] = $id;
                 }
             } else {
                 if (is_numeric($data['data']['filter_filter']) && !empty($data['data']['filter_filter'])) {
                     $filter[] = $data['data']['filter_filter'];
                 }
             }
             if (count($filter)) {
                 $sql .= ' AND pa.attribute_id IN (' . implode(',', $filter) . ') ';
             }
         }
         $sql .= '
         GROUP BY p.product_id ';
         switch ($data['data']['sort']) {
             case 'pd.name':
                 $sql .= 'ORDER BY pd.name ' . $data['data']['order'];
                 break;
             case 'p.price':
                 $sql .= 'ORDER BY p.price ' . $data['data']['order'];
                 break;
             case 'p.model':
                 $sql .= 'ORDER BY p.model_2 ' . $data['data']['order'];
                 break;
             default:
                 $sql .= 'ORDER BY p.sort_order ' . $data['data']['order'];
                 break;
         }
         $values = array('manufacturer_id' => $data['data']['filter_manufacturer_id']);
     }
     if (!empty($sql)) {
         $total = $this->query($sql, $values)->fetch();
         $result['total'] = $total['total'];
         $sql .= ' LIMIT ' . $data['data']['start'] . ',' . $data['data']['limit'];
         if ($data['type'] == 'category_path') {
             if (!$total || !count($total)) {
                 Sumo\Logger::warning('total query failed');
                 return;
             }
             Sumo\Logger::warning(print_r($total, true));
         }
         $products = $this->fetchAll($sql, $values);
         Sumo\Logger::info('Total products count: ' . $result['total'] . ', fetchAll with limit: ' . print_r($products, true));
     }
     if (is_array($products) && count($products)) {
         $count = 1;
         foreach ($products as $p) {
             if (empty($p['product_id'])) {
                 continue;
             }
             $product = $this->getProduct($p['product_id']);
             if ((!$product['stock_visible'] || $product['stock_visible'] == 2 && !$this->config->get('display_stock_empty')) && $product['quantity'] <= 0) {
                 Sumo\Logger::info('Product ' . $p['product_id'] . ' has no stock and may not be visible, or shop is set to disable low quantity products');
                 continue;
             }
             $result[$count++] = $product;
         }
     }
     if (!$result['total'] && $data['type'] == 'category') {
         $data['type'] = 'category_path';
         return $this->getProducts($data);
     }
     Sumo\Cache::set($cache, $result);
     Sumo\Logger::info('Put products in cache');
     return $result;
 }
예제 #2
0
 public function checkSettings($store_id = 0)
 {
     // update 1.0.1; language string for sofort
     Sumo\Language::getVar('APP_MOLLIE_CATALOG_SOFORT_DESCRIPTION');
     $check = self::query("SELECT value FROM PREFIX_translations WHERE key_id = (SELECT id FROM PREFIX_translations_keys WHERE name = 'APP_MOLLIE_CATALOG_SOFORT_DESCRIPTION') AND language_id = 1")->fetch();
     if (empty($check['value'])) {
         self::query("INSERT INTO PREFIX_translations SET value = 'Betaal met SoFort banking', key_id = (SELECT id FROM PREFIX_translations_keys WHERE name = 'APP_MOLLIE_CATALOG_SOFORT_DESCRIPTION'), language_id =1");
     }
     $data = $this->getSettings($store_id);
     if (!$data['enabled']) {
         return true;
     }
     unset($data['enabled']);
     if (empty($data['general']['api_key'])) {
         Sumo\Logger::warning('[Mollie] API Key is not set');
         return false;
     } else {
         include 'api.php';
         $test = new ModelApi($this->registry);
         try {
             $test->setKey($data['general']['api_key']);
         } catch (\Exception $e) {
             Sumo\Logger::warning('[Mollie] API Key is invalid');
             return false;
         }
         try {
             $testData = $test->callMethods();
             if (isset($testData['error'])) {
                 Sumo\Logger::warning('[Mollie] API Key is invalid, error returned from Mollie: ' . Sumo\Language::getVar('APP_MOLLIE_ERROR_' . strtoupper($response['error']['type'])));
                 return false;
             } else {
                 if (!count($testData['data'])) {
                     Sumo\Logger::warning('[Mollie] API Key is valid, but no payment options are available!');
                     return false;
                 } else {
                     $countDisabled = 0;
                     foreach ($testData['data'] as $list) {
                         if (!isset($data[$list['id']]['enabled']) || !$data[$list['id']]['enabled']) {
                             $countDisabled++;
                         }
                     }
                     if ($countDisabled == count($testData['data'])) {
                         Sumo\Logger::warning('[Mollie] There are no payment options enabled');
                         return false;
                     }
                 }
             }
         } catch (\Exception $e) {
             Sumo\Logger::warning('[Mollie] Unknown API error occured');
             return false;
         }
     }
     if (!isset($data['tax'])) {
         Sumo\Logger::warning('[Mollie] Tax is not set');
         return false;
     }
     if (empty($data['instructions'][$this->config->get('language_id')])) {
         Sumo\Logger::warning('[Mollie] Instructions for default language is not set');
         return false;
     }
     unset($data['instructions']);
     if (!count($data)) {
         return false;
     }
     return true;
 }
예제 #3
0
 public function checkSettings($store_id = 0)
 {
     $data = $this->getSettings($store_id);
     if (!$data['enabled']) {
         return true;
     }
     if (!count($data['merchant'])) {
         return false;
     } else {
         if (empty($data['merchant']['id'])) {
             Sumo\Logger::warning('[Sisow] Merchant id is empty');
             return false;
         }
         if (empty($data['merchant']['key'])) {
             Sumo\Logger::warning('[Sisow] Merchant key is empty');
             return false;
         }
         include 'api.php';
         $api = new ModelApi($this->registry);
         try {
             $api->setMerchant($data['merchant']['id'], $data['merchant']['key']);
             $methods = $api->callMethods();
             if (isset($methods['error'])) {
                 Sumo\Logger::warning('[Sisow] Merchant id/key is invalid');
                 return false;
             } else {
                 if (!count($methods['merchant']['payments'])) {
                     Sumo\Logger::warning('[Sisow] Merchant is valid, but no payment options are available');
                     return false;
                 }
             }
         } catch (\Exception $e) {
             Sumo\Logger::warning('[Sisow] Unexpected error occured while validating merchant id/key');
             return false;
         }
     }
     if (!count($data['status'])) {
         return false;
     }
     foreach ($data['status'] as $type => $id) {
         if ($id <= 0) {
             Sumo\Logger::warning('[Sisow] Status for ' . $type . ' is empty');
             return false;
         }
     }
     if (!count($data['purchaseid'])) {
         return false;
     } else {
         if (empty($data['purchaseid'][$this->config->get('language_id')])) {
             Sumo\Logger::warning('[Sisow] Purchase description for default language is empty');
             return false;
         }
     }
     if (empty($data['tax'])) {
         Sumo\Logger::warning('[Sisow] No tax has been set');
         return false;
     }
     return true;
 }