| <?php |
| namespace Redmine\Api; |
| /** |
| * Listing issues, searching, editing and closing your projects issues. |
| * |
| * @link http://www.redmine.org/projects/redmine/wiki/Rest_Issues |
| * @author Kevin Saliou <kevin at saliou dot name> |
| */ |
| class Issue extends AbstractApi |
| { |
| const PRIO_LOW = 1; |
| const PRIO_NORMAL = 2; |
| const PRIO_HIGH = 3; |
| const PRIO_URGENT = 4; |
| const PRIO_IMMEDIATE = 5; |
| /** |
| * List issues |
| * @link http://www.redmine.org/projects/redmine/wiki/Rest_Issues |
| * available $params : |
| * - offset: skip this number of issues in response (optional) |
| * - limit: number of issues per page (optional) |
| * - sort: column to sort with. Append :desc to invert the order. |
| * - project_id: get issues from the project with the given id, where id is either project id or project identifier |
| * - tracker_id: get issues from the tracker with the given id |
| * - status_id: get issues with the given status id only. Possible values: open, closed, * to get open and closed issues, status id |
| * - assigned_to_id: get issues which are assigned to the given user id |
| * - cf_x: get issues with the given value for custom field with an ID of x. (Custom field must have 'used as a filter' checked.) |
| * - query_id : id of the previously saved query |
| * |
| * @param array $params the additional parameters (cf avaiable $params above) |
| * @return array list of issues found |
| */ |
| public function all(array $params = array()) |
| { |
| return $this->retrieveAll('/issues.json', $params); |
| } |
| /** |
| * Get extended information about an issue gitven its id |
| * @link http://www.redmine.org/projects/redmine/wiki/Rest_Issues#Using-JSON |
| * available $params : |
| * include: fetch associated data (optional). Possible values: children, attachments, relations, changesets and journals |
| * |
| * @param string $id the issue id |
| * @param array $params extra associated data |
| * @return array information about the issue |
| */ |
| public function show($id, array $params = array()) |
| { |
| return $this->get('/issues/'.urlencode($id).'.json?'.http_build_query($params)); |
| } |
| /** |
| * Build the XML for an issue |
| * @param array $params for the new/updated issue data |
| * @return SimpleXMLElement |
| */ |
| private function buildXML(array $params = array()) |
| { |
| $xml = new SimpleXMLElement('<?xml version="1.0"?><issue></issue>'); |
| foreach ($params as $k => $v) { |
| if ('custom_fields' === $k && is_array($v)) { |
| $this->attachCustomFieldXML($xml, $v); |
| } elseif ('watcher_user_ids' === $k && is_array($v)) { |
| $watcher_user_ids = $xml->addChild('watcher_user_ids', ''); |
| $watcher_user_ids->addAttribute('type', 'array'); |
| foreach ($v as $watcher) { |
| $watcher_user_ids->addChild('watcher_user_id', (int) $watcher); |
| } |
| } elseif ('uploads' === $k && is_array($v)) { |
| $uploads_item = $xml->addChild('uploads', ''); |
| $uploads_item->addAttribute('type', 'array'); |
| foreach ($v as $upload) { |
| $upload_item = $uploads_item->addChild('upload', ''); |
| foreach ($upload as $upload_k => $upload_v) { |
| $upload_item->addChild($upload_k, $upload_v); |
| } |
| } |
| } else { |
| $xml->addChild($k, $v); |
| } |
| } |
| return $xml; |
| } |
| /** |
| * Create a new issue given an array of $params |
| * The issue is assigned to the authenticated user. |
| * @link http://www.redmine.org/projects/redmine/wiki/Rest_Issues#Creating-an-issue |
| * |
| * @param array $params the new issue data |
| * @return SimpleXMLElement |
| */ |
| public function create(array $params = array()) |
| { |
| $defaults = array( |
| 'subject' => null, |
| 'description' => null, |
| // 'project' => null, |
| // 'category' => null, |
| // 'status' => null, |
| // 'tracker' => null, |
| // 'assigned_to' => null, |
| // 'author' => null, |
| 'project_id' => null, |
| 'category_id' => null, |
| 'priority_id' => null, |
| 'status_id' => null, |
| 'tracker_id' => null, |
| 'assigned_to_id' => null, |
| 'author_id' => null, |
| 'due_date' => null, |
| 'start_date' => null, |
| 'watcher_user_ids' => null, |
| ); |
| $params = $this->cleanParams($params); |
| $params = array_filter(array_merge($defaults, $params)); |
| $xml = $this->buildXML($params); |
| return $this->post('/issues.xml', $xml->asXML()); |
| // $json = json_encode(array('issue' => $params)); |
| // return $this->post('/issues.json', $json); |
| } |
| /** |
| * Update issue information's by username, repo and issue number. Requires authentication. |
| * @link http://www.redmine.org/projects/redmine/wiki/Rest_Issues#Updating-an-issue |
| * |
| * @param string $id the issue number |
| * @param array $params |
| * @return SimpleXMLElement |
| */ |
| public function update($id, array $params) |
| { |
| $defaults = array( |
| 'id' => $id, |
| 'subject' => null, |
| 'notes' => null, |
| // 'project' => null, |
| // 'category' => null, |
| // 'status' => null, |
| // 'tracker' => null, |
| // 'assigned_to' => null, |
| // 'author' => null, |
| 'category_id' => null, |
| 'priority_id' => null, |
| 'status_id' => null, |
| 'tracker_id' => null, |
| 'assigned_to_id' => null, |
| 'due_date' => null, |
| ); |
| $params = $this->cleanParams($params); |
| $params = array_filter(array_merge($defaults, $params)); |
| $xml = $this->buildXML($params); |
| return $this->put('/issues/'.$id.'.xml', $xml->asXML()); |
| } |
| /** |
| * @param int $id |
| * @param string $watcher_user_id |
| * @return void |
| */ |
| public function addWatcher($id, $watcher_user_id) |
| { |
| return $this->post('/issues/'.$id.'/watchers.xml', '<user_id>'.$watcher_user_id.'</user_id>'); |
| } |
| /** |
| * @param int $id |
| * @param string $watcher_user_id |
| * @return void |
| */ |
| public function removeWatcher($id, $watcher_user_id) |
| { |
| return $this->delete('/issues/'.$id.'/watchers/'.$watcher_user_id.'.xml'); |
| } |
| /** |
| * @param int $id |
| * @param string $status |
| * @return void |
| */ |
| public function setIssueStatus($id, $status) |
| { |
| $statusId = $this->client->api('issue_status')->getIdByName($status); |
| return $this->update($id, array( |
| 'status_id' => $statusId |
| )); |
| } |
| /** |
| * @param int $id |
| * @param string $note |
| * @return void |
| */ |
| public function addNoteToIssue($id, $note) |
| { |
| return $this->update($id, array( |
| 'notes' => $note |
| )); |
| } |
| /** |
| * Transforms literal identifiers to integer ids |
| * @param array $params |
| * @return array |
| */ |
| private function cleanParams(array $params = array()) |
| { |
| if (isset($params['project'])) { |
| $params['project_id'] = $this->client->api('project')->getIdByName($params['project']); |
| unset($params['project']); |
| if (isset($params['category'])) { |
| $params['category_id'] = $this->client->api('issue_category')->getIdByName($params['project_id'], $params['category']); |
| unset($params['category']); |
| } |
| } |
| if (isset($params['status'])) { |
| $params['status_id'] = $this->client->api('issue_status')->getIdByName($params['status']); |
| unset($params['status']); |
| } |
| if (isset($params['tracker'])) { |
| $params['tracker_id'] = $this->client->api('tracker')->getIdByName($params['tracker']); |
| unset($params['tracker']); |
| } |
| if (isset($params['assigned_to'])) { |
| $params['assigned_to_id'] = $this->client->api('user')->getIdByUsername($params['assigned_to']); |
| unset($params['assigned_to']); |
| } |
| if (isset($params['author'])) { |
| $params['author_id'] = $this->client->api('user')->getIdByUsername($params['author']); |
| unset($params['author']); |
| } |
| return $params; |
| } |
| /** |
| * Attach a file to an issue issue number. Requires authentication. |
| * @link http://www.redmine.org/projects/redmine/wiki/Rest_Issues#Updating-an-issue |
| * |
| * @param string $id the issue number |
| * @param array $attachment |
| * @return bool|string |
| */ |
| public function attach($id, array $attachment) |
| { |
| $request['issue'] = array( |
| 'id' => $id, |
| 'uploads' => array( |
| 'upload' => $attachment |
| ) |
| ); |
| return $this->put('/issues/'.$id.'.json', json_encode($request)); |
| } |
| /** |
| * Remove a issue by issue number |
| * |
| * @param string $id the issue number |
| */ |
| public function remove($id) |
| { |
| return $this->delete('/issues/'.$id.'.xml'); |
| } |
| } |
Thursday, 25 September 2014
php-redmine-api/Issue.php at master
Subscribe to:
Post Comments (Atom)
C# LINQ Joins With SQL
There are Different Types of SQL Joins which are used to query data from more than one database tables. In this article, you will learn a...
-
Top 80 + SQL Query Interview Questions and Answers with Examples Interview Questions on SQL are based on following two tables, Employ...
-
ThreadAbortException Occurs If You Use Response.End, Response.Redirect, or Server.Transfer PRB: ThreadAbortException Occurs If You Use R...
-
There are Different Types of SQL Joins which are used to query data from more than one database tables. In this article, you will learn a...
No comments:
Post a Comment