From abdd154479b3a6219df2a00508e06f93c1a8bd89 Mon Sep 17 00:00:00 2001 From: gmorel Date: Fri, 27 Sep 2013 10:00:39 +0200 Subject: [PATCH 01/50] Working : upload file/image : fix sanitizeFileName --- core/lib/Thelia/Tests/Tools/FileManagerTest.php | 8 ++++---- core/lib/Thelia/Tools/FileManager.php | 7 +------ 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/core/lib/Thelia/Tests/Tools/FileManagerTest.php b/core/lib/Thelia/Tests/Tools/FileManagerTest.php index 8dce5afcc..8c1c9fe99 100644 --- a/core/lib/Thelia/Tests/Tools/FileManagerTest.php +++ b/core/lib/Thelia/Tests/Tools/FileManagerTest.php @@ -532,9 +532,9 @@ class FileManagerTest extends \PHPUnit_Framework_TestCase { ->getMock(); $fileManager = new FileManager($stubContainer); - $badFileName = 'azeéràçè§^"$*+-_°)(&é<>@#ty'; + $badFileName = 'a/ze\érà~çè§^"$*+-_°)(&é<>@#ty2/[\/:*?"<>|]/fi?.fUPPERile.exel../e*'; - $expected = 'azeyryZyy-_yty'; + $expected = 'azer-_ty2fi.fupperile.exel..e'; $actual = $fileManager->sanitizeFileName($badFileName); $this->assertEquals($expected, $actual); @@ -802,7 +802,7 @@ class FileManagerTest extends \PHPUnit_Framework_TestCase { $fileManager = new FileManager($stubContainer); - $expected = 'or1-g_nalyfilenme-1.yml'; + $expected = 'or1-g_nalfilenme-1.yml'; $actual = $fileManager->renameFile(1, $stubUploadedFile); $this->assertEquals($expected, $actual); @@ -830,7 +830,7 @@ class FileManagerTest extends \PHPUnit_Framework_TestCase { $fileManager = new FileManager($stubContainer); - $expected = 'or1-g_nalyfilenme-1'; + $expected = 'or1-g_nalfilenme-1'; $actual = $fileManager->renameFile(1, $stubUploadedFile); $this->assertEquals($expected, $actual); diff --git a/core/lib/Thelia/Tools/FileManager.php b/core/lib/Thelia/Tools/FileManager.php index 6c06fb416..ba5e1d24a 100644 --- a/core/lib/Thelia/Tools/FileManager.php +++ b/core/lib/Thelia/Tools/FileManager.php @@ -279,12 +279,7 @@ class FileManager */ public function sanitizeFileName($string) { - $cleanName = strtr($string, 'ŠŽšžŸÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÑÒÓÔÕÖØÙÚÛÜÝàáâãäåçèéêëìíîïñòóôõöøùúûüýÿ', 'SZszYAAAAAACEEEEIIIINOOOOOOUUUUYaaaaaaceeeeiiiinoooooouuuuyy'); - $cleanName = strtr($cleanName, array('Þ' => 'TH', 'þ' => 'th', 'Ð' => 'DH', 'ð' => 'dh', 'ß' => 'ss', 'Œ' => 'OE', 'œ' => 'oe', 'Æ' => 'AE', 'æ' => 'ae', 'µ' => 'u')); - - $cleanName = preg_replace(array('/\s/', '/\.[\.]+/', '/[^\w_\.\-]/'), array('_', '.', ''), $cleanName); - - return $cleanName; + return strtolower(preg_replace('/[^a-zA-Z0-9-_\.]/', '', $string)); } /** From 5abe350b65e62a4327258dc19cf4a0164fc6389f Mon Sep 17 00:00:00 2001 From: gmorel Date: Fri, 27 Sep 2013 14:52:38 +0200 Subject: [PATCH 02/50] WIP : Coupon : Fix condition selection JS + Dependency Injection register --- .../Thelia/Controller/Admin/CouponController.php | 15 ++++++--------- core/lib/Thelia/Core/Bundle/TheliaBundle.php | 6 ++---- ...lePass.php => RegisterCouponConditionPass.php} | 10 ++++++---- core/lib/Thelia/Coupon/CouponManager.php | 2 +- core/lib/Thelia/Form/CouponCreationForm.php | 9 +++++---- templates/admin/default/assets/js/coupon.js | 12 ++++++------ templates/admin/default/coupon-update.html | 2 +- templates/admin/default/coupon/form.html | 2 -- 8 files changed, 27 insertions(+), 31 deletions(-) rename core/lib/Thelia/Core/DependencyInjection/Compiler/{RegisterRulePass.php => RegisterCouponConditionPass.php} (92%) diff --git a/core/lib/Thelia/Controller/Admin/CouponController.php b/core/lib/Thelia/Controller/Admin/CouponController.php index 0ba2e961b..0bf2a4a39 100755 --- a/core/lib/Thelia/Controller/Admin/CouponController.php +++ b/core/lib/Thelia/Controller/Admin/CouponController.php @@ -208,10 +208,7 @@ class CouponController extends BaseAdminController $conditions = $conditionFactory->unserializeConditionCollection( $coupon->getSerializedConditions() ); -var_dump($coupon->getIsEnabled());; -var_dump($coupon->getIsAvailableOnSpecialOffers());; -var_dump($coupon->getIsCumulative());; -var_dump($coupon->getIsRemovingPostage());; + $data = array( 'code' => $coupon->getCode(), 'title' => $coupon->getTitle(), @@ -219,11 +216,11 @@ var_dump($coupon->getIsRemovingPostage());; 'type' => $coupon->getType(), 'shortDescription' => $coupon->getShortDescription(), 'description' => $coupon->getDescription(), - 'isEnabled' => ($coupon->getIsEnabled() == 1), + 'isEnabled' => $coupon->getIsEnabled(), 'expirationDate' => $coupon->getExpirationDate('Y-m-d'), - 'isAvailableOnSpecialOffers' => ($coupon->getIsAvailableOnSpecialOffers() == 1), - 'isCumulative' => ($coupon->getIsCumulative() == 1), - 'isRemovingPostage' => ($coupon->getIsRemovingPostage() == 1), + 'isAvailableOnSpecialOffers' => $coupon->getIsAvailableOnSpecialOffers(), + 'isCumulative' => $coupon->getIsCumulative(), + 'isRemovingPostage' => $coupon->getIsRemovingPostage(), 'maxUsage' => $coupon->getMaxUsage(), 'conditions' => $conditions, 'locale' => $coupon->getLocale(), @@ -264,7 +261,7 @@ var_dump($coupon->getIsRemovingPostage());; Router::ABSOLUTE_URL ); - $args['formAction'] = 'admin/coupon/update' . $couponId; + $args['formAction'] = 'admin/coupon/update/' . $couponId; return $this->render('coupon-update', $args); } diff --git a/core/lib/Thelia/Core/Bundle/TheliaBundle.php b/core/lib/Thelia/Core/Bundle/TheliaBundle.php index a9704b350..dcdcdd5d2 100755 --- a/core/lib/Thelia/Core/Bundle/TheliaBundle.php +++ b/core/lib/Thelia/Core/Bundle/TheliaBundle.php @@ -30,7 +30,7 @@ use Thelia\Core\DependencyInjection\Compiler\RegisterCouponPass; use Thelia\Core\DependencyInjection\Compiler\RegisterListenersPass; use Thelia\Core\DependencyInjection\Compiler\RegisterParserPluginPass; use Thelia\Core\DependencyInjection\Compiler\RegisterRouterPass; -use Thelia\Core\DependencyInjection\Compiler\RegisterRulePass; +use Thelia\Core\DependencyInjection\Compiler\RegisterCouponConditionPass; /** * First Bundle use in Thelia @@ -63,8 +63,6 @@ class TheliaBundle extends Bundle ->addCompilerPass(new RegisterParserPluginPass()) ->addCompilerPass(new RegisterRouterPass()) ->addCompilerPass(new RegisterCouponPass()) - ->addCompilerPass(new RegisterRulePass()) - ; - + ->addCompilerPass(new RegisterCouponConditionPass()); } } diff --git a/core/lib/Thelia/Core/DependencyInjection/Compiler/RegisterRulePass.php b/core/lib/Thelia/Core/DependencyInjection/Compiler/RegisterCouponConditionPass.php similarity index 92% rename from core/lib/Thelia/Core/DependencyInjection/Compiler/RegisterRulePass.php rename to core/lib/Thelia/Core/DependencyInjection/Compiler/RegisterCouponConditionPass.php index dcc54cf8e..7caf79c5e 100755 --- a/core/lib/Thelia/Core/DependencyInjection/Compiler/RegisterRulePass.php +++ b/core/lib/Thelia/Core/DependencyInjection/Compiler/RegisterCouponConditionPass.php @@ -35,11 +35,13 @@ use Symfony\Component\DependencyInjection\Reference; * Class RegisterListenersPass * Source code come from Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\RegisterKernelListenersPass class * + * Register all available Conditions for the coupon module + * * @package Thelia\Core\DependencyInjection\Compiler * @author Guillaume MOREL * */ -class RegisterRulePass implements CompilerPassInterface +class RegisterCouponConditionPass implements CompilerPassInterface { /** * You can modify the container here before it is dumped to PHP code. @@ -55,11 +57,11 @@ class RegisterRulePass implements CompilerPassInterface } $couponManager = $container->getDefinition('thelia.coupon.manager'); - $services = $container->findTaggedServiceIds("thelia.coupon.addRule"); + $services = $container->findTaggedServiceIds("thelia.coupon.addCondition"); - foreach ($services as $id => $rule) { + foreach ($services as $id => $condition) { $couponManager->addMethodCall( - 'addAvailableRule', + 'addAvailableCondition', array( new Reference($id) ) diff --git a/core/lib/Thelia/Coupon/CouponManager.php b/core/lib/Thelia/Coupon/CouponManager.php index c4ba661be..09e5a30e8 100644 --- a/core/lib/Thelia/Coupon/CouponManager.php +++ b/core/lib/Thelia/Coupon/CouponManager.php @@ -241,7 +241,7 @@ class CouponManager * * @param ConditionManagerInterface $condition ConditionManagerInterface */ - public function addAvailableRule(ConditionManagerInterface $condition) + public function addAvailableCondition(ConditionManagerInterface $condition) { $this->availableConditions[] = $condition; } diff --git a/core/lib/Thelia/Form/CouponCreationForm.php b/core/lib/Thelia/Form/CouponCreationForm.php index f3ee0df63..fcb2e793c 100755 --- a/core/lib/Thelia/Form/CouponCreationForm.php +++ b/core/lib/Thelia/Form/CouponCreationForm.php @@ -28,6 +28,7 @@ use Symfony\Component\Validator\Constraints\DateTime; use Symfony\Component\Validator\Constraints\GreaterThanOrEqual; use Symfony\Component\Validator\Constraints\NotBlank; use Symfony\Component\Validator\Constraints\NotEqualTo; +use Symfony\Component\Validator\Constraints\Range; /** * Created by JetBrains PhpStorm. @@ -110,7 +111,7 @@ class CouponCreationForm extends BaseForm ) ->add( 'isEnabled', - 'checkbox', + 'text', array() ) ->add( @@ -125,17 +126,17 @@ class CouponCreationForm extends BaseForm ) ->add( 'isCumulative', - 'checkbox', + 'text', array() ) ->add( 'isRemovingPostage', - 'checkbox', + 'text', array() ) ->add( 'isAvailableOnSpecialOffers', - 'checkbox', + 'text', array() ) ->add( diff --git a/templates/admin/default/assets/js/coupon.js b/templates/admin/default/assets/js/coupon.js index 68cfb42e9..de36414bd 100644 --- a/templates/admin/default/assets/js/coupon.js +++ b/templates/admin/default/assets/js/coupon.js @@ -55,7 +55,7 @@ $(function($){ $.couponManager.conditionToSave = $.couponManager.conditionsToSave[id]; // Set the condition selector - $("#category-rule option").filter(function() { + $("#category-condition option").filter(function() { return $(this).val() == $.couponManager.conditionToSave.serviceId; }).prop('selected', true); @@ -90,7 +90,7 @@ $(function($){ // Save conditions on click $.couponManager.onClickSaveCondition = function() { $('#constraint-save-btn').on('click', function () { - if($('#category-rule').val() == 'thelia.condition.match_for_everyone') { + if($('#category-condition').val() == 'thelia.condition.match_for_everyone') { // // @todo translate message + put it in modal var r = confirm("Do you really want to set this coupon available to everyone ?"); if (r == true) { @@ -140,7 +140,7 @@ $(function($){ // Reload condition inputs when changing effect $.couponManager.onConditionChange = function() { - $('#category-rule').on('change', function () { + $('#category-condition').on('change', function () { $.couponManager.loadConditionInputs($(this).val(), function() {}); }); }; @@ -152,9 +152,9 @@ $(function($){ // Set max usage to unlimited or not $.couponManager.onUsageUnlimitedChange = function() { - var isUnlimited = $('#is-unlimited'); + var $isUnlimited = $('#is-unlimited'); if ($('#max-usage').val() == -1) { - isUnlimited.prop('checked', true); + $isUnlimited.prop('checked', true); $('#max-usage').hide(); $('#max-usage-label').hide(); } else { @@ -163,7 +163,7 @@ $(function($){ $('#max-usage-label').show(); } - isUnlimited.change(function(){ + $isUnlimited.change(function(){ var $this = $(this); if ($this.is(':checked')) { $('#max-usage').hide().val('-1'); diff --git a/templates/admin/default/coupon-update.html b/templates/admin/default/coupon-update.html index be9354362..97a10f122 100755 --- a/templates/admin/default/coupon-update.html +++ b/templates/admin/default/coupon-update.html @@ -43,7 +43,7 @@ {/javascripts} - {**} - {**} + {/javascripts} + -//Curabitur quis augue feugiat, ullamcorper mauris ac, interdum mi. Quisque aliquam lorem vitae felis lobortis, id interdum turpis mattis. Vestibulum diam massa, ornare congue blandit quis, facilisis at nisl. In tortor metus, venenatis non arcu nec, sollicitudin ornare nisl. Nunc erat risus, varius nec urna at, iaculis lacinia elit. Aenean ut felis tempus, tincidunt odio non, sagittis nisl. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Donec vitae hendrerit elit. Nunc sit amet gravida risus, euismod lobortis massa. Nam a erat mauris. Nam a malesuada lorem. Nulla id accumsan dolor, sed rhoncus tellus. Quisque dictum felis sed leo auctor, at volutpat lectus viverra. Morbi rutrum, est ac aliquam imperdiet, nibh sem sagittis justo, ac mattis magna lacus eu nulla. -// -//Duis interdum lectus nulla, nec pellentesque sapien condimentum at. Suspendisse potenti. Sed eu purus tellus. Nunc quis rhoncus metus. Fusce vitae tellus enim. Interdum et malesuada fames ac ante ipsum primis in faucibus. Etiam tempor porttitor erat vitae iaculis. Sed est elit, consequat non ornare vitae, vehicula eget lectus. Etiam consequat sapien mauris, eget consectetur magna imperdiet eget. Nunc sollicitudin luctus velit, in commodo nulla adipiscing fermentum. Fusce nisi sapien, posuere vitae metus sit amet, facilisis sollicitudin dui. Fusce ultricies auctor enim sit amet iaculis. Morbi at vestibulum enim, eget adipiscing eros. -// -//Praesent ligula lorem, faucibus ut metus quis, fermentum iaculis erat. Pellentesque elit erat, lacinia sed semper ac, sagittis vel elit. Nam eu convallis est. Curabitur rhoncus odio vitae consectetur pellentesque. Nam vitae arcu nec ante scelerisque dignissim vel nec neque. Suspendisse augue nulla, mollis eget dui et, tempor facilisis erat. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi ac diam ipsum. Donec convallis dui ultricies velit auctor, non lobortis nulla ultrices. Morbi vitae dignissim ante, sit amet lobortis tortor. Nunc dapibus condimentum augue, in molestie neque congue non. -// -//Sed facilisis pellentesque nisl, eu tincidunt erat scelerisque a. Nullam malesuada tortor vel erat volutpat tincidunt. In vehicula diam est, a convallis eros scelerisque ut. Donec aliquet venenatis iaculis. Ut a arcu gravida, placerat dui eu, iaculis nisl. Quisque adipiscing orci sit amet dui dignissim lacinia. Sed vulputate lorem non dolor adipiscing ornare. Morbi ornare id nisl id aliquam. Ut fringilla elit ante, nec lacinia enim fermentum sit amet. Aenean rutrum lorem eu convallis pharetra. Cras malesuada varius metus, vitae gravida velit. Nam a varius ipsum, ac commodo dolor. Phasellus nec elementum elit. Etiam vel adipiscing leo.'; -// -// /** -// * Sets up the fixture, for example, opens a network connection. -// * This method is called before a test is executed. -// */ -// protected function setUp() -// { -// } -// -// /** -// * Test getDiscount() behaviour -// * Entering : 1 valid Coupon (If 40 < total amount 400) - 10euros -// * -// * @covers Thelia\Coupon\CouponManager::getDiscount -// */ -// public function testGetDiscountOneCoupon() -// { -// $cartTotalPrice = 100.00; -// $checkoutTotalPrice = 120.00; -// -// /** @var CouponInterface $coupon */ -// $coupon = self::generateValidCoupon(); -// -// /** @var FacadeInterface $stubCouponBaseAdapter */ -// $stubCouponBaseAdapter = $this->generateFakeAdapter(array($coupon), $cartTotalPrice, $checkoutTotalPrice); -// -// $couponManager = new CouponManager($stubCouponBaseAdapter); -// $discount = $couponManager->getDiscount(); -// -// $expected = 10.00; -// $actual = $discount; -// $this->assertEquals($expected, $actual); -// } -// -// /** -// * Test getDiscount() behaviour -// * Entering : 1 valid Coupon (If 40 < total amount 400) - 10euros -// * 1 valid Coupon (If total amount > 20) - 15euros -// * -// * @covers Thelia\Coupon\CouponManager::getDiscount -// */ -// public function testGetDiscountTwoCoupon() -// { -// $adapter = new BaseFacade(); -// $cartTotalPrice = 100.00; -// $checkoutTotalPrice = 120.00; -// -// /** @var CouponInterface $coupon1 */ -// $coupon1 = self::generateValidCoupon(); -// $rule1 = new AvailableForTotalAmount( -// $adapter, array( -// AvailableForTotalAmount::PARAM1_PRICE => new RuleValidator( -// Operators::SUPERIOR, -// new PriceParam( -// $adapter, 40.00, 'EUR' -// ) -// ) -// ) -// ); -// $rules = new ConditionCollection(array($rule1)); -// /** @var CouponInterface $coupon2 */ -// $coupon2 = $this->generateValidCoupon('XMAS2', null, null, null, 15.00, null, null, $rules); -// -// /** @var FacadeInterface $stubCouponBaseAdapter */ -// $stubCouponBaseAdapter = $this->generateFakeAdapter(array($coupon1, $coupon2), $cartTotalPrice, $checkoutTotalPrice); -// -// $couponManager = new CouponManager($stubCouponBaseAdapter); -// $discount = $couponManager->getDiscount(); -// -// $expected = 25.00; -// $actual = $discount; -// $this->assertEquals($expected, $actual); -// } -// -// /** -// * Test getDiscount() behaviour -// * For a Cart of 21euros -// * Entering : 1 valid Coupon (If total amount > 20) - 30euros -// * -// * @covers Thelia\Coupon\CouponManager::getDiscount -// */ -// public function testGetDiscountAlwaysInferiorToPrice() -// { -// $adapter = new BaseFacade(); -// $cartTotalPrice = 21.00; -// $checkoutTotalPrice = 26.00; -// -// $rule1 = new AvailableForTotalAmount( -// $adapter, array( -// AvailableForTotalAmount::PARAM1_PRICE => new RuleValidator( -// Operators::SUPERIOR, -// new PriceParam( -// $adapter, 20.00, 'EUR' -// ) -// ) -// ) -// ); -// $rules = new ConditionCollection(array($rule1)); -// /** @var CouponInterface $coupon */ -// $coupon = $this->generateValidCoupon('XMAS2', null, null, null, 30.00, null, null, $rules); -// -// /** @var FacadeInterface $stubCouponBaseAdapter */ -// $stubCouponBaseAdapter = $this->generateFakeAdapter(array($coupon), $cartTotalPrice, $checkoutTotalPrice); -// -// $couponManager = new CouponManager($stubCouponBaseAdapter); -// $discount = $couponManager->getDiscount(); -// -// $expected = 21.00; -// $actual = $discount; -// $this->assertEquals($expected, $actual); -// } -// -// -// /** -// * Check if removing postage on discout is working -// * @covers Thelia\Coupon\CouponManager::isCouponRemovingPostage -// * @covers Thelia\Coupon\CouponManager::sortCoupons -// */ -// public function testIsCouponRemovingPostage() -// { -// $adapter = new BaseFacade(); -// $cartTotalPrice = 21.00; -// $checkoutTotalPrice = 27.00; -// -// $rule1 = new AvailableForTotalAmount( -// $adapter, array( -// AvailableForTotalAmount::PARAM1_PRICE => new RuleValidator( -// Operators::SUPERIOR, -// new PriceParam( -// $adapter, 20.00, 'EUR' -// ) -// ) -// ) -// ); -// $rules = new ConditionCollection(array($rule1)); -// /** @var CouponInterface $coupon */ -// $coupon = $this->generateValidCoupon('XMAS2', null, null, null, 30.00, null, null, $rules, null, true); -// -// /** @var FacadeInterface $stubCouponBaseAdapter */ -// $stubCouponBaseAdapter = $this->generateFakeAdapter(array($coupon), $cartTotalPrice, $checkoutTotalPrice); -// -// $couponManager = new CouponManager($stubCouponBaseAdapter); -// $discount = $couponManager->getDiscount(); -// -// $expected = 21.00; -// $actual = $discount; -// $this->assertEquals($expected, $actual); -// } -// -// /** -// * Testing how multiple Coupon behaviour -// * Entering 1 Coupon not cumulative -// * -// * @covers Thelia\Coupon\CouponManager::sortCoupons -// */ -// public function testCouponCumulationOneCouponNotCumulative() -// { -// $cartTotalPrice = 100.00; -// $checkoutTotalPrice = 120.00; -// -// // Given -// /** @var CouponInterface $coupon */ -// $couponCumulative1 = $this->generateValidCoupon(null, null, null, null, null, null, null, null, false); -// -// $coupons = array($couponCumulative1); -// -// /** @var FacadeInterface $stubCouponBaseAdapter */ -// $stubCouponBaseAdapter = $this->generateFakeAdapter($coupons, $cartTotalPrice, $checkoutTotalPrice); -// -// // When -// $sortedCoupons = PhpUnitUtils::callMethod( -// new CouponManager($stubCouponBaseAdapter), -// 'sortCoupons', -// array($coupons) -// ); -// -// // Then -// $expected = $coupons; -// $actual = $sortedCoupons; -// -// $this->assertSame($expected, $actual, 'Array Sorted despite there is only once'); -// } -// -// /** -// * Testing how multiple Coupon behaviour -// * Entering 1 Coupon cumulative -// * -// * @covers Thelia\Coupon\CouponManager::sortCoupons -// */ -// public function testCouponCumulationOneCouponCumulative() -// { -// $cartTotalPrice = 100.00; -// $checkoutTotalPrice = 120.00; -// -// // Given -// /** @var CouponInterface $coupon */ -// $couponCumulative1 = $this->generateValidCoupon(null, null, null, null, null, null, null, null, true); -// -// $coupons = array($couponCumulative1); -// /** @var FacadeInterface $stubCouponBaseAdapter */ -// $stubCouponBaseAdapter = $this->generateFakeAdapter($coupons, $cartTotalPrice, $checkoutTotalPrice); -// -// // When -// $sortedCoupons = PhpUnitUtils::callMethod( -// new CouponManager($stubCouponBaseAdapter), -// 'sortCoupons', -// array($coupons) -// ); -// -// // Then -// $expected = $coupons; -// $actual = $sortedCoupons; -// -// $this->assertSame($expected, $actual, 'Array Sorted despite there is only once'); -// } -// -// /** -// * Testing how multiple Coupon behaviour -// * Entering 1 Coupon cumulative -// * 1 Coupon cumulative -// * -// * @covers Thelia\Coupon\CouponManager::sortCoupons -// */ -// public function testCouponCumulationTwoCouponCumulative() -// { -// $cartTotalPrice = 100.00; -// $checkoutTotalPrice = 120.00; -// -// // Given -// /** @var CouponInterface $coupon */ -// $couponCumulative1 = $this->generateValidCoupon('XMAS1', null, null, null, null, null, null, null, true); -// $couponCumulative2 = $this->generateValidCoupon('XMAS2', null, null, null, null, null, null, null, true); -// -// $coupons = array($couponCumulative1, $couponCumulative2); -// /** @var FacadeInterface $stubCouponBaseAdapter */ -// $stubCouponBaseAdapter = $this->generateFakeAdapter($coupons, $cartTotalPrice, $checkoutTotalPrice); -// -// // When -// $sortedCoupons = PhpUnitUtils::callMethod( -// new CouponManager($stubCouponBaseAdapter), -// 'sortCoupons', -// array($coupons) -// ); -// -// // Then -// $expected = $coupons; -// $actual = $sortedCoupons; -// -// $this->assertSame($expected, $actual, 'Array Sorted despite both Coupon can be accumulated'); -// } -// -// /** -// * Testing how multiple Coupon behaviour -// * Entering 1 Coupon cumulative -// * 1 Coupon non cumulative -// * -// * @covers Thelia\Coupon\CouponManager::sortCoupons -// */ -// public function testCouponCumulationOneCouponCumulativeOneNonCumulative() -// { -// $cartTotalPrice = 100.00; -// $checkoutTotalPrice = 120.00; -// -// // Given -// /** @var CouponInterface $coupon */ -// $couponCumulative1 = $this->generateValidCoupon('XMAS1', null, null, null, null, null, null, null, true); -// $couponCumulative2 = $this->generateValidCoupon('XMAS2', null, null, null, null, null, null, null, false); -// -// $coupons = array($couponCumulative1, $couponCumulative2); -// /** @var FacadeInterface $stubCouponBaseAdapter */ -// $stubCouponBaseAdapter = $this->generateFakeAdapter($coupons, $cartTotalPrice, $checkoutTotalPrice); -// -// // When -// $sortedCoupons = PhpUnitUtils::callMethod( -// new CouponManager($stubCouponBaseAdapter), -// 'sortCoupons', -// array($coupons) -// ); -// -// // Then -// $expected = array($couponCumulative2); -// $actual = $sortedCoupons; -// -// $this->assertSame($expected, $actual, 'Array Sorted despite both Coupon can be accumulated'); -// } -// -// /** -// * Testing how multiple Coupon behaviour -// * Entering 1 Coupon non cumulative -// * 1 Coupon cumulative -// * -// * @covers Thelia\Coupon\CouponManager::sortCoupons -// */ -// public function testCouponCumulationOneCouponNonCumulativeOneCumulative() -// { -// $cartTotalPrice = 100.00; -// $checkoutTotalPrice = 120.00; -// -// // Given -// /** @var CouponInterface $coupon */ -// $couponCumulative1 = $this->generateValidCoupon('XMAS1', null, null, null, null, null, null, null, false); -// $couponCumulative2 = $this->generateValidCoupon('XMAS2', null, null, null, null, null, null, null, true); -// -// $coupons = array($couponCumulative1, $couponCumulative2); -// /** @var FacadeInterface $stubCouponBaseAdapter */ -// $stubCouponBaseAdapter = $this->generateFakeAdapter($coupons, $cartTotalPrice, $checkoutTotalPrice); -// -// // When -// $sortedCoupons = PhpUnitUtils::callMethod( -// new CouponManager($stubCouponBaseAdapter), -// 'sortCoupons', -// array($coupons) -// ); -// -// // Then -// $expected = array($couponCumulative2); -// $actual = $sortedCoupons; -// -// $this->assertSame($expected, $actual, 'Array Sorted despite both Coupon can be accumulated'); -// } -// -// /** -// * Testing how multiple Coupon behaviour -// * Entering 1 Coupon non cumulative -// * 1 Coupon non cumulative -// * -// * @covers Thelia\Coupon\CouponManager::sortCoupons -// */ -// public function testCouponCumulationTwoCouponNonCumulative() -// { -// $cartTotalPrice = 100.00; -// $checkoutTotalPrice = 120.00; -// -// // Given -// /** @var CouponInterface $coupon */ -// $couponCumulative1 = $this->generateValidCoupon('XMAS1', null, null, null, null, null, null, null, false); -// $couponCumulative2 = $this->generateValidCoupon('XMAS2', null, null, null, null, null, null, null, false); -// -// $coupons = array($couponCumulative1, $couponCumulative2); -// /** @var FacadeInterface $stubCouponBaseAdapter */ -// $stubCouponBaseAdapter = $this->generateFakeAdapter($coupons, $cartTotalPrice, $checkoutTotalPrice); -// -// // When -// $sortedCoupons = PhpUnitUtils::callMethod( -// new CouponManager($stubCouponBaseAdapter), -// 'sortCoupons', -// array($coupons) -// ); -// -// // Then -// $expected = array($couponCumulative2); -// $actual = $sortedCoupons; -// -// $this->assertSame($expected, $actual, 'Array Sorted despite both Coupon can be accumulated'); -// } -// -// /** -// * Testing how multiple Coupon behaviour -// * Entering 1 Coupon cumulative expired -// * -// * @covers Thelia\Coupon\CouponManager::sortCoupons -// */ -// public function testCouponCumulationOneCouponCumulativeExpired() -// { -// $cartTotalPrice = 100.00; -// $checkoutTotalPrice = 120.00; -// -// // Given -// /** @var CouponInterface $coupon */ -// $couponCumulative1 = $this->generateValidCoupon('XMAS1', null, null, null, null, null, new \DateTime(), null, true); -// -// $coupons = array($couponCumulative1); -// /** @var FacadeInterface $stubCouponBaseAdapter */ -// $stubCouponBaseAdapter = $this->generateFakeAdapter($coupons, $cartTotalPrice, $checkoutTotalPrice); -// -// // When -// $sortedCoupons = PhpUnitUtils::callMethod( -// new CouponManager($stubCouponBaseAdapter), -// 'sortCoupons', -// array($coupons) -// ); -// -// // Then -// $expected = array(); -// $actual = $sortedCoupons; -// -// $this->assertSame($expected, $actual, 'Coupon expired ignored'); -// } -// -// /** -// * Testing how multiple Coupon behaviour -// * Entering 1 Coupon cumulative expired -// * 1 Coupon cumulative expired -// * -// * @covers Thelia\Coupon\CouponManager::sortCoupons -// */ -// public function testCouponCumulationTwoCouponCumulativeExpired() -// { -// $cartTotalPrice = 100.00; -// $checkoutTotalPrice = 120.00; -// -// // Given -// /** @var CouponInterface $coupon */ -// $couponCumulative1 = $this->generateValidCoupon('XMAS1', null, null, null, null, null, new \DateTime(), null, true); -// $couponCumulative2 = $this->generateValidCoupon('XMAS2', null, null, null, null, null, new \DateTime(), null, true); -// -// $coupons = array($couponCumulative1, $couponCumulative2); -// /** @var FacadeInterface $stubCouponBaseAdapter */ -// $stubCouponBaseAdapter = $this->generateFakeAdapter($coupons, $cartTotalPrice, $checkoutTotalPrice); -// -// // When -// $sortedCoupons = PhpUnitUtils::callMethod( -// new CouponManager($stubCouponBaseAdapter), -// 'sortCoupons', -// array($coupons) -// ); -// -// // Then -// $expected = array(); -// $actual = $sortedCoupons; -// -// $this->assertSame($expected, $actual, 'Coupon expired ignored'); -// } -// -// /** -// * Testing how multiple Coupon behaviour -// * Entering 1 Coupon cumulative expired -// * 1 Coupon cumulative valid -// * -// * @covers Thelia\Coupon\CouponManager::sortCoupons -// */ -// public function testCouponCumulationOneCouponCumulativeExpiredOneNonExpired() -// { -// $cartTotalPrice = 100.00; -// $checkoutTotalPrice = 120.00; -// -// // Given -// /** @var CouponInterface $coupon */ -// $couponCumulative1 = $this->generateValidCoupon('XMAS1', null, null, null, null, null, new \DateTime(), null, true); -// $couponCumulative2 = $this->generateValidCoupon('XMAS2', null, null, null, null, null, null, null, true); -// -// $coupons = array($couponCumulative1, $couponCumulative2); -// /** @var FacadeInterface $stubCouponBaseAdapter */ -// $stubCouponBaseAdapter = $this->generateFakeAdapter($coupons, $cartTotalPrice, $checkoutTotalPrice); -// -// // When -// $sortedCoupons = PhpUnitUtils::callMethod( -// new CouponManager($stubCouponBaseAdapter), -// 'sortCoupons', -// array($coupons) -// ); -// -// // Then -// $expected = array($couponCumulative2); -// $actual = $sortedCoupons; -// -// $this->assertSame($expected, $actual, 'Coupon expired ignored'); -// } -// -// /** -// * Testing how multiple Coupon behaviour -// * Entering 1 Coupon cumulative valid -// * 1 Coupon cumulative expired -// * -// * @covers Thelia\Coupon\CouponManager::sortCoupons -// */ -// public function testCouponCumulationOneCouponCumulativeNonExpiredOneExpired() -// { -// $cartTotalPrice = 100.00; -// $checkoutTotalPrice = 120.00; -// -// // Given -// /** @var CouponInterface $coupon */ -// $couponCumulative1 = $this->generateValidCoupon('XMAS1', null, null, null, null, null, null, null, true); -// $couponCumulative2 = $this->generateValidCoupon('XMAS2', null, null, null, null, null, new \DateTime(), null, true); -// -// $coupons = array($couponCumulative1, $couponCumulative2); -// /** @var FacadeInterface $stubCouponBaseAdapter */ -// $stubCouponBaseAdapter = $this->generateFakeAdapter($coupons, $cartTotalPrice, $checkoutTotalPrice); -// -// // When -// $sortedCoupons = PhpUnitUtils::callMethod( -// new CouponManager($stubCouponBaseAdapter), -// 'sortCoupons', -// array($coupons) -// ); -// -// // Then -// $expected = array($couponCumulative1); -// $actual = $sortedCoupons; -// -// $this->assertSame($expected, $actual, 'Coupon expired ignored'); -// } -// -// /** -// * Testing how multiple Coupon behaviour -// * Entering 1 Coupon cumulative valid -// * 1 Coupon cumulative valid -// * 1 Coupon cumulative valid -// * 1 Coupon cumulative valid -// * -// * @covers Thelia\Coupon\CouponManager::sortCoupons -// */ -// public function testCouponCumulationFourCouponCumulative() -// { -// $cartTotalPrice = 100.00; -// $checkoutTotalPrice = 120.00; -// -// // Given -// /** @var CouponInterface $coupon */ -// $couponCumulative1 = $this->generateValidCoupon('XMAS1', null, null, null, null, null, null, null, true); -// $couponCumulative2 = $this->generateValidCoupon('XMAS2', null, null, null, null, null, null, null, true); -// $couponCumulative3 = $this->generateValidCoupon('XMAS3', null, null, null, null, null, null, null, true); -// $couponCumulative4 = $this->generateValidCoupon('XMAS4', null, null, null, null, null, null, null, true); -// -// $coupons = array($couponCumulative1, $couponCumulative2, $couponCumulative3, $couponCumulative4); -// /** @var FacadeInterface $stubCouponBaseAdapter */ -// $stubCouponBaseAdapter = $this->generateFakeAdapter($coupons, $cartTotalPrice, $checkoutTotalPrice); -// -// // When -// $sortedCoupons = PhpUnitUtils::callMethod( -// new CouponManager($stubCouponBaseAdapter), -// 'sortCoupons', -// array($coupons) -// ); -// -// // Then -// $expected = $coupons; -// $actual = $sortedCoupons; -// -// $this->assertSame($expected, $actual, 'Coupon cumulative ignored'); -// } -// -// /** -// * Testing how multiple Coupon behaviour -// * Entering 1 Coupon cumulative valid -// * 1 Coupon cumulative valid -// * 1 Coupon cumulative valid -// * 1 Coupon non cumulative valid -// * -// * @covers Thelia\Coupon\CouponManager::sortCoupons -// */ -// public function testCouponCumulationThreeCouponCumulativeOneNonCumulative() -// { -// $cartTotalPrice = 100.00; -// $checkoutTotalPrice = 120.00; -// -// // Given -// /** @var CouponInterface $coupon */ -// $couponCumulative1 = $this->generateValidCoupon('XMAS1', null, null, null, null, null, null, null, true); -// $couponCumulative2 = $this->generateValidCoupon('XMAS2', null, null, null, null, null, null, null, true); -// $couponCumulative3 = $this->generateValidCoupon('XMAS3', null, null, null, null, null, null, null, true); -// $couponCumulative4 = $this->generateValidCoupon('XMAS4', null, null, null, null, null, null, null, false); -// -// $coupons = array($couponCumulative1, $couponCumulative2, $couponCumulative3, $couponCumulative4); -// /** @var FacadeInterface $stubCouponBaseAdapter */ -// $stubCouponBaseAdapter = $this->generateFakeAdapter($coupons, $cartTotalPrice, $checkoutTotalPrice); -// -// // When -// $sortedCoupons = PhpUnitUtils::callMethod( -// new CouponManager($stubCouponBaseAdapter), -// 'sortCoupons', -// array($coupons) -// ); -// -// // Then -// $expected = array($couponCumulative4); -// $actual = $sortedCoupons; -// -// $this->assertSame($expected, $actual, 'Coupon cumulative ignored'); -// } -// -// -// /** -// * Generate valid CouponRuleInterfaces -// * -// * @return array Array of ConditionManagerInterface -// */ -// public static function generateValidRules() -// { -// $adapter = new BaseFacade(); -// $rule1 = new AvailableForTotalAmount( -// $adapter, array( -// AvailableForTotalAmount::PARAM1_PRICE => new RuleValidator( -// Operators::SUPERIOR, -// new PriceParam( -// $adapter, 40.00, 'EUR' -// ) -// ) -// ) -// ); -// $rule2 = new AvailableForTotalAmount( -// $adapter, array( -// AvailableForTotalAmount::PARAM1_PRICE => new RuleValidator( -// Operators::INFERIOR, -// new PriceParam( -// $adapter, 400.00, 'EUR' -// ) -// ) -// ) -// ); -// $rules = new ConditionCollection(array($rule1, $rule2)); -// -// return $rules; -// } -// -// /** -// * Tears down the fixture, for example, closes a network connection. -// * This method is called after a test is executed. -// */ -// protected function tearDown() -// { -// } -// -// /** -// * Generate a fake Adapter -// * -// * @param array $coupons Coupons -// * @param float $cartTotalPrice Cart total price -// * @param float $checkoutTotalPrice Checkout total price -// * @param float $postagePrice Checkout postage price -// * -// * @return \PHPUnit_Framework_MockObject_MockObject -// */ -// public function generateFakeAdapter(array $coupons, $cartTotalPrice, $checkoutTotalPrice, $postagePrice = 6.00) -// { -// $stubCouponBaseAdapter = $this->getMock( -// 'Thelia\Coupon\BaseFacade', -// array( -// 'getCurrentCoupons', -// 'getCartTotalPrice', -// 'getCheckoutTotalPrice', -// 'getCheckoutPostagePrice' -// ), -// array() -// ); -// -// $stubCouponBaseAdapter->expects($this->any()) -// ->method('getCurrentCoupons') -// ->will($this->returnValue(($coupons))); -// -// // Return Cart product amount = $cartTotalPrice euros -// $stubCouponBaseAdapter->expects($this->any()) -// ->method('getCartTotalPrice') -// ->will($this->returnValue($cartTotalPrice)); -// -// // Return Checkout amount = $checkoutTotalPrice euros -// $stubCouponBaseAdapter->expects($this->any()) -// ->method('getCheckoutTotalPrice') -// ->will($this->returnValue($checkoutTotalPrice)); -// -// $stubCouponBaseAdapter->expects($this->any()) -// ->method('getCheckoutPostagePrice') -// ->will($this->returnValue($postagePrice)); -// -// return $stubCouponBaseAdapter; -// } -// -// /** -// * Generate valid CouponInterface -// * -// * @param string $code Coupon Code -// * @param string $title Coupon Title -// * @param string $shortDescription Coupon short -// * description -// * @param string $description Coupon description -// * @param float $amount Coupon discount -// * @param bool $isEnabled Is Coupon enabled -// * @param \DateTime $expirationDate Coupon expiration date -// * @param ConditionCollection $rules Coupon rules -// * @param bool $isCumulative If is cumulative -// * @param bool $isRemovingPostage If is removing postage -// * @param bool $isAvailableOnSpecialOffers If is available on -// * special offers or not -// * @param int $maxUsage How many time a Coupon -// * can be used -// * -// * @return CouponInterface -// */ -// public static function generateValidCoupon( -// $code = null, -// $title = null, -// $shortDescription = null, -// $description = null, -// $amount = null, -// $isEnabled = null, -// $expirationDate = null, -// $rules = null, -// $isCumulative = null, -// $isRemovingPostage = null, -// $isAvailableOnSpecialOffers = null, -// $maxUsage = null -// ) { -// $adapter = new BaseFacade(); -// if ($code === null) { -// $code = self::VALID_CODE; -// } -// if ($title === null) { -// $title = self::VALID_TITLE; -// } -// if ($shortDescription === null) { -// $shortDescription = self::VALID_SHORT_DESCRIPTION; -// } -// if ($description === null) { -// $description = self::VALID_DESCRIPTION; -// } -// if ($amount === null) { -// $amount = 10.00; -// } -// if ($isEnabled === null) { -// $isEnabled = true; -// } -// if ($isCumulative === null) { -// $isCumulative = true; -// } -// if ($isRemovingPostage === null) { -// $isRemovingPostage = false; -// } -// if ($isAvailableOnSpecialOffers === null) { -// $isAvailableOnSpecialOffers = true; -// } -// if ($maxUsage === null) { -// $maxUsage = 40; -// } -// -// if ($expirationDate === null) { -// $expirationDate = new \DateTime(); -// $expirationDate->setTimestamp(strtotime("today + 2 months")); -// } -// -// $coupon = new RemoveXAmount($adapter, $code, $title, $shortDescription, $description, $amount, $isCumulative, $isRemovingPostage, $isAvailableOnSpecialOffers, $isEnabled, $maxUsage, $expirationDate); -// -// if ($rules === null) { -// $rules = self::generateValidRules(); -// } -// -// $coupon->setRules($rules); -// -// return $coupon; -// } } diff --git a/core/lib/Thelia/Tests/Coupon/CouponRuleCollectionTest.php b/core/lib/Thelia/Tests/Coupon/CouponRuleCollectionTest.php index 2b19ba130..0745e9b98 100644 --- a/core/lib/Thelia/Tests/Coupon/CouponRuleCollectionTest.php +++ b/core/lib/Thelia/Tests/Coupon/CouponRuleCollectionTest.php @@ -23,11 +23,6 @@ namespace Thelia\Coupon; -use Thelia\Constraint\Validator\PriceParam; -use Thelia\Constraint\Validator\RuleValidator; -use Thelia\Constraint\Rule\AvailableForTotalAmount; -use Thelia\Constraint\Rule\Operators; - /** * Created by JetBrains PhpStorm. * Date: 8/19/13 @@ -48,39 +43,4 @@ class CouponRuleCollectionTest extends \PHPUnit_Framework_TestCase 'This test has not been implemented yet.' ); } -// /** -// * -// */ -// public function testRuleSerialisation() -// { -//// $rule1 = new AvailableForTotalAmount( -//// , array( -//// AvailableForTotalAmount::PARAM1_PRICE => new RuleValidator( -//// Operators::SUPERIOR, -//// new PriceParam( -//// , 40.00, 'EUR' -//// ) -//// ) -//// ) -//// ); -//// $rule2 = new AvailableForTotalAmount( -//// , array( -//// AvailableForTotalAmount::PARAM1_PRICE => new RuleValidator( -//// Operators::INFERIOR, -//// new PriceParam( -//// , 400.00, 'EUR' -//// ) -//// ) -//// ) -//// ); -//// $rules = new ConditionCollection(array($rule1, $rule2)); -//// -//// $serializedRules = base64_encode(serialize($rules)); -//// $unserializedRules = unserialize(base64_decode($serializedRules)); -//// -//// $expected = $rules; -//// $actual = $unserializedRules; -//// -//// $this->assertEquals($expected, $actual); -// } } diff --git a/core/lib/Thelia/Tests/Coupon/Type/RemoveXAmountTest.php b/core/lib/Thelia/Tests/Coupon/Type/RemoveXAmountTest.php index 80d6d459e..ee8ed3068 100644 --- a/core/lib/Thelia/Tests/Coupon/Type/RemoveXAmountTest.php +++ b/core/lib/Thelia/Tests/Coupon/Type/RemoveXAmountTest.php @@ -39,341 +39,27 @@ namespace Thelia\Coupon; */ class RemoveXAmountTest extends \PHPUnit_Framework_TestCase { + /** + * Sets up the fixture, for example, opens a network connection. + * This method is called before a test is executed. + */ + protected function setUp() + { + } + public function testSomething() { // Stop here and mark this test as incomplete. $this->markTestIncomplete( - 'This test has not been implemented yet.' + 'This coupon has not been implemented yet.' ); } -// /** -// * Sets up the fixture, for example, opens a network connection. -// * This method is called before a test is executed. -// */ -// protected function setUp() -// { -// -// } -// -// /** -// * Test if a Coupon is well displayed -// * -// * @covers Thelia\Coupon\type\RemoveXAmountManager::getCode -// * @covers Thelia\Coupon\type\RemoveXAmountManager::getTitle -// * @covers Thelia\Coupon\type\RemoveXAmountManager::getShortDescription -// * @covers Thelia\Coupon\type\RemoveXAmountManager::getDescription -// * -// */ -// public function testDisplay() -// { -// $coupon = CouponManagerTest::generateValidCoupon(null, null, null, null, null, null, null, null, true, true); -// -// $expected = CouponManagerTest::VALID_CODE; -// $actual = $coupon->getCode(); -// $this->assertEquals($expected, $actual); -// -// $expected = CouponManagerTest::VALID_TITLE; -// $actual = $coupon->getTitle(); -// $this->assertEquals($expected, $actual); -// -// $expected = CouponManagerTest::VALID_SHORT_DESCRIPTION; -// $actual = $coupon->getShortDescription(); -// $this->assertEquals($expected, $actual); -// -// $expected = CouponManagerTest::VALID_DESCRIPTION; -// $actual = $coupon->getDescription(); -// $this->assertEquals($expected, $actual); -// } -// -// /** -// * Test if a Coupon can be Cumulative -// * -// * @covers Thelia\Coupon\type\RemoveXAmountManager::isCumulative -// * -// */ -// public function testIsCumulative() -// { -// $coupon = CouponManagerTest::generateValidCoupon(null, null, null, null, null, null, null, null, true, true); -// -// $actual = $coupon->isCumulative(); -// $this->assertTrue($actual); -// } -// -// /** -// * Test if a Coupon can be non cumulative -// * -// * @covers Thelia\Coupon\type\RemoveXAmountManager::isCumulative -// * -// */ -// public function testIsNotCumulative() -// { -// $coupon = CouponManagerTest::generateValidCoupon(null, null, null, null, null, null, null, null, false, false); -// -// $actual = $coupon->isCumulative(); -// $this->assertFalse($actual); -// } -// -// -// /** -// * Test if a Coupon can remove postage -// * -// * @covers Thelia\Coupon\type\RemoveXAmountManager::isRemovingPostage -// * -// */ -// public function testIsRemovingPostage() -// { -// $coupon = CouponManagerTest::generateValidCoupon(null, null, null, null, null, null, null, null, true, true); -// -// $actual = $coupon->isRemovingPostage(); -// $this->assertTrue($actual); -// } -// -// /** -// * Test if a Coupon won't remove postage if not set to -// * -// * @covers Thelia\Coupon\type\RemoveXAmountManager::isRemovingPostage -// */ -// public function testIsNotRemovingPostage() -// { -// $coupon = CouponManagerTest::generateValidCoupon(null, null, null, null, null, null, null, null, false, false); -// -// $actual = $coupon->isRemovingPostage(); -// $this->assertFalse($actual); -// } -// -// -// /** -// * Test if a Coupon has the effect expected (discount 10euros) -// * -// * @covers Thelia\Coupon\type\RemoveXAmountManager::getEffect -// */ -// public function testGetEffect() -// { -// $adapter = new BaseFacade(); -// $coupon = CouponManagerTest::generateValidCoupon(null, null, null, null, null, null, null, null, false, false); -// -// $expected = 10; -// $actual = $coupon->getDiscount(); -// $this->assertEquals($expected, $actual); -// } -// -// /** -// * Test Coupon rule setter -// * -// * @covers Thelia\Coupon\type\RemoveXAmountManager::setRules -// * @covers Thelia\Coupon\type\RemoveXAmountManager::getRules -// */ -// public function testSetRulesValid() -// { -// // Given -// $rule0 = $this->generateValidRuleAvailableForTotalAmountOperatorTo( -// Operators::EQUAL, -// 20.00 -// ); -// $rule1 = $this->generateValidRuleAvailableForTotalAmountOperatorTo( -// Operators::INFERIOR, -// 100.23 -// ); -// $rule2 = $this->generateValidRuleAvailableForTotalAmountOperatorTo( -// Operators::SUPERIOR, -// 421.23 -// ); -// -// $coupon = CouponManagerTest::generateValidCoupon(null, null, null, null, null, null, null, null, false, false); -// -// // When -// $coupon->setRules(new ConditionCollection(array($rule0, $rule1, $rule2))); -// -// // Then -// $expected = 3; -// $this->assertCount($expected, $coupon->getRules()->getRules()); -// } -// -// /** -// * Test Coupon rule setter -// * -// * @covers Thelia\Coupon\type\RemoveXAmountManager::setRules -// * @expectedException \Thelia\Exception\InvalidConditionException -// * -// */ -// public function testSetRulesInvalid() -// { -// // Given -// $rule0 = $this->generateValidRuleAvailableForTotalAmountOperatorTo( -// Operators::EQUAL, -// 20.00 -// ); -// $rule1 = $this->generateValidRuleAvailableForTotalAmountOperatorTo( -// Operators::INFERIOR, -// 100.23 -// ); -// $rule2 = $this; -// -// $coupon = CouponManagerTest::generateValidCoupon(null, null, null, null, null, null, null, null, false, false); -// -// // When -// $coupon->setRules(new ConditionCollection(array($rule0, $rule1, $rule2))); -// } -// -// /** -// * Test Coupon effect for rule Total Amount < 400 -// * -// * @covers Thelia\Coupon\type\RemoveXAmountManager::getEffect -// * -// */ -// public function testGetEffectIfTotalAmountInferiorTo400Valid() -// { -// // Given -// $adapter = new BaseFacade(); -// $rule0 = $this->generateValidRuleAvailableForTotalAmountOperatorTo( -// Operators::INFERIOR, -// 400.00 -// ); -// $coupon = CouponManagerTest::generateValidCoupon(null, null, null, null, null, null, null, null, false, false); -// -// // When -// $coupon->setRules(new ConditionCollection(array($rule0))); -// -// // Then -// $expected = 10.00; -// $actual = $coupon->getDiscount(); -// $this->assertEquals($expected, $actual); -// } -// -// /** -// * Test Coupon effect for rule Total Amount <= 400 -// * -// * @covers Thelia\Coupon\type\RemoveXAmountManager::getEffect -// * -// */ -// public function testGetEffectIfTotalAmountInferiorOrEqualTo400Valid() -// { -// // Given -// $adapter = new BaseFacade(); -// $rule0 = $this->generateValidRuleAvailableForTotalAmountOperatorTo( -// Operators::INFERIOR_OR_EQUAL, -// 400.00 -// ); -// $coupon = CouponManagerTest::generateValidCoupon(null, null, null, null, null, null, null, null, false, false); -// -// // When -// $coupon->setRules(new ConditionCollection(array($rule0))); -// -// // Then -// $expected = 10.00; -// $actual = $coupon->getDiscount(); -// $this->assertEquals($expected, $actual); -// } -// -// /** -// * Test Coupon effect for rule Total Amount == 400 -// * -// * @covers Thelia\Coupon\type\RemoveXAmountManager::getEffect -// * -// */ -// public function testGetEffectIfTotalAmountEqualTo400Valid() -// { -// // Given -// $adapter = new BaseFacade(); -// $rule0 = $this->generateValidRuleAvailableForTotalAmountOperatorTo( -// Operators::EQUAL, -// 400.00 -// ); -// $coupon = CouponManagerTest::generateValidCoupon(null, null, null, null, null, null, null, null, false, false); -// -// // When -// $coupon->setRules(new ConditionCollection(array($rule0))); -// -// // Then -// $expected = 10.00; -// $actual = $coupon->getDiscount(); -// $this->assertEquals($expected, $actual); -// } -// -// /** -// * Test Coupon effect for rule Total Amount >= 400 -// * -// * @covers Thelia\Coupon\type\RemoveXAmountManager::getEffect -// * -// */ -// public function testGetEffectIfTotalAmountSuperiorOrEqualTo400Valid() -// { -// // Given -// $adapter = new BaseFacade(); -// $rule0 = $this->generateValidRuleAvailableForTotalAmountOperatorTo( -// Operators::SUPERIOR_OR_EQUAL, -// 400.00 -// ); -// $coupon = CouponManagerTest::generateValidCoupon(null, null, null, null, null, null, null, null, false, false); -// -// // When -// $coupon->setRules(new ConditionCollection(array($rule0))); -// -// // Then -// $expected = 10.00; -// $actual = $coupon->getDiscount(); -// $this->assertEquals($expected, $actual); -// } -// -// /** -// * Test Coupon effect for rule Total Amount > 400 -// * -// * @covers Thelia\Coupon\type\RemoveXAmountManager::getEffect -// * -// */ -// public function testGetEffectIfTotalAmountSuperiorTo400Valid() -// { -// // Given -// $adapter = new BaseFacade(); -// $rule0 = $this->generateValidRuleAvailableForTotalAmountOperatorTo( -// Operators::SUPERIOR, -// 400.00 -// ); -// $coupon = CouponManagerTest::generateValidCoupon(null, null, null, null, null, null, null, null, false, false); -// -// // When -// $coupon->setRules(new ConditionCollection(array($rule0))); -// -// // Then -// $expected = 10.00; -// $actual = $coupon->getDiscount(); -// $this->assertEquals($expected, $actual); -// } -// -// -// -// /** -// * Tears down the fixture, for example, closes a network connection. -// * This method is called after a test is executed. -// */ -// protected function tearDown() -// { -// } -// -// /** -// * Generate valid rule AvailableForTotalAmount -// * according to given operator and amount -// * -// * @param string $operator Operators::CONST -// * @param float $amount Amount with 2 decimals -// * -// * @return AvailableForTotalAmount -// */ -// protected function generateValidRuleAvailableForTotalAmountOperatorTo($operator, $amount) -// { -// $adapter = new BaseFacade(); -// $validators = array( -// AvailableForTotalAmount::PARAM1_PRICE => new RuleValidator( -// $operator, -// new PriceParam( -// $adapter, -// $amount, -// 'EUR' -// ) -// ) -// ); -// -// return new AvailableForTotalAmount($adapter, $validators); -// } + /** + * Tears down the fixture, for example, closes a network connection. + * This method is called after a test is executed. + */ + protected function tearDown() + { + } } diff --git a/core/lib/Thelia/Tests/Coupon/Type/RemoveXPercentTest.php b/core/lib/Thelia/Tests/Coupon/Type/RemoveXPercentTest.php index c217326ed..bbb0c24a3 100644 --- a/core/lib/Thelia/Tests/Coupon/Type/RemoveXPercentTest.php +++ b/core/lib/Thelia/Tests/Coupon/Type/RemoveXPercentTest.php @@ -41,412 +41,27 @@ use PHPUnit_Framework_TestCase; class RemoveXPercentTest extends \PHPUnit_Framework_TestCase { + /** + * Sets up the fixture, for example, opens a network connection. + * This method is called before a test is executed. + */ + protected function setUp() + { + } + public function testSomething() { - // Stop here and mark this test as incomplete. $this->markTestIncomplete( - 'This test has not been implemented yet.' + 'This coupon has not been implemented yet.' ); } -// /** -// * Sets up the fixture, for example, opens a network connection. -// * This method is called before a test is executed. -// */ -// protected function setUp() -// { -// } -// -// /** -// * Test if a Coupon can be Cumulative -// * -// * @covers Thelia\Coupon\type\RemoveXPercentManager::isCumulative -// * -// */ -// public function testIsCumulative() -// { -// $coupon = $this->generateValidCoupon(null, null, null, null, null, null, null, null, true, true); -// -// $actual = $coupon->isCumulative(); -// $this->assertTrue($actual); -// } -// -// /** -// * Test if a Coupon can be non cumulative -// * -// * @covers Thelia\Coupon\type\RemoveXPercentManager::isCumulative -// * -// */ -// public function testIsNotCumulative() -// { -// $coupon = $this->generateValidCoupon(null, null, null, null, null, null, null, null, false, false); -// -// $actual = $coupon->isCumulative(); -// $this->assertFalse($actual); -// } -// -// -// /** -// * Test if a Coupon can remove postage -// * -// * @covers Thelia\Coupon\type\RemoveXPercentManager::isRemovingPostage -// * -// */ -// public function testIsRemovingPostage() -// { -// $coupon = $this->generateValidCoupon(null, null, null, null, null, null, null, null, true, true); -// -// $actual = $coupon->isRemovingPostage(); -// $this->assertTrue($actual); -// } -// -// /** -// * Test if a Coupon won't remove postage if not set to -// * -// * @covers Thelia\Coupon\type\RemoveXPercentManager::isRemovingPostage -// */ -// public function testIsNotRemovingPostage() -// { -// $coupon = $this->generateValidCoupon(null, null, null, null, null, null, null, null, false, false); -// -// $actual = $coupon->isRemovingPostage(); -// $this->assertFalse($actual); -// } -// -// -// /** -// * Test if a Coupon has the effect expected (discount 10euros) -// * -// * @covers Thelia\Coupon\type\RemoveXPercentManager::getEffect -// */ -// public function testGetEffect() -// { -// $adapter = $this->generateFakeAdapter(245); -// $coupon = $this->generateValidCoupon(null, null, null, null, null, null, null, null, false, false); -// -// $expected = 24.50; -// $actual = $coupon->getDiscount($adapter); -// $this->assertEquals($expected, $actual); -// } -// -// /** -// * Test Coupon rule setter -// * -// * @covers Thelia\Coupon\type\RemoveXPercentManager::setRules -// * @covers Thelia\Coupon\type\RemoveXPercentManager::getRules -// */ -// public function testSetRulesValid() -// { -// // Given -// $rule0 = $this->generateValidRuleAvailableForTotalAmountOperatorTo( -// Operators::EQUAL, -// 20.00 -// ); -// $rule1 = $this->generateValidRuleAvailableForTotalAmountOperatorTo( -// Operators::INFERIOR, -// 100.23 -// ); -// $rule2 = $this->generateValidRuleAvailableForTotalAmountOperatorTo( -// Operators::SUPERIOR, -// 421.23 -// ); -// -// $coupon = $this->generateValidCoupon(null, null, null, null, null, null, null, null, false, false); -// -// // When -// $coupon->setRules(new ConditionCollection(array($rule0, $rule1, $rule2))); -// -// // Then -// $expected = 3; -// $this->assertCount($expected, $coupon->getRules()->getRules()); -// } -// -// /** -// * Test Coupon rule setter -// * -// * @covers Thelia\Coupon\type\RemoveXPercentManager::setRules -// * @expectedException \Thelia\Exception\InvalidConditionException -// * -// */ -// public function testSetRulesInvalid() -// { -// // Given -// $rule0 = $this->generateValidRuleAvailableForTotalAmountOperatorTo( -// Operators::EQUAL, -// 20.00 -// ); -// $rule1 = $this->generateValidRuleAvailableForTotalAmountOperatorTo( -// Operators::INFERIOR, -// 100.23 -// ); -// $rule2 = $this; -// -// $coupon = $this->generateValidCoupon(null, null, null, null, null, null, null, null, false, false); -// -// // When -// $coupon->setRules(new ConditionCollection(array($rule0, $rule1, $rule2))); -// } -// -// /** -// * Test Coupon effect for rule Total Amount < 400 -// * -// * @covers Thelia\Coupon\type\RemoveXPercentManager::getEffect -// * -// */ -// public function testGetEffectIfTotalAmountInferiorTo400Valid() -// { -// // Given -// $rule0 = $this->generateValidRuleAvailableForTotalAmountOperatorTo( -// Operators::INFERIOR, -// 400.00 -// ); -// $coupon = $this->generateValidCoupon(null, null, null, null, null, null, null, null, false, false); -// -// // When -// $coupon->setRules(new ConditionCollection(array($rule0))); -// -// // Then -// $expected = 24.50; -// $actual = $coupon->getDiscount(); -// $this->assertEquals($expected, $actual); -// } -// -// /** -// * Test Coupon effect for rule Total Amount <= 400 -// * -// * @covers Thelia\Coupon\type\RemoveXPercentManager::getEffect -// * -// */ -// public function testGetEffectIfTotalAmountInferiorOrEqualTo400Valid() -// { -// // Given -// $rule0 = $this->generateValidRuleAvailableForTotalAmountOperatorTo( -// Operators::INFERIOR_OR_EQUAL, -// 400.00 -// ); -// $coupon = $this->generateValidCoupon(null, null, null, null, null, null, null, null, false, false); -// -// // When -// $coupon->setRules(new ConditionCollection(array($rule0))); -// -// // Then -// $expected = 24.50; -// $actual = $coupon->getDiscount(); -// $this->assertEquals($expected, $actual); -// } -// -// /** -// * Test Coupon effect for rule Total Amount == 400 -// * -// * @covers Thelia\Coupon\type\RemoveXPercentManager::getEffect -// * -// */ -// public function testGetEffectIfTotalAmountEqualTo400Valid() -// { -// // Given -// $rule0 = $this->generateValidRuleAvailableForTotalAmountOperatorTo( -// Operators::EQUAL, -// 400.00 -// ); -// $coupon = $this->generateValidCoupon(null, null, null, null, null, null, null, null, false, false); -// -// // When -// $coupon->setRules(new ConditionCollection(array($rule0))); -// -// // Then -// $expected = 24.50; -// $actual = $coupon->getDiscount(); -// $this->assertEquals($expected, $actual); -// } -// -// /** -// * Test Coupon effect for rule Total Amount >= 400 -// * -// * @covers Thelia\Coupon\type\RemoveXPercentManager::getEffect -// * -// */ -// public function testGetEffectIfTotalAmountSuperiorOrEqualTo400Valid() -// { -// // Given -// $rule0 = $this->generateValidRuleAvailableForTotalAmountOperatorTo( -// Operators::SUPERIOR_OR_EQUAL, -// 400.00 -// ); -// $coupon = $this->generateValidCoupon(null, null, null, null, null, null, null, null, false, false); -// -// // When -// $coupon->setRules(new ConditionCollection(array($rule0))); -// -// // Then -// $expected = 24.50; -// $actual = $coupon->getDiscount(); -// $this->assertEquals($expected, $actual); -// } -// -// /** -// * Test Coupon effect for rule Total Amount > 400 -// * -// * @covers Thelia\Coupon\type\RemoveXPercentManager::getEffect -// * -// */ -// public function testGetEffectIfTotalAmountSuperiorTo400Valid() -// { -// // Given -// $rule0 = $this->generateValidRuleAvailableForTotalAmountOperatorTo( -// Operators::SUPERIOR, -// 400.00 -// ); -// $coupon = $this->generateValidCoupon(null, null, null, null, null, null, null, null, false, false); -// -// // When -// $coupon->setRules(new ConditionCollection(array($rule0))); -// -// // Then -// $expected = 24.50; -// $actual = $coupon->getDiscount(); -// $this->assertEquals($expected, $actual); -// } -// -// /** -// * Generate valid CouponInterface -// * -// * @param string $code Coupon Code -// * @param string $title Coupon Title -// * @param string $shortDescription Coupon short -// * description -// * @param string $description Coupon description -// * @param float $amount Coupon discount -// * @param bool $isEnabled Is Coupon enabled -// * @param \DateTime $expirationDate Coupon expiration date -// * @param ConditionCollection $rules Coupon rules -// * @param bool $isCumulative If is cumulative -// * @param bool $isRemovingPostage If is removing postage -// * @param bool $isAvailableOnSpecialOffers If is available on -// * special offers or not -// * @param int $maxUsage How many time a Coupon -// * can be used -// * -// * @return CouponInterface -// */ -// public function generateValidCoupon( -// $code = null, -// $title = null, -// $shortDescription = null, -// $description = null, -// $percent = null, -// $isEnabled = null, -// $expirationDate = null, -// $rules = null, -// $isCumulative = null, -// $isRemovingPostage = null, -// $isAvailableOnSpecialOffers = null, -// $maxUsage = null -// ) { -// $adapter = $this->generateFakeAdapter(245); -// -// if ($code === null) { -// $code = CouponManagerTest::VALID_CODE; -// } -// if ($title === null) { -// $title = CouponManagerTest::VALID_TITLE; -// } -// if ($shortDescription === null) { -// $shortDescription = CouponManagerTest::VALID_SHORT_DESCRIPTION; -// } -// if ($description === null) { -// $description = CouponManagerTest::VALID_DESCRIPTION; -// } -// if ($percent === null) { -// $percent = 10.00; -// } -// if ($isEnabled === null) { -// $isEnabled = true; -// } -// if ($isCumulative === null) { -// $isCumulative = true; -// } -// if ($isRemovingPostage === null) { -// $isRemovingPostage = false; -// } -// if ($isAvailableOnSpecialOffers === null) { -// $isAvailableOnSpecialOffers = true; -// } -// if ($maxUsage === null) { -// $maxUsage = 40; -// } -// -// if ($expirationDate === null) { -// $expirationDate = new \DateTime(); -// $expirationDate->setTimestamp(strtotime("today + 2 months")); -// } -// -// $coupon = new RemoveXPercent($adapter, $code, $title, $shortDescription, $description, $percent, $isCumulative, $isRemovingPostage, $isAvailableOnSpecialOffers, $isEnabled, $maxUsage, $expirationDate); -// -// if ($rules === null) { -// $rules = CouponManagerTest::generateValidRules(); -// } -// -// $coupon->setRules($rules); -// -// return $coupon; -// } -// -// -// /** -// * Generate valid rule AvailableForTotalAmount -// * according to given operator and amount -// * -// * @param string $operator Operators::CONST -// * @param float $amount Amount with 2 decimals -// * -// * @return AvailableForTotalAmount -// */ -// protected function generateValidRuleAvailableForTotalAmountOperatorTo($operator, $amount) -// { -// $adapter = new BaseFacade(); -// $validators = array( -// AvailableForTotalAmount::PARAM1_PRICE => new RuleValidator( -// $operator, -// new PriceParam( -// $adapter, -// $amount, -// 'EUR' -// ) -// ) -// ); -// -// return new AvailableForTotalAmount($adapter, $validators); -// } -// -// /** -// * Generate a fake Adapter -// * -// * @param float $cartTotalPrice Cart total price -// * -// * @return \PHPUnit_Framework_MockObject_MockObject -// */ -// public function generateFakeAdapter($cartTotalPrice) -// { -// $stubCouponBaseAdapter = $this->getMock( -// 'Thelia\Coupon\BaseFacade', -// array( -// 'getCartTotalPrice' -// ), -// array() -// ); -// -// $stubCouponBaseAdapter->expects($this->any()) -// ->method('getCartTotalPrice') -// ->will($this->returnValue(($cartTotalPrice))); -// -// return $stubCouponBaseAdapter; -// } -// -// /** -// * Tears down the fixture, for example, closes a network connection. -// * This method is called after a test is executed. -// */ -// protected function tearDown() -// { -// } + + /** + * Tears down the fixture, for example, closes a network connection. + * This method is called after a test is executed. + */ + protected function tearDown() + { + } } From c94fa9bc24ec189bda2f31f446a20bf77b05242b Mon Sep 17 00:00:00 2001 From: Etienne Roudeix Date: Tue, 22 Oct 2013 15:04:06 +0200 Subject: [PATCH 14/50] permission management --- core/lib/Thelia/Command/GenerateResources.php | 31 ++- core/lib/Thelia/Config/Resources/config.xml | 1 + .../Controller/Admin/BaseAdminController.php | 2 +- .../Thelia/Core/Security/AccessManager.php | 5 +- core/lib/Thelia/Core/Template/Loop/Admin.php | 21 +- .../lib/Thelia/Core/Template/Loop/Profile.php | 22 +- .../Thelia/Core/Template/Loop/Resource.php | 115 ++++++++++ install/insert.sql | 54 ++++- templates/admin/default/profile-edit.html | 213 +++++------------- 9 files changed, 278 insertions(+), 186 deletions(-) create mode 100755 core/lib/Thelia/Core/Template/Loop/Resource.php diff --git a/core/lib/Thelia/Command/GenerateResources.php b/core/lib/Thelia/Command/GenerateResources.php index 217672797..46924ac99 100644 --- a/core/lib/Thelia/Command/GenerateResources.php +++ b/core/lib/Thelia/Command/GenerateResources.php @@ -29,6 +29,7 @@ use Symfony\Component\Console\Output\OutputInterface; use Thelia\Command\ContainerAwareCommand; use Thelia\Model\Admin; +use Thelia\Model\Map\ResourceI18nTableMap; use Thelia\Model\Map\ResourceTableMap; class GenerateResources extends ContainerAwareCommand @@ -46,7 +47,7 @@ class GenerateResources extends ContainerAwareCommand 'output', null, InputOption::VALUE_OPTIONAL, - 'Output format amid (string, sql)', + 'Output format amid (string, sql, sql-i18n)', null ) ; @@ -55,7 +56,7 @@ class GenerateResources extends ContainerAwareCommand protected function execute(InputInterface $input, OutputInterface $output) { - $class = new \ReflectionClass('Thelia\Core\Event\AdminResources'); + $class = new \ReflectionClass('Thelia\Core\Security\Resource\AdminResources'); $constants = $class->getConstants(); @@ -69,12 +70,36 @@ class GenerateResources extends ContainerAwareCommand $output->writeln( 'INSERT INTO ' . ResourceTableMap::TABLE_NAME . ' (`id`, `code`, `created_at`, `updated_at`) VALUES ' ); + $compteur = 0; foreach($constants as $constant => $value) { if($constant == 'SUPERADMINISTRATOR') { continue; } + $compteur++; $output->writeln( - "(NULL, '$value', NOW(), NOW())" . ($constant === key( array_slice( $constants, -1, 1, TRUE ) ) ? '' : ',') + "($compteur, '$value', NOW(), NOW())" . ($constant === key( array_slice( $constants, -1, 1, true ) ) ? ';' : ',') + ); + } + break; + case 'sql-i18n': + $output->writeln( + 'INSERT INTO ' . ResourceI18nTableMap::TABLE_NAME . ' (`id`, `locale`, `title`) VALUES ' + ); + $compteur = 0; + foreach($constants as $constant => $value) { + if($constant == 'SUPERADMINISTRATOR') { + continue; + } + + $compteur++; + + $title = ucwords( str_replace('.', ' / ', str_replace('admin.', '', $value) ) ); + + $output->writeln( + "($compteur, 'en_US', '$title')," + ); + $output->writeln( + "($compteur, 'fr_FR', '$title')" . ($constant === key( array_slice( $constants, -1, 1, true ) ) ? ';' : ',') ); } break; diff --git a/core/lib/Thelia/Config/Resources/config.xml b/core/lib/Thelia/Config/Resources/config.xml index 493f9fbf8..9e7d86c3d 100755 --- a/core/lib/Thelia/Config/Resources/config.xml +++ b/core/lib/Thelia/Config/Resources/config.xml @@ -35,6 +35,7 @@ + diff --git a/core/lib/Thelia/Controller/Admin/BaseAdminController.php b/core/lib/Thelia/Controller/Admin/BaseAdminController.php index 186727ed5..fdbb6c1c4 100755 --- a/core/lib/Thelia/Controller/Admin/BaseAdminController.php +++ b/core/lib/Thelia/Controller/Admin/BaseAdminController.php @@ -128,7 +128,7 @@ class BaseAdminController extends BaseController } // Log the problem - $this->adminLogAppend("User is not granted for permissions %s", implode(", ", $permArr)); + $this->adminLogAppend("User is not granted for resources %s with accesses %s", implode(", ", $resources), implode(", ", $accesses)); // Generate the proper response $response = new Response(); diff --git a/core/lib/Thelia/Core/Security/AccessManager.php b/core/lib/Thelia/Core/Security/AccessManager.php index cdf7105a8..229c07a00 100644 --- a/core/lib/Thelia/Core/Security/AccessManager.php +++ b/core/lib/Thelia/Core/Security/AccessManager.php @@ -63,8 +63,9 @@ class AccessManager $this->accessValue = $accessValue; foreach($this->accessPows as $type => $value) { - if($accessValue >= $value) { - $accessValue -= $value; + $pow = pow(2, $value); + if($accessValue >= $pow) { + $accessValue -= $pow; $this->accessGranted[$type] = true; } else { $this->accessGranted[$type] = false; diff --git a/core/lib/Thelia/Core/Template/Loop/Admin.php b/core/lib/Thelia/Core/Template/Loop/Admin.php index fe4b280ad..378bcaf31 100755 --- a/core/lib/Thelia/Core/Template/Loop/Admin.php +++ b/core/lib/Thelia/Core/Template/Loop/Admin.php @@ -25,6 +25,7 @@ namespace Thelia\Core\Template\Loop; use Propel\Runtime\ActiveQuery\Criteria; use Thelia\Core\Template\Element\BaseI18nLoop; +use Thelia\Core\Template\Element\BaseLoop; use Thelia\Core\Template\Element\LoopResult; use Thelia\Core\Template\Element\LoopResultRow; @@ -44,7 +45,7 @@ use Thelia\Type\BooleanOrBothType; * @package Thelia\Core\Template\Loop * @author Etienne Roudeix */ -class Admin extends BaseI18nLoop +class Admin extends BaseLoop { public $timestampable = true; @@ -83,17 +84,17 @@ class Admin extends BaseI18nLoop $search->orderByFirstname(Criteria::ASC); /* perform search */ - $features = $this->search($search, $pagination); + $admins = $this->search($search, $pagination); - $loopResult = new LoopResult($features); + $loopResult = new LoopResult($admins); - foreach ($features as $feature) { - $loopResultRow = new LoopResultRow($loopResult, $feature, $this->versionable, $this->timestampable, $this->countable); - $loopResultRow->set("ID", $feature->getId()) - ->set("PROFILE",$feature->getProfileId()) - ->set("FIRSTNAME",$feature->getFirstname()) - ->set("LASTNAME",$feature->getLastname()) - ->set("LOGIN",$feature->getLogin()) + foreach ($admins as $admin) { + $loopResultRow = new LoopResultRow($loopResult, $admin, $this->versionable, $this->timestampable, $this->countable); + $loopResultRow->set("ID", $admin->getId()) + ->set("PROFILE",$admin->getProfileId()) + ->set("FIRSTNAME",$admin->getFirstname()) + ->set("LASTNAME",$admin->getLastname()) + ->set("LOGIN",$admin->getLogin()) ; $loopResult->addRow($loopResultRow); diff --git a/core/lib/Thelia/Core/Template/Loop/Profile.php b/core/lib/Thelia/Core/Template/Loop/Profile.php index a7a2e170e..4ac43d25a 100755 --- a/core/lib/Thelia/Core/Template/Loop/Profile.php +++ b/core/lib/Thelia/Core/Template/Loop/Profile.php @@ -79,20 +79,20 @@ class Profile extends BaseI18nLoop $search->orderById(Criteria::ASC); /* perform search */ - $features = $this->search($search, $pagination); + $profiles = $this->search($search, $pagination); - $loopResult = new LoopResult($features); + $loopResult = new LoopResult($profiles); - foreach ($features as $feature) { - $loopResultRow = new LoopResultRow($loopResult, $feature, $this->versionable, $this->timestampable, $this->countable); - $loopResultRow->set("ID", $feature->getId()) - ->set("IS_TRANSLATED",$feature->getVirtualColumn('IS_TRANSLATED')) + foreach ($profiles as $profile) { + $loopResultRow = new LoopResultRow($loopResult, $profile, $this->versionable, $this->timestampable, $this->countable); + $loopResultRow->set("ID", $profile->getId()) + ->set("IS_TRANSLATED",$profile->getVirtualColumn('IS_TRANSLATED')) ->set("LOCALE",$locale) - ->set("CODE",$feature->getCode()) - ->set("TITLE",$feature->getVirtualColumn('i18n_TITLE')) - ->set("CHAPO", $feature->getVirtualColumn('i18n_CHAPO')) - ->set("DESCRIPTION", $feature->getVirtualColumn('i18n_DESCRIPTION')) - ->set("POSTSCRIPTUM", $feature->getVirtualColumn('i18n_POSTSCRIPTUM')) + ->set("CODE",$profile->getCode()) + ->set("TITLE",$profile->getVirtualColumn('i18n_TITLE')) + ->set("CHAPO", $profile->getVirtualColumn('i18n_CHAPO')) + ->set("DESCRIPTION", $profile->getVirtualColumn('i18n_DESCRIPTION')) + ->set("POSTSCRIPTUM", $profile->getVirtualColumn('i18n_POSTSCRIPTUM')) ; $loopResult->addRow($loopResultRow); diff --git a/core/lib/Thelia/Core/Template/Loop/Resource.php b/core/lib/Thelia/Core/Template/Loop/Resource.php new file mode 100755 index 000000000..949cb5e00 --- /dev/null +++ b/core/lib/Thelia/Core/Template/Loop/Resource.php @@ -0,0 +1,115 @@ +. */ +/* */ +/*************************************************************************************/ + +namespace Thelia\Core\Template\Loop; + +use Propel\Runtime\ActiveQuery\Criteria; +use Thelia\Core\Security\AccessManager; +use Thelia\Core\Template\Element\BaseI18nLoop; +use Thelia\Core\Template\Element\LoopResult; +use Thelia\Core\Template\Element\LoopResultRow; + +use Thelia\Core\Template\Loop\Argument\ArgumentCollection; +use Thelia\Core\Template\Loop\Argument\Argument; + +use Thelia\Model\ResourceQuery; +use Thelia\Type; +use Thelia\Type\BooleanOrBothType; + +/** + * + * Resource loop + * + * + * Class Resource + * @package Thelia\Core\Template\Loop + * @author Etienne Roudeix + */ +class Resource extends BaseI18nLoop +{ + public $timestampable = true; + + /** + * @return ArgumentCollection + */ + protected function getArgDefinitions() + { + return new ArgumentCollection( + Argument::createIntTypeArgument('profile') + ); + } + + /** + * @param $pagination + * + * @return \Thelia\Core\Template\Element\LoopResult + */ + public function exec(&$pagination) + { + $search = ResourceQuery::create(); + + /* manage translations */ + $locale = $this->configureI18nProcessing($search); + + $profile = $this->getProfile(); + + if (null !== $profile) { + $search->leftJoinProfileResource('profile_resource') + ->withColumn('profile_resource.access', 'access'); + //$search->filterById($id, Criteria::IN); + } + + $search->orderById(Criteria::ASC); + + /* perform search */ + $resources = $this->search($search, $pagination); + + $loopResult = new LoopResult($resources); + + foreach ($resources as $resource) { + $loopResultRow = new LoopResultRow($loopResult, $resource, $this->versionable, $this->timestampable, $this->countable); + $loopResultRow->set("ID", $resource->getId()) + ->set("IS_TRANSLATED",$resource->getVirtualColumn('IS_TRANSLATED')) + ->set("LOCALE",$locale) + ->set("CODE",$resource->getCode()) + ->set("TITLE",$resource->getVirtualColumn('i18n_TITLE')) + ->set("CHAPO", $resource->getVirtualColumn('i18n_CHAPO')) + ->set("DESCRIPTION", $resource->getVirtualColumn('i18n_DESCRIPTION')) + ->set("POSTSCRIPTUM", $resource->getVirtualColumn('i18n_POSTSCRIPTUM')) + ; + + if (null !== $profile) { + $accessValue = $resource->getVirtualColumn('access'); + $manager = new AccessManager($accessValue); + $loopResultRow->set("VIEWABLE", $manager->can(AccessManager::VIEW)) + ->set("CREATABLE", $manager->can(AccessManager::CREATE)) + ->set("UPDATABLE", $manager->can(AccessManager::UPDATE)) + ->set("DELETABLE", $manager->can(AccessManager::DELETE)); + } + + $loopResult->addRow($loopResultRow); + } + + return $loopResult; + } +} diff --git a/install/insert.sql b/install/insert.sql index 80ab5a844..b4b7a764f 100755 --- a/install/insert.sql +++ b/install/insert.sql @@ -1193,7 +1193,6 @@ INSERT INTO `order_status_i18n` (`id`, `locale`, `title`, `description`, `chapo` (5, 'en_US', 'Canceled', '', '', ''), (5, 'fr_FR', 'Annulée', '', '', ''); - /** generated with command : php Thelia thelia:generate-resources --output sql */ @@ -1220,4 +1219,55 @@ INSERT INTO resource (`id`, `code`, `created_at`, `updated_at`) VALUES (NULL, 'admin.configuration.profile', NOW(), NOW()), (NULL, 'admin.configuration.shipping-zone', NOW(), NOW()), (NULL, 'admin.configuration.tax', NOW(), NOW()), -(NULL, 'admin.configuration.template', NOW(), NOW()) +(NULL, 'admin.configuration.template', NOW(), NOW()); + +/** +generated with command : php Thelia thelia:generate-resources --output sql-i18n + */ +INSERT INTO resource_i18n (`id`, `locale`, `title`) VALUES +(1, 'en_US', 'Address'), +(1, 'fr_FR', 'Address'), +(2, 'en_US', 'Configuration / Admin'), +(2, 'fr_FR', 'Configuration / Admin'), +(3, 'en_US', 'Configuration / Area'), +(3, 'fr_FR', 'Configuration / Area'), +(4, 'en_US', 'Configuration / Attribute'), +(4, 'fr_FR', 'Configuration / Attribute'), +(5, 'en_US', 'Category'), +(5, 'fr_FR', 'Category'), +(6, 'en_US', 'Configuration'), +(6, 'fr_FR', 'Configuration'), +(7, 'en_US', 'Content'), +(7, 'fr_FR', 'Content'), +(8, 'en_US', 'Configuration / Country'), +(8, 'fr_FR', 'Configuration / Country'), +(9, 'en_US', 'Coupon'), +(9, 'fr_FR', 'Coupon'), +(10, 'en_US', 'Configuration / Currency'), +(10, 'fr_FR', 'Configuration / Currency'), +(11, 'en_US', 'Customer'), +(11, 'fr_FR', 'Customer'), +(12, 'en_US', 'Configuration / Feature'), +(12, 'fr_FR', 'Configuration / Feature'), +(13, 'en_US', 'Folder'), +(13, 'fr_FR', 'Folder'), +(14, 'en_US', 'Configuration / Language'), +(14, 'fr_FR', 'Configuration / Language'), +(15, 'en_US', 'Configuration / Mailing-system'), +(15, 'fr_FR', 'Configuration / Mailing-system'), +(16, 'en_US', 'Configuration / Message'), +(16, 'fr_FR', 'Configuration / Message'), +(17, 'en_US', 'Configuration / Module'), +(17, 'fr_FR', 'Configuration / Module'), +(18, 'en_US', 'Order'), +(18, 'fr_FR', 'Order'), +(19, 'en_US', 'Product'), +(19, 'fr_FR', 'Product'), +(20, 'en_US', 'Configuration / Profile'), +(20, 'fr_FR', 'Configuration / Profile'), +(21, 'en_US', 'Configuration / Shipping-zone'), +(21, 'fr_FR', 'Configuration / Shipping-zone'), +(22, 'en_US', 'Configuration / Tax'), +(22, 'fr_FR', 'Configuration / Tax'), +(23, 'en_US', 'Configuration / Template'), +(23, 'fr_FR', 'Configuration / Template'); diff --git a/templates/admin/default/profile-edit.html b/templates/admin/default/profile-edit.html index db3cbd0e2..92a88efe2 100644 --- a/templates/admin/default/profile-edit.html +++ b/templates/admin/default/profile-edit.html @@ -118,111 +118,60 @@
-
- {intl l="Manage permissions"} -
-{* -
- -
- - -
-
- -

{intl l="Countries that have the same profile"} :

-

- - {$matchedCountries.first=$asked_country} - - {loop type="profile-country" name="same-country-list" profile=$ID ask="countries" country=$asked_country} - {$matchedCountries[]=$COUNTRY} - {$COUNTRY_TITLE} - {/loop} - - {elseloop rel="same-country-list"} - {intl l="NONE"} - {/elseloop} -

- - -
-
- -
-
-

{intl l="Manage the profile taxes appliance order"}

-
-
- {assign lastPosition 0} - {loop type="profile-country" name="existing-tax-list" profile=$ID country=$asked_country} - {if $POSITION != $lastPosition} - {assign lastPosition $POSITION} - {if $LOOP_COUNT > 1} -
- {/if} -
-

- - {intl l="Add tax to this group"} -

- {/if} - -
{$TAX_TITLE}
- - {if $LOOP_COUNT == $LOOP_TOTAL} -
- {/if} - {/loop} - - {elseloop rel="existing-tax-list"} -
-

- - {intl l="Add tax to this group"} -

+ + + + + + + + + + + + + + + + + {loop type="resource" name="resource-list" profile=$ID backend_context="1"} + + + + + + + + + {/loop} + + + + + + +
+ {intl l="Manage permissions"} +
{intl l="Resource"}{intl l="Title"}{intl l="Rights"}
{intl l="View"}{intl l="Create"}{intl l="Update"}{intl l="Delete"}
{$CODE}{$TITLE} +
+
+
+
+ +
+
+
+ +
+
+
+ +
+
+ +
- {/elseloop} - -
- -
- - {intl l="Apply"} - -
-
- -
-
-

Available taxes

-
-
- {loop type="tax" name="tax-list" exclude_profile=$ID country=$asked_country} -
{$TITLE}
- {/loop} -
- -
- -
- - *}
@@ -235,60 +184,6 @@ -{* Confirmation dialog *} - {*form name="thelia.admin.profile.taxlistupdate"} - - {if $form_error_message} - {$taxUpdateError = true} - {else} - {$taxUpdateError = false} - {/if} - - {* Capture the dialog body, to pass it to the generic dialog *} - {*capture "tax_list_update_dialog"} - - - - - {form_hidden_fields form=$form} - - {form_field form=$form field='country_list'} - -

{intl l="Profile taxes will be update for the following countries :"}

-
-
- - - - -
-
- - {/form_field} - - {/capture} - - {include - file = "includes/generic-create-dialog.html" - - dialog_id = "tax_list_update_dialog" - dialog_title = {intl l="Update profile taxes"} - dialog_body = {$smarty.capture.tax_list_update_dialog nofilter} - - dialog_ok_label = {intl l="Edit profile taxes"} - dialog_cancel_label = {intl l="Cancel"} - - form_action = {url path="/admin/configuration/profiles/saveTaxes"} - form_enctype = {form_enctype form=$form} - form_error_message = $form_error_message - } - - {/form*} - {/block} {block name="javascript-initialization"} @@ -297,6 +192,10 @@ {/javascripts} + {javascripts file='assets/js/bootstrap-switch/bootstrap-switch.js'} + + {/javascripts} + {javascripts file='assets/js/main.js'} {/javascripts} From ddd8c4f7a56ccf3e3122d6232a8ec2cc80c261b3 Mon Sep 17 00:00:00 2001 From: Etienne Roudeix Date: Tue, 22 Oct 2013 15:57:31 +0200 Subject: [PATCH 15/50] fix auth loop --- core/lib/Thelia/Core/Template/Loop/Auth.php | 4 +-- templates/admin/default/admin-layout.tpl | 18 +++++----- .../default/ajax/product-related-tab.html | 6 ++-- .../default/ajax/template-attribute-list.html | 2 +- .../default/ajax/template-feature-list.html | 2 +- templates/admin/default/attribute-edit.html | 4 +-- templates/admin/default/attributes.html | 10 +++--- templates/admin/default/categories.html | 16 ++++----- templates/admin/default/category-edit.html | 2 +- templates/admin/default/configuration.html | 34 +++++++++---------- templates/admin/default/countries.html | 6 ++-- templates/admin/default/currencies.html | 8 ++--- templates/admin/default/customers.html | 8 ++--- templates/admin/default/feature-edit.html | 4 +-- templates/admin/default/features.html | 10 +++--- templates/admin/default/folder-edit.html | 2 +- templates/admin/default/folders.html | 16 ++++----- .../includes/content-folder-management.html | 2 +- .../admin/default/includes/module-block.html | 6 ++-- .../default/includes/product-details-tab.html | 2 +- templates/admin/default/languages.html | 2 +- templates/admin/default/messages.html | 8 ++--- templates/admin/default/modules.html | 2 +- templates/admin/default/orders.html | 2 +- templates/admin/default/profiles.html | 6 ++-- .../admin/default/shipping-configuration.html | 6 ++-- templates/admin/default/shipping-zones.html | 2 +- templates/admin/default/taxes-rules.html | 12 +++---- templates/admin/default/templates.html | 8 ++--- templates/admin/default/variables.html | 8 ++--- 30 files changed, 109 insertions(+), 109 deletions(-) diff --git a/core/lib/Thelia/Core/Template/Loop/Auth.php b/core/lib/Thelia/Core/Template/Loop/Auth.php index f5691cbd6..a30eeacf0 100755 --- a/core/lib/Thelia/Core/Template/Loop/Auth.php +++ b/core/lib/Thelia/Core/Template/Loop/Auth.php @@ -45,7 +45,7 @@ class Auth extends BaseLoop { return new ArgumentCollection( new Argument( - 'roles', + 'role', new TypeCollection( new AlphaNumStringListType() ), @@ -75,7 +75,7 @@ class Auth extends BaseLoop */ public function exec(&$pagination) { - $roles = $this->getRoles(); + $roles = $this->getRole(); $resource = $this->getResource(); $access = $this->getAccess(); diff --git a/templates/admin/default/admin-layout.tpl b/templates/admin/default/admin-layout.tpl index 743264d7a..3d671ecb2 100644 --- a/templates/admin/default/admin-layout.tpl +++ b/templates/admin/default/admin-layout.tpl @@ -44,7 +44,7 @@ {* display top bar only if admin is connected *} - {loop name="top-bar-auth" type="auth" roles="ADMIN"} + {loop name="top-bar-auth" type="auth" role="ADMIN"} {* -- Brand bar section ------------------------------------------------- *} @@ -107,13 +107,13 @@ {intl l="Home"} - {loop name="menu-auth-customer" type="auth" roles="ADMIN" permissions="admin.customers.view"} + {loop name="menu-auth-customer" type="auth" role="ADMIN" resource="admin.customer" access="VIEW"}
  • {intl l="Customers"}
  • {/loop} - {loop name="menu-auth-order" type="auth" roles="ADMIN" permissions="admin.orders.view"} + {loop name="menu-auth-order" type="auth" role="ADMIN" resource="admin.order" access="VIEW"} {/loop} - {loop name="menu-auth-catalog" type="auth" roles="ADMIN" permissions="admin.catalog.view"} + {loop name="menu-auth-catalog" type="auth" role="ADMIN" resource="admin.category" access="VIEW"}
  • {intl l="Catalog"}
  • {/loop} - {loop name="menu-auth-content" type="auth" roles="ADMIN" permissions="admin.folders.view"} + {loop name="menu-auth-content" type="auth" role="ADMIN" resource="admin.folder" access="VIEW"}
  • {intl l="Folders"}
  • {/loop} - {loop name="menu-auth-coupon" type="auth" roles="ADMIN" permissions="admin.coupon.view"} + {loop name="menu-auth-coupon" type="auth" role="ADMIN" resource="admin.coupon" access="VIEW"}
  • {intl l="Coupons"}
  • {/loop} - {loop name="menu-auth-config" type="auth" roles="ADMIN" permissions="admin.config.view"} + {loop name="menu-auth-config" type="auth" role="ADMIN" resource="admin.config" access="VIEW"}
  • {intl l="Configuration"}
  • {/loop} - {loop name="menu-auth-modules" type="auth" roles="ADMIN" permissions="admin.modules.view"} + {loop name="menu-auth-modules" type="auth" role="ADMIN" resource="admin.module" access="VIEW"}
  • {intl l="Modules"}
  • @@ -174,7 +174,7 @@ {/loop} - {loop name="top-bar-search" type="auth" roles="ADMIN" permissions="admin.search"} + {loop name="top-bar-search" type="auth" role="ADMIN" resource="admin.search" access="VIEW"}