shopware /
SwagConnect
This project does not seem to handle request data directly as such no vulnerable execution paths were found.
include, or for example
via PHP's auto-loading mechanism.
These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
| 1 | <?php |
||
| 2 | /** |
||
| 3 | * (c) shopware AG <[email protected]> |
||
| 4 | * For the full copyright and license information, please view the LICENSE |
||
| 5 | * file that was distributed with this source code. |
||
| 6 | */ |
||
| 7 | |||
| 8 | namespace ShopwarePlugins\Connect\Subscribers; |
||
| 9 | |||
| 10 | use Enlight\Event\SubscriberInterface; |
||
| 11 | use Shopware\Components\Model\ModelManager; |
||
| 12 | use ShopwarePlugins\Connect\Components\Logger; |
||
| 13 | |||
| 14 | class CustomerGroup implements SubscriberInterface |
||
| 15 | { |
||
| 16 | /** |
||
| 17 | * @var ModelManager |
||
| 18 | */ |
||
| 19 | private $modelManager; |
||
| 20 | |||
| 21 | /** |
||
| 22 | * @var Logger |
||
| 23 | */ |
||
| 24 | private $logger; |
||
| 25 | |||
| 26 | /** |
||
| 27 | * @param ModelManager $modelManager |
||
| 28 | * @param Logger $logger |
||
| 29 | */ |
||
| 30 | public function __construct(ModelManager $modelManager, Logger $logger) |
||
| 31 | { |
||
| 32 | $this->modelManager = $modelManager; |
||
| 33 | $this->logger = $logger; |
||
| 34 | } |
||
| 35 | |||
| 36 | /** |
||
| 37 | * {@inheritdoc} |
||
| 38 | */ |
||
| 39 | public static function getSubscribedEvents() |
||
| 40 | { |
||
| 41 | return [ |
||
| 42 | 'Enlight_Controller_Action_PreDispatch_Backend_Base' => 'filterCustomerGroup', |
||
| 43 | 'Shopware\Models\Customer\Repository::getCustomerGroupsQueryBuilder::after' => 'filterCustomerGroupFromQueryBuilder', |
||
| 44 | 'Shopware\Models\Customer\Repository::getCustomerGroupsWithoutIdsQueryBuilder::before' => 'addToWithoutIdsQueryBuilder' |
||
| 45 | ]; |
||
| 46 | } |
||
| 47 | |||
| 48 | /** |
||
| 49 | * Remove 'connect' customer group from the base store - except 'showConnect' is set |
||
| 50 | * |
||
| 51 | * @param \Enlight_Event_EventArgs $args |
||
| 52 | */ |
||
| 53 | public function filterCustomerGroup(\Enlight_Event_EventArgs $args) |
||
| 54 | { |
||
| 55 | /** @var \Enlight_Controller_Action $controller */ |
||
| 56 | $controller = $args->get('subject'); |
||
| 57 | $request = $controller->Request(); |
||
| 58 | |||
| 59 | if ($request->getActionName() !== 'getCustomerGroups') { |
||
| 60 | return; |
||
| 61 | } |
||
| 62 | |||
| 63 | try { |
||
| 64 | if (!$this->getConnectCustomerGroupId()) { |
||
|
0 ignored issues
–
show
|
|||
| 65 | return; |
||
| 66 | } |
||
| 67 | if ($request->getParam('showConnect', false)) { |
||
| 68 | return; |
||
| 69 | } |
||
| 70 | $filter = $request->getParam('filter', []); |
||
| 71 | $filter[] = ['property' => 'id', 'value' => $this->getConnectCustomerGroupId(), 'expression' => '<>']; |
||
| 72 | $request->setParam('filter', $filter); |
||
| 73 | } catch (\Exception $e) { |
||
| 74 | $this->logger->write(true, 'filterCustomerGroup', $e->getMessage()); |
||
| 75 | |||
| 76 | return; |
||
| 77 | } |
||
| 78 | } |
||
| 79 | |||
| 80 | /** |
||
| 81 | * This one will remove connect from the default customer group query |
||
| 82 | * |
||
| 83 | * @param \Enlight_Hook_HookArgs $args |
||
| 84 | */ |
||
| 85 | public function filterCustomerGroupFromQueryBuilder(\Enlight_Hook_HookArgs $args) |
||
| 86 | { |
||
| 87 | if (!$this->getConnectCustomerGroupId()) { |
||
|
0 ignored issues
–
show
The expression
$this->getConnectCustomerGroupId() of type integer|null is loosely compared to false; this is ambiguous if the integer can be zero. You might want to explicitly use === null instead.
In PHP, under loose comparison (like For 0 == false // true
0 == null // true
123 == false // false
123 == null // false
// It is often better to use strict comparison
0 === false // false
0 === null // false
Loading history...
|
|||
| 88 | return; |
||
| 89 | } |
||
| 90 | |||
| 91 | // Allow the article module to list the connect customer group |
||
| 92 | $pathInfo = Shopware()->Front()->Request()->getPathInfo(); |
||
| 93 | if (strpos($pathInfo, '/backend/Article') !== false) { |
||
| 94 | return; |
||
| 95 | } |
||
| 96 | |||
| 97 | $builder = $args->getReturn(); |
||
| 98 | $builder->andWhere('groups.id != :groupId')->setParameter('groupId', $this->getConnectCustomerGroupId()); |
||
| 99 | |||
| 100 | $args->setReturn($builder); |
||
| 101 | } |
||
| 102 | |||
| 103 | /** |
||
| 104 | * This one is used by the category module e.g. |
||
| 105 | * |
||
| 106 | * @param \Enlight_Hook_HookArgs $args |
||
| 107 | */ |
||
| 108 | public function addToWithoutIdsQueryBuilder(\Enlight_Hook_HookArgs $args) |
||
| 109 | { |
||
| 110 | if (!$this->getConnectCustomerGroupId()) { |
||
|
0 ignored issues
–
show
The expression
$this->getConnectCustomerGroupId() of type integer|null is loosely compared to false; this is ambiguous if the integer can be zero. You might want to explicitly use === null instead.
In PHP, under loose comparison (like For 0 == false // true
0 == null // true
123 == false // false
123 == null // false
// It is often better to use strict comparison
0 === false // false
0 === null // false
Loading history...
|
|||
| 111 | return; |
||
| 112 | } |
||
| 113 | |||
| 114 | $userIds = $args->get('usedIds'); |
||
| 115 | |||
| 116 | if (!$userIds) { |
||
| 117 | $userIds = []; |
||
| 118 | } |
||
| 119 | $userIds[] = $this->getConnectCustomerGroupId(); |
||
| 120 | |||
| 121 | $args->set('usedIds', $userIds); |
||
| 122 | } |
||
| 123 | |||
| 124 | /** |
||
| 125 | * Will return the id of the connect customer group - or null if no such group can be found |
||
| 126 | * |
||
| 127 | * @return int|null |
||
| 128 | */ |
||
| 129 | View Code Duplication | private function getConnectCustomerGroupId() |
|
|
0 ignored issues
–
show
This method seems to be duplicated in your project.
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation. You can also find more detailed suggestions in the “Code” section of your repository. Loading history...
|
|||
| 130 | { |
||
| 131 | $repo = $this->modelManager->getRepository('Shopware\Models\Attribute\CustomerGroup'); |
||
| 132 | /** @var \Shopware\Models\Attribute\CustomerGroup $model */ |
||
| 133 | $model = $repo->findOneBy(['connectGroup' => true]); |
||
| 134 | |||
| 135 | $customerGroup = null; |
||
|
0 ignored issues
–
show
$customerGroup is not used, you could remove the assignment.
This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently. $myVar = 'Value';
$higher = false;
if (rand(1, 6) > 3) {
$higher = true;
} else {
$higher = false;
}
Both the Loading history...
|
|||
| 136 | if ($model && $model->getCustomerGroup()) { |
||
| 137 | return $model->getCustomerGroup()->getId(); |
||
| 138 | } |
||
| 139 | |||
| 140 | return null; |
||
| 141 | } |
||
| 142 | } |
||
| 143 |
In PHP, under loose comparison (like
==, or!=, orswitchconditions), values of different types might be equal.For
integervalues, zero is a special case, in particular the following results might be unexpected: