This patch adds a delete button to comments when the user is an admin.  It 
will need to be modified slightly when application maintainers are added to 
appdb.  The hope is that we can start to clear the stale comments out of the 
database to increase the signal-to-noise.

After deleting the comment the parentId of the child comments are adjusted to 
be the parentId of the deleted comment.

I'm still a php rookie, comments, questions are welcome ;-)

Chris

Index: include/comments.php
===================================================================
RCS file: /home/wine/appdb/include/comments.php,v
retrieving revision 1.2
diff -u -r1.2 comments.php
--- include/comments.php	24 Mar 2004 19:30:36 -0000	1.2
+++ include/comments.php	18 Oct 2004 00:47:15 -0000
@@ -63,7 +63,22 @@
     echo "	[<a href='addcomment.php?appId=$ob->appId&versionId=$ob->versionId&subject=".
 	        urlencode("$subject")."&thread=$ob->commentId'><small>reply to this</small></a>] \n";
 
-    echo "</td></tr></table>\n";
+    echo "</td></tr>\n";
+
+    // delete message button, for admins
+    //TODO: application managers should also see this button
+    if(havepriv("admin"))
+    {
+        echo "<tr>";
+        echo '<td><form method=post name=message action="deletecomment.php"><input type=submit value="Delete" class=button> ',"\n";
+        echo "<input type=hidden name='commentId' value=$ob->commentId>";
+        echo "<input type=hidden name='appId' value=$ob->appId>";
+        echo "<input type=hidden name='versionId' value=$ob->versionId></form></td>","\n";
+        echo "</td></tr>";
+    }
+
+    echo "</table>\n";
+
     echo html_frame_end();
         
 }
--- /dev/null	2004-08-19 19:23:11.000000000 -0400
+++ deletecomment.php	2004-10-17 20:44:18.000000000 -0400
@@ -0,0 +1,53 @@
+<?
+
+include("path.php");
+require(BASE."include/"."incl.php");
+
+//FIXME: should check to see if the user is an application maintainer when we have application maintainers
+if(!havepriv("admin"))
+{
+    errorpage('You don\'t have admin privilages');
+    exit;
+}
+
+opendb();
+
+$commentId = strip_tags($_POST['commentId']);
+$commentId = mysql_escape_string($commentId);
+
+$appId = strip_tags($_POST['appId']);
+$versionId = strip_tags($_POST['versionId']);
+
+/* retrieve the parentID of the comment we are deleting */
+/* so we can fix up the parentIds of this comments children */
+$result = mysql_query("SELECT parentId FROM appComments WHERE commentId = '$commentId'");
+if (!$result)
+{
+    errorpage('Internal error retrieving parent of commentId');
+    exit;
+}
+
+$ob = mysql_fetch_object($result);
+$deletedParentId = $ob->parentId;
+
+/* delete the comment from the database */
+$result = mysql_query("DELETE FROM appComments WHERE commentId = '$commentId'");
+
+if (!$result)
+{
+    errorpage('Internal Database Access Error',mysql_error());
+    exit;
+}
+
+/* fixup the child comments so the parentId points to a valid parent comment */
+$result = mysql_query("UPDATE appComments set parentId = '$deletedParentId' WHERE parentId = '$commentId'");
+if(!$result)
+{
+    errorpage('Internal database error fixing up the parentId of child comments');
+    exit;
+}
+
+addmsg("Comment deleted", "green");
+redirect(apidb_fullurl("appview.php?appId=$appId&versionId=$versionId"));
+
+?>

Reply via email to