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