]> git.mjollnir.org Git - s9y.git/commitdiff
aggregate exits
authorgarvinhicking <garvinhicking>
Tue, 6 Dec 2005 13:33:15 +0000 (13:33 +0000)
committergarvinhicking <garvinhicking>
Tue, 6 Dec 2005 13:33:15 +0000 (13:33 +0000)
plugins/serendipity_event_karma/serendipity_event_karma.php

index 6ce374dc6df57f6f5eef3ff8f922efb55a50f250..a266411714b540ba510671295c013159425da0ab 100644 (file)
@@ -26,7 +26,7 @@ class serendipity_event_karma extends serendipity_event
         $propbag->add('description',   PLUGIN_KARMA_BLAHBLAH);
         $propbag->add('stackable',     false);
         $propbag->add('author',        'Garvin Hicking');
-        $propbag->add('version',       '1.7');
+        $propbag->add('version',       '1.8');
         $propbag->add('requirements',  array(
             'serendipity' => '0.8',
             'smarty'      => '2.6.7',
@@ -34,7 +34,7 @@ class serendipity_event_karma extends serendipity_event
         ));
         $propbag->add('event_hooks',   array('frontend_configure' => true, 'entry_display' => true, 'css' => true, 'event_additional_statistics' => true));
         $propbag->add('groups', array('STATISTICS'));
-        $propbag->add('configuration', array('karma_active', 'visits_active', 'max_entrytime', 'max_votetime', 'extended_only', 'max_karmatime', 'logging'));
+        $propbag->add('configuration', array('karma_active', 'visits_active', 'exits_active', 'max_entrytime', 'max_votetime', 'extended_only', 'max_karmatime', 'logging'));
     }
 
     function introspect_config_item($name, &$propbag)
@@ -75,6 +75,13 @@ class serendipity_event_karma extends serendipity_event
                 $propbag->add('default', 'true');
                 break;
 
+            case 'exits_active':
+                $propbag->add('type', 'boolean');
+                $propbag->add('name', SHOWS_TOP_EXIT);
+                $propbag->add('description', '');
+                $propbag->add('default', 'false');
+                break;
+
             case 'extended_only':
                 $propbag->add('type', 'boolean');
                 $propbag->add('name', PLUGIN_KARMA_EXTENDEDONLY);
@@ -151,6 +158,52 @@ class serendipity_event_karma extends serendipity_event
         $title       = $this->title;
     }
 
+    function prepareExits($entries, $get = false) {
+        static $exits = null;
+        
+        if ($exits === null) {
+            $q = 'SELECT entry_id, SUM(count) AS exits
+                    FROM ' . $serendipity['dbPrefix'] . 'exits
+                   WHERE entry_id IN (' . implode(', ', $entries) . ') GROUP BY entry_id';
+    
+            $sql = serendipity_db_query($q);
+            $exits = array();
+            if (is_array($sql)) {
+                foreach($sql AS $idx => $row) {
+                    $exits[$row['entry_id']] = (int)$row['exits'];
+                }
+            }
+        }
+        
+        if ($get) {
+            return $exits[$entries];
+        }
+        
+        return true;
+    }
+    
+    function getExits($entryid, $get_prepared = false) {
+        global $serendipity;
+        static $karma_exits = null;
+        
+        if ($karma_exits === null) {
+            $karma_exits = ' | ' . TOP_EXITS . ' (%d)';
+        }
+
+        if ($get_prepared) {
+            $points = $this->prepareExits($entryid, true);
+        } else {
+            $res = serendipity_db_query("SELECT sum(count) AS exits FROM {$serendipity['dbPrefix']}exits WHERE entry_id = " . (int)$entryid . " GROUP BY entry_id", true, 'assoc');
+            if (is_array($res) && isset($res['exits'])) {
+                $points = $res['exits'];
+            } else {
+                $points = 0;
+            }
+        }
+
+        return sprintf($karma_exits, $points);
+    }
+    
     function event_hook($event, &$bag, &$eventData, $addData = null) {
         global $serendipity;
 
@@ -429,6 +482,7 @@ class serendipity_event_karma extends serendipity_event
                         default:
                             $track_clicks  = serendipity_db_bool($this->get_config('visits_active', true));
                             $track_karma   = serendipity_db_bool($this->get_config('karma_active', true));
+                            $track_exits   = serendipity_db_bool($this->get_config('exits_active', true));
                             $karma_active  = $track_karma;
 
                             if (!is_array($eventData)) return;
@@ -482,6 +536,10 @@ class serendipity_event_karma extends serendipity_event
                                     $row['visits'] = 0;
                                 }
 
+                                if ($track_exits) {
+                                    $extended_key .= $this->getExits($entryid);
+                                }
+
                                 $eventData[0]['exflag'] = 1;
                                 if (isset($karma[$entryid])) {
                                     $extended_key .= sprintf($karma_current, $karma[$entryid], $row['points'], $row['votes'], $row['visits'], $url);
@@ -513,6 +571,8 @@ class serendipity_event_karma extends serendipity_event
                                     }
                                 }
 
+                                $this->prepareExits($entries);
+
                                 // Walk entry array and insert karma voting line.
                                 for ($i = 0; $i < $elements; $i++) {
                                     $entryid = $eventData[$i]['id'];
@@ -524,6 +584,10 @@ class serendipity_event_karma extends serendipity_event
                                         $eventData[$i]['add_footer'] = '';
                                     }
 
+                                    if ($track_exits) {
+                                        $eventData[$i]['add_footer'] .= $this->getExits($entryid, true);
+                                    }
+
                                     if (isset($karma[$entryid])) {
                                         $eventData[$i]['add_footer'] .= sprintf($karma_current, $karma[$entryid], $points, $votes, $visits, $url);
                                     } elseif ($eventData[$i]['timestamp'] < ($now - $max_karmatime)) {