|  | <?php | 
|  | class Build { | 
|  | var $date; | 
|  | var $ts; | 
|  | var $link; | 
|  | var $title; | 
|  | var $text; | 
|  | var $status; | 
|  | var $num; | 
|  |  | 
|  | } | 
|  | class BuildFeed { | 
|  | var $posts = array (); | 
|  | function __construct($file_or_url) { | 
|  | $file_or_url = $this->resolveFile ( $file_or_url ); | 
|  | if (! ($x = simplexml_load_file ( $file_or_url ))) | 
|  | return; | 
|  |  | 
|  | foreach ( $x->entry as $item ) { | 
|  | $post = new Build (); | 
|  | $post->date = ( string ) $item->published; | 
|  | $post->ts = strtotime ( $item->published ); | 
|  | $post->link = ( string ) $item->link['href']; | 
|  | $post->title = ( string ) $item->title; | 
|  |  | 
|  | $match = array(); | 
|  | preg_match('/\#(?P<num>\d+) \((?P<message>.+)\)/', $item->title, $match); | 
|  | $post->num = ( string ) $match['num']; | 
|  |  | 
|  | $message =  $match['message']; | 
|  | $post->text = ( string ) $message; | 
|  | $post->status = ( string ) $this->parseStatus ($message); | 
|  |  | 
|  | // Create summary as a shortened body and remove images, | 
|  | // extraneous line breaks, etc. | 
|  | #$post->summary = $this->summarizeText ( $post->text ); | 
|  | $this->posts [] = $post; | 
|  | } | 
|  | } | 
|  | private function resolveFile($file_or_url) { | 
|  | if (! preg_match ( '|^https?:|', $file_or_url )) | 
|  | $feed_uri = $_SERVER ['DOCUMENT_ROOT'] . '/shared/xml/' . $file_or_url; | 
|  | else | 
|  | $feed_uri = $file_or_url; | 
|  |  | 
|  | return $feed_uri; | 
|  | } | 
|  | private function summarizeText($summary) { | 
|  | $summary = strip_tags ( $summary ); | 
|  |  | 
|  | // Truncate summary line to 100 characters | 
|  | $max_len = 100; | 
|  | if (strlen ( $summary ) > $max_len) | 
|  | $summary = substr ( $summary, 0, $max_len ) . '...'; | 
|  |  | 
|  | return $summary; | 
|  | } | 
|  |  | 
|  | private function parseStatus($text) { | 
|  | $status = "success"; | 
|  | if (strpos($text, 'fail') !== false) { | 
|  | $status = 'unstable'; | 
|  | } | 
|  | if (strpos($text, 'broken') !== false) { | 
|  | $status = 'failed'; | 
|  | } | 
|  |  | 
|  | return $status; | 
|  | } | 
|  |  | 
|  | private function parseBuildNumber($text) { | 
|  |  | 
|  | } | 
|  | } | 
|  | ?> |