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