public function add($product_id, $quantity = null)
 {
     $OSCOM_Customer = Registry::get('Customer');
     $OSCOM_PDO = Registry::get('PDO');
     $OSCOM_Language = Registry::get('Language');
     if (!is_numeric($product_id)) {
         return false;
     }
     $OSCOM_Product = new Product($product_id);
     if ($OSCOM_Product->isValid()) {
         if ($this->exists($product_id)) {
             $item_id = $this->getBasketID($product_id);
             if (!is_numeric($quantity)) {
                 $quantity = $this->getQuantity($item_id) + 1;
             }
             $this->_contents[$item_id]['quantity'] = $quantity;
             if ($OSCOM_Customer->isLoggedOn()) {
                 $Qupdate = $OSCOM_PDO->prepare('update :table_shopping_carts set quantity = :quantity where customers_id = :customers_id and item_id = :item_id');
                 $Qupdate->bindInt(':quantity', $quantity);
                 $Qupdate->bindInt(':customers_id', $OSCOM_Customer->getID());
                 $Qupdate->bindInt(':item_id', $item_id);
                 $Qupdate->execute();
             }
         } else {
             if (!is_numeric($quantity)) {
                 $quantity = 1;
             }
             if ($OSCOM_Customer->isLoggedOn()) {
                 $Qid = $OSCOM_PDO->prepare('select max(item_id) as item_id from :table_shopping_carts where customers_id = :customers_id');
                 $Qid->bindInt(':customers_id', $OSCOM_Customer->getID());
                 $Qid->execute();
                 $item_id = $Qid->valueInt('item_id') + 1;
             } else {
                 if (empty($this->_contents)) {
                     $item_id = 1;
                 } else {
                     $item_id = max(array_keys($this->_contents)) + 1;
                 }
             }
             $this->_contents[$item_id] = array('item_id' => $item_id, 'id' => $product_id, 'parent_id' => (int) $OSCOM_Product->getData('parent_id'), 'name' => $OSCOM_Product->getTitle(), 'model' => $OSCOM_Product->getModel(), 'keyword' => $OSCOM_Product->getKeyword(), 'image' => $OSCOM_Product->getImage(), 'price' => $OSCOM_Product->getPrice(true), 'quantity' => $quantity, 'weight' => $OSCOM_Product->getData('weight'), 'tax_class_id' => $OSCOM_Product->getData('tax_class_id'), 'date_added' => DateTime::getShort(DateTime::getNow()), 'weight_class_id' => $OSCOM_Product->getData('weight_class_id'));
             if ($OSCOM_Customer->isLoggedOn()) {
                 $Qnew = $OSCOM_PDO->prepare('insert into :table_shopping_carts (customers_id, item_id, products_id, quantity, date_added) values (:customers_id, :item_id, :products_id, :quantity, now())');
                 $Qnew->bindInt(':customers_id', $OSCOM_Customer->getID());
                 $Qnew->bindInt(':item_id', $item_id);
                 $Qnew->bindInt(':products_id', $product_id);
                 $Qnew->bindInt(':quantity', $quantity);
                 $Qnew->execute();
             }
             if ($OSCOM_Product->getData('parent_id') > 0) {
                 $Qvariant = $OSCOM_PDO->prepare('select pvg.id as group_id, pvg.title as group_title, pvg.module, pvv.id as value_id, pvv.title as value_title from :table_products_variants pv, :table_products_variants_values pvv, :table_products_variants_groups pvg where pv.products_id = :products_id and pv.products_variants_values_id = pvv.id and pvv.languages_id = :languages_id_pvv and pvv.products_variants_groups_id = pvg.id and pvg.languages_id = :languages_id_pvg');
                 $Qvariant->bindInt(':products_id', $product_id);
                 $Qvariant->bindInt(':languages_id_pvv', $OSCOM_Language->getID());
                 $Qvariant->bindInt(':languages_id_pvg', $OSCOM_Language->getID());
                 $Qvariant->execute();
                 while ($Qvariant->fetch()) {
                     $group_title = ProductVariants::getGroupTitle($Qvariant->value('module'), $Qvariant->toArray());
                     $value_title = ProductVariants::getValueTitle($Qvariant->value('module'), $Qvariant->toArray());
                     $has_custom_value = ProductVariants::hasCustomValue($Qvariant->value('module'));
                     $this->_contents[$item_id]['variants'][] = array('group_id' => $Qvariant->valueInt('group_id'), 'value_id' => $Qvariant->valueInt('value_id'), 'group_title' => $group_title, 'value_title' => $value_title, 'has_custom_value' => $has_custom_value);
                     if ($OSCOM_Customer->isLoggedOn() && $has_custom_value === true) {
                         $Qnew = $OSCOM_PDO->prepare('insert into :table_shopping_carts_custom_variants_values (shopping_carts_item_id, customers_id, products_id, products_variants_values_id, products_variants_values_text) values (:shopping_carts_item_id, :customers_id, :products_id, :products_variants_values_id, :products_variants_values_text)');
                         $Qnew->bindInt(':shopping_carts_item_id', $item_id);
                         $Qnew->bindInt(':customers_id', $OSCOM_Customer->getID());
                         $Qnew->bindInt(':products_id', $product_id);
                         $Qnew->bindInt(':products_variants_values_id', $Qvariant->valueInt('value_id'));
                         $Qnew->bindValue(':products_variants_values_text', $value_title);
                         $Qnew->execute();
                     }
                 }
             }
         }
         $this->_cleanUp();
         $this->_calculate();
     }
 }
Example #2
0
    public function getVariantGroups() {
      $OSCOM_PDO = Registry::get('PDO');
      $OSCOM_Language = Registry::get('Language');

      $vg = array();

      $Qvgroups = $OSCOM_PDO->prepare('select id, title, module from :table_products_variants_groups where languages_id = :languages_id order by sort_order, title');
      $Qvgroups->bindInt(':languages_id', $OSCOM_Language->getID());
      $Qvgroups->execute();

      while ( $Qvgroups->fetch() ) {
        $has_multiple_value_groups = ProductVariants::allowsMultipleValues($Qvgroups->value('module'));

        $vg[$Qvgroups->valueInt('id')] = array('title' => $Qvgroups->value('title'),
                                               'values' => array(),
                                               'allow_multiple_values' => $has_multiple_value_groups);

        $Qvvalues = $OSCOM_PDO->prepare('select id, title from :table_products_variants_values where products_variants_groups_id = :products_variants_groups_id and languages_id = :languages_id order by sort_order, title');
        $Qvvalues->bindInt(':products_variants_groups_id', $Qvgroups->valueInt('id'));
        $Qvvalues->bindInt(':languages_id', $OSCOM_Language->getID());
        $Qvvalues->execute();

        while ( $Qvvalues->fetch() ) {
          $vg[$Qvgroups->valueInt('id')]['values'][$Qvvalues->valueInt('id')] = array('title' => $Qvvalues->value('title'));
        }
      }

      return $vg;
    }
Example #3
0
if ($OSCOM_Product->hasVariants()) {
    ?>

    <div id="variantsBlock">
      <div id="variantsBlockTitle"><?php 
    echo OSCOM::getDef('product_attributes');
    ?>
</div>

      <div id="variantsBlockData">

<?php 
    foreach ($OSCOM_Product->getVariants() as $group_id => $value) {
        echo ProductVariants::parse($value['module'], $value);
    }
    echo ProductVariants::defineJavascript($OSCOM_Product->getVariants(false));
    ?>

      </div>
    </div>

<?php 
}
?>

    </form>
  </div>
</div>

<div style="clear: both;"></div>