From 00e85a7b19116cc878654c0145d084110a033165 Mon Sep 17 00:00:00 2001 From: Dmitry Yu Okunev Date: Mon, 4 Apr 2016 16:31:14 +0300 Subject: [PATCH] [decide-note] Fixed moving issue to other project --- genpdf/decide-note.php | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++++--------- genpdf/lib/3dparty/Inflect | 2 +- 2 files changed, 53 insertions(+), 10 deletions(-) diff --git a/genpdf/decide-note.php b/genpdf/decide-note.php index d8fb6d8..cfb21bb 100644 --- a/genpdf/decide-note.php +++ b/genpdf/decide-note.php @@ -52,28 +52,57 @@ if ($isGoodSignature === false) { $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']); +$assignedTo = $redmine_admin->api('user' )->show($issue['assigned_to']['id'])['user']; -$api_key = $assignedTo['user']['api_key']; +$api_key = $assignedTo['api_key']; $redmine = new Redmine\Client('https://redmine.ut.mephi.ru', $api_key); -function addUserToProject(&$redmine, $user_id, $project_id) { +function addUserToProject(&$redmine, $user_id, $project_id, $role_id) { + error_log("addUserToProject(redmine, $user_id, $project_id, $role_id)"); $current_membership = $redmine->api('membership')->all($project_id); foreach ($current_membership['memberships'] as $global_key => $member){ if ($member['user']['id'] == $user_id){ $cur_roles=array(); $membership_id = $current_membership['memberships'][$global_key]['id']; foreach($current_membership['memberships'][$global_key]['roles'] as $role) { + if ($role['id'] == $role_id) { + //print "already there!\n"; + return true; + } $cur_roles[] = $role['id']; } - return $redmine->api('membership')->update($membership_id, array ('role_ids' => array_merge($cur_roles, array(ROLE_CUSTOMER)))); + $role_ids = array('role_ids' => array_merge($cur_roles, array($role_id))); + //print "updating\n"; + //print_r($role_ids); + return $redmine->api('membership')->update($membership_id, $role_ids); } } - return $redmine->api('membership')->create($project_id, array('user_id' => $user_id, 'role_ids' => array(ROLE_CUSTOMER))); + //print "creating\n"; + return $redmine->api('membership')->create($project_id, array('user_id' => $user_id, 'role_ids' => array($role_id))); +} + +function removeUserFromProject(&$redmine, $user_id, $project_id, $role_id) { + error_log("removeUserFromProject(redmine, $user_id, $project_id, $role_id)"); + $current_membership = $redmine->api('membership')->all($project_id); + foreach ($current_membership['memberships'] as $global_key => $member){ + if ($member['user']['id'] == $user_id){ + $role_ids=array(); + $membership_id = $current_membership['memberships'][$global_key]['id']; + foreach($current_membership['memberships'][$global_key]['roles'] as $role) { + if ($role['id'] == $role_id) { + continue; + } + $role_ids[] = $role['id']; + } + return $redmine->api('membership')->update($membership_id, $role_ids); + } + } + return true; } switch ($_GET['action']) { case 'agree': + case 'move': header('Content-Type: text/plain'); $recipientId = NULL; @@ -95,15 +124,29 @@ switch ($_GET['action']) { die('Произошла ошибка. Пожалуйста, повторите попытку позже. Cannot find login of user with ID: '.$recipientId); } - //print_r($issue);die(); - /*$result = addUserToProject($redmine, $recipientId, $issue['project']['id']); - if ($result !== TRUE) { + $project_id = redmine_proj_identifier2id(strtolower(explode('@', $recipient['mail'])[0])); + + addUserToProject($redmine_admin, $assignedTo['id'], $project_id, ROLE_CUSTOMER); + addUserToProject($redmine_admin, $assignedTo['id'], $project_id, ROLE_MOVER); + /*$result =*/ + /*if ($result !== TRUE) { mail('admin@ut.mephi.ru', 'Got error on decide-note.php', print_r($_GET, 1)); die('Произошла ошибка. Пожалуйста, повторите попытку позже. Cannot add user '.$recipientId.' to project '.$issue['project']['id'].': '.print_r($result, 1)); }*/ //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'])); + + $issue_props = array( + 'project_id' => $project_id, + 'assigned_to_id' => $recipient['id'] + ); + + if ($_GET['action'] == 'agree') + $issue_props['status_id'] = STATUSID_NEW; + //print_r($issue_props);die(); + + $result = $redmine->api('issue')->update($issue['id'], $issue_props); + removeUserFromProject($redmine_admin, $assignedTo['id'], $project_id, ROLE_MOVER); if ($result !== TRUE) { mail('admin@ut.mephi.ru', 'Got error on decide-note.php', print_r($_GET, 1)); die('Произошла ошибка. Пожалуйста, повторите попытку позже. Cannot update the issue '.$issue['project']['id'].': '.print_r($result, 1)); diff --git a/genpdf/lib/3dparty/Inflect b/genpdf/lib/3dparty/Inflect index 754ec13..a60c8e4 160000 --- a/genpdf/lib/3dparty/Inflect +++ b/genpdf/lib/3dparty/Inflect @@ -1 +1 @@ -Subproject commit 754ec13a3789333e9c0a2f858116d0aec7edd238 +Subproject commit a60c8e42622081bce1e8a04c0d18eef53791418b -- libgit2 0.24.0