Skip to content

Commit

Permalink
Merge branch 'master' of git://github.com/Sylius/SyliusCartBundle
Browse files Browse the repository at this point in the history
Conflicts:
	spec/Sylius/Bundle/CartBundle/Model/Cart.php
  • Loading branch information
mykehsd committed Mar 27, 2013
2 parents 0dcc80b + d8450c5 commit ab3b1d3
Show file tree
Hide file tree
Showing 37 changed files with 472 additions and 210 deletions.
10 changes: 7 additions & 3 deletions .travis.yml
Expand Up @@ -5,10 +5,14 @@ php:
- 5.4
- 5.5

before_script: composer install --dev --prefer-source
matrix:
allow_failure:
- php: 5.5

before_script: composer install --dev --prefer-source > /dev/null

script: bin/phpspec run -fpretty --verbose

notifications:
irc: "irc.freenode.org#sylius-dev"
email: "travis-ci@sylius.org"
email: "travis-ci@sylius.org"
irc: "irc.freenode.org#sylius-dev"
38 changes: 20 additions & 18 deletions CHANGELOG.md
@@ -1,29 +1,31 @@
CHANGELOG
=========

### v0.3.0 (2013-xx-xx)
### v0.3.0

* Remove `CartOperator` & `CartOperatorInterface`,
* Remove `CartOperator` & `CartOperatorInterface`.
* Introduce `SyliusCartEvents` & event listeners.
* Removed the ``sylius_cart`` prefix from services and models, used ``sylius`` instead.
* All money values are represented as integers.

### v0.2.0 (2012-12-27)
### v0.2.0

* Introduce default cart entity,
* Use Doctrine RTEL to map interfaces instead of real entities,
* Rename `CartController::showAction` to `CartController::summaryAction`,
* Renamed `SyliusCartBundle:Cart:show.html` template to ``SyliusCartBundle:Cart:summary.html`,
* Introduce default cart entity.
* Use Doctrine RTEL to map interfaces instead of real entities.
* Rename `CartController::showAction` to `CartController::summaryAction`.
* Renamed `SyliusCartBundle:Cart:show.html` template to ``SyliusCartBundle:Cart:summary.html`.
* Add base controller.

### v0.1.0 (2012-12-05)
### v0.1.0

* First development release,
* Introduced ItemResolvingException,
* More complete set of [phpspec2](http://phpspec.net) examples,
* Changed configuration schema,
* Bundle now uses [SyliusResourceBundle](http://github.com/Sylius/SyliusResourceBundle) for model persistence,
* Models now depend on Doctrine collections,
* New controller,
* Renamed **Item** to **CartItem**,
* Renamed **ItemType** to **CartItemType**,
* Introduce specs with [phpspec2](http://phpspec.net),
* First development release.
* Introduced ItemResolvingException.
* More complete set of [phpspec2](http://phpspec.net) examples.
* Changed configuration schema.
* Bundle now uses [SyliusResourceBundle](http://github.com/Sylius/SyliusResourceBundle) for model persistence.
* Models now depend on Doctrine collections.
* New controller.
* Renamed **Item** to **CartItem**.
* Renamed **ItemType** to **CartItemType**.
* Introduce specs with [phpspec2](http://phpspec.net).
* Renamed **CartFormType** to **CartType** to be consistent.
19 changes: 10 additions & 9 deletions Controller/CartController.php
Expand Up @@ -64,14 +64,14 @@ public function saveAction(Request $request)
$form = $this->createForm('sylius_cart', $cart);

if ($form->bind($request)->isValid()) {
/* @var $dispatcher \Symfony\Component\EventDispatcher\EventDispatcherInterface */
$dispatcher = $this->container->get('event_dispatcher');

$event = new CartEvent($cart);
$event->isFresh(true);

$dispatcher->dispatch(SyliusCartEvents::CART_SAVE_INITIALIZE, $event);
$dispatcher->dispatch(SyliusCartEvents::CART_SAVE_COMPLETED, new FlashEvent());
// Update models
$this->dispatchEvent(SyliusCartEvents::CART_SAVE_INITIALIZE, $event);

// Write flash message
$this->dispatchEvent(SyliusCartEvents::CART_SAVE_COMPLETED, new FlashEvent());
}

return $this->renderResponse('summary.html', array(
Expand All @@ -88,10 +88,11 @@ public function saveAction(Request $request)
*/
public function clearAction()
{
/* @var $dispatcher \Symfony\Component\EventDispatcher\EventDispatcherInterface */
$dispatcher = $this->container->get('event_dispatcher');
$dispatcher->dispatch(SyliusCartEvents::CART_CLEAR_INITIALIZE, new CartEvent($this->getCurrentCart()));
$dispatcher->dispatch(SyliusCartEvents::CART_CLEAR_COMPLETED, new FlashEvent());
// Update models
$this->dispatchEvent(SyliusCartEvents::CART_CLEAR_INITIALIZE, new CartEvent($this->getCurrentCart()));

// Write flash message
$this->dispatchEvent(SyliusCartEvents::CART_CLEAR_COMPLETED, new FlashEvent());

return $this->redirectToCartSummary();
}
Expand Down
29 changes: 15 additions & 14 deletions Controller/CartItemController.php
Expand Up @@ -52,13 +52,11 @@ public function addAction(Request $request)
$cart = $this->getCurrentCart();
$emptyItem = $this->createNew();

/* @var $dispatcher \Symfony\Component\EventDispatcher\EventDispatcherInterface */
$dispatcher = $this->container->get('event_dispatcher');

try {
$item = $this->getResolver()->resolve($emptyItem, $request);
} catch (ItemResolvingException $exception) {
$dispatcher->dispatch(SyliusCartEvents::ITEM_ADD_ERROR, new FlashEvent($exception->getMessage()));
// Write flash message
$this->dispatchEvent(SyliusCartEvents::ITEM_ADD_ERROR, new FlashEvent($exception->getMessage()));

return $this->redirectToCartSummary();
}
Expand All @@ -67,10 +65,12 @@ public function addAction(Request $request)
$event->isFresh(true);
$event->isValid(false);

$dispatcher->dispatch(SyliusCartEvents::ITEM_ADD_INITIALIZE, $event);
$dispatcher->dispatch(SyliusCartEvents::CART_SAVE_INITIALIZE, $event);
// Update models
$this->dispatchEvent(SyliusCartEvents::ITEM_ADD_INITIALIZE, $event);
$this->dispatchEvent(SyliusCartEvents::CART_SAVE_INITIALIZE, $event);

$dispatcher->dispatch(SyliusCartEvents::ITEM_ADD_COMPLETED, new FlashEvent());
// Write flash message
$this->dispatchEvent(SyliusCartEvents::ITEM_ADD_COMPLETED, new FlashEvent());

return $this->redirectToCartSummary();
}
Expand All @@ -91,21 +91,22 @@ public function removeAction($id)
$cart = $this->getCurrentCart();
$item = $this->getRepository()->find($id);

/* @var $dispatcher \Symfony\Component\EventDispatcher\EventDispatcherInterface */
$dispatcher = $this->container->get('event_dispatcher');

if (!$item || false === $cart->hasItem($item)) {
$dispatcher->dispatch(SyliusCartEvents::ITEM_REMOVE_ERROR, new FlashEvent());
// Write flash message
$this->dispatchEvent(SyliusCartEvents::ITEM_REMOVE_ERROR, new FlashEvent());

return $this->redirectToCartSummary();
}

$event = new CartItemEvent($cart, $item);
$event->isFresh(true);

$dispatcher->dispatch(SyliusCartEvents::ITEM_REMOVE_INITIALIZE, $event);
$dispatcher->dispatch(SyliusCartEvents::CART_SAVE_INITIALIZE, $event);
$dispatcher->dispatch(SyliusCartEvents::ITEM_REMOVE_COMPLETED, new FlashEvent());
// Update models
$this->dispatchEvent(SyliusCartEvents::ITEM_REMOVE_INITIALIZE, $event);
$this->dispatchEvent(SyliusCartEvents::CART_SAVE_INITIALIZE, $event);

// Write flash message
$this->dispatchEvent(SyliusCartEvents::ITEM_REMOVE_COMPLETED, new FlashEvent());

return $this->redirectToCartSummary();
}
Expand Down
6 changes: 4 additions & 2 deletions Controller/Controller.php
Expand Up @@ -60,7 +60,9 @@ protected function getCurrentCart()
*/
protected function getProvider()
{
return $this->get('sylius_cart.provider');

return $this->container->get('sylius.cart_provider');

}

/**
Expand All @@ -71,6 +73,6 @@ protected function getProvider()
*/
protected function getResolver()
{
return $this->get('sylius_cart.resolver');
return $this->container->get('sylius.cart_resolver');
}
}
4 changes: 2 additions & 2 deletions DependencyInjection/Configuration.php
Expand Up @@ -39,9 +39,9 @@ public function getConfigTreeBuilder()
->children()
->scalarNode('driver')->isRequired()->cannotBeEmpty()->end()
->scalarNode('engine')->defaultValue('twig')->end()
->scalarNode('provider')->defaultValue('sylius_cart.provider.default')->end()
->scalarNode('provider')->defaultValue('sylius.cart_provider.default')->end()
->scalarNode('resolver')->isRequired()->cannotBeEmpty()->end()
->scalarNode('storage')->defaultValue('sylius_cart.storage.session')->end()
->scalarNode('storage')->defaultValue('sylius.cart_storage.session')->end()
->end()
;

Expand Down
27 changes: 14 additions & 13 deletions DependencyInjection/SyliusCartExtension.php
Expand Up @@ -47,38 +47,39 @@ public function load(array $config, ContainerBuilder $container)
if ('twig' !== $engine) {
throw new \InvalidArgumentException(sprintf('Templating engine "%s" is unsupported for by SyliusCartBundle', $config['engine']));
}

$container->setParameter('sylius_cart.driver', $driver);

$loader->load(sprintf('driver/%s.xml', $driver));
$loader->load(sprintf('engine/%s.xml', $engine));

$container->setParameter('sylius_cart.driver', $driver);
$container->setParameter('sylius_cart.engine', $engine);
$container->setParameter('sylius.engine', $engine);

$container->setAlias('sylius_cart.provider', $config['provider']);
$container->setAlias('sylius_cart.resolver', $config['resolver']);
$container->setAlias('sylius_cart.storage', $config['storage']);
$container->setAlias('sylius.cart_provider', $config['provider']);
$container->setAlias('sylius.cart_resolver', $config['resolver']);
$container->setAlias('sylius.cart_storage', $config['storage']);

$classes = $config['classes'];

$cartClasses = $classes['cart'];
$cartItemClasses = $classes['item'];

$container->setParameter('sylius_cart.controller.cart.class', $cartClasses['controller']);
$container->setParameter('sylius_cart.form.type.cart.class', $cartClasses['form']);
$container->setParameter('sylius.controller.cart.class', $cartClasses['controller']);
$container->setParameter('sylius.form.type.cart.class', $cartClasses['form']);

if (isset($cartClasses['model'])) {
$container->setParameter('sylius_cart.model.cart.class', $cartClasses['model']);
$container->setParameter('sylius.model.cart.class', $cartClasses['model']);
}
if (isset($cartClasses['repository'])) {
$container->setParameter('sylius_cart.repository.cart.class', $cartClasses['repository']);
$container->setParameter('sylius.repository.cart.class', $cartClasses['repository']);
}

$container->setParameter('sylius_cart.model.item.class', $cartItemClasses['model']);
$container->setParameter('sylius_cart.controller.item.class', $cartItemClasses['controller']);
$container->setParameter('sylius_cart.form.type.item.class', $cartItemClasses['form']);
$container->setParameter('sylius.model.cart_item.class', $cartItemClasses['model']);
$container->setParameter('sylius.controller.cart_item.class', $cartItemClasses['controller']);
$container->setParameter('sylius.form.type.cart_item.class', $cartItemClasses['form']);

if (isset($cartItemClasses['repository'])) {
$container->setParameter('sylius_cart.repository.item.class', $cartItemClasses['repository']);
$container->setParameter('sylius.repository.cart_item.class', $cartItemClasses['repository']);
}

$loader->load('services.xml');
Expand Down
7 changes: 4 additions & 3 deletions EventListener/CartListener.php
Expand Up @@ -12,12 +12,11 @@
namespace Sylius\Bundle\CartBundle\EventListener;

use Doctrine\Common\Persistence\ObjectManager;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Validator\ValidatorInterface;

use Sylius\Bundle\CartBundle\Event\CartEvent;
use Sylius\Bundle\CartBundle\Model\CartInterface;
use Sylius\Bundle\CartBundle\SyliusCartEvents;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Validator\ValidatorInterface;

/**
* Cart & item changes listener.
Expand All @@ -34,6 +33,8 @@ class CartListener implements EventSubscriberInterface
private $cartManager;

/**
* Validator.
*
* @var ValidatorInterface
*/
private $validator;
Expand Down
25 changes: 24 additions & 1 deletion Model/Cart.php
Expand Up @@ -109,6 +109,8 @@ public function isLocked()
public function setLocked($locked)
{
$this->locked = $locked;

return $this;
}

/**
Expand All @@ -129,6 +131,8 @@ public function setTotalItems($totalItems)
}

$this->totalItems = $totalItems;

return $this;
}

/**
Expand All @@ -141,6 +145,8 @@ public function changeTotalItems($amount)
if (0 > $this->totalItems) {
$this->totalItems = 0;
}

return $this;
}

/**
Expand Down Expand Up @@ -196,7 +202,15 @@ public function getItems()
*/
public function setItems(Collection $items)
{
$this->items = $items;
foreach($this->items as $item){
$this->removeItem($item);
}

foreach($items as $item){
$this->addItem($item);
}

return $this;
}

/**
Expand Down Expand Up @@ -240,6 +254,7 @@ public function addItem(CartItemInterface $item)
return $this;
}


/**
* {@inheritdoc}
*/
Expand Down Expand Up @@ -267,6 +282,8 @@ public function getTotal()
public function setTotal($total)
{
$this->total = $total;

return $this;
}

public function calculateTotal()
Expand All @@ -279,6 +296,8 @@ public function calculateTotal()

$this->total += $item->getTotal();
}

return $this;
}

/**
Expand All @@ -303,6 +322,8 @@ public function getExpiresAt()
public function setExpiresAt(\DateTime $expiresAt = null)
{
$this->expiresAt = $expiresAt;

return $this;
}

/**
Expand All @@ -314,5 +335,7 @@ public function incrementExpiresAt()
$expiresAt->add(new \DateInterval('PT3H'));

$this->expiresAt = $expiresAt;

return $this;
}
}

0 comments on commit ab3b1d3

Please sign in to comment.