Skip to content

Commit

Permalink
Make maintainAccessRights() deal with multiple identifiers
Browse files Browse the repository at this point in the history
  • Loading branch information
zozlak committed Feb 10, 2021
1 parent b36fac2 commit c75168f
Showing 1 changed file with 17 additions and 8 deletions.
25 changes: 17 additions & 8 deletions src/acdhOeaw/arche/Doorkeeper.php
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,9 @@ class Doorkeeper {

static public function onResEdit(int $id, Resource $meta, ?string $path): Resource {
self::loadOntology();
$pdo = new PDO(RC::$config->dbConnStr->admin);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->beginTransaction();
$errors = [];
// checkTitleProp before checkCardinalities!
$functions = [
Expand All @@ -82,14 +85,15 @@ static public function onResEdit(int $id, Resource $meta, ?string $path): Resour
];
foreach ($functions as $f) {
try {
self::$f($meta);
self::$f($meta, $pdo);
} catch (DoorkeeperException $ex) {
$errors[] = $ex->getMessage();
}
}
if (count($errors) > 0) {
throw new DoorkeeperException(implode("\n", $errors));
}
$pdo->commit();

return $meta;
}
Expand Down Expand Up @@ -171,10 +175,11 @@ static private function maintainPid(Resource $meta): void {
*
* This method takes care of it.
* @param Resource $meta
* @param \PDO $pdo
* @return void
* @throws DoorkeeperException
*/
static private function maintainCmdiPid(Resource $meta): void {
static private function maintainCmdiPid(Resource $meta, PDO $pdo): void {
$cfg = RC::$config->doorkeeper->epicPid;
$pidProp = RC::$config->schema->cmdiPid;
$pidNmsp = RC::$config->schema->namespaces->cmdi;
Expand All @@ -186,8 +191,6 @@ static private function maintainCmdiPid(Resource $meta): void {
return;
}

$pdo = new PDO(RC::$config->dbConnStr->admin);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$query = $pdo->prepare("SELECT i1.ids FROM identifiers i1 JOIN identifiers i2 USING (id) WHERE i2.ids = ?");
$query->execute([$cfg->clarinSet]);
$clarinSets = $query->fetchAll(PDO::FETCH_COLUMN);
Expand Down Expand Up @@ -235,25 +238,31 @@ static private function maintainCmdiPid(Resource $meta): void {
* in `cfg.schema.accessRole`
*
* @param \EasyRdf\Resource $meta repository resource's metadata
* @param \PDO $pdo
*/
static public function maintainAccessRights(Resource $meta): void {
static public function maintainAccessRights(Resource $meta, PDO $pdo): void {
$accessRestr = (string) $meta->getResource(RC::$config->schema->accessRestriction);
if (empty($accessRestr)) {
return;
}

RC::$log->info("\t\tmaintaining access rights");
RC::$log->info("\t\tmaintaining access rights $accessRestr");
$propRead = RC::$config->accessControl->schema->read;
$propRoles = RC::$config->schema->accessRole;
$rolePublic = RC::$config->doorkeeper->rolePublic;
$roleAcademic = RC::$config->doorkeeper->roleAcademic;

if ($accessRestr === 'https://vocabs.acdh.oeaw.ac.at/archeaccessrestrictions/public') {
$query = $pdo->prepare("SELECT i1.ids FROM identifiers i1 JOIN identifiers i2 USING (id) WHERE i2.ids = ?");
$query->execute([$accessRestr]);
$accessRestrIds = $query->fetchAll(PDO::FETCH_COLUMN);
RC::$log->info(json_encode($accessRestrIds));

if (in_array('https://vocabs.acdh.oeaw.ac.at/archeaccessrestrictions/public', $accessRestrIds)) {
$meta->addLiteral($propRead, $rolePublic);
RC::$log->info("\t\t\tpublic");
} else {
$meta->delete($propRead, $rolePublic);
if ($accessRestr === 'https://vocabs.acdh.oeaw.ac.at/archeaccessrestrictions/academic') {
if (in_array('https://vocabs.acdh.oeaw.ac.at/archeaccessrestrictions/academic', $accessRestrIds)) {
$meta->addLiteral($propRead, $roleAcademic);
RC::$log->info("\t\t\tacademic");
} else {
Expand Down

0 comments on commit c75168f

Please sign in to comment.