105 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			105 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
namespace kernel\modules\option\controllers;
 | 
						|
 | 
						|
use JetBrains\PhpStorm\NoReturn;
 | 
						|
use kernel\AdminController;
 | 
						|
use kernel\Flash;
 | 
						|
use kernel\helpers\Debug;
 | 
						|
use kernel\modules\option\models\forms\CreateOptionForm;
 | 
						|
use kernel\modules\option\models\Option;
 | 
						|
use kernel\modules\option\service\OptionService;
 | 
						|
 | 
						|
class OptionController extends AdminController
 | 
						|
{
 | 
						|
 | 
						|
    private OptionService  $optionService;
 | 
						|
 | 
						|
    public function init(): void
 | 
						|
    {
 | 
						|
        parent::init();
 | 
						|
        $this->cgView->viewPath = KERNEL_MODULES_DIR . '/option/views/';
 | 
						|
        $this->optionService = new OptionService();
 | 
						|
    }
 | 
						|
 | 
						|
    public function actionCreate(): void
 | 
						|
    {
 | 
						|
        $this->cgView->render('form.php');
 | 
						|
    }
 | 
						|
 | 
						|
    #[NoReturn] public function actionAdd(): void
 | 
						|
    {
 | 
						|
        $optionForm = new CreateOptionForm();
 | 
						|
        $optionForm->load($_REQUEST);
 | 
						|
        if ($optionForm->validate()) {
 | 
						|
            $option = $this->optionService->create($optionForm);
 | 
						|
            if ($option) {
 | 
						|
                Flash::setMessage("success", "Опция успешно создана.");
 | 
						|
                $this->redirect('/admin/option');
 | 
						|
            }
 | 
						|
        }
 | 
						|
        Flash::setMessage("error", $optionForm->getErrorsStr());
 | 
						|
        $this->redirect('/admin/option/create');
 | 
						|
    }
 | 
						|
 | 
						|
    public function actionIndex($page_number = 1): void
 | 
						|
    {
 | 
						|
        $this->cgView->render('index.php', ['page_number' => $page_number]);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @throws \Exception
 | 
						|
     */
 | 
						|
    public function actionView(int $id): void
 | 
						|
    {
 | 
						|
        $option = Option::find($id);
 | 
						|
 | 
						|
        if (!$option) {
 | 
						|
            throw new \Exception('Option not found');
 | 
						|
        }
 | 
						|
        $this->cgView->render("view.php", ['option' => $option]);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @throws \Exception
 | 
						|
     */
 | 
						|
    public function actionUpdate(int $id): void
 | 
						|
    {
 | 
						|
        $model = Option::find($id);
 | 
						|
 | 
						|
        if (!$model) {
 | 
						|
            throw new \Exception('Option not found');
 | 
						|
        }
 | 
						|
 | 
						|
        $this->cgView->render("form.php", ['model' => $model]);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @throws \Exception
 | 
						|
     */
 | 
						|
    public function actionEdit(int $id): void
 | 
						|
    {
 | 
						|
        $option = Option::find($id);
 | 
						|
        if (!$option) {
 | 
						|
            throw new \Exception('Option not found');
 | 
						|
        }
 | 
						|
        $optionForm = new CreateOptionForm();
 | 
						|
        $optionForm->load($_REQUEST);
 | 
						|
        if ($optionForm->validate()) {
 | 
						|
            $option = $this->optionService->update($optionForm, $option);
 | 
						|
            if ($option) {
 | 
						|
                $this->redirect('/admin/option/' . $option->id);
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        $this->redirect('/admin/option/update/' . $id);
 | 
						|
    }
 | 
						|
 | 
						|
    #[NoReturn] public function actionDelete(int $id): void
 | 
						|
    {
 | 
						|
        Option::find($id)->delete();
 | 
						|
        Flash::setMessage("success", "Опция успешно удалена.");
 | 
						|
        $this->redirect('/admin/option');
 | 
						|
    }
 | 
						|
 | 
						|
} |