12include_once 
'./Services/Payment/classes/class.ilPaymentPrices.php';
 
   13include_once 
'./Services/Payment/classes/class.ilPaymentObject.php';
 
   14include_once 
'./Services/Payment/classes/class.ilPaymentCoupons.php';
 
   43                $this->session_id = session_id();
 
   52                $this->session_id = $a_session_id;
 
   62                $this->pobject_id = $a_pobject_id;
 
   70                $this->price_id = $a_price_id;
 
   79                if ($a_pay_method == 0)
 
   81                        return $this->sc_entries ? $this->sc_entries : array();
 
   85                        $tmp_entries = array();
 
   86                        foreach($this->sc_entries as $entry)
 
   88                        if ($entry[
'pay_method'] == $a_pay_method)
 
   90                                        $tmp_entries[$entry[
'psc_id']] = $entry;
 
   98                $this->total_amount = $a_total_amount;
 
  111                $ilDB->update(
'payment_shopping_cart',
 
  112                array(
'customer_id' => array(
'integer', (
int) $a_user_id)),
 
  122                $ilDB->update(
'payment_shopping_cart',
 
  123                array(
'session_id' => array(
'text', $a_new_sessid)),
 
  124                array(
'session_id'=> array(
'text', $a_old_sessid)));
 
  134                if(ANONYMOUS_USER_ID == 
$ilUser->getId())
 
  136                        $res = $this->db->queryf(
' 
  137                                SELECT * FROM payment_shopping_cart 
  138                                WHERE session_id = %s 
  139                                AND pobject_id = %s',
 
  140                                array(
'text', 
'integer'),
 
  145                        $res = $this->db->queryf(
' 
  146                                SELECT * FROM payment_shopping_cart 
  147                                WHERE customer_id = %s 
  148                                AND pobject_id = %s',
 
  149                                array(
'integer', 
'integer'),
 
  150                                array($this->user_obj->getId(), $a_pobject_id));
 
  152                return $res->numRows() ? true : 
false;
 
  159                if(ANONYMOUS_USER_ID == 
$ilUser->getId())
 
  161                        $res = $this->db->queryf(
' 
  162                                SELECT * FROM payment_shopping_cart 
  163                                WHERE session_id = %s 
  164                                AND pobject_id = %s',
 
  165                                array(
'text', 
'integer'),
 
  170                        $res = $this->db->queryf(
' 
  171                                SELECT * FROM payment_shopping_cart 
  172                                WHERE customer_id = %s 
  173                                AND pobject_id = %s',
 
  174                                array(
'integer', 
'integer'),
 
  175                                array($this->user_obj->getId(), $a_pobject_id));
 
  179                        return $this->db->fetchAssoc(
$res);
 
  188                if(ANONYMOUS_USER_ID == 
$ilUser->getId())
 
  191                        $statement = $this->db->manipulateF(
' 
  192                                DELETE FROM payment_shopping_cart 
  193                                WHERE session_id = %s 
  194                                AND pobject_id = %s',
 
  195                                array(
'integer', 
'integer'),
 
  202                        $statement = $this->db->manipulateF(
' 
  203                                DELETE FROM payment_shopping_cart 
  204                                WHERE customer_id = %s 
  205                                AND pobject_id = %s',
 
  206                                array(
'integer', 
'integer'),
 
  207                                array($this->user_obj->getId(), $this->getPobjectId()));
 
  210                $next_id = $this->db->nextId(
'payment_shopping_cart');
 
  212                $this->db->insert(
'payment_shopping_cart',
 
  213                array(
'psc_id'   => array(
'integer', $next_id),
 
  214                        'customer_id'=> array(
'integer', $this->user_obj->getId()),
 
  215                        'pobject_id' => array(
'integer', $this->
getPobjectId()),
 
  216                        'price_id'   => array(
'integer', $this->
getPriceId()),
 
  228                if(ANONYMOUS_USER_ID == 
$ilUser->getId())
 
  230                        $this->db->update(
'payment_shopping_cart',
 
  231                        array(
'pobject_id'=> array(
'integer', $this->
getPobjectId()),
 
  232                                  'price_id'  => array(
'integer', $this->
getPriceId()),
 
  234                        array(
'psc_id'    => array(
'integer', (
int)$a_psc_id)));
 
  239                        $this->db->update(
'payment_shopping_cart',
 
  240                        array(
'customer_id'     => array(
'integer', $this->user_obj->getId()),
 
  241                                  'pobject_id'  => array(
'integer', $this->
getPobjectId()),
 
  242                                  'price_id'    => array(
'integer', $this->
getPriceId()),
 
  244                        array( 
'psc_id'         => array(
'integer', (
int)$a_psc_id)));
 
  251        public function delete($a_psc_id)
 
  253                $statement = $this->db->manipulateF(
' 
  254                        DELETE FROM payment_shopping_cart 
  256                        array(
'integer'), array($a_psc_id));
 
  264                if(ANONYMOUS_USER_ID == 
$ilUser->getId())
 
  266                        $statement = $this->db->manipulateF(
' 
  267                                DELETE FROM payment_shopping_cart 
  268                                WHERE session_id = %s',
 
  274                        $statement = $this->db->manipulateF(
' 
  275                                DELETE FROM payment_shopping_cart 
  276                                WHERE customer_id = %s',
 
  277                                array(
'integer'), array($this->user_obj->getId())
 
  290                if(ANONYMOUS_USER_ID == 
$ilUser->getId())
 
  293                        SELECT * FROM payment_shopping_cart 
  294                        WHERE session_id = %s',
 
  295                        array(
'text'), array(self::getSessionId()));            
 
  300                        SELECT * FROM payment_shopping_cart 
  301                        WHERE customer_id = %s',
 
  302                        array(
'integer'), array($a_user_id));           
 
  305                return $ilDB->numRows(
$res) ? true : 
false;
 
  313                if(ANONYMOUS_USER_ID != 
$ilUser->getId())
 
  315                        $res = $this->db->queryf(
' 
  316                        SELECT pobject_id, count(pobject_id) count FROM payment_shopping_cart 
  317                        WHERE customer_id = %s 
  318                        GROUP BY pobject_id',
 
  319                        array(
'integer'), array($this->user_obj->getId()));
 
  321                        while(
$row = $this->db->fetchAssoc(
$res))
 
  323                                if(
$row[
'count'] > 1)
 
  325                                        $this->db->setLimit(1);
 
  326                                        $this->db->manipulateF(
' 
  327                                        DELETE FROM payment_shopping_cart 
  328                                        WHERE customer_id = %s 
  329                                        AND pobject_id = %s',
 
  330                                                array(
'integer',
'integer'),
 
  331                                                array($this->user_obj->getId(),
$row[
'pobject_id']));
 
  341                include_once 
'./Services/Payment/classes/class.ilPaymentPrices.php';
 
  343                $this->sc_entries = array();
 
  346                && 
$_SESSION[
'shop_user_id'] != ANONYMOUS_USER_ID
 
  347                || $this->user_obj->getId() != ANONYMOUS_USER_ID)
 
  349                        $res = $this->db->queryf(
' 
  350                                SELECT * FROM payment_shopping_cart 
  351                                WHERE customer_id = %s',
 
  352                                array(
'integer'), array($this->user_obj->getId()));
 
  354                else if(ANONYMOUS_USER_ID == 
$ilUser->getId())
 
  356                        $res = $this->db->queryf(
' 
  357                                SELECT * FROM payment_shopping_cart 
  358                                WHERE session_id = %s',
 
  362                while(
$row = $this->db->fetchObject(
$res))
 
  364                        $this->sc_entries[
$row->psc_id][
"psc_id"] = 
$row->psc_id;
 
  365                        $this->sc_entries[
$row->psc_id][
"customer_id"] = 
$row->customer_id; 
 
  366                        $this->sc_entries[
$row->psc_id][
"pobject_id"] = 
$row->pobject_id; 
 
  367                        $this->sc_entries[
$row->psc_id][
"price_id"] = 
$row->price_id;
 
  368                        $this->sc_entries[
$row->psc_id][
'session_id'] = 
$row->session_id;
 
  374                foreach($this->sc_entries as $entry)
 
  379                                $this->
delete($entry[
'psc_id']);
 
  384                        $tmp_pobj = 
new ilPaymentObject($this->user_obj, $entry[
'pobject_id']);
 
  386                        $pay_method = $tmp_pobj->getPayMethod();
 
  387                        if($pay_method == $tmp_pobj->PAY_METHOD_NOT_SPECIFIED)
 
  389                                $this->
delete($entry[
'psc_id']);
 
  394                        if($tmp_pobj->getStatus() == $tmp_pobj->STATUS_EXPIRES)
 
  396                                $this->
delete($entry[
'psc_id']);
 
  402                        $this->sc_entries[$entry[
'psc_id']][
'pay_method'] = $pay_method;
 
  405                                'id' => $entry[
'price_id'],
 
  406                                'pay_method' => $pay_method
 
  422                if(!count($items = $this->
getEntries($a_pay_method)))
 
  429                foreach($items as $item)
 
  431                        $tmp_pobject = 
new ilPaymentObject($this->user_obj,$item[
'pobject_id']);
 
  435                        $f_result[$counter][
"psc_id"] = $item[
'psc_id'];
 
  436                        $f_result[$counter][
"pobject_id"] = $item[
'pobject_id'];
 
  439                                $f_result[$counter][
"obj_id"] = $tmp_obj->getId();
 
  440                                $f_result[$counter][
"type"] = $tmp_obj->getType();
 
  441                                $f_result[$counter][
"object_title"] = $tmp_obj->getTitle();
 
  446                                $f_result[$counter][
"obj_id"] = 
'';
 
  447                                $f_result[$counter][
"type"] = 
'';
 
  448                                $f_result[$counter][
"object_title"] = 
$lng->txt(
'object_deleted');
 
  454                        $price = number_format($price_data[
'price'], 2, 
'.', 
'');
 
  456                        $f_result[$counter][
"price"] =  $price;
 
  457                        $f_result[$counter][
"price_string"] = $price_string;
 
  458                        $f_result[$counter][
'extension'] = $price_data[
'extension'];
 
  460                 require_once 
'./Services/Payment/classes/class.ilShopVats.php';
 
  461                        $oVAT = 
new ilShopVats((
int)$tmp_pobject->getVatId());                                          
 
  462                        $f_result[$counter][
'vat_rate'] = $oVAT->getRate();
 
  463                        $f_result[$counter][
'vat_unit'] = $tmp_pobject->getVat($price);
 
  465                        $f_result[$counter][
"duration"] = $price_data[
"duration"];
 
  466                        $f_result[$counter][
'unlimited_duration'] = $price_data[
'unlimited_duration'];
 
  468            $f_result[$counter][
"price_type"] = $price_data[
"price_type"];
 
  469            $f_result[$counter][
"duration_from"] = $price_data[
"duration_from"];
 
  470            $f_result[$counter][
"duration_until"] = $price_data[
"duration_until"];
 
  471            $f_result[$counter][
"description"] = $price_data[
"description"];
 
  486                        for ($i = 0; $i < count(
$result); $i++)
 
  488                                $amount += 
$result[$i][
"price"];
 
  491                return (
float) $amount;
 
  494        function getVat($a_amount = 0, $a_pobject_id = 0)
 
  498                include_once 
'./Services/Payment/classes/class.ilShopVats.php';
 
  501                SELECT * FROM payment_objects WHERE pobject_id = %s',
 
  502                array(
'integer'), array($a_pobject_id));
 
  506                        $this->vat_id = 
$row->vat_id;
 
  510                        SELECT * FROM payment_vats WHERE vat_id = %s',
 
  511                        array(
'integer'),array($this->vat_id));
 
  515                        $this->vat_rate = 
$row->vat_rate;
 
  517                return (
float) ($a_amount - (round(($a_amount / (1 + ($this->vat_rate / 100.0))) * 100) / 100));                
 
  524                        foreach (
$_SESSION[
'coupons'] as $payment_type => $coupons_array)
 
  526                                if (is_array($coupons_array))
 
  528                                        foreach ($coupons_array as $coupon_key => $coupon)
 
  530                                                $_SESSION[
'coupons'][$payment_type][$coupon_key][
'total_objects_coupon_price'] = 0.0;
 
  531                                                $_SESSION[
'coupons'][$payment_type][$coupon_key][
'items'] = array();                                            
 
  540                if (is_array($coupons))
 
  544                        foreach ($coupons as $coupon)
 
  546                                $this->coupon_obj->setId($coupon[
'pc_pk']);
 
  547                                $this->coupon_obj->setCurrentCoupon($coupon);                           
 
  549                                if (is_array($coupon[
'items']) && $coupon[
'total_objects_coupon_price'] > 0)
 
  551                                        $bonus = ($this->coupon_obj->getCouponBonus($coupon[
'total_objects_coupon_price']));    
 
  553                                        foreach ($coupon[
'items'] as $item)
 
  555                                                if (!array_key_exists($item[
'pobject_id'], $r_items))
 
  557                                                        $r_items[$item[
'pobject_id']] = $item;
 
  558                                                        $r_items[$item[
'pobject_id']][
'discount_price'] = (float) $item[
'math_price'];
 
  561                                                $ratio = (float) $item[
'math_price'] / $coupon[
'total_objects_coupon_price'];
 
  562                                                $r_items[$item[
'pobject_id']][
'discount_price'] += ($ratio * $bonus * (-1));                                                                                            
 
  577                $query = 
"DELETE FROM payment_shopping_cart " 
  579                           . 
"  (SELECT psc_id FROM payment_shopping_cart "  
  580                           . 
"   LEFT JOIN usr_session ON usr_session.session_id = payment_shopping_cart.session_id " 
  581                           . 
"   WHERE customer_id = %s AND usr_session.session_id IS NULL)";
 
  582                $ilDB->manipulateF(
$query, array(
'integer'), array(ANONYMOUS_USER_ID)); 
 
  591                        DELETE FROM payment_shopping_cart  
  592                        WHERE pobject_id = %s',
 
  593                                array(
'integer'), array($a_pobject_id));
 
  607                if($user_id == ANONYMOUS_USER_ID)
 
  613                        if($a_paymethod != 
null)
 
  616                                SELECT psc_id, ref_id, vat_rate, duration, currency, price, unlimited_duration, extension, duration_from, duration_until, description,price_type, pay_method 
  617                                FROM payment_shopping_cart psc 
  618                                LEFT JOIN payment_prices pp ON psc.price_id 
  619                                LEFT JOIN payment_objects po ON psc.pobject_id 
  620                                LEFT JOIN payment_vats pv ON po.vat_id 
  621                                WHERE customer_id = %s 
  623                                AND pay_method = %s',
 
  624                                array(
'integer', 
'integer', 
'integer'), array($user_id, 1, $a_paymethod));
 
  630                                SELECT psc_id, ref_id, vat_rate, duration, currency, price, unlimited_duration, extension, duration_from, duration_until, description, price_type, pay_method 
  631                                FROM payment_shopping_cart psc 
  632                                LEFT JOIN payment_prices pp ON psc.price_id 
  633                                LEFT JOIN payment_objects po ON psc.pobject_id 
  634                                LEFT JOIN payment_vats pv ON po.vat_id 
  635                                WHERE customer_id = %s 
  637                                array(
'integer', 
'integer'), array($user_id, 1));                               
 
getInstanceByRefId($a_ref_id, $stop_on_error=true)
get an instance of an Ilias object by reference id
static _priceExists($a_price_id, $a_pobject_id)
static _getPriceString($a_price_id)
static _getPrice($a_price_id)
static _getTotalAmount($a_price_ids)