fridge_bites/apps/Admin/Controllers/AdminDeleteController.php

132 lines
3.9 KiB
PHP

<?php
namespace Lycoreco\Apps\Admin\Controllers;
use Lycoreco\Includes\Routing\HttpExceptions;
use Lycoreco\Apps\Users\Models\UserModel;
/**
* Controller to delete every object model using className and id
*/
class AdminDeleteController extends Abstract\AdminBaseController
{
const DELETE_MODELS = [
[
'url_name' => 'users',
'model' => 'Lycoreco\Apps\Users\Models\UserModel',
'field_display' => 'field_username',
'back_to' => 'admin:user',
'success_to' => 'admin:user-list'
],
[
'url_name' => 'user-banlist',
'model' => 'Lycoreco\Apps\Users\Models\BanlistModel',
'field_display' => 'field_reason',
'back_to' => 'admin:ban'
],
[
'url_name' => 'recipes',
'model' => 'Lycoreco\Apps\Recipes\Models\RecipeModel',
'field_display' => 'field_title',
'back_to' => 'admin:recipe',
'success_to' => 'admin:recipe-list'
],
[
'url_name' => 'ingredients',
'model' => 'Lycoreco\Apps\Recipes\Models\IngredientModel',
'field_display' => 'field_name',
'back_to' => 'admin:ingredient',
'success_to' => 'admin:ingredient-list'
],
[
'url_name' => 'categories',
'model' => 'Lycoreco\Apps\Recipes\Models\CategoryModel',
'field_display' => 'field_name',
'back_to' => 'admin:category',
'success_to' => 'admin:category-list'
],
[
'url_name' => 'recipe-ingredients',
'model' => 'Lycoreco\Apps\Recipes\Models\IngredientInRecipeModel',
'field_display' => 'ingredient_name',
'back_to' => 'admin:ing-cat-rel',
],
];
protected $template_name = APPS_PATH . '/Admin/Templates/delete.php';
/**
* @return null|UserModel
*/
protected function get_model()
{
if (isset($this->__model))
return $this->__model;
$id = $this->url_context['url_2'];
$model_class = '';
foreach (self::DELETE_MODELS as $delete_model) {
if($this->url_context['url_1'] == $delete_model['url_name']) {
$model_class = $delete_model['model'];
break;
}
}
if(empty($model_class))
return null;
return $model_class::get(array(
[
'name' => 'obj.id',
'type' => '=',
'value' => $id
]
));
}
public function get_context_data()
{
$context = parent::get_context_data();
$model = $this->get_model();
if (empty($model))
throw new HttpExceptions\NotFound404();
// Display field to show what's model
$field = '';
$back_url = '';
foreach (self::DELETE_MODELS as $delete_model) {
if($this->url_context['url_1'] == $delete_model['url_name']) {
$back_url = get_permalink($delete_model['back_to'], [$model->get_id()]);
$field = $delete_model['field_display'];
}
}
$context['back_url'] = $back_url;
$context['model'] = $model;
$context['field'] = $field;
return $context;
}
protected function post()
{
$model = $this->get_model();
if (empty($model))
throw new HttpExceptions\NotFound404();
$model->delete();
// Redirect after delete
$link = get_permalink('admin:home');
foreach (self::DELETE_MODELS as $delete_model) {
if($this->url_context['url_1'] == $delete_model['url_name']) {
if(isset($delete_model['success_to'])) {
$link = get_permalink($delete_model['success_to']);
}
break;
}
}
redirect_to($link);
}
}