BacLuc | ab3ad35 | 2016-04-07 20:13:05 +0200 | [diff] [blame] | 1 | <?php |
BacLuc | 4b5de06 | 2020-04-05 16:03:46 +0200 | [diff] [blame] | 2 | |
BacLuc | ab3ad35 | 2016-04-07 20:13:05 +0200 | [diff] [blame] | 3 | namespace Concrete\Package\BaclucEventPackage\Block\BaclucEventBlock; |
| 4 | |
BacLuc | 4b5de06 | 2020-04-05 16:03:46 +0200 | [diff] [blame] | 5 | use BaclucC5Crud\Adapters\Concrete5\Concrete5Renderer; |
BacLuc | 0f23359 | 2020-02-22 19:34:31 +0100 | [diff] [blame] | 6 | use BaclucC5Crud\Adapters\Concrete5\DIContainerFactory; |
| 7 | use BaclucC5Crud\Controller\ActionProcessor; |
BacLuc | 4b5de06 | 2020-04-05 16:03:46 +0200 | [diff] [blame] | 8 | use BaclucC5Crud\Controller\ActionRegistry; |
BacLuc | 0f23359 | 2020-02-22 19:34:31 +0100 | [diff] [blame] | 9 | use BaclucC5Crud\Controller\ActionRegistryFactory; |
| 10 | use BaclucC5Crud\Controller\CrudController; |
BacLuc | 4b5de06 | 2020-04-05 16:03:46 +0200 | [diff] [blame] | 11 | use BaclucC5Crud\Controller\Renderer; |
| 12 | use BaclucC5Crud\Controller\RowActionConfiguration; |
BacLuc | 0f23359 | 2020-02-22 19:34:31 +0100 | [diff] [blame] | 13 | use BaclucC5Crud\FieldConfigurationOverride\EntityFieldOverrideBuilder; |
| 14 | use BaclucC5Crud\View\FormType; |
BacLuc | 4b5de06 | 2020-04-05 16:03:46 +0200 | [diff] [blame] | 15 | use BaclucC5Crud\View\TableView\DontShowTableField; |
| 16 | use BaclucC5Crud\View\TableView\Field as TableField; |
| 17 | use BaclucC5Crud\View\ViewActionRegistry; |
BacLuc | 0f23359 | 2020-02-22 19:34:31 +0100 | [diff] [blame] | 18 | use BaclucEventPackage\Event; |
BacLuc | 4b5de06 | 2020-04-05 16:03:46 +0200 | [diff] [blame] | 19 | use BaclucEventPackage\EventActionRegistryFactory; |
| 20 | use BaclucEventPackage\EventCancellation; |
| 21 | use BaclucEventPackage\EventRowActionConfiguration; |
| 22 | use BaclucEventPackage\NextEvent\NextEventConfiguration; |
| 23 | use BaclucEventPackage\NoEditIdFallbackActionProcessor; |
| 24 | use BaclucEventPackage\ShowErrorActionProcessor; |
| 25 | use BaclucEventPackage\ViewActionRegistryFactory; |
BacLuc | ab3ad35 | 2016-04-07 20:13:05 +0200 | [diff] [blame] | 26 | use Concrete\Core\Block\BlockController; |
BacLuc | 3e987ec | 2020-03-15 17:43:19 +0100 | [diff] [blame] | 27 | use Concrete\Core\Package\PackageService; |
BacLuc | 9865d8a | 2020-03-14 17:15:50 +0100 | [diff] [blame] | 28 | use Concrete\Core\Page\Page; |
BacLuc | 0f23359 | 2020-02-22 19:34:31 +0100 | [diff] [blame] | 29 | use Concrete\Core\Routing\Redirect; |
BacLuc | 3e987ec | 2020-03-15 17:43:19 +0100 | [diff] [blame] | 30 | use Concrete\Core\Support\Facade\Application; |
BacLuc | 0f23359 | 2020-02-22 19:34:31 +0100 | [diff] [blame] | 31 | use Concrete\Package\BaclucC5Crud\Controller as PackageController; |
BacLuc | 3e987ec | 2020-03-15 17:43:19 +0100 | [diff] [blame] | 32 | use Concrete\Package\BaclucEventPackage\Controller as EventPackageController; |
BacLuc | 4b5de06 | 2020-04-05 16:03:46 +0200 | [diff] [blame] | 33 | use DI\ContainerBuilder; |
BacLuc | 0f23359 | 2020-02-22 19:34:31 +0100 | [diff] [blame] | 34 | use DI\DependencyException; |
| 35 | use DI\NotFoundException; |
| 36 | use Exception; |
BacLuc | 4b5de06 | 2020-04-05 16:03:46 +0200 | [diff] [blame] | 37 | use Psr\Container\ContainerInterface; |
BacLuc | 0f23359 | 2020-02-22 19:34:31 +0100 | [diff] [blame] | 38 | use ReflectionException; |
BacLuc | 4b5de06 | 2020-04-05 16:03:46 +0200 | [diff] [blame] | 39 | use function DI\autowire; |
| 40 | use function DI\create; |
| 41 | use function DI\factory; |
| 42 | use function DI\value; |
BacLuc | ab3ad35 | 2016-04-07 20:13:05 +0200 | [diff] [blame] | 43 | |
BacLuc | 0f23359 | 2020-02-22 19:34:31 +0100 | [diff] [blame] | 44 | class Controller extends BlockController |
BacLuc | ab3ad35 | 2016-04-07 20:13:05 +0200 | [diff] [blame] | 45 | { |
BacLuc | ab3ad35 | 2016-04-07 20:13:05 +0200 | [diff] [blame] | 46 | |
BacLuc | 5b1c5bd | 2016-04-08 14:50:38 +0200 | [diff] [blame] | 47 | |
| 48 | /** |
BacLuc | 0f23359 | 2020-02-22 19:34:31 +0100 | [diff] [blame] | 49 | * @throws DependencyException |
| 50 | * @throws NotFoundException |
| 51 | * @throws ReflectionException |
BacLuc | 5b1c5bd | 2016-04-08 14:50:38 +0200 | [diff] [blame] | 52 | */ |
BacLuc | 0f23359 | 2020-02-22 19:34:31 +0100 | [diff] [blame] | 53 | public function view() |
BacLuc | ab3ad35 | 2016-04-07 20:13:05 +0200 | [diff] [blame] | 54 | { |
BacLuc | 9865d8a | 2020-03-14 17:15:50 +0100 | [diff] [blame] | 55 | $this->processAction($this->createCrudController() |
BacLuc | 4a71e1b | 2020-03-15 12:10:33 +0100 | [diff] [blame] | 56 | ->getActionFor(ActionRegistryFactory::SHOW_TABLE, $this->bID)); |
BacLuc | ab3ad35 | 2016-04-07 20:13:05 +0200 | [diff] [blame] | 57 | } |
| 58 | |
BacLuc | 0f23359 | 2020-02-22 19:34:31 +0100 | [diff] [blame] | 59 | /** |
| 60 | * @throws DependencyException |
| 61 | * @throws NotFoundException |
| 62 | * @throws ReflectionException |
| 63 | */ |
BacLuc | f6d09d1 | 2020-04-05 16:24:03 +0200 | [diff] [blame] | 64 | public function action_view() |
| 65 | { |
| 66 | $this->view(); |
| 67 | } |
| 68 | |
| 69 | /** |
| 70 | * @throws DependencyException |
| 71 | * @throws NotFoundException |
| 72 | * @throws ReflectionException |
| 73 | */ |
BacLuc | 9865d8a | 2020-03-14 17:15:50 +0100 | [diff] [blame] | 74 | public function action_add_new_row_form($blockId) |
BacLuc | 0f23359 | 2020-02-22 19:34:31 +0100 | [diff] [blame] | 75 | { |
| 76 | $this->processAction($this->createCrudController() |
BacLuc | 4a71e1b | 2020-03-15 12:10:33 +0100 | [diff] [blame] | 77 | ->getActionFor(ActionRegistryFactory::ADD_NEW_ROW_FORM, $blockId)); |
BacLuc | 0f23359 | 2020-02-22 19:34:31 +0100 | [diff] [blame] | 78 | } |
BacLuc | ab3ad35 | 2016-04-07 20:13:05 +0200 | [diff] [blame] | 79 | |
BacLuc | 0f23359 | 2020-02-22 19:34:31 +0100 | [diff] [blame] | 80 | /** |
| 81 | * @throws DependencyException |
| 82 | * @throws NotFoundException |
| 83 | * @throws ReflectionException |
| 84 | */ |
BacLuc | 9865d8a | 2020-03-14 17:15:50 +0100 | [diff] [blame] | 85 | public function action_edit_row_form($blockId, $editId) |
BacLuc | 0f23359 | 2020-02-22 19:34:31 +0100 | [diff] [blame] | 86 | { |
| 87 | $this->processAction($this->createCrudController() |
BacLuc | 4a71e1b | 2020-03-15 12:10:33 +0100 | [diff] [blame] | 88 | ->getActionFor(ActionRegistryFactory::EDIT_ROW_FORM, $blockId), |
BacLuc | 0f23359 | 2020-02-22 19:34:31 +0100 | [diff] [blame] | 89 | $editId); |
| 90 | } |
| 91 | |
| 92 | /** |
| 93 | * Attention: all action method are called twice. |
| 94 | * Because this is a form submission, we stop after the function is executed |
| 95 | * @throws DependencyException |
| 96 | * @throws NotFoundException |
| 97 | * @throws ReflectionException |
| 98 | */ |
BacLuc | 9865d8a | 2020-03-14 17:15:50 +0100 | [diff] [blame] | 99 | public function action_post_form($blockId, $editId = null) |
BacLuc | 0f23359 | 2020-02-22 19:34:31 +0100 | [diff] [blame] | 100 | { |
BacLuc | 9865d8a | 2020-03-14 17:15:50 +0100 | [diff] [blame] | 101 | $this->processAction($this->createCrudController() |
BacLuc | 4a71e1b | 2020-03-15 12:10:33 +0100 | [diff] [blame] | 102 | ->getActionFor(ActionRegistryFactory::POST_FORM, $blockId), |
BacLuc | 0f23359 | 2020-02-22 19:34:31 +0100 | [diff] [blame] | 103 | $editId); |
| 104 | if ($this->blockViewRenderOverride == null) { |
| 105 | Redirect::page(Page::getCurrentPage())->send(); |
| 106 | exit(); |
| 107 | } |
| 108 | } |
| 109 | |
| 110 | /** |
| 111 | * @param $ignored |
| 112 | * @param $toDeleteId |
| 113 | * @throws DependencyException |
| 114 | * @throws NotFoundException |
| 115 | * @throws ReflectionException |
| 116 | */ |
BacLuc | 9865d8a | 2020-03-14 17:15:50 +0100 | [diff] [blame] | 117 | public function action_delete_entry($blockId, $toDeleteId) |
BacLuc | 0f23359 | 2020-02-22 19:34:31 +0100 | [diff] [blame] | 118 | { |
BacLuc | 9865d8a | 2020-03-14 17:15:50 +0100 | [diff] [blame] | 119 | $this->processAction($this->createCrudController() |
BacLuc | 4a71e1b | 2020-03-15 12:10:33 +0100 | [diff] [blame] | 120 | ->getActionFor(ActionRegistryFactory::DELETE_ENTRY, $blockId), |
BacLuc | 0f23359 | 2020-02-22 19:34:31 +0100 | [diff] [blame] | 121 | $toDeleteId); |
BacLuc | 8cb48d6 | 2020-03-14 17:16:43 +0100 | [diff] [blame] | 122 | if ($this->blockViewRenderOverride == null) { |
| 123 | Redirect::page(Page::getCurrentPage())->send(); |
| 124 | exit(); |
| 125 | } |
BacLuc | 0f23359 | 2020-02-22 19:34:31 +0100 | [diff] [blame] | 126 | } |
| 127 | |
| 128 | /** |
| 129 | * @throws DependencyException |
| 130 | * @throws NotFoundException |
| 131 | */ |
BacLuc | 9865d8a | 2020-03-14 17:15:50 +0100 | [diff] [blame] | 132 | public function action_cancel_form($blockId) |
BacLuc | 0f23359 | 2020-02-22 19:34:31 +0100 | [diff] [blame] | 133 | { |
BacLuc | 9865d8a | 2020-03-14 17:15:50 +0100 | [diff] [blame] | 134 | $this->processAction($this->createCrudController() |
BacLuc | 4a71e1b | 2020-03-15 12:10:33 +0100 | [diff] [blame] | 135 | ->getActionFor(ActionRegistryFactory::SHOW_TABLE, $blockId)); |
BacLuc | 0f23359 | 2020-02-22 19:34:31 +0100 | [diff] [blame] | 136 | } |
| 137 | |
| 138 | /** |
| 139 | * @param $ignored |
| 140 | * @param $toShowId |
| 141 | * @throws DependencyException |
| 142 | * @throws NotFoundException |
| 143 | */ |
BacLuc | 9865d8a | 2020-03-14 17:15:50 +0100 | [diff] [blame] | 144 | public function action_show_details($blockId, $toShowId) |
BacLuc | 0f23359 | 2020-02-22 19:34:31 +0100 | [diff] [blame] | 145 | { |
| 146 | $this->processAction($this->createCrudController() |
BacLuc | 4a71e1b | 2020-03-15 12:10:33 +0100 | [diff] [blame] | 147 | ->getActionFor(ActionRegistryFactory::SHOW_ENTRY_DETAILS, $blockId), |
BacLuc | 0f23359 | 2020-02-22 19:34:31 +0100 | [diff] [blame] | 148 | $toShowId); |
| 149 | } |
| 150 | |
| 151 | private function processAction(ActionProcessor $actionProcessor, ...$additionalParams) |
| 152 | { |
BacLuc | 9a3bc69 | 2020-04-29 23:06:05 +0200 | [diff] [blame^] | 153 | return $actionProcessor->process($this->request->query->all() ?: [], |
BacLuc | 0f23359 | 2020-02-22 19:34:31 +0100 | [diff] [blame] | 154 | $this->request->post(null) ?: [], |
| 155 | array_key_exists(0, $additionalParams) ? $additionalParams[0] : null); |
| 156 | } |
| 157 | |
| 158 | /** |
| 159 | * @return CrudController |
| 160 | * @throws DependencyException |
| 161 | * @throws NotFoundException |
| 162 | * @throws Exception |
| 163 | * @throws ReflectionException |
| 164 | */ |
| 165 | private function createCrudController(): CrudController |
| 166 | { |
| 167 | $entityManager = PackageController::getEntityManagerStatic(); |
| 168 | $entityClass = Event::class; |
| 169 | $entityFieldOverrides = new EntityFieldOverrideBuilder($entityClass); |
| 170 | |
BacLuc | 3e987ec | 2020-03-15 17:43:19 +0100 | [diff] [blame] | 171 | $app = Application::getFacadeApplication(); |
| 172 | /** @var PackageController $packageController */ |
| 173 | $packageController = $app->make(PackageService::class)->getByHandle(EventPackageController::PACKAGE_HANDLE); |
| 174 | |
BacLuc | 4b5de06 | 2020-04-05 16:03:46 +0200 | [diff] [blame] | 175 | $containerBuilder = new ContainerBuilder(); |
| 176 | $definitions = |
| 177 | DIContainerFactory::createDefinition($entityManager, |
| 178 | $entityClass, |
| 179 | "", |
| 180 | $entityFieldOverrides->build(), |
| 181 | $this->bID, |
| 182 | FormType::$BLOCK_VIEW); |
| 183 | $definitions[BlockController::class] = value($this); |
| 184 | $definitions[Renderer::class] = |
| 185 | create(Concrete5Renderer::class)->constructor($this, $packageController->getPackagePath()); |
| 186 | $definitions[ViewActionRegistry::class] = factory([ViewActionRegistryFactory::class, "createActionRegistry"]); |
| 187 | $definitions[RowActionConfiguration::class] = autowire(EventRowActionConfiguration::class); |
| 188 | $containerBuilder->addDefinitions($definitions); |
| 189 | $container = $containerBuilder->build(); |
| 190 | return $container->get(CrudController::class); |
| 191 | } |
| 192 | |
| 193 | /** |
| 194 | * @param $blockId |
| 195 | * @param $editId |
| 196 | * @throws DependencyException |
| 197 | * @throws NotFoundException |
| 198 | * @throws ReflectionException |
| 199 | */ |
| 200 | public function action_show_cancellations($blockId, $editId) { |
| 201 | $this->processAction($this->createEventCancellationController() |
| 202 | ->getActionFor(EventActionRegistryFactory::SHOW_CANCELLATIONS, $blockId), |
| 203 | $editId); |
| 204 | } |
| 205 | |
| 206 | /** |
| 207 | * @return CrudController |
| 208 | * @throws DependencyException |
| 209 | * @throws NotFoundException |
| 210 | * @throws Exception |
| 211 | * @throws ReflectionException |
| 212 | */ |
| 213 | private function createEventCancellationController(): CrudController |
| 214 | { |
| 215 | $entityManager = PackageController::getEntityManagerStatic(); |
| 216 | $entityClass = EventCancellation::class; |
| 217 | $entityFieldOverrides = new EntityFieldOverrideBuilder($entityClass); |
| 218 | |
| 219 | $entityFieldOverrides->forField("event") |
| 220 | ->forType(TableField::class) |
| 221 | ->useFactory(DontShowTableField::create()) |
| 222 | ->buildField(); |
| 223 | |
| 224 | $definitions = DIContainerFactory::createDefinition( |
BacLuc | 0f23359 | 2020-02-22 19:34:31 +0100 | [diff] [blame] | 225 | $entityManager, |
| 226 | $entityClass, |
BacLuc | 4b5de06 | 2020-04-05 16:03:46 +0200 | [diff] [blame] | 227 | NextEventConfiguration::class, |
BacLuc | 0f23359 | 2020-02-22 19:34:31 +0100 | [diff] [blame] | 228 | $entityFieldOverrides->build(), |
BacLuc | 4a71e1b | 2020-03-15 12:10:33 +0100 | [diff] [blame] | 229 | $this->bID, |
BacLuc | 0f23359 | 2020-02-22 19:34:31 +0100 | [diff] [blame] | 230 | FormType::$BLOCK_VIEW); |
BacLuc | 4b5de06 | 2020-04-05 16:03:46 +0200 | [diff] [blame] | 231 | |
| 232 | $app = Application::getFacadeApplication(); |
| 233 | /** @var PackageController $packageController */ |
| 234 | $packageController = $app->make(PackageService::class)->getByHandle(EventPackageController::PACKAGE_HANDLE); |
| 235 | $containerBuilder = new ContainerBuilder(); |
| 236 | $definitions[BlockController::class] = value($this); |
| 237 | $definitions[Renderer::class] = |
| 238 | create(Concrete5Renderer::class)->constructor($this, $packageController->getPackagePath()); |
| 239 | $definitions[ActionRegistry::class] = factory(function (ContainerInterface $container) { |
| 240 | return $container->get(EventActionRegistryFactory::class)->createActionRegistry(); |
| 241 | }); |
| 242 | $definitions[NoEditIdFallbackActionProcessor::class] = autowire(ShowErrorActionProcessor::class); |
| 243 | $containerBuilder->addDefinitions($definitions); |
| 244 | $container = $containerBuilder->build(); |
BacLuc | 0f23359 | 2020-02-22 19:34:31 +0100 | [diff] [blame] | 245 | return $container->get(CrudController::class); |
| 246 | } |
BacLuc | ab3ad35 | 2016-04-07 20:13:05 +0200 | [diff] [blame] | 247 | |
| 248 | /** |
| 249 | * @return string |
| 250 | */ |
| 251 | public function getBlockTypeDescription() |
| 252 | { |
| 253 | return t("Create, Edit or Delete Events"); |
| 254 | } |
BacLuc | ab3ad35 | 2016-04-07 20:13:05 +0200 | [diff] [blame] | 255 | /** |
| 256 | * @return string |
| 257 | */ |
| 258 | public function getBlockTypeName() |
| 259 | { |
| 260 | return t("BaclucEventBlock"); |
| 261 | } |
| 262 | |
BacLuc | 0f23359 | 2020-02-22 19:34:31 +0100 | [diff] [blame] | 263 | |
BacLuc | ab3ad35 | 2016-04-07 20:13:05 +0200 | [diff] [blame] | 264 | } |