function items($asObject = true, $alternativeProductionID = false, $offset = false, $limit = false) { $productItems = eZPersistentObject::fetchObjectList(eZProductCollectionItem::definition(), null, array('productcollection_id' => $alternativeProductionID === false ? $this->ProductCollectionID : $alternativeProductionID), null, array('offset' => $offset, 'length' => $limit), $asObject); // $discountPercent = $this->discountPercent(); $addedProducts = array(); foreach ($productItems as $productItem) { $discountPercent = 0.0; $isVATIncluded = true; $id = $productItem->attribute('id'); $contentObject = $productItem->attribute('contentobject'); //if the node is put into trash/delete, don't fetch it if ($contentObject !== null && $contentObject->attribute('main_node_id') !== null) { $vatValue = $productItem->attribute('vat_value'); $count = $productItem->attribute('item_count'); $discountPercent = $productItem->attribute('discount'); $nodeID = $contentObject->attribute('main_node_id'); $objectName = $contentObject->attribute('name'); $isVATIncluded = $productItem->attribute('is_vat_inc'); $price = $productItem->attribute('price'); if ($isVATIncluded) { $priceExVAT = $price / (100 + $vatValue) * 100; $priceIncVAT = $price; } else { $priceExVAT = $price; $priceIncVAT = $price * (100 + $vatValue) / 100; } $totalPriceExVAT = $count * $priceExVAT * (100 - $discountPercent) / 100; $totalPriceIncVAT = $count * $priceIncVAT * (100 - $discountPercent) / 100; $addedProduct = array("id" => $id, "vat_value" => $vatValue, "item_count" => $count, "node_id" => $nodeID, "object_name" => $objectName, "price_ex_vat" => $priceExVAT, "price_inc_vat" => $priceIncVAT, "discount_percent" => $discountPercent, "total_price_ex_vat" => $totalPriceExVAT, "total_price_inc_vat" => $totalPriceIncVAT, 'item_object' => $productItem); $addedProducts[] = $addedProduct; } } return $addedProducts; }
static function fetchList($conditions = null, $asObjects = true, $offset = false, $limit = false) { $limitation = null; if ($offset !== false or $limit !== false) { $limitation = array('offset' => $offset, 'length' => $limit); } return eZPersistentObject::fetchObjectList(eZProductCollectionItem::definition(), null, $conditions, null, $limitation, $asObjects); }
/** * Fetch basket items (ordered by object id by default) * * @param bool $asObject * @param array|null $sorts Array with sort data sent directly to {@link eZPersistentObject::fetchObjectList()} */ function items($asObject = true, $sorts = array('contentobject_id' => 'desc')) { $productItems = eZPersistentObject::fetchObjectList(eZProductCollectionItem::definition(), null, array('productcollection_id' => $this->ProductCollectionID), $sorts, null, $asObject); $addedProducts = array(); foreach ($productItems as $productItem) { $discountPercent = 0.0; $isVATIncluded = true; $id = $productItem->attribute('id'); $contentObject = $productItem->attribute('contentobject'); if ($contentObject !== null) { $vatValue = $productItem->attribute('vat_value'); // If VAT is unknown yet then we use zero VAT percentage for price calculation. $realVatValue = $vatValue; if ($vatValue == -1) { $vatValue = 0; } $count = $productItem->attribute('item_count'); $discountPercent = $productItem->attribute('discount'); $nodeID = $contentObject->attribute('main_node_id'); $objectName = $contentObject->name(false, $contentObject->currentLanguage()); $isVATIncluded = $productItem->attribute('is_vat_inc'); $price = $productItem->attribute('price'); if ($isVATIncluded) { $priceExVAT = $price / (100 + $vatValue) * 100; $priceIncVAT = $price; $totalPriceExVAT = $count * $priceExVAT * (100 - $discountPercent) / 100; $totalPriceIncVAT = $count * $priceIncVAT * (100 - $discountPercent) / 100; } else { $priceExVAT = $price; $priceIncVAT = $price * (100 + $vatValue) / 100; $totalPriceExVAT = $count * $priceExVAT * (100 - $discountPercent) / 100; $totalPriceIncVAT = $count * $priceIncVAT * (100 - $discountPercent) / 100; } $addedProduct = array("id" => $id, "vat_value" => $realVatValue, "item_count" => $count, "node_id" => $nodeID, "object_name" => $objectName, "price_ex_vat" => $priceExVAT, "price_inc_vat" => $priceIncVAT, "discount_percent" => $discountPercent, "total_price_ex_vat" => $totalPriceExVAT, "total_price_inc_vat" => $totalPriceIncVAT, 'item_object' => $productItem); $addedProducts[] = $addedProduct; } } return $addedProducts; }
static function verify($id) { $invalidItemArray = array(); $collection = eZProductCollection::fetch($id); if (!is_object($collection)) { return $invalidItemArray; } $currency = $collection->attribute('currency_code'); $productItemList = eZPersistentObject::fetchObjectList(eZProductCollectionItem::definition(), null, array("productcollection_id" => $id), null, null, true); $isValid = true; foreach ($productItemList as $productItem) { if (!$productItem->verify($currency)) { $invalidItemArray[] = $productItem; $isValid = false; } } if (!$isValid) { return $invalidItemArray; } return $isValid; }
/** * Fetch product items that bellongs ot the order * * @param bool $asObject * @param array|null $sorts Array with sort data sent directly to {@link eZPersistentObject::fetchObjectList()} */ function productItems($asObject = true, array $sorts = null) { $productItems = eZPersistentObject::fetchObjectList(eZProductCollectionItem::definition(), null, array('productcollection_id' => $this->ProductCollectionID), $sorts, null, $asObject); $addedProducts = array(); foreach ($productItems as $productItem) { $contentObject = $productItem->attribute('contentobject'); if ($this->IgnoreVAT == true) { $vatValue = 0; } else { $vatValue = $productItem->attribute('vat_value'); } if ($contentObject) { $nodeID = $contentObject->attribute('main_node_id'); $objectName = $contentObject->attribute('name'); } else { $nodeID = false; $objectName = $productItem->attribute('name'); } $price = $productItem->attribute('price'); if ($productItem->attribute('is_vat_inc')) { $priceExVAT = $price / (100 + $vatValue) * 100; $priceIncVAT = $price; } else { $priceExVAT = $price; $priceIncVAT = $price * (100 + $vatValue) / 100; } $count = $productItem->attribute('item_count'); $discountPercent = $productItem->attribute('discount'); $realPricePercent = (100 - $discountPercent) / 100; $addedProducts[] = array("id" => $productItem->attribute('id'), "vat_value" => $vatValue, "item_count" => $count, "node_id" => $nodeID, "object_name" => $objectName, "price_ex_vat" => $priceExVAT, "price_inc_vat" => $priceIncVAT, "discount_percent" => $discountPercent, "total_price_ex_vat" => round($count * $priceExVAT * $realPricePercent, 2), "total_price_inc_vat" => round($count * $priceIncVAT * $realPricePercent, 2), 'item_object' => $productItem); } return $addedProducts; }
/** * Deletes the current object, all versions and translations, and corresponding tree nodes from the database * * Transaction unsafe. If you call several transaction unsafe methods you must enclose * the calls within a db transaction; thus within db->begin and db->commit. */ function purge() { $delID = $this->ID; // Who deletes which content should be logged. eZAudit::writeAudit( 'content-delete', array( 'Object ID' => $delID, 'Content Name' => $this->attribute( 'name' ), 'Comment' => 'Purged the current object: eZContentObject::purge()' ) ); $db = eZDB::instance(); $db->begin(); $attrOffset = 0; $attrLimit = 20; while ( $contentobjectAttributes = $this->allContentObjectAttributes( $delID, true, array( 'limit' => $attrLimit, 'offset' => $attrOffset ) ) ) { foreach ( $contentobjectAttributes as $contentobjectAttribute ) { $dataType = $contentobjectAttribute->dataType(); if ( !$dataType ) continue; $dataType->deleteStoredObjectAttribute( $contentobjectAttribute ); } $attrOffset += $attrLimit; } eZInformationCollection::removeContentObject( $delID ); eZContentObjectTrashNode::purgeForObject( $delID ); $db->query( "DELETE FROM ezcontentobject_tree WHERE contentobject_id='$delID'" ); $db->query( "DELETE FROM ezcontentobject_attribute WHERE contentobject_id='$delID'" ); $db->query( "DELETE FROM ezcontentobject_version WHERE contentobject_id='$delID'" ); $db->query( "DELETE FROM ezcontentobject_name WHERE contentobject_id='$delID'" ); $db->query( "DELETE FROM ezcobj_state_link WHERE contentobject_id=$delID" ); $db->query( "DELETE FROM ezcontentobject WHERE id='$delID'" ); $db->query( "DELETE FROM eznode_assignment WHERE contentobject_id = '$delID'" ); $db->query( "DELETE FROM ezuser_role WHERE contentobject_id = '$delID'" ); $db->query( "DELETE FROM ezuser_discountrule WHERE contentobject_id = '$delID'" ); eZContentObject::fixReverseRelations( $delID, 'remove' ); eZSearch::removeObjectById( $delID ); // Check if deleted object is in basket/wishlist $sql = 'SELECT DISTINCT ezproductcollection_item.productcollection_id FROM ezbasket, ezwishlist, ezproductcollection_item WHERE ( ezproductcollection_item.productcollection_id=ezbasket.productcollection_id OR ezproductcollection_item.productcollection_id=ezwishlist.productcollection_id ) AND ezproductcollection_item.contentobject_id=' . $delID; $rows = $db->arrayQuery( $sql ); if ( count( $rows ) > 0 ) { $countElements = 50; $deletedArray = array(); // Create array of productCollectionID will be removed from ezwishlist and ezproductcollection_item foreach ( $rows as $row ) { $deletedArray[] = $row['productcollection_id']; } // Split $deletedArray into several arrays with $countElements values $splitted = array_chunk( $deletedArray, $countElements ); // Remove eZProductCollectionItem and eZWishList foreach ( $splitted as $value ) { eZPersistentObject::removeObject( eZProductCollectionItem::definition(), array( 'productcollection_id' => array( $value, '' ) ) ); eZPersistentObject::removeObject( eZWishList::definition(), array( 'productcollection_id' => array( $value, '' ) ) ); } } $db->query( 'UPDATE ezproductcollection_item SET contentobject_id = 0 WHERE contentobject_id = ' . $delID ); // Cleanup relations in two steps to avoid locking table for to long $db->query( "DELETE FROM ezcontentobject_link WHERE from_contentobject_id = '$delID'" ); $db->query( "DELETE FROM ezcontentobject_link WHERE to_contentobject_id = '$delID'" ); // Cleanup properties: LastVisit, Creator, Owner $db->query( "DELETE FROM ezuservisit WHERE user_id = '$delID'" ); $db->query( "UPDATE ezcontentobject_version SET creator_id = 0 WHERE creator_id = '$delID'" ); $db->query( "UPDATE ezcontentobject SET owner_id = 0 WHERE owner_id = '$delID'" ); if ( isset( $GLOBALS["eZWorkflowTypeObjects"] ) and is_array( $GLOBALS["eZWorkflowTypeObjects"] ) ) { $registeredTypes =& $GLOBALS["eZWorkflowTypeObjects"]; } else { $registeredTypes = eZWorkflowType::fetchRegisteredTypes(); } // Cleanup ezworkflow_event etc... foreach ( array_keys( $registeredTypes ) as $registeredTypeKey ) { $registeredType = $registeredTypes[$registeredTypeKey]; $registeredType->cleanupAfterRemoving( array( 'DeleteContentObject' => $delID ) ); } $db->commit(); }