mirror of
https://github.com/silverstripe/silverstripe-comments
synced 2024-10-22 11:05:49 +02:00
BUGFIX: use the commenting configuration for getting correct comment permalinks. BUGFIX: perserve the correct ordering of comments in the front end
This commit is contained in:
parent
2fcc514458
commit
008e2c0143
@ -181,10 +181,13 @@ class CommentingController extends Controller {
|
|||||||
if($comment->NeedsModeration){
|
if($comment->NeedsModeration){
|
||||||
$this->sessionMessage($moderationMsg, 'good');
|
$this->sessionMessage($moderationMsg, 'good');
|
||||||
}
|
}
|
||||||
|
|
||||||
$hash = ($comment->NeedsModeration) ? '#Comments_holder' : '#Comment_' . $comment->ID;
|
// build up the return link. Ideally redirect to
|
||||||
|
$holder = Commenting::get_config_value($comment->BaseClass, 'comments_holder_id');
|
||||||
|
|
||||||
|
$hash = ($comment->NeedsModeration) ? $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();
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -30,19 +30,13 @@ class Comment extends DataObject {
|
|||||||
static $casting = array(
|
static $casting = array(
|
||||||
"RSSTitle" => "Varchar",
|
"RSSTitle" => "Varchar",
|
||||||
);
|
);
|
||||||
|
|
||||||
static $comments_per_page = 10;
|
|
||||||
|
|
||||||
static $moderate = false;
|
|
||||||
|
|
||||||
static $bbcode = false;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return a link to this comment
|
* Return a link to this comment
|
||||||
*
|
*
|
||||||
* @return string link to this comment.
|
* @return string link to this comment.
|
||||||
*/
|
*/
|
||||||
function Link($action = "") {
|
public function Link($action = "") {
|
||||||
return $this->Parent()->Link($action) . '#' . $this->Permalink();
|
return $this->Parent()->Link($action) . '#' . $this->Permalink();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -52,96 +46,34 @@ class Comment extends DataObject {
|
|||||||
*
|
*
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
function Permalink() {
|
public function Permalink() {
|
||||||
$prefix = Commenting::get_config_value($this->ownerBaseClass, 'comment_permalink_prefix');
|
$prefix = Commenting::get_config_value($this->BaseClass, 'comment_permalink_prefix');
|
||||||
|
|
||||||
return $prefix . '-' . $id;
|
return $prefix . $this->ID;
|
||||||
}
|
|
||||||
|
|
||||||
function getRSSName() {
|
|
||||||
if($this->Name) {
|
|
||||||
return $this->Name;
|
|
||||||
} elseif($this->Author()) {
|
|
||||||
return $this->Author()->getName();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function ParsedBBCode(){
|
|
||||||
$parser = new BBCodeParser($this->Comment);
|
|
||||||
return $parser->parse();
|
|
||||||
}
|
|
||||||
|
|
||||||
function DeleteLink() {
|
|
||||||
return ($this->canDelete()) ? "PageComment_Controller/deletecomment/$this->ID" : false;
|
|
||||||
}
|
|
||||||
|
|
||||||
function CommentTextWithLinks() {
|
|
||||||
$pattern = '|([a-zA-Z]+://)([a-zA-Z0-9?&%.;:/=+_-]*)|is';
|
|
||||||
$replace = '<a rel="nofollow" href="$1$2">$1$2</a>';
|
|
||||||
return preg_replace($pattern, $replace, $this->Comment);
|
|
||||||
}
|
|
||||||
|
|
||||||
function SpamLink() {
|
|
||||||
return ($this->canEdit() && !$this->IsSpam) ? "PageComment_Controller/reportspam/$this->ID" : false;
|
|
||||||
}
|
|
||||||
|
|
||||||
function HamLink() {
|
|
||||||
return ($this->canEdit() && $this->IsSpam) ? "PageComment_Controller/reportham/$this->ID" : false;
|
|
||||||
}
|
|
||||||
|
|
||||||
function ApproveLink() {
|
|
||||||
return ($this->canEdit() && $this->NeedsModeration) ? "PageComment_Controller/approve/$this->ID" : false;
|
|
||||||
}
|
|
||||||
|
|
||||||
function SpamClass() {
|
|
||||||
if($this->getField('IsSpam')) {
|
|
||||||
return 'spam';
|
|
||||||
} else if($this->getField('NeedsModeration')) {
|
|
||||||
return 'unmoderated';
|
|
||||||
} else {
|
|
||||||
return 'notspam';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function RSSTitle() {
|
|
||||||
return sprintf(
|
|
||||||
_t('PageComment.COMMENTBY', "Comment by '%s' on %s", PR_MEDIUM, 'Name, Page Title'),
|
|
||||||
Convert::raw2xml($this->getRSSName()),
|
|
||||||
$this->Parent()->Title
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function PageTitle() {
|
|
||||||
return $this->Parent()->Title;
|
|
||||||
}
|
|
||||||
|
|
||||||
static function enableBBCode() {
|
|
||||||
self::$bbcode = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
static function bbCodeEnabled() {
|
|
||||||
return self::$bbcode;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @param boolean $includerelations a boolean value to indicate if the labels returned include relation fields
|
* @param boolean $includerelations a boolean value to indicate if the labels returned include relation fields
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
function fieldLabels($includerelations = true) {
|
function fieldLabels($includerelations = true) {
|
||||||
$labels = parent::fieldLabels($includerelations);
|
$labels = parent::fieldLabels($includerelations);
|
||||||
$labels['Name'] = _t('PageComment.Name', 'Author Name');
|
$labels['Name'] = _t('Comment.NAME', 'Author Name');
|
||||||
$labels['Comment'] = _t('PageComment.Comment', 'Comment');
|
$labels['Comment'] = _t('Comment.COMMENT', 'Comment');
|
||||||
$labels['IsSpam'] = _t('PageComment.IsSpam', 'Spam?');
|
$labels['IsSpam'] = _t('Comment.ISSPAM', 'Spam?');
|
||||||
$labels['NeedsModeration'] = _t('PageComment.NeedsModeration', 'Needs Moderation?');
|
$labels['NeedsModeration'] = _t('Comment.NEEDSMODERATION', 'Needs Moderation?');
|
||||||
|
|
||||||
return $labels;
|
return $labels;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the parent {@link DataObject} this comment is attached too
|
||||||
|
*
|
||||||
|
* @return DataObject
|
||||||
|
*/
|
||||||
|
public function getParent() {
|
||||||
|
return DataObject::get_by_id($this->BaseClass, $this->ParentID);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method is called just before this object is
|
* This method is called just before this object is
|
||||||
* written to the database.
|
* written to the database.
|
||||||
@ -186,7 +118,7 @@ class Comment extends DataObject {
|
|||||||
$extended = $this->extendedCan('canView', $member);
|
$extended = $this->extendedCan('canView', $member);
|
||||||
if($extended !== null) return $extended;
|
if($extended !== null) return $extended;
|
||||||
|
|
||||||
$page = $this->Parent();
|
$page = $this->getParent();
|
||||||
return (
|
return (
|
||||||
($page && $page->ProvideComments)
|
($page && $page->ProvideComments)
|
||||||
|| (bool)Permission::checkMember($member, 'CMS_ACCESS_CommentAdmin')
|
|| (bool)Permission::checkMember($member, 'CMS_ACCESS_CommentAdmin')
|
||||||
@ -228,4 +160,55 @@ class Comment extends DataObject {
|
|||||||
|
|
||||||
return $this->canEdit($member);
|
return $this->canEdit($member);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/************************************ Review the following */
|
||||||
|
function getRSSName() {
|
||||||
|
if($this->Name) {
|
||||||
|
return $this->Name;
|
||||||
|
} elseif($this->Author()) {
|
||||||
|
return $this->Author()->getName();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function DeleteLink() {
|
||||||
|
return ($this->canDelete()) ? "PageComment_Controller/deletecomment/$this->ID" : false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function CommentTextWithLinks() {
|
||||||
|
$pattern = '|([a-zA-Z]+://)([a-zA-Z0-9?&%.;:/=+_-]*)|is';
|
||||||
|
$replace = '<a rel="nofollow" href="$1$2">$1$2</a>';
|
||||||
|
return preg_replace($pattern, $replace, $this->Comment);
|
||||||
|
}
|
||||||
|
|
||||||
|
function SpamLink() {
|
||||||
|
return ($this->canEdit() && !$this->IsSpam) ? "PageComment_Controller/reportspam/$this->ID" : false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function HamLink() {
|
||||||
|
return ($this->canEdit() && $this->IsSpam) ? "PageComment_Controller/reportham/$this->ID" : false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function ApproveLink() {
|
||||||
|
return ($this->canEdit() && $this->NeedsModeration) ? "PageComment_Controller/approve/$this->ID" : false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function SpamClass() {
|
||||||
|
if($this->getField('IsSpam')) {
|
||||||
|
return 'spam';
|
||||||
|
} else if($this->getField('NeedsModeration')) {
|
||||||
|
return 'unmoderated';
|
||||||
|
} else {
|
||||||
|
return 'notspam';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function RSSTitle() {
|
||||||
|
return sprintf(
|
||||||
|
_t('PageComment.COMMENTBY', "Comment by '%s' on %s", PR_MEDIUM, 'Name, Page Title'),
|
||||||
|
Convert::raw2xml($this->getRSSName()),
|
||||||
|
$this->Parent()->Title
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
@ -49,7 +49,11 @@ class CommentsExtension extends DataObjectDecorator {
|
|||||||
* @return DataObjectSet
|
* @return DataObjectSet
|
||||||
*/
|
*/
|
||||||
function Comments() {
|
function Comments() {
|
||||||
return DataObject::get('Comment', "\"ParentID\" = '". $this->owner->ID ."' AND \"BaseClass\" = '". $this->ownerBaseClass ."'");
|
return DataObject::get(
|
||||||
|
'Comment',
|
||||||
|
"\"ParentID\" = '". $this->owner->ID ."' AND \"BaseClass\" = '". $this->ownerBaseClass ."'",
|
||||||
|
Commenting::get_config_value($this->ownerBaseClass, 'order_comments_by')
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<p class="comment" id="{$CommentPermalinkPrefix}-$ID">
|
<p class="comment" id="$Permalink">
|
||||||
<% if bbCodeEnabled %>
|
<% if bbCodeEnabled %>
|
||||||
$ParsedBBCode
|
$ParsedBBCode
|
||||||
<% else %>
|
<% else %>
|
||||||
|
Loading…
Reference in New Issue
Block a user