Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
redmine:api [2019/10/01 21:05] webproducer angelegt |
redmine:api [2020/10/21 16:47] (aktuell) webproducer Update class.Redmine.php |
||
---|---|---|---|
Zeile 6: | Zeile 6: | ||
In diesem Beispiel wird der wohl wichtigste Bereich für die API beschrieben: Die Tickets. Durch die Ressource "Issue" können Ticktes angelegt, gelesen, geändert und auch gelöscht werden. Ein typisches Anwendungsbeispiel ist die Integration in die Webseite, um Kundenanfragen vom Typ "Fehler" und "Verbesserungsvorschlag" automatisch direkt in ein Ticket umzuwanden. | In diesem Beispiel wird der wohl wichtigste Bereich für die API beschrieben: Die Tickets. Durch die Ressource "Issue" können Ticktes angelegt, gelesen, geändert und auch gelöscht werden. Ein typisches Anwendungsbeispiel ist die Integration in die Webseite, um Kundenanfragen vom Typ "Fehler" und "Verbesserungsvorschlag" automatisch direkt in ein Ticket umzuwanden. | ||
+ | |||
+ | Es ist empfehlenswert für die API einen eigenen Benutzer in Redmine anzulegen und diesem neuen Benutzer auch die Projekte zuzuordnen, auf die mit der API zugegriffen werden sollen, da der vorinstallierte admin Berechtigungen über alle Projekte hat. | ||
Die Variable "key" muss durch den API-Zugriffsschlüssel ersetzt werden der in Redmine unter "Mein Konto" auf der rechten Seite angezeigt wird. | Die Variable "key" muss durch den API-Zugriffsschlüssel ersetzt werden der in Redmine unter "Mein Konto" auf der rechten Seite angezeigt wird. | ||
Zeile 17: | Zeile 19: | ||
private $key = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'; | private $key = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'; | ||
- | public function createIssue( Issue $issueModel ) | + | public function createIssue( redmineIssueModel $issueModel ) |
{ | { | ||
$issue = array('issue' => $issueModel ); | $issue = array('issue' => $issueModel ); | ||
Zeile 30: | Zeile 32: | ||
return $result->issue->id; | return $result->issue->id; | ||
} | } | ||
+ | | ||
/** | /** | ||
* @param integer $id | * @param integer $id | ||
- | * @return Issue | + | * @return models\redmineIssueModel |
+ | * @throws Exception | ||
*/ | */ | ||
public function getIssue( $id ) | public function getIssue( $id ) | ||
Zeile 48: | Zeile 51: | ||
} | } | ||
- | $issueModel = new Issue(); | + | $issueModel = new models\redmineIssueModel(); |
$issueModel->subject = $result->issue->subject; | $issueModel->subject = $result->issue->subject; | ||
$issueModel->description = $result->issue->description; | $issueModel->description = $result->issue->description; | ||
+ | $issueModel->done_ratio = $result->done_ratio; | ||
$issueModel->assigned_to_id = $result->issue->assigned_to->id; | $issueModel->assigned_to_id = $result->issue->assigned_to->id; | ||
$issueModel->priority_id = $result->issue->priority->id; | $issueModel->priority_id = $result->issue->priority->id; | ||
Zeile 58: | Zeile 62: | ||
} | } | ||
- | public function updateIssue( Issue $issueModel, $id ) | + | /** |
+ | * @param redmineIssueModel $issueModel | ||
+ | * @param integer $id | ||
+ | * @return bool | ||
+ | * @throws Exception | ||
+ | */ | ||
+ | public function updateIssue( redmineIssueModel $issueModel, $id ) | ||
{ | { | ||
$issue = array('issue' => $issueModel ); | $issue = array('issue' => $issueModel ); | ||
Zeile 78: | Zeile 88: | ||
} | } | ||
+ | /** | ||
+ | * @param integer $id | ||
+ | * @return bool | ||
+ | * @throws Exception | ||
+ | */ | ||
public function deleteIssue( $id ) | public function deleteIssue( $id ) | ||
{ | { | ||
Zeile 95: | Zeile 110: | ||
/** | /** | ||
+ | * @param $curl | ||
* @return mixed | * @return mixed | ||
+ | * @throws Exception | ||
*/ | */ | ||
private function execute( $curl ) | private function execute( $curl ) | ||
Zeile 103: | Zeile 120: | ||
if( $curl_response === false ) | if( $curl_response === false ) | ||
{ | { | ||
- | $info = curl_getinfo( $curl ); | ||
curl_close( $curl ); | curl_close( $curl ); | ||
- | die( 'error occured during curl exec. Additioanl info: ' . var_export( $info ) ); | + | throw new \Exception( 'Service Unavailable', 503 ); |
} | } | ||
Zeile 111: | Zeile 127: | ||
$decoded = json_decode( $curl_response ); | $decoded = json_decode( $curl_response ); | ||
- | if( isset( $decoded->errors ) ) | + | if( isset( $decoded->error ) ) |
{ | { | ||
- | die( 'error occured: ' . print_r( $decoded->errors, 1 ) ); | + | throw new \Exception( $decoded->error, $decoded->status ); |
} | } | ||
Zeile 135: | Zeile 151: | ||
public $description = ''; | public $description = ''; | ||
public $category_id = NULL; | public $category_id = NULL; | ||
+ | public $done_ratio = 0; // % erledigt | ||
public $tracker_id = 2; | public $tracker_id = 2; | ||
public $priority_id = 2; | public $priority_id = 2; | ||
Zeile 142: | Zeile 159: | ||
public $notes = ''; | public $notes = ''; | ||
public $private_notes = false; | public $private_notes = false; | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | ---- | ||
+ | |||
+ | Für die nachfolgenden Beispiele müssen die beiden Dateien oben eingebunden werden und eine Instanz der Klasse "Redmine" erstellt werden: | ||
+ | |||
+ | <code php> | ||
+ | include 'class.Redmine.php'; | ||
+ | include 'redmineIssueModel.php'; | ||
+ | |||
+ | $rm = new Redmine(); | ||
+ | </code> | ||
+ | |||
+ | ==== Neues Ticket anlegen ==== | ||
+ | |||
+ | <code php> | ||
+ | $issue = new redmineIssueModel(); | ||
+ | $issue->description = 'Redmine Rest-API in das Support-Formular integrieren'; | ||
+ | $issue->subject = 'Redmine Rest-API'; | ||
+ | $issue->tracker_id = $issue::TRACKER_FEATURE; | ||
+ | $issue->assigned_to_id = 1; | ||
+ | |||
+ | $id = $rm->createIssue( $issue ); | ||
+ | echo "Ticket mit der ID " . $id . " angelegt."; | ||
+ | </code> | ||
+ | |||
+ | ==== Vorhandenes Ticket auslesen und ändern ==== | ||
+ | <code php> | ||
+ | $issue = $rm->getIssue( $id ); | ||
+ | $issue->done_ratio = 50; // 50 % erledigt | ||
+ | $issue->status_id = $issue::STATUS_ZUGEWIESEN; | ||
+ | $issue->priority_id = $issue::PRIO_HOCH; | ||
+ | $issue->notes = 'Die hälfte schon umgesetzt'; | ||
+ | |||
+ | $rm->updateIssue( $issue, $id ); | ||
+ | </code> | ||
+ | |||
+ | ==== Vorhandenes Ticket löschen ==== | ||
+ | |||
+ | <code php> | ||
+ | if( $rm->deleteIssue( $id ) ) | ||
+ | { | ||
+ | echo "Ticket " . $id . " gelöscht"; | ||
} | } | ||
</code> | </code> |