Adds or updates an order base item in the storage.

@param MShop_Common_Item_Interface $item Order base object (sub-items are not saved)
@param boolean $fetch True if the new ID should be returned in the item
4017
public function saveItem( MShop_Common_Item_Interface $item, $fetch = true )
	{
		$iface = 'MShop_Order_Item_Base_Interface';
		if( !( $item instanceof $iface ) ) {
			throw new MShop_Order_Exception( sprintf( 'Object is not of required type "%1$s"', $iface ) );
		}

		if( !$item->isModified() ) { return; }

		$context = $this->_getContext();

		$dbm = $context->getDatabaseManager();
		$dbname = $this->_getResourceName();
		$conn = $dbm->acquire( $dbname );

		try
		{
			$id = $item->getId();

			$localeItem = $context->getLocale();
			$priceItem = $item->getPrice();

			$path = 'mshop/order/manager/base/default/item/';
			$path .= ( $id === null ) ? 'insert' : 'update';

			$stmt = $this->_getCachedStatement( $conn, $path );

			$stmt->bind(1, $localeItem->getSiteId(), MW_DB_Statement_Abstract::PARAM_INT);
			$stmt->bind(2, $item->getCustomerId());
			$stmt->bind(3, $localeItem->getSite()->getCode());
			$stmt->bind(4, $item->getLocale()->getLanguageId());
			$stmt->bind(5, $priceItem->getCurrencyId());
			$stmt->bind(6, $priceItem->getValue());
			$stmt->bind(7, $priceItem->getCosts());
			$stmt->bind(8, $priceItem->getRebate());
			$stmt->bind(9, $item->getComment() );
			$stmt->bind(10, $item->getStatus() );
			$stmt->bind(11, date( 'Y-m-d H:i:s', time()));
			$stmt->bind(12, $context->getEditor() );

			if( $id !== null ) {
				$stmt->bind(13, $id, MW_DB_Statement_Abstract::PARAM_INT);
			} else {
				$stmt->bind(13, date( 'Y-m-d H:i:s', time() ), MW_DB_Statement_Abstract::PARAM_STR );// ctime
			}

			$stmt->execute()->finish();

			if( $fetch === true )
			{
				if( $id === null ) {
					$path = 'mshop/order/manager/base/default/item/newid';
					$item->setId( $this->_newId( $conn, $context->getConfig()->get( $path, $path ) ) );
				} else {
					$item->setId( $id );
				}
			}

			$dbm->release( $conn, $dbname );
		}
		catch( Exception $e )
		{
			$dbm->release( $conn, $dbname );
			throw $e;
		}
	}
1255226
public function add ($item) {
        if (!$this->getConnection ()->getClient ()->sadd ($this->name , $item)) {
            return false;
        }
        $this->_data = null;
        $this->_count = null;
        return true;
    }
1188257
public function saveItem( MShop_Common_Item_Interface $item, $fetch = true )
	{
		$iface = 'MShop_Customer_Item_Interface';
		if( !( $item instanceof $iface ) ) {
			throw new MShop_Customer_Exception( sprintf( 'Object is not of required type "%1$s"', $iface ) );
		}

		if( !$item->isModified() ) { return; }

		$context = $this->_getContext();

		$dbm = $context->getDatabaseManager();
		$dbname = $this->_getResourceName();
		$conn = $dbm->acquire( $dbname );

		try
		{
			$id = $item->getId();
			$date = date( 'Y-m-d H:i:s' );
			$billingAddress = $item->getPaymentAddress();

			if( $id === null )
			{
				/** mshop/customer/manager/default/item/insert
				 * Inserts a new customer record into the database table
				 *
				 * Items with no ID yet (i.e. the ID is NULL) will be created in
				 * the database and the newly created ID retrieved afterwards
				 * using the "newid" SQL statement.
				 *
				 * The SQL statement must be a string suitable for being used as
				 * prepared statement. It must include question marks for binding
				 * the values from the customer item to the statement before they are
				 * sent to the database server. The number of question marks must
				 * be the same as the number of columns listed in the INSERT
				 * statement. The order of the columns must correspond to the
				 * order in the saveItems() method, so the correct values are
				 * bound to the columns.
				 *
				 * The SQL statement should conform to the ANSI standard to be
				 * compatible with most relational database systems. This also
				 * includes using double quotes for table and column names.
				 *
				 * @param string SQL statement for inserting records
				 * @since 2014.03
				 * @category Developer
				 * @see mshop/customer/manager/default/item/update
				 * @see mshop/customer/manager/default/item/newid
				 * @see mshop/customer/manager/default/item/delete
				 * @see mshop/customer/manager/default/item/search
				 * @see mshop/customer/manager/default/item/count
				 */
				$path = 'mshop/customer/manager/default/item/insert';
			}
			else
			{
				/** mshop/customer/manager/default/item/update
				 * Updates an existing customer record in the database
				 *
				 * Items which already have an ID (i.e. the ID is not NULL) will
				 * be updated in the database.
				 *
				 * The SQL statement must be a string suitable for being used as
				 * prepared statement. It must include question marks for binding
				 * the values from the customer item to the statement before they are
				 * sent to the database server. The order of the columns must
				 * correspond to the order in the saveItems() method, so the
				 * correct values are bound to the columns.
				 *
				 * The SQL statement should conform to the ANSI standard to be
				 * compatible with most relational database systems. This also
				 * includes using double quotes for table and column names.
				 *
				 * @param string SQL statement for updating records
				 * @since 2014.03
				 * @category Developer
				 * @see mshop/customer/manager/default/item/insert
				 * @see mshop/customer/manager/default/item/newid
				 * @see mshop/customer/manager/default/item/delete
				 * @see mshop/customer/manager/default/item/search
				 * @see mshop/customer/manager/default/item/count
				 */
				$path = 'mshop/customer/manager/default/item/update';
			}

			$stmt = $this->_getCachedStatement( $conn, $path );

			$stmt->bind( 1, $context->getLocale()->getSiteId(), MW_DB_Statement_Abstract::PARAM_INT );
			$stmt->bind( 2, $item->getLabel() );
			$stmt->bind( 3, $item->getCode() );
			$stmt->bind( 4, $billingAddress->getCompany() );
			$stmt->bind( 5, $billingAddress->getVatID() );
			$stmt->bind( 6, $billingAddress->getSalutation() );
			$stmt->bind( 7, $billingAddress->getTitle() );
			$stmt->bind( 8, $billingAddress->getFirstname() );
			$stmt->bind( 9, $billingAddress->getLastname() );
			$stmt->bind( 10, $billingAddress->getAddress1() );
			$stmt->bind( 11, $billingAddress->getAddress2() );
			$stmt->bind( 12, $billingAddress->getAddress3() );
			$stmt->bind( 13, $billingAddress->getPostal() );
			$stmt->bind( 14, $billingAddress->getCity() );
			$stmt->bind( 15, $billingAddress->getState() );
			$stmt->bind( 16, $billingAddress->getCountryId() );
			$stmt->bind( 17, $billingAddress->getLanguageId() );
			$stmt->bind( 18, $billingAddress->getTelephone() );
			$stmt->bind( 19, $billingAddress->getEmail() );
			$stmt->bind( 20, $billingAddress->getTelefax() );
			$stmt->bind( 21, $billingAddress->getWebsite() );
			$stmt->bind( 22, $item->getBirthday() );
			$stmt->bind( 23, $item->getStatus(), MW_DB_Statement_Abstract::PARAM_INT );
			$stmt->bind( 24, $item->getDateVerified() );
			$stmt->bind( 25, $item->getPassword() );
			$stmt->bind( 26, $date ); // Modification time
			$stmt->bind( 27, $context->getEditor() );

			if( $id !== null ) {
				$stmt->bind( 28, $id, MW_DB_Statement_Abstract::PARAM_INT );
				$item->setId( $id );
			} else {
				$stmt->bind( 28, $date ); // Creation time
			}

			$stmt->execute()->finish();

			if( $id === null && $fetch === true )
			{
				/** mshop/customer/manager/default/item/newid
				 * Retrieves the ID generated by the database when inserting a new record
				 *
				 * As soon as a new record is inserted into the database table,
				 * the database server generates a new and unique identifier for
				 * that record. This ID can be used for retrieving, updating and
				 * deleting that specific record from the table again.
				 *
				 * For MySQL:
				 *  SELECT LAST_INSERT_ID()
				 * For PostgreSQL:
				 *  SELECT currval('seq_mcus_id')
				 * For SQL Server:
				 *  SELECT SCOPE_IDENTITY()
				 * For Oracle:
				 *  SELECT "seq_mcus_id".CURRVAL FROM DUAL
				 *
				 * There's no way to retrive the new ID by a SQL statements that
				 * fits for most database servers as they implement their own
				 * specific way.
				 *
				 * @param string SQL statement for retrieving the last inserted record ID
				 * @since 2014.03
				 * @category Developer
				 * @see mshop/customer/manager/default/item/insert
				 * @see mshop/customer/manager/default/item/update
				 * @see mshop/customer/manager/default/item/delete
				 * @see mshop/customer/manager/default/item/search
				 * @see mshop/customer/manager/default/item/count
				 */
				$path = 'mshop/customer/manager/default/item/newid';
				$item->setId( $this->_newId( $conn, $context->getConfig()->get( $path, $path ) ) );
			}

			$dbm->release( $conn, $dbname );
		}
		catch( Exception $e )
		{
			$dbm->release( $conn, $dbname );
			throw $e;
		}
	}
218526
public function addItem(Item $item)
    {
        if (!$this->items->contains($item)) {
            $this->items->add($item);
            $item->addLabel($this);
        }

        return $this;
    }
179584
public function addItem(Item $item)
    {
        if (!$this->items->contains($item)) {
            $this->items->add($item);
            $item->setCountry($this);
        }

        return $this;
    }
200474
public function saveItem( MShop_Common_Item_Interface $item, $fetch = true )
	{
		$iface = 'MShop_Order_Item_Base_Address_Interface';
		if( !( $item instanceof $iface ) ) {
			throw new MShop_Order_Exception( sprintf( 'Object is not of required type "%1$s"', $iface ) );
		}

		if( !$item->isModified() ) { return; }

		$context = $this->_getContext();

		$dbm = $context->getDatabaseManager();
		$dbname = $this->_getResourceName();
		$conn = $dbm->acquire( $dbname );

		try
		{
			$id = $item->getId();

			$path = 'mshop/order/manager/base/address/default/item/';
			$path .= ( $id === null ) ? 'insert' : 'update';

			$stmt = $this->_getCachedStatement( $conn, $path );
			$stmt->bind( 1, $item->getBaseId(), MW_DB_Statement_Abstract::PARAM_INT );
			$stmt->bind( 2, $context->getLocale()->getSiteId(), MW_DB_Statement_Abstract::PARAM_INT );
			$stmt->bind( 3, $item->getAddressId(), MW_DB_Statement_Abstract::PARAM_STR );
			$stmt->bind( 4, $item->getType(), MW_DB_Statement_Abstract::PARAM_STR );
			$stmt->bind( 5, $item->getCompany(), MW_DB_Statement_Abstract::PARAM_STR );
			$stmt->bind( 6, $item->getVatID(), MW_DB_Statement_Abstract::PARAM_STR );
			$stmt->bind( 7, $item->getSalutation(), MW_DB_Statement_Abstract::PARAM_STR );
			$stmt->bind( 8, $item->getTitle(), MW_DB_Statement_Abstract::PARAM_STR );
			$stmt->bind( 9, $item->getFirstname(), MW_DB_Statement_Abstract::PARAM_STR );
			$stmt->bind( 10, $item->getLastname(), MW_DB_Statement_Abstract::PARAM_STR );
			$stmt->bind( 11, $item->getAddress1(), MW_DB_Statement_Abstract::PARAM_STR );
			$stmt->bind( 12, $item->getAddress2(), MW_DB_Statement_Abstract::PARAM_STR );
			$stmt->bind( 13, $item->getAddress3(), MW_DB_Statement_Abstract::PARAM_STR );
			$stmt->bind( 14, $item->getPostal(), MW_DB_Statement_Abstract::PARAM_STR );
			$stmt->bind( 15, $item->getCity(), MW_DB_Statement_Abstract::PARAM_STR );
			$stmt->bind( 16, $item->getState(), MW_DB_Statement_Abstract::PARAM_STR );
			$stmt->bind( 17, $item->getCountryId(), MW_DB_Statement_Abstract::PARAM_STR );
			$stmt->bind( 18, $item->getLanguageId(), MW_DB_Statement_Abstract::PARAM_STR );
			$stmt->bind( 19, $item->getTelephone(), MW_DB_Statement_Abstract::PARAM_STR );
			$stmt->bind( 20, $item->getEmail(), MW_DB_Statement_Abstract::PARAM_STR );
			$stmt->bind( 21, $item->getTelefax(), MW_DB_Statement_Abstract::PARAM_STR );
			$stmt->bind( 22, $item->getWebsite(), MW_DB_Statement_Abstract::PARAM_STR );
			$stmt->bind( 23, $item->getFlag(), MW_DB_Statement_Abstract::PARAM_INT );
			$stmt->bind( 24, date( 'Y-m-d H:i:s' ), MW_DB_Statement_Abstract::PARAM_STR );
			$stmt->bind( 25, $context->getEditor() );

			if ( $id !== null ) {
				$stmt->bind( 26, $id, MW_DB_Statement_Abstract::PARAM_INT );
			} else {
				$stmt->bind( 26, date( 'Y-m-d H:i:s' ), MW_DB_Statement_Abstract::PARAM_STR ); // ctime
			}

			$stmt->execute()->finish();


			if( $fetch === true )
			{
				if( $id === null ) {
					$path = 'mshop/order/manager/base/address/default/item/newid';
					$item->setId( $this->_newId( $conn, $context->getConfig()->get( $path, $path ) ) );
				} else {
					$item->setId( $id );
				}
			}

			$dbm->release( $conn, $dbname );
		}
		catch( Exception $e )
		{
			$dbm->release( $conn, $dbname );
			throw $e;
		}
	}
1267010
protected function setFetchOptions(&$fetch, $limit, $order, $offset)
    {
        if (!is_null($limit)) {
            $fetch->limit($limit);
        }
        if (!is_null($offset)) {
            $fetch->offset($offset);
        }
        if (!is_null($order)) {
            $fetch->clearOrderBy($order);
            if (is_array($order)) {
                $fetch->order($order[0], $order[1]);
            } else {
                $fetch->order($order);
            }
        }
        return $fetch;
    }
57263
public function saveItem( MShop_Common_Item_Interface $item, $fetch = true )
	{
		$manager = $this->_getManager();

		$manager->saveItem( $item, $fetch );
		$new = $manager->getItem( $item->getId() );

		$this->_getContext()->getLogger()->log( json_encode( $new->toArray() ), MW_Logger_Abstract::NOTICE, 'changelog' );
	}
506976
public function insertItem( MShop_Catalog_Item_Interface $item, $parentId = null, $refId = null )
	{
		if ( $parentId !== null ) {

			$parent = $this->_getManager()->getItem( $parentId );
			$siteId = $this->_getContext()->getLocale()->getSiteId();

			if ( $parent->getSiteId() != $siteId ) {
				throw new MShop_Exception( sprintf( 'Site can not be inserted. Site ID of site differs from site ID of parent site.' ) );
			}
		}

		parent::insertItem( $item, $parentId, $refId );
	}
213006
public function onAdd(OrderItemEvent $event)
    {
        $order = $event->getOrder();
        $item  = $event->getItem();

        $order->addItem($item);
    }
1327348
public function postLoad(Item $item, LifecycleEventArgs $event)
    {
        $type = $this->itemDefinitions->getConvertedType($item->getMimeType());
        $definition = $this->itemDefinitions->get($type);
        $repository = $event
            ->getEntityManager()
            ->getRepository($definition->getEntityClass());

        /** @var \UJM\ExoBundle\Entity\ItemType\AbstractItem $typeEntity */
        $typeEntity = $repository->findOneBy([
            'question' => $item,
        ]);

        if (!empty($typeEntity)) {
            $item->setInteraction($typeEntity);
        }
    }
931078
protected function updateCartQuantityCheckout($sku, array $item)
    {
        if (isset($this->data_cart['items'][$sku]['cart_id'])) {
            $cart_id = $this->data_cart['items'][$sku]['cart_id'];
            $this->cart->update($cart_id, array('quantity' => $item['quantity']));
        }
    }
1031571
public function saveItem( MShop_Common_Item_Interface $item, $fetch = true )
	{
		$iface = 'MShop_Locale_Item_Site_Interface';
		if ( !( $item instanceof $iface ) ) {
			throw new MShop_Locale_Exception(sprintf('Object is not of required type "%1$s"', $iface));
		}

		if( $item->getId() === null ) {
			throw new MShop_Locale_Exception( sprintf( 'Newly created site can not be saved using method "saveItem()". Try using method "insertItem()" instead.' ) );
		}

		if( !$item->isModified() ) { return	; }


		$context = $this->_getContext();

		$dbm = $context->getDatabaseManager();
		$dbname = $this->_getResourceName();
		$conn = $dbm->acquire( $dbname );

		try
		{
			$id = $item->getId();

			$path = 'mshop/locale/manager/site/default/item/update';
			$stmt = $this->_getCachedStatement( $conn, $path );

			$stmt->bind(1, $item->getCode(), MW_DB_Statement_Abstract::PARAM_STR);
			$stmt->bind(2, $item->getLabel(), MW_DB_Statement_Abstract::PARAM_STR);
			$stmt->bind(3, json_encode($item->getConfig()), MW_DB_Statement_Abstract::PARAM_STR);
			$stmt->bind(4, $item->getStatus(), MW_DB_Statement_Abstract::PARAM_INT);
			$stmt->bind(5, $context->getEditor() );
			$stmt->bind(6, date( 'Y-m-d H:i:s', time() ) ); // mtime
			$stmt->bind(7, $id, MW_DB_Statement_Abstract::PARAM_INT);

			$stmt->execute()->finish();
			$item->setId( $id ); // set Modified false

			$dbm->release( $conn, $dbname );
		}
		catch ( Exception $e )
		{
			$dbm->release( $conn, $dbname );
			throw $e;
		}
	}
889855
protected function _storeServices( MShop_Order_Item_Base_Interface $basket )
	{
		$manager = $this->getSubManager( 'service' );
		$attrManager = $manager->getSubManager( 'attribute' );

		foreach( $basket->getServices() as $type => $item )
		{
			$item->setBaseId( $basket->getId() );
			$item->setType( $type );
			$manager->saveItem( $item );

			foreach( $item->getAttributes() as $attribute )
			{
				$attribute->setServiceId( $item->getId() );
				$attrManager->saveItem( $attribute );
			}
		}
	}
718351
private function order($position, $item)
    {
        $category = $this->categoryRepository->find($item['id']);
        $this->savePosition($category, $position);
        $this->makeItemChildOf($category, null);

        if ($this->hasChildren($item)) {
            $this->handleChildrenForParent($category, $item['children']);
        }
    }
684841
public function saveItem( MShop_Common_Item_Interface $item, $fetch = true )
	{
		$iface = 'MShop_Order_Item_Base_Service_Interface';
		if( !( $item instanceof $iface ) ) {
			throw new MShop_Order_Exception( sprintf( 'Object is not of required type "%1$s"', $iface ) );
		}

		if( !$item->isModified() ) { return; }

		$context = $this->_getContext();

		$dbm = $context->getDatabaseManager();
		$dbname = $this->_getResourceName();
		$conn = $dbm->acquire( $dbname );

		try
		{
			$id = $item->getId();
			$price = $item->getPrice();

			$path = 'mshop/order/manager/base/service/default/item/';
			$path .= ( $id === null ) ? 'insert' : 'update';

			$stmt = $this->_getCachedStatement( $conn, $path );
			$stmt->bind(1, $item->getBaseId(), MW_DB_Statement_Abstract::PARAM_INT);
			$stmt->bind(2, $context->getLocale()->getSiteId(), MW_DB_Statement_Abstract::PARAM_INT);
			$stmt->bind(3, $item->getServiceId(), MW_DB_Statement_Abstract::PARAM_STR);
			$stmt->bind(4, $item->getType(), MW_DB_Statement_Abstract::PARAM_STR);
			$stmt->bind(5, $item->getCode(), MW_DB_Statement_Abstract::PARAM_STR);
			$stmt->bind(6, $item->getName(), MW_DB_Statement_Abstract::PARAM_STR);
			$stmt->bind(7, $item->getMediaUrl(), MW_DB_Statement_Abstract::PARAM_STR);
			$stmt->bind(8, $price->getValue(), MW_DB_Statement_Abstract::PARAM_STR);
			$stmt->bind(9, $price->getCosts(), MW_DB_Statement_Abstract::PARAM_STR);
			$stmt->bind(10, $price->getRebate(), MW_DB_Statement_Abstract::PARAM_STR);
			$stmt->bind(11, $price->getTaxRate(), MW_DB_Statement_Abstract::PARAM_STR);
			$stmt->bind(12, date('Y-m-d H:i:s', time()), MW_DB_Statement_Abstract::PARAM_STR);
			$stmt->bind(13, $context->getEditor() );

			if ( $id !== null ) {
				$stmt->bind(14, $id, MW_DB_Statement_Abstract::PARAM_INT);
			} else {
				$stmt->bind(14, date( 'Y-m-d H:i:s', time() ), MW_DB_Statement_Abstract::PARAM_STR );// ctime
			}

			$stmt->execute()->finish();

			if( $fetch === true )
			{
				if( $id === null ) {
					$path = 'mshop/order/manager/base/service/default/item/newid';
					$item->setId( $this->_newId( $conn, $context->getConfig()->get( $path, $path ) ) );
				} else {
					$item->setId($id);
				}
			}

			$dbm->release( $conn, $dbname );
		}
		catch ( Exception $e )
		{
			$dbm->release( $conn, $dbname );
			throw $e;
		}
	}
1092739
public function cancel( MShop_Order_Item_Interface $order )
	{
		$orderManager = MShop_Factory::createManager( $this->_getContext(), 'order' );

		if( ( $tid = $this->_getOrderServiceItem( $order->getBaseId() )->getAttribute('TRANSACTIONID') ) === null )
		{
			$msg = sprintf( 'PayPal Express: Payment transaction ID for order ID "%1$s" not available', $order->getId() );
			throw new MShop_Service_Exception( $msg );
		}

		$values = $this->_getAuthParameter();
		$values['METHOD'] = 'DoVoid';
		$values['AUTHORIZATIONID'] = $tid;

		$urlQuery = http_build_query( $values, '', '&' );
		$response = $this->_getCommunication()->transmit( $this->_apiendpoint, 'POST', $urlQuery );
		$this->_checkResponse( $order->getId(), $response, __METHOD__ );

		$order->setPaymentStatus( MShop_Order_Item_Abstract::PAY_CANCELED );
		$orderManager->saveItem( $order );
	}