From 313093fdd1ceddf5303b8e766ee1d7f10299f379 Mon Sep 17 00:00:00 2001 From: Mikhail Grebenkin Date: Sat, 8 Aug 2020 09:42:23 +0300 Subject: [PATCH] some commit --- redmine.php | 121 +++++++++++++++++- ...ot_download.png => screenshot_download.png | Bin screenshot_eskiz.png | Bin 0 -> 7204 bytes tester.php | 26 ++-- 4 files changed, 131 insertions(+), 16 deletions(-) rename $screenshot_download.png => screenshot_download.png (100%) create mode 100644 screenshot_eskiz.png diff --git a/redmine.php b/redmine.php index 0b33e01..f6e3b0f 100644 --- a/redmine.php +++ b/redmine.php @@ -1,11 +1,22 @@ - + */ class class_redmine { protected $redmine_key = ''; protected $redmine_url = ''; - - //files + /** + * Upload $filecontent and return token. + * + * @param mixed $filecontent - content of file + * @return mixed $token is object, string can be obtained in $token->upload->token + */ function get_upload_token($filecontent) { $upload_url = $this->redmine_url.'uploads.json?key='.$this->redmine_key; $request['type'] = 'post'; @@ -13,7 +24,16 @@ class class_redmine { return $token = $this->curl_redmine($upload_url,$request,$filecontent); } - function uploadd_attachment(string $issue_id, string $filename, string $filetype, $filecontent){ + /** + * Uploads an attachment, attaches it to an issue and returns updated issue + * + * @param string $issue_id numeric id of issue to attach file + * @param string $filename name of file + * @param string $filetype type of content i.e. "image/png" + * @param mixed $filecontent content of file. + * @return mixed $issue updated issue + */ + function upload_attachment(string $issue_id, string $filename, string $filetype, $filecontent){ $token = $this->get_upload_token($filecontent); if (!$token) { return null; @@ -22,6 +42,14 @@ class class_redmine { return $this->attach_to_issue($issue_id,$upload_token, $filename, $filetype); } + /** + * Download an attachment or thumbnail + * + * @param string $attachment_id numeric id of attachment + * @param bool $thumbnail if true downloading thumbnail + + * @return mixed $filecontent - content of file + */ function download_attachment(string $attachment_id, bool $thumbnail=false) { if ($thumbnail) { $file_url = $this->redmine_url.'attachments/thumbnail/'.$attachment_id.'?key='.$this->redmine_key; @@ -39,7 +67,12 @@ class class_redmine { } } - //Issue + /** + * Create issue + * + * @param $post_data - string to post to redmine (need to update) + * @return mixed $issue - new data + */ function create_issue($post_data) { $issue_url = $this->redmine_url.'issues.json?key='.$this->redmine_key; $request['type'] = 'post'; @@ -47,6 +80,14 @@ class class_redmine { return $this->curl_redmine($issue_url,$request,$post_data); } + /** + * get issue + * + * @param string $issue_id numeric issue id + * @param string $project_id numeric project id + * @param array $inc array of string with options to include. Example: array( 0 => "journals", 1 => "attachments" ); + * @return mixed $issue - new data + */ function get_issue(string $issue_id='',string $project_id='', array $inc=array()) { if (count($inc) > 0) { $inc = implode(",", $inc); @@ -64,6 +105,15 @@ class class_redmine { return $this->curl_redmine($issue_url); } + /** + * get issue + * + * @param string $issue_id digits only issue id + * @param string $upload_token digits only project id + * @param string $upload_token + * @param array $inc array of string with options to include. Example: array( 0 => "journals", 1 => "attachments" ); + * @return mixed $issue - new data + */ function attach_to_issue(string $issue_id,string $upload_token, string $filename, string $filetype) { $issue_url = $this->redmine_url.'issues/'.$issue_id.'.json?key='.$this->redmine_key; $update = array( "issue" => array( @@ -80,6 +130,13 @@ class class_redmine { return $this->curl_redmine($issue_url, $request , $post_data); } + /** + * add comment to issue + * + * @param string $issue_id digits only issue id + * @param string $comment comment to add to the issue + * @return mixed $issue - new data + */ function post_issue_comment(string $issue_id,string $comment) { $issue_url = $this->redmine_url.'issues/'.$issue_id.'.json?key='.$this->redmine_key; $update = array( "issue" => array( @@ -93,6 +150,7 @@ class class_redmine { return $this->curl_redmine($issue_url, $request , $post_data); } + //Projects function get_projects($project_id='') { $proj_url = ($project_id=='')?$this->redmine_url.'projects.json?key='.$this->redmine_key : $this->redmine_url.'projects/'.$project_id.'.json?key='.$this->redmine_key; @@ -110,11 +168,12 @@ class class_redmine { return $this->curl_redmine($cont_url); } - function get_contact_id(int $id, bool $issues) { + function get_contact_id(string $id, bool $issues) { $cont_url = ($issues) ? $this->redmine_url."contacts/$id.json?key=".$this->redmine_key.'&include=issues' : $this->redmine_url."contacts/$id.json?key=".$this->redmine_key; - return $this->curl_redmine($cont_url, array(),''); + echo($cont_url); + return $this->curl_redmine($cont_url); } function create_contact(array $contact) { @@ -125,6 +184,54 @@ class class_redmine { return $this->curl_redmine($cont_url,$request,$post_data); } + /** + * attach contact to issue + * + * @param string $issue_id digits only issue id + * @param string $contact_id digits only contact id + * @return mixed $issue - new data + */ + function attach_issue_to_contact(string $issue_id,string $contact_id) { + $contact_url = $this->redmine_url."contacts/".$contact_id."?key=".$this->redmine_key; + $update = array( "contact" => array( + "issues"=> array( 0=> array("id" => $issue_id)) + ) + ); + $request['type'] = 'put'; + $request['content_type'] = 'application/json'; + + $post_data = json_encode($update); + return $this->curl_redmine($contact_url, $request , $post_data); + } + + function create_ticket(string $contact_id, string $subject, string $description) { + $issue_url = $this->redmine_url."helpdesk/create_ticket.xml?key=".$this->redmine_key; + $issue = array( "ticket" => array ( + "issue" => array( + "project_id" => "xtesx", + "tracker_id" => "3", + "subject" => $subject, + "description"=> $description, + ), + "contact" => array ("id" => $contact_id), + )); + $issue_xml = " + + + + 3 + $subject + $description + + + $contact_id + + "; + $request['type'] = 'post'; + $request['content_type'] = 'application/xml'; + return $this->curl_redmine($issue_url, $request, $issue_xml ); + } + //Curl function curl_redmine(string $redmine_url,array $request=array(),string $post_data='') { if(!isset($request['type'])){ $request['type']=null; } diff --git a/$screenshot_download.png b/screenshot_download.png similarity index 100% rename from $screenshot_download.png rename to screenshot_download.png diff --git a/screenshot_eskiz.png b/screenshot_eskiz.png new file mode 100644 index 0000000000000000000000000000000000000000..1351219875ceb1948bc1a2cbfc81238915154307 GIT binary patch literal 7204 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 literal 0 HcmV?d00001 diff --git a/tester.php b/tester.php index c0e0b27..432d75a 100644 --- a/tester.php +++ b/tester.php @@ -46,7 +46,15 @@ $test_contact = array("contact" => array("first_name" => "Test testing", // $res = $obj_redmine->send_contact($data); -// $res = $obj_redmine->get_contact_id(2906, true); +//$res = $obj_redmine->get_contact_id("3373", true); +//var_dump($res); + +$inc=array(0 => "contacts"); +$res = $obj_redmine->get_issue($issue_id="10442", '', $inc); +//var_dump($res); +$res = $obj_redmine->create_ticket("3373", "One more test", "test test one more"); + +var_dump($res); //$filecontent = file_get_contents("screenshot.png"); //$token = $obj_redmine->get_upload_token($filecontent); @@ -57,16 +65,16 @@ $test_contact = array("contact" => array("first_name" => "Test testing", //$filecontent = file_get_contents("screenshot.png"); -//echo($obj_redmine->uploadd_attachment('10314', 'screenshot.png', 'image/png', $filecontent)); +// echo($obj_redmine->upload_attachment('10314', 'screenshot.png', 'image/png', $filecontent)); -$inc = array( 0 => "journals", - 1 => "attachments" - ); +//$inc = array( 0 => "journals", +// 1 => "attachments" +// ); -$res = $obj_redmine->get_issue('10314', '', $inc); -var_dump($res); +//$res = $obj_redmine->get_issue('10314', '', $inc); +//var_dump($res); -$res = $obj_redmine->download_attachment('5152'); -file_put_contents('$screenshot_download.png', $res); +//$res = $obj_redmine->download_attachment('5152', true); +//file_put_contents('screenshot_eskiz.png', $res); ?> \ No newline at end of file