Code Coverage  | 
     ||||||||||
Classes and Traits  | 
      Functions and Methods  | 
      Lines  | 
     ||||||||
| Total |         | 
      100.00%  | 
      1 / 1  | 
              | 
      100.00%  | 
      4 / 4  | 
      CRAP |         | 
      100.00%  | 
      27 / 27  | 
     
| Context |         | 
      100.00%  | 
      1 / 1  | 
              | 
      100.00%  | 
      4 / 4  | 
      11 |         | 
      100.00%  | 
      27 / 27  | 
     
| __construct(\Scrivo\Config $config, $user) |         | 
      100.00%  | 
      1 / 1  | 
      2 |         | 
      100.00%  | 
      10 / 10  | 
     |||
| __get($name) |         | 
      100.00%  | 
      1 / 1  | 
      6 |         | 
      100.00%  | 
      6 / 6  | 
     |||
| checkPermission($perm, $objectId=null) |         | 
      100.00%  | 
      1 / 1  | 
      2 |         | 
      100.00%  | 
      10 / 10  | 
     |||
| __sleep() |         | 
      100.00%  | 
      1 / 1  | 
      1 |         | 
      100.00%  | 
      1 / 1  | 
     |||
| <?php | |
| /* Copyright (c) 2013, 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: Context.php 841 2013-08-19 22:19:47Z geert $ | |
| */ | |
| /** | |
| * Implementation of the \Scrivo\Context class. | |
| */ | |
| namespace Scrivo; | |
| /** | |
| * Class that defines a Scrivo context. | |
| * | |
| * Working with Scrivo data requires a number of resources to be present. Of | |
| * course there should be a database connection to a Scrivo database and also | |
| * an instance id that refers to the data if a scrivo instance in the database | |
| * (a Scrivo database can store data for multiple instances/websites). | |
| * | |
| * Also a principal id is required. This principal id is used to determine the | |
| * permissions for actions that are excecuted on behalf of the principal. | |
| * | |
| * Then there is the configuration data: the entries in the ".htscrivo" file | |
| * and the object id labels. | |
| * | |
| * All this information is what we call the Scrivo context. Working with Scrivo | |
| * data will almost always require you to setup a Scrivo context first. The | |
| * parameters for the database connection and the instance id are mandatory | |
| * entries in the Scrivo config file, a principal id will usually be retrieved | |
| * from a session or is set progammatically. Thus configuration data and a | |
| * principal id is all what is required to instantiate a Scrivo context. | |
| * | |
| * $context = new \Scrivo\Context( | |
| * new \Scrivo\Config(), \Scrivo\User::PRIMARY_ADMIN_ID); | |
| * $homepage = new \Scrivo\Page($context, $context->labels->HOME); | |
| * | |
| * Some other usage examples: | |
| * | |
| * // Get the current (user) principal from the context. | |
| * $currentUser = new \Scrivo\User($context, $context->principalId); | |
| * | |
| * // Get a reference to the contexts PDO connection and instance id. | |
| * $conn = $context->connection; | |
| * $instId = $context->instanceId; | |
| * | |
| * // Get the value of a configuration entry | |
| * $wwwRoot = $context->config->WWW_ROOT; | |
| * | |
| * // Get an object id by its label. | |
| * $contactPageId = $context->labels->CONTACT; | |
| * | |
| * // Check write permission on the page labelled contact. | |
| * $context->checkPermission( | |
| * \Scrivo\AccessController::WRITE_ACCESS, $context->labels->CONTACT); | |
| * | |
| * @property-read \Scrivo\LocalCache $cache The object cache. | |
| * @property-read \Scrivo\Config $config A Config object holding this site's | |
| * configuration data | |
| * @property-read \Scrivo\PdoConnection $connection A PDO connection to a | |
| * Scrivo database. | |
| * @property-read \Scrivo\IdLabel $labels A IdLabel object that holding this | |
| * sites id-label pairs. | |
| * @property-read \Scrivo\User $principal The principal. | |
| */ | |
| class Context { | |
| /** | |
| * A Config object holding this site's configuration data | |
| * @var \Scrivo\Config | |
| */ | |
| private $config = null; | |
| /** | |
| * A PDO connection to a Scrivo database. | |
| * @var \Scrivo\PdoConnection | |
| */ | |
| private $conn = null; | |
| /** | |
| * The principal. | |
| * @var \Scrivo\User | |
| */ | |
| private $principal = null; | |
| /** | |
| * A IdLabel object that holding this sites id-label pairs. | |
| * @var \Scrivo\IdLabel | |
| */ | |
| private $idLabel = null; | |
| /** | |
| * The object cache. | |
| * @var \Scrivo\LocalCache | |
| */ | |
| private $cache = null; | |
| /** | |
| * Construct a Scrivo context using a configuration file and a user id. | |
| * | |
| * @param \Scrivo\Config $config A Scrivo configuration object. | |
| * @param \Scrivo\User|int $user A Scrivo user. | |
| */ | |
| public function __construct(\Scrivo\Config $config, $user) { | |
| \Scrivo\ArgumentCheck::assertArgs(func_get_args(), array( | |
| null, | |
| //array(array("\Scrivo\User", \Scrivo\ArgumentCheck::TYPE_INTEGER)) | |
| null // TODO multiple type check in ArgumentCheck | |
| )); | |
| $this->config = $config; | |
| $this->conn = new \Scrivo\PdoConnection($config); | |
| $this->cache = new \Scrivo\LocalCache(); | |
| $this->idLabel = \Scrivo\IdLabel::select($this); | |
| $this->principal = $user instanceof \Scrivo\User | |
| ? $user : \Scrivo\User::fetch($this, $user); | |
| } | |
| /** | |
| * Implementation of the readable properties using the PHP magic | |
| * method __get(). | |
| * | |
| * @param string $name The name of the property to get. | |
| * | |
| * @return mixed The value of the requested property. | |
| */ | |
| public function __get($name) { | |
| switch($name) { | |
| case "config": return $this->config; | |
| case "connection": return $this->conn; | |
| case "principal": return $this->principal; | |
| case "labels": return $this->idLabel; | |
| case "cache": return $this->cache; | |
| } | |
| throw new \Scrivo\SystemException("No such get-property '$name'."); | |
| } | |
| /** | |
| * Check a permission on an object using this Scrivo context. | |
| * | |
| * @param int $perm The permission to test (READ_ACCESS || WRITE_ACCESS | |
| * || PUBLISH_ACCESS) | |
| * @param int $objectId A valid object id of a page or asset. | |
| * | |
| * @throws \Scrivo\ApplicationException if no access was granted. | |
| */ | |
| public function checkPermission($perm, $objectId=null) { | |
| \Scrivo\ArgumentCheck::assertArgs(func_get_args(), array( | |
| array(\Scrivo\ArgumentCheck::TYPE_INTEGER, array( | |
| \Scrivo\AccessController::READ_ACCESS, | |
| \Scrivo\AccessController::WRITE_ACCESS, | |
| \Scrivo\AccessController::PUBLISH_ACCESS)), | |
| array(\Scrivo\ArgumentCheck::TYPE_INTEGER) | |
| ), 1); | |
| if (!AccessController::checkPermission($this, $perm, $objectId)) { | |
| throw new \Scrivo\ApplicationException("Access violation"); | |
| } | |
| } | |
| /** | |
| * Prepare for serialization. Context data can never be stored in caches, | |
| * so prevent this by returning an empty array when the context is | |
| * serialized. | |
| * | |
| * @return array An empty array. | |
| */ | |
| public function __sleep() { | |
| return array(); | |
| } | |
| } | |