PluginProbe ʕ •ᴥ•ʔ
Matomo Analytics – Powerful, Privacy-First Insights for WordPress / 5.2.0
Matomo Analytics – Powerful, Privacy-First Insights for WordPress v5.2.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 1 year ago ApiRenderer.php 1 year ago CORSHandler.php 1 year ago DataTableGenericFilter.php 1 year ago DataTableManipulator.php 1 year ago DataTablePostProcessor.php 1 year ago DocumentationGenerator.php 1 year ago Inconsistencies.php 2 years ago NoDefaultValue.php 2 years ago Proxy.php 1 year ago Request.php 1 year ago ResponseBuilder.php 1 year 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