. */ // Check if called correctly if( !defined("ROOTPATH") ) { header("Content-type: text/plain"); echo "You are accesing the page using an invalid request. Please contact the webmaster."; exit(0); } require_once(ROOTPATH . "scripts/ICron.php"); class ImportBodies implements ICron { private $sql; private $abSql; private $bodiesNew = 0; private $bodiesUpdate = 0; private $bodiesDisabled = 0; private $bodiesError = 0; public function __construct(MySQL $sql) { $this->sql = $sql; $this->abSql = new MySQL(MYSQL_AB_HOST, MYSQL_AB_USER, MYSQL_AB_PASS, MYSQL_AB_DB); } public function getName() { return "Import bodies"; } public function run() { $r = ""; $queryAb = "SELECT `bodycode`, `bodyname`, `email`, `bodystatus`, `bodycategory`, `bodycategoryorder`, `bodynameascii`, `netcomcode`, `countrycodes`.`code` AS `countrycode`, `active` FROM `bodies_historic` LEFT JOIN `countrycodes` ON `countrycodes`.`postal`=`bodies_historic`.`countrycode` WHERE `Active`!='duplicate'"; if( $this->abSql->query($queryAb) && $this->abSql->getNumRows()>0 ) { $abBodies = array(); while( $row = $this->abSql->fetchAssoc() ) { if( $row['active']=="archived" ) { $row['active'] = "no"; } $abBodies[$row['bodycode']] = $row; } $query = "SELECT `bodycode`, `bodyname`, `bodynameascii`, `email`, `bodystatus`, `bodycategory`, `bodycategoryorder`, `netcomcode`, `countrycode`, `active` FROM `ab_bodies`"; if( $this->sql->query($query) ) { $localBodies = array(); while( $row = $this->sql->fetchAssoc() ) { $localBodies[] = $row; } foreach( $localBodies as $body ) { if( isset($abBodies[$body['bodycode']]) ) { if( !$this->bodyEquals($body, $abBodies[$body['bodycode']]) ) { if( $this->updateBody($body, $abBodies[$body['bodycode']]) ) { $r .= "Updated " . $body['bodycode'] . " (" . $body['bodyname'] . "):\n"; $r .= $this->bodyDifferences($body, $abBodies[$body['bodycode']]); $this->bodiesUpdate++; }else { $r .= "Failed updating ". $body['bodycode'] . " (" . $body['bodyname'] . "):\n"; $r .= $this->bodyDifferences($body, $abBodies[$body['bodycode']]); $this->bodiesError++; } } unset($abBodies[$body['bodycode']]); }elseif( $body['active']=="yes" ) { if( $this->disableBody($body['bodycode']) ) { $r .= "Disabled " . $body['bodycode'] . " (" . $body['bodyname'] . ")\n"; $this->bodiesDisabled++; }else { $r .= "Failed disabling " . $body['bodycode'] . " (" . $body['bodyname'] . ")\n"; $this->bodiesError++; } } } foreach( $abBodies as $body ) { if( $this->createBody($body) ) { $r .= "Created " . $body['bodycode'] . " (" . $body['bodyname'] . "):\n"; $r .= $this->bodyValues($body); $this->bodiesNew++; }else { $r .= "Failed creating " . $body['bodycode'] . " (" . $body['bodyname'] . "):\n"; $r .= $this->bodyValues($body); $this->bodiesError++; } } $r .= "\nNew bodies: " . $this->bodiesNew . "\n"; $r .= "Updated bodies: " . $this->bodiesUpdate . "\n"; $r .= "Disabled bodies: " . $this->bodiesDisabled . "\n"; $r .= "Errors: " . $this->bodiesError . "\n"; }else { $r .= "Error retrieving bodies from local database. Bodies will not be synchronised.\n"; } }else { $r .= "Error retrieving bodies from Address Book. Bodies will not be synchronised.\n"; } return $r; } /** * Compare 2 bodies to see if they are equal * * @param array $body1 * @param array $body2 * @return true in case bodies are the same, false otherwise */ private function bodyEquals($body1, $body2) { foreach( array_keys($body1) as $field ) { if( $body1[$field]!=$body2[$field] ) { return false; } } return true; } private function bodyDifferences($oldBody, $newBody) { $r = ""; foreach( array_keys($oldBody) as $field ) { if( $oldBody[$field]!=$newBody[$field] ) { $r .= "- [" . $field . "]: " . $oldBody[$field] . " => " . $newBody[$field] . "\n"; } } return $r; } private function bodyValues($body) { $r = ""; foreach( array_keys($body) as $field ) { $r .= "- [" . $field . "]: " . $body[$field] . "\n"; } return $r; } private function updateBody($oldBody, $newBody) { $updates = array(); foreach( array_keys($oldBody) as $field ) { if( $oldBody[$field]!=$newBody[$field] && $field!="bodycode" ) { $updates[$field] = $newBody[$field]; } } return $this->sql->update("ab_bodies", $updates, "bodycode", $newBody['bodycode']); } private function disableBody($bodycode) { return false; } private function createBody($body) { return $this->sql->insert("ab_bodies", $body)!==false; } } ?>