xref: /plugin/bez/cron/functions.php (revision 8d31684b59cd74df19e69f525a2cd4ce398f2bf9)
1*8d31684bSSzymon Olewniczak<?php
2*8d31684bSSzymon Olewniczak
3*8d31684bSSzymon Olewniczakrequire_once DOKU_PLUGIN.'bez/helper.php';
4*8d31684bSSzymon Olewniczak
5*8d31684bSSzymon Olewniczakrequire_once DOKU_PLUGIN.'bez/exceptions.php';
6*8d31684bSSzymon Olewniczakrequire_once DOKU_PLUGIN.'bez/interfaces.php';
7*8d31684bSSzymon Olewniczak
8*8d31684bSSzymon Olewniczakrequire_once DOKU_PLUGIN.'bez/mdl/model.php';
9*8d31684bSSzymon Olewniczak
10*8d31684bSSzymon Olewniczak$action = new class extends DokuWiki_Action_Plugin {
11*8d31684bSSzymon Olewniczak    public function getPluginName() {
12*8d31684bSSzymon Olewniczak        return 'bez';
13*8d31684bSSzymon Olewniczak    }
14*8d31684bSSzymon Olewniczak
15*8d31684bSSzymon Olewniczak    public function id() {
16*8d31684bSSzymon Olewniczak        $args = func_get_args();
17*8d31684bSSzymon Olewniczak        array_unshift($args, 'bez');
18*8d31684bSSzymon Olewniczak
19*8d31684bSSzymon Olewniczak        return implode(':', $args);
20*8d31684bSSzymon Olewniczak    }
21*8d31684bSSzymon Olewniczak};
22*8d31684bSSzymon Olewniczak$model = new BEZ_mdl_Model($auth, $dw_user, $action, $conf);
23*8d31684bSSzymon Olewniczak
24*8d31684bSSzymon Olewniczakfunction send_inactive_issue() {
25*8d31684bSSzymon Olewniczak    global $model;
26*8d31684bSSzymon Olewniczak
27*8d31684bSSzymon Olewniczak    $issues = $model->issues->get_all(array(
28*8d31684bSSzymon Olewniczak        'last_activity' => array('<=',
29*8d31684bSSzymon Olewniczak            date('Y-m-d 00:00', strtotime('-30 days'))
30*8d31684bSSzymon Olewniczak        ),
31*8d31684bSSzymon Olewniczak        'state' => '0'
32*8d31684bSSzymon Olewniczak    ));
33*8d31684bSSzymon Olewniczak
34*8d31684bSSzymon Olewniczak    foreach ($issues as $issue) {
35*8d31684bSSzymon Olewniczak        //send reminder once a month
36*8d31684bSSzymon Olewniczak        $day_of_issue_last_activity = date('d', strtotime($issue->last_activity));
37*8d31684bSSzymon Olewniczak        if ($day_of_issue_last_activity === date('d')) {
38*8d31684bSSzymon Olewniczak            $issue->mail_notify_issue_inactive();
39*8d31684bSSzymon Olewniczak        }
40*8d31684bSSzymon Olewniczak    }
41*8d31684bSSzymon Olewniczak}
42*8d31684bSSzymon Olewniczak
43*8d31684bSSzymon Olewniczakfunction send_one_day_task_reminder() {
44*8d31684bSSzymon Olewniczak    global $model;
45*8d31684bSSzymon Olewniczak
46*8d31684bSSzymon Olewniczak    $tasks = $model->tasks->get_all(array(
47*8d31684bSSzymon Olewniczak        'plan_date' => date('Y-m-d', strtotime('+1 day')),
48*8d31684bSSzymon Olewniczak        'state'     => '0' //only open tasks
49*8d31684bSSzymon Olewniczak    ));
50*8d31684bSSzymon Olewniczak
51*8d31684bSSzymon Olewniczak    foreach ($tasks as $task) {
52*8d31684bSSzymon Olewniczak        $task->mail_notify_remind();
53*8d31684bSSzymon Olewniczak    }
54*8d31684bSSzymon Olewniczak}
55*8d31684bSSzymon Olewniczak
56*8d31684bSSzymon Olewniczakfunction send_weekly_message($simulate=true) {
57*8d31684bSSzymon Olewniczak    global $conf, $auth, $bezlang;
58*8d31684bSSzymon Olewniczak
59*8d31684bSSzymon Olewniczak    $helper = new helper_plugin_bez();
60*8d31684bSSzymon Olewniczak
61*8d31684bSSzymon Olewniczak   //email => array('user' => array('issues' => array(), 'tasks' => array()))
62*8d31684bSSzymon Olewniczak    $msg = array();
63*8d31684bSSzymon Olewniczak    $output = array();
64*8d31684bSSzymon Olewniczak
65*8d31684bSSzymon Olewniczak    try {
66*8d31684bSSzymon Olewniczak        $isso = new Issues();
67*8d31684bSSzymon Olewniczak        $tasko = new Tasks();
68*8d31684bSSzymon Olewniczak    } catch (Exception $e) {
69*8d31684bSSzymon Olewniczak        echo $e->getMessage().': '.$e->getFile();
70*8d31684bSSzymon Olewniczak    }
71*8d31684bSSzymon Olewniczak
72*8d31684bSSzymon Olewniczak    $issues = $isso->cron_get_unsolved();
73*8d31684bSSzymon Olewniczak
74*8d31684bSSzymon Olewniczak    foreach ($issues as $issue) {
75*8d31684bSSzymon Olewniczak        $key = $issue['coordinator'];
76*8d31684bSSzymon Olewniczak        if (!isset($msg[$key]))
77*8d31684bSSzymon Olewniczak            $msg[$key] = array('issues' => array(), 'coming_tasks' => array(),
78*8d31684bSSzymon Olewniczak                                'outdated_tasks' => array());
79*8d31684bSSzymon Olewniczak
80*8d31684bSSzymon Olewniczak        $msg[$key]['issues'][] = $issue;
81*8d31684bSSzymon Olewniczak    }
82*8d31684bSSzymon Olewniczak
83*8d31684bSSzymon Olewniczak    $coming_tasks_all  = $tasko->cron_get_coming_tasks();
84*8d31684bSSzymon Olewniczak
85*8d31684bSSzymon Olewniczak    foreach ($coming_tasks_all as $task) {
86*8d31684bSSzymon Olewniczak        $key = $task['executor'];
87*8d31684bSSzymon Olewniczak        if (!isset($msg[$key]))
88*8d31684bSSzymon Olewniczak            $msg[$key] = array('issues' => array(), 'coming_tasks' => array(),
89*8d31684bSSzymon Olewniczak                                'outdated_tasks' => array());
90*8d31684bSSzymon Olewniczak
91*8d31684bSSzymon Olewniczak        $msg[$key]['coming_tasks'][] = $task;
92*8d31684bSSzymon Olewniczak    }
93*8d31684bSSzymon Olewniczak
94*8d31684bSSzymon Olewniczak    $outdated_tasks_all  = $tasko->cron_get_outdated_tasks();
95*8d31684bSSzymon Olewniczak
96*8d31684bSSzymon Olewniczak    foreach ($outdated_tasks_all as $task) {
97*8d31684bSSzymon Olewniczak        $key = $task['executor'];
98*8d31684bSSzymon Olewniczak        if (!isset($msg[$key]))
99*8d31684bSSzymon Olewniczak            $msg[$key] = array('issues' => array(), 'coming_tasks' => array(),
100*8d31684bSSzymon Olewniczak                                'outdated_tasks' => array());
101*8d31684bSSzymon Olewniczak
102*8d31684bSSzymon Olewniczak        $msg[$key]['outdated_tasks'][] = $task;
103*8d31684bSSzymon Olewniczak    }
104*8d31684bSSzymon Olewniczak
105*8d31684bSSzymon Olewniczak    //outdated_tasks, coming_tasks, open_tasks
106*8d31684bSSzymon Olewniczak
107*8d31684bSSzymon Olewniczak
108*8d31684bSSzymon Olewniczak    foreach ($msg as $user => $data) {
109*8d31684bSSzymon Olewniczak        $udata = $auth->getUserData($user);
110*8d31684bSSzymon Olewniczak
111*8d31684bSSzymon Olewniczak        $his_issues = $data['issues'];
112*8d31684bSSzymon Olewniczak        $outdated_tasks = $data['outdated_tasks'];
113*8d31684bSSzymon Olewniczak        $coming_tasks = $data['coming_tasks'];
114*8d31684bSSzymon Olewniczak
115*8d31684bSSzymon Olewniczak
116*8d31684bSSzymon Olewniczak        if (count($his_issues) + count($outdated_tasks) + count($coming_tasks) == 0)
117*8d31684bSSzymon Olewniczak            continue;
118*8d31684bSSzymon Olewniczak
119*8d31684bSSzymon Olewniczak        $to = $udata['name'].' <'.$udata['mail'].'>';
120*8d31684bSSzymon Olewniczak
121*8d31684bSSzymon Olewniczak        ob_start();
122*8d31684bSSzymon Olewniczak        include 'tpl/weekly-message.php';
123*8d31684bSSzymon Olewniczak        $body = ob_get_clean();
124*8d31684bSSzymon Olewniczak
125*8d31684bSSzymon Olewniczak        $mailer = new BEZ_Mailer();
126*8d31684bSSzymon Olewniczak        $rep = array();
127*8d31684bSSzymon Olewniczak        $mailer->setBody('', $rep, NULL, $body, false);
128*8d31684bSSzymon Olewniczak
129*8d31684bSSzymon Olewniczak        $mailer->to($to);
130*8d31684bSSzymon Olewniczak        $subject = 'Nadchodzące zadania';
131*8d31684bSSzymon Olewniczak        $mailer->subject($subject);
132*8d31684bSSzymon Olewniczak
133*8d31684bSSzymon Olewniczak        if ($simulate === false) {
134*8d31684bSSzymon Olewniczak            $send = $mailer->send();
135*8d31684bSSzymon Olewniczak        }
136*8d31684bSSzymon Olewniczak        $output[] = array($to, $subject, $body, array());
137*8d31684bSSzymon Olewniczak    }
138*8d31684bSSzymon Olewniczak
139*8d31684bSSzymon Olewniczak    return $output;
140*8d31684bSSzymon Olewniczak}
141