[pLog-svn] r5107 - in plugins/branches/lifetype-1.2: . copyarticle	copyarticle/class copyarticle/class/action copyarticle/imgs	copyarticle/locale
    oscar at devel.lifetype.net 
    oscar at devel.lifetype.net
       
    Thu Mar 15 19:40:27 EDT 2007
    
    
  
Author: oscar
Date: 2007-03-15 19:40:27 -0400 (Thu, 15 Mar 2007)
New Revision: 5107
Added:
   plugins/branches/lifetype-1.2/copyarticle/
   plugins/branches/lifetype-1.2/copyarticle/class/
   plugins/branches/lifetype-1.2/copyarticle/class/action/
   plugins/branches/lifetype-1.2/copyarticle/class/action/admincopyarticleaction.class.php
   plugins/branches/lifetype-1.2/copyarticle/imgs/
   plugins/branches/lifetype-1.2/copyarticle/imgs/copy.png
   plugins/branches/lifetype-1.2/copyarticle/locale/
   plugins/branches/lifetype-1.2/copyarticle/locale/locale_en_UK.php
   plugins/branches/lifetype-1.2/copyarticle/plugincopyarticle.class.php
Log:
A little plugin that will add an extra icon to copy an article to each row in the "edit posts" page. When copying the article, its counters are reset and the status is set back to 'draft'.
This plugin serves as a test of the new EVENT_PROCESS_BLOG_ADMIN_TEMPLATE_OUTPUT event, it wasn't too difficult after all to add the contents I wanted to the page via a couple of regular expressions...
Added: plugins/branches/lifetype-1.2/copyarticle/class/action/admincopyarticleaction.class.php
===================================================================
--- plugins/branches/lifetype-1.2/copyarticle/class/action/admincopyarticleaction.class.php	                        (rev 0)
+++ plugins/branches/lifetype-1.2/copyarticle/class/action/admincopyarticleaction.class.php	2007-03-15 23:40:27 UTC (rev 5107)
@@ -0,0 +1,65 @@
+<?php
+
+	lt_include( PLOG_CLASS_PATH."class/action/admin/adminaction.class.php" );
+    lt_include( PLOG_CLASS_PATH."class/view/admin/adminpostslistview.class.php" );	
+    lt_include( PLOG_CLASS_PATH."class/data/validator/integervalidator.class.php" );
+    lt_include( PLOG_CLASS_PATH."class/dao/articles.class.php" );
+
+	class AdminCopyArticleAction extends AdminAction
+	{
+		function AdminCopyArticleAction( $actionInfo, $request ) 
+		{
+			$this->AdminAction( $actionInfo, $request );
+			
+			$this->registerFieldValidator( "postId", new IntegerValidator());
+        	$view = new AdminPostsListView( $this->_blogInfo );
+        	$view->setErrorMessage( $this->_locale->tr("error_incorrect_article_id"));
+        	$this->setValidationErrorView( $view );			
+		}
+		
+		function perform()
+		{
+	        // fetch the post id that has already been validated
+	     	$postId = $this->_request->getValue( "postId" );   
+	        
+        	// fetch the post from the database
+            $posts = new Articles();
+            $post  = $posts->getBlogArticle( $postId, $this->_blogInfo->getId(), false );
+
+            // if the article does not exist, quit
+            if( !$post ) {
+            	$this->_view = new AdminPostsListView( $this->_blogInfo );
+                $this->_view->setErrorMessage( $this->_locale->tr("error_fetching_article" ));
+                $this->setCommonData();
+
+                return false;
+            }
+
+			// if the article was found:
+			// 		remove its current id
+			//		set the status to 'draft'
+			//		reset its counters (num reads, comment and trackback counters)
+			$post->setId( -1 );
+			$post->setStatus( POST_STATUS_DRAFT );
+			$post->setTotalComments( 0 );
+			$post->setTotalTrackbacks( 0 );
+			$post->setNumComments( 0 );
+			$post->setNumTrackbacks( 0 );			
+			$post->setNumReads( 0 );
+			
+			// and save it again
+			if( !$posts->addArticle( $post )) {
+            	$this->_view = new AdminPostsListView( $this->_blogInfo );
+                $this->_view->setErrorMessage( $this->_locale->tr("error_copying_article" ));
+                $this->setCommonData();
+
+                return( false );
+			}
+			
+        	$this->_view = new AdminPostsListView( $this->_blogInfo );
+            $this->_view->setSuccessMessage( $this->_locale->tr("article_copied_ok" ));
+            $this->setCommonData();
+			return( true );			
+		}		
+	}
+?>
\ No newline at end of file
Added: plugins/branches/lifetype-1.2/copyarticle/imgs/copy.png
===================================================================
(Binary files differ)
Property changes on: plugins/branches/lifetype-1.2/copyarticle/imgs/copy.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream
Added: plugins/branches/lifetype-1.2/copyarticle/locale/locale_en_UK.php
===================================================================
--- plugins/branches/lifetype-1.2/copyarticle/locale/locale_en_UK.php	                        (rev 0)
+++ plugins/branches/lifetype-1.2/copyarticle/locale/locale_en_UK.php	2007-03-15 23:40:27 UTC (rev 5107)
@@ -0,0 +1,4 @@
+<?php
+$messages['error_copying_article'] = 'There was an error copying the selected article';
+$messages['article_copied_ok'] = 'The article was copied successfully';
+?>
\ No newline at end of file
Added: plugins/branches/lifetype-1.2/copyarticle/plugincopyarticle.class.php
===================================================================
--- plugins/branches/lifetype-1.2/copyarticle/plugincopyarticle.class.php	                        (rev 0)
+++ plugins/branches/lifetype-1.2/copyarticle/plugincopyarticle.class.php	2007-03-15 23:40:27 UTC (rev 5107)
@@ -0,0 +1,56 @@
+<?php
+
+	lt_include( PLOG_CLASS_PATH."class/plugin/pluginbase.class.php" );
+	
+	class PluginCopyArticle extends PluginBase
+	{
+		function PluginCopyArticle( $source )
+		{
+			$this->PluginBase( $source );
+			
+			$this->id = "copyarticle";
+			$this->version = "20070315";
+			$this->author = "The LifeType Project";
+			$this->desc = "Provides extra functionality in the \"Edit Post\" screen to copy an article.";
+			
+			if( $source == "admin" ) {
+				// hook up to our event
+				$this->registerNotification( EVENT_PROCESS_BLOG_ADMIN_TEMPLATE_OUTPUT );
+				// and register a new admin action
+				$this->registerAdminAction( "copyArticle", "AdminCopyArticleAction" );
+			}
+		}
+		
+		function process( $event, $params )
+		{
+			// only process the "editposts" template
+			if( $params["template"] != "editposts" )
+				return;
+
+			// load the current contents of the template
+			$content = $params["content"];
+						
+			$regexp = "/<div class=\"list_action_button\">.*?<\/div>/s";
+			
+			preg_match_all( $regexp, $content, $matches, PREG_SET_ORDER );
+
+			//print_r($matches);			
+			
+			// now process each one of the matches and do the replacements...
+			foreach( $matches as $match ) {
+				// fetch the article id 
+				$res = preg_match( "/<a href=\"\?op=editPost&postId=([0-9]+)\"/i", $match[0], $result );
+				if( $res ) {
+					// regenerate the block, adding the new markup
+					$artId = $result[1];
+					$toAdd = "<a href=\"?op=copyArticle&postId={$artId}\"><img src=\"plugins/copyarticle/imgs/copy.png\" alt=\"copy\" /></a></div>";
+					$newStr = str_replace( "</div>", $toAdd, $match[0] );
+					// and now replace the old block with the new one in the global $content variable
+					$content = str_replace( $match[0], $newStr, $content );
+				}
+			}
+			
+			$params["content"] = $content;
+		}
+	}
+?>
\ No newline at end of file
    
    
More information about the pLog-svn
mailing list