Download plugins/Goals/Columns/Metrics/RevenuePerVisit.php from Leon4gr45/matomo: direct link, hf CLI and curl.
- Browser
- Download file 2.93 kB
-
https://huggingface.co/spaces/Leon4gr45/matomo/resolve/main/plugins/Goals/Columns/Metrics/RevenuePerVisit.php
- Command line
-
hf download hf://spaces/Leon4gr45/matomo/plugins/Goals/Columns/Metrics/RevenuePerVisit.php
-
curl -L -o RevenuePerVisit.php https://huggingface.co/spaces/Leon4gr45/matomo/resolve/main/plugins/Goals/Columns/Metrics/RevenuePerVisit.php
2.93 kB
| /** | |
| * Matomo - free/libre analytics platform | |
| * | |
| * @link https://matomo.org | |
| * @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later | |
| */ | |
| namespace Piwik\Plugins\Goals\Columns\Metrics; | |
| use Piwik\Archive\DataTableFactory; | |
| use Piwik\Columns\Dimension; | |
| use Piwik\DataTable; | |
| use Piwik\DataTable\Row; | |
| use Piwik\Metrics; | |
| use Piwik\Metrics\Formatter; | |
| use Piwik\Piwik; | |
| use Piwik\Plugin\ProcessedMetric; | |
| use Piwik\Tracker\GoalManager; | |
| /** | |
| * The amount of revenue per visit (or per conversion if there are no visits). Calculated as: | |
| * | |
| * sum(revenue for all goals) / (nb_visits or nb_conversions if no visits) | |
| * | |
| * Goal revenue and nb_visits & nb_conversions are calculated by the archiving process. | |
| */ | |
| class RevenuePerVisit extends ProcessedMetric | |
| { | |
| private $idSite; | |
| public function getName() | |
| { | |
| return 'revenue_per_visit'; | |
| } | |
| public function getTranslatedName() | |
| { | |
| return Piwik::translate('General_ColumnValuePerVisit'); | |
| } | |
| public function getDocumentation() | |
| { | |
| return Piwik::translate('General_ColumnValuePerVisitDocumentation'); | |
| } | |
| public function getDependentMetrics() | |
| { | |
| return array('revenue', 'nb_visits', 'nb_conversions','goals'); | |
| } | |
| public function compute(Row $row) | |
| { | |
| $mappingFromNameToIdGoal = Metrics::getMappingFromNameToIdGoal(); | |
| $goals = $this->getMetric($row, 'goals') ?: array(); | |
| $revenue = 0; | |
| foreach ($goals as $goalId => $goalMetrics) { | |
| if (is_numeric($goalId) && $goalId < GoalManager::IDGOAL_ORDER) { | |
| continue; | |
| } | |
| if (!is_numeric($goalId) && $goalId != Piwik::LABEL_ID_GOAL_IS_ECOMMERCE_ORDER) { | |
| continue; | |
| } | |
| $revenue += (int) $this->getMetric($goalMetrics, 'revenue', $mappingFromNameToIdGoal); | |
| } | |
| if ($revenue == 0) { | |
| $revenue = (int) $this->getMetric($row, 'revenue'); | |
| } | |
| $nbVisits = (int) $this->getMetric($row, 'nb_visits'); | |
| $conversions = (int) $this->getMetric($row, 'nb_conversions'); | |
| // If no visit for this metric, but some conversions, we still want to display some kind of "revenue per visit" | |
| // even though it will actually be in this edge case "Revenue per conversion" | |
| return Piwik::getQuotientSafe($revenue, $nbVisits == 0 ? $conversions : $nbVisits, GoalManager::REVENUE_PRECISION); | |
| } | |
| public function format($value, Formatter $formatter) | |
| { | |
| return $formatter->getPrettyMoney($value, $this->idSite); | |
| } | |
| public function beforeFormat($report, DataTable $table) | |
| { | |
| $this->idSite = DataTableFactory::getSiteIdFromMetadata($table); | |
| return !empty($this->idSite); // skip formatting if there is no site to get currency info from | |
| } | |
| public function getSemanticType(): ?string | |
| { | |
| return Dimension::TYPE_MONEY; | |
| } | |
| } | |