|  | <?php | 
|  |  | 
|  | class ReviewInfo { | 
|  | var $_attributes; | 
|  | /* | 
|  | * J1 - IP log review requested | 
|  | * J2 - review scheduled date & time | 
|  | * J3 - review slides & bug posted | 
|  | * J4 - review slides & bug & IP posted | 
|  | * JP - review pending, waiting for legal or the Board | 
|  | * J5 - review successful | 
|  | * J6 - review not complete, further work to occur | 
|  | * J7 - review withdrawn | 
|  | */ | 
|  | var $_status; | 
|  | var $_lastdate; | 
|  | var $_reviewdate; | 
|  |  | 
|  | function load( $firstbuffer, $lines, &$idx ) { | 
|  | $this->_attributes = Array(); | 
|  | $pos = strpos($firstbuffer, ": "); | 
|  | $key = substr($firstbuffer, 0, $pos); | 
|  | $value = substr($firstbuffer, $pos+2); | 
|  | $value = trim($value); | 
|  | $this->_attributes[$key] = $value; | 
|  | if( trim($value) == "" ) { | 
|  | $this->_status = "bogus"; | 
|  | return; | 
|  | } | 
|  |  | 
|  | while($idx < count($lines)){ | 
|  | $buffer = $lines[$idx++]; | 
|  | $buffer = substr($buffer,0,-1); // Remove new line char | 
|  |  | 
|  | if (!strlen(trim($buffer))) | 
|  | break; | 
|  |  | 
|  | $pos = strpos($buffer, ": "); | 
|  | $key = substr($buffer, 0, $pos); | 
|  | $value = substr($buffer, $pos+2); | 
|  | $this->_attributes[$key] = $value; | 
|  | } | 
|  | if( $this->get("Status; Legal Review Requested") != "" ) { | 
|  | $this->_status = "J1"; | 
|  | $this->_lastdate = $this->_lastget; | 
|  | } | 
|  | if( $this->get("Status; Review Scheduled") != "" ) { | 
|  | $this->_status = "J2"; | 
|  | $this->_lastdate = $this->_lastget; | 
|  | } | 
|  | if( $this->get("Status; Slides Posted") != "" ) { | 
|  | $this->_status = "J3"; | 
|  | $this->_lastdate = $this->_lastget; | 
|  | } | 
|  | if( $this->get("Status; IP Log Posted") != "" ) { | 
|  | $this->_status = "J4"; | 
|  | $this->_lastdate = $this->_lastget; | 
|  | } | 
|  | if( $this->get("Status; Review Pending") != "" ) { | 
|  | $this->_status = "JP"; | 
|  | $this->_lastdate = $this->_lastget; | 
|  | if( $this->_reviewdate == "" ) $this->_reviewdate = $this->_lastget; | 
|  | } | 
|  | if( $this->get("Status; Review Successful") != "" ) { | 
|  | $this->_status = "J5"; | 
|  | $this->_lastdate = $this->_lastget; | 
|  | if( $this->_reviewdate == "" ) $this->_reviewdate = $this->_lastget; | 
|  | } | 
|  | if( $this->get("Status; Review Unsuccessful") != "" ) { | 
|  | $this->_status = "J6"; | 
|  | $this->_lastdate = $this->_lastget; | 
|  | if( $this->_reviewdate == "" ) $this->_reviewdate = $this->_lastget; | 
|  | } | 
|  | if( $this->get("Status; Review Withdrawn") != "" ) { | 
|  | $this->_status = "J7"; | 
|  | $this->_lastdate = $this->_lastget; | 
|  | if( $this->_reviewdate == "" ) $this->_reviewdate = $this->_lastget; | 
|  | } | 
|  | } | 
|  | function lastdate() { | 
|  | return $this->_lastdate; | 
|  | } | 
|  | function get($key) { | 
|  | if( !array_key_exists($key, $this->_attributes) ) { | 
|  | $this->_lastget = ""; | 
|  | return ""; | 
|  | } | 
|  | $value = $this->_attributes[$key]; | 
|  | if( $value == null ) return ""; | 
|  | $value = trim($value); | 
|  | $this->_lastget = $value; | 
|  | return $value; | 
|  | } | 
|  | function status() { | 
|  | return $this->_status; | 
|  | } | 
|  | function name() { | 
|  | return $this->get("Project Name"); | 
|  | } | 
|  | function is_more_than_one_quarter_old() { | 
|  | $today = getdate(); | 
|  | $then = numerical_date($this->_lastdate); | 
|  | $today = (($today["year"] - 2000) * 365) + ($today["mon"] * 31) + ($today["mday"]); | 
|  | return ($then + 110) < $today; | 
|  | } | 
|  | function review_is_more_than_one_month_old() { | 
|  | if( $this->_reviewdate == "" ) return false; | 
|  | $today = getdate(); | 
|  | $then = numerical_date($this->_reviewdate); | 
|  | $today = (($today["year"] - 2000) * 365) + ($today["mon"] * 31) + ($today["mday"]); | 
|  | return ($then + 31) < $today; | 
|  | } | 
|  | } | 
|  |  | 
|  | class ProposalInfo { | 
|  | var $_attributes; | 
|  | /* | 
|  | * P1 - proposal posted | 
|  | * P2 - proposal updated | 
|  | * P3 - review scheduled date & time | 
|  | * P4 - review slides & bug posted | 
|  | * PP - review completed, waiting for PMC or Board | 
|  | * P5 - review successful, awaiting provisioning | 
|  | * PW - review successful, awaiting webmaster to provision | 
|  | * P6 - review not complete, further work required | 
|  | * P7 - project completed | 
|  | * P8 - proposal withdrawn | 
|  | * P9 - proposal archived | 
|  | */ | 
|  | var $_status; | 
|  | var $_lastdate; | 
|  | var $_lastget; | 
|  | var $_reviewdate; | 
|  |  | 
|  | function load( $firstbuffer, $lines, &$idx ) { | 
|  | $this->_attributes = Array(); | 
|  | $pos = strpos($firstbuffer, ": "); | 
|  | $key = substr($firstbuffer, 0, $pos); | 
|  | $value = substr($firstbuffer, $pos+2); | 
|  | $value = trim($value); | 
|  | $this->_attributes[$key] = $value; | 
|  | if( $value == "" ) { | 
|  | $this->_status = "bogus"; | 
|  | return; | 
|  | } | 
|  |  | 
|  | while($idx < count($lines)){ | 
|  | $buffer = $lines[$idx++]; | 
|  | $buffer = substr($buffer,0,-1); // Remove new line char | 
|  |  | 
|  | if (!strlen(trim($buffer))) | 
|  | break; | 
|  |  | 
|  | $pos = strpos($buffer, ": "); | 
|  | $key = substr($buffer, 0, $pos); | 
|  | $value = substr($buffer, $pos+2); | 
|  | $this->_attributes[$key] = $value; | 
|  | } | 
|  | if( $this->get("Status; Proposal Posted") != "" ) { | 
|  | $this->_status = "P1"; | 
|  | $this->_lastdate = $this->_lastget; | 
|  | } | 
|  | if( $this->get("Status; Proposal Updated 1") != "" ) { | 
|  | $this->_status = "P2"; | 
|  | $this->_lastdate = $this->_lastget; | 
|  | } | 
|  | if( $this->get("Status; Proposal Updated 2") != "" ) { | 
|  | $this->_status = "P2"; | 
|  | $this->_lastdate = $this->_lastget; | 
|  | } | 
|  | if( $this->get("Status; Proposal Updated 3") != "" ) { | 
|  | $this->_status = "P2"; | 
|  | $this->_lastdate = $this->_lastget; | 
|  | } | 
|  | if( $this->get("Status; Proposal Updated 4") != "" ) { | 
|  | $this->_status = "P2"; | 
|  | $this->_lastdate = $this->_lastget; | 
|  | } | 
|  | if( $this->get("Status; Proposal Updated 5") != "" ) { | 
|  | $this->_status = "P2"; | 
|  | $this->_lastdate = $this->_lastget; | 
|  | } | 
|  | if( $this->get("Status; Proposal Updated 6") != "" ) { | 
|  | $this->_status = "P2"; | 
|  | $this->_lastdate = $this->_lastget; | 
|  | } | 
|  | if( $this->get("Status; Proposal Updated 7") != "" ) { | 
|  | $this->_status = "P2"; | 
|  | $this->_lastdate = $this->_lastget; | 
|  | } | 
|  | if( $this->get("Status; Proposal Updated 8") != "" ) { | 
|  | $this->_status = "P2"; | 
|  | $this->_lastdate = $this->_lastget; | 
|  | } | 
|  | if( $this->get("Status; Proposal Updated 9") != "" ) { | 
|  | $this->_status = "P2"; | 
|  | $this->_lastdate = $this->_lastget; | 
|  | } | 
|  | if( $this->get("Status; Review Scheduled") != "" ) { | 
|  | $this->_status = "P3"; | 
|  | $this->_lastdate = $this->_lastget; | 
|  | } | 
|  | if( $this->get("Status; Slides Posted") != "" ) { | 
|  | $this->_status = "P4"; | 
|  | $this->_lastdate = $this->_lastget; | 
|  | } | 
|  | if( $this->get("Status; Review Pending") != "" ) { | 
|  | $this->_status = "PP"; | 
|  | $this->_lastdate = $this->_lastget; | 
|  | if( $this->_reviewdate == "" ) $this->_reviewdate = $this->_lastget; | 
|  | } | 
|  | if( $this->get("Status; Review Unsuccessful") != "" ) { | 
|  | $this->_status = "P6"; | 
|  | $this->_lastdate = $this->_lastget; | 
|  | if( $this->_reviewdate == "" ) $this->_reviewdate = $this->_lastget; | 
|  | } | 
|  | if( $this->get("Status; Review Successful") != "" ) { | 
|  | $this->_status = "P5"; | 
|  | $this->_lastdate = $this->_lastget; | 
|  | if( $this->_reviewdate == "" ) $this->_reviewdate = $this->_lastget; | 
|  | } | 
|  | if( $this->get("Status; Waiting Provisioning") != "" ) { | 
|  | $this->_status = "PW"; | 
|  | $this->_lastdate = $this->_lastget; | 
|  | } | 
|  | if( $this->get("Status; Provisioning Complete") != "" ) { | 
|  | $this->_status = "P7"; | 
|  | $this->_lastdate = $this->_lastget; | 
|  | } | 
|  | if( $this->get("Status; Proposal Withdrawn") != "" ) { | 
|  | $this->_status = "P8"; | 
|  | $this->_lastdate = $this->_lastget; | 
|  | } | 
|  | if( $this->get("Status; Project Archived") != "" ) { | 
|  | $this->_status = "P9"; | 
|  | $this->_lastdate = $this->_lastget; | 
|  | } | 
|  | } | 
|  | function lastdate() { | 
|  | return $this->_lastdate; | 
|  | } | 
|  | function get($key) { | 
|  | if( !array_key_exists($key, $this->_attributes) ) { | 
|  | $this->_lastget = ""; | 
|  | return ""; | 
|  | } | 
|  | $value = $this->_attributes[$key]; | 
|  | if( $value == null ) return ""; | 
|  | $value = trim($value); | 
|  | $this->_lastget = $value; | 
|  | return $value; | 
|  | } | 
|  | function status() { | 
|  | return $this->_status; | 
|  | } | 
|  | function name() { | 
|  | return $this->get("Proposal Name"); | 
|  | } | 
|  | function is_more_than_one_quarter_old() { | 
|  | $today = getdate(); | 
|  | $then = numerical_date($this->_lastdate); | 
|  | $today = (($today["year"] - 2000) * 365) + ($today["mon"] * 31) + ($today["mday"]); | 
|  | return ($then + 110) < $today; | 
|  | } | 
|  | function is_more_than_two_months_old() { | 
|  | $today = getdate(); | 
|  | $then = numerical_date($this->_lastdate); | 
|  | $today = (($today["year"] - 2000) * 365) + ($today["mon"] * 31) + ($today["mday"]); | 
|  | return ($then + 60) < $today; | 
|  | } | 
|  | function is_more_than_one_month_old() { | 
|  | $today = getdate(); | 
|  | $then = numerical_date($this->_lastdate); | 
|  | $today = (($today["year"] - 2000) * 365) + ($today["mon"] * 31) + ($today["mday"]); | 
|  | return ($then + 30) < $today; | 
|  | } | 
|  | function is_more_than_two_weeks_old() { | 
|  | $today = getdate(); | 
|  | $then = numerical_date($this->_lastdate); | 
|  | $today = (($today["year"] - 2000) * 365) + ($today["mon"] * 31) + ($today["mday"]); | 
|  | return ($then + 15) < $today; | 
|  | } | 
|  | function review_is_more_than_one_month_old() { | 
|  | if( $this->_reviewdate == "" ) return false; | 
|  | $today = getdate(); | 
|  | $then = numerical_date($this->_reviewdate); | 
|  | $today = (($today["year"] - 2000) * 365) + ($today["mon"] * 31) + ($today["mday"]); | 
|  | return ($then + 31) < $today; | 
|  | } | 
|  | function proposal_age() { | 
|  | $tm_then = strtotime( $this->get("Status; Proposal Posted") ); | 
|  | $tm_now = time(); | 
|  | $tm_diff = $tm_now - $tm_then; | 
|  | $tm_str = "seconds"; | 
|  | if( $tm_diff >= (60 * 2) ) { | 
|  | $tm_diff = intval( $tm_diff / 60 ); | 
|  | $tm_str = "minutes"; | 
|  | if( $tm_diff >= (60 * 2) ) { | 
|  | $tm_diff = intval( $tm_diff / 60 ); | 
|  | $tm_str = "hours"; | 
|  | if( $tm_diff >= (24 * 2) ) { | 
|  | $tm_diff = intval( $tm_diff / 24 ); | 
|  | $tm_str = "days"; | 
|  | if( $tm_diff >= (7 * 2) ) { | 
|  | $tm_diff0 = $tm_diff; | 
|  | $tm_diff = intval( $tm_diff / 7 ); | 
|  | $tm_str = "weeks"; | 
|  | if( $tm_diff0 >= (30 * 2) ) { | 
|  | $tm_diff = intval( $tm_diff0 / 30 ); | 
|  | $tm_str = "months"; | 
|  | if( $tm_diff0 >= 365 ) { | 
|  | $tm_diff = intval( $tm_diff0 / 365 ); | 
|  | $tm_str = "year"; | 
|  | if( $tm_diff > 1 ) { | 
|  | $tm_str .= "s"; | 
|  | } | 
|  | } | 
|  | } | 
|  | } | 
|  | } | 
|  | } | 
|  | } | 
|  | return $tm_diff . " " . $tm_str; | 
|  | } | 
|  | } | 
|  |  | 
|  | class AllInfo { | 
|  | var $_reviews; | 
|  | var $_proposals; | 
|  |  | 
|  | function load() { | 
|  | $this->_reviews = Array(); | 
|  | $this->_proposals = Array(); | 
|  |  | 
|  | $path = getcwd() . "/projects.txt"; | 
|  | if(!file_exists($path)) { | 
|  | $path = $_SERVER['DOCUMENT_ROOT'] . "/projects/projects.txt"; | 
|  | } | 
|  |  | 
|  | $lines = file( $path ); | 
|  | for( $idx = 0; $idx < count( $lines ); ) { | 
|  | $buffer = $lines[$idx++]; | 
|  | $buffer = substr($buffer,0,-1); // Remove new line char | 
|  |  | 
|  | if( substr($buffer, 0, 14) == "Proposal Name:" ) { | 
|  | $temp = new ProposalInfo(); | 
|  | $i = $temp->load($buffer,$lines,$idx); | 
|  | if( $temp->status() != "bogus" ) | 
|  | array_push( $this->_proposals, $temp); | 
|  | } | 
|  | if( substr($buffer, 0, 13) == "Project Name:" ) { | 
|  | $temp = new ReviewInfo(); | 
|  | $i = $temp->load($buffer,$lines,$idx); | 
|  | if( $temp->status() != "bogus" ) | 
|  | array_push( $this->_reviews, $temp); | 
|  | } | 
|  |  | 
|  | } | 
|  |  | 
|  | usort( $this->_proposals, "cmp_proposals"); | 
|  | } | 
|  |  | 
|  | } | 
|  |  | 
|  | function cmp_proposals($a, $b) { | 
|  | if( $a == $b ) return 0; | 
|  | if( $a->name() == $b->name() ) return 0; | 
|  | if( $a->name() < $b->name() ) return -1; | 
|  | return 1; | 
|  | } | 
|  |  | 
|  | function numerical_date($s) { | 
|  | $sday = substr($s, 0, 3); | 
|  | $s = substr($s, 5); | 
|  | list($day, $smonth, $year, $hour, $minute, $second) = sscanf($s, "%d %s %d %d:%d:%d"); | 
|  | $months = array( "Jan" => 1, "Feb" => 2, "Mar" => 3, | 
|  | "Apr" => 4, "May" => 5, "Jun" => 6, | 
|  | "Jul" => 7, "Aug" => 8, "Sep" => 9, | 
|  | "Oct" => 10, "Nov" => 11, "Dec" => 12 ); | 
|  | $month = $months[$smonth]; | 
|  | return (($year - 2000) * 365) + ($month * 31) + ($day); | 
|  | } | 
|  |  | 
|  | function time_and_date_url( $date, $time ) { | 
|  | $hour = substr( $time, 0, 2 ); | 
|  | $min  = substr( $time, 2, 2 ); | 
|  | $s = substr($date, 5); | 
|  | list($day, $smonth, $year) = sscanf($s, "%d %s %d"); | 
|  | $months = array( "Jan" => 1, "Feb" => 2, "Mar" => 3, | 
|  | "Apr" => 4, "May" => 5, "Jun" => 6, | 
|  | "Jul" => 7, "Aug" => 8, "Sep" => 9, | 
|  | "Oct" => 10, "Nov" => 11, "Dec" => 12 ); | 
|  | $month = $months[$smonth]; | 
|  | return "http://www.timeanddate.com/worldclock/fixedtime.html?month=" . $month . "&day=" . $day . "&year=" . $year . "&hour=" . $hour . "&min=" . $min . "&sec=0&p1=0"; | 
|  | } | 
|  | ?> |