$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',
));
$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)
$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);
$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;
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;
$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);
}
}
+ $this->prepareExits($entries);
+
// Walk entry array and insert karma voting line.
for ($i = 0; $i < $elements; $i++) {
$entryid = $eventData[$i]['id'];
$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)) {