[ Index ]

PHP Cross Reference of DokuWiki

title

Body

[close]

/lib/plugins/popularity/ -> admin.php (source)

   1  <?php
   2  
   3  use dokuwiki\Extension\AdminPlugin;
   4  
   5  /**
   6   * Popularity Feedback Plugin
   7   *
   8   * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
   9   * @author     Andreas Gohr <andi@splitbrain.org>
  10   */
  11  class admin_plugin_popularity extends AdminPlugin
  12  {
  13      /** @var helper_plugin_popularity */
  14      protected $helper;
  15      protected $sentStatus;
  16  
  17      /**
  18       * admin_plugin_popularity constructor.
  19       */
  20      public function __construct()
  21      {
  22          $this->helper = $this->loadHelper('popularity', false);
  23      }
  24  
  25      /**
  26       * return prompt for admin menu
  27       * @param $language
  28       * @return string
  29       */
  30      public function getMenuText($language)
  31      {
  32          return $this->getLang('name');
  33      }
  34  
  35      /**
  36       * return sort order for position in admin menu
  37       */
  38      public function getMenuSort()
  39      {
  40          return 2000;
  41      }
  42  
  43      /**
  44       * Accessible for managers
  45       */
  46      public function forAdminOnly()
  47      {
  48          return false;
  49      }
  50  
  51  
  52      /**
  53       * handle user request
  54       */
  55      public function handle()
  56      {
  57          global $INPUT;
  58  
  59          //Send the data
  60          if ($INPUT->has('data')) {
  61              $this->sentStatus = $this->helper->sendData($INPUT->str('data'));
  62              if ($this->sentStatus === '') {
  63                  //Update the last time we sent the data
  64                  touch($this->helper->popularityLastSubmitFile);
  65              }
  66              //Deal with the autosubmit option
  67              $this->enableAutosubmit($INPUT->has('autosubmit'));
  68          }
  69      }
  70  
  71      /**
  72       * Enable or disable autosubmit
  73       * @param bool $enable If TRUE, it will enable autosubmit. Else, it will disable it.
  74       */
  75      protected function enableAutosubmit($enable)
  76      {
  77          if ($enable) {
  78              io_saveFile($this->helper->autosubmitFile, ' ');
  79          } else {
  80              @unlink($this->helper->autosubmitFile);
  81          }
  82      }
  83  
  84      /**
  85       * Output HTML form
  86       */
  87      public function html()
  88      {
  89          global $INPUT;
  90  
  91          if (! $INPUT->has('data')) {
  92              echo $this->locale_xhtml('intro');
  93              //If there was an error the last time we tried to autosubmit, warn the user
  94              if ($this->helper->isAutoSubmitEnabled()) {
  95                  if (file_exists($this->helper->autosubmitErrorFile)) {
  96                      echo $this->getLang('autosubmitError');
  97                      echo io_readFile($this->helper->autosubmitErrorFile);
  98                  }
  99              }
 100              flush();
 101              echo $this->buildForm('server');
 102              //Print the last time the data was sent
 103              $lastSent = $this->helper->lastSentTime();
 104              if ($lastSent !== 0) {
 105                  echo $this->getLang('lastSent') . ' ' . datetime_h($lastSent);
 106              }
 107          } elseif ($this->sentStatus === '') {
 108              //If we successfully send the data
 109              echo $this->locale_xhtml('submitted');
 110          } else {
 111              //If we failed to submit the data, try directly with the browser
 112              echo $this->getLang('submissionFailed') . $this->sentStatus . '<br />';
 113              echo $this->getLang('submitDirectly');
 114              echo $this->buildForm('browser', $INPUT->str('data'));
 115          }
 116      }
 117  
 118  
 119      /**
 120       * Build the form which presents the data to be sent
 121       * @param string $submissionMode How is the data supposed to be sent? (may be: 'browser' or 'server')
 122       * @param string $data   The popularity data, if it has already been computed. NULL otherwise.
 123       * @return string The form, as an html string
 124       */
 125      protected function buildForm($submissionMode, $data = null)
 126      {
 127          $url = ($submissionMode === 'browser' ? $this->helper->submitUrl : script());
 128          if (is_null($data)) {
 129              $data = $this->helper->gatherAsString();
 130          }
 131  
 132          $form = '<form method="post" action="' . $url  . '" accept-charset="utf-8">'
 133              . '<fieldset style="width: 60%;">'
 134              . '<textarea class="edit" rows="10" cols="80" readonly="readonly" name="data">'
 135              . $data
 136              . '</textarea><br />';
 137  
 138          //If we submit via the server, we give the opportunity to suscribe to the autosubmission option
 139          if ($submissionMode !== 'browser') {
 140              $form .= '<label for="autosubmit">'
 141                  . '<input type="checkbox" name="autosubmit" id="autosubmit" '
 142                  . ($this->helper->isAutosubmitEnabled() ? 'checked' : '' )
 143                  . '/> ' . $this->getLang('autosubmit') . '<br />'
 144                  . '</label>'
 145                  . '<input type="hidden" name="do" value="admin" />'
 146                  . '<input type="hidden" name="page" value="popularity" />';
 147          }
 148          $form .= '<button type="submit">' . $this->getLang('submit') . '</button>'
 149              . '</fieldset>'
 150              . '</form>';
 151          return $form;
 152      }
 153  }