. */ require_once("./IRundaily.php"); class MemListRundaily implements IRundaily { private $messages; private $countOnMemberlist; private $countNotOnMemberlist; public function __construct() { $this->messages = array(); $this->countOnMemberlist = 0; $this->countNotOnMemberlist = 0; } public function run() { foreach( $this->getBodiesWithMemList() as $body ) { $this->checkForBody($body); } $this->addMessage("Found ".$this->countOnMemberlist." applications on a memberlist."); $this->addMessage("Found ".$this->countNotOnMemberlist." applications not on a memberlist."); } public function isEnabled() { global $setup; return is_before_ex("EventDateStart") && $setup['EventDateStart']!="" && $setup['SendPasswordForMemListDate']!="" && is_after("SendPasswordForMemListDate"); } public function getTitle() { return "Comparing applications with memberlist"; } public function getMessages() { return $this->messages; } private function addMessage($message) { $this->messages[] = $message; } private function getBodiesWithMemList() { $query = "SELECT `BodyCode` FROM `memberlist` GROUP BY `BodyCode`"; if( ($res=doquery($query)) && mysql_num_rows($res)>0 ) { $bodies = array(); while( $row = mysql_fetch_assoc($res) ) { $bodies[] = $row['BodyCode']; } return $bodies; }else { return array(); } } private function checkForBody($body) { $applications = $this->getUnhandledApplicationsForBody($body); if( count($applications) ) { $this->addMessage($body." still has ".count($applications)." unhandled application(s)."); $memberlist = $this->getMemberlistForBody($body); $previousMemberlist = $this->getPreviousMemberlistForBody($body); foreach( $applications as $application ) { $this->setStatusForApplication($body, $application['PersonID'], $this->isApplicationOnMemlist($application, $memberlist, $previousMemberlist)); } } } private function getMemberlistForBody($body) { $query = "SELECT `givenName`, `surname` FROM `memberlist` WHERE `BodyCode`='".addslashes($body)."'"; if( ($res=doquery($query)) && mysql_num_rows($res)>0 ) { $members = array(); while( $row = mysql_fetch_assoc($res) ) { $members[] = $row; } return $members; }else { return array(); } } private function getPreviousMemberlistForBody($body) { global $setup; if( strlen($setup['PreviousMemberlist'])>0 ) { $query = "SELECT `givenName`, `surname` FROM `".$setup['PreviousMemberlist']."`.`memberlist` WHERE `BodyCode`='".addslashes($body)."'"; if( ($res=doquery($query)) && mysql_num_rows($res)>0 ) { $members = array(); while( $row = mysql_fetch_assoc($res) ) { $members[] = $row; } #$this->addMessage($body.": returning previous member list with ".count($members)." members"); return $members; }else { #$this->addMessage($body.": returning empty array previous member list"); return array(); } }else { #$this->addMessage($body.": returning NULL previous member list"); return NULL; } } private function getUnhandledApplicationsForBody($body) { $query = "SELECT `PersonID`, `FirstName` AS `givenName`, `LastName` AS `surname`, `ParticipantType` FROM `persons` "; $query .= "WHERE `BodyCode`='".addslashes($body)."' AND `MemberlistConfirmed`='-' AND `ParticipantType`!='-'"; if( ($res=doquery($query)) && mysql_num_rows($res)>0 ) { $applications = array(); while( $row = mysql_fetch_assoc($res) ) { $applications[] = $row; } return $applications; }else { return array(); } } private function isApplicationOnMemlist($application, $memberlist, $previousMemberlist) { $onList = false; #$this->addMessage($application['givenName']." ".$application['surname'].": checking is on memberlists"); foreach( $memberlist as $member ) { if( strtolower($member['givenName'])==strtolower($application['givenName']) && strtolower($member['surname'])==strtolower($application['surname']) ) { $onList = true; #$this->addMessage("- is on current list"); break; } } if( $onList && $previousMemberlist!==NULL && $application['ParticipantType']=="delegate" ) { foreach( $previousMemberlist as $member ) { if( strtolower($member['givenName'])==strtolower($application['givenName']) && strtolower($member['surname'])==strtolower($application['surname']) ) { #$this->addMessage("- is on previous list"); return true; } } #$this->addMessage("- is NOT on previous list"); return false; }else { #$this->addMessage("- skipping check on previous list"); #$this->addMessage(" - previousMemberlist!==NULL: ".($previousMemberlist!==NULL?"yes":"no")); #$this->addMessage(" - participantType==delegate: ".($application['ParticipantType']=="delegate"?"yes":"no")); } return $onList; } private function setStatusForApplication($body, $applicationId, $onMemberlist) { if( $onMemberlist ) { $this->countOnMemberlist++; }else { $this->countNotOnMemberlist++; } $query = "UPDATE `persons` SET `MemberlistConfirmed`='".($onMemberlist?"yes":"pending")."', "; $query .= "`Log`=CONCAT(`Log`,'\n".date("Y-m-d H:i:s").": set on member list status to ".($onMemberlist?"yes":"pending")." by rundaily (memberlist)') "; $query .= "WHERE `BodyCode`='".addslashes($body)."' AND `PersonID`=".addslashes($applicationId); return doquery($query); } } ?>