Fixed and cleaned up 1.0
authorDan Fuhry <dan@enanocms.org>
Fri, 30 Jul 2010 23:03:33 -0400
changeset 1 87ba86c9d5a6
parent 0 6904847e956b
child 2 75450c27099a
Fixed and cleaned up
karma.php
--- a/karma.php	Fri Jul 30 23:03:02 2010 -0400
+++ b/karma.php	Fri Jul 30 23:03:33 2010 -0400
@@ -2,7 +2,7 @@
 /**!info**
 {
   "Plugin Name"  : "Karma",
-  "Plugin URI"   : "http://example.com/",
+  "Plugin URI"   : "http://enanocms.org/plugin/karma",
   "Description"  : "Karma is a plugin that enables in the user page a voting system, to evaluate the popularity of each member.",
   "Author"       : "Adriano Pereira",
   "Version"      : "1.0",
@@ -21,13 +21,15 @@
   {  
 
   // If the user votes, get the vote
-  $vote = @$_GET['vote'];
+  $vote = !empty($_GET['vote']) && in_array($_GET['vote'], array('Yes', 'No'))
+            ? $_GET['vote']
+            : null;
   
   // Get the user_id from the user that is voting
   $user_voting_id = $session->user_id;
   
   // Find the page_id that is the username of the current user page and gets the user_id from database
-  $username = $paths->page_id;
+  $username = str_replace('_', ' ', dirtify_page_id($paths->page_id));
   
   $q = $db->sql_query('SELECT user_id FROM '. table_prefix. "users WHERE username = '$username'");
   if ( !$q )
@@ -36,7 +38,7 @@
   $user_voted_id = $voted['user_id'];
   
   // Retrieves from database the total votes, yes votes, no votes and the karma from user
-  $q = $db->sql_query('SELECT karma, karma_total_votes, karma_yes_votes, karma_no_votes FROM '. table_prefix."users_extra WHERE user_id = '$user_voted_id'");
+  $q = $db->sql_query('SELECT karma_yes_votes, karma_no_votes, (karma_yes_votes + karma_no_votes) AS karma_total_votes, (karma_yes_votes - karma_no_votes) AS karma FROM '. table_prefix."users_extra WHERE user_id = '$user_voted_id'");
   if ( !$q )
     $db->_die();
   $karma_info = $db->fetchrow();
@@ -50,78 +52,86 @@
   if ( !$q )
     $db->_die();
   $num_votes = $db->numrows();
+  $db->free_result();
   
   // If the user that votes and the user voted id is equal or the user has already voted, displays the commom page
-  if ($user_voting_id == $user_voted_id) goto commom_page_title; 
   
-  if ($num_votes == 0 && empty($vote)) goto vote;
+  // If we're on our own user page, block voting
+  $same_user = $user_voting_id === $user_voted_id;
   
-  if ($num_votes != 0) goto commom_page_title;
-
-  // Know if the vote is yes or no and do the respective action in database
-  if ($vote == 'Yes')
-  {
-	$karma = $karma + 1;
-	$total_votes = $total_votes + 1;
-	$yes_votes = $yes_votes + 1;
-	$q = $db->sql_query('INSERT INTO '. table_prefix."karma (user_voting_id, user_voted_id) VALUES ('$user_voting_id', '$user_voted_id')");
-	if ( !$q )
-      $db->_die();
-	$q = $db->sql_query('UPDATE '. table_prefix."users_extra SET karma = '$karma', karma_total_votes = '$total_votes', karma_yes_votes = '$yes_votes' WHERE user_id = '$user_voted_id'");
-    if ( !$q )
-      $db->_die();  
-  }  
-  elseif ($vote == 'No')
+  // If we have not yet voted on this user, allow that to take place below
+  $can_vote = $num_votes == 0 && !$same_user && $session->user_level >= USER_LEVEL_MEMBER;
+  
+  echo "<th colspan='4'>$username's karma</th>";
+  
+  $did_vote = false;
+  if ( $can_vote )
   {
-	$karma = $karma - 1;
-	$total_votes = $total_votes + 1;
-	$no_votes = $no_votes + 1;
-	$q = $db->sql_query('INSERT INTO '. table_prefix."karma (user_voting_id, user_voted_id) VALUES ('$user_voting_id', '$user_voted_id')");
-	if ( !$q )
-      $db->_die();
-	$q = $db->sql_query('UPDATE '. table_prefix."users_extra SET karma = '$karma', karma_total_votes = '$total_votes', karma_no_votes = '$no_votes' WHERE user_id = '$user_voted_id'");
-	if ( !$q )
-      $db->_die();	
+    // Know if the vote is yes or no and do the respective action in database
+    $increment_col = !empty($vote) && $vote == 'Yes' ? 'karma_yes_votes' : 'karma_no_votes';
+    if ( !empty($vote) )
+    {
+      $q = $db->sql_query('INSERT INTO '. table_prefix."karma (user_voting_id, user_voted_id) VALUES ('$user_voting_id', '$user_voted_id')");
+      if ( !$q )
+        $db->_die();
+      $q = $db->sql_query('UPDATE '. table_prefix."users_extra SET $increment_col = $increment_col + 1");
+        if ( !$q )
+          $db->_die();
+        
+      if ( $vote == 'Yes' )
+        $yes_votes++;
+      else
+        $no_votes++;
+        
+      // recalculate
+      $karma = $yes_votes - $no_votes;
+      $total_votes = $yes_votes + $no_votes;
+      
+      $did_vote = true;
+    }
+    else
+    {
+      // Label to commom page title
+      echo <<<EOF
+        <tr>
+        <td colspan="4" class="row3" style="text-align: center;">
+        <b>Do you like me?</b><br/>
+        <form action="">
+          <input type="submit" value="Yes" name="vote" style="background-color: #00CA00; border: 2px solid #000000; width: 40px; color: #FFFFFF; font-size: 14px; text-align:center;">
+          <input type="submit" value="No" name="vote" style="background-color: #FA1205; border: 2px solid #000000; width: 40px; color: #FFFFFF; font-size: 14px; text-align:center;">
+        </form>
+      </tr>
+EOF;
+    }
   }
-  else commom_page_title;
-  
-  // Label to commom page title
-  commom_page_title:
-?>
- <th colspan="4"><?php echo $username."'s karma"; goto commom_page;?></th>
-	<?php
-	vote:
-	echo "<th colspan='4'>". $username."'s karma</th>";
-	echo <<<EOF
-		<tr>
-		<td colspan="4" class="row3" style="text-align: center;">
-		<b>Do you like me?</b><br/>
-		<form action=''>
-			<input type="submit" value="Yes" name="vote" style="background-color: #00CA00; border: 2px solid #000000; width: 40px; color: #FFFFFF; font-size: 14px; text-align:center;">
-			<input type="submit" value="No" name="vote" style="background-color: #FA1205; border: 2px solid #000000; width: 40px; color: #FFFFFF; font-size: 14px; text-align:center;">
-		</form>
-	</tr>
-EOF;
   
   // Label to commom page content and page content
-  commom_page:
   
   if ($karma < 0)
   {
-	$karma_color = '#FA1205';
+	  $karma_color = '#FA1205';
   }
   elseif ($karma > 0)
   { 
-   $karma_color = '#00CA00';
+    $karma_color = '#00CA00';
   }
   else
-   {
-   $karma_color = '#000000';
+  {
+    $karma_color = '#000000';
   }
 ?>
+  <?php if ( $did_vote ): ?>
+    <tr>
+      <td colspan="4" class="row3">
+        <div class="info-box-mini">Thanks for voting for this user's karma.</div>
+      </td>
+    </tr>
+  <?php endif; ?>
+    
 	<tr>
+	
 		<td colspan="2" class="row1">
-			Your Karma is: <font color="<?php echo $karma_color;?>"><?php echo $karma;?><br/></font>
+      Your Karma is: <span style="color: <?php echo $karma_color; ?>;"><?php echo $karma;?><br/></font>
 		</td>
 		
 		<td colspan="2" class="row2">
@@ -142,17 +152,13 @@
   PRIMARY KEY ( vote_id )
  ) ENGINE=`MyISAM` CHARSET=`UTF8` COLLATE=`utf8_bin`;
  
-ALTER TABLE {{TABLE_PREFIX}}users_extra ADD COLUMN karma int(12) DEFAULT 0;
-ALTER TABLE {{TABLE_PREFIX}}users_extra ADD COLUMN karma_total_votes int(12) DEFAULT 0;
-ALTER TABLE {{TABLE_PREFIX}}users_extra ADD COLUMN karma_yes_votes int(12) DEFAULT 0;
-ALTER TABLE {{TABLE_PREFIX}}users_extra ADD COLUMN karma_no_votes int(12) DEFAULT 0;
+ALTER TABLE {{TABLE_PREFIX}}users_extra ADD COLUMN karma_yes_votes int(12) NOT NULL DEFAULT 0;
+ALTER TABLE {{TABLE_PREFIX}}users_extra ADD COLUMN karma_no_votes int(12) NOT NULL DEFAULT 0;
 
 **!*/
 
 /**!uninstall **
 DROP TABLE {{TABLE_PREFIX}}karma;
-ALTER TABLE {{TABLE_PREFIX}}users_extra DROP karma;
-ALTER TABLE {{TABLE_PREFIX}}users_extra DROP karma_total_votes;
 ALTER TABLE {{TABLE_PREFIX}}users_extra DROP karma_yes_votes;
 ALTER TABLE {{TABLE_PREFIX}}users_extra DROP karma_no_votes;
 **!*/