diff options
Diffstat (limited to 'bridges/MozillaBugTrackerBridge.php')
-rw-r--r-- | bridges/MozillaBugTrackerBridge.php | 297 |
1 files changed, 154 insertions, 143 deletions
diff --git a/bridges/MozillaBugTrackerBridge.php b/bridges/MozillaBugTrackerBridge.php index d284e460..cf6d7f73 100644 --- a/bridges/MozillaBugTrackerBridge.php +++ b/bridges/MozillaBugTrackerBridge.php @@ -1,147 +1,158 @@ <?php -class MozillaBugTrackerBridge extends BridgeAbstract { - const NAME = 'Mozilla Bug Tracker'; - const URI = 'https://bugzilla.mozilla.org'; - const DESCRIPTION = 'DEPRECATED: Use BugzillaBridge instead. +class MozillaBugTrackerBridge extends BridgeAbstract +{ + const NAME = 'Mozilla Bug Tracker'; + const URI = 'https://bugzilla.mozilla.org'; + const DESCRIPTION = 'DEPRECATED: Use BugzillaBridge instead. Returns feeds for bug comments'; - const MAINTAINER = 'AntoineTurmel'; - const PARAMETERS = array( - 'Bug comments' => array( - 'id' => array( - 'name' => 'Bug tracking ID', - 'type' => 'number', - 'required' => true, - 'title' => 'Insert bug tracking ID', - 'exampleValue' => 121241 - ), - 'limit' => array( - 'name' => 'Number of comments to return', - 'type' => 'number', - 'required' => false, - 'title' => 'Specify number of comments to return', - 'defaultValue' => -1 - ), - 'sorting' => array( - 'name' => 'Sorting', - 'type' => 'list', - 'required' => false, - 'title' => 'Defines the sorting order of the comments returned', - 'defaultValue' => 'of', - 'values' => array( - 'Oldest first' => 'of', - 'Latest first' => 'lf' - ) - ) - ) - ); - - private $bugid = ''; - private $bugdesc = ''; - - public function getIcon() { - return self::URI . '/extensions/BMO/web/images/favicon.ico'; - } - - public function collectData(){ - $limit = $this->getInput('limit'); - $sorting = $this->getInput('sorting'); - - // We use the print preview page for simplicity - $html = getSimpleHTMLDOMCached($this->getURI() . '&format=multiple', - 86400, - null, - null, - true, - true, - DEFAULT_TARGET_CHARSET, - false, // Do NOT remove line breaks - DEFAULT_BR_TEXT, - DEFAULT_SPAN_TEXT); - - if($html === false) - returnServerError('Failed to load page!'); - - // Fix relative URLs - defaultLinkTo($html, self::URI); - - // Store header information into private members - $this->bugid = trim($html->find('#field-value-bug_id', 0)->plaintext); - $this->bugdesc = $html->find('h1#field-value-short_desc', 0)->plaintext; - - // Get and limit comments - $comments = $html->find('div.change-set'); - - if($limit > 0 && count($comments) > $limit) { - $comments = array_slice($comments, count($comments) - $limit, $limit); - } - - if ($sorting === 'lf') { - $comments = array_reverse($comments, true); - } - - foreach($comments as $comment) { - $comment = $this->inlineStyles($comment); - - $item = array(); - $item['uri'] = $comment->find('h3.change-name', 0)->find('a', 0)->href; - $item['author'] = $comment->find('td.change-author', 0)->plaintext; - $item['title'] = $comment->find('h3.change-name', 0)->plaintext; - $item['timestamp'] = strtotime($comment->find('span.rel-time', 0)->title); - $item['content'] = ''; - - if ($comment->find('.comment-text', 0)) { - $item['content'] = $comment->find('.comment-text', 0)->outertext; - } - - if ($comment->find('div.activity', 0)) { - $item['content'] .= $comment->find('div.activity', 0)->innertext; - } - - $this->items[] = $item; - } - } - - public function getURI(){ - switch($this->queriedContext) { - case 'Bug comments': - return parent::getURI() - . '/show_bug.cgi?id=' - . $this->getInput('id'); - break; - default: return parent::getURI(); - } - } - - public function getName(){ - switch($this->queriedContext) { - case 'Bug comments': - return $this->bugid - . ' - ' - . $this->bugdesc - . ' - ' - . parent::getName(); - break; - default: return parent::getName(); - } - } - - /** - * Adds styles as attributes to tags with known classes - * - * @param object $html A simplehtmldom object - * @return object Returns the original object with styles added as - * attributes. - */ - private function inlineStyles($html){ - foreach($html->find('.bz_closed') as $element) { - $element->style = 'text-decoration:line-through;'; - } - - foreach($html->find('pre') as $element) { - $element->style = 'white-space: pre-wrap;'; - } - - return $html; - } + const MAINTAINER = 'AntoineTurmel'; + const PARAMETERS = [ + 'Bug comments' => [ + 'id' => [ + 'name' => 'Bug tracking ID', + 'type' => 'number', + 'required' => true, + 'title' => 'Insert bug tracking ID', + 'exampleValue' => 121241 + ], + 'limit' => [ + 'name' => 'Number of comments to return', + 'type' => 'number', + 'required' => false, + 'title' => 'Specify number of comments to return', + 'defaultValue' => -1 + ], + 'sorting' => [ + 'name' => 'Sorting', + 'type' => 'list', + 'required' => false, + 'title' => 'Defines the sorting order of the comments returned', + 'defaultValue' => 'of', + 'values' => [ + 'Oldest first' => 'of', + 'Latest first' => 'lf' + ] + ] + ] + ]; + + private $bugid = ''; + private $bugdesc = ''; + + public function getIcon() + { + return self::URI . '/extensions/BMO/web/images/favicon.ico'; + } + + public function collectData() + { + $limit = $this->getInput('limit'); + $sorting = $this->getInput('sorting'); + + // We use the print preview page for simplicity + $html = getSimpleHTMLDOMCached( + $this->getURI() . '&format=multiple', + 86400, + null, + null, + true, + true, + DEFAULT_TARGET_CHARSET, + false, // Do NOT remove line breaks + DEFAULT_BR_TEXT, + DEFAULT_SPAN_TEXT + ); + + if ($html === false) { + returnServerError('Failed to load page!'); + } + + // Fix relative URLs + defaultLinkTo($html, self::URI); + + // Store header information into private members + $this->bugid = trim($html->find('#field-value-bug_id', 0)->plaintext); + $this->bugdesc = $html->find('h1#field-value-short_desc', 0)->plaintext; + + // Get and limit comments + $comments = $html->find('div.change-set'); + + if ($limit > 0 && count($comments) > $limit) { + $comments = array_slice($comments, count($comments) - $limit, $limit); + } + + if ($sorting === 'lf') { + $comments = array_reverse($comments, true); + } + + foreach ($comments as $comment) { + $comment = $this->inlineStyles($comment); + + $item = []; + $item['uri'] = $comment->find('h3.change-name', 0)->find('a', 0)->href; + $item['author'] = $comment->find('td.change-author', 0)->plaintext; + $item['title'] = $comment->find('h3.change-name', 0)->plaintext; + $item['timestamp'] = strtotime($comment->find('span.rel-time', 0)->title); + $item['content'] = ''; + + if ($comment->find('.comment-text', 0)) { + $item['content'] = $comment->find('.comment-text', 0)->outertext; + } + + if ($comment->find('div.activity', 0)) { + $item['content'] .= $comment->find('div.activity', 0)->innertext; + } + + $this->items[] = $item; + } + } + + public function getURI() + { + switch ($this->queriedContext) { + case 'Bug comments': + return parent::getURI() + . '/show_bug.cgi?id=' + . $this->getInput('id'); + break; + default: + return parent::getURI(); + } + } + + public function getName() + { + switch ($this->queriedContext) { + case 'Bug comments': + return $this->bugid + . ' - ' + . $this->bugdesc + . ' - ' + . parent::getName(); + break; + default: + return parent::getName(); + } + } + + /** + * Adds styles as attributes to tags with known classes + * + * @param object $html A simplehtmldom object + * @return object Returns the original object with styles added as + * attributes. + */ + private function inlineStyles($html) + { + foreach ($html->find('.bz_closed') as $element) { + $element->style = 'text-decoration:line-through;'; + } + + foreach ($html->find('pre') as $element) { + $element->style = 'white-space: pre-wrap;'; + } + + return $html; + } } |