From feec48ed8363694dd195a0185a765d297c139184 Mon Sep 17 00:00:00 2001 From: Marcin Kurczewski Date: Thu, 1 May 2014 22:29:36 +0200 Subject: [PATCH] AJAX doesn't rely on StatusHelper Since the purpose that StatusHelper was mainly created for no longer holds, it was simplified to Messenger. It is now is used to transport simple messages to views and still transports info whether the message is about success or failure. --- public_html/dispatch.php | 14 ++++-- public_html/media/js/comment-edit.js | 71 ++++++++++++--------------- public_html/media/js/core.js | 42 ++++++++-------- public_html/media/js/post-list.js | 30 ++++++----- public_html/media/js/post-upload.js | 25 +++++----- public_html/media/js/post-view.js | 27 +++++----- src/Controllers/AuthController.php | 2 - src/Controllers/CommentController.php | 3 -- src/Controllers/PostController.php | 13 ----- src/Controllers/TagController.php | 4 +- src/Controllers/UserController.php | 22 +++------ src/Helpers/StatusHelper.php | 33 ------------- src/Messenger.php | 18 +++++++ 13 files changed, 126 insertions(+), 178 deletions(-) delete mode 100644 src/Helpers/StatusHelper.php create mode 100644 src/Messenger.php diff --git a/public_html/dispatch.php b/public_html/dispatch.php index 476ef729..182d6b54 100644 --- a/public_html/dispatch.php +++ b/public_html/dispatch.php @@ -154,12 +154,18 @@ $context->layoutName = $context->json : 'layout-normal'; $context->viewName = ''; $context->transport = new StdClass; -StatusHelper::init(); session_start(); if (!Auth::isLoggedIn()) Auth::tryAutoLogin(); +register_shutdown_function(function() +{ + $error = error_get_last(); + if ($error !== null) + \Chibi\Util\Headers::setCode(400); +}); + try { try @@ -183,7 +189,9 @@ catch (SimpleException $e) { if ($e instanceof SimpleNotFoundException) \Chibi\Util\Headers::setCode(404); - StatusHelper::failure($e->getMessage()); + else + \Chibi\Util\Headers::setCode(400); + Messenger::message($e->getMessage(), false); if (!$context->handleExceptions) $context->viewName = 'message'; renderView(); @@ -191,7 +199,7 @@ catch (SimpleException $e) catch (Exception $e) { \Chibi\Util\Headers::setCode(400); - StatusHelper::failure($e->getMessage()); + Messenger::message($e->getMessage()); $context->transport->exception = $e; $context->transport->queries = \Chibi\Database::getLogs(); $context->viewName = 'error-exception'; diff --git a/public_html/media/js/comment-edit.js b/public_html/media/js/comment-edit.js index b0844f9f..5023067f 100644 --- a/public_html/media/js/comment-edit.js +++ b/public_html/media/js/comment-edit.js @@ -40,52 +40,45 @@ $(function() success: function(data) { - if (data['success']) + if (preview) { - if (preview) - { - formDom.find('.preview').html(data['textPreview']).show(); - } - else - { - disableExitConfirmation(); - - formDom.find('.preview').hide(); - var cb = function() - { - $.get(window.location.href, function(data) - { - $('.comments-wrapper').replaceWith($(data).find('.comments-wrapper')); - $('body').trigger('dom-update'); - }); - } - if (formDom.hasClass('add-comment')) - { - cb(); - formDom.find('textarea').val(''); - } - else - { - formDom.slideUp(function() - { - cb(); - $(this).remove(); - }); - } - } - formDom.find(':input').attr('readonly', false); - formDom.removeClass('inactive'); + formDom.find('.preview').html(data['textPreview']).show(); } else { - alert(data['message']); - formDom.find(':input').attr('readonly', false); - formDom.removeClass('inactive'); + disableExitConfirmation(); + + formDom.find('.preview').hide(); + var cb = function() + { + $.get(window.location.href, function(data) + { + $('.comments-wrapper').replaceWith($(data).find('.comments-wrapper')); + $('body').trigger('dom-update'); + }); + } + if (formDom.hasClass('add-comment')) + { + cb(); + formDom.find('textarea').val(''); + } + else + { + formDom.slideUp(function() + { + cb(); + $(this).remove(); + }); + } } + formDom.find(':input').attr('readonly', false); + formDom.removeClass('inactive'); }, - error: function() + error: function(xhr) { - alert('Fatal error'); + alert(xhr.responseJSON + ? xhr.responseJSON.message + : 'Fatal error'); formDom.find(':input').attr('readonly', false); formDom.removeClass('inactive'); } diff --git a/public_html/media/js/core.js b/public_html/media/js/core.js index 6ba96eb5..41ff3972 100644 --- a/public_html/media/js/core.js +++ b/public_html/media/js/core.js @@ -63,15 +63,15 @@ $(function() aDom.addClass('inactive'); var url = $(this).attr('href') + '?json'; - $.get(url).always(function(data) + $.get(url).success(function(data) { - if (data['success']) - window.location.reload(); - else - { - alert(data['message'] ? data['message'] : 'Fatal error'); - aDom.removeClass('inactive'); - } + window.location.reload(); + }).error(function(xhr) + { + alert(xhr.responseJSON + ? xhr.responseJSON.message + : 'Fatal error'); + aDom.removeClass('inactive'); }); }); }); @@ -112,22 +112,20 @@ $(function() aDom.addClass('inactive'); var url = $(this).attr('href') + '?json'; - $.get(url, {submit: 1}).always(function(data) + $.post(url, {submit: 1}).success(function(data) { - if (data['success']) - { - if (aDom.hasAttr('data-redirect-url')) - window.location.href = aDom.attr('data-redirect-url'); - else if (aDom.data('callback')) - aDom.data('callback')(); - else - window.location.reload(); - } + if (aDom.hasAttr('data-redirect-url')) + window.location.href = aDom.attr('data-redirect-url'); + else if (aDom.data('callback')) + aDom.data('callback')(); else - { - alert(data['message'] ? data['message'] : 'Fatal error'); - aDom.removeClass('inactive'); - } + window.location.reload(); + }).error(function(xhr) + { + alert(xhr.responseJSON + ? xhr.responseJSON.message + : 'Fatal error'); + aDom.removeClass('inactive'); }); }); diff --git a/public_html/media/js/post-list.js b/public_html/media/js/post-list.js index 300efd7c..99303353 100644 --- a/public_html/media/js/post-list.js +++ b/public_html/media/js/post-list.js @@ -14,23 +14,21 @@ $(function() var enable = !aDom.parents('.post').hasClass('tagged'); var url = $(this).attr('href') + '?json'; url = url.replace('_enable_', enable ? '1' : '0'); - $.get(url, {submit: 1}).always(function(data) + $.get(url, {submit: 1}).success(function(data) { - if (data['success']) - { - aDom.removeClass('inactive'); - aDom.parents('.post').removeClass('tagged'); - if (enable) - aDom.parents('.post').addClass('tagged'); - aDom.text(enable - ? aDom.attr('data-text-tagged') - : aDom.attr('data-text-untagged')); - } - else - { - alert(data['message'] ? data['message'] : 'Fatal error'); - aDom.removeClass('inactive'); - } + aDom.removeClass('inactive'); + aDom.parents('.post').removeClass('tagged'); + if (enable) + aDom.parents('.post').addClass('tagged'); + aDom.text(enable + ? aDom.attr('data-text-tagged') + : aDom.attr('data-text-untagged')); + }).error(function(xhr) + { + alert(xhr.responseJSON + ? xhr.responseJSON.message + : 'Fatal error'); + aDom.removeClass('inactive'); }); }); }); diff --git a/public_html/media/js/post-upload.js b/public_html/media/js/post-upload.js index f03b375b..40d18c93 100644 --- a/public_html/media/js/post-upload.js +++ b/public_html/media/js/post-upload.js @@ -107,23 +107,20 @@ $(function() type: 'POST', success: function(data) { - if (data['success']) + postDom.slideUp(function() { - postDom.slideUp(function() - { - postDom.remove(); - sendNextPost(); - }); - } - else - { - postDom.find('.alert').html(data['messageHtml']).slideDown(); - enableUpload(); - } + postDom.remove(); + sendNextPost(); + }); }, - error: function(data) + error: function(xhr) { - postDom.find('.alert').html('Fatal error').slideDown(); + postDom + .find('.alert') + .html(xhr.responseJSON + ? xhr.responseJSON.messageHtml + : 'Fatal error') + .slideDown(); enableUpload(); } }; diff --git a/public_html/media/js/post-view.js b/public_html/media/js/post-view.js index 51060b3e..34526e65 100644 --- a/public_html/media/js/post-view.js +++ b/public_html/media/js/post-view.js @@ -110,28 +110,23 @@ $(function() success: function(data) { - if (data['success']) - { - disableExitConfirmation(); + disableExitConfirmation(); - $.get(window.location.href, function(data) - { - $('#sidebar').replaceWith($(data).find('#sidebar')); - $('#edit-token').replaceWith($(data).find('#edit-token')); - $('body').trigger('dom-update'); - }); - formDom.parents('.unit').hide(); - } - else + $.get(window.location.href, function(data) { - alert(data['message']); - } + $('#sidebar').replaceWith($(data).find('#sidebar')); + $('#edit-token').replaceWith($(data).find('#edit-token')); + $('body').trigger('dom-update'); + }); + formDom.parents('.unit').hide(); formDom.find(':input').attr('readonly', false); formDom.removeClass('inactive'); }, - error: function() + error: function(xhr) { - alert('Fatal error'); + alert(xhr.responseJSON + ? xhr.responseJSON.message + : 'Fatal error'); formDom.find(':input').attr('readonly', false); formDom.removeClass('inactive'); } diff --git a/src/Controllers/AuthController.php b/src/Controllers/AuthController.php index e53e8e27..d6d8cfde 100644 --- a/src/Controllers/AuthController.php +++ b/src/Controllers/AuthController.php @@ -20,8 +20,6 @@ class AuthController $suppliedPassword = InputHelper::get('password'); $remember = boolval(InputHelper::get('remember')); $dbUser = Auth::login($suppliedName, $suppliedPassword, $remember); - - StatusHelper::success(); self::redirectAfterLog(); } diff --git a/src/Controllers/CommentController.php b/src/Controllers/CommentController.php index 0b33b914..05cceb5e 100644 --- a/src/Controllers/CommentController.php +++ b/src/Controllers/CommentController.php @@ -61,7 +61,6 @@ class CommentController LogHelper::log('{user} commented on {post}', ['post' => TextHelper::reprPost($post->id)]); } $context->transport->textPreview = $comment->getText(); - StatusHelper::success(); } public function editAction($id) @@ -89,7 +88,6 @@ class CommentController 'post' => TextHelper::reprPost($comment->getPost())]); } $context->transport->textPreview = $comment->getText(); - StatusHelper::success(); } public function deleteAction($id) @@ -104,6 +102,5 @@ class CommentController LogHelper::log('{user} removed comment from {post}', [ 'post' => TextHelper::reprPost($comment->getPost())]); - StatusHelper::success(); } } diff --git a/src/Controllers/PostController.php b/src/Controllers/PostController.php index c74b31d1..2021e372 100644 --- a/src/Controllers/PostController.php +++ b/src/Controllers/PostController.php @@ -101,7 +101,6 @@ class PostController $post->setTags($tags); PostModel::save($post); - StatusHelper::success(); } public function favoritesAction($page = 1) @@ -167,8 +166,6 @@ class PostController LogHelper::flush(); PostModel::save($post); }); - - StatusHelper::success(); } public function editAction($id) @@ -190,8 +187,6 @@ class PostController PostModel::save($post); TagModel::removeUnused(); - - StatusHelper::success(); } public function flagAction($id) @@ -211,7 +206,6 @@ class PostController SessionHelper::set('flagged', $flagged); LogHelper::log('{user} flagged {post} for moderator attention', ['post' => TextHelper::reprPost($post)]); - StatusHelper::success(); } public function hideAction($id) @@ -226,7 +220,6 @@ class PostController PostModel::save($post); LogHelper::log('{user} hidden {post}', ['post' => TextHelper::reprPost($post)]); - StatusHelper::success(); } public function unhideAction($id) @@ -241,7 +234,6 @@ class PostController PostModel::save($post); LogHelper::log('{user} unhidden {post}', ['post' => TextHelper::reprPost($post)]); - StatusHelper::success(); } public function deleteAction($id) @@ -255,7 +247,6 @@ class PostController PostModel::remove($post); LogHelper::log('{user} deleted {post}', ['post' => TextHelper::reprPost($id)]); - StatusHelper::success(); } public function addFavoriteAction($id) @@ -270,7 +261,6 @@ class PostController UserModel::updateUserScore(Auth::getCurrentUser(), $post, 1); UserModel::addToUserFavorites(Auth::getCurrentUser(), $post); - StatusHelper::success(); } public function removeFavoriteAction($id) @@ -284,7 +274,6 @@ class PostController return; UserModel::removeFromUserFavorites(Auth::getCurrentUser(), $post); - StatusHelper::success(); } public function scoreAction($id, $score) @@ -298,7 +287,6 @@ class PostController return; UserModel::updateUserScore(Auth::getCurrentUser(), $post, $score); - StatusHelper::success(); } public function featureAction($id) @@ -309,7 +297,6 @@ class PostController PropertyModel::set(PropertyModel::FeaturedPostId, $post->id); PropertyModel::set(PropertyModel::FeaturedPostDate, time()); PropertyModel::set(PropertyModel::FeaturedPostUserName, Auth::getCurrentUser()->name); - StatusHelper::success(); LogHelper::log('{user} featured {post} on main page', ['post' => TextHelper::reprPost($post)]); } diff --git a/src/Controllers/TagController.php b/src/Controllers/TagController.php index ed140a84..f8ff5cc2 100644 --- a/src/Controllers/TagController.php +++ b/src/Controllers/TagController.php @@ -103,7 +103,7 @@ class TagController 'source' => TextHelper::reprTag($suppliedSourceTag), 'target' => TextHelper::reprTag($suppliedTargetTag)]); - StatusHelper::success('Tags merged successfully.'); + Messenger::message('Tags merged successfully.'); } public function renameAction() @@ -130,7 +130,7 @@ class TagController 'source' => TextHelper::reprTag($suppliedSourceTag), 'target' => TextHelper::reprTag($suppliedTargetTag)]); - StatusHelper::success('Tag renamed successfully.'); + Messenger::message('Tag renamed successfully.'); } public function massTagRedirectAction() diff --git a/src/Controllers/UserController.php b/src/Controllers/UserController.php index 6ab1a233..7eb25bd4 100644 --- a/src/Controllers/UserController.php +++ b/src/Controllers/UserController.php @@ -46,8 +46,6 @@ class UserController LogHelper::log('{user} flagged {subject} for moderator attention', [ 'subject' => TextHelper::reprUser($user)]); - - StatusHelper::success(); } public function banAction($name) @@ -64,7 +62,6 @@ class UserController UserModel::save($user); LogHelper::log('{user} banned {subject}', ['subject' => TextHelper::reprUser($user)]); - StatusHelper::success(); } public function unbanAction($name) @@ -81,7 +78,6 @@ class UserController UserModel::save($user); LogHelper::log('{user} unbanned {subject}', ['subject' => TextHelper::reprUser($user)]); - StatusHelper::success(); } public function acceptRegistrationAction($name) @@ -96,7 +92,6 @@ class UserController $user->staffConfirmed = true; UserModel::save($user); LogHelper::log('{user} confirmed {subject}\'s account', ['subject' => TextHelper::reprUser($user)]); - StatusHelper::success(); } public function deleteAction($name) @@ -133,7 +128,6 @@ class UserController \Chibi\Util\Url::forward(\Chibi\Router::linkTo(['IndexController', 'indexAction'])); LogHelper::log('{user} removed {subject}\'s account', ['subject' => TextHelper::reprUser($name)]); - StatusHelper::success(); } public function settingsAction($name) @@ -167,7 +161,7 @@ class UserController UserModel::save($user); if ($user->id == Auth::getCurrentUser()->id) Auth::setCurrentUser($user); - StatusHelper::success('Browsing settings updated!'); + Messenger::message('Browsing settings updated!'); } public function editAction($name) @@ -278,7 +272,7 @@ class UserController $message = 'Account settings updated!'; if ($confirmMail) $message .= ' You will be sent an e-mail address confirmation message soon.'; - StatusHelper::success($message); + Messenger::message($message); } catch (Exception $e) { @@ -343,8 +337,6 @@ class UserController if ($user->accessRank != AccessRank::Anonymous) UserModel::save($user); Auth::setCurrentUser($user); - - StatusHelper::success(); } public function registrationAction() @@ -420,7 +412,7 @@ class UserController $message .= ' Your registration must be now confirmed by staff.'; LogHelper::log('{subject} just signed up', ['subject' => TextHelper::reprUser($dbUser)]); - StatusHelper::success($message); + Messenger::message($message); if (!getConfig()->registration->needEmailForRegistering and !getConfig()->registration->staffActivation) { @@ -448,7 +440,7 @@ class UserController $message = 'Activation completed successfully.'; if (getConfig()->registration->staffActivation) $message .= ' However, your account still must be confirmed by staff.'; - StatusHelper::success($message); + Messenger::message($message); if (!getConfig()->registration->staffActivation) { @@ -479,7 +471,7 @@ class UserController LogHelper::log('{subject} just reset password', ['subject' => TextHelper::reprUser($dbUser)]); $message = 'Password reset successful. Your new password is **' . $randomPassword . '**.'; - StatusHelper::success($message); + Messenger::message($message); Auth::setCurrentUser($dbUser); } @@ -499,7 +491,7 @@ class UserController throw new SimpleException('This user has no e-mail confirmed; password reset cannot proceed'); self::sendPasswordResetConfirmation($user); - StatusHelper::success('E-mail sent. Follow instructions to reset password.'); + Messenger::message('E-mail sent. Follow instructions to reset password.'); } public function activationProxyAction() @@ -521,7 +513,7 @@ class UserController throw new SimpleException('This user has no e-mail specified; activation cannot proceed'); } self::sendEmailChangeConfirmation($user); - StatusHelper::success('Activation e-mail resent.'); + Messenger::message('Activation e-mail resent.'); } private function loadUserView($user) diff --git a/src/Helpers/StatusHelper.php b/src/Helpers/StatusHelper.php deleted file mode 100644 index 223956e3..00000000 --- a/src/Helpers/StatusHelper.php +++ /dev/null @@ -1,33 +0,0 @@ -transport->message = $message; - $context->transport->messageHtml = TextHelper::parseMarkdown($message, true); - } - $context->transport->success = $success; - } - - public static function init() - { - $context = getContext(); - $context->transport->success = null; - } - - public static function success($message = null) - { - self::flag(true, $message); - } - - public static function failure($message = null) - { - self::flag(false, $message); - } -} diff --git a/src/Messenger.php b/src/Messenger.php new file mode 100644 index 00000000..156dcba6 --- /dev/null +++ b/src/Messenger.php @@ -0,0 +1,18 @@ +transport->success = $success; + $context->transport->message = $message; + $context->transport->messageHtml = TextHelper::parseMarkdown($message, true); + } +}