#!/usr/bin/php getProperties() as $fsProperty){ if(in_array($fsProperty->getName(), $ignoredProperites)){ continue; } $dbProperty = $dbReflection->getProperty($fsProperty->getName()); try{ if($fsProperty->getName()[0] === '_'){ // Property starts with underscore, remove the underscore and call __get() $propertyNameWithoutUnderscore = substr($fsProperty->getName(), 1); if(is_array($fs->$propertyNameWithoutUnderscore) && is_array($db->$propertyNameWithoutUnderscore)){ foreach($fsProperty->getValue($fs) as $key => $value){ if(is_object($fsProperty->getValue($fs)[$key])){ $arrayDiff = findObjectDifferences($fsProperty->getValue($fs)[$key], $dbProperty->getValue($db)[$key]); if(!empty($arrayDiff)){ $diffs[$fsProperty->getName()] = $arrayDiff; } } else if($fsProperty->getValue($fs)[$key] != $dbProperty->getValue($db)[$key]){ $diffs[$fsProperty->getName()] = ["fs" => $fsProperty->getValue($fs), "db" => $dbProperty->getValue($db)]; } } } else if($fs->$propertyNameWithoutUnderscore != $db->$propertyNameWithoutUnderscore){ $diffs[$fsProperty->getName()] = ["fs" => $fsProperty->getValue($fs), "db" => $dbProperty->getValue($db)]; } } else if($fsProperty->getValue($fs) != $dbProperty->getValue($db)){ $diffs[$fsProperty->getName()] = ["fs" => $fsProperty->getValue($fs), "db" => $dbProperty->getValue($db)]; } } catch(Error $e){ $diffs[$fsProperty->getName()] = ['missing']; } } return $diffs; } $longopts = ['ebookWwwFilesystemPath:', 'verbose']; $options = getopt('v', $longopts); $ebookWwwFilesystemPath = $options['ebookWwwFilesystemPath'] ?? null; $verbose = false; if(isset($options['v']) || isset($options['verbose'])){ $verbose = true; } if($ebookWwwFilesystemPath === null){ print("Expected usage: update-ebook-database [-v,--verbose] --ebookWwwFilesystemPath \n"); exit(1); } if($verbose){ print("ebookWwwFilesystemPath: $ebookWwwFilesystemPath\n"); } $ebookFromFilesystem = Ebook::FromFilesystem($ebookWwwFilesystemPath); if($verbose){ print("Title: $ebookFromFilesystem->Title\n"); print("Identifier: $ebookFromFilesystem->Identifier\n"); } $ebookFromFilesystem->CreateOrUpdate(); $ebookFromDatabase = Ebook::GetByIdentifier($ebookFromFilesystem->Identifier); $diffs = findObjectDifferences($ebookFromFilesystem, $ebookFromDatabase); if(!empty($diffs)){ print("Error: Difference in Ebook on filesystem and in database. Diffs:\n"); print_r($diffs); exit(1); } else{ if($verbose){ print("Ebook on filesystem and in database match.\n"); } exit(0); }