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 
<?php

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

/**
 * Class AdminAccessPermissionFactory
 *
 * @category   System
 * @package    AdminAccess
 * @subpackage Factories
 */
class AdminAccessPermissionFactory implements AdminAccessPermissionFactoryInterface
{
    /**
     * @var AdminAccessGroupReaderInterface
     */
    protected $groupReader;
    
    /**
     * @var AdminAccessPermissionWriterInterface
     */
    protected $permissionWriter;
    
    /**
     * @var AdminAccessPermissionDeleterInterface
     */
    protected $permissionDeleter;
    
    /**
     * @var AdminAccessPermissionReaderInterface
     */
    protected $permissionReader;
    
    /**
     * @var CI_DB_query_builder
     */
    protected $queryBuilder;
    
    
    /**
     * AdminAccessPermissionFactory constructor.
     *
     * @param CI_DB_query_builder             $queryBuilder Query builder.
     * @param AdminAccessGroupReaderInterface $groupReader  Admin access group reader.
     */
    public function __construct(CI_DB_query_builder $queryBuilder,
                                AdminAccessGroupReaderInterface $groupReader)
    {
        $this->queryBuilder = $queryBuilder;
        $this->groupReader  = $groupReader;
    }
    
    
    /**
     * Creates an admin access permission.
     *
     * @return AdminAccessPermissionPresentationInterface|AdminAccessPermissionPersistenceInterface Permission object.
     */
    public function createAdminAccessPermission()
    {
        return MainFactory::create(AdminAccessPermission::class, $this->_createAdminAccessPermissionDeleter(),
                                   $this->_createAdminAccessPermissionWriter(), $this->groupReader,
                                   $this->_createAdminAccessPermissionReader());
    }
    
    
    /**
     * Creates an admin access permission collection.
     *
     * @param array $permissionObjectsArray Array of permission objects.
     *
     * @return AdminAccessPermissionCollection Permission collection.
     */
    public function createAdminAccessPermissionCollection(array $permissionObjectsArray = [])
    {
        return MainFactory::create(AdminAccessPermissionCollection::class, $permissionObjectsArray);
    }
    
    
    /**
     * Creates an admin access permission writer.
     *
     * @return AdminAccessPermissionWriterInterface Permission writer object.
     */
    protected function _createAdminAccessPermissionWriter()
    {
        if(null === $this->permissionWriter)
        {
            $this->permissionWriter = MainFactory::create(AdminAccessPermissionWriter::class, $this->queryBuilder);
        }
        
        return $this->permissionWriter;
    }
    
    
    /**
     * Creates an admin access permission deleter.
     *
     * @return AdminAccessPermissionDeleter Permission deleter object.
     */
    protected function _createAdminAccessPermissionDeleter()
    {
        if(null === $this->permissionDeleter)
        {
            $this->permissionDeleter = MainFactory::create(AdminAccessPermissionDeleter::class, $this->queryBuilder);
        }
        
        return $this->permissionDeleter;
    }
    
    
    /**
     * Creates an admin access permission reader.
     *
     * @return AdminAccessPermissionReaderInterface Permission reader object.
     */
    protected function _createAdminAccessPermissionReader()
    {
        if(null === $this->permissionReader)
        {
            $this->permissionReader = MainFactory::create(AdminAccessPermissionReader::class, $this->queryBuilder,
                                                          $this);
        }
        
        return $this->permissionReader;
    }
}