mirror of
https://github.com/kevin-DL/LaravelShoppingcart.git
synced 2026-01-23 23:51:25 +00:00
Merge pull request #111 from Norris1z/master
Use current instance when checking if storedCartWithIdentifierExists
This commit is contained in:
@@ -585,7 +585,7 @@ If you want to retrieve the cart from the database and restore it, all you have
|
|||||||
If you want to merge the cart with another one from the database, all you have to do is call the `merge($identifier)` where `$identifier` is the key you specified for the `store` method. You can also define if you want to keep the discount and tax rates of the items and if you want to dispatch "cart.added" events.
|
If you want to merge the cart with another one from the database, all you have to do is call the `merge($identifier)` where `$identifier` is the key you specified for the `store` method. You can also define if you want to keep the discount and tax rates of the items and if you want to dispatch "cart.added" events.
|
||||||
|
|
||||||
// Merge the contents of 'savedcart' into 'username'.
|
// Merge the contents of 'savedcart' into 'username'.
|
||||||
Cart::instance('username')->merge('savedcart', $keepDiscount, $keepTaxrate, $dispatchAdd);
|
Cart::instance('username')->merge('savedcart', $keepDiscount, $keepTaxrate, $dispatchAdd, 'savedcartinstance');
|
||||||
|
|
||||||
### Erasing the cart
|
### Erasing the cart
|
||||||
If you want to erase the cart from the database, all you have to do is call the `erase($identifier)` where `$identifier` is the key you specified for the `store` method.
|
If you want to erase the cart from the database, all you have to do is call the `erase($identifier)` where `$identifier` is the key you specified for the `store` method.
|
||||||
|
|||||||
@@ -544,7 +544,7 @@ Jika Anda ingin mengambil keranjang dari database dan mengembalikannya, yang har
|
|||||||
Jika Anda ingin menggabungkan keranjang dengan keranjang lain dari basis data, yang harus Anda lakukan adalah memanggil `gabungan ($ identifier)` di mana `$ identifier` adalah kunci yang Anda tentukan untuk metode` store`. Anda juga dapat menentukan apakah Anda ingin mempertahankan potongan harga dan tarif pajak item.
|
Jika Anda ingin menggabungkan keranjang dengan keranjang lain dari basis data, yang harus Anda lakukan adalah memanggil `gabungan ($ identifier)` di mana `$ identifier` adalah kunci yang Anda tentukan untuk metode` store`. Anda juga dapat menentukan apakah Anda ingin mempertahankan potongan harga dan tarif pajak item.
|
||||||
|
|
||||||
// Merge the contents of 'savedcart' into 'username'.
|
// Merge the contents of 'savedcart' into 'username'.
|
||||||
Cart::instance('username')->merge('savedcart', $keepDiscount, $keepTaxrate);
|
Cart::instance('username')->merge('savedcart', $keepDiscount, $keepTaxrate, 'savedcartinstance');
|
||||||
|
|
||||||
## Pengecualian
|
## Pengecualian
|
||||||
|
|
||||||
|
|||||||
@@ -542,7 +542,7 @@ foreach(Cart::content() as $row) {
|
|||||||
Якщо ви хочете злити кошик із іншим кошиком, збереженим у базі даних, вам знадобиться викликати метод `merge($identifier)`, де `$identifier` - це ключ, який ви зазначили у методі`store`. Ви також можете визначити чи хочете ви зберегти знижку і ставку оподаткування для товарів.
|
Якщо ви хочете злити кошик із іншим кошиком, збереженим у базі даних, вам знадобиться викликати метод `merge($identifier)`, де `$identifier` - це ключ, який ви зазначили у методі`store`. Ви також можете визначити чи хочете ви зберегти знижку і ставку оподаткування для товарів.
|
||||||
|
|
||||||
// Merge the contents of 'savedcart' into 'username'.
|
// Merge the contents of 'savedcart' into 'username'.
|
||||||
Cart::instance('username')->merge('savedcart', $keepDiscount, $keepTaxrate);
|
Cart::instance('username')->merge('savedcart', $keepDiscount, $keepTaxrate, 'savedcartinstance');
|
||||||
|
|
||||||
## Перехоплення
|
## Перехоплення
|
||||||
|
|
||||||
|
|||||||
32
src/Cart.php
32
src/Cart.php
@@ -636,13 +636,15 @@ class Cart
|
|||||||
$identifier = $identifier->getInstanceIdentifier();
|
$identifier = $identifier->getInstanceIdentifier();
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($this->storedCartWithIdentifierExists($identifier)) {
|
$instance = $this->currentInstance();
|
||||||
|
|
||||||
|
if ($this->storedCartInstanceWithIdentifierExists($instance, $identifier)) {
|
||||||
throw new CartAlreadyStoredException("A cart with identifier {$identifier} was already stored.");
|
throw new CartAlreadyStoredException("A cart with identifier {$identifier} was already stored.");
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->getConnection()->table($this->getTableName())->insert([
|
$this->getConnection()->table($this->getTableName())->insert([
|
||||||
'identifier' => $identifier,
|
'identifier' => $identifier,
|
||||||
'instance' => $this->currentInstance(),
|
'instance' => $instance,
|
||||||
'content' => serialize($content),
|
'content' => serialize($content),
|
||||||
'created_at' => $this->createdAt ?: Carbon::now(),
|
'created_at' => $this->createdAt ?: Carbon::now(),
|
||||||
'updated_at' => Carbon::now(),
|
'updated_at' => Carbon::now(),
|
||||||
@@ -664,17 +666,17 @@ class Cart
|
|||||||
$identifier = $identifier->getInstanceIdentifier();
|
$identifier = $identifier->getInstanceIdentifier();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$this->storedCartWithIdentifierExists($identifier)) {
|
$currentInstance = $this->currentInstance();
|
||||||
|
|
||||||
|
if (!$this->storedCartInstanceWithIdentifierExists($currentInstance, $identifier)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$stored = $this->getConnection()->table($this->getTableName())
|
$stored = $this->getConnection()->table($this->getTableName())
|
||||||
->where('identifier', $identifier)->first();
|
->where(['identifier'=> $identifier, 'instance' => $currentInstance])->first();
|
||||||
|
|
||||||
$storedContent = unserialize(data_get($stored, 'content'));
|
$storedContent = unserialize(data_get($stored, 'content'));
|
||||||
|
|
||||||
$currentInstance = $this->currentInstance();
|
|
||||||
|
|
||||||
$this->instance(data_get($stored, 'instance'));
|
$this->instance(data_get($stored, 'instance'));
|
||||||
|
|
||||||
$content = $this->getContent();
|
$content = $this->getContent();
|
||||||
@@ -692,7 +694,7 @@ class Cart
|
|||||||
$this->createdAt = Carbon::parse(data_get($stored, 'created_at'));
|
$this->createdAt = Carbon::parse(data_get($stored, 'created_at'));
|
||||||
$this->updatedAt = Carbon::parse(data_get($stored, 'updated_at'));
|
$this->updatedAt = Carbon::parse(data_get($stored, 'updated_at'));
|
||||||
|
|
||||||
$this->getConnection()->table($this->getTableName())->where('identifier', $identifier)->delete();
|
$this->getConnection()->table($this->getTableName())->where(['identifier' => $identifier, 'instance' => $currentInstance])->delete();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -708,11 +710,13 @@ class Cart
|
|||||||
$identifier = $identifier->getInstanceIdentifier();
|
$identifier = $identifier->getInstanceIdentifier();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$this->storedCartWithIdentifierExists($identifier)) {
|
$instance = $this->currentInstance();
|
||||||
|
|
||||||
|
if (!$this->storedCartInstanceWithIdentifierExists($instance, $identifier)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->getConnection()->table($this->getTableName())->where('identifier', $identifier)->delete();
|
$this->getConnection()->table($this->getTableName())->where(['identifier' => $identifier, 'instance' => $instance])->delete();
|
||||||
|
|
||||||
$this->events->dispatch('cart.erased');
|
$this->events->dispatch('cart.erased');
|
||||||
}
|
}
|
||||||
@@ -727,14 +731,14 @@ class Cart
|
|||||||
*
|
*
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
public function merge($identifier, $keepDiscount = false, $keepTax = false, $dispatchAdd = true)
|
public function merge($identifier, $keepDiscount = false, $keepTax = false, $dispatchAdd = true, $instance = self::DEFAULT_INSTANCE)
|
||||||
{
|
{
|
||||||
if (!$this->storedCartWithIdentifierExists($identifier)) {
|
if (!$this->storedCartInstanceWithIdentifierExists($instance, $identifier)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
$stored = $this->getConnection()->table($this->getTableName())
|
$stored = $this->getConnection()->table($this->getTableName())
|
||||||
->where('identifier', $identifier)->first();
|
->where(['identifier'=> $identifier, 'instance'=> $instance])->first();
|
||||||
|
|
||||||
$storedContent = unserialize($stored->content);
|
$storedContent = unserialize($stored->content);
|
||||||
|
|
||||||
@@ -832,9 +836,9 @@ class Cart
|
|||||||
*
|
*
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
private function storedCartWithIdentifierExists($identifier)
|
private function storedCartInstanceWithIdentifierExists($instance, $identifier)
|
||||||
{
|
{
|
||||||
return $this->getConnection()->table($this->getTableName())->where('identifier', $identifier)->exists();
|
return $this->getConnection()->table($this->getTableName())->where(['identifier' => $identifier, 'instance'=> $instance])->exists();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -865,11 +865,11 @@ class CartTest extends TestCase
|
|||||||
|
|
||||||
$cart->store($identifier = 123);
|
$cart->store($identifier = 123);
|
||||||
|
|
||||||
|
Event::assertDispatched('cart.stored');
|
||||||
|
|
||||||
$serialized = serialize($cart->content());
|
$serialized = serialize($cart->content());
|
||||||
|
|
||||||
$this->assertDatabaseHas('shoppingcart', ['identifier' => $identifier, 'instance' => 'default', 'content' => $serialized]);
|
$this->assertDatabaseHas('shoppingcart', ['identifier' => $identifier, 'instance' => 'default', 'content' => $serialized]);
|
||||||
|
|
||||||
Event::assertDispatched('cart.stored');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @test */
|
/** @test */
|
||||||
@@ -905,6 +905,8 @@ class CartTest extends TestCase
|
|||||||
|
|
||||||
$cart->store($identifier);
|
$cart->store($identifier);
|
||||||
|
|
||||||
|
Event::assertDispatched('cart.stored');
|
||||||
|
|
||||||
sleep(1);
|
sleep(1);
|
||||||
$afterSecondStore = Carbon::now();
|
$afterSecondStore = Carbon::now();
|
||||||
|
|
||||||
@@ -912,8 +914,6 @@ class CartTest extends TestCase
|
|||||||
|
|
||||||
$this->assertTrue($beforeStore->lessThanOrEqualTo($cart->createdAt()) && $afterStore->greaterThanOrEqualTo($cart->createdAt()));
|
$this->assertTrue($beforeStore->lessThanOrEqualTo($cart->createdAt()) && $afterStore->greaterThanOrEqualTo($cart->createdAt()));
|
||||||
$this->assertTrue($beforeSecondStore->lessThanOrEqualTo($cart->updatedAt()) && $afterSecondStore->greaterThanOrEqualTo($cart->updatedAt()));
|
$this->assertTrue($beforeSecondStore->lessThanOrEqualTo($cart->updatedAt()) && $afterSecondStore->greaterThanOrEqualTo($cart->updatedAt()));
|
||||||
|
|
||||||
Event::assertDispatched('cart.stored');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -936,9 +936,9 @@ class CartTest extends TestCase
|
|||||||
|
|
||||||
$cart->store($identifier = 123);
|
$cart->store($identifier = 123);
|
||||||
|
|
||||||
$cart->store($identifier);
|
|
||||||
|
|
||||||
Event::assertDispatched('cart.stored');
|
Event::assertDispatched('cart.stored');
|
||||||
|
|
||||||
|
$cart->store($identifier);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @test */
|
/** @test */
|
||||||
@@ -962,11 +962,11 @@ class CartTest extends TestCase
|
|||||||
|
|
||||||
$cart->restore($identifier);
|
$cart->restore($identifier);
|
||||||
|
|
||||||
|
Event::assertDispatched('cart.restored');
|
||||||
|
|
||||||
$this->assertItemsInCart(1, $cart);
|
$this->assertItemsInCart(1, $cart);
|
||||||
|
|
||||||
$this->assertDatabaseMissing('shoppingcart', ['identifier' => $identifier, 'instance' => 'default']);
|
$this->assertDatabaseMissing('shoppingcart', ['identifier' => $identifier, 'instance' => 'default']);
|
||||||
|
|
||||||
Event::assertDispatched('cart.restored');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @test */
|
/** @test */
|
||||||
@@ -1011,7 +1011,7 @@ class CartTest extends TestCase
|
|||||||
$cart = $this->getCartDiscount(50);
|
$cart = $this->getCartDiscount(50);
|
||||||
$cart->add(new BuyableProduct(1, 'First item', 10.00), 1);
|
$cart->add(new BuyableProduct(1, 'First item', 10.00), 1);
|
||||||
|
|
||||||
$cart->update('027c91341fd5cf4d2579b49c4b6a90da', ['qty'=>2]);
|
$cart->update('027c91341fd5cf4d2579b49c4b6a90da', ['qty' => 2]);
|
||||||
|
|
||||||
$cartItem = $cart->get('027c91341fd5cf4d2579b49c4b6a90da');
|
$cartItem = $cart->get('027c91341fd5cf4d2579b49c4b6a90da');
|
||||||
|
|
||||||
@@ -1453,4 +1453,74 @@ class CartTest extends TestCase
|
|||||||
$this->app['config']->set('cart.format.decimal_point', $decimalPoint);
|
$this->app['config']->set('cart.format.decimal_point', $decimalPoint);
|
||||||
$this->app['config']->set('cart.format.thousand_separator', $thousandSeperator);
|
$this->app['config']->set('cart.format.thousand_separator', $thousandSeperator);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @test */
|
||||||
|
public function it_can_store__mutiple_instances_of_the_cart_in_a_database()
|
||||||
|
{
|
||||||
|
$this->artisan('migrate', [
|
||||||
|
'--database' => 'testing',
|
||||||
|
]);
|
||||||
|
|
||||||
|
Event::fake();
|
||||||
|
|
||||||
|
$cart = $this->getCart();
|
||||||
|
|
||||||
|
$cart->add(new BuyableProduct());
|
||||||
|
|
||||||
|
$cart->store($identifier = 123);
|
||||||
|
|
||||||
|
Event::assertDispatched('cart.stored');
|
||||||
|
|
||||||
|
$serialized = serialize($cart->content());
|
||||||
|
|
||||||
|
$newInstance = $this->getCart();
|
||||||
|
$newInstance->instance($instanceName = 'someinstance');
|
||||||
|
$newInstance->add(new BuyableProduct());
|
||||||
|
$newInstance->store($identifier);
|
||||||
|
|
||||||
|
Event::assertDispatched('cart.stored');
|
||||||
|
|
||||||
|
$newInstanceSerialized = serialize($newInstance->content());
|
||||||
|
|
||||||
|
$this->assertDatabaseHas('shoppingcart', ['identifier' => $identifier, 'instance' => Cart::DEFAULT_INSTANCE, 'content' => $serialized]);
|
||||||
|
|
||||||
|
$this->assertDatabaseHas('shoppingcart', ['identifier' => $identifier, 'instance' => $instanceName, 'content' => $newInstanceSerialized]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @test */
|
||||||
|
public function it_can_calculate_the_total_price_of_the_items_in_cart()
|
||||||
|
{
|
||||||
|
$cart = $this->getCart();
|
||||||
|
|
||||||
|
$cart->add(new BuyableProduct(1, 'first item', $price = 1000), $qty = 5);
|
||||||
|
$this->assertEquals(5000, $cart->priceTotalFloat());
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @test */
|
||||||
|
public function it_can_format_the_total_price_of_the_items_in_cart()
|
||||||
|
{
|
||||||
|
$cart = $this->getCart();
|
||||||
|
|
||||||
|
$cart->add(new BuyableProduct(1, 'first item', 1000), 5);
|
||||||
|
$this->assertEquals('5,000.00', $cart->priceTotal());
|
||||||
|
$this->assertEquals('5,000.0000', $cart->priceTotal(4, '.', ','));
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @test */
|
||||||
|
public function it_can_erase_saved_cart_from_the_database()
|
||||||
|
{
|
||||||
|
$this->artisan('migrate', [
|
||||||
|
'--database' => 'testing',
|
||||||
|
]);
|
||||||
|
|
||||||
|
Event::fake();
|
||||||
|
|
||||||
|
$cart = $this->getCart();
|
||||||
|
$cart->add(new BuyableProduct(1, 'Item', 10.00), 1);
|
||||||
|
$cart->add(new BuyableProduct(2, 'Item 2', 10.00), 1);
|
||||||
|
$cart->store($identifier = 'test');
|
||||||
|
$cart->erase($identifier);
|
||||||
|
Event::assertDispatched('cart.erased');
|
||||||
|
$this->assertDatabaseMissing('shoppingcart', ['identifier' => $identifier, 'instance' => Cart::DEFAULT_INSTANCE]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user