PluginProbe ʕ •ᴥ•ʔ
Matomo Analytics – Powerful, Privacy-First Insights for WordPress / trunk
Matomo Analytics – Powerful, Privacy-First Insights for WordPress vtrunk
5.11.1 5.11.0 5.10.2 5.10.1 trunk 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.1.0 1.1.1 1.1.2 1.1.3 1.2.0 1.3.0 1.3.1 1.3.2 4.0.0 4.0.1 4.0.2 4.0.3 4.0.4 4.1.0 4.1.1 4.1.2 4.1.3 4.10.0 4.11.0 4.12.0 4.13.0 4.13.2 4.13.3 4.13.4 4.13.5 4.14.0 4.14.1 4.14.2 4.15.0 4.15.1 4.15.2 4.15.3 4.2.0 4.3.0 4.3.1 4.4.1 4.4.2 4.5.0 4.6.0 5.0.1 5.0.2 5.0.3 5.0.4 5.0.5 5.0.6 5.0.7 5.0.8 5.1.0 5.1.1 5.1.2 5.1.3 5.1.4 5.1.5 5.1.6 5.1.7 5.10.0 5.2.0 5.2.1 5.2.2 5.3.0 5.3.1 5.3.2 5.3.3 5.6.0 5.6.1 5.7.0 5.7.1 5.8.0 5.8.1 5.8.2
matomo / app / core / API / ApiRenderer.php
matomo / app / core / API Last commit date
DataTableManipulator 1 month ago ApiRenderer.php 3 months ago CORSHandler.php 1 year ago DataTableGenericFilter.php 1 month ago DataTableManipulator.php 1 month ago DataTablePostProcessor.php 1 month ago DocumentationGenerator.php 6 months ago Inconsistencies.php 2 years ago NoDefaultValue.php 2 years ago Proxy.php 1 month ago Request.php 1 month ago ResponseBuilder.php 1 month ago
ApiRenderer.php
133 lines
1 <?php
2
3 /**
4 * Matomo - free/libre analytics platform
5 *
6 * @link https://matomo.org
7 * @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
8 */
9 namespace Piwik\API;
10
11 use Exception;
12 use Piwik\Common;
13 use Piwik\DataTable\Renderer;
14 use Piwik\DataTable;
15 use Piwik\Piwik;
16 use Piwik\Plugin;
17 use Piwik\SettingsServer;
18 /**
19 * API renderer
20 */
21 abstract class ApiRenderer
22 {
23 /** @var array */
24 protected $request;
25 /** @var \Piwik\Request */
26 protected $requestObj;
27 /** @var bool */
28 protected $hideIdSubDataTable;
29 /** @var bool */
30 protected $showMetadata;
31 public final function __construct($request)
32 {
33 $this->request = is_array($request) ? $request : [];
34 $this->requestObj = new \Piwik\Request($this->request);
35 $this->init();
36 }
37 protected function init()
38 {
39 $this->hideIdSubDataTable = $this->requestObj->getBoolParameter('hideIdSubDatable', \false);
40 $this->showMetadata = $this->requestObj->getBoolParameter('showMetadata', \true);
41 // @todo change default in Matomo 6
42 }
43 protected function shouldSendBacktrace() : bool
44 {
45 return Common::isPhpCliMode() && SettingsServer::isArchivePhpTriggered();
46 }
47 public abstract function sendHeader();
48 public function renderSuccess($message)
49 {
50 return 'Success:' . $message;
51 }
52 /**
53 * @param $message
54 * @param Exception|\Throwable $exception
55 * @return mixed
56 */
57 public function renderException($message, $exception)
58 {
59 return $message;
60 }
61 public function renderScalar($scalar)
62 {
63 $dataTable = new DataTable\Simple();
64 $dataTable->addRowsFromArray(array($scalar));
65 return $this->renderDataTable($dataTable);
66 }
67 public function renderDataTable($dataTable)
68 {
69 $renderer = $this->buildDataTableRenderer($dataTable);
70 return $renderer->render();
71 }
72 public function renderArray($array)
73 {
74 $renderer = $this->buildDataTableRenderer($array);
75 return $renderer->render();
76 }
77 public function renderObject($object)
78 {
79 $exception = new Exception('The API cannot handle this data structure.');
80 return $this->renderException($exception->getMessage(), $exception);
81 }
82 public function renderResource($resource)
83 {
84 $exception = new Exception('The API cannot handle this data structure.');
85 return $this->renderException($exception->getMessage(), $exception);
86 }
87 /**
88 * @param $dataTable
89 * @return Renderer
90 */
91 protected function buildDataTableRenderer($dataTable)
92 {
93 $format = self::getFormatFromClass(get_class($this));
94 $idSite = $this->requestObj->getIntegerParameter('idSite', 0);
95 if (empty($idSite)) {
96 $idSite = 'all';
97 }
98 $renderer = Renderer::factory($format);
99 $renderer->setTable($dataTable);
100 $renderer->setIdSite($idSite);
101 $renderer->setRenderSubTables($this->requestObj->getBoolParameter('expanded', \false));
102 $renderer->setHideIdSubDatableFromResponse($this->hideIdSubDataTable);
103 $renderer->setHideMetadataFromResponse(!$this->showMetadata);
104 return $renderer;
105 }
106 /**
107 * @param array $request
108 * @throws Exception
109 */
110 public static function factory(string $format, array $request) : \Piwik\API\ApiRenderer
111 {
112 $formatToCheck = '\\' . ucfirst(strtolower($format));
113 $rendererClassnames = Plugin\Manager::getInstance()->findMultipleComponents('Renderer', 'Piwik\\API\\ApiRenderer');
114 foreach ($rendererClassnames as $klassName) {
115 if (Common::stringEndsWith($klassName, $formatToCheck)) {
116 return new $klassName($request);
117 }
118 }
119 $availableRenderers = array();
120 foreach ($rendererClassnames as $rendererClassname) {
121 $availableRenderers[] = self::getFormatFromClass($rendererClassname);
122 }
123 $availableRenderers = implode(', ', $availableRenderers);
124 Common::sendHeader('Content-Type: text/plain; charset=utf-8');
125 throw new Exception(Piwik::translate('General_ExceptionInvalidRendererFormat', array($format, $availableRenderers)));
126 }
127 private static function getFormatFromClass(string $klassname) : string
128 {
129 $klass = explode('\\', $klassname);
130 return strtolower(end($klass));
131 }
132 }
133