PluginProbe ʕ •ᴥ•ʔ
Matomo Analytics – Powerful, Privacy-First Insights for WordPress / 5.6.0
Matomo Analytics – Powerful, Privacy-First Insights for WordPress v5.6.0
5.13.0 5.12.1 5.12.0 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 8 months ago ApiRenderer.php 8 months ago CORSHandler.php 1 year ago DataTableGenericFilter.php 1 year ago DataTableManipulator.php 1 year ago DataTablePostProcessor.php 8 months ago DocumentationGenerator.php 8 months ago Inconsistencies.php 2 years ago NoDefaultValue.php 2 years ago Proxy.php 8 months ago Request.php 8 months ago ResponseBuilder.php 8 months ago
ApiRenderer.php
135 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 string $format
108 * @param array $request
109 * @return ApiRenderer
110 * @throws Exception
111 */
112 public static function factory(string $format, array $request) : \Piwik\API\ApiRenderer
113 {
114 $formatToCheck = '\\' . ucfirst(strtolower($format));
115 $rendererClassnames = Plugin\Manager::getInstance()->findMultipleComponents('Renderer', 'Piwik\\API\\ApiRenderer');
116 foreach ($rendererClassnames as $klassName) {
117 if (Common::stringEndsWith($klassName, $formatToCheck)) {
118 return new $klassName($request);
119 }
120 }
121 $availableRenderers = array();
122 foreach ($rendererClassnames as $rendererClassname) {
123 $availableRenderers[] = self::getFormatFromClass($rendererClassname);
124 }
125 $availableRenderers = implode(', ', $availableRenderers);
126 Common::sendHeader('Content-Type: text/plain; charset=utf-8');
127 throw new Exception(Piwik::translate('General_ExceptionInvalidRendererFormat', array($format, $availableRenderers)));
128 }
129 private static function getFormatFromClass(string $klassname) : string
130 {
131 $klass = explode('\\', $klassname);
132 return strtolower(end($klass));
133 }
134 }
135