xref: /plugin/combinedlogs/action.php (revision 244ef61d2f1fe1defdf9d188047f3d320ded4df4) !
1*244ef61dSIain Hallam<?php
2*244ef61dSIain Hallam
3*244ef61dSIain Hallam/**
4*244ef61dSIain Hallam * DokuWiki Plugin combinedlogs (Action Component)
5*244ef61dSIain Hallam *
6*244ef61dSIain Hallam * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html
7*244ef61dSIain Hallam * @author Iain Hallam <first.last@example.com>
8*244ef61dSIain Hallam */
9*244ef61dSIain Hallam
10*244ef61dSIain Hallamuse dokuwiki\Extension\ActionPlugin;
11*244ef61dSIain Hallamuse dokuwiki\Extension\EventHandler;
12*244ef61dSIain Hallamuse dokuwiki\Extension\Event;
13*244ef61dSIain Hallamuse dokuwiki\Logger;
14*244ef61dSIain Hallam
15*244ef61dSIain Hallam// phpcs:disable PSR1.Classes.ClassDeclaration -- DokuWiki plugins must not be in a namespace
16*244ef61dSIain Hallam// phpcs:disable Squiz.Classes.ValidClassName -- DokuWiki requires snake case class names
17*244ef61dSIain Hallamclass action_plugin_combinedlogs extends ActionPlugin
18*244ef61dSIain Hallam{
19*244ef61dSIain Hallam    private Logger $logger;
20*244ef61dSIain Hallam
21*244ef61dSIain Hallam    public function __construct()
22*244ef61dSIain Hallam    {
23*244ef61dSIain Hallam        $this->logger = Logger::getInstance($this->getConf('facility'));
24*244ef61dSIain Hallam    }
25*244ef61dSIain Hallam
26*244ef61dSIain Hallam    /** @inheritDoc */
27*244ef61dSIain Hallam    public function register(EventHandler $controller)
28*244ef61dSIain Hallam    {
29*244ef61dSIain Hallam        $controller->register_hook('LOGGER_DATA_FORMAT', 'AFTER', $this, 'handleLoggerDataFormat');
30*244ef61dSIain Hallam    }
31*244ef61dSIain Hallam
32*244ef61dSIain Hallam    /**
33*244ef61dSIain Hallam     * Event handler for LOGGER_DATA_FORMAT
34*244ef61dSIain Hallam     *
35*244ef61dSIain Hallam     * @see https://www.dokuwiki.org/devel:events:LOGGER_DATA_FORMAT
36*244ef61dSIain Hallam     * @param Event $event Event object by reference
37*244ef61dSIain Hallam     * @param mixed $param optional parameter passed when event was registered
38*244ef61dSIain Hallam     * @return void
39*244ef61dSIain Hallam     */
40*244ef61dSIain Hallam    public function handleLoggerDataFormat(Event $event)
41*244ef61dSIain Hallam    {
42*244ef61dSIain Hallam        global $conf;
43*244ef61dSIain Hallam
44*244ef61dSIain Hallam        // Work out the file name
45*244ef61dSIain Hallam        if ($this->getConf('by_date') == 1) {
46*244ef61dSIain Hallam            $event->data['logfile'] = $this->logger->getLogFile($event->data['datetime']);
47*244ef61dSIain Hallam        } else {
48*244ef61dSIain Hallam            $event->data['logfile'] = $conf['logdir'] . '/' . $this->getConf('facility') . '.log';
49*244ef61dSIain Hallam        }
50*244ef61dSIain Hallam
51*244ef61dSIain Hallam        // Modify the first log line to include the facility name
52*244ef61dSIain Hallam        $event->data['loglines'][0] = preg_replace(
53*244ef61dSIain Hallam            '/^([0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2})\t/',  // YYYY-MM-DD HH:MM:SS
54*244ef61dSIain Hallam            "$1\t" . strtoupper($event->data['facility']) . "\t",
55*244ef61dSIain Hallam            $event->data['loglines'][0]
56*244ef61dSIain Hallam        );
57*244ef61dSIain Hallam    }
58*244ef61dSIain Hallam}
59