PageRenderTime 49ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 0ms

/PHP/todo.php

https://gitlab.com/conquerthechaos/hs-hubot-scripts
PHP | 323 lines | 171 code | 113 blank | 39 comment | 30 complexity | 3c99cb8ce76be9ee0543ac6ab74e265e MD5 | raw file
  1. <?php
  2. ini_set('display_errors',1);
  3. ini_set('display_startup_errors',1);
  4. error_reporting(-1);
  5. //$_REQUEST['data'] = '{"user_json":{"id":"90968","name":"Andrei","flow":"679cdbf6-e9ae-49d0-b000-811f00f9b5ce","message":623933},"msg":"what"}';
  6. $data = json_decode($_REQUEST['data']);
  7. file_put_contents("todo_call.txt", "--------------------------------------\n" . "Post was made at: " . date("Y-m-d H:i") . "\n" . $_REQUEST['data'] , FILE_APPEND);
  8. function make_curl_request($extra_url, $postFields = null){
  9. $jira_url = "https://entrepreneurscircle.atlassian.net";
  10. $jira_user = "peterdalydickson";
  11. $jira_pass = "Chief&Engineer84310";
  12. $ch = curl_init();
  13. curl_setopt($ch, CURLOPT_URL,$jira_url . $extra_url);
  14. curl_setopt($ch, CURLOPT_TIMEOUT, 30); //timeout after 30 seconds
  15. curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
  16. // curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
  17. // curl_setopt($ch, CURLOPT_USERPWD, "$jira_user:$jira_pass");
  18. curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: Basic ' . base64_encode("$jira_user:$jira_pass"), 'Content-Type: application/json') );
  19. if($postFields){
  20. //echo "postfields: $postFields";
  21. curl_setopt($ch, CURLOPT_POST,1);
  22. curl_setopt($ch, CURLOPT_POSTFIELDS,$postFields);
  23. }
  24. $status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); //get status code
  25. $result = curl_exec ($ch);
  26. //echo 'Curl error: ' . curl_error($ch);
  27. curl_close ($ch);
  28. return $result;
  29. }
  30. $user_list = array(
  31. "andrei" => "andrei",
  32. "peter" => "peterdalydickson",
  33. "nathan" => "nathan",
  34. "geover" => "geover",
  35. "vik" => "vik",
  36. "pieter" => "pieter",
  37. "unassigned" => "unassigned"
  38. );
  39. if(strtolower($data->msg) == "help"){
  40. echo "Call should be: `do: projectkey [ defaults to task | story | bug ] [ defaults to unassigned | me | firstname ] issue summary`";
  41. exit();
  42. }else if(strtolower($data->msg) == "what"){
  43. $post_data = array(
  44. "jql" => "assignee = " . $user_list[strtolower($data->user_json->name)] . " AND status != Done"
  45. );
  46. $issues = make_curl_request("/rest/api/2/search", json_encode($post_data));
  47. $issues = json_decode($issues);
  48. if($issues->total == 0){
  49. echo "No available issues found.";
  50. exit();
  51. }
  52. $issues_array = array();
  53. // foreach($issues->issues as $issue){
  54. // // echo "<pre>";
  55. // // print_r($issue);
  56. // // echo "</pre>";
  57. // $key = $issue->key;
  58. // $priority = $issue->fields->priority->id;
  59. // $p_name = $issue->fields->priority->name;
  60. // $desc = substr($issue->fields->summary, 0, 100);
  61. // $desc = "$desc | https://entrepreneurscircle.atlassian.net/browse/" . $key . " | $p_name ";
  62. // $issues_array[$priority][] = $desc;
  63. // }
  64. // ksort($issues_array);
  65. // foreach($issues_array as $key => $issues){
  66. // foreach($issues as $issue){
  67. // echo $issue . "\n";
  68. // }
  69. // }
  70. $issues_array = array();
  71. foreach($issues->issues as $issue){
  72. // echo "<pre>";
  73. // print_r($issue);
  74. // echo "</pre>";
  75. $key = $issue->key;
  76. $priority = $issue->fields->priority->id;
  77. $p_name = $issue->fields->priority->name;
  78. $desc = substr($issue->fields->summary, 0, 100);
  79. $proj = explode("-", $key);
  80. $desc = "$desc | https://entrepreneurscircle.atlassian.net/browse/" . $key . " | $p_name ";
  81. $issue_details = array(
  82. "desc" => $issue->fields->summary,
  83. "key" => $key,
  84. "priority" => $p_name
  85. );
  86. $issues_array[$priority][$proj[0]][$key] = $issue_details;
  87. }
  88. ksort($issues_array);
  89. foreach($issues_array as $priority => $projects){
  90. foreach ($projects as $project => $issues) {
  91. uksort($issues, 'strnatcmp');
  92. foreach($issues as $issue){
  93. // echo "<pre>";
  94. // print_r($issue);
  95. // echo "</pre>";
  96. $output = $issue['key'] . " | ";
  97. $count = strlen($output);
  98. $rest = 90 - $count;
  99. if(strlen($issue['desc']) <= $rest){
  100. $output .= $issue['desc'];
  101. }else{
  102. $output .= substr($issue['desc'], 0, $rest) . "...";
  103. }
  104. $output .= "\nhttps://entrepreneurscircle.atlassian.net/browse/" . $issue['key'] . " | " . $issue['priority'] . "\n\n";
  105. echo $output;
  106. }
  107. }
  108. }
  109. exit();
  110. }
  111. $message = urldecode($data->msg);
  112. $message = explode(" ", $message);
  113. if(count($message) < 2){
  114. $jira_issue = $message[0];
  115. $issue = make_curl_request("/rest/api/2/issue/$jira_issue/");
  116. $issue = json_decode($issue);
  117. if(isset($issue->errorMessages)){
  118. echo "Issue '" . $message[0] . "' not found.";
  119. exit();
  120. }else{
  121. $issue_message = $issue->fields->summary;
  122. $post_fields = array(
  123. "transition" => array(
  124. "id" => 31
  125. )
  126. );
  127. $change_status_response = make_curl_request("/rest/api/2/issue/$jira_issue/transitions?expand=transitions.fields", json_encode($post_fields));
  128. //$change_status_response = make_curl_request("/rest/api/2/issue/HTII-2/transitions?expand=transitions.fields");
  129. //echo $issue_message;
  130. echo "Issue '" . $message[0] . "' moved to 'In Progress'.";
  131. exit();
  132. }
  133. }
  134. $story = $message[0];
  135. $issue_type = "Task";
  136. $had_type_arg = false;
  137. if(strtolower($message[1]) == "story"){
  138. $issue_type = "Story";
  139. $had_type_arg = true;
  140. }else if(strtolower($message[1]) == "bug"){
  141. $issue_type = "Bug";
  142. $had_type_arg = true;
  143. }else if(strtolower($message[1]) == "task"){
  144. $issue_type == "Task";
  145. $had_type_arg = true;
  146. }
  147. $start_from = 1;
  148. if($had_type_arg){
  149. $start_from = 2;
  150. }
  151. $assigned_to = strtolower($data->user_json->name);
  152. $assigned_to = "unassigned";
  153. if(strtolower($message[$start_from]) == "assign"){
  154. $assigned_to = $message[$start_from+1];
  155. $start_from+=2;
  156. if(strtolower($assigned_to) == "me"){
  157. $assigned_to = strtolower($data->user_json->name);
  158. }
  159. }
  160. $issue_contents = "";
  161. for ($i=$start_from; $i < count($message); $i++) {
  162. $issue_contents .= $message[$i] . " ";
  163. }
  164. $story = strtoupper($story);
  165. $project = make_curl_request("/rest/api/2/project/$story/");
  166. $project = json_decode($project);
  167. if(isset($project->errorMessages)){
  168. echo "Project not found";
  169. exit();
  170. }
  171. if(!isset($user_list[$assigned_to])){
  172. echo "User `$assigned_to` not found!";
  173. exit();
  174. }
  175. if(!isset($user_list[strtolower($data->user_json->name)])){
  176. echo "Your user `" . $data->user_json->name . "` is not setup in the do: call";
  177. exit();
  178. }
  179. $post_data = array(
  180. "fields" => array(
  181. "project" => array(
  182. "key" => $story
  183. ),
  184. "issuetype" => array(
  185. "name" => $issue_type
  186. ),
  187. "reporter" => array(
  188. "name" => $user_list[strtolower($data->user_json->name)]
  189. ),
  190. "summary" => $issue_contents,
  191. //"description" => $issue_contents
  192. )
  193. );
  194. if($user_list[$assigned_to] != "unassigned"){
  195. $post_data["fields"]["assignee"] = array(
  196. "name" => $user_list[$assigned_to]
  197. );
  198. }
  199. $issue = make_curl_request("/rest/api/2/issue", json_encode($post_data));
  200. $issue = json_decode($issue);
  201. echo "Created issue " . $issue->key . " for @" . ucwords($assigned_to) . " - https://entrepreneurscircle.atlassian.net/browse/" . $issue->key;
  202. //echo "Created issue " . $issue->key . " | Link: " . $issue->self;
  203. //do: htii task assign andrei Do you think you can get this to work?!
  204. /*
  205. do: story assign andrei This is the issue
  206. PeterPeter at 11:36
  207. if story or bug is missing, assume the issue type is task
  208. htti bug assign andrei This is the issue
  209. */
  210. ?>