Ronald Huereca
Description: Allows you and your users to edit their comments inline. Admin and editors can edit all comments.
Special Thanks: An extra special thanks goes out to Vivien from Inspiration Bit (http://www.inspirationbit.com). Without her, this plugin release wouldn't have been possible. Brett Terpstra from Circle Six Design (http://blog.circlesixdesign.com) helped fix a rather major bug as well during testing. Thank you Brett.
Copyright 2007 Ronald Huereca (email : ron alfy [a t ] g m ail DOT com)
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
class WPrapAjaxEditComments {
var $commentClassName = "editComment"; //Do not edit this name
var $commentAuthorName = "editAuthor"; //Do not edit this name
var $skipDiv = false;
var $minutes = 15;
var $admin = "true";
var $cookieName = "WPrapAjaxEditCommentId";//Do not edit this name
var $optionsName = "WPAjaxEditComments"; //Do not edit this name
var $userOptionsName = "WPAjaxEditAuthorUserOptions";
var $adminOptions = false;
var $userOptions = false; //Do not edit this name
var $session = false;
//constructor
function WPrapAjaxEditComments() {
}
//Run when the plugin is first activated
function init() {
$this->getAdminOptions();
}
//Returns an array of admin options
function getAdminOptions() {
if ($this->adminOptions == false) {
$optionsName = $this->optionsName;
$adminOptions = array(
'allow_editing' => 'true',
'minutes' => '15',
'edit_text' => 'You may click on your name and/or comment to edit.',
'show_timer' => 'true',
'spam_text' => 'Your edited comment was marked as spam. If this is in error, please contact the admin.',
'email_edits' => 'false',
'number_edits' => '0',
'use_akismet' => 'true'
);
$options = get_option($optionsName);
if (!empty($options)) {
foreach ($options as $key => $option)
$adminOptions[$key] = $option;
}
update_option($optionsName, $adminOptions);
$this->adminOptions = $adminOptions;
}
return $this->adminOptions;
}
//Returns an array of user options
function getUserOptions() {
global $user_email;
if ($this->userOptions == false) {
if (empty($user_email)) {get_currentuserinfo();}
if (empty($user_email)) { return ''; }
$optionsName = $this->userOptionsName;
$defaults = array('author_editing' => 'true',
'comment_editing' => 'true',
'admin_editing' => 'false',
'inline_editing' => 'false',
'show_links' => 'false'
);
$userOptions = get_option($optionsName);
if (!isset($userOptions)) {
$userOptions = array();
}
//See if an older version doesn't match the new defaults
if (empty($userOptions[$user_email])) {
$userOptions[$user_email] = $defaults;
update_option(optionsName, $userOptions);
} elseif(!is_array($userOptions[$user_email])) {
$userOptions[$user_email] = $defaults;
update_option(optionsName, $userOptions);
} else {
foreach ($userOptions[$user_email] as $key => $option) {
$defaults[$key] = $option;
}
$userOptions[$user_email] = $defaults;
update_option(optionsName, $userOptions);
}
$this->userOptions = $userOptions;
}
return $this->userOptions;
}
//Adds a paragraph to the beginning of the text
//Takes in the text, a comment ID, and a post ID
//Called by saveComment and addCommentDiv
function addEditParagraph($text, $id, $postId) {
if (empty($id)||empty($postId)) { return $text; }
if (!$this->canEditPostsPage($postId)) {
$text = "
" . $text;
return $text;
}
return $text;
}
//Add in place holders for the Edit, Delete, Spam, Disapprove buttons - Skip out if in the admin panel
function addApprovalParagraph($text, $commentId, $postId) {
if (empty($commentId) || empty($postId) || is_admin()) { return $text; }
global $user_email;
if (empty($user_email)) {
get_currentuserinfo();
}
if (empty($user_email)) { return $text; }
$author_options = $this->getUserOptions();
//Get the author options
if (!empty($author_options[$user_email])) {
if ($author_options[$user_email]['show_links'] == "true") { return $text; }
}
$links = '';
if ($this->canEditPostsPage())
$links .= 'Edit | Delete | Spam';
if (strlen($links) > 0)
$text = $text . '
[ ' . $links . ' ]
';
return $text;
}
//Increments the number of edits users have made (excluding admin) - Takes in a post ID
function incrementEdits($postId) {
if (empty($postId)) { return; }
$options = $this->getAdminOptions();
$numEdits = intval($options['number_edits']);
if (!$this->canEditPostsPage($postId)) {
$numEdits += 1;
$options['number_edits'] = $numEdits;
update_option($this->optionsName, $options);
}
}
//Returns true or false depending if the admin can inline edit
function canInlineEdit() {
global $user_email;
if (empty($user_email)) {
get_currentuserinfo();
}
if (empty($user_email)) { return "true"; } //not logged in so they don't have a choice
$author_options = $this->getUserOptions();
//Get the author options
if (!empty($author_options[$user_email])) {
if ($author_options[$user_email]['inline_editing'] == "true") { return "false"; }
}
return "true";
}
//Adds a div to the comment text with a class name so that the AJAX can change the text to a textbox
function addCommentDiv($text) {
global $comment;
$className = "post";
if (is_admin()) { $className = "admin"; }
if (empty($comment)) { return $text; }
if (!$this->canEdit($comment->comment_ID, $comment->comment_post_ID) || !$this->canEditComment()) { return $text; }
//Skip this if admin
$text = $this->addEditParagraph($text, $comment->comment_ID, $comment->comment_post_ID);
if ($this->skipDiv) { return $text; }
//Regular expression to check if there is a div already added
$pattern = '/div class=\"' . $this->commentClassName . '\"/i';
//If there is not a div already, add it in
if (!preg_match($pattern, $text)) {
$text = '
' . $text . '
';
}
$text = $this->addApprovalParagraph($text, $comment->comment_ID, $comment->comment_post_ID);
return $text;
} //End function addCommentDiv()
function addAuthorSpan($text) {
global $comment;
$className = "post";
if (is_admin()) { $className = "admin"; }
if (!$this->canEdit($comment->comment_ID, $comment->comment_post_ID) || !$this->canEditAuthor()) { return $text; }
//Regular expression to check if there is a div already added
$pattern = '/span class=\"' . $this->commentAuthorName . '\"/i';
//If there is not a div already, add it in
if (!preg_match($pattern, $text)) {
$text = '' . $text . '';
}
return $text;
} //End function addAuthorDiv()
//Prints out the admin page
function printAdminPage() {
global $wpdb;
$WPAjaxEditComments = $this->getAdminOptions();
if (!empty($savedOptions)) {
$WPAjaxEditComments = $savedOptions;
}
if ( function_exists('current_user_can') && !current_user_can('manage_options') )
die("nope");
//Delete security keys
if (isset($_POST['update_wp_ajaxEditSecurityKeys'])) {
check_admin_referer('wp-ajax-edit-comments_admin-options-security');
$query = "delete from $wpdb->postmeta where left(meta_value, 6) = 'wpAjax'";
if (@!$wpdb->query($query)) {
?>
JS();
}
}//End function addHeaderJS
function addAdminHeaderJS() {
global $user_email;
if (empty($user_email)) {
get_currentuserinfo();
}
if (empty($user_email)) { return; }
$author_options = $this->getUserOptions();
//Get the author options
if (!empty($author_options[$user_email])) {
if ($author_options[$user_email]['admin_editing'] == "true") { return; }
}
$this->JS();
}
function JS() {
if (function_exists('wp_enqueue_script') && function_exists('wp_register_script')) {
wp_register_script('jquery', get_bloginfo('wpurl') . '/wp-content/plugins/wp-ajax-edit-comments/js-includes/jquery.js');
wp_enqueue_script('ajax_edit_comments', get_bloginfo('wpurl') . '/wp-content/plugins/wp-ajax-edit-comments/js-includes/wp-ajax-edit-comments.js.php', array('jquery'), '1.1');
}
}
function CSS() {
echo "\n";
}
//Returns a comment for editing in a textbox
//Takes in a comment id
function getComment($id) {
global $wpdb;
$comment = get_comment( $id );
//$comment = $wpdb->get_row("select comment_post_ID, comment_approved, comment_content from $wpdb->comments where comment_ID = $id", ARRAY_A);
if (!$comment) { return 0; }
if (!$this->canEditPostsPage($comment->comment_post_ID)) { if ($comment->comment_approved === "spam") { return false; } }
if (!$this->canEdit($id, $comment->comment_post_ID)) { return false; }
//Get the comment ready for the textbox
$content = format_to_edit($comment->comment_content);
$content = apply_filters( 'comment_edit_pre', $content);
$content = $this->convert_smart_quotes($content);
if (function_exists("iconv")) {
$content = iconv(get_option('blog_charset'), "UTF-8", $content);
} elseif (get_option('blog_charset') != "UTF-8") {
$content = utf8_encode($content);
}
$content = html_entity_decode(apply_filters('the_editor', $content),ENT_QUOTES);
return $content;
}//End function getComment
//Strips the ID to just numbers
function convert_smart_quotes($string) { //Necessary for reading in comments - from http://shiflett.org/blog/2005/oct/convert-smart-quotes-with-php
$search = array(chr(145), chr(146), chr(147), chr(148), chr(151));
$replace = array("'","'",'"','"','-');
return str_replace($search, $replace, $string);
}
function getCommentID($id) {
preg_match('/([0-9]+)$/i', $id, $matches);
if (is_numeric($matches[1])) {
return $matches[1];
} else {
return 0;
}
} //End function getCommentID
//Returns the text such as "You may click on author/comment to edit"
function getEditText() {
$options = $this->getAdminOptions();
return attribute_escape($options['edit_text']);
}
//Returns the spam text such as "Your comment has been flagged as spam. Please contact admin..."
function getSpamText() {
$options = $this->getAdminOptions();
$content = $options['spam_text'];
$this->skipDiv = true;
$content = apply_filters('comment_text', $content);
$this->skipDiv = false;
return stripslashes($content);
}
function deleteComment($id) {
if (empty($id)) { return false; }
$comment = get_comment($id);
if (!$comment || !function_exists("current_user_can")) { return false; }
if ( current_user_can( 'edit_post', $comment->comment_post_ID) ) {
if (!wp_delete_comment($id)) { return true; }
} else {
return false;
}
return true;
}
function spamComment($id) {
if (empty($id)) { return false; }
$comment = get_comment($id);
if (!$comment || !function_exists("current_user_can")) { return false; }
if ( current_user_can( 'edit_post', $comment->comment_post_ID) ) {
if (!wp_set_comment_status($id, 'spam')) { return false; }
} else {
return false;
}
return true;
}
//Returns how much time is left to edit on a comment in a comma deliminated variable
//Returns $minutes,$seconds
//Takes in a comment ID
//One concern here is if the admin increases the time in the admin panel - The user will be under the impression that there is more time to edit than there really is. This is a minor and rare bug, so I chose to leave it alone.
function getTimeLeft($id) {
global $wpdb;
if (empty($id)) { return "0,0"; }
$adminEdit = $this->getAdminOptions();
$adminMinutes = $adminEdit['minutes'];
$query = "SELECT (UNIX_TIMESTAMP('" . current_time('mysql') . "') - UNIX_TIMESTAMP(comment_date)) time FROM $wpdb->comments where comment_ID = $id";
//Get the IP, Date, and Timestamp
$comment = $wpdb->get_row($query, ARRAY_A);
//Get the time elapsed since making the comment
$time = $comment['time'];
$timeLeft = ($adminMinutes * 60) - $time; //seconds
if ($timeLeft <= 0) { return "0,0"; }
$minutesPassed = floor($timeLeft/60);
$seconds = $timeLeft - ($minutesPassed*60);
return "$minutesPassed,$seconds";
}//end function getTimeLeft
//Saves the author to the database
/*id = The comment id
url = The author's url
name = The author's name*/
function saveAuthor($id, $url, $name) {
global $wpdb;
$comment = get_comment($id, ARRAY_A);
if (!$comment) { return 0; }
if (!$this->canEditPostsPage($comment['comment_post_ID'])) { if ($comment['comment_approved'] === "spam") { return 0; } }
if (!$this->canEdit($id, $comment['comment_post_ID'])) { return 0; }
if (!isset($name)) {
return 0;
}
if (trim($name) == '') { return 0; }
$url = urldecode($url);
$name = urldecode($name);
$url = trim(apply_filters('comment_url', $url));
$saveUrl = apply_filters('pre_comment_author_url', $url);
$name = apply_filters('comment_author', $name);
$saveName = apply_filters('pre_commment_author_name', $name);
$char = '';
if (function_exists('iconv')) {
$saveName = iconv("UTF-8",get_option('blog_charset'), $saveName);
} else { $char = '_utf8'; }
if(!$wpdb->query("UPDATE $wpdb->comments SET comment_author = $char'{$saveName}', comment_author_url = '{$saveUrl}' WHERE comment_ID = $id")) {
return 0;
}
//For WP Cache
if (function_exists("wp_cache_get_postid_from_comment")) {
wp_cache_get_postid_from_comment($id);
}
//Check for spam
if ($this->checkSpam($id, $comment['comment_post_ID'])) { return "spam"; }
//Send out edit notifications
$this->editNotification($id, $comment['comment_post_ID']);
$this->incrementEdits($comment['comment_post_ID']);
$url = stripslashes($url);
$name = stripslashes($name);
$returnText = '';
if (!empty($url)) {
$returnText = '' . $name . '';
} else {
$returnText = $name;
}
return $returnText;
} //End function saveAuthor
//Saves the edited comment to the database
function saveComment($id, $content) {
global $wpdb;
$comment = get_comment($id, ARRAY_A);
$content = urldecode($content);
$savecontent = $content;
if (get_option('blog_charset') != "UTF-8") {
$savecontent = mb_convert_encoding($content, get_option('blog_charset'));
}
$char = '';
if (function_exists('iconv')) {
$content = iconv("UTF-8",get_option('blog_charset'), $content);
} else { $char = '_utf8'; }
if (trim($content) == '' || !$comment ) { return 0; }
if (!$this->canEditPostsPage($comment['comment_post_ID'])) { if ($comment['comment_approved'] === "spam") { return 0; } }
if (!$this->canEdit($id, $comment['comment_post_ID'])) { return 0; }
if(!$wpdb->query("UPDATE $wpdb->comments SET comment_content = $char'{$content}' WHERE comment_ID = $id")) {
return 0;
}
$content = apply_filters('comment_save_pre', $savecontent);
//For WP Cache
if (function_exists("wp_cache_get_postid_from_comment")) {
wp_cache_get_postid_from_comment($id);
}
//Check for spam
if ($this->checkSpam($id, $comment['comment_post_ID'])) { return "spam" ;}
//Send out edit notifications
$this->editNotification($id, $comment['comment_post_ID']);
$this->incrementEdits($comment['comment_post_ID']);
$this->skipDiv = true;
$content = apply_filters('comment_text', $content);
$content = $this->addEditParagraph($content, $id, $comment['comment_post_ID']);
$this->skipDiv = false;
return stripslashes($content);
} //end function saveComment
//Return true if spam, return false if not (or if ID is invalid or Akismet isn't installed)
function checkSpam($id, $postId) {
if (empty($id) || empty($postId)) { return false; }
$options = $this->getAdminOptions();
if ($options['use_akismet'] == "false") { return false;} //Check to see if the admin has enabled akismet checking
//Check for SPAM if Akismet is installed
if (function_exists("akismet_check_db_comment")) {
if (!$this->canEditPostsPage()) { //Skip if admin
if (akismet_verify_key(get_option('wordpress_api_key')) != "failed") { //If API key fails, keep on going as if Akismet isn't installed
$response = akismet_check_db_comment($id);
if ($response == "true") { //You have spam
wp_set_comment_status($id, 'spam');
return true;
}
}
}
}
return false;
}
//Sends a notification of an edit via e-mail - Code sampled from Subscribe to Comments
//Takes in a comment ID and Post ID - Returns false if email failed
function editNotification($id, $postId) {
global $wpdb;
if (empty($id) || empty($postId)) { return false; }
//Make sure this option is enabled and the user editing isn't admin
$options = $this->getAdminOptions();
if ($options['email_edits'] == "false" || $this->canEditPostsPage()) { return false; }
$comment = $wpdb->get_row("SELECT * FROM $wpdb->comments WHERE comment_ID='$id' LIMIT 1", ARRAY_A);
$post = $wpdb->get_row("SELECT * FROM $wpdb->posts WHERE ID='$comment->comment_post_ID' LIMIT 1", ARRAY_A);
if ( $comment['comment_approved'] == '1' && $comment['comment_type'] == '' ) { // Comment has been approved and isn't a trackback or a pingback, so we should send out notifications
$message = sprintf(__("A comment has been edited on post %s", 'WPAjaxEditComments') . ": \n%s\n\n", stripslashes($post['post_title']), get_permalink($comment['comment_post_ID']));
$message .= sprintf(__("Author: %s\n", 'WPAjaxEditComments'), $comment['comment_author']);
$message .= sprintf(__("Author URL: %s\n", 'WPAjaxEditComments'), stripslashes($comment['comment_author_url']));
$message .= __("Comment:\n", 'WPAjaxEditComments') . stripslashes($comment['comment_content']) . "\n\n";
$message .= __("See all comments on this post here:\n", 'WPAjaxEditComments');
$message .= get_permalink($comment['comment_post_ID']) . "#comments\n\n";
$subject = sprintf(__('New Edited Comment On: %s', 'WPAjaxEditCommentss'), stripslashes($post['post_title']));
$subject = '[' . get_bloginfo('name') . '] ' . $subject;
$email = get_bloginfo('admin_email');
$site_name = str_replace('"', "'", get_bloginfo('name'));
$charset = get_settings('blog_charset');
$headers = "From: \"{$site_name}\" <{$email}>\n";
$headers .= "MIME-Version: 1.0\n";
$headers .= "Content-Type: text/plain; charset=\"{$charset}\"\n";
return wp_mail($email, $subject, $message, $headers);
}
return false;
}
//Determines if a comment can be edited or not based on the ID and time elapsed
//$id = The comment id
//$postId = The post id for the comment
//Returns true if the comment can be edited, false if not
function canEdit($id, $postId) {
global $wpdb;
if (empty($id) || empty($postId)) { return false; }
//Return true if the user can edit the comment
if ($this->canEditPostsPage()) { return true; }
//Checks to see if the admin has allowed comment editing
$adminEdit = $this->getAdminOptions();
$adminEdit = $adminEdit['allow_editing'];
if ($adminEdit != 'true') {
return false;
}
$query = "SELECT UNIX_TIMESTAMP(comment_date) time, comment_author_IP, comment_date_gmt, comment_post_ID, comment_ID FROM $wpdb->comments where comment_ID = $id";
//Get the IP, Date, and Timestamp
$comment = $wpdb->get_row($query, ARRAY_A); if (!comment) { return false; }
$meta = $wpdb->get_row("SELECT meta_value FROM $wpdb->postmeta WHERE post_id = " . $comment['comment_post_ID'] . " and meta_key = " . $comment['comment_ID'], ARRAY_A);
if (!meta || !$comment) { return false; }
$timestamp = $comment['time'];
$hash = md5($comment['comment_author_IP'] . $comment['comment_date_gmt']);
//Check to see if there's a valid cookie
if (!$this->session) { @session_start(); $this->session = true; }
if (isset($_COOKIE[$this->cookieName . $id . $hash]) || isset($_SESSION[$this->cookieName . $id . $hash])) {
if (!($_COOKIE[$this->cookieName . $id . $hash] === $meta['meta_value']) && !($_SESSION[$this->cookieName . $id . $hash] === $meta['meta_value'])) { return false; }
//Get the time elapsed since making the comment
$time = current_time('timestamp',get_option('gmt_offset'))-$timestamp;
$minutesPassed = round(((($time%604800)%86400)%3600)/60);
//Get the time the admin has set for minutes
$minutes = $this->getAdminOptions();
$minutes = $minutes['minutes'];
if (!is_numeric($minutes)) {
$minutes = $this->minutes;
}
if ($minutes < 1) {
$minutes = $this->minutes;
}
//Compare the minutes passed to the admin minutes
if (($minutesPassed - $minutes) > 0) {
unset($_SESSION[$this->cookieName . $id . $hash]); return false;
}
return true;
}
@session_write_close();
return false;
}//end function canEdit
//Returns true if a person can edit a post/page
//Returns false otherwise
//Called by canEdit() and setCommentCookie
function canEditPostsPage() {
//Stolen, err, borrowed from edit_comment_link()
if (!function_exists("current_user_can")) { return false; }
if (!current_user_can('edit_others_pages')) {return false; }
if (!current_user_can('edit_others_posts')) {return false; }
return true;
}//end function canEditPostsPage
//Returns true unless the user has disabled author editing
function canEditAuthor() {
global $user_email;
if (empty($user_email)) {
get_currentuserinfo();
}
if (empty($user_email)) { return true; }
$author_options = $this->getUserOptions();
//Get the author options
if (!empty($author_options[$user_email])) {
if ($author_options[$user_email]['author_editing'] == "false") { return false; }
}
return true;
} //end function canEditAuthor
//Returns true unless the user has disabled comment editing
function canEditComment() {
global $user_email;
if (empty($user_email)) {
get_currentuserinfo();
}
if (empty($user_email)) { return true; }
$author_options = $this->getUserOptions();
//Get the author options
if (!empty($author_options[$user_email])) {
if ($author_options[$user_email]['comment_editing'] == "false") { return false; }
}
return true;
}
//Sets a comment cookie for the commentator (treat as a private function)
function setCommentCookie($commentId) {
global $comment, $wpdb;
//Get the IP, Date, and Timestamp
if (empty($comment)) {
$comment = $wpdb->get_row("SELECT * FROM $wpdb->comments where comment_ID = $commentId", ARRAY_A);
}
if (!$comment) { return $commentId; }
if ($comment['comment_approved'] === "spam") { return $commentId; }
//Return if setting the cookie is unnecessary
if ($this->canEditPostsPage()) { return $commentId; }
$hash = md5($comment['comment_author_IP'] . $comment['comment_date_gmt']);
$rand = 'wpAjax' . $hash . md5($this->random()) . md5($this->random());
//Get the time the admin has set for minutes
$minutes = $this->getAdminOptions();
$minutes = $minutes['minutes'];
if (!is_numeric($minutes)) {
$minutes = $this->minutes;
}
if ($minutes < 1) {
$minutes = $this->minutes;
}
//Insert the random key into the database
$query = "INSERT INTO " . $wpdb->postmeta .
"(meta_id, post_id, meta_key, meta_value) " .
"VALUES ('', " . $comment['comment_post_ID'] . "," . $comment['comment_ID'] . ",'" . $rand . "')";
@$wpdb->query($query);
//Set the cookie
$cookieName = $this->cookieName . $commentId . $hash;
$value = $rand;
$expire = time()+60*$minutes;
if (!isset($_COOKIE[$cookieName])) {
setcookie($cookieName, $value, $expire);
session_start();
$_SESSION[$cookieName] = $value;
session_write_close();
}
return $commentId;
} //end function setCommentCookie
function random() {
$chars = "%CDEF#cGHIJ\:ab!@defg9ABhijklmn<>;opqrstuvwxyz10234/+_-=5678MKL^&*NOP";
$pass = '';
for ($i = 0; $i < 50; $i++) {
$pass .= $chars{rand(0, strlen($chars)-1)};
}
return $pass;
}
//Returns a nonce - Takes in the nonce name - Returns a nonce in the format of _wpnonce:"404049"
function getNonce($name) {
$nonce = $this->nonceReplace(wp_nonce_url("#", $name));
if ($this->canEditPostsPage()) { //yay, admin
$nonce = '_wpnonce:"' . md5($nonce) . '"';
} else { //yay, non-admin user
$nonce = '_wpnonce:"' . md5(md5($nonce) . $nonce) . '"';
}
return $nonce;
}
//takes in a wp_nonce and changes it from format _wpnonce=404049# to 404049
function nonceReplace($nonce) {
$nonce = str_replace("_wpnonce=", '', $nonce);
$nonce = str_replace("#", '', $nonce);
return $nonce;
}
//Takes in the nonce with format 404049, and the nonce name
//Return true if the nonce is valid, false if not
function verifyNonce($nonce, $name) {
$newNonce = $this->nonceReplace(wp_nonce_url("#", $name));
//Figure out if we are admin or just a user
if ($this->canEditPostsPage()) { //yay, admin
$newNonce = md5($newNonce);
if ($nonce != $newNonce) {
return false;
}
} else { //yay, non-admin user
$newNonce = md5(md5($newNonce) . $newNonce);
if ($nonce != $newNonce) {
return false;
}
}
return true;
} //end function verifyNonce
}//End Class WPrapAjaxEditComments
if (class_exists("WPrapAjaxEditComments")) {
$rap_ajaxComment = new WPrapAjaxEditComments();
//locale stuff
$rap_ajaxComment_locale = get_locale();
$rap_ajaxComment_mofile = dirname(__FILE__) . "/ajaxEdit-$rap_ajaxComment_locale.mo";
load_textdomain('WPAjaxEditComments', $rap_ajaxComment_mofile);
}
//Initialize the admin panel
function WPrapAjaxEditComments_ap() {
global $rap_ajaxComment;
if (!isset($rap_ajaxComment)) {
return;
}
if (function_exists('add_options_page')) {
add_options_page('AJAX Edit Comments', 'AJAX Edit Comments', 10, basename(__FILE__), array(&$rap_ajaxComment, 'printAdminPage'));
}
if (function_exists('add_submenu_page')) {
add_submenu_page('profile.php', "AJAX Edit Comments Options","AJAX Edit Comments", 9, basename(__FILE__), array(&$rap_ajaxComment, 'printAuthorPage'));
}
}
//Template tag WPrapAjaxEditComments_CanEdit
//Returns true if a user can edit - False if they can't - Must be run within the loop
//Also returns false if people are admins
function WPrapAjaxEditComments_CanEdit() {
global $comment, $rap_ajaxComment;
//If we're not in the loop, return false
if (!isset($comment) || !isset($rap_ajaxComment)) { return false; }
//If admin, return false
if ($rap_ajaxComment->canEditPostsPage()) {
return false;
}
//Find out if the user can edit
if ($rap_ajaxComment->canEdit($comment->comment_ID, $comment->comment_post_ID)) {
return true;
}
return false;
}
//Yay, actions.
if (isset($rap_ajaxComment)) {
add_action('admin_menu', 'WPrapAjaxEditComments_ap');
add_action('admin_print_scripts', array(&$rap_ajaxComment, 'addAdminHeaderJS'));
add_action('admin_head', array(&$rap_ajaxComment, 'CSS'));
add_action('wp_print_scripts', array(&$rap_ajaxComment, 'addHeaderJS'));
add_action('wp_head', array(&$rap_ajaxComment, 'CSS'));
add_action('comment_post', array(&$rap_ajaxComment, 'setCommentCookie'));
add_action('activate_wp-ajax-edit-comments/wp-ajax-edit-comments.php', array(&$rap_ajaxComment, 'init'));
//Yay, filters.
add_filter('comment_text', array(&$rap_ajaxComment, 'addCommentDiv'), '1000'); //Low priority so other HTML can be added first
add_filter('get_comment_author_link', array(&$rap_ajaxComment, 'addAuthorSpan'), '1000'); //Low priority so other HTML can be added first
}
?>