-
Notifications
You must be signed in to change notification settings - Fork 206
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
108 changed files
with
6,232 additions
and
767 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
<?php return array('dependencies' => array(), 'version' => '33fd710a64e86a40d022'); |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
- [Introduction](#introduction) | ||
- [Custom Products Stats Datastore](#custom-products-stats-datastore) | ||
|
||
## Introduction | ||
To handle **Dokan Orders**, we followed the [WooCommerce Admin Reports Extension Guidelines](https://github.com/woocommerce/woocommerce/blob/trunk/docs/reporting/extending-woocommerce-admin-reports.md#handle-currency-parameters-on-the-server). | ||
|
||
## Custom Stats Datastore | ||
|
||
We need to customize the default *WooCommerce Analytics Datastore* for some reports. For example, we replaced the [WC Products Stats DataStore](https://github.com/woocommerce/woocommerce/blob/9297409c5a705d1cd0ae65ec9b058271bd90851e/plugins/woocommerce/src/Admin/API/Reports/Products/Stats/DataStore.php#L170) with the [Dokan Product Stats Store](./../../includes/Analytics/Reports/Products/Stats/WcDataStore.php). This modification involves overriding the `$total_query` and `$interval_query` properties by substituting the `Automattic\WooCommerce\Admin\API\Reports\SqlQuery` class with `WeDevs\Dokan\Analytics\Reports\WcSqlQuery`. | ||
|
||
The primary change was to update the `get_sql_clause( $type, $handling = 'unfiltered' )` method to `get_sql_clause( $type, $handling = '' )`, allowing us to apply necessary filters for adding JOIN and WHERE clauses to the `dokan_order_stats` table. | ||
|
||
### Implementation Steps | ||
|
||
- **Step 1:** Create the [WcSqlQuery](./../../includes/Analytics/Reports/DataStoreModifier.php) class to override the `get_sql_clause( $type, $handling = 'unfiltered' )` method from the [WC SqlQuery](https://github.com/woocommerce/woocommerce/blob/9297409c5a705d1cd0ae65ec9b058271bd90851e/plugins/woocommerce/src/Admin/API/Reports/SqlQuery.php#L87) class. The new method should use `get_sql_clause( $type, $handling = '' )`. | ||
|
||
- **Step 2:** Implement the [WcDataStore](https://github.com/woocommerce/woocommerce/blob/9297409c5a705d1cd0ae65ec9b058271bd90851e/plugins/woocommerce/src/Admin/API/Reports/Products/Stats/DataStore.php#L170) class to set the `$total_query` and `$interval_query` properties with instance of **WcSqlQuery**. | ||
|
||
- **Step 3:** Use the `woocommerce_data_stores` filter within the [DataStoreModifier](./../../includes/Analytics/Reports/DataStoreModifier.php) class to replace the default WooCommerce Products Stats datastore with the custom Dokan Product Stats Store. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,129 @@ | ||
## Container Documentation | ||
|
||
- [Register Service Provider](#register-service-provider) | ||
- [Register Services in the Service Provider](#register-services-in-the-service-provider) | ||
- [Add Services to the Container](#add-services-to-the-container) | ||
- [Get Service from the Container](#get-service-from-the-container) | ||
- [Override the Existing Service](#override-the-existing-service) | ||
- [Check if a Service is Registered](#check-service-is-registered-or-not) | ||
|
||
### Register Service Provider | ||
|
||
1. **Step 1:** Create a service provider inside `includes/DependencyManagement/Providers` that extends `WeDevs\Dokan\DependencyManagement\BaseServiceProvider`. | ||
2. **Step 2:** Register the service provider in the `boot` method of `includes/DependencyManagement/Providers/ServiceProvider.php`. | ||
|
||
You can see the already registered service providers inside the `boot` method of the [ServiceProvider](./../includes/DependencyManagement/Providers/ServiceProvider.php#L46) class. | ||
|
||
### Register Services in the Service Provider | ||
|
||
1. **Step 1:** Register the services inside the `register` method of your service provider. | ||
2. **Step 2:** Implement a `provides` method that returns `true` or `false` when the container invokes it with a service name. | ||
|
||
```php | ||
namespace WeDevs\Dokan\DependencyManagement\Providers; | ||
|
||
use WeDevs\Dokan\DependencyManagement\BaseServiceProvider; | ||
|
||
class SomeServiceProvider extends BaseServiceProvider | ||
{ | ||
/** | ||
* The provides method lets the container know | ||
* which services are provided by this provider. | ||
* The alias must be added to this array or it will | ||
* be ignored. | ||
*/ | ||
public function provides(string $id): bool | ||
{ | ||
$services = [ | ||
'key', | ||
Some\Controller::class, | ||
Some\Model::class, | ||
Some\Request::class, | ||
]; | ||
|
||
return in_array($id, $services); | ||
} | ||
|
||
/** | ||
* The register method defines services in the container. | ||
* Services must have an alias in the `provides` method | ||
* or they will be ignored. | ||
*/ | ||
public function register(): void | ||
{ | ||
$this->getContainer()->add('key', 'value'); | ||
|
||
$this->getContainer() | ||
->add(Some\Controller::class) | ||
->addArgument(Some\Request::class) | ||
->addArgument(Some\Model::class); | ||
|
||
$this->getContainer()->add(Some\Request::class); | ||
$this->getContainer()->add(Some\Model::class); | ||
} | ||
} | ||
``` | ||
|
||
### Add Services to the Container | ||
|
||
- Add a service: | ||
|
||
```php | ||
$this->getContainer()->add(ServiceClass::class); | ||
``` | ||
|
||
- Add a shared service (one instance per request lifecycle): | ||
|
||
```php | ||
$this->getContainer()->addShared(ServiceClass::class); | ||
``` | ||
|
||
- Add a service with constructor parameters: | ||
|
||
```php | ||
$this->getContainer()->addShared(ServiceClass::class, function () { | ||
return new ServiceClass($params); | ||
}); | ||
``` | ||
|
||
- Add a shared service with constructor parameters and tag it: | ||
|
||
```php | ||
$this->getContainer()->addShared(ServiceClass::class, function () { | ||
return new ServiceClass($params); | ||
})->addTag('tag_name'); | ||
``` | ||
|
||
- Add a service and tag all implemented interfaces: | ||
|
||
```php | ||
$this->getContainer()->share_with_implements_tags(ServiceClass::class); | ||
``` | ||
|
||
### Get Service from the Container | ||
|
||
- Get a single instance: | ||
|
||
```php | ||
$service = dokan()->get_container()->get(ServiceClass::class); | ||
``` | ||
|
||
- Get an array of instances by tag: | ||
|
||
```php | ||
$service_list = dokan()->get_container()->get('tag-name'); | ||
``` | ||
|
||
### Override the Existing Service | ||
|
||
```php | ||
dokan()->get_container()->extend(ServiceClass::class)->setConcrete(new OtherServiceClass()); | ||
``` | ||
|
||
### Check if a Service is Registered | ||
|
||
```php | ||
$is_registered = dokan()->get_container()->has(ServiceClass::class); | ||
``` | ||
|
||
For more details, visit the [League Container documentation](https://container.thephpleague.com/4.x/service-providers). |
Oops, something went wrong.