PDF rausgenommen

This commit is contained in:
aschwarz
2023-01-23 11:03:31 +01:00
parent 82d562a322
commit a6523903eb
28078 changed files with 4247552 additions and 2 deletions

View File

@ -0,0 +1,73 @@
<?php
/**
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*
*/
namespace Piwik\Plugins\Ecommerce\Reports;
use Piwik\Common;
use Piwik\Piwik;
use Piwik\Plugin\Report;
use Piwik\Site;
abstract class Base extends Report
{
protected function init()
{
$this->module = 'Goals';
$this->categoryId = 'Goals_Ecommerce';
}
public function isEnabled()
{
$idSite = Common::getRequestVar('idSite', false, 'int');
if (empty($idSite)) {
return false;
}
return $this->isEcommerceEnabled($idSite);
}
public function checkIsEnabled()
{
if (!$this->isEnabled()) {
$message = Piwik::translate('General_ExceptionReportNotEnabled');
if (Piwik::hasUserSuperUserAccess()) {
$message .= ' Most likely Ecommerce is not enabled for the requested site.';
}
throw new \Exception($message);
}
}
public function configureReportMetadata(&$availableReports, $infos)
{
if ($this->isEcommerceEnabledByInfos($infos)) {
$availableReports[] = $this->buildReportMetadata();
}
}
private function isEcommerceEnabledByInfos($infos)
{
$idSite = $infos['idSite'];
if (empty($idSite)) {
return false;
}
return $this->isEcommerceEnabled($idSite);
}
private function isEcommerceEnabled($idSite)
{
$site = new Site($idSite);
return $site->isEcommerceEnabled();
}
}

View File

@ -0,0 +1,167 @@
<?php
/**
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*
*/
namespace Piwik\Plugins\Ecommerce\Reports;
use Piwik\Common;
use Piwik\DataTable;
use Piwik\Metrics\Formatter;
use Piwik\Piwik;
use Piwik\Plugin\ViewDataTable;
use Piwik\Plugins\CoreVisualizations\Visualizations\JqplotGraph\Evolution;
use Piwik\Plugins\Goals\Columns\Metrics\AveragePrice;
use Piwik\Plugins\Goals\Columns\Metrics\AverageQuantity;
use Piwik\Plugins\Goals\Columns\Metrics\ProductConversionRate;
use Piwik\Plugins\Goals\Conversions;
use Piwik\Plugins\Goals\Model;
use Piwik\Report\ReportWidgetFactory;
use Piwik\Widget\WidgetsList;
abstract class BaseItem extends Base
{
protected $defaultSortColumn = 'revenue';
protected function init()
{
parent::init();
$this->processedMetrics = array(
new AveragePrice(),
new AverageQuantity(),
new ProductConversionRate()
);
$this->metrics = array(
'revenue', 'quantity', 'orders', 'nb_visits'
);
}
public function getMetrics()
{
$metrics = parent::getMetrics();
$metrics['revenue'] = Piwik::translate('General_ProductRevenue');
$metrics['orders'] = Piwik::translate('General_UniquePurchases');
return $metrics;
}
public function getMetricsDocumentation()
{
// we do not check whether it is abondon carts if not set re performance improvements
if ($this->isAbandonedCart($fetchIfNotSet = false)) {
return array(
'revenue' => Piwik::translate('Goals_ColumnRevenueDocumentation',
Piwik::translate('Goals_DocumentationRevenueGeneratedByProductSales')),
'quantity' => Piwik::translate('Goals_ColumnQuantityDocumentation', $this->name),
'orders' => Piwik::translate('Goals_ColumnOrdersDocumentation', $this->name),
'avg_price' => Piwik::translate('Goals_ColumnAveragePriceDocumentation', $this->name),
'avg_quantity' => Piwik::translate('Goals_ColumnAverageQuantityDocumentation', $this->name),
'nb_visits' => Piwik::translate('Goals_ColumnVisitsProductDocumentation', $this->name),
'conversion_rate' => Piwik::translate('Goals_ColumnConversionRateProductDocumentation', $this->name),
);
}
return array();
}
public function configureWidgets(WidgetsList $widgetsList, ReportWidgetFactory $factory)
{
$widgetsList->addToContainerWidget('Products', $factory->createWidget());
}
public function configureView(ViewDataTable $view)
{
$idSite = Common::getRequestVar('idSite');
$view->config->show_ecommerce = true;
$view->config->show_table = false;
$view->config->show_all_views_icons = false;
$view->config->show_exclude_low_population = false;
$view->config->show_table_all_columns = false;
if (!($view instanceof Evolution)) {
$moneyColumns = array('revenue');
$formatter = array(new Formatter(), 'getPrettyMoney');
$view->config->filters[] = array('ColumnCallbackReplace', array($moneyColumns, $formatter, array($idSite)));
}
$view->requestConfig->filter_limit = 10;
$view->requestConfig->filter_sort_column = 'revenue';
$view->requestConfig->filter_sort_order = 'desc';
$view->config->custom_parameters['isFooterExpandedInDashboard'] = true;
// set columns/translations which differ based on viewDataTable TODO: shouldn't have to do this check...
// amount of reports should be dynamic, but metadata should be static
$columns = array_merge($this->getMetrics(), $this->getProcessedMetrics());
$columnsOrdered = array('label', 'revenue', 'quantity', 'orders', 'avg_price', 'avg_quantity',
'nb_visits', 'conversion_rate');
// handle old case where viewDataTable is set to ecommerceOrder/ecommerceAbandonedCart. in this case, we
// set abandonedCarts accordingly and remove the ecommerceOrder/ecommerceAbandonedCart as viewDataTable.
$viewDataTable = Common::getRequestVar('viewDataTable', '');
if ($viewDataTable == 'ecommerceOrder') {
$view->config->custom_parameters['viewDataTable'] = 'table';
$abandonedCart = false;
} else if ($viewDataTable == 'ecommerceAbandonedCart') {
$view->config->custom_parameters['viewDataTable'] = 'table';
$abandonedCart = true;
} else {
$abandonedCart = $this->isAbandonedCart($fetchIfNotSet = true);
}
if ($abandonedCart) {
$columns['abandoned_carts'] = Piwik::translate('General_AbandonedCarts');
$columns['revenue'] = Piwik::translate('Goals_LeftInCart', $columns['revenue']);
$columns['quantity'] = Piwik::translate('Goals_LeftInCart', $columns['quantity']);
$columns['avg_quantity'] = Piwik::translate('Goals_LeftInCart', $columns['avg_quantity']);
unset($columns['orders']);
unset($columns['conversion_rate']);
$columnsOrdered = array('label', 'revenue', 'quantity', 'avg_price', 'avg_quantity', 'nb_visits',
'abandoned_carts');
$view->config->custom_parameters['abandonedCarts'] = '1';
} else {
$view->config->custom_parameters['abandonedCarts'] = '0';
}
$view->requestConfig->request_parameters_to_modify['abandonedCarts'] = $view->config->custom_parameters['abandonedCarts'];
$translations = array_merge(array('label' => $this->name), $columns);
$view->config->addTranslations($translations);
$view->config->columns_to_display = $columnsOrdered;
}
private function isAbandonedCart($fetchIfNotSet)
{
$abandonedCarts = Common::getRequestVar('abandonedCarts', '', 'string');
if ($abandonedCarts === '') {
if ($fetchIfNotSet) {
$idSite = Common::getRequestVar('idSite', 0, 'int');
$period = Common::getRequestVar('period', '', 'string');
$date = Common::getRequestVar('date', '', 'string');
$conversion = new Conversions();
$conversions = $conversion->getConversionForGoal(Piwik::LABEL_ID_GOAL_IS_ECOMMERCE_ORDER, $idSite, $period, $date);
$cartNbConversions = $conversion->getConversionForGoal(Piwik::LABEL_ID_GOAL_IS_ECOMMERCE_CART, $idSite, $period, $date);
$preloadAbandonedCart = $cartNbConversions !== false && $conversions == 0;
if ($preloadAbandonedCart) {
$abandonedCarts = '1';
} else {
$abandonedCarts = '0';
}
} else {
$abandonedCarts = '0';
}
}
return $abandonedCarts == '1';
}
}

View File

@ -0,0 +1,32 @@
<?php
/**
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*
*/
namespace Piwik\Plugins\Ecommerce\Reports;
use Piwik\Metrics;
use Piwik\Piwik;
use Piwik\Plugins\Goals\Columns\DaysToConversion;
class GetDaysToConversionAbandonedCart extends Base
{
protected function init()
{
parent::init();
$this->action = 'getDaysToConversion';
$this->name = Piwik::translate('General_AbandonedCarts') . ' - ' . Piwik::translate('Goals_DaysToConv');
$this->dimension = new DaysToConversion();
$this->constantRowsCount = true;
$this->processedMetrics = false;
$this->metrics = array('nb_conversions');
$this->order = 25;
$this->parameters = array('idGoal' => Piwik::LABEL_ID_GOAL_IS_ECOMMERCE_CART);
}
}

View File

@ -0,0 +1,32 @@
<?php
/**
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*
*/
namespace Piwik\Plugins\Ecommerce\Reports;
use Piwik\Metrics;
use Piwik\Piwik;
use Piwik\Plugins\Goals\Columns\DaysToConversion;
class GetDaysToConversionEcommerceOrder extends Base
{
protected function init()
{
parent::init();
$this->action = 'getDaysToConversion';
$this->name = Piwik::translate('General_EcommerceOrders') . ' - ' . Piwik::translate('Goals_DaysToConv');
$this->dimension = new DaysToConversion();
$this->constantRowsCount = true;
$this->processedMetrics = false;
$this->metrics = array('nb_conversions');
$this->order = 12;
$this->parameters = array('idGoal' => Piwik::LABEL_ID_GOAL_IS_ECOMMERCE_ORDER);
}
}

View File

@ -0,0 +1,36 @@
<?php
/**
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*
*/
namespace Piwik\Plugins\Ecommerce\Reports;
use Piwik\Piwik;
class GetEcommerceAbandonedCart extends Base
{
protected function init()
{
parent::init();
$this->action = 'get';
$this->name = Piwik::translate('General_AbandonedCarts');
$this->processedMetrics = array('avg_order_revenue');
$this->order = 15;
$this->metrics = array('nb_conversions', 'conversion_rate', 'revenue', 'items');
$this->parameters = array('idGoal' => Piwik::LABEL_ID_GOAL_IS_ECOMMERCE_CART);
}
public function getMetrics() {
$metrics = parent::getMetrics();
$metrics['nb_conversions'] = Piwik::translate('General_AbandonedCarts');
$metrics['revenue'] = Piwik::translate('Goals_LeftInCart', Piwik::translate('General_ColumnRevenue'));
$metrics['items'] = Piwik::translate('Goals_LeftInCart', Piwik::translate('Goals_Products'));
return $metrics;
}
}

View File

@ -0,0 +1,45 @@
<?php
/**
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*
*/
namespace Piwik\Plugins\Ecommerce\Reports;
use Piwik\Piwik;
class GetEcommerceOrder extends Base
{
protected function init()
{
parent::init();
$this->action = 'get';
$this->name = Piwik::translate('General_EcommerceOrders');
$this->processedMetrics = array('avg_order_revenue');
$this->order = 10;
$this->metrics = array(
'nb_conversions',
'nb_visits_converted',
'conversion_rate',
'revenue',
'revenue_subtotal',
'revenue_tax',
'revenue_shipping',
'revenue_discount'
);
$this->parameters = array('idGoal' => Piwik::LABEL_ID_GOAL_IS_ECOMMERCE_ORDER);
}
public function getMetrics()
{
$metrics = parent::getMetrics();
$metrics['nb_conversions'] = Piwik::translate('General_EcommerceOrders');
$metrics['items'] = Piwik::translate('General_PurchasedProducts');
return $metrics;
}
}

View File

@ -0,0 +1,26 @@
<?php
/**
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*
*/
namespace Piwik\Plugins\Ecommerce\Reports;
use Piwik\Piwik;
use Piwik\Plugins\Ecommerce\Columns\ProductCategory;
class GetItemsCategory extends BaseItem
{
protected function init()
{
parent::init();
$this->name = Piwik::translate('Goals_ProductCategory');
$this->dimension = new ProductCategory();
$this->order = 32;
$this->subcategoryId = 'Goals_Products';
}
}

View File

@ -0,0 +1,26 @@
<?php
/**
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*
*/
namespace Piwik\Plugins\Ecommerce\Reports;
use Piwik\Piwik;
use Piwik\Plugins\Ecommerce\Columns\ProductName;
class GetItemsName extends BaseItem
{
protected function init()
{
parent::init();
$this->name = Piwik::translate('Goals_ProductName');
$this->dimension = new ProductName();
$this->order = 30;
$this->subcategoryId = 'Goals_Products';
}
}

View File

@ -0,0 +1,28 @@
<?php
/**
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*
*/
namespace Piwik\Plugins\Ecommerce\Reports;
use Piwik\Piwik;
use Piwik\Plugins\Ecommerce\Columns\ProductSku;
class GetItemsSku extends BaseItem
{
protected function init()
{
parent::init();
$this->name = Piwik::translate('Goals_ProductSKU');
$this->dimension = new ProductSku();
$this->order = 31;
$this->subcategoryId = 'Goals_Products';
}
}

View File

@ -0,0 +1,32 @@
<?php
/**
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*
*/
namespace Piwik\Plugins\Ecommerce\Reports;
use Piwik\Metrics;
use Piwik\Piwik;
use Piwik\Plugins\Goals\Columns\VisitsUntilConversion;
class GetVisitsUntilConversionAbandonedCart extends Base
{
protected function init()
{
parent::init();
$this->action = 'getVisitsUntilConversion';
$this->name = Piwik::translate('General_AbandonedCarts') . ' - ' . Piwik::translate('Goals_VisitsUntilConv');
$this->dimension = new VisitsUntilConversion();
$this->constantRowsCount = true;
$this->processedMetrics = false;
$this->metrics = array('nb_conversions');
$this->order = 20;
$this->parameters = array('idGoal' => Piwik::LABEL_ID_GOAL_IS_ECOMMERCE_CART);
}
}

View File

@ -0,0 +1,32 @@
<?php
/**
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*
*/
namespace Piwik\Plugins\Ecommerce\Reports;
use Piwik\Metrics;
use Piwik\Piwik;
use Piwik\Plugins\Goals\Columns\VisitsUntilConversion;
class GetVisitsUntilConversionEcommerceOrder extends Base
{
protected function init()
{
parent::init();
$this->action = 'getVisitsUntilConversion';
$this->name = Piwik::translate('General_EcommerceOrders') . ' - ' . Piwik::translate('Goals_VisitsUntilConv');
$this->dimension = new VisitsUntilConversion();
$this->constantRowsCount = true;
$this->processedMetrics = array();
$this->metrics = array('nb_conversions');
$this->order = 11;
$this->parameters = array('idGoal' => Piwik::LABEL_ID_GOAL_IS_ECOMMERCE_ORDER);
}
}