[pLog-svn] r779 - in plugins/trunk: . nofollow nofollow/class nofollow/class/action nofollow/locale nofollow/templates recentcomments recentcomments/class recentcomments/class/action recentcomments/locale recentcomments/templates recenttrackbacks recenttrackbacks/class recenttrackbacks/class/action recenttrackbacks/locale recenttrackbacks/templates topcommentposts topcommentposts/class topcommentposts/class/action topcommentposts/locale topcommentposts/templates topcommentvisitors topcommentvisitors/class topcommentvisitors/class/action topcommentvisitors/locale topcommentvisitors/templates topreadposts topreadposts/class topreadposts/class/action topreadposts/locale topreadposts/templates toptrackbackposts toptrackbackposts/class toptrackbackposts/class/action toptrackbackposts/locale toptrackbackposts/templates

mark at devel.plogworld.net mark at devel.plogworld.net
Thu Jan 20 16:06:26 GMT 2005


Author: mark
Date: 2005-01-20 16:06:26 +0000 (Thu, 20 Jan 2005)
New Revision: 779

Added:
   plugins/trunk/nofollow/
   plugins/trunk/nofollow/class/
   plugins/trunk/nofollow/class/action/
   plugins/trunk/nofollow/class/action/pluginnofollowconfigaction.class.php
   plugins/trunk/nofollow/class/action/pluginnofollowupdateconfigaction.class.php
   plugins/trunk/nofollow/locale/
   plugins/trunk/nofollow/locale/locale_en_UK.php
   plugins/trunk/nofollow/locale/locale_zh_TW.php
   plugins/trunk/nofollow/pluginnofollow.class.php
   plugins/trunk/nofollow/templates/
   plugins/trunk/nofollow/templates/nofollow.template
   plugins/trunk/recentcomments/
   plugins/trunk/recentcomments/class/
   plugins/trunk/recentcomments/class/action/
   plugins/trunk/recentcomments/class/action/pluginrecentcommentsconfigaction.class.php
   plugins/trunk/recentcomments/class/action/pluginrecentcommentsupdateconfigaction.class.php
   plugins/trunk/recentcomments/locale/
   plugins/trunk/recentcomments/locale/locale_en_UK.php
   plugins/trunk/recentcomments/locale/locale_zh_TW.php
   plugins/trunk/recentcomments/pluginrecentcomments.class.php
   plugins/trunk/recentcomments/templates/
   plugins/trunk/recentcomments/templates/recentcomments.template
   plugins/trunk/recenttrackbacks/
   plugins/trunk/recenttrackbacks/class/
   plugins/trunk/recenttrackbacks/class/action/
   plugins/trunk/recenttrackbacks/class/action/pluginrecenttrackbacksconfigaction.class.php
   plugins/trunk/recenttrackbacks/class/action/pluginrecenttrackbacksupdateconfigaction.class.php
   plugins/trunk/recenttrackbacks/locale/
   plugins/trunk/recenttrackbacks/locale/locale_en_UK.php
   plugins/trunk/recenttrackbacks/locale/locale_zh_TW.php
   plugins/trunk/recenttrackbacks/pluginrecenttrackbacks.class.php
   plugins/trunk/recenttrackbacks/templates/
   plugins/trunk/recenttrackbacks/templates/recenttrackbacks.template
   plugins/trunk/topcommentposts/
   plugins/trunk/topcommentposts/class/
   plugins/trunk/topcommentposts/class/action/
   plugins/trunk/topcommentposts/class/action/plugintopcommentpostsconfigaction.class.php
   plugins/trunk/topcommentposts/class/action/plugintopcommentpostsupdateconfigaction.class.php
   plugins/trunk/topcommentposts/locale/
   plugins/trunk/topcommentposts/locale/locale_en_UK.php
   plugins/trunk/topcommentposts/locale/locale_zh_TW.php
   plugins/trunk/topcommentposts/plugintopcommentposts.class.php
   plugins/trunk/topcommentposts/templates/
   plugins/trunk/topcommentposts/templates/topcommentposts.template
   plugins/trunk/topcommentvisitors/
   plugins/trunk/topcommentvisitors/class/
   plugins/trunk/topcommentvisitors/class/action/
   plugins/trunk/topcommentvisitors/class/action/plugintopcommentvisitorsconfigaction.class.php
   plugins/trunk/topcommentvisitors/class/action/plugintopcommentvisitorsupdateconfigaction.class.php
   plugins/trunk/topcommentvisitors/locale/
   plugins/trunk/topcommentvisitors/locale/locale_en_UK.php
   plugins/trunk/topcommentvisitors/locale/locale_zh_TW.php
   plugins/trunk/topcommentvisitors/plugintopcommentvisitors.class.php
   plugins/trunk/topcommentvisitors/templates/
   plugins/trunk/topcommentvisitors/templates/topcommentvisitors.template
   plugins/trunk/topreadposts/
   plugins/trunk/topreadposts/class/
   plugins/trunk/topreadposts/class/action/
   plugins/trunk/topreadposts/class/action/plugintopreadpostsconfigaction.class.php
   plugins/trunk/topreadposts/class/action/plugintopreadpostsupdateconfigaction.class.php
   plugins/trunk/topreadposts/locale/
   plugins/trunk/topreadposts/locale/locale_en_UK.php
   plugins/trunk/topreadposts/locale/locale_zh_TW.php
   plugins/trunk/topreadposts/plugintopreadposts.class.php
   plugins/trunk/topreadposts/templates/
   plugins/trunk/topreadposts/templates/topreadposts.template
   plugins/trunk/toptrackbackposts/
   plugins/trunk/toptrackbackposts/class/
   plugins/trunk/toptrackbackposts/class/action/
   plugins/trunk/toptrackbackposts/class/action/plugintoptrackbackpostsconfigaction.class.php
   plugins/trunk/toptrackbackposts/class/action/plugintoptrackbackpostsupdateconfigaction.class.php
   plugins/trunk/toptrackbackposts/locale/
   plugins/trunk/toptrackbackposts/locale/locale_en_UK.php
   plugins/trunk/toptrackbackposts/locale/locale_zh_TW.php
   plugins/trunk/toptrackbackposts/plugintoptrackbackposts.class.php
   plugins/trunk/toptrackbackposts/templates/
   plugins/trunk/toptrackbackposts/templates/toptrackbackposts.template
Log:
Plugins for 1.0

Added: plugins/trunk/nofollow/class/action/pluginnofollowconfigaction.class.php
===================================================================
--- plugins/trunk/nofollow/class/action/pluginnofollowconfigaction.class.php	2005-01-20 16:04:28 UTC (rev 778)
+++ plugins/trunk/nofollow/class/action/pluginnofollowconfigaction.class.php	2005-01-20 16:06:26 UTC (rev 779)
@@ -0,0 +1,32 @@
+<?php
+
+	include_once( PLOG_CLASS_PATH."class/action/admin/adminaction.class.php" );
+	include_once( PLOG_CLASS_PATH."class/view/admin/adminplugintemplatedview.class.php" );	
+
+	/**
+	 * shows a form with the current configuration
+	 */
+	class PluginNoFollowConfigAction extends AdminAction
+	{
+		
+		function PluginNoFollowConfigAction( $actionInfo, $request )
+		{
+			$this->AdminAction( $actionInfo, $request );
+		}
+		
+		function perform()
+		{
+			// load some configuration settings
+			$blogSettings = $this->_blogInfo->getSettings();
+			$pluginEnabled = $blogSettings->getValue( "plugin_nofollow_enabled" );
+			
+			// create a view and export the settings to the template
+			$this->_view = new AdminPluginTemplatedView( $this->_blogInfo, "nofollow", "nofollow", true );
+			$this->_view->setValue( "pluginEnabled", $pluginEnabled );
+			
+			$this->setCommonData();
+			
+			return true;
+		}
+	}
+?>
\ No newline at end of file

Added: plugins/trunk/nofollow/class/action/pluginnofollowupdateconfigaction.class.php
===================================================================
--- plugins/trunk/nofollow/class/action/pluginnofollowupdateconfigaction.class.php	2005-01-20 16:04:28 UTC (rev 778)
+++ plugins/trunk/nofollow/class/action/pluginnofollowupdateconfigaction.class.php	2005-01-20 16:06:26 UTC (rev 779)
@@ -0,0 +1,56 @@
+<?php
+
+	include_once( PLOG_CLASS_PATH."class/action/admin/adminaction.class.php" );
+    include_once( PLOG_CLASS_PATH."class/view/admin/adminerrorview.class.php" );
+	include_once( PLOG_CLASS_PATH."class/view/admin/adminmessageview.class.php" );
+		
+	/**
+	 * updates the plugin configuration
+	 */
+	class PluginNoFollowUpdateConfigAction extends AdminAction
+	{
+		var $_pluginEnabled;
+		
+		function PluginNoFollowUpdateConfigAction( $actionInfo, $request )
+		{
+			$this->AdminAction( $actionInfo, $request );
+		}
+		
+		function validate()
+		{
+            $this->_pluginEnabled = $this->_request->getValue( "pluginEnabled" );
+            $this->_pluginEnabled = ($this->_pluginEnabled != "" );			
+			
+			return true;
+		}
+		        
+		function perform()
+		{
+            // and check which smiley set we should be using, or if none, then the default one
+			$blogSettings = $this->_blogInfo->getSettings();
+            $blogSettings->setValue( "plugin_nofollow_enabled", $this->_pluginEnabled );
+            $this->_blogInfo->setSettings( $blogSettings ); 
+		
+			// save the blogs settings
+			$blogs = new Blogs();
+            if( !$blogs->updateBlog( $this->_blogInfo->getId(), $this->_blogInfo )) {
+                $this->_view = new AdminErrorView( $this->_blogInfo );
+                $this->_view->setValue( "message", $this->_locale->tr("error_updating_settings"));
+                $this->setCommonData();
+
+                return false;
+            }
+			
+			// if everything went ok...
+            $this->_blogInfo->setSettings( $blogSettings );
+            $this->_session->setValue( "blogInfo", $this->_blogInfo );
+            $this->saveSession();
+			
+			$this->_view = new AdminMessageView( $this->_blogInfo );
+			$this->_view->setMessage( $this->_locale->tr("nofollow_settings_saved_ok"));
+			$this->setCommonData();
+            
+            return true;		
+		}
+	}
+?>
\ No newline at end of file

Added: plugins/trunk/nofollow/locale/locale_en_UK.php
===================================================================
--- plugins/trunk/nofollow/locale/locale_en_UK.php	2005-01-20 16:04:28 UTC (rev 778)
+++ plugins/trunk/nofollow/locale/locale_en_UK.php	2005-01-20 16:06:26 UTC (rev 779)
@@ -0,0 +1,6 @@
+<?php
+$messages["nofollow_plugin_configuration"] = "Configuration this plugin";
+$messages["nofollow_plugin_enabled"] = "Enable this plugin";
+$messages["nofollow_plugin"] = "No Follow Plugin";
+$messages["nofollow_settings_saved_ok"] = "No Follow settings saved successfully!";
+?>
\ No newline at end of file

Added: plugins/trunk/nofollow/locale/locale_zh_TW.php
===================================================================
--- plugins/trunk/nofollow/locale/locale_zh_TW.php	2005-01-20 16:04:28 UTC (rev 778)
+++ plugins/trunk/nofollow/locale/locale_zh_TW.php	2005-01-20 16:06:26 UTC (rev 779)
@@ -0,0 +1,6 @@
+<?php
+$messages["nofollow_plugin_configuration"] = "外掛程式設定";
+$messages["nofollow_plugin_enabled"] = "啟動外掛程式";
+$messages["nofollow_plugin"] = "No Follow 外掛程式";
+$messages["nofollow_settings_saved_ok"] = "No Follow 設定儲存成功。";
+?>
\ No newline at end of file

Added: plugins/trunk/nofollow/pluginnofollow.class.php
===================================================================
--- plugins/trunk/nofollow/pluginnofollow.class.php	2005-01-20 16:04:28 UTC (rev 778)
+++ plugins/trunk/nofollow/pluginnofollow.class.php	2005-01-20 16:06:26 UTC (rev 779)
@@ -0,0 +1,88 @@
+<?php
+	include_once( PLOG_CLASS_PATH."class/plugin/pluginbase.class.php" );
+	include_once( PLOG_CLASS_PATH."class/plugin/pluginmanager.class.php" );
+	include_once( PLOG_CLASS_PATH."class/plugin/eventpluginbase.class.php" );
+
+	class PluginNoFollow extends PluginBase
+	{
+		function PluginNoFollow()
+		{
+			$this->PluginBase();
+
+			$this->id      = "nofollow";
+			$this->author  = "Minstrel Chiu";
+			$this->desc    = "Prevents comment spams with 'rel=nofollow'";
+
+			$this->locales = Array( "en_UK" , "zh_TW" );
+
+			$this->init();
+		}
+
+		function init()
+		{
+            $this->registerAdminAction( "nofollow", "PluginNoFollowConfigAction" );
+			$this->registerAdminAction( "updateNoFollowConfig", "PluginNoFollowUpdateConfigAction" );
+			
+			$menu =& Menu::getMenu();
+			if( !$menu->entryExists( "/menu/controlCenter/manageSpamActivities" ))						
+				$this->addMenuEntry( "/menu/controlCenter", "manageSpamActivities", "", "", true, false );			
+            $this->addMenuEntry( "/menu/controlCenter/manageSpamActivities", "NoFollow", "?op=nofollow", "" );            
+
+			$this->registerNotification( EVENT_PRE_COMMENT_ADD );
+		}
+
+		function process($eventType, $params)
+		{
+            if ( $eventType != EVENT_PRE_COMMENT_ADD )
+                return true;
+                
+		    $blogSettings = $this->blogInfo->getSettings();
+		    $pluginEnabled = $blogSettings->getValue( "plugin_nofollow_enabled" );
+            if ( $pluginEnabled != 1 )
+                return true;
+
+			$comment = $params["comment"];
+
+			$text = $comment->getText();
+			$text = $this->nofollow($text);
+
+			$comment->setText($text);
+
+			$params["comment"] = $comment;
+
+			return true;
+		}
+
+		function nofollow($text)
+		{
+			if(!isset($text))
+				return $text;
+
+			return preg_replace_callback('#<a\s([^>]*\s*href\s*=[^>]*)>#i', array(&$this, 'nofollow_process'), $text);
+		}
+
+		function nofollow_process($matches)
+		{
+			$text = $matches[1];
+
+			preg_match_all('/[^=[:space:]]*\s*=\s*"[^"]*"|[^=[:space:]]*\s*=\s*\'[^\']*\'|[^=[:space:]]*\s*=[^[:space:]]*/', $text, $attr);
+			$rel_arr = preg_grep('/^rel\s*=/i', $attr[0]);
+
+			if(count($rel_arr)>0)
+				$rel = array_pop($rel_arr);
+
+			if($rel)
+			{
+				$rel = preg_replace('/^(rel\s*=\s*[\'"]?)/i', '\1nofollow ', $rel);
+			}
+			else
+			{
+				$rel = 'rel="nofollow"';
+			}
+
+			$attr = preg_grep('/^rel\s*=/i', $attr[0], PREG_GREP_INVERT);
+
+			return '<a ' . join(' ', $attr) . ' ' . $rel . '>';
+		}
+	}
+?>
\ No newline at end of file

Added: plugins/trunk/nofollow/templates/nofollow.template
===================================================================
--- plugins/trunk/nofollow/templates/nofollow.template	2005-01-20 16:04:28 UTC (rev 778)
+++ plugins/trunk/nofollow/templates/nofollow.template	2005-01-20 16:06:26 UTC (rev 779)
@@ -0,0 +1,11 @@
+{include file="$admintemplatepath/header.template"}
+{include file="$admintemplatepath/navigation.template" showOpt=NoFollow title=$locale->tr("nofollow_plugin")}
+<form name="nofollowPluginConfig" method="post">
+ {$locale->tr("nofollow_plugin_enabled")}
+ <input type="checkbox" name="pluginEnabled" {if $pluginEnabled} checked="checked" {/if} value="1" /><br/>
+ <br/>
+ <input type="hidden" name="op" value="updateNoFollowConfig" />
+ <input type="submit" name="{$locale->tr("update_settings")}" value="{$locale->tr("update")}" />
+</form>
+{include file="$admintemplatepath/footernavigation.template"}
+{include file="$admintemplatepath/footer.template"}
\ No newline at end of file

Added: plugins/trunk/recentcomments/class/action/pluginrecentcommentsconfigaction.class.php
===================================================================
--- plugins/trunk/recentcomments/class/action/pluginrecentcommentsconfigaction.class.php	2005-01-20 16:04:28 UTC (rev 778)
+++ plugins/trunk/recentcomments/class/action/pluginrecentcommentsconfigaction.class.php	2005-01-20 16:06:26 UTC (rev 779)
@@ -0,0 +1,35 @@
+<?php
+
+	include_once( PLOG_CLASS_PATH."class/action/admin/adminaction.class.php" );
+	include_once( PLOG_CLASS_PATH."class/view/admin/adminplugintemplatedview.class.php" );	
+
+	/**
+	 * shows a form with the current configuration
+	 */
+	class PluginRecentCommentsConfigAction extends AdminAction
+	{
+		
+		function PluginRecentCommentsConfigAction( $actionInfo, $request )
+		{
+			$this->AdminAction( $actionInfo, $request );
+		}
+		
+		function perform()
+		{
+			// load some configuration settings
+			$blogSettings = $this->_blogInfo->getSettings();
+			$pluginEnabled = $blogSettings->getValue( "plugin_recentcomments_enabled" );
+			$maxComments = $blogSettings->getValue( "plugin_recentcomments_maxcomments" );
+			if ($maxComments == "") $maxComments = 10;
+			
+			// create a view and export the settings to the template
+			$this->_view = new AdminPluginTemplatedView( $this->_blogInfo, "recentcomments", "recentcomments", true );
+			$this->_view->setValue( "pluginEnabled", $pluginEnabled );
+			$this->_view->setValue( "maxComments", $maxComments );
+			
+			$this->setCommonData();
+			
+			return true;
+		}
+	}
+?>
\ No newline at end of file

Added: plugins/trunk/recentcomments/class/action/pluginrecentcommentsupdateconfigaction.class.php
===================================================================
--- plugins/trunk/recentcomments/class/action/pluginrecentcommentsupdateconfigaction.class.php	2005-01-20 16:04:28 UTC (rev 778)
+++ plugins/trunk/recentcomments/class/action/pluginrecentcommentsupdateconfigaction.class.php	2005-01-20 16:06:26 UTC (rev 779)
@@ -0,0 +1,67 @@
+<?php
+
+	include_once( PLOG_CLASS_PATH."class/action/admin/adminaction.class.php" );
+    include_once( PLOG_CLASS_PATH."class/view/admin/adminerrorview.class.php" );
+	include_once( PLOG_CLASS_PATH."class/view/admin/adminmessageview.class.php" );
+		
+	/**
+	 * updates the plugin configuration
+	 */
+	class PluginRecentCommentsUpdateConfigAction extends AdminAction
+	{
+		var $_pluginEnabled;
+		var $_maxComments;
+		
+		function PluginRecentCommentsUpdateConfigAction( $actionInfo, $request )
+		{
+			$this->AdminAction( $actionInfo, $request );
+		}
+		
+		function validate()
+		{
+            $this->_pluginEnabled = $this->_request->getValue( "pluginEnabled" );
+            $this->_pluginEnabled = ($this->_pluginEnabled != "" );			
+            $this->_maxComments = $this->_request->getValue( "maxComments" );
+            if( $this->_maxComments <= 0 ) {
+                
+                
+                $this->_view = new AdminErrorView( $this->_blogInfo );
+                $this->_view->setValue( "message", $this->_locale->tr("recentcomments_error_maxcomments"));
+                $this->setCommonData();  
+                return false;
+        }        	                
+			
+			return true;
+		}
+		        
+		function perform()
+		{
+            // and check which smiley set we should be using, or if none, then the default one
+			$blogSettings = $this->_blogInfo->getSettings();
+            $blogSettings->setValue( "plugin_recentcomments_enabled", $this->_pluginEnabled );
+            $blogSettings->setValue( "plugin_recentcomments_maxcomments", $this->_maxComments );
+            $this->_blogInfo->setSettings( $blogSettings ); 
+		
+			// save the blogs settings
+			$blogs = new Blogs();
+            if( !$blogs->updateBlog( $this->_blogInfo->getId(), $this->_blogInfo )) {
+                $this->_view = new AdminErrorView( $this->_blogInfo );
+                $this->_view->setValue( "message", $this->_locale->tr("error_updating_settings"));
+                $this->setCommonData();
+
+                return false;
+            }
+			
+			// if everything went ok...
+            $this->_blogInfo->setSettings( $blogSettings );
+            $this->_session->setValue( "blogInfo", $this->_blogInfo );
+            $this->saveSession();
+			
+			$this->_view = new AdminMessageView( $this->_blogInfo );
+			$this->_view->setMessage( $this->_locale->tr("recentcomments_settings_saved_ok"));
+			$this->setCommonData();
+            
+            return true;		
+		}
+	}
+?>
\ No newline at end of file

Added: plugins/trunk/recentcomments/locale/locale_en_UK.php
===================================================================
--- plugins/trunk/recentcomments/locale/locale_en_UK.php	2005-01-20 16:04:28 UTC (rev 778)
+++ plugins/trunk/recentcomments/locale/locale_en_UK.php	2005-01-20 16:06:26 UTC (rev 779)
@@ -0,0 +1,8 @@
+<?php
+$messages["recentcomments_maxcomments"] = "Maximum Showed Comments";
+$messages["recentcomments_plugin_configuration"] = "Configuration this plugin";
+$messages["recentcomments_plugin_enabled"] = "Enable this plugin";
+$messages["recentcomments_plugin"] = "Recent Comments Plugin";
+$messages["recentcomments_settings_saved_ok"] = "Recent Comments settings saved successfully!";
+$messages["recentcomments_error_maxcomments"] = "Maximum Showed Comments Should >= 0!";
+?>
\ No newline at end of file

Added: plugins/trunk/recentcomments/locale/locale_zh_TW.php
===================================================================
--- plugins/trunk/recentcomments/locale/locale_zh_TW.php	2005-01-20 16:04:28 UTC (rev 778)
+++ plugins/trunk/recentcomments/locale/locale_zh_TW.php	2005-01-20 16:06:26 UTC (rev 779)
@@ -0,0 +1,8 @@
+<?php
+$messages["recentcomments_maxcomments"] = "最新迴響顯示數量";
+$messages["recentcomments_plugin_configuration"] = "外掛程式設定";
+$messages["recentcomments_plugin_enabled"] = "啟動外掛程式";
+$messages["recentcomments_plugin"] = "最近迴響外掛程式";
+$messages["recentcomments_settings_saved_ok"] = "最近迴響設定儲存成功。";
+$messages["recentcomments_error_maxcomments"] = "最新迴響顯示數量必須要 >= 0!";
+?>
\ No newline at end of file

Added: plugins/trunk/recentcomments/pluginrecentcomments.class.php
===================================================================
--- plugins/trunk/recentcomments/pluginrecentcomments.class.php	2005-01-20 16:04:28 UTC (rev 778)
+++ plugins/trunk/recentcomments/pluginrecentcomments.class.php	2005-01-20 16:06:26 UTC (rev 779)
@@ -0,0 +1,125 @@
+<?php
+
+    include_once( PLOG_CLASS_PATH."class/plugin/pluginbase.class.php" );
+    include_once( PLOG_CLASS_PATH."class/plugin/pluginmanager.class.php" );
+    include_once( PLOG_CLASS_PATH."class/dao/articlecomments.class.php" );
+    include_once( PLOG_CLASS_PATH."class/dao/articles.class.php" );
+    
+    /**
+     * Plugin that offers features to return a recent article comments from the current blog
+     */
+    class PluginRecentComments extends PluginBase
+    {
+        var $prefix;
+        var $pluginEnabled;
+        var $maxComments;
+            
+        function PluginRecentComments()
+        {
+            $this->PluginBase();
+  
+            $this->id = "recentcomments";
+            $this->author = "Mark Wu";
+            $this->desc = "This plugin offers the most recently article comments. Usage as follow:<br /><br />Add the following code to header.template<br /><br /><strong>&lt;p&gt;<br />{assign var=comments value=\$recentcomments-&gt;getRecentComments()}<br />{foreach from=\$comments item=comment}<br />{assign var=postid value=\$comment-&gt;getArticleId()}<br />{assign var=post value=\$recentcomments-&gt;getCommentArticle(\$postid)}<br />{if \$comment-&gt;getUserUrl()}<br />&lt;li&gt;&lt;a title=&quot;{\$comment-&gt;getText()|truncate:150:&quot;...&quot;|escape}&quot; href=&quot;{\$comment-&gt;getUserUrl()}&quot;&gt;{\$comment-&gt;getUsername()}&lt;/a&gt; &amp;gt;&amp;gt; &lt;a href=&quot;{\$url-&gt;postPermalink(\$post)}&quot;&gt;{\$post-&gt;getTopic()}&lt;/a&gt;&lt;/li&gt; <br />{else}<br />&lt;li&gt;&lt;a title=&quot;{\$comment-&gt;getText()|truncate:150:&quot;...&quot;|escape}&quot; href=&quot;{\$url-&gt;postPermalink(\$post)}&quot;&gt;{\$comment-&gt;getUsername()}&lt;/a&gt; &amp;gt;&amp;gt; &lt;a href=&quot;{\$url-&gt;postPermalink(\$post)}&quot;&gt;{\$post-&gt;getTopic()}&lt;/a&gt;&lt;/li&gt;<br />{/if}<br />{/foreach}<br />&lt;/p&gt;</strong><br /><br />You can use <br /><br /><strong>getRecentComments(5)</strong> to get recent 5 comments. The default view is BLOG. <br /><strong>getRecentComments(10, 'SITE')</strong> to get recent 10 comments from SITE view. It is very convenient for pLog Host Provider.<br /><br />";
+  
+            $config =& Config::getConfig();
+            $this->prefix = $config->getValue('db_prefix');
+            
+            $this->locales = Array( "en_UK" , "zh_TW" );
+            
+            $this->init();
+        }
+
+		function init()
+		{
+            $this->registerAdminAction( "recentcomments", "PluginRecentCommentsConfigAction" );
+			$this->registerAdminAction( "updateRecentCommentsConfig", "PluginRecentCommentsUpdateConfigAction" );
+			
+			$menu =& Menu::getMenu();
+			if( !$menu->entryExists( "/menu/controlCenter/manageRecentActivities" ))						
+				$this->addMenuEntry( "/menu/controlCenter", "manageRecentActivities", "", "", true, false );			
+            $this->addMenuEntry( "/menu/controlCenter/manageRecentActivities", "RecentComments", "?op=recentcomments", "" );            
+		}
+
+		function register()
+		{
+		    $blogSettings = $this->blogInfo->getSettings();
+		    $this->pluginEnabled = $blogSettings->getValue( "plugin_recentcomments_enabled" );
+	        $this->maxComments = $blogSettings->getValue( "plugin_recentcomments_maxcomments" );
+	    }
+	    
+	    function isEnabled()
+	    {
+	        return $this->pluginEnabled;
+	    }
+
+        /**
+         * Returns the recent comments object of current blog
+         */
+        function getRecentComments($maxComments = 0, $based = 'BLOG')
+        {
+            $comments = new ArticleComments();
+            $blogId = $this->blogInfo->getId();
+            
+            if ($based == 'BLOG') {   
+                $query = "SELECT ".$this->prefix."articles_comments.* FROM ".$this->prefix."articles_comments, ".$this->prefix."articles";
+                $query .= " WHERE ".$this->prefix."articles_comments.article_id = ".$this->prefix."articles.id AND ".$this->prefix."articles.blog_id = ".$blogId." AND ".$this->prefix."articles.status=1";
+                $query .= " AND ".$this->prefix."articles_comments.status = 0";
+                $query .= " ORDER BY ".$this->prefix."articles_comments.date DESC";
+            } elseif ($based == 'SITE') {
+                $query = "SELECT ".$this->prefix."articles_comments.* FROM ".$this->prefix."articles_comments, ".$this->prefix."articles";
+                $query .= " WHERE ".$this->prefix."articles_comments.article_id = ".$this->prefix."articles.id AND ".$this->prefix."articles.status=1";
+                $query .= " AND ".$this->prefix."articles_comments.status = 0";
+                $query .= " ORDER BY ".$this->prefix."articles_comments.date DESC";
+            } else {
+                return false;
+            }
+
+            if( $maxComments > 0 ) 
+            {
+                $query .= " LIMIT " . $maxComments; 
+            } else {
+                $query .= " LIMIT " . $this->maxComments;
+            }
+
+            $result = $comments->_db->Execute( $query ); 
+
+            if( !$result ) 
+                return false; 
+            
+            $recentcomments = Array();
+            while( $row = $result->FetchRow()) { 
+               array_push( $recentcomments, $comments->_fillCommentInformation($row)); 
+            } 
+
+            return $recentcomments; 
+        }
+        
+        function getArticle( $artId )
+        {
+            $articles = new Articles();
+            $blogId = $this->blogInfo->getId();
+            
+            $query = "SELECT * FROM ".$this->prefix."articles WHERE id = ".$artId;
+
+               $query .= " AND blog_id = ".$blogId;
+
+            $query .= ";";
+
+            // we send the query and then fetch the first array with the result
+            $result = $articles->_db->Execute( $query );
+
+            if( $result == false )
+                return false;
+
+            if ( $result->RecordCount() == 0)
+                return false;
+
+            $row = $result->FetchRow( $result );
+
+            $article = $articles->_fillArticleInformation( $row );
+
+            return $article;
+        }
+    }
+?>
\ No newline at end of file

Added: plugins/trunk/recentcomments/templates/recentcomments.template
===================================================================
--- plugins/trunk/recentcomments/templates/recentcomments.template	2005-01-20 16:04:28 UTC (rev 778)
+++ plugins/trunk/recentcomments/templates/recentcomments.template	2005-01-20 16:06:26 UTC (rev 779)
@@ -0,0 +1,16 @@
+{include file="$admintemplatepath/header.template"}
+{include file="$admintemplatepath/navigation.template" showOpt=RecentComments title=$locale->tr("recentcomments_plugin")}
+<form name="recentcommentsPluginConfig" method="post">
+ {$locale->tr("recentcomments_plugin_enabled")}
+ <input type="checkbox" name="pluginEnabled" {if $pluginEnabled} checked="checked" {/if} value="1" /><br/>
+ <fieldset>
+ <legend>{$locale->tr("recentcomments_plugin_configuration")}</legend> 
+ {$locale->tr("recentcomments_maxcomments")}
+ <input type="text" name="maxComments" value="{$maxComments}" width="10" />
+ </fieldset>
+ <br/>
+ <input type="hidden" name="op" value="updateRecentCommentsConfig" />
+ <input type="submit" name="{$locale->tr("update_settings")}" value="{$locale->tr("update")}" />
+</form>
+{include file="$admintemplatepath/footernavigation.template"}
+{include file="$admintemplatepath/footer.template"}
\ No newline at end of file

Added: plugins/trunk/recenttrackbacks/class/action/pluginrecenttrackbacksconfigaction.class.php
===================================================================
--- plugins/trunk/recenttrackbacks/class/action/pluginrecenttrackbacksconfigaction.class.php	2005-01-20 16:04:28 UTC (rev 778)
+++ plugins/trunk/recenttrackbacks/class/action/pluginrecenttrackbacksconfigaction.class.php	2005-01-20 16:06:26 UTC (rev 779)
@@ -0,0 +1,35 @@
+<?php
+
+	include_once( PLOG_CLASS_PATH."class/action/admin/adminaction.class.php" );
+	include_once( PLOG_CLASS_PATH."class/view/admin/adminplugintemplatedview.class.php" );	
+
+	/**
+	 * shows a form with the current configuration
+	 */
+	class PluginRecentTrackbacksConfigAction extends AdminAction
+	{
+		
+		function PluginRecentTrackbacksConfigAction( $actionInfo, $request )
+		{
+			$this->AdminAction( $actionInfo, $request );
+		}
+		
+		function perform()
+		{
+			// load some configuration settings
+			$blogSettings = $this->_blogInfo->getSettings();
+			$pluginEnabled = $blogSettings->getValue( "plugin_recenttrackbacks_enabled" );
+			$maxTrackbacks = $blogSettings->getValue( "plugin_recenttrackbacks_maxtrackbacks" );
+			if ($maxTrackbacks == "") $maxTrackbacks = 10;
+			
+			// create a view and export the settings to the template
+			$this->_view = new AdminPluginTemplatedView( $this->_blogInfo, "recenttrackbacks", "recenttrackbacks", true );
+			$this->_view->setValue( "pluginEnabled", $pluginEnabled );
+			$this->_view->setValue( "maxTrackbacks", $maxTrackbacks );
+			
+			$this->setCommonData();
+			
+			return true;
+		}
+	}
+?>
\ No newline at end of file

Added: plugins/trunk/recenttrackbacks/class/action/pluginrecenttrackbacksupdateconfigaction.class.php
===================================================================
--- plugins/trunk/recenttrackbacks/class/action/pluginrecenttrackbacksupdateconfigaction.class.php	2005-01-20 16:04:28 UTC (rev 778)
+++ plugins/trunk/recenttrackbacks/class/action/pluginrecenttrackbacksupdateconfigaction.class.php	2005-01-20 16:06:26 UTC (rev 779)
@@ -0,0 +1,67 @@
+<?php
+
+	include_once( PLOG_CLASS_PATH."class/action/admin/adminaction.class.php" );
+    include_once( PLOG_CLASS_PATH."class/view/admin/adminerrorview.class.php" );
+	include_once( PLOG_CLASS_PATH."class/view/admin/adminmessageview.class.php" );
+		
+	/**
+	 * updates the plugin configuration
+	 */
+	class PluginRecentTrackbacksUpdateConfigAction extends AdminAction
+	{
+		var $_pluginEnabled;
+		var $_maxTrackbacks;
+		
+		function PluginRecentTrackbacksUpdateConfigAction( $actionInfo, $request )
+		{
+			$this->AdminAction( $actionInfo, $request );
+		}
+		
+		function validate()
+		{
+            $this->_pluginEnabled = $this->_request->getValue( "pluginEnabled" );
+            $this->_pluginEnabled = ($this->_pluginEnabled != "" );			
+            $this->_maxTrackbacks = $this->_request->getValue( "maxTrackbacks" );
+            if( $this->_maxTrackbacks <= 0 ) {
+                
+                
+                $this->_view = new AdminErrorView( $this->_blogInfo );
+                $this->_view->setValue( "message", $this->_locale->tr("recenttrackbacks_error_maxtrackbacks"));
+                $this->setCommonData();  
+                return false;
+        }        	                
+			
+			return true;
+		}
+		        
+		function perform()
+		{
+            // and check which smiley set we should be using, or if none, then the default one
+			$blogSettings = $this->_blogInfo->getSettings();
+            $blogSettings->setValue( "plugin_recenttrackbacks_enabled", $this->_pluginEnabled );
+            $blogSettings->setValue( "plugin_recenttrackbacks_maxtrackbacks", $this->_maxTrackbacks );
+            $this->_blogInfo->setSettings( $blogSettings ); 
+		
+			// save the blogs settings
+			$blogs = new Blogs();
+            if( !$blogs->updateBlog( $this->_blogInfo->getId(), $this->_blogInfo )) {
+                $this->_view = new AdminErrorView( $this->_blogInfo );
+                $this->_view->setValue( "message", $this->_locale->tr("error_updating_settings"));
+                $this->setCommonData();
+
+                return false;
+            }
+			
+			// if everything went ok...
+            $this->_blogInfo->setSettings( $blogSettings );
+            $this->_session->setValue( "blogInfo", $this->_blogInfo );
+            $this->saveSession();
+			
+			$this->_view = new AdminMessageView( $this->_blogInfo );
+			$this->_view->setMessage( $this->_locale->tr("recenttrackbacks_settings_saved_ok"));
+			$this->setCommonData();
+            
+            return true;		
+		}
+	}
+?>
\ No newline at end of file

Added: plugins/trunk/recenttrackbacks/locale/locale_en_UK.php
===================================================================
--- plugins/trunk/recenttrackbacks/locale/locale_en_UK.php	2005-01-20 16:04:28 UTC (rev 778)
+++ plugins/trunk/recenttrackbacks/locale/locale_en_UK.php	2005-01-20 16:06:26 UTC (rev 779)
@@ -0,0 +1,8 @@
+<?php
+$messages["recenttrackbacks_maxtrackbacks"] = "Maximum Showed Trackbacks";
+$messages["recenttrackbacks_plugin_configuration"] = "Configuration this plugin";
+$messages["recenttrackbacks_plugin_enabled"] = "Enable this plugin";
+$messages["recenttrackbacks_plugin"] = "Recent Trackbacks Plugin";
+$messages["recenttrackbacks_settings_saved_ok"] = "Recent Trackbacks settings saved successfully!";
+$messages["recenttrackbacks_error_maxtrackbacks"] = "Maximum Showed Trackbacks Should >= 0!";
+?>
\ No newline at end of file

Added: plugins/trunk/recenttrackbacks/locale/locale_zh_TW.php
===================================================================
--- plugins/trunk/recenttrackbacks/locale/locale_zh_TW.php	2005-01-20 16:04:28 UTC (rev 778)
+++ plugins/trunk/recenttrackbacks/locale/locale_zh_TW.php	2005-01-20 16:06:26 UTC (rev 779)
@@ -0,0 +1,8 @@
+<?php
+$messages["recenttrackbacks_maxtrackbacks"] = "最近引用顯示數量";
+$messages["recenttrackbacks_plugin_configuration"] = "外掛程式設定";
+$messages["recenttrackbacks_plugin_enabled"] = "啟動外掛程式";
+$messages["recenttrackbacks_plugin"] = "最近引用外掛程式";
+$messages["recenttrackbacks_settings_saved_ok"] = "最近引用設定儲存成功。";
+$messages["recenttrackbacks_error_maxtrackbacks"] = "最近引用顯示數量必須要 >= 0!";
+?>
\ No newline at end of file

Added: plugins/trunk/recenttrackbacks/pluginrecenttrackbacks.class.php
===================================================================
--- plugins/trunk/recenttrackbacks/pluginrecenttrackbacks.class.php	2005-01-20 16:04:28 UTC (rev 778)
+++ plugins/trunk/recenttrackbacks/pluginrecenttrackbacks.class.php	2005-01-20 16:06:26 UTC (rev 779)
@@ -0,0 +1,123 @@
+<?php
+
+    include_once( PLOG_CLASS_PATH."class/plugin/pluginbase.class.php" );
+    include_once( PLOG_CLASS_PATH."class/plugin/pluginmanager.class.php" );
+    include_once( PLOG_CLASS_PATH."class/dao/trackbacks.class.php" );
+    
+    /**
+     * Plugin that offers features to return a recent trackbacks from the current blog
+     */
+    class PluginRecentTrackbacks extends PluginBase
+    {
+        var $prefix;
+        var $pluginEnabled;
+        var $maxTrackbacks;
+            
+        function PluginRecentTrackbacks()
+        {
+            $this->PluginBase();
+  
+            $this->id = "recenttrackbacks";
+            $this->author = "Mark Wu";
+            $this->desc = "This plugin offers the most recently article trackbacks. Usage as follow:<br /><br />Add the following code to header.template<br /><br /><strong>&lt;p&gt;<br />{assign var=trackbacks value=\$recenttrackbacks-&gt;getRecentTrackbacks()}<br />{foreach from=\$trackbacks item=trackback}<br />{assign var=postid value=\$trackback-&gt;getArticleId()}<br />{assign var=post value=\$recenttrackbacks-&gt;getTrackbackArticle(\$postid)}<br />&lt;li&gt;&lt;a title=&quot;{\$trackback-&gt;getTitle()}&quot; href=&quot;{\$trackback-&gt;getUrl()}&quot;&gt;{\$trackback-&gt;getBlogName()}&lt;/a&gt; &amp;gt;&amp;gt; &lt;a href=&quot;{\$url-&gt;postPermalink(\$post)}&quot;&gt;{\$post-&gt;getTopic()}&lt;/a&gt;&lt;/li&gt;<br />{/foreach}<br />&lt;/p&gt;</strong><br /><br />You can use <br /><br /><strong>getRecentTrackbacks(5)</strong> to get recent 5 trackbacks. The default view is BLOG. <br /><strong>getRecentTrackbacks(10, 'SITE')</strong> to get recent 10 trackbacks from SITE view. It is very convenient for pLog Host Provider.<br /><br />";
+
+            $config =& Config::getConfig();
+            $this->prefix = $config->getValue('db_prefix');
+            
+            $this->locales = Array( "en_UK" , "zh_TW" );
+            
+            $this->init();
+            
+        }
+
+		function init()
+		{
+            $this->registerAdminAction( "recenttrackbacks", "PluginRecentTrackbacksConfigAction" );
+			$this->registerAdminAction( "updateRecentTrackbacksConfig", "PluginRecentTrackbacksUpdateConfigAction" );
+			
+			$menu =& Menu::getMenu();
+			if( !$menu->entryExists( "/menu/controlCenter/manageRecentActivities" ))						
+				$this->addMenuEntry( "/menu/controlCenter", "manageRecentActivities", "", "", true, false );			
+            $this->addMenuEntry( "/menu/controlCenter/manageRecentActivities", "RecentTrackbacks", "?op=recenttrackbacks", "" );            
+		}
+
+		function register()
+		{
+		    $blogSettings = $this->blogInfo->getSettings();
+		    $this->pluginEnabled = $blogSettings->getValue( "plugin_recenttrackbacks_enabled" );
+	        $this->maxTrackbacks = $blogSettings->getValue( "plugin_recenttrackbacks_maxtrackbacks" );
+	    }
+	    
+	    function isEnabled()
+	    {
+	        return $this->pluginEnabled;
+	    }
+
+        /**
+         * Returns the recent trackbacks object of current blog
+         */
+        function getRecentTrackbacks($maxTrackbacks = 0, $based = 'BLOG')
+        {
+            $trackbacks = new Trackbacks();
+            $blogId = $this->blogInfo->getId();
+            
+            if ($based == 'BLOG') { 
+                $query = "SELECT ".$this->prefix."trackbacks.* FROM ".$this->prefix."trackbacks, ".$this->prefix."articles";
+                $query .= " WHERE ".$this->prefix."trackbacks.article_id = ".$this->prefix."articles.id AND ".$this->prefix."articles.blog_id = ".$blogId." AND ".$this->prefix."articles.status = 1";
+                $query .= " ORDER BY ".$this->prefix."trackbacks.date DESC";
+            } elseif ($based == 'SITE') {
+                $query = "SELECT ".$this->prefix."trackbacks.* FROM ".$this->prefix."trackbacks, ".$this->prefix."articles";
+                $query .= " WHERE ".$this->prefix."trackbacks.article_id = ".$this->prefix."articles.id AND ".$this->prefix."articles.status = 1";
+                $query .= " ORDER BY ".$this->prefix."trackbacks.date DESC";
+            } else {
+                return false;
+            }
+
+            if( $maxTrackbacks > 0 ) 
+            {
+                $query .= " LIMIT " . $maxTrackbacks; 
+            } else {
+                $query .= " LIMIT " . $this->maxTrackbacks;
+            }
+
+            $result = $trackbacks->_db->Execute( $query ); 
+
+            if( !$result ) 
+                return false; 
+            
+            $recenttrackbacks = Array();
+            while( $row = $result->FetchRow()) { 
+               array_push( $recenttrackbacks, $trackbacks->_fillTrackbackInformation($row)); 
+            } 
+
+            return $recenttrackbacks; 
+        }
+        
+        function getArticle( $artId )
+        {
+            $articles = new Articles();
+            $blogId = $this->blogInfo->getId();
+            
+            $query = "SELECT * FROM ".$this->prefix."articles WHERE id = ".$artId;
+
+               $query .= " AND blog_id = ".$blogId;
+
+            $query .= ";";
+
+            // we send the query and then fetch the first array with the result
+            $result = $articles->_db->Execute( $query );
+
+            if( $result == false )
+                return false;
+
+            if ( $result->RecordCount() == 0)
+                return false;
+
+            $row = $result->FetchRow( $result );
+
+            $article = $articles->_fillArticleInformation( $row );
+
+            return $article;
+        }
+    }
+?>
\ No newline at end of file

Added: plugins/trunk/recenttrackbacks/templates/recenttrackbacks.template
===================================================================
--- plugins/trunk/recenttrackbacks/templates/recenttrackbacks.template	2005-01-20 16:04:28 UTC (rev 778)
+++ plugins/trunk/recenttrackbacks/templates/recenttrackbacks.template	2005-01-20 16:06:26 UTC (rev 779)
@@ -0,0 +1,16 @@
+{include file="$admintemplatepath/header.template"}
+{include file="$admintemplatepath/navigation.template" showOpt=RecentTrackbacks title=$locale->tr("recenttrackbacks_plugin")}
+<form name="recenttrackbacksPluginConfig" method="post">
+ {$locale->tr("recenttrackbacks_plugin_enabled")}
+ <input type="checkbox" name="pluginEnabled" {if $pluginEnabled} checked="checked" {/if} value="1" /><br/>
+ <fieldset>
+ <legend>{$locale->tr("recenttrackbacks_plugin_configuration")}</legend>  
+ {$locale->tr("recenttrackbacks_maxtrackbacks")}
+ <input type="text" name="maxTrackbacks" value="{$maxTrackbacks}" width="10" />
+ </fieldset>
+ <br/>
+ <input type="hidden" name="op" value="updateRecentTrackbacksConfig" />
+ <input type="submit" name="{$locale->tr("update_settings")}" value="{$locale->tr("update")}" />
+</form>
+{include file="$admintemplatepath/footernavigation.template"}
+{include file="$admintemplatepath/footer.template"}
\ No newline at end of file

Added: plugins/trunk/topcommentposts/class/action/plugintopcommentpostsconfigaction.class.php
===================================================================
--- plugins/trunk/topcommentposts/class/action/plugintopcommentpostsconfigaction.class.php	2005-01-20 16:04:28 UTC (rev 778)
+++ plugins/trunk/topcommentposts/class/action/plugintopcommentpostsconfigaction.class.php	2005-01-20 16:06:26 UTC (rev 779)
@@ -0,0 +1,35 @@
+<?php
+
+	include_once( PLOG_CLASS_PATH."class/action/admin/adminaction.class.php" );
+	include_once( PLOG_CLASS_PATH."class/view/admin/adminplugintemplatedview.class.php" );	
+
+	/**
+	 * shows a form with the current configuration
+	 */
+	class PluginTopCommentPostsConfigAction extends AdminAction
+	{
+		
+		function PluginTopCommentPostsConfigAction( $actionInfo, $request )
+		{
+			$this->AdminAction( $actionInfo, $request );
+		}
+		
+		function perform()
+		{
+			// load some configuration settings
+			$blogSettings = $this->_blogInfo->getSettings();
+			$pluginEnabled = $blogSettings->getValue( "plugin_topcommentposts_enabled" );
+			$maxPosts = $blogSettings->getValue( "plugin_topcommentposts_maxposts" );
+			if ($maxPosts == "") $maxPosts = 10;
+			
+			// create a view and export the settings to the template
+			$this->_view = new AdminPluginTemplatedView( $this->_blogInfo, "topcommentposts", "topcommentposts", true );
+			$this->_view->setValue( "pluginEnabled", $pluginEnabled );
+			$this->_view->setValue( "maxPosts", $maxPosts );
+			
+			$this->setCommonData();
+			
+			return true;
+		}
+	}
+?>
\ No newline at end of file

Added: plugins/trunk/topcommentposts/class/action/plugintopcommentpostsupdateconfigaction.class.php
===================================================================
--- plugins/trunk/topcommentposts/class/action/plugintopcommentpostsupdateconfigaction.class.php	2005-01-20 16:04:28 UTC (rev 778)
+++ plugins/trunk/topcommentposts/class/action/plugintopcommentpostsupdateconfigaction.class.php	2005-01-20 16:06:26 UTC (rev 779)
@@ -0,0 +1,67 @@
+<?php
+
+	include_once( PLOG_CLASS_PATH."class/action/admin/adminaction.class.php" );
+    include_once( PLOG_CLASS_PATH."class/view/admin/adminerrorview.class.php" );
+	include_once( PLOG_CLASS_PATH."class/view/admin/adminmessageview.class.php" );
+		
+	/**
+	 * updates the plugin configuration
+	 */
+	class PluginTopCommentPostsUpdateConfigAction extends AdminAction
+	{
+		var $_pluginEnabled;
+		var $_maxPosts;
+		
+		function PluginRTopCommentPostsUpdateConfigAction( $actionInfo, $request )
+		{
+			$this->AdminAction( $actionInfo, $request );
+		}
+		
+		function validate()
+		{
+            $this->_pluginEnabled = $this->_request->getValue( "pluginEnabled" );
+            $this->_pluginEnabled = ($this->_pluginEnabled != "" );			
+            $this->_maxPosts = $this->_request->getValue( "maxPosts" );
+            if( $this->_maxPosts <= 0 ) {
+                
+                
+                $this->_view = new AdminErrorView( $this->_blogInfo );
+                $this->_view->setValue( "message", $this->_locale->tr("topcommentposts_error_maxposts"));
+                $this->setCommonData();  
+                return false;
+        }        	                
+			
+			return true;
+		}
+		        
+		function perform()
+		{
+            // and check which smiley set we should be using, or if none, then the default one
+			$blogSettings = $this->_blogInfo->getSettings();
+            $blogSettings->setValue( "plugin_topcommentposts_enabled", $this->_pluginEnabled );
+            $blogSettings->setValue( "plugin_topcommentposts_maxposts", $this->_maxPosts );
+            $this->_blogInfo->setSettings( $blogSettings ); 
+		
+			// save the blogs settings
+			$blogs = new Blogs();
+            if( !$blogs->updateBlog( $this->_blogInfo->getId(), $this->_blogInfo )) {
+                $this->_view = new AdminErrorView( $this->_blogInfo );
+                $this->_view->setValue( "message", $this->_locale->tr("error_updating_settings"));
+                $this->setCommonData();
+
+                return false;
+            }
+			
+			// if everything went ok...
+            $this->_blogInfo->setSettings( $blogSettings );
+            $this->_session->setValue( "blogInfo", $this->_blogInfo );
+            $this->saveSession();
+			
+			$this->_view = new AdminMessageView( $this->_blogInfo );
+			$this->_view->setMessage( $this->_locale->tr("topcommentposts_settings_saved_ok"));
+			$this->setCommonData();
+            
+            return true;		
+		}
+	}
+?>
\ No newline at end of file

Added: plugins/trunk/topcommentposts/locale/locale_en_UK.php
===================================================================
--- plugins/trunk/topcommentposts/locale/locale_en_UK.php	2005-01-20 16:04:28 UTC (rev 778)
+++ plugins/trunk/topcommentposts/locale/locale_en_UK.php	2005-01-20 16:06:26 UTC (rev 779)
@@ -0,0 +1,8 @@
+<?php
+$messages["topcommentposts_maxposts"] = "Maximum Showed Posts";
+$messages["topcommentposts_plugin_configuration"] = "Configuration this plugin";
+$messages["topcommentposts_plugin_enabled"] = "Enable this plugin";
+$messages["topcommentposts_plugin"] = "Top Comment Posts Plugin";
+$messages["topcommentposts_settings_saved_ok"] = "Top Comment Posts settings saved successfully!";
+$messages["topcommentposts_error_maxposts"] = "Maximum Showed Posts Should >= 0!";
+?>
\ No newline at end of file

Added: plugins/trunk/topcommentposts/locale/locale_zh_TW.php
===================================================================
--- plugins/trunk/topcommentposts/locale/locale_zh_TW.php	2005-01-20 16:04:28 UTC (rev 778)
+++ plugins/trunk/topcommentposts/locale/locale_zh_TW.php	2005-01-20 16:06:26 UTC (rev 779)
@@ -0,0 +1,8 @@
+<?php
+$messages["topcommentposts_maxposts"] = "最多迴響文章顯示數量";
+$messages["topcommentposts_plugin_configuration"] = "外掛程式設定";
+$messages["topcommentposts_plugin_enabled"] = "啟動外掛程式";
+$messages["topcommentposts_plugin"] = "最多迴響文章外掛程式";
+$messages["topcommentposts_settings_saved_ok"] = "最多迴響文章設定儲存成功。";
+$messages["topcommentposts_error_maxposts"] = "最多迴響文章顯示數量必須要 >= 0!";
+?>
\ No newline at end of file

Added: plugins/trunk/topcommentposts/plugintopcommentposts.class.php
===================================================================
--- plugins/trunk/topcommentposts/plugintopcommentposts.class.php	2005-01-20 16:04:28 UTC (rev 778)
+++ plugins/trunk/topcommentposts/plugintopcommentposts.class.php	2005-01-20 16:06:26 UTC (rev 779)
@@ -0,0 +1,127 @@
+<?php
+
+    include_once( PLOG_CLASS_PATH."class/plugin/pluginbase.class.php" );
+    include_once( PLOG_CLASS_PATH."class/plugin/pluginmanager.class.php" );
+    include_once( PLOG_CLASS_PATH."class/dao/articlecomments.class.php" );
+    include_once( PLOG_CLASS_PATH."class/dao/articles.class.php" );
+    
+    /**
+     * Plugin that offers features to returns the top comment posts object of current blog
+     */
+    class PluginTopCommentPosts extends PluginBase
+    {
+        var $prefix;
+        var $pluginEnabled;
+        var $maxPosts;        
+    
+        function PluginTopCommentPosts()
+        {
+            $this->PluginBase();
+  
+            $this->id = "topcommentposts";
+            $this->author = "Mark Wu";
+            $this->desc = "This plugin offers the rank list of articles by number of comments. Usage as follow:<br /><br />Add the following code to footer.template<br /><br /><strong>&lt;p&gt;<br />&lt;strong&gt;Top Comment Post&lt;/strong&gt;&lt;br /&gt;<br />{assign var=posts value=\$topcommentposts-&gt;getTopCommentPosts()}<br />{foreach from=\$posts item=post}<br />{assign var=postid value=\$post-&gt;getId()}<br />&lt;li&gt;&lt;a title=&quot;{\$post-&gt;getText()|truncate:150:&quot;...&quot;|escape}&quot; href=&quot;{\$url-&gt;postLink(\$post)}&quot;&gt;{\$post-&gt;getTopic()}&lt;/a&gt; ({\$topcommentposts-&gt;getArticleCommentCount(\$postid)} ½g)&lt;/li&gt;<br />{/foreach}<br />&lt;/p&gt;</strong> <br /><br />You can use <br /><br /><strong>getTopCommentPosts(5)</strong> to get top 5 comment posts. The default view is BLOG. <br /><strong>getTopCommentPosts(10, 'SITE')</strong> to get top 10 comment posts from SITE view. It is very convenient for pLog Host Provider.<br /><br />";
+  
+            $config =& Config::getConfig();
+            $this->prefix = $config->getValue('db_prefix');
+            
+            $this->locales = Array( "en_UK" , "zh_TW" );
+            
+            $this->init();            
+        }
+
+		function init()
+		{
+            $this->registerAdminAction( "topcommentposts", "PluginTopCommentPostsConfigAction" );
+			$this->registerAdminAction( "updateTopCommentPostsConfig", "PluginTopCommentPostsUpdateConfigAction" );
+			
+			$menu =& Menu::getMenu();
+			if( !$menu->entryExists( "/menu/controlCenter/manageTopActivities" ))						
+				$this->addMenuEntry( "/menu/controlCenter", "manageTopActivities", "", "", true, false );			
+            $this->addMenuEntry( "/menu/controlCenter/manageTopActivities", "TopCommentPosts", "?op=topcommentposts", "" );            
+		}
+
+		function register()
+		{
+		    $blogSettings = $this->blogInfo->getSettings();
+		    $this->pluginEnabled = $blogSettings->getValue( "plugin_topcommentposts_enabled" );
+	        $this->maxPosts = $blogSettings->getValue( "plugin_topcommentposts_maxposts" );
+	    }
+	    
+	    function isEnabled()
+	    {
+	        return $this->pluginEnabled;
+	    }
+
+        /**
+         * Returns the top comment posts object of current blog
+         */
+        function getTopCommentPosts($maxPosts = 0, $based = 'BLOG')
+        {
+            $comments = new ArticleComments();
+            $blogId = $this->blogInfo->getId();
+ 
+            if ($based == 'BLOG') {           
+                $query = "SELECT ".$this->prefix."articles_comments.article_id,count(".$this->prefix."articles_comments.article_id) as comment_count"; 
+                $query .= " FROM ".$this->prefix."articles_comments, ".$this->prefix."articles";
+                $query .= " WHERE ".$this->prefix."articles_comments.article_id = ".$this->prefix."articles.id AND ".$this->prefix."articles.blog_id = ".$blogId." AND ".$this->prefix."articles.status = 1";
+                $query .= " GROUP BY ".$this->prefix."articles_comments.article_id ORDER BY comment_count DESC";
+            } elseif ($based == 'SITE') {
+                $query = "SELECT ".$this->prefix."articles_comments.article_id,count(".$this->prefix."articles_comments.article_id) as comment_count"; 
+                $query .= " FROM ".$this->prefix."articles_comments, ".$this->prefix."articles";
+                $query .= " WHERE ".$this->prefix."articles_comments.article_id = ".$this->prefix."articles.id AND ".$this->prefix."articles.status = 1";
+                $query .= " GROUP BY ".$this->prefix."articles_comments.article_id ORDER BY comment_count DESC";
+            } else {
+                return false;
+            }
+
+            if( $maxPosts > 0 ) 
+            {
+                $query .= " LIMIT " . $maxPosts; 
+            } else {
+                $query .= " LIMIT " . $this->maxPosts;
+            }
+
+            $result = $comments->_db->Execute( $query ); 
+
+            if( !$result ) 
+                return false; 
+            
+            $topcommentposts = Array();
+            while( $row = $result->FetchRow()) { 
+               $article = $this->getArticle($row["article_id"]);
+               array_push( $topcommentposts, $article); 
+            } 
+
+            return $topcommentposts; 
+        }
+        
+        function getArticle( $artId )
+        {
+            $articles = new Articles();
+            $blogId = $this->blogInfo->getId();
+            
+            $query = "SELECT * FROM ".$this->prefix."articles WHERE id = ".$artId;
+
+               $query .= " AND blog_id = ".$blogId;
+
+            $query .= ";";
+
+            // we send the query and then fetch the first array with the result
+            $result = $articles->_db->Execute( $query );
+
+            if( $result == false )
+                return false;
+
+            if ( $result->RecordCount() == 0)
+                return false;
+
+            $row = $result->FetchRow( $result );
+
+            $article = $articles->_fillArticleInformation( $row );
+
+            return $article;
+        }
+    }
+
+?>
\ No newline at end of file

Added: plugins/trunk/topcommentposts/templates/topcommentposts.template
===================================================================
--- plugins/trunk/topcommentposts/templates/topcommentposts.template	2005-01-20 16:04:28 UTC (rev 778)
+++ plugins/trunk/topcommentposts/templates/topcommentposts.template	2005-01-20 16:06:26 UTC (rev 779)
@@ -0,0 +1,16 @@
+{include file="$admintemplatepath/header.template"}
+{include file="$admintemplatepath/navigation.template" showOpt=TopCommentPosts title=$locale->tr("topcommentposts_plugin")}
+<form name="topcommentpostsPluginConfig" method="post">
+ {$locale->tr("topcommentposts_plugin_enabled")}
+ <input type="checkbox" name="pluginEnabled" {if $pluginEnabled} checked="checked" {/if} value="1" /><br/>
+ <fieldset>
+ <legend>{$locale->tr("topcommentposts_plugin_configuration")}</legend> 
+ {$locale->tr("topcommentposts_maxposts")}
+ <input type="text" name="maxPosts" value="{$maxPosts}" width="10" />
+ </fieldset>
+ <br/>
+ <input type="hidden" name="op" value="updateTopCommentPostsConfig" />
+ <input type="submit" name="{$locale->tr("update_settings")}" value="{$locale->tr("update")}" />
+</form>
+{include file="$admintemplatepath/footernavigation.template"}
+{include file="$admintemplatepath/footer.template"}
\ No newline at end of file

Added: plugins/trunk/topcommentvisitors/class/action/plugintopcommentvisitorsconfigaction.class.php
===================================================================
--- plugins/trunk/topcommentvisitors/class/action/plugintopcommentvisitorsconfigaction.class.php	2005-01-20 16:04:28 UTC (rev 778)
+++ plugins/trunk/topcommentvisitors/class/action/plugintopcommentvisitorsconfigaction.class.php	2005-01-20 16:06:26 UTC (rev 779)
@@ -0,0 +1,35 @@
+<?php
+
+	include_once( PLOG_CLASS_PATH."class/action/admin/adminaction.class.php" );
+	include_once( PLOG_CLASS_PATH."class/view/admin/adminplugintemplatedview.class.php" );	
+
+	/**
+	 * shows a form with the current configuration
+	 */
+	class PluginTopCommentVisitorsConfigAction extends AdminAction
+	{
+		
+		function PluginTopCommentVisitorsConfigAction( $actionInfo, $request )
+		{
+			$this->AdminAction( $actionInfo, $request );
+		}
+		
+		function perform()
+		{
+			// load some configuration settings
+			$blogSettings = $this->_blogInfo->getSettings();
+			$pluginEnabled = $blogSettings->getValue( "plugin_topcommentvisitors_enabled" );
+			$maxVisitors = $blogSettings->getValue( "plugin_topcommentvisitors_maxvisitors" );
+			if ($maxVisitors == "") $maxVisitors = 10;
+			
+			// create a view and export the settings to the template
+			$this->_view = new AdminPluginTemplatedView( $this->_blogInfo, "topcommentvisitors", "topcommentvisitors", true );
+			$this->_view->setValue( "pluginEnabled", $pluginEnabled );
+			$this->_view->setValue( "maxVisitors", $maxVisitors );
+			
+			$this->setCommonData();
+			
+			return true;
+		}
+	}
+?>
\ No newline at end of file

Added: plugins/trunk/topcommentvisitors/class/action/plugintopcommentvisitorsupdateconfigaction.class.php
===================================================================
--- plugins/trunk/topcommentvisitors/class/action/plugintopcommentvisitorsupdateconfigaction.class.php	2005-01-20 16:04:28 UTC (rev 778)
+++ plugins/trunk/topcommentvisitors/class/action/plugintopcommentvisitorsupdateconfigaction.class.php	2005-01-20 16:06:26 UTC (rev 779)
@@ -0,0 +1,67 @@
+<?php
+
+	include_once( PLOG_CLASS_PATH."class/action/admin/adminaction.class.php" );
+    include_once( PLOG_CLASS_PATH."class/view/admin/adminerrorview.class.php" );
+	include_once( PLOG_CLASS_PATH."class/view/admin/adminmessageview.class.php" );
+		
+	/**
+	 * updates the plugin configuration
+	 */
+	class PluginTopCommentVisitorsUpdateConfigAction extends AdminAction
+	{
+		var $_pluginEnabled;
+		var $_maxVisitors;
+		
+		function PluginRTopCommentVisitorsUpdateConfigAction( $actionInfo, $request )
+		{
+			$this->AdminAction( $actionInfo, $request );
+		}
+		
+		function validate()
+		{
+            $this->_pluginEnabled = $this->_request->getValue( "pluginEnabled" );
+            $this->_pluginEnabled = ($this->_pluginEnabled != "" );			
+            $this->_maxVisitors = $this->_request->getValue( "maxVisitors" );
+            if( $this->_maxVisitors <= 0 ) {
+                
+                
+                $this->_view = new AdminErrorView( $this->_blogInfo );
+                $this->_view->setValue( "message", $this->_locale->tr("topcommentvisitors_error_maxvisitors"));
+                $this->setCommonData();  
+                return false;
+        }        	                
+			
+			return true;
+		}
+		        
+		function perform()
+		{
+            // and check which smiley set we should be using, or if none, then the default one
+			$blogSettings = $this->_blogInfo->getSettings();
+            $blogSettings->setValue( "plugin_topcommentvisitors_enabled", $this->_pluginEnabled );
+            $blogSettings->setValue( "plugin_topcommentvisitors_maxvisitors", $this->_maxVisitors );
+            $this->_blogInfo->setSettings( $blogSettings ); 
+		
+			// save the blogs settings
+			$blogs = new Blogs();
+            if( !$blogs->updateBlog( $this->_blogInfo->getId(), $this->_blogInfo )) {
+                $this->_view = new AdminErrorView( $this->_blogInfo );
+                $this->_view->setValue( "message", $this->_locale->tr("error_updating_settings"));
+                $this->setCommonData();
+
+                return false;
+            }
+			
+			// if everything went ok...
+            $this->_blogInfo->setSettings( $blogSettings );
+            $this->_session->setValue( "blogInfo", $this->_blogInfo );
+            $this->saveSession();
+			
+			$this->_view = new AdminMessageView( $this->_blogInfo );
+			$this->_view->setMessage( $this->_locale->tr("topcommentvisitors_settings_saved_ok"));
+			$this->setCommonData();
+            
+            return true;		
+		}
+	}
+?>
\ No newline at end of file

Added: plugins/trunk/topcommentvisitors/locale/locale_en_UK.php
===================================================================
--- plugins/trunk/topcommentvisitors/locale/locale_en_UK.php	2005-01-20 16:04:28 UTC (rev 778)
+++ plugins/trunk/topcommentvisitors/locale/locale_en_UK.php	2005-01-20 16:06:26 UTC (rev 779)
@@ -0,0 +1,8 @@
+<?php
+$messages["topcommentvisitors_maxvisitors"] = "Maximum Showed Visitors";
+$messages["topcommentvisitors_plugin_configuration"] = "Configuration this plugin";
+$messages["topcommentvisitors_plugin_enabled"] = "Enable this plugin";
+$messages["topcommentvisitors_plugin"] = "Top Comment Visitors Plugin";
+$messages["topcommentvisitors_settings_saved_ok"] = "Top Comment Visitors settings saved successfully!";
+$messages["topcommentvisitors_error_maxvisitors"] = "Maximum Showed Visitors Should >= 0!";
+?>
\ No newline at end of file

Added: plugins/trunk/topcommentvisitors/locale/locale_zh_TW.php
===================================================================
--- plugins/trunk/topcommentvisitors/locale/locale_zh_TW.php	2005-01-20 16:04:28 UTC (rev 778)
+++ plugins/trunk/topcommentvisitors/locale/locale_zh_TW.php	2005-01-20 16:06:26 UTC (rev 779)
@@ -0,0 +1,8 @@
+<?php
+$messages["topcommentvisitors_maxvisitors"] = "最多迴響訪客顯示數量";
+$messages["topcommentvisitors_plugin_configuration"] = "外掛程式設定";
+$messages["topcommentvisitors_plugin_enabled"] = "啟動外掛程式";
+$messages["topcommentvisitors_plugin"] = "最多迴響訪客外掛程式";
+$messages["topcommentvisitors_settings_saved_ok"] = "最多迴響訪客設定儲存成功。";
+$messages["topcommentvisitors_error_maxvisitors"] = "最多迴響訪客顯示數量必須要 >= 0!";
+?>
\ No newline at end of file

Added: plugins/trunk/topcommentvisitors/plugintopcommentvisitors.class.php
===================================================================
--- plugins/trunk/topcommentvisitors/plugintopcommentvisitors.class.php	2005-01-20 16:04:28 UTC (rev 778)
+++ plugins/trunk/topcommentvisitors/plugintopcommentvisitors.class.php	2005-01-20 16:06:26 UTC (rev 779)
@@ -0,0 +1,97 @@
+<?php
+
+    include_once( PLOG_CLASS_PATH."class/plugin/pluginbase.class.php" );
+    include_once( PLOG_CLASS_PATH."class/plugin/pluginmanager.class.php" );
+    
+    /**
+     * Plugin that offers features to returns the top comment visitors object of current blog
+     */
+    class PluginTopCommentVisitors extends PluginBase
+    {
+        var $prefix;
+        var $pluginEnabled;
+        var $maxVisitors;        
+
+        function PluginTopCommentVisitors()
+        {
+            $this->PluginBase();
+  
+            $this->id = "topcommentvisitors";
+            $this->author = "Mark Wu";
+            $this->desc = "<p>This plugin offers the rank list of visitors by number of comments. Usage as follow:<br /><br />Add the following code to footer.template<br /><br /><strong>&lt;p&gt;<br />&lt;strong&gt;Top Comment Visitors&lt;/strong&gt;&lt;br /&gt;<br />{assign var=visitors value=\$topcommentvisitors-&gt;getTopCommentVisitors()}<br />{foreach from=\$visitors item=visitor}<br />&lt;li class=&quot;comment-bullet&quot;&gt;&lt;a title=&quot;{\$visitor.user_name}&quot; href=&quot;{\$visitor.user_url}&quot;&gt;{\$visitor.user_name}&lt;/a&gt; ({\$visitor.user_count})&lt;/li&gt;<br />{/foreach}<br />&lt;/p&gt;</strong><br /><br />You can use <br /><br /><strong>getTopCommentVisitors(5)</strong> to get top 5 comment visitors. The default view is BLOG. <br /><strong>getTopCommentVisitors(10, 'SITE')</strong> to get top 10 comment visitors from SITE view. It is very convenient for pLog Host Provider.<br /><br /></p><br />";
+  
+            $config =& Config::getConfig();
+            $this->prefix = $config->getValue('db_prefix');
+            
+            $this->db =& Db::getDb();
+            
+            $this->locales = Array( "en_UK" , "zh_TW" );
+            
+            $this->init();            
+        }
+
+		function init()
+		{
+            $this->registerAdminAction( "topcommentvisitors", "PluginTopCommentVisitorsConfigAction" );
+			$this->registerAdminAction( "updateTopCommentVisitorsConfig", "PluginTopCommentVisitorsUpdateConfigAction" );
+			
+			$menu =& Menu::getMenu();
+			if( !$menu->entryExists( "/menu/controlCenter/manageTopActivities" ))						
+				$this->addMenuEntry( "/menu/controlCenter", "manageTopActivities", "", "", true, false );			
+            $this->addMenuEntry( "/menu/controlCenter/manageTopActivities", "TopCommentVisitors", "?op=topcommentvisitors", "" );            
+		}
+
+		function register()
+		{
+		    $blogSettings = $this->blogInfo->getSettings();
+		    $this->pluginEnabled = $blogSettings->getValue( "plugin_topcommentvisitors_enabled" );
+	        $this->maxVisitors = $blogSettings->getValue( "plugin_topcommentvisitors_maxvisitors" );
+	    }
+	    
+	    function isEnabled()
+	    {
+	        return $this->pluginEnabled;
+	    }
+ 
+        /**
+         * Returns the top comment visitors of current blog
+         */
+        function getTopCommentVisitors($maxVisitors = 0, $based = 'BLOG')
+        {
+            $blogId = $this->blogInfo->getId();
+            
+            if ($based == 'BLOG') {
+                $query = "SELECT ".$this->prefix."articles_comments.user_name,max(".$this->prefix."articles_comments.user_url) AS user_url,count(".$this->prefix."articles_comments.user_name) AS user_count";
+                $query .= " FROM ".$this->prefix."articles_comments,".$this->prefix."articles";
+                $query .= " WHERE ".$this->prefix."articles.blog_id=".$blogId." AND ".$this->prefix."articles_comments.article_id=".$this->prefix."articles.id AND ".$this->prefix."articles.status=1";
+                $query .= " GROUP BY ".$this->prefix."articles_comments.user_name ORDER BY user_count DESC";
+            } elseif ($based == 'SITE') {
+                $query = "SELECT ".$this->prefix."articles_comments.user_name,max(".$this->prefix."articles_comments.user_url) AS user_url,count(".$this->prefix."articles_comments.user_name) AS user_count";
+                $query .= " FROM ".$this->prefix."articles_comments,".$this->prefix."articles";
+                $query .= " WHERE ".$this->prefix."articles_comments.article_id=".$this->prefix."articles.id AND ".$this->prefix."articles.status=1";
+                $query .= " GROUP BY ".$this->prefix."articles_comments.user_name ORDER BY user_count DESC";
+            } else {
+                return false;
+            }
+
+            if( $maxVisitors > 0 ) 
+            {
+                $query .= " LIMIT " . $maxVisitors; 
+            } else {
+                $query .= " LIMIT " . $this->maxVisitors;
+            }
+
+            $result = $this->db->Execute( $query ); 
+
+            if( !$result ) 
+                return false; 
+            
+            $topcommentvisitors = Array();
+            while( $row = $result->FetchRow()) { 
+               array_push( $topcommentvisitors, $row); 
+            } 
+
+            return $topcommentvisitors; 
+        }
+    }
+?>
\ No newline at end of file

Added: plugins/trunk/topcommentvisitors/templates/topcommentvisitors.template
===================================================================
--- plugins/trunk/topcommentvisitors/templates/topcommentvisitors.template	2005-01-20 16:04:28 UTC (rev 778)
+++ plugins/trunk/topcommentvisitors/templates/topcommentvisitors.template	2005-01-20 16:06:26 UTC (rev 779)
@@ -0,0 +1,16 @@
+{include file="$admintemplatepath/header.template"}
+{include file="$admintemplatepath/navigation.template" showOpt=TopCommentVisitors title=$locale->tr("topcommentvisitors_plugin")}
+<form name="topcommentvisitorsPluginConfig" method="post">
+ {$locale->tr("topcommentvisitors_plugin_enabled")}
+ <input type="checkbox" name="pluginEnabled" {if $pluginEnabled} checked="checked" {/if} value="1" /><br/>
+ <fieldset>
+ <legend>{$locale->tr("topcommentvisitors_plugin_configuration")}</legend>  
+ {$locale->tr("topcommentvisitors_maxvisitors")}
+ <input type="text" name="maxVisitors" value="{$maxVisitors}" width="10" />
+ </fieldset>
+ <br/>
+ <input type="hidden" name="op" value="updateTopCommentVisitorsConfig" />
+ <input type="submit" name="{$locale->tr("update_settings")}" value="{$locale->tr("update")}" />
+</form>
+{include file="$admintemplatepath/footernavigation.template"}
+{include file="$admintemplatepath/footer.template"}
\ No newline at end of file

Added: plugins/trunk/topreadposts/class/action/plugintopreadpostsconfigaction.class.php
===================================================================
--- plugins/trunk/topreadposts/class/action/plugintopreadpostsconfigaction.class.php	2005-01-20 16:04:28 UTC (rev 778)
+++ plugins/trunk/topreadposts/class/action/plugintopreadpostsconfigaction.class.php	2005-01-20 16:06:26 UTC (rev 779)
@@ -0,0 +1,35 @@
+<?php
+
+	include_once( PLOG_CLASS_PATH."class/action/admin/adminaction.class.php" );
+	include_once( PLOG_CLASS_PATH."class/view/admin/adminplugintemplatedview.class.php" );	
+
+	/**
+	 * shows a form with the current configuration
+	 */
+	class PluginTopReadPostsConfigAction extends AdminAction
+	{
+		
+		function PluginTopReadPostsConfigAction( $actionInfo, $request )
+		{
+			$this->AdminAction( $actionInfo, $request );
+		}
+		
+		function perform()
+		{
+			// load some configuration settings
+			$blogSettings = $this->_blogInfo->getSettings();
+			$pluginEnabled = $blogSettings->getValue( "plugin_topreadposts_enabled" );
+			$maxPosts = $blogSettings->getValue( "plugin_topreadposts_maxposts" );
+			if ($maxPosts == "") $maxPosts = 10;
+			
+			// create a view and export the settings to the template
+			$this->_view = new AdminPluginTemplatedView( $this->_blogInfo, "topreadposts", "topreadposts", true );
+			$this->_view->setValue( "pluginEnabled", $pluginEnabled );
+			$this->_view->setValue( "maxPosts", $maxPosts );
+			
+			$this->setCommonData();
+			
+			return true;
+		}
+	}
+?>
\ No newline at end of file

Added: plugins/trunk/topreadposts/class/action/plugintopreadpostsupdateconfigaction.class.php
===================================================================
--- plugins/trunk/topreadposts/class/action/plugintopreadpostsupdateconfigaction.class.php	2005-01-20 16:04:28 UTC (rev 778)
+++ plugins/trunk/topreadposts/class/action/plugintopreadpostsupdateconfigaction.class.php	2005-01-20 16:06:26 UTC (rev 779)
@@ -0,0 +1,67 @@
+<?php
+
+	include_once( PLOG_CLASS_PATH."class/action/admin/adminaction.class.php" );
+    include_once( PLOG_CLASS_PATH."class/view/admin/adminerrorview.class.php" );
+	include_once( PLOG_CLASS_PATH."class/view/admin/adminmessageview.class.php" );
+		
+	/**
+	 * updates the plugin configuration
+	 */
+	class PluginTopReadPostsUpdateConfigAction extends AdminAction
+	{
+		var $_pluginEnabled;
+		var $_maxPosts;
+		
+		function PluginRTopReadPostsUpdateConfigAction( $actionInfo, $request )
+		{
+			$this->AdminAction( $actionInfo, $request );
+		}
+		
+		function validate()
+		{
+            $this->_pluginEnabled = $this->_request->getValue( "pluginEnabled" );
+            $this->_pluginEnabled = ($this->_pluginEnabled != "" );			
+            $this->_maxPosts = $this->_request->getValue( "maxPosts" );
+            if( $this->_maxPosts <= 0 ) {
+                
+                
+                $this->_view = new AdminErrorView( $this->_blogInfo );
+                $this->_view->setValue( "message", $this->_locale->tr("topreadposts_error_maxposts"));
+                $this->setCommonData();  
+                return false;
+        }        	                
+			
+			return true;
+		}
+		        
+		function perform()
+		{
+            // and check which smiley set we should be using, or if none, then the default one
+			$blogSettings = $this->_blogInfo->getSettings();
+            $blogSettings->setValue( "plugin_topreadposts_enabled", $this->_pluginEnabled );
+            $blogSettings->setValue( "plugin_topreadposts_maxposts", $this->_maxPosts );
+            $this->_blogInfo->setSettings( $blogSettings ); 
+		
+			// save the blogs settings
+			$blogs = new Blogs();
+            if( !$blogs->updateBlog( $this->_blogInfo->getId(), $this->_blogInfo )) {
+                $this->_view = new AdminErrorView( $this->_blogInfo );
+                $this->_view->setValue( "message", $this->_locale->tr("error_updating_settings"));
+                $this->setCommonData();
+
+                return false;
+            }
+			
+			// if everything went ok...
+            $this->_blogInfo->setSettings( $blogSettings );
+            $this->_session->setValue( "blogInfo", $this->_blogInfo );
+            $this->saveSession();
+			
+			$this->_view = new AdminMessageView( $this->_blogInfo );
+			$this->_view->setMessage( $this->_locale->tr("topreadposts_settings_saved_ok"));
+			$this->setCommonData();
+            
+            return true;		
+		}
+	}
+?>
\ No newline at end of file

Added: plugins/trunk/topreadposts/locale/locale_en_UK.php
===================================================================
--- plugins/trunk/topreadposts/locale/locale_en_UK.php	2005-01-20 16:04:28 UTC (rev 778)
+++ plugins/trunk/topreadposts/locale/locale_en_UK.php	2005-01-20 16:06:26 UTC (rev 779)
@@ -0,0 +1,8 @@
+<?php
+$messages["topreadposts_maxposts"] = "Maximum Showed Posts";
+$messages["topreadposts_plugin_configuration"] = "Configuration this plugin";
+$messages["topreadposts_plugin_enabled"] = "Enable this plugin";
+$messages["topreadposts_plugin"] = "Top Read Posts Plugin";
+$messages["topreadposts_settings_saved_ok"] = "Top Read Posts settings saved successfully!";
+$messages["topreadposts_error_maxposts"] = "Maximum Showed Posts Should >= 0!";
+?>
\ No newline at end of file

Added: plugins/trunk/topreadposts/locale/locale_zh_TW.php
===================================================================
--- plugins/trunk/topreadposts/locale/locale_zh_TW.php	2005-01-20 16:04:28 UTC (rev 778)
+++ plugins/trunk/topreadposts/locale/locale_zh_TW.php	2005-01-20 16:06:26 UTC (rev 779)
@@ -0,0 +1,8 @@
+<?php
+$messages["topreadposts_maxposts"] = "最多閱讀文章顯示數量";
+$messages["topreadposts_plugin_configuration"] = "外掛程式設定";
+$messages["topreadposts_plugin_enabled"] = "啟動外掛程式";
+$messages["topreadposts_plugin"] = "最多閱讀文章外掛程式";
+$messages["topreadposts_settings_saved_ok"] = "最多閱讀文章設定儲存成功。";
+$messages["topreadposts_error_maxposts"] = "最多閱讀文章顯示數量必須要 >= 0!";
+?>
\ No newline at end of file

Added: plugins/trunk/topreadposts/plugintopreadposts.class.php
===================================================================
--- plugins/trunk/topreadposts/plugintopreadposts.class.php	2005-01-20 16:04:28 UTC (rev 778)
+++ plugins/trunk/topreadposts/plugintopreadposts.class.php	2005-01-20 16:06:26 UTC (rev 779)
@@ -0,0 +1,96 @@
+<?php
+
+    include_once( PLOG_CLASS_PATH."class/plugin/pluginbase.class.php" );
+    include_once( PLOG_CLASS_PATH."class/plugin/pluginmanager.class.php" );
+    include_once( PLOG_CLASS_PATH."class/dao/articles.class.php" );
+    
+    /**
+     * Plugin that offers features to returns the top read posts object of current blog
+     */
+    class PluginTopReadPosts extends PluginBase
+    {
+
+        var $prefix;
+        var $pluginEnabled;
+        var $maxPosts;  
+    
+        function PluginTopReadPosts()
+        {
+            $this->PluginBase();
+  
+            $this->id = "topreadposts";
+            $this->author = "Mark Wu";
+            $this->desc = "This plugin offers the rank list of articles by number of read. Usage as follow:<br /><br />Add the following code to footer.template<br /><br /><strong>&lt;p&gt;<br />&lt;strong&gt;Top Read Posts&lt;/strong&gt;&lt;br /&gt;<br />{assign var=posts value=\$topreadposts-&gt;getTopReadPosts()}<br />{foreach from=\$posts item=post}<br />&lt;li&gt;&lt;a title=&quot;{\$post-&gt;getText()|truncate:150:&quot;...&quot;|escape}&quot; href=&quot;{\$url-&gt;postLink(\$post)}&quot;&gt;{\$post-&gt;getTopic()}&lt;/a&gt; ({\$post-&gt;getNumReads()} Times)&lt;/li&gt;<br />{/foreach}<br />&lt;/p&gt;</strong> <br /><br />You can use <br /><br /><strong>getTopReadPosts(5)</strong> to get top 5 read posts. The default view is BLOG. <br /><strong>getTopReadPosts(10, 'SITE')</strong> to get top 10 read posts from SITE view. It is very convenient for pLog Host Provider.<br /><br />";  
+            $config =& Config::getConfig();
+            $this->prefix = $config->getValue('db_prefix');
+            
+            $this->locales = Array( "en_UK" , "zh_TW" );
+            
+            $this->init(); 
+        }
+
+		function init()
+		{
+            $this->registerAdminAction( "topreadposts", "PluginTopReadPostsConfigAction" );
+			$this->registerAdminAction( "updateTopReadPostsConfig", "PluginTopReadPostsUpdateConfigAction" );
+			
+			$menu =& Menu::getMenu();
+			if( !$menu->entryExists( "/menu/controlCenter/manageTopActivities" ))						
+				$this->addMenuEntry( "/menu/controlCenter", "manageTopActivities", "", "", true, false );			
+            $this->addMenuEntry( "/menu/controlCenter/manageTopActivities", "TopReadPosts", "?op=topreadposts", "" );            
+		}
+
+		function register()
+		{
+		    $blogSettings = $this->blogInfo->getSettings();
+		    $this->pluginEnabled = $blogSettings->getValue( "plugin_topreadposts_enabled" );
+	        $this->maxPosts = $blogSettings->getValue( "plugin_topreadposts_maxposts" );
+	    }
+	    
+	    function isEnabled()
+	    {
+	        return $this->pluginEnabled;
+	    }
+ 
+        /**
+         * Returns the top read posts object of current blog
+         */
+        function getTopReadPosts($maxPosts = 0, $based = 'BLOG')
+        {
+            $articles = new Articles();
+            $blogId = $this->blogInfo->getId();
+            
+            if ($based == 'BLOG') { 
+                $query = "SELECT * FROM ".$this->prefix."articles";
+                $query .= " WHERE blog_id = ".$blogId." AND status = 1";
+                $query .= " ORDER BY num_reads DESC";                
+            } elseif ($based == 'SITE') {
+                $query = "SELECT * FROM ".$this->prefix."articles";
+                $query .= " WHERE status = 1";
+                $query .= " ORDER BY num_reads DESC";
+            } else {
+                return false;
+            }
+
+            if( $maxPosts > 0 ) 
+            {
+                $query .= " LIMIT " . $maxPosts; 
+            } else {
+                $query .= " LIMIT " . $this->maxPosts;
+            }
+
+            $result = $articles->_db->Execute( $query ); 
+
+            if( !$result ) 
+                return false; 
+            
+            $topreadposts = Array();
+            while( $row = $result->FetchRow()) { 
+               $article = $articles->_fillArticleInformation( $row );
+               array_push( $topreadposts, $article); 
+            } 
+
+            return $topreadposts; 
+        }
+    }
+?>
\ No newline at end of file

Added: plugins/trunk/topreadposts/templates/topreadposts.template
===================================================================
--- plugins/trunk/topreadposts/templates/topreadposts.template	2005-01-20 16:04:28 UTC (rev 778)
+++ plugins/trunk/topreadposts/templates/topreadposts.template	2005-01-20 16:06:26 UTC (rev 779)
@@ -0,0 +1,16 @@
+{include file="$admintemplatepath/header.template"}
+{include file="$admintemplatepath/navigation.template" showOpt=TopReadPosts title=$locale->tr("topreadposts_plugin")}
+<form name="topreadpostsPluginConfig" method="post">
+ {$locale->tr("topreadposts_plugin_enabled")}
+ <input type="checkbox" name="pluginEnabled" {if $pluginEnabled} checked="checked" {/if} value="1" /><br/>
+ <fieldset>
+ <legend>{$locale->tr("topreadposts_plugin_configuration")}</legend>
+ {$locale->tr("topreadposts_maxposts")}
+ <input type="text" name="maxPosts" value="{$maxPosts}" width="10" />
+ </fieldset>
+ <br/>
+ <input type="hidden" name="op" value="updateTopReadPostsConfig" />
+ <input type="submit" name="{$locale->tr("update_settings")}" value="{$locale->tr("update")}" />
+</form>
+{include file="$admintemplatepath/footernavigation.template"}
+{include file="$admintemplatepath/footer.template"}
\ No newline at end of file

Added: plugins/trunk/toptrackbackposts/class/action/plugintoptrackbackpostsconfigaction.class.php
===================================================================
--- plugins/trunk/toptrackbackposts/class/action/plugintoptrackbackpostsconfigaction.class.php	2005-01-20 16:04:28 UTC (rev 778)
+++ plugins/trunk/toptrackbackposts/class/action/plugintoptrackbackpostsconfigaction.class.php	2005-01-20 16:06:26 UTC (rev 779)
@@ -0,0 +1,35 @@
+<?php
+
+	include_once( PLOG_CLASS_PATH."class/action/admin/adminaction.class.php" );
+	include_once( PLOG_CLASS_PATH."class/view/admin/adminplugintemplatedview.class.php" );	
+
+	/**
+	 * shows a form with the current configuration
+	 */
+	class PluginTopTrackbackPostsConfigAction extends AdminAction
+	{
+		
+		function PluginTopTrackbackPostsConfigAction( $actionInfo, $request )
+		{
+			$this->AdminAction( $actionInfo, $request );
+		}
+		
+		function perform()
+		{
+			// load some configuration settings
+			$blogSettings = $this->_blogInfo->getSettings();
+			$pluginEnabled = $blogSettings->getValue( "plugin_toptrackbackposts_enabled" );
+			$maxPosts = $blogSettings->getValue( "plugin_toptrackbackposts_maxposts" );
+			if ($maxPosts == "") $maxPosts = 10;
+			
+			// create a view and export the settings to the template
+			$this->_view = new AdminPluginTemplatedView( $this->_blogInfo, "toptrackbackposts", "toptrackbackposts", true );
+			$this->_view->setValue( "pluginEnabled", $pluginEnabled );
+			$this->_view->setValue( "maxPosts", $maxPosts );
+			
+			$this->setCommonData();
+			
+			return true;
+		}
+	}
+?>
\ No newline at end of file

Added: plugins/trunk/toptrackbackposts/class/action/plugintoptrackbackpostsupdateconfigaction.class.php
===================================================================
--- plugins/trunk/toptrackbackposts/class/action/plugintoptrackbackpostsupdateconfigaction.class.php	2005-01-20 16:04:28 UTC (rev 778)
+++ plugins/trunk/toptrackbackposts/class/action/plugintoptrackbackpostsupdateconfigaction.class.php	2005-01-20 16:06:26 UTC (rev 779)
@@ -0,0 +1,67 @@
+<?php
+
+	include_once( PLOG_CLASS_PATH."class/action/admin/adminaction.class.php" );
+    include_once( PLOG_CLASS_PATH."class/view/admin/adminerrorview.class.php" );
+	include_once( PLOG_CLASS_PATH."class/view/admin/adminmessageview.class.php" );
+		
+	/**
+	 * updates the plugin configuration
+	 */
+	class PluginTopTrackbackPostsUpdateConfigAction extends AdminAction
+	{
+		var $_pluginEnabled;
+		var $_maxPosts;
+		
+		function PluginRTopTrackbackPostsUpdateConfigAction( $actionInfo, $request )
+		{
+			$this->AdminAction( $actionInfo, $request );
+		}
+		
+		function validate()
+		{
+            $this->_pluginEnabled = $this->_request->getValue( "pluginEnabled" );
+            $this->_pluginEnabled = ($this->_pluginEnabled != "" );			
+            $this->_maxPosts = $this->_request->getValue( "maxPosts" );
+            if( $this->_maxPosts <= 0 ) {
+                
+                
+                $this->_view = new AdminErrorView( $this->_blogInfo );
+                $this->_view->setValue( "message", $this->_locale->tr("toptrackbackposts_error_maxposts"));
+                $this->setCommonData();  
+                return false;
+        }        	                
+			
+			return true;
+		}
+		        
+		function perform()
+		{
+            // and check which smiley set we should be using, or if none, then the default one
+			$blogSettings = $this->_blogInfo->getSettings();
+            $blogSettings->setValue( "plugin_toptrackbackposts_enabled", $this->_pluginEnabled );
+            $blogSettings->setValue( "plugin_toptrackbackposts_maxposts", $this->_maxPosts );
+            $this->_blogInfo->setSettings( $blogSettings ); 
+		
+			// save the blogs settings
+			$blogs = new Blogs();
+            if( !$blogs->updateBlog( $this->_blogInfo->getId(), $this->_blogInfo )) {
+                $this->_view = new AdminErrorView( $this->_blogInfo );
+                $this->_view->setValue( "message", $this->_locale->tr("error_updating_settings"));
+                $this->setCommonData();
+
+                return false;
+            }
+			
+			// if everything went ok...
+            $this->_blogInfo->setSettings( $blogSettings );
+            $this->_session->setValue( "blogInfo", $this->_blogInfo );
+            $this->saveSession();
+			
+			$this->_view = new AdminMessageView( $this->_blogInfo );
+			$this->_view->setMessage( $this->_locale->tr("toptrackbackposts_settings_saved_ok"));
+			$this->setCommonData();
+            
+            return true;		
+		}
+	}
+?>
\ No newline at end of file

Added: plugins/trunk/toptrackbackposts/locale/locale_en_UK.php
===================================================================
--- plugins/trunk/toptrackbackposts/locale/locale_en_UK.php	2005-01-20 16:04:28 UTC (rev 778)
+++ plugins/trunk/toptrackbackposts/locale/locale_en_UK.php	2005-01-20 16:06:26 UTC (rev 779)
@@ -0,0 +1,8 @@
+<?php
+$messages["toptrackbackposts_maxposts"] = "Maximum Showed Posts";
+$messages["toptrackbackposts_plugin_configuration"] = "Configuration this plugin";
+$messages["toptrackbackposts_plugin_enabled"] = "Enable this plugin";
+$messages["toptrackbackposts_plugin"] = "Top Trackback Posts Plugin";
+$messages["toptrackbackposts_settings_saved_ok"] = "Top Trackback Posts settings saved successfully!";
+$messages["toptrackbackposts_error_maxposts"] = "Maximum Showed Posts Should >= 0!";
+?>
\ No newline at end of file

Added: plugins/trunk/toptrackbackposts/locale/locale_zh_TW.php
===================================================================
--- plugins/trunk/toptrackbackposts/locale/locale_zh_TW.php	2005-01-20 16:04:28 UTC (rev 778)
+++ plugins/trunk/toptrackbackposts/locale/locale_zh_TW.php	2005-01-20 16:06:26 UTC (rev 779)
@@ -0,0 +1,8 @@
+<?php
+$messages["toptrackbackposts_maxposts"] = "最多引用文章顯示數量";
+$messages["toptrackbackposts_plugin_configuration"] = "外掛程式設定";
+$messages["toptrackbackposts_plugin_enabled"] = "啟動外掛程式";
+$messages["toptrackbackposts_plugin"] = "最多引用文章外掛程式";
+$messages["toptrackbackposts_settings_saved_ok"] = "最多引用文章設定儲存成功。";
+$messages["toptrackbackposts_error_maxposts"] = "最多引用文章顯示數量必須要 >= 0!";
+?>
\ No newline at end of file

Added: plugins/trunk/toptrackbackposts/plugintoptrackbackposts.class.php
===================================================================
--- plugins/trunk/toptrackbackposts/plugintoptrackbackposts.class.php	2005-01-20 16:04:28 UTC (rev 778)
+++ plugins/trunk/toptrackbackposts/plugintoptrackbackposts.class.php	2005-01-20 16:06:26 UTC (rev 779)
@@ -0,0 +1,127 @@
+<?php
+
+    include_once( PLOG_CLASS_PATH."class/plugin/pluginbase.class.php" );
+    include_once( PLOG_CLASS_PATH."class/plugin/pluginmanager.class.php" );
+    include_once( PLOG_CLASS_PATH."class/dao/trackbacks.class.php" );
+    include_once( PLOG_CLASS_PATH."class/dao/articles.class.php" );
+    
+    /**
+     * Plugin that offers features to returns the top trackback posts object of current blog
+     */
+    class PluginTopTrackbackPosts extends PluginBase
+    {
+        var $prefix;
+        var $pluginEnabled;
+        var $maxPosts;        
+    
+        function PluginTopTrackbackPosts()
+        {
+            $this->PluginBase();
+  
+            $this->id = "toptrackbackposts";
+            $this->author = "Mark Wu";
+            $this->desc = "This plugin offers the rank list of articles by number of trackbacks. Usage as follow:<br /><br />Add the following code to footer.template<br /><br /><strong>&lt;p&gt;<br />&lt;strong&gt;Top Trackback Post&lt;/strong&gt;&lt;br /&gt;<br />{assign var=posts value=\$toptrackbackposts-&gt;getTopTrackbackPosts()}<br />{foreach from=\$posts item=post}<br />{assign var=postid value=\$post-&gt;getId()}<br />&lt;li&gt;&lt;a title=&quot;{\$post-&gt;getText()|truncate:150:&quot;...&quot;|escape}&quot; href=&quot;{\$url-&gt;postLink(\$post)}&quot;&gt;{\$post-&gt;getTopic()}&lt;/a&gt; ({\$toptrackbackposts-&gt;getArticleTrackbackCount(\$postid)} ½g)&lt;/li&gt;<br />{/foreach}<br />&lt;/p&gt;</strong> <br /><br />You can use <br /><br /><strong>getTopTrackbackPosts(5)</strong> to get top 5 trackback posts. The default view is BLOG. <br /><strong>getTopTrackbackPosts(10, 'SITE')</strong> to get top 10 trackback posts from SITE view. It is very convenient for pLog Host Provider.<br /><br />";
+  
+            $config =& Config::getConfig();
+            $this->prefix = $config->getValue('db_prefix');
+            
+            $this->locales = Array( "en_UK" , "zh_TW" );
+            
+            $this->init();            
+        }
+
+		function init()
+		{
+            $this->registerAdminAction( "toptrackbackposts", "PluginTopTrackbackPostsConfigAction" );
+			$this->registerAdminAction( "updateTopTrackbackPostsConfig", "PluginTopTrackbackPostsUpdateConfigAction" );
+			
+			$menu =& Menu::getMenu();
+			if( !$menu->entryExists( "/menu/controlCenter/manageTopActivities" ))						
+				$this->addMenuEntry( "/menu/controlCenter", "manageTopActivities", "", "", true, false );			
+            $this->addMenuEntry( "/menu/controlCenter/manageTopActivities", "TopTrackbackPosts", "?op=toptrackbackposts", "" );            
+		}
+
+		function register()
+		{
+		    $blogSettings = $this->blogInfo->getSettings();
+		    $this->pluginEnabled = $blogSettings->getValue( "plugin_toptrackbackposts_enabled" );
+	        $this->maxPosts = $blogSettings->getValue( "plugin_toptrackbackposts_maxposts" );
+	    }
+	    
+	    function isEnabled()
+	    {
+	        return $this->pluginEnabled;
+	    }
+
+        /**
+         * Returns the top trackback posts object of current blog
+         */
+        function getTopTrackbackPosts($maxPosts = 0, $based = 'BLOG')
+        {
+            $trackbacks = new Trackbacks();
+            $blogId = $this->blogInfo->getId();
+ 
+            if ($based == 'BLOG') {           
+                $query = "SELECT ".$this->prefix."trackbacks.article_id,count(".$this->prefix."trackbacks.article_id) as trackback_count"; 
+                $query .= " FROM ".$this->prefix."trackbacks, ".$this->prefix."articles";
+                $query .= " WHERE ".$this->prefix."trackbacks.article_id = ".$this->prefix."articles.id AND ".$this->prefix."articles.blog_id = ".$blogId." AND ".$this->prefix."articles.status = 1";
+                $query .= " GROUP BY ".$this->prefix."trackbacks.article_id ORDER BY trackback_count DESC";
+            } elseif ($based == 'SITE') {
+                $query = "SELECT ".$this->prefix."trackbacks.article_id,count(".$this->prefix."trackbacks.article_id) as trackback_count"; 
+                $query .= " FROM ".$this->prefix."trackbacks, ".$this->prefix."articles";
+                $query .= " WHERE ".$this->prefix."trackbacks.article_id = ".$this->prefix."articles.id AND ".$this->prefix."articles.status = 1";
+                $query .= " GROUP BY ".$this->prefix."trackbacks.article_id ORDER BY trackback_count DESC";
+            } else {
+                return false;
+            }
+
+            if( $maxPosts > 0 ) 
+            {
+                $query .= " LIMIT " . $maxPosts; 
+            } else {
+                $query .= " LIMIT " . $this->maxPosts;
+            }
+
+            $result = $trackbacks->_db->Execute( $query ); 
+
+            if( !$result ) 
+                return false; 
+            
+            $toptrackbackposts = Array();
+            while( $row = $result->FetchRow()) { 
+               $article = $this->getArticle($row["article_id"]);
+               array_push( $toptrackbackposts, $article); 
+            } 
+
+            return $toptrackbackposts; 
+        }
+        
+        function getArticle( $artId )
+        {
+            $articles = new Articles();
+            $blogId = $this->blogInfo->getId();
+            
+            $query = "SELECT * FROM ".$this->prefix."articles WHERE id = ".$artId;
+
+               $query .= " AND blog_id = ".$blogId;
+
+            $query .= ";";
+
+            // we send the query and then fetch the first array with the result
+            $result = $articles->_db->Execute( $query );
+
+            if( $result == false )
+                return false;
+
+            if ( $result->RecordCount() == 0)
+                return false;
+
+            $row = $result->FetchRow( $result );
+
+            $article = $articles->_fillArticleInformation( $row );
+
+            return $article;
+        }
+    }
+
+?>
\ No newline at end of file

Added: plugins/trunk/toptrackbackposts/templates/toptrackbackposts.template
===================================================================
--- plugins/trunk/toptrackbackposts/templates/toptrackbackposts.template	2005-01-20 16:04:28 UTC (rev 778)
+++ plugins/trunk/toptrackbackposts/templates/toptrackbackposts.template	2005-01-20 16:06:26 UTC (rev 779)
@@ -0,0 +1,16 @@
+{include file="$admintemplatepath/header.template"}
+{include file="$admintemplatepath/navigation.template" showOpt=TopTrackbackPosts title=$locale->tr("toptrackbackposts_plugin")}
+<form name="toptrackbackpostsPluginConfig" method="post">
+ {$locale->tr("toptrackbackposts_plugin_enabled")}
+ <input type="checkbox" name="pluginEnabled" {if $pluginEnabled} checked="checked" {/if} value="1" /><br/>
+ <fieldset>
+ <legend>{$locale->tr("toptrackbackposts_plugin_configuration")}</legend> 
+ {$locale->tr("toptrackbackposts_maxposts")}
+ <input type="text" name="maxPosts" value="{$maxPosts}" width="10" />
+ </fieldset>
+ <br/>
+ <input type="hidden" name="op" value="updateTopTrackbackPostsConfig" />
+ <input type="submit" name="{$locale->tr("update_settings")}" value="{$locale->tr("update")}" />
+</form>
+{include file="$admintemplatepath/footernavigation.template"}
+{include file="$admintemplatepath/footer.template"}
\ No newline at end of file




More information about the pLog-svn mailing list