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