| <?php |
|
|
| |
| |
| |
| |
| |
| |
|
|
| namespace Piwik\Plugins\Ecommerce; |
|
|
| use Piwik\Columns\ComputedMetricFactory; |
| use Piwik\Columns\MetricsList; |
| use Piwik\Common; |
| use Piwik\Plugin\ArchivedMetric; |
| use Piwik\Plugin\ComputedMetric; |
| use Piwik\Plugins\Ecommerce\Columns\ProductCategory; |
| use Piwik\Plugins\SegmentEditor\Settings\LimitSegments; |
| use Piwik\Segment\SegmentsList; |
|
|
| class Ecommerce extends \Piwik\Plugin |
| { |
| |
| |
| |
| public function registerEvents() |
| { |
| return [ |
| 'Translate.getClientSideTranslationKeys' => 'getClientSideTranslationKeys', |
| 'Metric.addComputedMetrics' => 'addComputedMetrics', |
| 'Actions.getCustomActionDimensionFieldsAndJoins' => 'provideActionDimensionFields', |
| 'Segment.filterSegments' => 'filterSegments', |
| ]; |
| } |
|
|
| public function getClientSideTranslationKeys(&$translations) |
| { |
| $translations[] = 'Goals_ConversionsOverview'; |
| $translations[] = 'General_ColumnRevenue'; |
| $translations[] = 'General_Subtotal'; |
| $translations[] = 'General_Tax'; |
| $translations[] = 'General_Shipping'; |
| $translations[] = 'General_Discount'; |
| $translations[] = 'Live_RowActionTooltipWithDimension'; |
| $translations[] = 'General_Goal'; |
| } |
|
|
| public function provideActionDimensionFields(&$fields, &$joins) |
| { |
| $fields[] = 'log_link_visit_action.product_price as productViewPrice'; |
| $fields[] = 'log_action_productview_name.name as productViewName'; |
| $fields[] = 'log_action_productview_sku.name as productViewSku'; |
| $joins[] = 'LEFT JOIN ' . Common::prefixTable('log_action') . ' AS log_action_productview_name |
| ON log_link_visit_action.idaction_product_name = log_action_productview_name.idaction'; |
| $joins[] = 'LEFT JOIN ' . Common::prefixTable('log_action') . ' AS log_action_productview_sku |
| ON log_link_visit_action.idaction_product_sku = log_action_productview_sku.idaction'; |
|
|
| for ($i = 1; $i <= ProductCategory::PRODUCT_CATEGORY_COUNT; $i++) { |
| $suffix = $i > 1 ? $i : ''; |
| $fields[] = "log_action_productview_category$i.name as productViewCategory$i"; |
| $joins[] = "LEFT JOIN " . Common::prefixTable('log_action') . " AS log_action_productview_category$i |
| ON log_link_visit_action.idaction_product_cat$suffix = log_action_productview_category$i.idaction"; |
| } |
| } |
|
|
| public function addComputedMetrics(MetricsList $list, ComputedMetricFactory $computedMetricFactory) |
| { |
| $category = 'Goals_Ecommerce'; |
|
|
| $metrics = $list->getMetrics(); |
| foreach ($metrics as $metric) { |
| if ($metric instanceof ArchivedMetric && $metric->getDimension()) { |
| $metricName = $metric->getName(); |
| if ( |
| $metric->getDbTableName() === 'log_conversion' |
| && $metricName !== 'nb_uniq_orders' |
| && strpos($metricName, ArchivedMetric::AGGREGATION_SUM_PREFIX) === 0 |
| && $metric->getCategoryId() === $category |
| ) { |
| $metric = $computedMetricFactory->createComputedMetric($metric->getName(), 'nb_uniq_orders', ComputedMetric::AGGREGATION_AVG); |
| $list->addMetric($metric); |
| } |
| } |
| } |
| } |
|
|
| public function filterSegments(SegmentsList &$list, array $idSites) |
| { |
| $limitSegmentsSettingEnabled = false; |
| if (empty($idSites)) { |
| $limitSegmentsSettingEnabled = LimitSegments::getInstance()->getValue(); |
| } else { |
| foreach ($idSites as $idsite) { |
| $limitSegmentsSettingEnabled |= LimitSegments::getInstance($idsite)->getValue(); |
| } |
| } |
| if ($limitSegmentsSettingEnabled) { |
| $list->remove('Goals_Ecommerce', 'orderId'); |
| $list->remove('Goals_Ecommerce', 'revenueOrder'); |
| $list->remove('Goals_Ecommerce', 'productPrice'); |
| $list->remove('Goals_Ecommerce', 'productName'); |
| $list->remove('Goals_Ecommerce', 'productSku'); |
| } |
| } |
| } |
|
|