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