[ Index ]

PHP Cross Reference of DokuWiki

title

Body

[close]

/inc/Extension/ -> RemotePlugin.php (source)

   1  <?php
   2  
   3  namespace dokuwiki\Extension;
   4  
   5  use dokuwiki\Remote\Api;
   6  use dokuwiki\Remote\ApiCall;
   7  use ReflectionException;
   8  use ReflectionMethod;
   9  
  10  /**
  11   * Remote Plugin prototype
  12   *
  13   * Add functionality to the remote API in a plugin
  14   */
  15  abstract class RemotePlugin extends Plugin
  16  {
  17      private Api $api;
  18  
  19      /**
  20       * Constructor
  21       */
  22      public function __construct()
  23      {
  24          $this->api = new Api();
  25      }
  26  
  27      /**
  28       * Get all available methods with remote access.
  29       *
  30       * By default it exports all public methods of a remote plugin. Methods beginning
  31       * with an underscore are skipped.
  32       *
  33       * @return ApiCall[] Information about all provided methods. ('methodname' => ApiCall)
  34       * @throws ReflectionException
  35       */
  36      public function getMethods()
  37      {
  38          $result = [];
  39  
  40          $reflection = new \ReflectionClass($this);
  41          foreach ($reflection->getMethods(ReflectionMethod::IS_PUBLIC) as $method) {
  42              // skip parent methods, only methods further down are exported
  43              $declaredin = $method->getDeclaringClass()->name;
  44              if ($declaredin === 'dokuwiki\Extension\Plugin' || $declaredin === 'dokuwiki\Extension\RemotePlugin') {
  45                  continue;
  46              }
  47              $method_name = $method->name;
  48              if ($method_name[0] ===  '_') {
  49                  continue;
  50              }
  51              if ($method_name === 'getMethods') {
  52                  continue; // skip self, if overridden
  53              }
  54  
  55              // add to result
  56              $result[$method_name] = new ApiCall([$this, $method_name], 'plugins');
  57          }
  58  
  59          return $result;
  60      }
  61  
  62      /**
  63       * @deprecated 2023-11-30
  64       */
  65      public function _getMethods()
  66      {
  67          dbg_deprecated('getMethods()');
  68      }
  69  
  70  
  71  
  72      /**
  73       * @return Api
  74       */
  75      protected function getApi()
  76      {
  77          return $this->api;
  78      }
  79  }