Merge pull request #51 from PutmanMedia/pulls/remove-ajax-commenting

API Removed ajax comment submission
This commit is contained in:
Ingo Schommer 2013-03-19 03:26:18 -07:00
commit 0c27bc0f66
5 changed files with 32 additions and 75 deletions

View File

@ -25,7 +25,7 @@ class Commenting {
private static $default_config = array( private static $default_config = array(
'require_login' => false, // boolean, whether a user needs to login 'require_login' => false, // boolean, whether a user needs to login
'required_permission' => false, // required permission to comment (or array of permissions) 'required_permission' => false, // required permission to comment (or array of permissions)
'use_ajax_commenting' => true, // use ajax to post comments. 'include_js' => true, // Enhance operation by ajax behaviour on moderation links
'use_gravatar' => false, // set to true to show gravatar icons, 'use_gravatar' => false, // set to true to show gravatar icons,
'gravatar_size' => 80, // size of gravatar in pixels. This is the same as the standard default 'gravatar_size' => 80, // size of gravatar in pixels. This is the same as the standard default
'show_comments_when_disabled' => false, // when comments are disabled should we show older comments (if available) 'show_comments_when_disabled' => false, // when comments are disabled should we show older comments (if available)
@ -36,7 +36,7 @@ class Commenting {
'require_moderation' => false, 'require_moderation' => false,
'html_allowed' => false, // allow for sanitized HTML in comments 'html_allowed' => false, // allow for sanitized HTML in comments
'html_allowed_elements' => array('a', 'img', 'i', 'b'), 'html_allowed_elements' => array('a', 'img', 'i', 'b'),
'use_preview' => false, // preview formatted comment (when allowing HTML) 'use_preview' => false, // preview formatted comment (when allowing HTML). Requires include_js=true
); );
/** /**

View File

@ -251,20 +251,20 @@ class CommentingController extends Controller {
$fields = new FieldList( $fields = new FieldList(
$dataFields = new CompositeField( $dataFields = new CompositeField(
TextField::create("Name", _t('CommentInterface.YOURNAME', 'Your name')) TextField::create("Name", _t('CommentInterface.YOURNAME', 'Your name'))
->setCustomValidationMessage(_t('CommentInterface.YOURNAME_MESSAGE_REQUIRED', 'Please enter your name')) ->setCustomValidationMessage(_t('CommentInterface.YOURNAME_MESSAGE_REQUIRED', 'Please enter your name'))
->setAttribute('data-message-required', _t('CommentInterface.YOURNAME_MESSAGE_REQUIRED', 'Please enter your name')), ->setAttribute('data-message-required', _t('CommentInterface.YOURNAME_MESSAGE_REQUIRED', 'Please enter your name')),
EmailField::create("Email", _t('CommentingController.EMAILADDRESS', "Your email address (will not be published)")) EmailField::create("Email", _t('CommentingController.EMAILADDRESS', "Your email address (will not be published)"))
->setCustomValidationMessage(_t('CommentInterface.EMAILADDRESS_MESSAGE_REQUIRED', 'Please enter your email address')) ->setCustomValidationMessage(_t('CommentInterface.EMAILADDRESS_MESSAGE_REQUIRED', 'Please enter your email address'))
->setAttribute('data-message-required', _t('CommentInterface.EMAILADDRESS_MESSAGE_REQUIRED', 'Please enter your email address')) ->setAttribute('data-message-required', _t('CommentInterface.EMAILADDRESS_MESSAGE_REQUIRED', 'Please enter your email address'))
->setAttribute('data-message-email', _t('CommentInterface.EMAILADDRESS_MESSAGE_EMAIL', 'Please enter a valid email address')), ->setAttribute('data-message-email', _t('CommentInterface.EMAILADDRESS_MESSAGE_EMAIL', 'Please enter a valid email address')),
TextField::create("URL", _t('CommentingController.WEBSITEURL', "Your website URL")) TextField::create("URL", _t('CommentingController.WEBSITEURL', "Your website URL"))
->setAttribute('data-message-url', _t('CommentInterface.COMMENT_MESSAGE_URL', 'Please enter a valid URL')), ->setAttribute('data-message-url', _t('CommentInterface.COMMENT_MESSAGE_URL', 'Please enter a valid URL')),
TextareaField::create("Comment", _t('CommentingController.COMMENTS', "Comments")) TextareaField::create("Comment", _t('CommentingController.COMMENTS', "Comments"))
->setCustomValidationMessage(_t('CommentInterface.COMMENT_MESSAGE_REQUIRED', 'Please enter your comment')) ->setCustomValidationMessage(_t('CommentInterface.COMMENT_MESSAGE_REQUIRED', 'Please enter your comment'))
->setAttribute('data-message-required', _t('CommentInterface.COMMENT_MESSAGE_REQUIRED', 'Please enter your comment')) ->setAttribute('data-message-required', _t('CommentInterface.COMMENT_MESSAGE_REQUIRED', 'Please enter your comment'))
), ),
HiddenField::create("ParentID"), HiddenField::create("ParentID"),
@ -416,24 +416,16 @@ class CommentingController extends Controller {
} else { } else {
$comment->write(); $comment->write();
// extend hook to allow extensions. Also see onBeforePostComment // extend hook to allow extensions. Also see onBeforePostComment
$this->extend('onAfterPostComment', $comment); $this->extend('onAfterPostComment', $comment);
} }
// clear the users comment since it passed validation // clear the users comment since it passed validation
Cookie::set('CommentsForm_Comment', false); Cookie::set('CommentsForm_Comment', false);
if(Director::is_ajax()) {
if(!$comment->Moderated && !$isPreview) {
return $comment->renderWith('CommentsInterface_pendingcomment');
} else {
return $comment->renderWith('CommentsInterface_singlecomment');
}
}
$holder = Commenting::get_config_value($comment->BaseClass, 'comments_holder_id'); $holder = Commenting::get_config_value($comment->BaseClass, 'comments_holder_id');
$hash = ($moderated) ? $comment->Permalink() : $holder; $hash = ($moderated) ? $holder : $comment->Permalink();
$url = (isset($data['ReturnURL'])) ? $data['ReturnURL'] : false; $url = (isset($data['ReturnURL'])) ? $data['ReturnURL'] : false;
return ($url) ? $this->redirect($url .'#'. $hash) : $this->redirectBack(); return ($url) ? $this->redirect($url .'#'. $hash) : $this->redirectBack();

View File

@ -97,7 +97,7 @@ class CommentsExtension extends DataExtension {
* @see docs/en/Extending * @see docs/en/Extending
*/ */
public function CommentsForm() { public function CommentsForm() {
if (Commenting::has_commenting($this->ownerBaseClass) && Commenting::get_config_value($this->ownerBaseClass, 'use_ajax_commenting')) { if(Commenting::has_commenting($this->ownerBaseClass) && Commenting::get_config_value($this->ownerBaseClass, 'include_js')) {
Requirements::javascript(THIRDPARTY_DIR . '/jquery/jquery.js'); Requirements::javascript(THIRDPARTY_DIR . '/jquery/jquery.js');
Requirements::javascript(THIRDPARTY_DIR . '/jquery-validate/lib/jquery.form.js'); Requirements::javascript(THIRDPARTY_DIR . '/jquery-validate/lib/jquery.form.js');
Requirements::javascript(THIRDPARTY_DIR . '/jquery-validate/jquery.validate.pack.js'); Requirements::javascript(THIRDPARTY_DIR . '/jquery-validate/jquery.validate.pack.js');

View File

@ -7,18 +7,18 @@ The module provides a number of built in configuration settings below are the de
// mysite/_config.php // mysite/_config.php
Commenting::add('Foo', array( Commenting::add('Foo', array(
'require_login' => false, 'require_login' => false, // boolean, whether a user needs to login
'required_permission' => false, 'required_permission' => false, // required permission to comment (or array of permissions)
'use_ajax_commenting' => true, 'include_js' => true, // Enhance operation by ajax behaviour on moderation links
'show_comments_when_disabled' => false, 'show_comments_when_disabled' => false, // when comments are disabled should we show older comments (if available)
'order_comments_by' => "\"Created\" DESC", 'order_comments_by' => "\"Created\" DESC",
'comments_per_page' => 10, 'comments_per_page' => 10,
'comments_holder_id' => "comments-holder", 'comments_holder_id' => "comments-holder", // id for the comments holder
'comment_permalink_prefix' => "comment-", 'comment_permalink_prefix' => "comment-", // id prefix for each comment. If needed make this different
'require_moderation' => false, 'require_moderation' => false,
'html_allowed' => false, // allow for sanitized HTML in comments 'html_allowed' => false, // allow for sanitized HTML in comments
'html_allowed_elements' => array('a', 'img', 'i', 'b'), 'html_allowed_elements' => array('a', 'img', 'i', 'b'),
'use_preview' => false, // preview formatted comment (when allowing HTML), 'use_preview' => false, // preview formatted comment (when allowing HTML). Requires include_js=true
'use_gravatar' => false, 'use_gravatar' => false,
'gravatar_size' => 80 'gravatar_size' => 80
); );

View File

@ -22,16 +22,16 @@
* Validate * Validate
*/ */
form.validate({ form.validate({
invalidHandler : function(form, validator) { invalidHandler : function(form, validator){
$('html, body').animate({ $('html, body').animate({
scrollTop: $(validator.errorList[0].element).offset().top - 30 scrollTop: $(validator.errorList[0].element).offset().top - 30
}, 200); }, 200);
}, },
showErrors: function(errorMap, errorList) { showErrors: function(errorMap, errorList) {
this.defaultShowErrors(); this.defaultShowErrors();
// hack to add the extra classes we need to the validation message elements // hack to add the extra classes we need to the validation message elements
form.find('span.error').addClass('message required'); form.find('span.error').addClass('message required');
}, },
errorElement: "span", errorElement: "span",
errorClass: "error", errorClass: "error",
@ -68,44 +68,9 @@
} }
}); });
/**
* Clicking one of the metalinks performs the operation via ajax
* this inclues the spam and approve links
*/
form.submit(function (e) { form.submit(function (e) {
// trigger validation // trigger validation
if(!form.validate().valid()){ if(!form.validate().valid()) return false;
return false;
}
previewEl.removeClass('loading').hide();
// submit the form
$(this).ajaxSubmit(function(response) {
noCommentsYet.hide();
if(!commentsList.length){
commentsHolder.append("<ul class='comments-list'></ul>");
commentsList = $('.comments-list', commentsHolder);
}
var evenOdd = (commentsList.children('.first').removeClass('first').hasClass('even')) ? 'odd' : 'even';
var newComment = $('<li />')
.addClass('comment first ' + evenOdd)
.html(response)
.hide();
if(response.match('<b>Spam detected!!</b>')) {
newComment.addClass('spam');
}
commentsList.prepend(newComment.fadeIn());
});
$(this).resetForm();
return false;
}); });
/** /**