array ( 'u'=>array( 'name'=>'User name', 'required'=>true ), 'p'=>array( 'name'=>'Project name', 'required'=>true ) ), 'Project Issues'=>array(), 'Issue comments'=>array( 'i'=>array( 'name'=>'Issue number', 'type'=>'number', 'required'=>'true' ) ) ); public function getName(){ $name=$this->getInput('u').'/'.$this->getInput('p'); switch($this->queriedContext){ case 'Project Issues': $name=static::NAME.'s '.$name; break; case 'Issue comments': $name=static::NAME.' '.$name.' #'.$this->getInput('i'); break; } return $name; } public function getURI(){ $uri = static::URI.$this->getInput('u').'/'.$this->getInput('p').'/issues/'; if($this->queriedContext==='Issue comments'){ $uri.=$this->getInput('i'); } return $uri; } public function collectData(){ $html = $this->getSimpleHTMLDOM($this->getURI()) or $this->returnServerError('No results for Github Issue '.$this->getInput('i').' in project '.$this->getInput('u').'/'.$this->getInput('p')); switch($this->queriedContext){ case 'Issue comments': foreach($html->find('.js-comment-container') as $comment){ $item = array(); $item['author']=$comment->find('img',0)->getAttribute('alt'); $comment=$comment->firstChild()->nextSibling(); $item['uri']=$this->getURI().'#'.$comment->getAttribute('id'); $item['title']=trim($comment->firstChild()->plaintext); $item['timestamp']=strtotime($comment->find('relative-time',0)->getAttribute('datetime')); $item['content']=$comment->find('.comment-body',0)->innertext; $this->items[]=$item; } break; case 'Project Issues': foreach($html->find('.js-active-navigation-container .js-navigation-item') as $issue){ $item=array(); $info=$issue->find('.opened-by',0); $item['author']=$info->find('a',0)->plaintext; $item['timestamp']=strtotime($info->find('relative-time',0)->getAttribute('datetime')); $item['title']=$issue->find('.js-navigation-open',0)->plaintext; $comments=$issue->find('.col-5',0)->plaintext; $item['content']='Comments: '.($comments?$comments:'0'); $item['uri']=self::URI.$issue->find('.js-navigation-open',0)->getAttribute('href'); $this->items[]=$item; } break; } } public function getCacheDuration(){ return 600; // ten minutes } }