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

/* --------------------------------------------------------------
   AdminAccessRoleFactory.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 AdminAccessRoleFactory
 *
 * @category   System
 * @package    AdminAccess
 * @subpackage Factories
 */
class AdminAccessRoleFactory implements AdminAccessRoleFactoryInterface
{
    /**
     * @var CI_DB_query_builder
     */
    protected $queryBuilder;
    
    /**
     * @var LanguageProviderInterface
     */
    protected $languageProvider;
    
    
    /**
     * AdminAccessRoleFactory constructor.
     *
     * @param CI_DB_query_builder       $queryBuilder     Query builder.
     * @param LanguageProviderInterface $languageProvider Language provider.
     */
    public function __construct(CI_DB_query_builder $queryBuilder, LanguageProviderInterface $languageProvider)
    {
        $this->queryBuilder     = $queryBuilder;
        $this->languageProvider = $languageProvider;
    }
    
    
    /**
     * Creates an admin access role.
     *
     * @return AdminAccessRoleInterface Role object.
     */
    public function createAdminAccessRole()
    {
        return MainFactory::create(AdminAccessRole::class, $this->_createAdminAccessRoleDeleter(),
                                   $this->_createAdminAccessRoleWriter(), $this->_createAdminAccessPermissionReader());
    }
    
    
    /**
     * Creates an admin access role collection.
     *
     * @return AdminAccessRoleCollection Role collection.
     */
    public function createAdminAccessRoleCollection()
    {
        return MainFactory::create(AdminAccessRoleCollection::class);
    }
    
    
    /**
     * Creates an admin access role deleter.
     *
     * @return AdminAccessRoleDeleterInterface Role deleter object.
     */
    protected function _createAdminAccessRoleDeleter()
    {
        return MainFactory::create(AdminAccessRoleDeleter::class, $this->queryBuilder);
    }
    
    
    /**
     * Creates an admin access role writer.
     *
     * @return AdminAccessRoleWriterInterface Role writer object.
     */
    protected function _createAdminAccessRoleWriter()
    {
        return MainFactory::create(AdminAccessRoleWriter::class, $this->queryBuilder, $this->languageProvider);
    }
    
    
    /**
     * Creates an admin access permission reader.
     *
     * @return AdminAccessPermissionReaderInterface Permission reader object.
     */
    protected function _createAdminAccessPermissionReader()
    {
        return MainFactory::create(AdminAccessPermissionReader::class, $this->queryBuilder,
                                   $this->_createAdminAccessPermissionFactory());
    }
    
    
    /**
     * Creates an admin access permission factory.
     *
     * @return AdminAccessPermissionFactoryInterface Permission factory object.
     */
    protected function _createAdminAccessPermissionFactory()
    {
        return MainFactory::create(AdminAccessPermissionFactory::class, $this->queryBuilder,
                                   $this->_createAdminAccessGroupReader());
    }
    
    
    /**
     * Creates an admin access group reader.
     *
     * @return AdminAccessGroupReader Group reader object.
     */
    protected function _createAdminAccessGroupReader()
    {
        return MainFactory::create(AdminAccessGroupReader::class, $this->queryBuilder,
                                   $this->_createAdminAccessGroupFactory(), $this->languageProvider);
    }
    
    
    /**
     * Creates an admin access group factory.
     *
     * @return AdminAccessGroupFactoryInterface Group factory object.
     */
    protected function _createAdminAccessGroupFactory()
    {
        return MainFactory::create(AdminAccessGroupFactory::class, $this->queryBuilder);
    }
}