
Hi all!
In theprevious article I have shown how PHP client classes for varios REST APIs may be created.
Now I'am going to show how to submit data for creating entities.
First of all we need to improve request submitting method:
if(self::isHeaderExists($headers,'Content-type: application/json')){// converting data in JSON$formData=json_encode($data);}else{$formData=[];foreach($dataas$key=>$value){$formData[]=$key.'='.urlencode($value);}$formData=implode('&',$formData);}$curlConfig[CURLOPT_POSTFIELDS]=$formData;
Then remove default headers wich were added automatically:
protectedfunctiongetCommonHeaders():array{$result=$this->headers;if($this->idempotencyKey!==''){$result[]='Idempotency-Key: '.$this->idempotencyKey;}// this default header must be removed because// Jira API returns error and Atlassian is not going// to fix it$result[]='User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0';return$result;}
New let's update our classes for calling API methods. First of all I have refactored methods for operations with connection:
traitConnectionMethods{/** * Connection to Jira * * @var Connection */private$connection=null;/** * Method returns connection to Jira * * @return Connection connection to Jira */protectedfunctiongetConnection():Connection{return$this->connection;}/** * Method returns connection to Jira * * @param Connection $connection * connection to Jira */protectedfunctionsetConnection(Connection$connection):void{$this->connection=$connection;}}
And now we create class for creating Jira issue:
classIssue{useConnectionMethods;/** * Issue data * * @var object */private$issue=null;/** * Constructor * * @param Connection $connection * connection to Jira * @param object $issue * data */publicfunction__construct(Connection$connection){$this->setConnection($connection);$this->issue=new\stdClass();}/** * Setting id * * @param int $id */publicfunctionsetId(int$id):void{$this->issue->id=$id;}/** * Getting id * * @return int */publicfunctiongetId():int{if(!isset($this->issue->id)){throw(new\Exception('Field "id" was not found for the issue'));}return$this->issue->id;}/** * Setting summary * * @param string $summary * summary */publicfunctionsetSummary(string$summary):void{$this->issue->summary=$summary;}/** * Getting summary * * @return string summary */publicfunctiongetSummary():string{if(!isset($this->issue->summary)){throw(new\Exception('Field "summary" was not found for the issue'));}return$this->issue->summary;}/** * Setting description * * @param string $description * description */publicfunctionsetDescription(string$description):void{// since Jira REST API v3 setting description data// have become quite tricky )if(!isset($this->issue->description)){$this->issue->description=new\stdClass();$this->issue->description->type='doc';$this->issue->description->version=1;}$content=new\stdClass();$content->text=$description;$content->type='text';$paragraph=new\stdClass();$paragraph->type='paragraph';$paragraph->content=[];$paragraph->content[]=$content;$this->issue->description->content=[];$this->issue->description->content[]=$paragraph;}/** * Getting description * * @return object description */publicfunctiongetDescription():object{if(!isset($this->issue->description)){throw(new\Exception('Field "description" was not found for the issue'));}return$this->issue->description;}/** * Setting project key * * @param string $projectKey * project key */publicfunctionsetProjectKey(string$projectKey):void{if(!isset($this->issue->project)){$this->issue->project=new\stdClass();}$this->issue->project->key=$projectKey;}/** * Getting project key * * @return string project key */publicfunctiongetProjectKey():string{if(!isset($this->issue->project)||!isset($this->issue->project->key)){throw(new\Exception('Field "project->key" was not found for the issue'));}return$this->issue->project->key;}/** * Getting project * * @return object project */publicfunctiongetProject():object{if(!isset($this->issue->project)){throw(new\Exception('Field "project" was not found for the issue'));}return$this->issue->project;}/** * Setting issue type name * * @param string $issueTypeName * issue type name */publicfunctionsetIssueTypeName(string$issueTypeName):void{if(!isset($this->issue->issueType)){$this->issue->issueType=new\stdClass();}$this->issue->issueType->name=$issueTypeName;}/** * Getting issue type name * * @return string issue type name */publicfunctiongetIssueTypeName():string{if(!isset($this->issue->issueType)||!isset($this->issue->issueType->name)){throw(new\Exception('Field "issueType->name" was not found for the issue'));}return$this->issue->issueType->name;}/** * Getting issue type * * @return object issue type */publicfunctiongetIssueType():object{if(!isset($this->issue->issueType)){throw(new\Exception('Field "issueType" was not found for the issue'));}return$this->issue->issueType;}/** * Method creates issue */publicfunctioncreate():void{$this->getConnection()->sendPostRequest('/issue',['fields'=>['project'=>$this->getProject(),'summary'=>$this->getSummary(),'description'=>$this->getDescription(),'issuetype'=>$this->getIssueType()]]);}
And now we are ready to create issue:
// connecting to your JIRA instance$jira=newConnection('jira-url','jira-login','jira-access-token');// setting issue data$issue=newIssue($jira);$issue->setSummary('summary');$issue->setDescription('description');$issue->setProjectKey('AP');// or any other project key of yours$issue->setIssueTypeName('Task');// or Bug// creating issue$issue->create();
And that's all! )
Links
It will be great if you will contribute something to this project. Documentation, sharing the project in your social media, bug fixing, refactoring, or evensubmitting issue with question or feature request. Thanks anyway )
Top comments(0)
Subscribe
For further actions, you may consider blocking this person and/orreporting abuse