Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
100.00% |
1 / 1 |
|
100.00% |
2 / 2 |
CRAP | |
100.00% |
43 / 43 |
ObjectRole | |
100.00% |
1 / 1 |
|
100.00% |
2 / 2 |
7 | |
100.00% |
43 / 43 |
select(\Scrivo\Context $context, $objectId) | |
100.00% |
1 / 1 |
3 | |
100.00% |
21 / 21 |
|||
set(\Scrivo\Context $context, $objectId, $roles) | |
100.00% |
1 / 1 |
4 | |
100.00% |
22 / 22 |
<?php | |
/* Copyright (c) 2012, Geert Bergman (geert@scrivo.nl) | |
* All rights reserved. | |
* | |
* Redistribution and use in source and binary forms, with or without | |
* modification, are permitted provided that the following conditions are met: | |
* | |
* 1. Redistributions of source code must retain the above copyright notice, | |
* this list of conditions and the following disclaimer. | |
* 2. Redistributions in binary form must reproduce the above copyright notice, | |
* this list of conditions and the following disclaimer in the documentation | |
* and/or other materials provided with the distribution. | |
* 3. Neither the name of "Scrivo" nor the names of its contributors may be | |
* used to endorse or promote products derived from this software without | |
* specific prior written permission. | |
* | |
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE | |
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | |
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | |
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | |
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | |
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | |
* POSSIBILITY OF SUCH DAMAGE. | |
* | |
* $Id: ObjectRole.php 866 2013-08-25 16:22:35Z geert $ | |
*/ | |
/** | |
* Implementation of the \Scrivo\ObjectRole class. | |
*/ | |
namespace Scrivo; | |
/** | |
* Class that represents an object-role relation. | |
* | |
* The object-role relationship is a 1 to n relation of Scrivo objects (pages | |
* or assets) and Scrivo roles. | |
*/ | |
class ObjectRole extends \Scrivo\Role { | |
/** | |
* Select the object-roles for a given object by object id. | |
* | |
* @param \Scrivo\Context $context A Scrivo context. | |
* @param int $objectId An id of an object to create the object-roles for. | |
* | |
* @return \Scrivo\ObjectRole[roleId] An array containing the selected | |
* object-roles. | |
*/ | |
public static function select(\Scrivo\Context $context, $objectId) { | |
\Scrivo\ArgumentCheck::assertArgs(func_get_args(), array( | |
null, | |
array(\Scrivo\ArgumentCheck::TYPE_INTEGER) | |
)); | |
try { | |
$sth = $context->connection->prepare( | |
"SELECT R.role_id, R.type, R.title, R.description | |
FROM role R, object_role DR | |
WHERE R.instance_id = :instId AND DR.instance_id = :instId | |
AND R.role_id = DR.role_id AND DR.page_id = :objectId"); | |
$context->connection->bindInstance($sth); | |
$sth->bindValue(":objectId", $objectId, \PDO::PARAM_INT); | |
$res = array(); | |
$sth->execute(); | |
while ($rd = $sth->fetch(\PDO::FETCH_ASSOC)) { | |
$li = new ObjectRole($context); | |
$li->id = intval($rd["role_id"]); | |
$li->type = intval($rd["type"]); | |
$li->title = new \Scrivo\String($rd["title"]); | |
$li->description = new \Scrivo\String($rd["description"]); | |
$res[$li->id] = $li; | |
} | |
return $res; | |
} catch(\PDOException $e) { | |
throw new \scrivo\ResourceException($e); | |
} | |
} | |
/** | |
* Set the object roles for a given object. | |
* | |
* The object roles to set is either an array of ObjectRole or stdObject | |
* objects. stdObject need to contain the member roleId. | |
* | |
* Note: this sets all the roles for the object at once. So not giving the | |
* the roles effectivily clears the roles for the given object. | |
* | |
* TODO: does noet clear the cache propery | |
* | |
* @param \Scrivo\Context $context A Scrivo context. | |
* @param int $objectId An id of an object to set the object-roles for. | |
* @param \Scrivo\ObjectRole[]|object[] $roles A new set of object-roles | |
* for the given object. | |
*/ | |
public static function set(\Scrivo\Context $context, $objectId, $roles) { | |
\Scrivo\ArgumentCheck::assertArgs(func_get_args(), array( | |
null, | |
array(\Scrivo\ArgumentCheck::TYPE_INTEGER), | |
null | |
)); | |
try { | |
$sth = $context->connection->prepare( | |
"DELETE FROM object_role WHERE | |
instance_id = :instId AND page_id = :objectId"); | |
$context->connection->bindInstance($sth); | |
$sth->bindValue(":objectId", $objectId, \PDO::PARAM_INT); | |
$sth->execute(); | |
if ($roles) { | |
$sth = $context->connection->prepare( | |
"INSERT INTO object_role | |
(instance_id, role_id, page_id) | |
VALUES (:instId, :roleId, :objectId)"); | |
$context->connection->bindInstance($sth); | |
$sth->bindValue(":objectId", $objectId, \PDO::PARAM_INT); | |
foreach ($roles as $role) { | |
$sth->bindValue(":roleId", $role->id, \PDO::PARAM_INT); | |
$sth->execute(); | |
} | |
} | |
} catch(\PDOException $e) { | |
throw new \Scrivo\ResourceException($e); | |
} | |
} | |
} | |