|
- <?php
-
- namespace dokuwiki\Extension;
-
- use dokuwiki\Remote\Api;
- use dokuwiki\Remote\ApiCall;
- use ReflectionException;
- use ReflectionMethod;
-
- /**
- * Remote Plugin prototype
- *
- * Add functionality to the remote API in a plugin
- */
- abstract class RemotePlugin extends Plugin
- {
- private Api $api;
-
- /**
- * Constructor
- */
- public function __construct()
- {
- $this->api = new Api();
- }
-
- /**
- * Get all available methods with remote access.
- *
- * By default it exports all public methods of a remote plugin. Methods beginning
- * with an underscore are skipped.
- *
- * @return ApiCall[] Information about all provided methods. ('methodname' => ApiCall)
- * @throws ReflectionException
- */
- public function getMethods()
- {
- $result = [];
-
- $reflection = new \ReflectionClass($this);
- foreach ($reflection->getMethods(ReflectionMethod::IS_PUBLIC) as $method) {
- // skip parent methods, only methods further down are exported
- $declaredin = $method->getDeclaringClass()->name;
- if ($declaredin === 'dokuwiki\Extension\Plugin' || $declaredin === 'dokuwiki\Extension\RemotePlugin') {
- continue;
- }
- $method_name = $method->name;
- if ($method_name[0] === '_') {
- continue;
- }
- if ($method_name === 'getMethods') {
- continue; // skip self, if overridden
- }
-
- // add to result
- $result[$method_name] = new ApiCall([$this, $method_name], 'plugins');
- }
-
- return $result;
- }
-
- /**
- * @deprecated 2023-11-30
- */
- public function _getMethods()
- {
- dbg_deprecated('getMethods()');
- }
-
-
-
- /**
- * @return Api
- */
- protected function getApi()
- {
- return $this->api;
- }
- }
|