|  | <?php | 
|  |  | 
|  | /* AUTHOR:  Bjorn Freeman-Benson | 
|  | * HISTORY: 2009-03-03 	Karl Matthias | 
|  | * 						Updated to use new DB system instead of projects.txt. | 
|  | *						Removed all the date math functions in favor of strtotime-based calculations that work on DB date strings. | 
|  | */ | 
|  |  | 
|  | global $App; | 
|  |  | 
|  | 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($row) { | 
|  | global $App; | 
|  |  | 
|  | $this->_attributes = $row; | 
|  |  | 
|  | $result = $App->foundation_sql(" | 
|  | SELECT * FROM ProjectReviewStatus | 
|  | WHERE ID = '" . $this->_attributes['ID'] . "' | 
|  | "); | 
|  |  | 
|  | while($row = mysql_fetch_object($result)) { | 
|  | $this->_attributes[$row->Status] = $row->Value; | 
|  | } | 
|  |  | 
|  | if( $this->get("Legal Review Requested") != "" ) { | 
|  | $this->_status = "J1"; | 
|  | $this->_lastdate = $this->_lastget; | 
|  | } | 
|  | if( $this->get("Review Scheduled") != "" ) { | 
|  | $this->_status = "J2"; | 
|  | $this->_lastdate = $this->_lastget; | 
|  | } | 
|  | if( $this->get("Slides Posted") != "" ) { | 
|  | $this->_status = "J3"; | 
|  | $this->_lastdate = $this->_lastget; | 
|  | } | 
|  | if( $this->get("IP Log Posted") != "" ) { | 
|  | $this->_status = "J4"; | 
|  | $this->_lastdate = $this->_lastget; | 
|  | } | 
|  | if( $this->get("Review Pending") != "" ) { | 
|  | $this->_status = "JP"; | 
|  | $this->_lastdate = $this->_lastget; | 
|  | if( $this->_reviewdate == "" ) $this->_reviewdate = $this->_lastget; | 
|  | } | 
|  | if( $this->get("Review Successful") != "" ) { | 
|  | $this->_status = "J5"; | 
|  | $this->_lastdate = $this->_lastget; | 
|  | if( $this->_reviewdate == "" ) $this->_reviewdate = $this->_lastget; | 
|  | } | 
|  | if( $this->get("Review Unsuccessful") != "" ) { | 
|  | $this->_status = "J6"; | 
|  | $this->_lastdate = $this->_lastget; | 
|  | if( $this->_reviewdate == "" ) $this->_reviewdate = $this->_lastget; | 
|  | } | 
|  | if( $this->get("Review Withdrawn") != "" ) { | 
|  | $this->_status = "J7"; | 
|  | $this->_lastdate = $this->_lastget; | 
|  | if( $this->_reviewdate == "" ) $this->_reviewdate = $this->_lastget; | 
|  | } | 
|  | } | 
|  |  | 
|  | function lastdate() { | 
|  | $date = strtotime($this->_lastdate); | 
|  | return date('r', $date); | 
|  | } | 
|  |  | 
|  | 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("ProjectName"); | 
|  | } | 
|  |  | 
|  | function is_more_than_one_quarter_old() { | 
|  | $today = time(); | 
|  | $then = strtotime($this->_lastdate); | 
|  | return ($then + (110 /* days */ * 24 /* hours */ * 60 /* minutes */ * 60 /* seconds */ )) < $today; | 
|  | } | 
|  |  | 
|  | function review_is_more_than_one_month_old() { | 
|  | $today = time(); | 
|  | $then = strtotime($this->_reviewdate); | 
|  | return ($then + (31 /* days */ * 24 /* hours */ * 60 /* minutes */ * 60 /* seconds */ )) < $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($row) { | 
|  | global $App; | 
|  | $this->_attributes = $row; | 
|  |  | 
|  | $result = $App->foundation_sql(" | 
|  | SELECT * FROM ProjectReviewStatus | 
|  | WHERE ID = '" . $this->_attributes['ID'] . "' | 
|  | "); | 
|  |  | 
|  | while($row = mysql_fetch_object($result)) { | 
|  | $this->_attributes[$row->Status] = $row->Value; | 
|  | } | 
|  |  | 
|  | if( $this->get("Proposal Posted") != "" ) { | 
|  | $this->_status = "P1"; | 
|  | $this->_lastdate = $this->_lastget; | 
|  | } | 
|  | if( $this->get("Proposal Updated 1") != "" ) { | 
|  | $this->_status = "P2"; | 
|  | $this->_lastdate = $this->_lastget; | 
|  | } | 
|  | if( $this->get("Proposal Updated 2") != "" ) { | 
|  | $this->_status = "P2"; | 
|  | $this->_lastdate = $this->_lastget; | 
|  | } | 
|  | if( $this->get("Proposal Updated 3") != "" ) { | 
|  | $this->_status = "P2"; | 
|  | $this->_lastdate = $this->_lastget; | 
|  | } | 
|  | if( $this->get("Proposal Updated 4") != "" ) { | 
|  | $this->_status = "P2"; | 
|  | $this->_lastdate = $this->_lastget; | 
|  | } | 
|  | if( $this->get("Proposal Updated 5") != "" ) { | 
|  | $this->_status = "P2"; | 
|  | $this->_lastdate = $this->_lastget; | 
|  | } | 
|  | if( $this->get("Proposal Updated 6") != "" ) { | 
|  | $this->_status = "P2"; | 
|  | $this->_lastdate = $this->_lastget; | 
|  | } | 
|  | if( $this->get("Proposal Updated 7") != "" ) { | 
|  | $this->_status = "P2"; | 
|  | $this->_lastdate = $this->_lastget; | 
|  | } | 
|  | if( $this->get("Proposal Updated 8") != "" ) { | 
|  | $this->_status = "P2"; | 
|  | $this->_lastdate = $this->_lastget; | 
|  | } | 
|  | if( $this->get("Proposal Updated 9") != "" ) { | 
|  | $this->_status = "P2"; | 
|  | $this->_lastdate = $this->_lastget; | 
|  | } | 
|  | if( $this->get("Review Scheduled") != "" ) { | 
|  | $this->_status = "P3"; | 
|  | $this->_lastdate = $this->_lastget; | 
|  | } | 
|  | if( $this->get("Slides Posted") != "" ) { | 
|  | $this->_status = "P4"; | 
|  | $this->_lastdate = $this->_lastget; | 
|  | } | 
|  | if( $this->get("Review Pending") != "" ) { | 
|  | $this->_status = "PP"; | 
|  | $this->_lastdate = $this->_lastget; | 
|  | if( $this->_reviewdate == "" ) $this->_reviewdate = $this->_lastget; | 
|  | } | 
|  | if( $this->get("Review Unsuccessful") != "" ) { | 
|  | $this->_status = "P6"; | 
|  | $this->_lastdate = $this->_lastget; | 
|  | if( $this->_reviewdate == "" ) $this->_reviewdate = $this->_lastget; | 
|  | } | 
|  | if( $this->get("Review Successful") != "" ) { | 
|  | $this->_status = "P5"; | 
|  | $this->_lastdate = $this->_lastget; | 
|  | if( $this->_reviewdate == "" ) $this->_reviewdate = $this->_lastget; | 
|  | } | 
|  | if( $this->get("Waiting Provisioning") != "" ) { | 
|  | $this->_status = "PW"; | 
|  | $this->_lastdate = $this->_lastget; | 
|  | } | 
|  | if( $this->get("Provisioning Complete") != "" ) { | 
|  | $this->_status = "P7"; | 
|  | $this->_lastdate = $this->_lastget; | 
|  | } | 
|  | if( $this->get("Proposal Withdrawn") != "" ) { | 
|  | $this->_status = "P8"; | 
|  | $this->_lastdate = $this->_lastget; | 
|  | } | 
|  | if( $this->get("Project Archived") != "" ) { | 
|  | $this->_status = "P9"; | 
|  | $this->_lastdate = $this->_lastget; | 
|  | } | 
|  | } | 
|  |  | 
|  | function lastdate() { | 
|  | $date = strtotime($this->_lastdate); | 
|  | return date('r-', $date); | 
|  | } | 
|  |  | 
|  | 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("ProposalName"); | 
|  | } | 
|  |  | 
|  | function is_more_than_one_quarter_old() { | 
|  | $today = time(); | 
|  | $then = strtotime($this->_lastdate); | 
|  | return ($then + (110 /* days */ * 24 /* hours */ * 60 /* minutes */ * 60 /* seconds */ )) < $today; | 
|  | } | 
|  |  | 
|  | function is_more_than_one_month_old() { | 
|  | $today = time(); | 
|  | $then = strtotime($this->_lastdate); | 
|  | return ($then + (31 /* days */ * 24 /* hours */ * 60 /* minutes */ * 60 /* seconds */ )) < $today; | 
|  | } | 
|  |  | 
|  | function is_more_than_two_months_old() { | 
|  | $today = time(); | 
|  | $then = strtotime($this->_lastdate); | 
|  | return ($then + (60 /* days */ * 24 /* hours */ * 60 /* minutes */ * 60 /* seconds */ )) < $today; | 
|  | } | 
|  |  | 
|  | function is_more_than_two_weeks_old() { | 
|  | $today = time(); | 
|  | $then = strtotime($this->_lastdate); | 
|  | return ($then + (15 /* days */ * 24 /* hours */ * 60 /* minutes */ * 60 /* seconds */ )) < $today; | 
|  | } | 
|  |  | 
|  | function review_is_more_than_one_month_old() { | 
|  | if( $this->_reviewdate == "" ) return false; | 
|  | $today = time(); | 
|  | $then = strtotime($this->_reviewdate); | 
|  | return ($then + (31 /* days */ * 24 /* hours */ * 60 /* minutes */ * 60 /* seconds */ )) < $today; | 
|  | } | 
|  |  | 
|  | function proposal_age() { | 
|  | date_default_timezone_set('UTC'); | 
|  | $tm_then = strtotime($this->get("Proposal Posted")); | 
|  | $tm_now = time(); | 
|  | $seconds = $tm_now - $tm_then; | 
|  | $minutes = round($seconds/60); if ($minutes < 2) return "$seconds seconds"; | 
|  | $hours = round($minutes/60.5); if ($hours < 2) return "$minutes minutes"; | 
|  | $days = round($hours/24); if ($days < 2) return "$hours hours"; | 
|  | $weeks = round($days/7); if ($weeks < 2) return "$days days"; | 
|  | $months = round($days/30.5); if ($months < 2) return "$weeks weeks"; | 
|  | $years = round($days/365.5); if ($years < 2) return "$months months"; | 
|  | $decades = round($years/10); if ($decades < 2) return "$years years"; | 
|  | return "$decades decades"; | 
|  | } | 
|  | } | 
|  |  | 
|  | class AllInfo { | 
|  | var $_reviews; | 
|  | var $_proposals; | 
|  |  | 
|  | function load($sort="") { | 
|  | global $App; | 
|  |  | 
|  | switch ($sort) { | 
|  | case "Date": | 
|  | $sort = "ReviewDate DESC"; | 
|  | break; | 
|  | default: | 
|  | $sort = "ProposalName, ProjectName"; | 
|  | break; | 
|  | } | 
|  |  | 
|  |  | 
|  | $this->_reviews = Array(); | 
|  | $this->_proposals = Array(); | 
|  |  | 
|  | $path = $_SERVER['DOCUMENT_ROOT']; | 
|  | if( $path == "" ) { | 
|  | $path = "../projects.txt"; | 
|  | } else { | 
|  | $path = getcwd() . "/projects.txt"; | 
|  | } | 
|  |  | 
|  | $result = $App->foundation_sql("SELECT * FROM ProjectReviews ORDER BY $sort"); | 
|  |  | 
|  | while($row = mysql_fetch_assoc($result)) { | 
|  |  | 
|  | if($row["ProposalName"] != '') { | 
|  | $temp = new ProposalInfo(); | 
|  | $i = $temp->load($row); | 
|  | if($temp->status() != "bogus") { | 
|  | array_push( $this->_proposals, $temp); | 
|  | } | 
|  | } | 
|  |  | 
|  | if($row["ProjectName"] != '') { | 
|  | $temp = new ReviewInfo(); | 
|  | $i = $temp->load($row); | 
|  | if($temp->status() != "bogus") { | 
|  | array_push( $this->_reviews, $temp); | 
|  | } | 
|  | } | 
|  | } | 
|  | } | 
|  |  | 
|  | } | 
|  |  | 
|  | function time_and_date_url($wdate) { | 
|  | $wdate = strtotime($wdate); | 
|  | $date = date("D, j M Y", $wdate); | 
|  | $hour = date('H', $wdate); | 
|  | $min  = date('i', $wdate); | 
|  | list($day, $smonth, $year) = sscanf(date('j M Y', $wdate), "%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"; | 
|  | } | 
|  | ?> |