. */ require_once("./IRundaily.php"); class MemListRundaily implements IRundaily { private $messages; private $countOnPreviousMemberlist = array(); private $countOnCurrentMemberlist = array(); private $countIsBoardMember = array(); public function __construct() { $this->messages = array(); $this->countOnPreviousMemberlist['yes'] = 0; $this->countOnPreviousMemberlist['pending'] = 0; $this->countOnCurrentMemberlist['yes'] = 0; $this->countOnCurrentMemberlist['pending'] = 0; $this->countIsBoardMember['yes'] = 0; $this->countIsBoardMember['pending'] = 0; } public function run() { $this->updateOnCurrentMemberlist(); $this->updateOnPreviousMemberlist(); $this->updateIsBoard(); $this->updateStatus(); $this->generateMessages(); } 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 updateOnCurrentMemberlist() { global $setup; $query = "SELECT `PersonID`, `MemberlistOnCurrent`, `curmemlist`.`id` AS `curmemlistId` "; $query.= "FROM `persons` "; $query.= "LEFT JOIN `memberlist` AS `curmemlist` ON (LOWER(`persons`.`FirstName`)=LOWER(`curmemlist`.`GivenName`) AND LOWER(`persons`.`LastName`)=LOWER(`curmemlist`.`Surname`) AND `persons`.`BodyCode`=`curmemlist`.`BodyCode`) "; $query.= "LEFT JOIN `ab_bodies` ON (`persons`.`BodyCode`=`ab_bodies`.`BodyCode`) "; $query.= "WHERE `MemberlistOnCurrent`='-' AND `ab_bodies`.`MemberClaimed`>0"; if( ($res=doquery($query)) && mysql_num_rows($res)>0 ) { while( $member = mysql_fetch_assoc($res) ) { $this->handleOnCurrentMemberlist($member); } } } private function handleOnCurrentMemberlist($member) { $query = "UPDATE `persons` "; $status = ($member['curmemlistId']==null ? "pending" : "yes"); $query .= "SET `MemberlistOnCurrent`='" . $status . "'"; $log = "\n" . date("Y-m-d H:i:s").": set on current member list status to " . $status . " by rundaily (memberlist)"; $query .= ", `Log`=CONCAT(`Log`, '" . $log . "') "; $query .= "WHERE `PersonID`=" . $member['PersonID']; $this->countOnCurrentMemberlist[$status]++; return doquery($query); } private function updateOnPreviousMemberlist() { global $setup; $query = "SELECT `PersonID`, `MemberlistOnPrevious`, `prevmemlist`.`id` AS `prevmemlistId` "; $query.= "FROM `persons` "; $query.= "LEFT JOIN `".$setup['PreviousMemberlist']."`.`memberlist` AS `prevmemlist` ON (LOWER(`persons`.`FirstName`)=LOWER(`prevmemlist`.`GivenName`) AND LOWER(`persons`.`LastName`)=LOWER(`prevmemlist`.`Surname`) AND `persons`.`BodyCode`=`prevmemlist`.`BodyCode`) "; $query.= "LEFT JOIN `".$setup['PreviousMemberlist']."`.`ab_bodies` ON (`persons`.`BodyCode`=`ab_bodies`.`BodyCode`) "; $query.= "WHERE `MemberlistOnPrevious`='-' AND `ab_bodies`.`MemberClaimed`>0"; if( ($res=doquery($query)) && mysql_num_rows($res)>0 ) { while( $member = mysql_fetch_assoc($res) ) { $this->handleOnPreviousMemberlist($member); } } } private function handleOnPreviousMemberlist($member) { $query = "UPDATE `persons` "; $status = ($member['prevmemlistId']==null ? "pending" : "yes"); $query .= "SET `MemberlistOnPrevious`='" . $status . "'"; $log = "\n" . date("Y-m-d H:i:s").": set on previous member list status to " . $status . " by rundaily (memberlist)"; $query .= ", `Log`=CONCAT(`Log`, '" . $log . "') "; $query .= "WHERE `PersonID`=" . $member['PersonID']; $this->countOnPreviousMemberlist[$status]++; return doquery($query); } private function updateIsBoard() { $query = "SELECT `PersonID`, `FirstName` AS `givenName`, `LastName` AS `surname`, `username`, `BodyCode` "; $query.= "FROM `persons` "; $query.= "WHERE `MemberlistIsBoard`='-' AND `ParticipantType`='delegate'"; if( ($res=doquery($query)) && mysql_num_rows($res)>0 ) { while( $member = mysql_fetch_assoc($res) ) { $this->handleIsBoard($member); } } } private function handleIsBoard($member) { if( $member['username']!=null && strlen($member['username']>0) ) { $user = $member['username']; }else { $user = $member['givenName'] . "." . $member['surname']; } $bodies = $GLOBALS['ldap']->getBoardGroupsFor($user); $status = (array_search($member['BodyCode'], $bodies)===false ? "pending" : "yes"); $this->countIsBoardMember[$status]++; $log = "\n" . date("Y-m-d H:i:s").": set is board member status to " . $status . " by rundaily (memberlist)"; $query = "UPDATE `persons` SET `MemberlistIsBoard`='" . $status . "', `Log`=CONCAT(`Log`, '" . $log . "') "; $query.= "WHERE `PersonID`=" . $member['PersonID']; return doquery($query); } private function updateStatus() { $query = "SELECT `PersonID`, `MemberlistOnPrevious`, `MemberlistOnCurrent`, `MemberlistIsBoard`, `MemberlistConfirmed`, `ParticipantType` "; $query.= "FROM `persons`"; if( ($res=doquery($query)) && mysql_num_rows($res)>0 ) { while( $member = mysql_fetch_assoc($res) ) { $this->handleStatus($member); } } } private function handleStatus($member) { $status = getMemberlistConfirmedStatus($member); if( $status!=$member['MemberlistConfirmed'] ) { $log = "\n" . date("Y-m-d H:i:s") . ": set memberlist confirmed status to " . $status . " by rundaily (memberlist)"; $query = "UPDATE `persons` "; $query.= "SET `MemberlistConfirmed`='" . $status . "', `Log`=CONCAT(`Log`, '" . $log . "') "; $query.= "WHERE `PersonID`=" . $member['PersonID']; return doquery($query); }else { return null; } } private function generateMessages() { $this->addMessage("Found " . $this->countOnPreviousMemberlist['yes'] . " applications on previous memberlist."); $this->addMessage("Found " . $this->countOnPreviousMemberlist['pending'] . " applications not on previous memberlist."); $this->addMessage("Found " . $this->countOnCurrentMemberlist['yes'] . " applications on current memberlist."); $this->addMessage("Found " . $this->countOnCurrentMemberlist['pending'] . " applications not on current memberlist."); $this->addMessage("Found " . $this->countIsBoardMember['yes'] . " applications is board member."); $this->addMessage("Found " . $this->countIsBoardMember['pending'] . " applications is not board member."); } } ?>