decide-note.php
3.28 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
<?php
require_once "lib/3rdparty/php-redmine-api/lib/Redmine/Api/AbstractApi.php";
require_once "lib/3rdparty/php-redmine-api/lib/Redmine/Api/SimpleXMLElement.php";
require_once "lib/3rdparty/php-redmine-api/lib/Redmine/Api/User.php";
require_once "lib/3rdparty/php-redmine-api/lib/Redmine/Api/Issue.php";
require_once "lib/3rdparty/php-redmine-api/lib/Redmine/Api/IssueCategory.php";
require_once "lib/3rdparty/php-redmine-api/lib/Redmine/Api/Attachment.php";
require_once "lib/3rdparty/php-redmine-api/lib/Redmine/Api/Membership.php";
require_once "lib/3rdparty/php-redmine-api/lib/Redmine/Client.php";
require_once "lib/3rdparty/Inflect/Inflect.php";
require_once "config.php";
function redmine_proj_identifier2id ($ident) {
error_log("redmine_proj_identifier($ident)");
static $ident2id = array();
if (empty($ident2id)) {
$lines = split("\n", file_get_contents('/opt/redmine_projects.csv'));
foreach ($lines as &$line) {
$words = split("\t", $line);
$ident2id[strtolower($words[1])] = $words[0];
}
}
error_log ('RI:'.$ident2id[strtolower($ident)]);
return $ident2id[strtolower($ident)];
}
foreach (array('issueId', 'action', 'signature') as $k)
if (empty($k))
die('field "'.$k.'" is empty');
$isGoodSignature = false;
foreach ($SIGNKEYS as $key) {
if (sha1($_GET['issueId'].$key) == $_GET['signature']) {
$isGoodSignature = true;
break;
}
}
if ($isGoodSignature === false) {
die('bad signature');
}
$redmine_admin = new Redmine\Client('https://redmine.ut.mephi.ru', REDMINE_LOGIN, REDMINE_PASSWORD);
$issue = $redmine_admin->api('issue')->show($_GET['issueId'])['issue'];
$assignedTo = $redmine_admin->api('user' )->show($issue['assigned_to']['id']);
$api_key = $assignedTo['user']['api_key'];
$redmine = new Redmine\Client('https://redmine.ut.mephi.ru', $api_key);
switch ($_GET['action']) {
case 'agree':
header('Content-Type: text/plain');
$recipientId = NULL;
foreach ( $issue['custom_fields'] as $cf) {
if ($cf['id'] == 95) {
$recipientId = $cf['value'];
break;
}
}
if (is_null($recipientId)) {
die('Cannot find recipient custom field in issue: '.$_GET['issueId']);
}
$recipient = $redmine_admin->api('user')->show($recipientId)['user'];
if (empty($recipient['mail'])) {
die('Cannot find login of user with ID: '.$recipientId);
}
//print @json_encode($redmine->api('issue')->update($issue['id'], array('status_id' => STATUSID_NEW, 'project_id' => redmine_proj_identifier2id(strtolower(explode('@', $recipient['mail'])[0])), 'assigned_to_id' => $recipient['id'])));
$result = $redmine->api('issue')->update($issue['id'], array('status_id' => STATUSID_NEW, 'project_id' => redmine_proj_identifier2id(strtolower(explode('@', $recipient['mail'])[0])), 'assigned_to_id' => $recipient['id']));
if ($result == true) {
header('Location: https://tasks.mephi.ru/issues/'.$_GET['issueId']);
}
break;
case 'decline':
header('Content-Type: text/plain');
//print @json_encode($redmine->api('issue')->update($_GET['issueId'], array('status_id' => STATUSID_DECLINED)));
$result = $redmine->api('issue')->update($_GET['issueId'], array('status_id' => STATUSID_DECLINED));
if ($result == true) {
header('Location: https://tasks.mephi.ru/issues/'.$_GET['issueId']);
}
break;
default:
die('Unknown action: '.$_GET['action']);
}
?>