PluginProbe ʕ •ᴥ•ʔ
Matomo Analytics – Powerful, Privacy-First Insights for WordPress / 5.0.3
Matomo Analytics – Powerful, Privacy-First Insights for WordPress v5.0.3
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 2 years ago ApiRenderer.php 2 years ago CORSHandler.php 2 years ago DataTableGenericFilter.php 2 years ago DataTableManipulator.php 2 years ago DataTablePostProcessor.php 2 years ago DocumentationGenerator.php 2 years ago Inconsistencies.php 2 years ago NoDefaultValue.php 2 years ago Proxy.php 2 years ago Request.php 2 years ago ResponseBuilder.php 2 years ago
ApiRenderer.php
126 lines
1 <?php
2
3 /**
4 * Matomo - free/libre analytics platform
5 *
6 * @link https://matomo.org
7 * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
8 *
9 */
10 namespace Piwik\API;
11
12 use Exception;
13 use Piwik\Common;
14 use Piwik\DataTable\Renderer;
15 use Piwik\DataTable;
16 use Piwik\Piwik;
17 use Piwik\Plugin;
18 use Piwik\SettingsServer;
19 /**
20 * API renderer
21 */
22 abstract class ApiRenderer
23 {
24 protected $request;
25 protected $hideIdSubDataTable;
26 public final function __construct($request)
27 {
28 $this->request = $request;
29 $this->init();
30 }
31 protected function init()
32 {
33 $this->hideIdSubDataTable = Common::getRequestVar('hideIdSubDatable', false, 'int', $this->request);
34 }
35 protected function shouldSendBacktrace()
36 {
37 return Common::isPhpCliMode() && SettingsServer::isArchivePhpTriggered();
38 }
39 public abstract function sendHeader();
40 public function renderSuccess($message)
41 {
42 return 'Success:' . $message;
43 }
44 /**
45 * @param $message
46 * @param Exception|\Throwable $exception
47 * @return mixed
48 */
49 public function renderException($message, $exception)
50 {
51 return $message;
52 }
53 public function renderScalar($scalar)
54 {
55 $dataTable = new DataTable\Simple();
56 $dataTable->addRowsFromArray(array($scalar));
57 return $this->renderDataTable($dataTable);
58 }
59 public function renderDataTable($dataTable)
60 {
61 $renderer = $this->buildDataTableRenderer($dataTable);
62 return $renderer->render();
63 }
64 public function renderArray($array)
65 {
66 $renderer = $this->buildDataTableRenderer($array);
67 return $renderer->render();
68 }
69 public function renderObject($object)
70 {
71 $exception = new Exception('The API cannot handle this data structure.');
72 return $this->renderException($exception->getMessage(), $exception);
73 }
74 public function renderResource($resource)
75 {
76 $exception = new Exception('The API cannot handle this data structure.');
77 return $this->renderException($exception->getMessage(), $exception);
78 }
79 /**
80 * @param $dataTable
81 * @return Renderer
82 */
83 protected function buildDataTableRenderer($dataTable)
84 {
85 $format = self::getFormatFromClass(get_class($this));
86 $idSite = Common::getRequestVar('idSite', 0, 'int', $this->request);
87 if (empty($idSite)) {
88 $idSite = 'all';
89 }
90 $renderer = Renderer::factory($format);
91 $renderer->setTable($dataTable);
92 $renderer->setIdSite($idSite);
93 $renderer->setRenderSubTables(Common::getRequestVar('expanded', false, 'int', $this->request));
94 $renderer->setHideIdSubDatableFromResponse($this->hideIdSubDataTable);
95 return $renderer;
96 }
97 /**
98 * @param string $format
99 * @param array $request
100 * @return ApiRenderer
101 * @throws Exception
102 */
103 public static function factory($format, $request)
104 {
105 $formatToCheck = '\\' . ucfirst(strtolower($format));
106 $rendererClassnames = Plugin\Manager::getInstance()->findMultipleComponents('Renderer', 'Piwik\\API\\ApiRenderer');
107 foreach ($rendererClassnames as $klassName) {
108 if (Common::stringEndsWith($klassName, $formatToCheck)) {
109 return new $klassName($request);
110 }
111 }
112 $availableRenderers = array();
113 foreach ($rendererClassnames as $rendererClassname) {
114 $availableRenderers[] = self::getFormatFromClass($rendererClassname);
115 }
116 $availableRenderers = implode(', ', $availableRenderers);
117 Common::sendHeader('Content-Type: text/plain; charset=utf-8');
118 throw new Exception(Piwik::translate('General_ExceptionInvalidRendererFormat', array($format, $availableRenderers)));
119 }
120 private static function getFormatFromClass($klassname)
121 {
122 $klass = explode('\\', $klassname);
123 return strtolower(end($klass));
124 }
125 }
126