1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147
|
<?php
/**
* 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\MobileMessaging\ReportRenderer;
use Piwik\Common;
use Piwik\Plugins\MultiSites\API;
use Piwik\ReportRenderer;
use Piwik\Site;
use Piwik\View;
/**
*
*/
class Sms extends ReportRenderer
{
public const FLOAT_REGEXP = '/[-+]?[0-9]*[\.,]?[0-9]+/';
public const SMS_CONTENT_TYPE = 'text/plain';
public const SMS_FILE_EXTENSION = 'sms';
private $rendering = "";
public function setLocale($locale)
{
// nothing to do
}
public function sendToDisk($filename)
{
return ReportRenderer::writeFile($filename, self::SMS_FILE_EXTENSION, $this->rendering);
}
public function sendToBrowserDownload($filename)
{
ReportRenderer::sendToBrowser($filename, self::SMS_FILE_EXTENSION, self::SMS_CONTENT_TYPE, $this->rendering);
}
public function sendToBrowserInline($filename)
{
ReportRenderer::inlineToBrowser(self::SMS_CONTENT_TYPE, $this->rendering);
}
public function getRenderedReport()
{
return $this->rendering;
}
public function renderFrontPage($reportTitle, $prettyDate, $description, $reportMetadata, $segment)
{
// nothing to do
}
public function renderReport($processedReport)
{
$isGoalPluginEnabled = Common::isGoalPluginEnabled();
$prettyDate = $processedReport['prettyDate'];
$reportData = $processedReport['reportData'];
$evolutionMetrics = [];
$multiSitesAPIMetrics = API::getApiMetrics($enhanced = true);
foreach ($multiSitesAPIMetrics as $metricSettings) {
$evolutionMetrics[] = $metricSettings[API::METRIC_EVOLUTION_COL_NAME_KEY];
}
$floatRegex = self::FLOAT_REGEXP;
// no decimal for all metrics to shorten SMS content (keeps the monetary sign for revenue metrics)
$reportData->filter(
'ColumnCallbackReplace',
[
array_merge(
array_keys($multiSitesAPIMetrics),
$evolutionMetrics
),
function ($value) use ($floatRegex) {
return preg_replace_callback(
$floatRegex,
function ($matches) {
return round((float)$matches[0]);
},
$value
);
},
]
);
// evolution metrics formatting :
// - remove monetary, percentage and white spaces to shorten SMS content
// (this is also needed to be able to test $value != 0 and see if there is an evolution at all in SMSReport.twig)
$reportData->filter(
'ColumnCallbackReplace',
[
$evolutionMetrics,
function ($value) use ($floatRegex) {
$matched = preg_match($floatRegex, $value, $matches);
return $matched ? (float)$matches[0] : $value;
},
]
);
$dataRows = $reportData->getRows();
$reportMetadata = $processedReport['reportMetadata'];
$reportRowsMetadata = $reportMetadata->getRows();
$siteHasECommerce = [];
foreach ($reportRowsMetadata as $rowMetadata) {
$idSite = $rowMetadata->getColumn('idsite');
$siteHasECommerce[$idSite] = Site::isEcommerceEnabledFor($idSite);
}
$view = new View('@MobileMessaging/SMSReport');
$view->assign("isGoalPluginEnabled", $isGoalPluginEnabled);
$view->assign("reportRows", $dataRows);
$view->assign("reportRowsMetadata", $reportRowsMetadata);
$view->assign("prettyDate", $prettyDate);
$view->assign("siteHasECommerce", $siteHasECommerce);
$view->assign("displaySiteName", $processedReport['metadata']['action'] == 'getAll');
// segment
$segment = $processedReport['segment'];
$displaySegment = ($segment != null);
$view->assign("displaySegment", $displaySegment);
if ($displaySegment) {
$view->assign("segmentName", $segment['name']);
}
$this->rendering .= $view->render();
}
/**
* Get report attachments, ex. graph images
*
* @param $report
* @param $processedReports
* @param $prettyDate
* @return array
*/
public function getAttachments($report, $processedReports, $prettyDate)
{
return [];
}
}
|