1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51  52  53  54  55  56  57  58  59  60  61  62  63  64  65  66  67  68  69  70  71  72  73  74  75  76  77  78  79  80  81  82  83  84  85  86  87  88  89  90  91  92  93  94  95  96  97  98  99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 
<?php

/* --------------------------------------------------------------
   AdminAccessGroupItem.inc.php 2018-01-22
   Gambio GmbH
   http://www.gambio.de
   Copyright (c) 2016 Gambio GmbH
   Released under the GNU General Public License (Version 2)
   [http://www.gnu.org/licenses/gpl-2.0.html]
   --------------------------------------------------------------
*/

/**
 * Class AdminAccessGroupItem
 *
 * A Group is a collection pages/controllers,
 * that represent a semantic unit for the administration of our shop system.
 *
 * @category   System
 * @package    AdminAccess
 * @subpackage Entities
 */
class AdminAccessGroupItem implements AdminAccessGroupItemInterface
{
    /**
     * @var array
     */
    protected $allowedTypes;
    
    /**
     * @var int
     */
    protected $groupId;
    
    /**
     * @var string
     */
    protected $identifier;
    
    /**
     * @var string
     */
    protected $type;
    
    
    /**
     * Returns the group id.
     *
     * @return int Group id.
     */
    public function __construct(IntType $groupId, NonEmptyStringType $identifier, NonEmptyStringType $type)
    {
        $this->allowedTypes = ['PAGE', 'CONTROLLER', 'AJAX_HANDLER'];
        if(!in_array(strtoupper($type->asString()), $this->allowedTypes))
        {
            throw new InvalidArgumentException('Item type must be one of the following: ' . implode(', ',
                                                                                                    $this->allowedTypes));
        }
        
        $this->groupId    = $groupId->asInt();
        $this->identifier = $identifier->asString();
        $this->type       = strtoupper($type->asString());
    }
    
    
    /**
     * Returns the group id.
     *
     * @return int Group id.
     */
    public function getGroupId()
    {
        return $this->groupId;
    }
    
    
    /**
     * Returns the group item identifier.
     *
     * @return string Group item identifier.
     */
    public function getIdentifier()
    {
        return $this->identifier;
    }
    
    
    /**
     * Returns the group item type.
     *
     * @return string Group item type.
     */
    public function getType()
    {
        return $this->type;
    }
    
    
    /**
     * Sets the group id.
     *
     * @param int Group id.
     *
     * @return AdminAccessGroupItemInterface
     */
    public function setGroupId(IntType $value)
    {
        $this->groupId = $value->asInt();
        
        return $this;
    }
    
    
    /**
     * Sets the group item identifier.
     *
     * @param NonEmptyStringType Group item identifier.
     *
     * @return AdminAccessGroupItemInterface
     */
    public function setIdentifier(NonEmptyStringType $value)
    {
        $this->identifier = $value->asString();
        
        return $this;
    }
    
    
    /**
     * Sets the group item type.
     *
     * @param NonEmptyStringType Group item type.
     *
     * @return AdminAccessGroupItemInterface
     */
    public function setType(NonEmptyStringType $value)
    {
        $this->allowedTypes = ['PAGE', 'CONTROLLER', 'AJAX_HANDLER'];
        if(!in_array(strtoupper($value->asString()), $this->allowedTypes))
        {
            throw new InvalidArgumentException('Item type must be one of the following: ' . implode(', ',
                                                                                                    $this->allowedTypes));
        }
        
        $this->type = strtoupper($value->asString());
        
        return $this;
    }
}