[ Index ]

PHP Cross Reference of DokuWiki

title

Body

[close]

/lib/plugins/logviewer/ -> action.php (source)

   1  <?php
   2  
   3  use dokuwiki\Extension\ActionPlugin;
   4  use dokuwiki\Extension\EventHandler;
   5  use dokuwiki\Extension\Event;
   6  
   7  /**
   8   * DokuWiki Plugin logviewer (Action Component)
   9   *
  10   * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html
  11   * @author Andreas Gohr <andi@splitbrain.org>
  12   */
  13  class action_plugin_logviewer extends ActionPlugin
  14  {
  15      /** @inheritDoc */
  16      public function register(EventHandler $controller)
  17      {
  18          $controller->register_hook('INDEXER_TASKS_RUN', 'AFTER', $this, 'pruneLogs');
  19      }
  20  
  21  
  22      /**
  23       * Event handler for INDEXER_TASKS_RUN
  24       *
  25       * @see https://www.dokuwiki.org/devel:events:INDEXER_TASKS_RUN
  26       * @param Event $event Event object
  27       * @param mixed $param optional parameter passed when event was registered
  28       * @return void
  29       */
  30      public function pruneLogs(Event $event, $param)
  31      {
  32          global $conf;
  33  
  34          $prune = $conf['logdir'] . '/pruned';
  35          if (@filemtime($prune) > time() - 24 * 60 * 60) {
  36              return; // already pruned today
  37          }
  38  
  39          $logdirs = glob($conf['logdir'] . '/*', GLOB_ONLYDIR | GLOB_NOSORT);
  40          foreach ($logdirs as $dir) {
  41              $dates = glob($dir . '/*.log'); // glob returns sorted results
  42              if (count($dates) > $conf['logretain']) {
  43                  $dates = array_slice($dates, 0, -1 * $conf['logretain']);
  44                  foreach ($dates as $date) {
  45                      io_rmdir($date, true);
  46                  }
  47              }
  48          }
  49  
  50          io_saveFile($prune, '');
  51      }
  52  }