. */ 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 $setup['EventDateStart']!="" && is_before_ex("EventDateStart"); } public function getTitle() { return "Comparing applications with memberlist"; } public function getMessages() { return $this->messages; } private function addMessage($message) { $this->messages[] = $message; } private function updateOnCurrentMemberlist() { $queryBuilder = new QueryBuilder($GLOBALS['DB'], "applications"); $queryBuilder->addField("applications.id", "id"); $queryBuilder->addField("memberlistoncurrent"); $queryBuilder->addField("memberlist.id", "curmemlistid"); $queryBuilder->addLeftJoin("memberlist", array(new DBMethodLower("memberlist.givenname"), new DBMethodLower("memberlist.surname"), new DBMethodLower("memberlist.bodycode")), array(new DBMethodLower("applications.firstname"), new DBMethodLower("applications.lastname"), new DBMethodLower("applications.bodycode"))); $queryBuilder->addInnerJoin("ab_bodies", "bodycode", "applications.bodycode"); $queryBuilder->addWhereEquals("memberlistoncurrent", "-"); $queryBuilder->addWhereGreater("ab_bodies.memberclaimed", 0); if( $GLOBALS['DB']->select($queryBuilder->toQuery()) > 0 ) { while( $member = $GLOBALS['DB']->fetchAssoc() ) { $this->handleOnCurrentMemberlist($member); } } } private function handleOnCurrentMemberlist($member) { $status = ($member['curmemlistid'] == null ? "pending" : "yes"); $log = "\n" . date("Y-m-d H:i:s").": set on current member list status to " . $status . " by rundaily (memberlist)"; $updates = array(); $updates['memberlistoncurrent'] = $status; $updates['log'] = new DBMethodConcat('log', $log); $this->countOnCurrentMemberlist[$status]++; return $GLOBALS['DB']->update("applications", $member['id'], $updates); } private function updateOnPreviousMemberlist() { global $setup; if( strlen($setup['PreviousMemberlist'])>0 ) { $queryBuilder = new QueryBuilder($GLOBALS['DB'], "applications"); $queryBuilder->addField("applications.id", "id"); $queryBuilder->addField("memberlistonprevious"); $queryBuilder->addField("memberlist.id", "prevmemlistid"); $queryBuilder->addLeftJoin($setup['PreviousMemberlist'] . ".memberlist", array(new DBMethodLower("memberlist.givenname"), new DBMethodLower("memberlist.surname"), new DBMethodLower("memberlist.bodycode")), array(new DBMethodLower("applications.firstname"), new DBMethodLower("applications.lastname"), new DBMethodLower("applications.bodycode"))); $queryBuilder->addInnerJoin($setup['PreviousMemberlist'] . ".ab_bodies", "bodycode", "applications.bodycode"); $queryBuilder->addWhereEquals("memberlistonprevious", "-"); $queryBuilder->addWhereGreater("ab_bodies.memberclaimed", 0); if( $GLOBALS['DB']->select($queryBuilder->toQuery()) > 0 ) { while( $member = $GLOBALS['DB']->fetchAssoc() ) { $this->handleOnPreviousMemberlist($member); } } }else { $this->addMessage("Skipping previous memberlist, not defined."); } } private function handleOnPreviousMemberlist($member) { $status = ($member['prevmemlistid'] == null ? "pending" : "yes"); $log = "\n" . date("Y-m-d H:i:s").": set on previous member list status to " . $status . " by rundaily (memberlist)"; $updates = array(); $updates['memberlistonprevious'] = $status; $updates['log'] = new DBMethodConcat("log", $log); $this->countOnPreviousMemberlist[$status]++; return $GLOBALS['DB']->update("applications", $member['id'], $updates); } private function updateIsBoard() { $queryBuilder = new QueryBuilder($GLOBALS['DB'], "applications"); $queryBuilder->addField("id"); $queryBuilder->addField("username"); $queryBuilder->addField("firstname", "givenname"); $queryBuilder->addField("lastname", "surname"); $queryBuilder->addField("bodycode"); $queryBuilder->addWhereEquals("memberlistisboard", "-"); $queryBuilder->addWhereEquals("participanttype", "delegate"); if( $GLOBALS['DB']->select($queryBuilder->toQuery()) > 0 ) { while( $member = $GLOBALS['DB']->fetchAssoc() ) { $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)"; $updates = array(); $updates['memberlistisboard'] = $status; $updates['log'] = new DBMethodConcat("log", $log); return $GLOBALS['DB']->update("applications", $member['id'], $updates); } private function updateStatus() { $queryBuilder = new QueryBuilder($GLOBALS['DB'], "applications"); $queryBuilder->addField(array("id", "memberlistonprevious", "memberlistoncurrent", "memberlistisboard", "memberlistconfirmed", "participanttype")); if( $GLOBALS['DB']->select($queryBuilder->toQuery()) > 0 ) { while( $member = $GLOBALS['DB']->fetchAssoc() ) { $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)"; $updates = array(); $updates['memberlistconfirmed'] = $status; $updates['log'] = new DBMethodConcat("log", $log); return $GLOBALS['DB']->update("applications", $member['id'], $updates); }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."); } } ?>