]> git.mjollnir.org Git - s9y.git/commitdiff
commit statistical sidebar plugin
authorgarvinhicking <garvinhicking>
Wed, 7 Dec 2005 10:08:14 +0000 (10:08 +0000)
committergarvinhicking <garvinhicking>
Wed, 7 Dec 2005 10:08:14 +0000 (10:08 +0000)
docs/NEWS
plugins/serendipity_event_statistics/lang_en.inc.php
plugins/serendipity_event_statistics/serendipity_plugin_statistics.php [new file with mode: 0644]

index fdde1bfd37d1c27584703312e33a36b9850a5818..719672906103ea70b297689ce306cdfb762deb6e 100644 (file)
--- a/docs/NEWS
+++ b/docs/NEWS
@@ -3,6 +3,8 @@
 Version 1.0 ()
 ------------------------------------------------------------------------
 
+   * Added sidebar plugin to show statistical data (garvinhicking)
+
    * Changed detection of "last_modified" timestamp, so that the date
      only gets bumped in case of real updates. Thanks to Ivan Cenov!
 
index b68a8c0f6c578af272bbe26f1f624c4a46b93eb1..f5864ae0572d004c4492a194f3468f01f7c1e88b 100644 (file)
@@ -65,7 +65,7 @@
 @define('PLUGIN_EVENT_STATISTICS_EXT_VISITORS', 'Nr of vistors');
 @define('PLUGIN_EVENT_STATISTICS_EXT_VISTODAY', 'Nr of vistors today');
 @define('PLUGIN_EVENT_STATISTICS_EXT_VISTOTAL', 'Total nr of vistors');
-@define('PLUGIN_EVENT_STATISTICS_EXT_VISSINCE', 'The extended visitors statistic feature has collected data since');
+@define('PLUGIN_EVENT_STATISTICS_EXT_VISSINCE', 'The extended visitors statistic feature has collected data since');
 @define('PLUGIN_EVENT_STATISTICS_EXT_VISLATEST', 'Latest Visitors');
 @define('PLUGIN_EVENT_STATISTICS_EXT_TOPREFS', 'Top Referrers');
 @define('PLUGIN_EVENT_STATISTICS_EXT_TOPREFS_NONE', 'No referrers has yet been registered.');
 @define('PLUGIN_EVENT_STATISTICS_BANNED_HOSTS', 'Ban browsers from beeing counted');
 @define('PLUGIN_EVENT_STATISTICS_BANNED_HOSTS_DESC', 'Insert browsers that should be excluded from counting, separated by "|"');
 
-?>
+@define('PLUGIN_EVENT_STATISTICS_SHOW_LASTENTRY', 'Show date of last entry');
+@define('PLUGIN_EVENT_STATISTICS_SHOW_ENTRYCOUNT', 'Show number of entries');
+@define('PLUGIN_EVENT_STATISTICS_SHOW_COMMENTCOUNT', 'Show number of comments');
+@define('PLUGIN_EVENT_STATISTICS_SHOW_MONTHVISITORS', 'Show visitors this month');
+@define('PLUGIN_EVENT_STATISTICS_SHOW_CACHETIMEOUT', 'Cache timeout');
+@define('PLUGIN_EVENT_STATISTICS_SHOW_CACHETIMEOUT_DESC', 'How long may the statistics be shown before they get refreshed? Setting this to a high number of minutes will improve performance, but might not reflect the actual data if set too high.');
+@define('PLUGIN_EVENT_STATISTICS_TEXT', 'Formatting text');
+@define('PLUGIN_EVENT_STATISTICS_TEXT_DESC', 'Use %s as placeholder for the number/text');
+@define('PLUGIN_EVENT_STATISTICS_TEXT_LASTENTRY', 'Last entry: %s');
+@define('PLUGIN_EVENT_STATISTICS_TEXT_ENTRYCOUNT', '%s entries written');
+@define('PLUGIN_EVENT_STATISTICS_TEXT_COMMENTCOUNT', '%s comments have been made');
+@define('PLUGIN_EVENT_STATISTICS_TEXT_MONTHVISITORS', '%s visitor(s) this month');
diff --git a/plugins/serendipity_event_statistics/serendipity_plugin_statistics.php b/plugins/serendipity_event_statistics/serendipity_plugin_statistics.php
new file mode 100644 (file)
index 0000000..3bb0428
--- /dev/null
@@ -0,0 +1,180 @@
+<?php # $Id: serendipity_plugin_comments.php 691 2005-11-13 06:58:40Z elf2000 $
+
+// Probe for a language include with constants. Still include defines later on, if some constants were missing
+$probelang = dirname(__FILE__) . '/' . $serendipity['charset'] . 'lang_' . $serendipity['lang'] . '.inc.php';
+if (file_exists($probelang)) {
+    include $probelang;
+}
+
+include dirname(__FILE__) . '/lang_en.inc.php';
+
+class serendipity_plugin_statistics extends serendipity_plugin
+{
+    var $title = PLUGIN_EVENT_STATISTICS_NAME;
+
+    function introspect(&$propbag)
+    {
+        global $serendipity;
+
+        $this->title = $this->get_config('title', $this->title);
+
+        $propbag->add('name',          PLUGIN_EVENT_STATISTICS_NAME);
+        $propbag->add('description',   PLUGIN_EVENT_STATISTICS_NAME);
+        $propbag->add('stackable',     true);
+        $propbag->add('author',        'Garvin Hicking');
+        $propbag->add('version',       '1.0');
+        $propbag->add('requirements',  array(
+            'serendipity' => '0.8',
+            'smarty'      => '2.6.7',
+            'php'         => '4.1.0'
+        ));
+        $propbag->add('groups', array('STATISTICS'));
+        $propbag->add('configuration', array(
+                                             'title',
+                                             'show_lastentry',
+                                             'text_lastentry',
+                                             'show_entrycount',
+                                             'text_entrycount',
+                                             'show_commentcount',
+                                             'text_commentcount',
+                                             'show_monthvisitors',
+                                             'text_monthvisitors',
+                                             'cachetimeout'
+        ));
+    }
+
+    function introspect_config_item($name, &$propbag)
+    {
+        switch($name) {
+
+            case 'cachetimeout':
+                $propbag->add('type',        'string');
+                $propbag->add('name',        PLUGIN_EVENT_STATISTICS_SHOW_CACHETIMEOUT);
+                $propbag->add('description', PLUGIN_EVENT_STATISTICS_SHOW_CACHETIMEOUT_DESC);
+                $propbag->add('default',     60);
+                break;
+
+            case 'show_lastentry':
+                $propbag->add('type',        'boolean');
+                $propbag->add('name',        PLUGIN_EVENT_STATISTICS_SHOW_LASTENTRY);
+                $propbag->add('description', '');
+                $propbag->add('default',     true);
+                break;
+
+            case 'show_entrycount':
+                $propbag->add('type',        'boolean');
+                $propbag->add('name',        PLUGIN_EVENT_STATISTICS_SHOW_ENTRYCOUNT);
+                $propbag->add('description', '');
+                $propbag->add('default',     true);
+                break;
+
+            case 'show_commentcount':
+                $propbag->add('type',        'boolean');
+                $propbag->add('name',        PLUGIN_EVENT_STATISTICS_SHOW_COMMENTCOUNT);
+                $propbag->add('description', '');
+                $propbag->add('default',     true);
+                break;
+
+            case 'show_monthvisitors':
+                $propbag->add('type',        'boolean');
+                $propbag->add('name',        PLUGIN_EVENT_STATISTICS_SHOW_MONTHVISITORS);
+                $propbag->add('description', '');
+                $propbag->add('default',     true);
+                break;
+
+            case 'text_lastentry':
+                $propbag->add('type',        'string');
+                $propbag->add('name',        PLUGIN_EVENT_STATISTICS_TEXT);
+                $propbag->add('description', PLUGIN_EVENT_STATISTICS_TEXT_DESC);
+                $propbag->add('default',     PLUGIN_EVENT_STATISTICS_TEXT_LASTENTRY);
+                break;
+
+            case 'text_entrycount':
+                $propbag->add('type',        'string');
+                $propbag->add('name',        PLUGIN_EVENT_STATISTICS_TEXT);
+                $propbag->add('description', PLUGIN_EVENT_STATISTICS_TEXT_DESC);
+                $propbag->add('default',     PLUGIN_EVENT_STATISTICS_TEXT_ENTRYCOUNT);
+                break;
+
+            case 'text_commentcount':
+                $propbag->add('type',        'string');
+                $propbag->add('name',        PLUGIN_EVENT_STATISTICS_TEXT);
+                $propbag->add('description', PLUGIN_EVENT_STATISTICS_TEXT_DESC);
+                $propbag->add('default',     PLUGIN_EVENT_STATISTICS_TEXT_COMMENTCOUNT);
+                break;
+
+            case 'text_monthvisitors':
+                $propbag->add('type',        'string');
+                $propbag->add('name',        PLUGIN_EVENT_STATISTICS_TEXT);
+                $propbag->add('description', PLUGIN_EVENT_STATISTICS_TEXT_DESC);
+                $propbag->add('default',     PLUGIN_EVENT_STATISTICS_TEXT_MONTHVISITORS);
+                break;
+
+            case 'title':
+                $propbag->add('type',        'string');
+                $propbag->add('name',        TITLE);
+                $propbag->add('description', '');
+                $propbag->add('default',     PLUGIN_EVENT_STATISTICS_NAME);
+                break;
+
+            default:
+                    return false;
+        }
+        return true;
+    }
+
+    function generate_content(&$title)
+    {
+        global $serendipity;
+        $title       = $this->get_config('title', $this->title);
+        $cachetime   = $this->get_config('cachetimeout', 60) * 60; // turn to seconds
+        $cachef      = $serendipity['serendipityPath'] . 'templates_c/statistics_cache.html';
+        
+        if (!file_exists($cachef) || filesize($cachef) == 0 || filemtime($cachef) < (time() - $cachetime)) {
+            // Create statistics
+            
+            $content = '';
+            if (serendipity_db_bool($this->get_config('show_lastentry'))) {
+                $res = serendipity_db_query("SELECT timestamp FROM {$serendipity['dbPrefix']}entries WHERE isdraft = 'false' AND timestamp <= " . time() . " ORDER BY timestamp DESC LIMIT 1", true, 'assoc');
+                if (is_array($res) && isset($res['timestamp'])) {
+                    $content .= '<div class="stat_lastentry">' . sprintf($this->get_config('text_lastentry'), '<span class="stat_string">' . htmlspecialchars(serendipity_strftime(DATE_FORMAT_SHORT, $res['timestamp'])) . '</span>') . "</div>\n";
+                }
+            }
+
+            if (serendipity_db_bool($this->get_config('show_entrycount'))) {
+                $res = serendipity_db_query("SELECT count(id) as entrycount FROM {$serendipity['dbPrefix']}entries WHERE isdraft = 'false' AND timestamp <= " . time(), true, 'assoc');
+                if (is_array($res) && isset($res['entrycount'])) {
+                    $content .= '<div class="stat_entrycount">' . sprintf($this->get_config('text_entrycount'), '<span class="stat_number">' . $res['entrycount'] . '</span>') . "</div>\n";
+                }
+            }
+
+            if (serendipity_db_bool($this->get_config('show_commentcount'))) {
+                $res = serendipity_db_query("SELECT count(id) AS commentcount FROM {$serendipity['dbPrefix']}comments WHERE type = 'NORMAL' AND status = 'approved'", true, 'assoc');
+                if (is_array($res) && isset($res['commentcount'])) {
+                    $content .= '<div class="stat_commentcount">' . sprintf($this->get_config('text_commentcount'), '<span class="stat_number">' . $res['commentcount'] . '</span>') . "</div>\n";
+                }
+            }
+
+            if (serendipity_db_bool($this->get_config('show_monthvisitors'))) {
+                $res = serendipity_db_query("SELECT count(counter_id) AS monthvisitors FROM {$serendipity['dbPrefix']}visitors WHERE day LIKE '" . date('%Y-%m') . "-%'", true, 'assoc');
+                if (is_array($res) && isset($res['monthvisitors'])) {
+                    $content .= '<div class="stat_monthvisitors">' . sprintf($this->get_config('text_monthvisitors'), '<span class="stat_number">' . $res['monthvisitors'] . '</span>') . "</div>\n";
+                }
+            }
+
+            // Write cache
+            $fp = @fopen($cachef, 'w');
+            if ($fp) {
+                fwrite($fp, $content);
+                fclose($fp);
+            }
+        } else {
+            // Read from cache
+            $content = @file_get_contents($cachef);
+        }
+
+        echo $content;
+    }
+}
+
+/* vim: set sts=4 ts=4 expandtab : */