/** * Perform retroactive DataObject cleaning. * * @param SS_HTTPRequest $request */ public function run($request) { if (!Object::get_static('SapphireTest', 'is_running_test')) { JanitorDebug::set_verbose(true); } if (JanitorDBP::available()) { $this->backupPath = JanitorDBP::backup_database(); } $dataObjectSubClasses = (array)ClassInfo::subclassesFor('DataObject'); // Remove DataObject array_shift($dataObjectSubClasses); foreach ($dataObjectSubClasses as $class) { $retroactiveCleaner = new DataObjectRetroactiveCleaner($class); $retroactiveCleaner->clean(); } }
public function testWithOrphanedManyManyRelations() { DataObjectOnDeleteDecorator::set_disabled(true); //JanitorDebug::set_verbose(true); $page1 = new Page(); $page1->write(); $page1->doPublish(); $page1ID = $page1->ID; $page2 = new Page(); $page2->Content .= "<p><a href=\"[sitetree_link id={$page1->ID}]\">page1 link</a></p>"; $page2->write(); $page2->doPublish(); $page2ID = $page2->ID; $query = "SELECT \"ID\" FROM \"SiteTree_LinkTracking\" WHERE \"SiteTreeID\" = $page2ID AND \"ChildID\" = $page1ID"; $page2->deleteFromStage('Live'); $page2 = DataObject::get_by_id('Page', $page2ID); $page2->delete(); $this->assertTrue((bool)DB::query($query)->value(), "many_many table SiteTree_LinkTracking cleaned prematurely (possibly due to SilverStripe core changes)"); DataObjectOnDeleteDecorator::set_disabled(false); $task = new DataObjectRetroactiveCleanerTask(); $task->run(null); $task->deleteBackup(); $this->assertFalse((bool)DB::query($query)->value(), "many_many table SiteTree_LinkTracking not cleaned properly (retroactively)"); JanitorDebug::set_verbose(false); }