From c929010f6e4e8146bd5717f5ebb5725d6e96988b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pierre=20Mazi=C3=A8re?= Date: Sat, 25 Jun 2016 09:55:00 +0200 Subject: [PATCH] new bridge GitlabCommits MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit some gitlab instances do not enable RSS feed for project commits Signed-off-by: Pierre Mazière --- bridges/GitlabCommitsBridge.php | 97 +++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 bridges/GitlabCommitsBridge.php diff --git a/bridges/GitlabCommitsBridge.php b/bridges/GitlabCommitsBridge.php new file mode 100644 index 00000000..0a182300 --- /dev/null +++ b/bridges/GitlabCommitsBridge.php @@ -0,0 +1,97 @@ +maintainer = 'Pierre Mazière'; + $this->name = 'Gitlab Commits'; + $this->uri = ''; + $this->description = 'Returns the commits of a project hosted on a gitlab instance'; + $this->update = '2016-06-19'; + + $this->parameters= + '[ + { + "name" : "Base URI", + "identifier" : "uri" + }, + { + "name" : "User name", + "identifier" : "u" + }, + { + "name" : "Project name", + "identifier" : "p" + } + { + "name" : "Project branch", + "identifier" : "b" + } + + ]'; + } + + public function collectData(array $param){ + $uri = $param['uri'].'/'.$param['u'].'/'.$param['p'].'/commits/'; + if(isset($param['b'])){ + $uri.=$param['b']; + }else{ + $uri.='master'; + } + + $html = file_get_html($uri) + or $this->returnError('No results for LWNprev', 404); + + + foreach($html->find('li') as $commit){ + if(!in_array('commit',explode(' ',$commit->getAttribute("class")))){ + continue; + } + + $item = new \Item(); + $item->uri=$param["uri"]; + + foreach($commit->getElementsByTagName("a") as $a){ + $classes=explode(' ',$a->getAttribute("class")); + if(in_array('commit-short-id',$classes) || + in_array('commit_short_id',$classes)){ + $href=$a->getAttribute("href"); + $item->uri.=substr($href,strpos($href,"/".$param['u'].'/'.$param['p'])); + } + if(in_array('commit-row-message',$classes)){ + $item->title=$a->plaintext; + } + if(in_array('commit-author-link',$classes)){ + $item->name=trim($a->plaintext); + } + } + + $pre=$commit->find('pre',0); + if($pre){ + $item->content=$pre->outertext; + }else{ + $item->content=''; + } + $item->timestamp=strtotime($commit->find('time',0)->getAttribute("datetime")); + + $this->items[]=$item; + } + } + + public function getName(){ + return 'Gitlab Commits'; + } + + public function getURI(){ + return ''; + } + + public function getCacheDuration(){ + return 3600; // one hour + } +}