From: garvinhicking Date: Tue, 6 Dec 2005 13:33:15 +0000 (+0000) Subject: aggregate exits X-Git-Tag: 1.0~248 X-Git-Url: http://git.mjollnir.org/gw?a=commitdiff_plain;h=f200685867a593eea49256661f9ff37c078457b3;p=s9y.git aggregate exits --- diff --git a/plugins/serendipity_event_karma/serendipity_event_karma.php b/plugins/serendipity_event_karma/serendipity_event_karma.php index 6ce374d..a266411 100644 --- a/plugins/serendipity_event_karma/serendipity_event_karma.php +++ b/plugins/serendipity_event_karma/serendipity_event_karma.php @@ -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)) {