/** * Store a newly created repository * * @param Repository $repositoryObject * @param Boolean $update * @return int -1 if failed */ public function saveRepository($repositoryObject, $update = false) { try { if ($update) { $repositoryObject->setSlug($this->uniquifySlug($repositoryObject->getSlug(), $repositoryObject->getUniqueId())); } else { $repositoryObject->setSlug($this->uniquifySlug($repositoryObject->getSlug())); } $repository_array = $this->repoToArray($repositoryObject); $options = $repository_array['options']; if ($repositoryObject->hasContentFilter()) { $options["content_filter"] = $repositoryObject->getContentFilter(); } unset($repository_array['options']); if (!$update) { dibi::query('INSERT INTO [ajxp_repo]', $repository_array); foreach ($options as $k => $v) { if (!is_string($v)) { $v = '$phpserial$' . serialize($v); } dibi::query('INSERT INTO [ajxp_repo_options] ([uuid],[name],[val]) VALUES (%s,%s,%bin)', $repositoryObject->getUniqueId(), $k, $v); } } else { dibi::query('DELETE FROM [ajxp_repo] WHERE [uuid] = %s', $repositoryObject->getUniqueId()); dibi::query('DELETE FROM [ajxp_repo_options] WHERE [uuid] = %s', $repositoryObject->getUniqueId()); dibi::query('INSERT INTO [ajxp_repo]', $repository_array); foreach ($options as $k => $v) { if (!is_string($v)) { $v = '$phpserial$' . serialize($v); } dibi::query('INSERT INTO [ajxp_repo_options] ([uuid],[name],[val]) VALUES (%s,%s,%bin)', $repositoryObject->getUniqueId(), $k, $v); } } } catch (DibiException $e) { echo get_class($e), ': ', $e->getMessage(), "\n"; exit(1); return -1; } }
/** * See static method * @param string $index * @param array $repository * @return Repository */ public function createRepositoryFromArrayInst($index, $repository) { $repo = new Repository($index, $repository["DISPLAY"], $repository["DRIVER"]); if (isset($repository["DISPLAY_ID"])) { $repo->setDisplayStringId($repository["DISPLAY_ID"]); } if (isset($repository["DESCRIPTION_ID"])) { $repo->setDescription($repository["DESCRIPTION_ID"]); } if (isset($repository["AJXP_SLUG"])) { $repo->setSlug($repository["AJXP_SLUG"]); } if (isset($repository["IS_TEMPLATE"]) && $repository["IS_TEMPLATE"]) { $repo->isTemplate = true; $repo->uuid = $index; } if (array_key_exists("DRIVER_OPTIONS", $repository) && is_array($repository["DRIVER_OPTIONS"])) { foreach ($repository["DRIVER_OPTIONS"] as $oName => $oValue) { $repo->addOption($oName, $oValue); } } // BACKWARD COMPATIBILITY! if (array_key_exists("PATH", $repository)) { $repo->addOption("PATH", $repository["PATH"]); $repo->addOption("CREATE", intval($repository["CREATE"])); $repo->addOption("RECYCLE_BIN", $repository["RECYCLE_BIN"]); } return $repo; }
/** * Create a Repository object from a Database Result * * The method expects the following schema: * CREATE TABLE ajxp_repo ( uuid VARCHAR(33) PRIMARY KEY, * path VARCHAR(255), * display VARCHAR(255), * accessType VARCHAR(20), * recycle VARCHAR(255) , * bcreate BOOLEAN, -- For some reason 'create' is a reserved keyword * writeable BOOLEAN, * enabled BOOLEAN ); * * Additionally, the options are stored in a separate table: * CREATE TABLE ajxp_repo_options ( oid INTEGER PRIMARY KEY, uuid VARCHAR(33), name VARCHAR(50), val VARCHAR(255) ); * * I recommend an index to increase performance of uuid lookups: * CREATE INDEX ajxp_repo_options_uuid_idx ON ajxp_repo_options ( uuid ); * * * @param $result Result of a dibi::query() as array * @param $options_result Result of dibi::query() for options as array * @return Repository object */ function repoFromDb($result, $options_result = array()) { $repo = new Repository($result['id'], $result['display'], $result['accessType']); $repo->uuid = $result['uuid']; $repo->setOwnerData($result['parent_uuid'], $result['owner_user_id'], $result['child_user_id']); $repo->path = $result['path']; $repo->create = $result['bcreate']; $repo->writeable = $result['writeable']; $repo->writeable = true; $repo->enabled = $result['enabled']; $repo->recycle = ""; $repo->setSlug($result['slug']); $repo->isTemplate = intval($result['isTemplate']) == 1 ? true : false; $repo->setInferOptionsFromParent(intval($result['inferOptionsFromParent']) == 1 ? true : false); foreach ($options_result as $k => $v) { if (strpos($v, '$phpserial$') !== false && strpos($v, '$phpserial$') === 0) { $v = unserialize(substr($v, strlen('$phpserial$'))); } else { if ($k == "META_SOURCES") { $v = unserialize($v); } } $repo->options[$k] = $v; } return $repo; }