/**
  * Add to shopping cart
  *
  * @param array $itemInfo
  *      integer object_id - required
  *      integer module - required
  *      string title - required
  *      string|integer slug - optional
  *      float cost - required
  *      integer|float discount - optional
  *      integer count - required
  *      string extra_options - optional (serialized array)
  * @return integer|string
  */
 public function addToShoppingCart(array $itemInfo)
 {
     try {
         $this->adapter->getDriver()->getConnection()->beginTransaction();
         $insert = $this->insert()->into('payment_shopping_cart')->values(array_merge($itemInfo, ['shopping_cart_id' => $this->getShoppingCartId(), 'date' => time(), 'language' => $this->getCurrentLanguage()]));
         $statement = $this->prepareStatementForSqlObject($insert);
         $statement->execute();
         $insertId = $this->adapter->getDriver()->getLastGeneratedValue();
         $this->adapter->getDriver()->getConnection()->commit();
     } catch (Exception $e) {
         $this->adapter->getDriver()->getConnection()->rollback();
         ApplicationErrorLogger::log($e);
         return $e->getMessage();
     }
     // fire the add item to shopping cart event
     PaymentEvent::fireAddItemToShoppingCartEvent($insertId);
     return $insertId;
 }