/** * Создание категории */ public function edit($id) { if (!User::isAdmin()) { App::abort('403'); } if (!($category = Category::find_by_id($id))) { App::abort('default', 'Категория не найдена!'); } if (Request::isMethod('post')) { $category->token = Request::input('token', true); $category->parent_id = Request::input('parent_id'); $category->name = Request::input('name'); $category->slug = Request::input('slug'); $category->description = Request::input('description'); $category->sort = Request::input('sort'); if ($category->save()) { App::setFlash('success', 'Категория успешно изменена!'); App::redirect('/category'); } else { App::setFlash('danger', $category->getErrors()); App::setInput($_POST); } } $categories = Category::getAll(); App::view('categories.edit', compact('category', 'categories')); }
/** * Обратная связь */ public function contact() { $request = Request::input('request'); if (Request::isMethod('post')) { $email = Request::input('email'); $name = Request::input('name'); $message = Request::input('message'); $captcha = Request::input('captcha'); $errors = []; if (!App::isMail($email)) { $errors['email'] = 'Неверный формат адреса email'; } if (!$name) { $errors['name'] = 'Небходимо заполнить имя отправителя'; } if (!$message) { $errors['message'] = 'Необходимо заполнить текст сообщения'; } if ($captcha != $_SESSION['captcha']) { $errors['captcha'] = 'Неверный проверочный код'; } if (!$errors) { $message = nl2br(e($message)); $to = [env('SITE_EMAIL') => env('SITE_ADMIN')]; $subject = 'Новое письмо с сайта'; $body = App::view('mailer.contact', compact('subject', 'message', 'request'), true); $headers['from'] = [$email => $name]; // Отправка письма App::sendMail($to, $subject, $body, $headers); App::setFlash('success', 'Письмо успешно отправлено!'); App::redirect('/'); } else { App::setFlash('danger', $errors); App::setInput($_POST); App::redirect('/contact'); } } App::view('pages.contact', compact('request')); }
/** * Сброс пароля */ public function reset() { if (User::check()) { App::abort(403); } $key = Request::input('key'); $errors = []; if (!$key) { $errors['key'] = 'Отсутствует ключ для сброса пароля'; } if (!$errors && !($user = User::find_by_reset_code($key))) { $errors['email'] = 'Пользователь с данным ключем не найден'; } if (!$errors) { if (Request::isMethod('post')) { $new_password = Request::input('password'); $user->new_password = $new_password; $user->updated_at = new Datetime(); if ($user->save()) { $user->update_attribute('reset_code', null); App::setFlash('success', 'Новый пароль успешно сохранен!'); App::redirect('/'); } else { App::setFlash('danger', $errors); App::setInput($_POST); } App::redirect('/reset'); } App::view('users.reset'); } else { App::setFlash('danger', $errors); App::redirect('/'); } }
/** * Создание комментария */ public function createComment($id) { if (!($news = News::find_by_id($id))) { App::abort('default', 'Данной новости не существует!'); } $comment = new Comment(); $comment->token = Request::input('token', true); $comment->user_id = User::get('id'); $comment->relate_type = 'News'; $comment->relate_id = $news->id; $comment->text = Request::input('text'); $comment->ip = App::getClientIp(); $comment->brow = App::getUserAgent(); if ($comment->save()) { App::setFlash('success', 'Сообщение успешно добавлено!'); } else { App::setFlash('danger', $comment->getErrors()); App::setInput($_POST); } App::redirect('/news/' . $id); }
/** * Ответ на сообщение для администрации */ public function reply($id) { if (!User::isAdmin()) { App::abort(403); } if (!($guest = Guestbook::find_by_id($id))) { App::abort('default', 'Сообщение не найдено!'); } if (Request::isMethod('post')) { $guest->scenario = 'reply'; $guest->token = Request::input('token', true); $guest->reply = Request::input('text'); if ($guest->save()) { App::setFlash('success', 'Ответ успешно добавлен!'); App::redirect('/guestbook'); } else { App::setFlash('danger', $guest->getErrors()); App::setInput($_POST); } } App::view('guestbook.reply', compact('guest')); }
/** * Авторизация через социальные сети * @param string $token идентификатор Ulogin */ public static function socialLogin($token) { $curl = new Curl(); $network = $curl->get('http://ulogin.ru/token.php', ['token' => $token, 'host' => $_SERVER['HTTP_HOST']]); if ($network && empty($network->error)) { $_SESSION['social'] = $network; $social = Social::find_by_network_and_uid($network->network, $network->uid); if ($social && $social->user()) { //$_SESSION['ip'] = Registry::get('ip'); $_SESSION['id'] = $social->user()->id; $_SESSION['pass'] = md5(env('APP_KEY') . $social->user()->password); App::setFlash('success', 'Добро пожаловать, ' . e($social->user()->login) . '!'); App::redirect('/'); } } }
/** * Создание сообщения */ public function createPost($id) { if (!($topic = Topic::find_by_id($id))) { App::abort('default', 'Данной темы не существует!'); } $post = new Post(); $post->token = Request::input('token', true); $post->forum_id = $topic->forum()->id; $post->topic_id = $topic->id; $post->user_id = User::get('id'); $post->text = Request::input('text'); $post->ip = App::getClientIp(); $post->brow = App::getUserAgent(); if ($post->save()) { $post->topic->update_attribute('post_last_id', $post->id); $post->topic->forum->update_attribute('topic_last_id', $topic->id); App::setFlash('success', 'Сообщение успешно добавлено!'); } else { App::setFlash('danger', $post->getErrors()); App::setInput($_POST); } /* Последняя страница в теме */ $page = ceil($topic->postCount() / Setting::get('posts_per_page')); App::redirect('/topic/' . $id . '?page=' . $page); }