Overview

Namespaces

  • Charcoal
    • Admin
      • Widget
        • Cms
    • Cms
      • Config
      • Mixin
        • Traits
      • Route
      • Section
      • Service
        • Loader
        • Manager
      • ServiceProvider
      • Support
        • Helpers
        • Interfaces
        • Traits
    • Property

Classes

  • Charcoal\Admin\Widget\Cms\HierarchicalSectionTableWidget
  • Charcoal\Admin\Widget\Cms\SectionTableWidget
  • Charcoal\Cms\AbstractDocument
  • Charcoal\Cms\AbstractEvent
  • Charcoal\Cms\AbstractFaq
  • Charcoal\Cms\AbstractImage
  • Charcoal\Cms\AbstractNews
  • Charcoal\Cms\AbstractSection
  • Charcoal\Cms\AbstractText
  • Charcoal\Cms\AbstractVideo
  • Charcoal\Cms\Config
  • Charcoal\Cms\Config\CmsConfig
  • Charcoal\Cms\Config\EventConfig
  • Charcoal\Cms\Config\NewsConfig
  • Charcoal\Cms\Config\SectionConfig
  • Charcoal\Cms\Document
  • Charcoal\Cms\DocumentCategory
  • Charcoal\Cms\EmptySection
  • Charcoal\Cms\Event
  • Charcoal\Cms\EventCategory
  • Charcoal\Cms\ExternalSection
  • Charcoal\Cms\Faq
  • Charcoal\Cms\FaqCategory
  • Charcoal\Cms\Image
  • Charcoal\Cms\ImageCategory
  • Charcoal\Cms\News
  • Charcoal\Cms\NewsCategory
  • Charcoal\Cms\Route\EventRoute
  • Charcoal\Cms\Route\GenericRoute
  • Charcoal\Cms\Route\NewsRoute
  • Charcoal\Cms\Route\SectionRoute
  • Charcoal\Cms\Section
  • Charcoal\Cms\Section\BlocksSection
  • Charcoal\Cms\Section\ContentSection
  • Charcoal\Cms\Service\Loader\AbstractLoader
  • Charcoal\Cms\Service\Loader\EventLoader
  • Charcoal\Cms\Service\Loader\NewsLoader
  • Charcoal\Cms\Service\Loader\SectionLoader
  • Charcoal\Cms\Service\Manager\AbstractManager
  • Charcoal\Cms\Service\Manager\EventManager
  • Charcoal\Cms\Service\Manager\NewsManager
  • Charcoal\Cms\ServiceProvider\CmsServiceProvider
  • Charcoal\Cms\Support\Helpers\DateHelper
  • Charcoal\Cms\Tag
  • Charcoal\Cms\Text
  • Charcoal\Cms\TextCategory
  • Charcoal\Cms\Video
  • Charcoal\Cms\VideoCategory
  • Charcoal\Property\TemplateOptionsProperty
  • Charcoal\Property\TemplateProperty

Interfaces

  • Charcoal\Cms\DocumentInterface
  • Charcoal\Cms\EventInterface
  • Charcoal\Cms\FaqInterface
  • Charcoal\Cms\ImageInterface
  • Charcoal\Cms\MetatagInterface
  • Charcoal\Cms\Mixin\HasContentBlocksInterface
  • Charcoal\Cms\NewsInterface
  • Charcoal\Cms\SearchableInterface
  • Charcoal\Cms\SectionInterface
  • Charcoal\Cms\Support\Interfaces\EventManagerAwareInterface
  • Charcoal\Cms\Support\Interfaces\NewsManagerAwareInterface
  • Charcoal\Cms\Support\Interfaces\SectionLoaderAwareInterface
  • Charcoal\Cms\TemplateableInterface
  • Charcoal\Cms\TextInterface
  • Charcoal\Cms\VideoInterface

Traits

  • Charcoal\Admin\Widget\Cms\SectionTableTrait
  • Charcoal\Cms\MetatagTrait
  • Charcoal\Cms\Mixin\Traits\HasContentBlocksTrait
  • Charcoal\Cms\SearchableTrait
  • Charcoal\Cms\Support\Traits\DateHelperAwareTrait
  • Charcoal\Cms\Support\Traits\EventManagerAwareTrait
  • Charcoal\Cms\Support\Traits\NewsManagerAwareTrait
  • Charcoal\Cms\Support\Traits\SectionLoaderAwareTrait
  • Charcoal\Cms\TemplateableTrait
  • Overview
  • Namespace
  • Class
  1: <?php
  2: 
  3: namespace Charcoal\Cms\ServiceProvider;
  4: 
  5: // Pimple dependencies
  6: use Charcoal\Cms\Service\Loader\EventLoader;
  7: use Charcoal\Cms\Service\Loader\NewsLoader;
  8: use Charcoal\Cms\Service\Manager\EventManager;
  9: use Charcoal\Cms\Service\Manager\NewsManager;
 10: use Charcoal\Cms\Support\Helpers\DateHelper;
 11: use Pimple\Container;
 12: use Pimple\ServiceProviderInterface;
 13: 
 14: // Local dependencies
 15: use Charcoal\Cms\Config;
 16: 
 17: // Cms Loaders
 18: use Charcoal\Cms\Service\Loader\SectionLoader;
 19: 
 20: // dependencies from `charcoal-core`
 21: use Charcoal\Model\AbstractModel;
 22: 
 23: // dependencies from `charcoal-cms`
 24: use Charcoal\Cms\SectionInterface;
 25: use Charcoal\Cms\Config\CmsConfig;
 26: 
 27: // dependencies from `charcoal-factory`
 28: use Charcoal\Factory\GenericFactory;
 29: 
 30: /**
 31:  * Cms Service Provider
 32:  *
 33:  * Provide the following service to container:
 34:  *
 35:  * - `cms/section/factory`
 36:  */
 37: class CmsServiceProvider implements ServiceProviderInterface
 38: {
 39:     /**
 40:      * Registers services on the given container.
 41:      *
 42:      * This method should only be used to configure services and parameters.
 43:      * It should not get services.
 44:      *
 45:      * @param \Pimple\Container $container A container instance.
 46:      * @return void
 47:      */
 48:     public function register(Container $container)
 49:     {
 50:         /**
 51:          * @param Container $container
 52:          * @return CmsConfig Website configurations (from cms.json).
 53:          */
 54:         $container['cms/config'] = function (Container $container) {
 55:             $appConfig = $container['config'];
 56:             $cms = $appConfig->get('cms');
 57: 
 58:             $cmsConfig = new CmsConfig();
 59: 
 60:             $cmsConfig->addFile(__DIR__.'/../../../../config/cms.json');
 61:             $cmsConfig->setData($cms);
 62: 
 63:             $config = $cmsConfig->get('config_obj');
 64: 
 65:             if ($config) {
 66:                 $factory = $container['model/factory'];
 67: 
 68:                 $configId = $cmsConfig->get('config_obj_id') ?: 1;
 69: 
 70:                 $model = $factory
 71:                     ->create($config)
 72:                     ->load($configId);
 73: 
 74:                 if (!!$model->id()) {
 75:                     $cmsConfig->addModel($model);
 76:                 }
 77:             }
 78: 
 79:             return $cmsConfig;
 80:         };
 81: 
 82:         /**
 83:          * @param Container $container Pimple DI Container.
 84:          * @return DateHelper
 85:          */
 86:         $container['date/helper'] = function (Container $container) {
 87: 
 88:             trigger_error(sprintf(
 89:                 '%s is deprecated, use %s instead',
 90:                 '$container[\'date/helper\']',
 91:                 '$container[\'date/helper\']'
 92:             ));
 93: 
 94:             return new DateHelper([
 95:                 'date_formats' => $container['cms/config']->get('date_formats'),
 96:                 'time_formats' => $container['cms/config']->get('time_formats'),
 97:                 'translator'   => $container['translator']
 98:             ]);
 99:         };
100: 
101:         /**
102:          * @param Container $container Pimple DI Container.
103:          * @return DateHelper
104:          */
105:         $container['cms/date/helper'] = function (Container $container) {
106: 
107:             return new DateHelper([
108:                 'date_formats' => $container['cms/config']->get('date_formats'),
109:                 'time_formats' => $container['cms/config']->get('time_formats'),
110:                 'translator'   => $container['translator']
111:             ]);
112:         };
113: 
114:         $this->registerSectionServices($container);
115:         $this->registerNewsServices($container);
116:         $this->registerEventServices($container);
117:     }
118: 
119:     /**
120:      * @param Container $container Pimple DI Container.
121:      * @return void
122:      */
123:     private function registerSectionServices(Container $container)
124:     {
125:         /**
126:          * @param Container $container Pimple DI Container.
127:          * @return GenericFactory
128:          */
129:         $container['cms/section/factory'] = function (Container $container) {
130:             return new GenericFactory([
131:                 'base_class'       => SectionInterface::class,
132:                 'arguments'        => $container['model/factory']->arguments(),
133:                 'resolver_options' => [
134:                     'suffix' => 'Section'
135:                 ]
136:             ]);
137:         };
138: 
139:         /**
140:          * @param Container $container Pimple DI Container.
141:          * @return SectionLoader
142:          */
143:         $container['cms/section/loader'] = function (Container $container) {
144:             $sectionLoader = new SectionLoader([
145:                 'loader'     => $container['model/collection/loader'],
146:                 'factory'    => $container['model/factory'],
147:                 'cache'      => $container['cache'],
148:                 'translator' => $container['translator']
149:             ]);
150: 
151:             // Cms.json
152:             $sectionConfig = $container['cms/config']->sectionConfig();
153: 
154:             $sectionLoader->setObjType($sectionConfig->get('objType'));
155:             $sectionLoader->setBaseSection($sectionConfig->get('baseSection'));
156:             $sectionLoader->setSectionTypes($sectionConfig->get('sectionTypes'));
157: 
158:             return $sectionLoader;
159:         };
160:     }
161: 
162:     /**
163:      * @param Container $container Pimple DI Container.
164:      * @return void
165:      */
166:     private function registerNewsServices(Container $container)
167:     {
168:         /**
169:          * @param Container $container Pimple DI Container.
170:          * @return NewsLoader
171:          */
172:         $container['cms/news/loader'] = function (Container $container) {
173:             $newsLoader = new NewsLoader([
174:                 'loader'     => $container['model/collection/loader'],
175:                 'factory'    => $container['model/factory'],
176:                 'cache'      => $container['cache'],
177:                 'translator' => $container['translator']
178:             ]);
179: 
180:             $newsConfig = $container['cms/config']->newsConfig();
181: 
182:             // Cms.json
183:             $objType = $newsConfig->get('obj_type');
184:             $newsLoader->setObjType($objType);
185: 
186:             return $newsLoader;
187:         };
188: 
189:         /**
190:          * @param Container $container
191:          * @return NewsManager
192:          */
193:         $container['cms/news/manager'] = function (Container $container) {
194: 
195:             $newsManager = new NewsManager([
196:                 'loader'      => $container['model/collection/loader'],
197:                 'factory'     => $container['model/factory'],
198:                 'news/loader' => $container['cms/news/loader'],
199:                 'cache'       => $container['cache'],
200:                 'cms/config'  => $container['cms/config'],
201:                 'translator'  => $container['translator']
202:             ]);
203: 
204:             return $newsManager;
205:         };
206:     }
207: 
208:     /**
209:      * @param Container $container Pimple DI Container.
210:      * @return void
211:      */
212:     private function registerEventServices(Container $container)
213:     {
214:         /**
215:          * @param Container $container Pimple DI Container.
216:          * @return EventLoader
217:          */
218:         $container['cms/event/loader'] = function (Container $container) {
219:             $eventLoader = new EventLoader([
220:                 'loader'     => $container['model/collection/loader'],
221:                 'factory'    => $container['model/factory'],
222:                 'cache'      => $container['cache'],
223:                 'translator' => $container['translator']
224:             ]);
225: 
226:             $eventConfig = $container['cms/config']->eventConfig();
227: 
228:             // Cms.json
229:             $objType = $eventConfig->get('obj_type');
230:             $eventLoader->setObjType($objType);
231: 
232:             $lifespan = $eventConfig->get('lifespan');
233:             $eventLoader->setLifespan($lifespan);
234: 
235:             return $eventLoader;
236:         };
237: 
238:         /**
239:          * @param Container $container
240:          * @return EventManager
241:          */
242:         $container['cms/event/manager'] = function (Container $container) {
243: 
244:             $eventManager = new EventManager([
245:                 'loader'       => $container['model/collection/loader'],
246:                 'factory'      => $container['model/factory'],
247:                 'event/loader' => $container['cms/event/loader'],
248:                 'cache'        => $container['cache'],
249:                 'cms/config'   => $container['cms/config'],
250:                 'translator'   => $container['translator']
251:             ]);
252: 
253:             return $eventManager;
254:         };
255:     }
256: }
257: 
API documentation generated by ApiGen