/** * Delete all semantic data stored for the given subject. Used for * update purposes. Handles Subobjects recursively * * @param $subject SMWDIWikiPage the data of which is deleted */ public function deleteSemanticData(SMWDIWikiPage $subject) { $db = wfGetDB(DB_MASTER); $id = $this->store->smwIds->getSMWPageID($subject->getDBkey(), $subject->getNamespace(), $subject->getInterwiki(), $subject->getSubobjectName(), false, true); if ($id == 0) { // not (directly) used anywhere yet, may be a redirect but we do not care here wfRunHooks('smwDeleteSemanticData', array($subject)); return; } //get oldData for diffing and updating property counts $oldData = $this->store->getSemanticData($subject); $this->doDiffandUpdateCount($oldData); $oldHashes = $this->store->smwIds->getPropertyTableHashes($id); foreach (SMWSQLStore3::getPropertyTables() as $tableId => $tableDeclaration) { $tableName = $tableDeclaration->name; if (array_key_exists($tableName, $oldHashes)) { $this->deleteTableSemanticData($id, $tableDeclaration); } } if ($subject->getSubobjectName() !== '') { wfRunHooks('smwDeleteSemanticData', array($subject)); return; // Subobjects don't have subsubobjects } // also find subobjects used by this ID ... $oldSubobjects = $this->getSubobjects($subject); // ... and delete their data as well recursively foreach ($oldSubobjects as $subobject) { $this->deleteSemanticData($subobject); } //TODO: delete all unused subobjects wfRunHooks('smwDeleteSemanticData', array($subject)); }
private function addSubSemanticDataToInternalCache(DIProperty $property) { foreach ($this->getPropertyValues($property) as $value) { if ($value instanceof DIWikiPage && $value->getSubobjectName() !== '' && !$this->hasSubSemanticData($value->getSubobjectName())) { $this->addSubSemanticData($this->store->getSemanticData($value)); } } }