| <?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) { |
| |
| } |
| } |
| ?> |