/** * Short description of method referenceResource * * @access public * @author Joel Bout, <*****@*****.**> * @param Resource resource * @param string table * @param array types * @param boolean referenceClassLink * @return boolean */ public function referenceResource(\core_kernel_classes_Resource $resource, $table, $types = null, $referenceClassLink = false) { $returnValue = (bool) false; $types = !is_null($types) ? $types : $resource->getTypes(); $rows = array(); if (!$this->isResourceReferenced($resource)) { $dbWrapper = \core_kernel_classes_DbWrapper::singleton(); $query = 'INSERT INTO "resource_to_table" ("uri", "table") VALUES (?,?)'; $insertResult = $dbWrapper->exec($query, array($resource->getUri(), $table)); if ($referenceClassLink && $insertResult !== false) { $query = 'SELECT * FROM "resource_to_table" WHERE "uri" = ? AND "table" = ?'; $result = $dbWrapper->query($query, array($resource->getUri(), $table)); while ($row = $result->fetch(\PDO::FETCH_ASSOC)) { $rows[] = $row; } } $returnValue = (bool) $insertResult; if ($referenceClassLink) { foreach ($types as $type) { $typeClass = new \core_kernel_classes_Class($type->getUri()); if ($this->isClassReferenced($typeClass)) { $classLocations = $this->classLocations($typeClass); foreach ($classLocations as $classLocation) { foreach ($rows as $row) { $query = "INSERT INTO resource_has_class (resource_id, class_id) VALUES (?,?)"; $sth = $dbWrapper->exec($query, array($row['id'], $classLocation['id'])); } } } } } if ($returnValue) { foreach ($rows as $row) { self::$_resources[$row['uri']] = $row['table']; } ResourceProxy::singleton()->uncacheResource($resource); } } return (bool) $returnValue; }
public function testForceMode() { $this->hardify(); // Check if the returner implementation are correct PersistenceProxy::forceMode(PERSISTENCE_SMOOTH); $classProxy = ClassProxy::singleton(); $impl = $classProxy->getImpToDelegateTo($this->targetSubjectClass); $this->assertTrue($impl instanceof core_kernel_persistence_smoothsql_Class); $this->assertEquals(count($this->targetSubjectClass->getInstances()), 1); $this->assertEquals(count($this->targetSubjectSubClass->getInstances()), 1); PersistenceProxy::restoreImplementation(); $this->assertTrue(ClassProxy::singleton()->getImpToDelegateTo($this->targetSubjectClass) instanceof Clazz); $this->assertTrue(ResourceProxy::singleton()->getImpToDelegateTo($this->subject1) instanceof Resource); }