diff --git a/apps/Ajax/Controllers/AjaxController.php b/apps/Ajax/Controllers/AjaxController.php index 6a6f5ab..60ab3b2 100644 --- a/apps/Ajax/Controllers/AjaxController.php +++ b/apps/Ajax/Controllers/AjaxController.php @@ -3,6 +3,7 @@ namespace Lycoreco\Apps\Ajax\Controllers; use Lycoreco\Includes\BaseController; +use Lycoreco\Includes\Model\ValidationError; class AjaxController extends BaseController { @@ -32,8 +33,15 @@ class AjaxController extends BaseController try { $context['result'] = $action(); - } catch (\Exception $ex) { + } + catch (ValidationError $ex) { + $context['result'] = get_ajax_error($ex->getMessage(), 400); + return $context; + } + catch (\Exception $ex) { + http_response_code(500); $context['result'] = get_ajax_error($ex->getMessage()); + return $context; } diff --git a/apps/Ajax/Templates/ajax-result.php b/apps/Ajax/Templates/ajax-result.php index fd5f3ae..4b3fdca 100644 --- a/apps/Ajax/Templates/ajax-result.php +++ b/apps/Ajax/Templates/ajax-result.php @@ -1,2 +1,2 @@ 'obj.recipe_id', + 'type' => '=', + 'value' => $recipe_id + ], + [ + 'name' => 'obj.user_id', + 'type' => '=', + 'value' => CURRENT_USER->get_id() + ] + )); + // If user choose optiopn 'remove' + if($dayofweek == 'remove') { + if($user_menu) { + $user_menu->delete(); + $result['success'] = 'This recipe was removed from your list'; + return $result; + } + else { + return get_ajax_error("This recipe in your menu is not exists", 400); + } + } + + // If not exists, add new recipe in user menu + if(!$user_menu) { + $user_menu = new RecipeUserMenu(); + $user_menu->field_recipe_id = $recipe_id; + $user_menu->field_user_id = CURRENT_USER->get_id(); + } + + $user_menu->field_dayofweek = $dayofweek; + $user_menu->save(); + + $result['success'] = 'You have successfully added the recipe to your menu.'; + return $result; +} diff --git a/apps/Recipes/Models/RecipeUserMenu.php b/apps/Recipes/Models/RecipeUserMenu.php new file mode 100644 index 0000000..9d98187 --- /dev/null +++ b/apps/Recipes/Models/RecipeUserMenu.php @@ -0,0 +1,57 @@ + 'int', + 'dayofweek' => 'string', + 'recipe_id' => 'int', + 'user_id' => 'int', + 'created_at' => 'DateTime' + ]; + + public static function init_table() + { + $result = db_query('CREATE TABLE ' . static::$table_name . ' ( + id INT AUTO_INCREMENT PRIMARY KEY, + + dayofweek VARCHAR(150) NOT NULL, + recipe_id INT NOT NULL, + user_id INT NOT NULL, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + + FOREIGN KEY (recipe_id) REFERENCES recipes(id) ON DELETE CASCADE, + FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE + );'); + return $result; + } + public function valid() + { + require_once INCLUDES_PATH . '/Const/recipes.php'; + + if(!in_array($this->field_dayofweek, DAY_OF_WEEKS)) + return ['Day of Week is not valid']; + + $recipe = RecipeModel::get(array( + [ + 'name' => 'obj.id', + 'type' => '=', + 'value' => $this->field_recipe_id + ] + )); + if(!$recipe) + return ['Recipe is not exists']; + + return true; + } +} \ No newline at end of file diff --git a/includes/Const/recipes.php b/includes/Const/recipes.php new file mode 100644 index 0000000..00f8e4c --- /dev/null +++ b/includes/Const/recipes.php @@ -0,0 +1,5 @@ +