xref: /plugin/watchcycle/cli.php (revision ba165cbdaeb7014f1bdb255bbc5ff720df32cd92)
1*ba165cbdSAnna Dabrowska<?php
2*ba165cbdSAnna Dabrowska
3*ba165cbdSAnna Dabrowskause dokuwiki\Extension\CLIPlugin;
4*ba165cbdSAnna Dabrowskause splitbrain\phpcli\Exception;
5*ba165cbdSAnna Dabrowskause splitbrain\phpcli\Options;
6*ba165cbdSAnna Dabrowska
7*ba165cbdSAnna Dabrowskaclass cli_plugin_watchcycle extends CLIPlugin
8*ba165cbdSAnna Dabrowska{
9*ba165cbdSAnna Dabrowska    /** @var helper_plugin_watchcycle_db */
10*ba165cbdSAnna Dabrowska    protected $dbHelper;
11*ba165cbdSAnna Dabrowska
12*ba165cbdSAnna Dabrowska    /** @var helper_plugin_watchcycle */
13*ba165cbdSAnna Dabrowska    protected $helper;
14*ba165cbdSAnna Dabrowska
15*ba165cbdSAnna Dabrowska    /**
16*ba165cbdSAnna Dabrowska     * Initialize helper plugins
17*ba165cbdSAnna Dabrowska     */
18*ba165cbdSAnna Dabrowska    public function __construct()
19*ba165cbdSAnna Dabrowska    {
20*ba165cbdSAnna Dabrowska        parent::__construct();
21*ba165cbdSAnna Dabrowska        $this->dbHelper = plugin_load('helper', 'watchcycle_db');
22*ba165cbdSAnna Dabrowska        $this->helper = plugin_load('helper', 'watchcycle');
23*ba165cbdSAnna Dabrowska    }
24*ba165cbdSAnna Dabrowska
25*ba165cbdSAnna Dabrowska    /**
26*ba165cbdSAnna Dabrowska     * Register options and arguments on the given $options object
27*ba165cbdSAnna Dabrowska     *
28*ba165cbdSAnna Dabrowska     * @param Options $options
29*ba165cbdSAnna Dabrowska     * @return void
30*ba165cbdSAnna Dabrowska     * @throws Exception
31*ba165cbdSAnna Dabrowska     */
32*ba165cbdSAnna Dabrowska    protected function setup(Options $options)
33*ba165cbdSAnna Dabrowska    {
34*ba165cbdSAnna Dabrowska        $options->setHelp('Watchcycle notification dispatcher');
35*ba165cbdSAnna Dabrowska        $options->registerCommand('send', 'Notify maintainers if necessary');
36*ba165cbdSAnna Dabrowska    }
37*ba165cbdSAnna Dabrowska
38*ba165cbdSAnna Dabrowska    /**
39*ba165cbdSAnna Dabrowska     * Your main program
40*ba165cbdSAnna Dabrowska     *
41*ba165cbdSAnna Dabrowska     * Arguments and options have been parsed when this is run
42*ba165cbdSAnna Dabrowska     *
43*ba165cbdSAnna Dabrowska     * @param Options $options
44*ba165cbdSAnna Dabrowska     * @return void
45*ba165cbdSAnna Dabrowska     */
46*ba165cbdSAnna Dabrowska    protected function main(Options $options)
47*ba165cbdSAnna Dabrowska    {
48*ba165cbdSAnna Dabrowska        $cmd = $options->getCmd();
49*ba165cbdSAnna Dabrowska        switch ($cmd) {
50*ba165cbdSAnna Dabrowska            case 'send':
51*ba165cbdSAnna Dabrowska                $this->sendNotifications();
52*ba165cbdSAnna Dabrowska                break;
53*ba165cbdSAnna Dabrowska            default:
54*ba165cbdSAnna Dabrowska                $this->error('No command provided');
55*ba165cbdSAnna Dabrowska                exit(1);
56*ba165cbdSAnna Dabrowska        }
57*ba165cbdSAnna Dabrowska    }
58*ba165cbdSAnna Dabrowska
59*ba165cbdSAnna Dabrowska    /**
60*ba165cbdSAnna Dabrowska     * Check and send notifications
61*ba165cbdSAnna Dabrowska     */
62*ba165cbdSAnna Dabrowska    protected function sendNotifications()
63*ba165cbdSAnna Dabrowska    {
64*ba165cbdSAnna Dabrowska        $rows = $this->dbHelper->getAll();
65*ba165cbdSAnna Dabrowska        if (!is_array($rows)) {
66*ba165cbdSAnna Dabrowska            $this->info('Exiting: no users to notify found.');
67*ba165cbdSAnna Dabrowska            return;
68*ba165cbdSAnna Dabrowska        }
69*ba165cbdSAnna Dabrowska
70*ba165cbdSAnna Dabrowska        auth_setup();
71*ba165cbdSAnna Dabrowska
72*ba165cbdSAnna Dabrowska        foreach ($rows as $row) {
73*ba165cbdSAnna Dabrowska            if (!$row['uptodate']) {
74*ba165cbdSAnna Dabrowska                $this->helper->informMaintainer($row['maintainer'], $row['page']);
75*ba165cbdSAnna Dabrowska            }
76*ba165cbdSAnna Dabrowska        }
77*ba165cbdSAnna Dabrowska    }
78*ba165cbdSAnna Dabrowska}
79