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