Wallogit.com
2017 © Pedro Peláez
Provide a scope mechanism to associate customers to entities., (*1)
<thelia_root>/local/modules/ directory and make sure that the name of the module is CustomerScope.Add it in your main Thelia composer.json file, (*2)
composer require thelia/customer-scope-module:~0.1
A scope is a kind of association that a customer can have. It is defined by a code, and the class of entity that will be associated. Any model class generated by Propel can be used to create a scope., (*3)
Scopes must be associated to a scope group., (*4)
Customer can be associated to a specific entity instance of a class that has a scope, creating a customer scope. A customer can be associated with any number of entities in any number of scopes. What this association means is up to your business logic., (*5)
For exemple, let's say you manage physical stores what to associate customers to them. You can use scopes for that., (*6)
Assuming that you have a Store class representing your stores, you can create:, (*7)
store scope using the Store classplaces scope group to contain the store scopeYou can then associate a customer to any instance of the Store class, and then easily check to what stores
your customer is associated to in your application., (*8)
For the time being, scope and scope groups have to be inserted directly into the database. You could for example do this in a module specific to your site, on activation., (*9)
The customer scope handler service allows you to add customers to scopes, and to check the scopes a customer belongs to., (*10)
It is registered in the container under the id customerscope.customerscope.handler.
See the CustomerScopeHandler class for the available methods., (*11)
A loop is also available to access the customer scopes., (*12)
| Argument | Description |
|---|---|
| customer_id | Id or list of customer ids. |
| scope_id | Id or list of scope ids. |
| entity_id | Id or list of entity ids. |
| entity | Entity class. |
| Variable | Description |
|---|---|
| $CUSTOMER_SCOPE_CUSTOMER_ID | Customer id. |
| $CUSTOMER_SCOPE_SCOPE_ID | Scope id. |
| $CUSTOMER_SCOPE_ENTITY_ID | Entity id. |
| $CUSTOMER_SCOPE_SCOPE_ENTITY | Entity class. |
This module provides a CustomerQuery class that extends the base Thelia query and provides methods to filter cutomers by scope., (*13)
It can be used in replacement of the base CustomerQuery., (*14)
use CustomerScope\Model\CustomerScope as CustomerScopeCustomerQuery;
$customers = CustomerScopeCustomerQuery::create()
->filterByScope([
"ScopeEntity" => "myScope",
"EntityId" => $myEntity->getId(),
])
->find();
Or mixed in your own query class by using the static methods.
These methods take a ModelCriteria query class and will act in it., (*15)
They assume that the customer table is already present in the query scope, so your query must for exemple extends CustomerQuery or make a join to the customer table., (*16)
use CustomerScope\Model\CustomerScope as CustomerScopeCustomerQuery;
// MyQuery extends CustomerQuery
// or MyQuery has a join to the customer table somewhere
$myQuery = MyQuery::create();
CustomerScopeCustomerQuery::addScopeFilter(
$myQuery,
[
"ScopeEntity" => "myScope",
"EntityId" => $myEntity->getId(),
]
);