. */ require_once dirname(__FILE__) . "/IRundaily.php"; require_once dirname(__FILE__) . "/../include/functions.php"; require_once dirname(__FILE__) . "/../include/deadline.php"; require_once dirname(__FILE__) . "/../include/Mail.php"; class UpdateBodiesRundaily implements IRundaily { private $messages; public function __construct() { $this->messages = array(); } public function run() { $abBodies = $this->fetchBodiesFromAB(); if( $abBodies != NULL ) { $queryBuilder = new QueryBuilder($GLOBALS['DB'], "ab_bodies"); $queryBuilder->addField(array("bodycode", "bodyname", "email", "bodystatus", "bodycategory", "bodycategoryorder", "memberno", "bodynameascii", "netcomcode", "countrycode")); if( $GLOBALS['DB']->select($queryBuilder->toQuery()) >= 0 ) { while( $row = $GLOBALS['DB']->fetchAssoc() ) { if( isset( $abBodies[ $row['bodycode'] ] ) ) { // Entry already in local copy of DB $this->processExistingBody($abBodies[ $row['bodycode'] ], $row); unset($abBodies[ $row['bodycode'] ]); }elseif( $row['bodystatus'] != "D" ) { // Entry does not exist any more in master $this->processDeletedBody($row); } } $this->processNewBodies($abBodies); }else { $this->addMessage("Error reading data from local copy"); } }else { $this->addMessage("Failed loading body data from AB"); } } public function isEnabled() { global $setup; return $setup['EventDateStart'] == "" || is_before_ex("EventDateStart"); } public function getTitle() { return "Update bodies"; } public function getMessages() { return $this->messages; } private function addMessage($message) { $this->messages[] = $message; } private function fetchBodiesFromAB() { $AB = new MySQL(MYSQL_AB_HOST, MYSQL_AB_USER, MYSQL_AB_PASS, MYSQL_AB_DB); $queryBuilder = new QueryBuilder($AB, "bodies"); $queryBuilder->addField(array("bodycode", "bodyname", "email", "bodystatus", "bodycategory", "bodycategoryorder", "memberno", "bodynameascii", "netcomcode", "countrycode")); if( $AB->select($queryBuilder->toQuery()) > 0 ) { $bodies = array(); while( $row = $AB->fetchAssoc() ) { $bodies[ $row['bodycode'] ] = $row; if( strlen($bodies[ $row['bodycode'] ]['countrycode']) == 0 ) { $bodies[ $row['bodycode'] ]['countrycode'] = "XXX"; } } return $bodies; }else { $this->addMessage("Failed loading bodies from Address Book"); return NULL; } } private function processExistingBody($abBody, $localBody) { $updates = array(); $updateMsg = ""; foreach( array("bodyname", "email", "bodystatus", "bodycategory", "bodycategoryorder", "bodynameascii", "netcomcode", "countrycode") as $field ) { if( $abBody[$field] != $localBody[$field] ) { $updates[$field] = $abBody[$field]; $updateMsg .= "\n- " . $field . ": " . $localBody[$field] . " ==> " . $abBody[$field]; } } if( count($updates) > 0 ) { if( $GLOBALS['DB']->update("ab_bodies", $localBody['bodycode'], $updates, "bodycode") ) { $this->addMessage("Updated " . $localBody['bodycode'] . " (" . $localBody['bodyname'] . ")" . $updateMsg); }else { $this->addMessage("Failed updating " . $localBody['bodycode'] . " (" . $localBody['bodyname'] . "): " . $GLOBALS['DB']->getLastError() . $updateMsg); } } } private function processDeletedBody($localBody) { $queryBuilder = new QueryBuilder($GLOBALS['DB'], "applications"); $queryBuilder->addField("id"); $queryBuilder->addWhereEquals("bodycode", $localBody['bodycode']); if( $GLOBALS['DB']->select2($queryBuilder->toQuery()) > 0 ) { // Already people from this local applied $updates = array(); $updates['bodyname'] = "Deleted body (" . $localBody['bodyname'] . ")"; $updates['bodynameascii'] = $updates['bodyname']; $updates['bodystatus'] = "D"; $updates['bodycategory'] = -1; $updates['bodycategoryorder'] = -1; $updates['memberno'] = -1; $updates['netcomcode'] = "X"; $updates['countrycode'] = "XXX"; if( $GLOBALS['DB']->update("ab_bodies", $localBody['bodycode'], $updates, "bodycode") ) { $this->addMessage("Deactivated " . $localBody['bodycode'] . " (" . $localBody['bodyname'] . "), there were already applications under this body"); }else { $this->addMessage("Failed deactivating " . $localBody['bodycode'] . " (" . $localBody['bodyname'] . "): " . $GLOBALS['DB']->getLastError()); } }else { // We can delete this entry, it is not in use currently if( $GLOBALS['DB']->delete("ab_bodies", $localBody['bodycode'], "bodycode") ) { $this->addMessage("Successfully deleted " . $localBody['bodycode'] . " (" . $localBody['bodyname'] . ")"); }else { $this->addMessage("Failed deleting " . $localBody['bodycode'] . " (" . $localBody['bodyname'] . "): " . $GLOBALS['DB']->getLastError()); } } } private function processNewBodies($abBodies) { foreach( $abBodies as $abBody ) { $updateMsg = ""; foreach( $abBody as $field => $value ) { $updateMsg .= "\n- " . $field . ": " . $value; } if( $GLOBALS['DB']->insert("ab_bodies", $abBody) !== false ) { $this->addMessage("Successfully inserted " . $abBody['bodycode'] . " (" . $abBody['bodyname'] . "):" . $updateMsg); }else { $this->addMessage("Failed inserting " . $abBody['bodycode'] . " (" . $abBody['bodyname'] . "): " . $GLOBALS['DB']->getLastError() . $updateMsg); } } } } ?>