[pLog-svn] r5919 - in plog/trunk: class/action/admin class/view/admin templates/admin

oscar at devel.lifetype.net oscar at devel.lifetype.net
Fri Sep 7 18:08:28 EDT 2007


Author: oscar
Date: 2007-09-07 18:08:28 -0400 (Fri, 07 Sep 2007)
New Revision: 5919

Added:
   plog/trunk/class/action/admin/admincopyblogtemplatesetaction.class.php
Modified:
   plog/trunk/class/action/admin/admindeleteblogtemplateaction.class.php
   plog/trunk/class/action/admin/admineditblogtemplatesaction.class.php
   plog/trunk/class/view/admin/adminblogtemplatesetslistview.class.php
   plog/trunk/templates/admin/blogtemplates_table.template
Log:
Implemented the rest of the functonality for working with blog templates (copy an entire template set) and fixed a couple of things when deleting templates.


Added: plog/trunk/class/action/admin/admincopyblogtemplatesetaction.class.php
===================================================================
--- plog/trunk/class/action/admin/admincopyblogtemplatesetaction.class.php	                        (rev 0)
+++ plog/trunk/class/action/admin/admincopyblogtemplatesetaction.class.php	2007-09-07 22:08:28 UTC (rev 5919)
@@ -0,0 +1,135 @@
+<?php
+
+	lt_include( PLOG_CLASS_PATH."class/action/admin/adminbasetemplateeditoraction.class.php" );
+	lt_include( PLOG_CLASS_PATH."class/data/validator/templatenamevalidator.class.php" );	
+	lt_include( PLOG_CLASS_PATH."class/data/validator/stringvalidator.class.php" );		
+	lt_include( PLOG_CLASS_PATH."class/data/filter/regexpfilter.class.php" );		
+	lt_include( PLOG_CLASS_PATH."class/template/templatesets/templatesets.class.php" );
+	lt_include( PLOG_CLASS_PATH."class/template/editor/templatetools.class.php" );	
+	lt_include( PLOG_CLASS_PATH."class/view/admin/adminsitetemplateslistview.class.php" );	
+	lt_include( PLOG_CLASS_PATH."class/view/admin/adminerrordialogview.class.php" );
+	
+	class AdminCopyBlogTemplateSetAction extends AdminBaseTemplateEditorAction
+	{
+		protected $_templateId;
+		protected $_destTemplate;
+		protected $_sourceTemplateType;
+		
+		private $_message;
+		
+		/**
+		 * Whether the source template is a global template or a blog template
+		 */
+		const GLOBAL_TEMPLATE = 1;
+		const BLOG_TEMPLATE   = 2;
+		
+		function __construct( $actionInfo, $request )
+		{
+			$this->AdminBaseTemplateEditorAction( $actionInfo, $request );
+			
+			$this->registerFieldValidator( "templateId", new TemplateNameValidator(), false);
+			$this->registerFieldValidator( "destTemplate", new StringValidator(), true );
+			$view = new AdminSiteTemplatesListView( $this->_blogInfo );
+			$view->setErrorMessage( $this->_locale->tr( "error_copying_template_set" ));
+			$this->setValidationErrorView( $view );
+			
+			$this->blogId = $this->_blogInfo->getId();
+
+			$this->requirePermission( "update_blog_template" );
+		}
+		
+		function validate()
+		{
+			if( !$this->validateTemplateName())
+				return( false );
+
+			// check that the destination template does not exist
+			$this->_destTemplate = $this->_request->getFilteredValue( "destTemplate", TemplateTools::getTemplateNameFilter());
+			if( TemplateSets::isTemplate( $this->_destTemplate )) {
+				// show a more specific error message
+				$this->_validationErrorView->setErrorMessage( $this->_locale->tr( "error_template_set_already_exists" ));
+				$this->_form->setFieldValidationStatus( "destTemplate", false );
+				$this->validationErrorProcessing();
+				return( false );				
+			}
+			
+			// and that the potential destination folder doesn't exist
+			$newTemplateFolder = TemplateSetStorage::getBlogBaseTemplateFolder( $this->_blogInfo->getId()) . "/" . $this->_destTemplate;			
+			if( File::exists( $newTemplateFolder )) {
+				$this->_validationErrorView->setErrorMessage( $this->_locale->tr( "error_folder_already_exists" ));
+				$this->_form->setFieldValidationStatus( "destTemplate", false );
+				$this->validationErrorProcessing();
+				return( false );				
+			}
+			
+			// otherwise everything is peachy
+			return( true );
+		}
+		
+		function copyTemplateSet()
+		{
+			lt_include( PLOG_CLASS_PATH."class/file/directorytreeiterator.class.php" );
+			
+			if( $this->_sourceTemplateType == AdminCopyBlogtemplateSetAction::GLOBAL_TEMPLATE )
+				$path = TemplateSetStorage::getTemplateFolder( $this->_templateId);
+			else
+				$path = TemplateSetStorage::getTemplateFolder( $this->_templateId, $this->_blogInfo->getId());
+				
+			$newTemplateFolder = TemplateSetStorage::getBlogBaseTemplateFolder( $this->_blogInfo->getId()) . "/" . $this->_destTemplate;
+			
+			if( !File::isWritable( TemplateSetStorage::getBlogBaseTemplateFolder( $this->_blogInfo->getId()))) {
+				$this->_message = $this->_locale->tr( "error_blog_template_folder_not_writable" );
+				return false;				
+			}
+
+			if( !File::createDir( $newTemplateFolder ))
+				return( false );
+			
+			$ts = new TemplateSetStorage();
+			
+			$dir = new DirectoryTreeIterator( $path );
+			foreach( $dir as $file ) {
+				// prepare the destination file name
+				$destFile = $newTemplateFolder . "/" . str_replace( $path, "", $file );
+				
+				// check if the destination folder exists
+				if( !File::exists( dirname( $destFile ))) {
+					if( !File::createDir( dirname( $destFile ), File::FILE_DEFAULT_DIRECTORY_CREATION_MODE, true )) {
+						return false;
+					}
+				}
+				
+				// and finally perform the copy
+				if( !File::isDir( $file, $destFile )) {
+					if( !File::copy( $file, $destFile )) {		
+							return false;
+					}
+				}
+			}
+			
+			// add the new template as a global one
+			$ts->addTemplate( $this->_destTemplate, $this->_blogInfo->getId());
+			
+			return( true );
+		}	
+		
+		function performAjax()
+		{
+			$result = $this->copyTemplateSet();
+			
+			lt_include( PLOG_CLASS_PATH."class/view/admin/ajax/adminajaxview.class.php" );
+			$this->_view = new AdminAjaxView( $this->_blogInfo );
+			
+			$this->_view->setSuccess( $result );
+			if( $result )
+				$this->_view->setSuccessMessage( $this->_locale->tr( "template_set_copied_ok" ));
+			else {
+				if( $this->_message == "" )
+					$this->_message = $this->_locale->tr( "error_copying_template_set" );
+				$this->_view->setErrorMessage( $this->_message );			
+			}
+			
+			return( true );
+		}
+	}	
+?>
\ No newline at end of file

Modified: plog/trunk/class/action/admin/admindeleteblogtemplateaction.class.php
===================================================================
--- plog/trunk/class/action/admin/admindeleteblogtemplateaction.class.php	2007-09-07 21:38:00 UTC (rev 5918)
+++ plog/trunk/class/action/admin/admindeleteblogtemplateaction.class.php	2007-09-07 22:08:28 UTC (rev 5919)
@@ -5,7 +5,7 @@
 	lt_include( PLOG_CLASS_PATH."class/data/validator/stringvalidator.class.php" );
 	lt_include( PLOG_CLASS_PATH."class/data/validator/arrayvalidator.class.php" );
 	lt_include( PLOG_CLASS_PATH."class/template/templatesets/templatesetstorage.class.php" );
-	lt_include( PLOG_CLASS_PATH."class/data/filter/htmlfilter.class.php" );
+	lt_include( PLOG_CLASS_PATH."class/data/filter/regexpfilter.class.php" );	
 		
     /**
      * \ingroup Action
@@ -15,7 +15,6 @@
      */
     class AdminDeleteBlogTemplateAction extends AdminAction 
 	{
-
     	var $_templateIds;
 
         function AdminDeleteBlogTemplateAction( $actionInfo, $request )
@@ -36,16 +35,24 @@
 		
 		function perform()
 		{
-			if( $this->_op == "deleteBlogTemplate" ) {
-				$this->_templateId = $this->_request->getValue( "templateId" );
-				$this->_templateIds = Array();
-				$this->_templateIds[] = $this->_templateId;
-			}
-			else
-				$this->_templateIds = $this->_request->getValue( "templateIds" );
-				
-			$this->_deleteTemplates();
+			$results = $this->_deleteTemplates();			
+			
+            $this->_view = new AdminBlogTemplateSetsListView( $this->_blogInfo );
+			if( $results["errorMessage"] != "" ) $this->_view->setErrorMessage( $results["errorMessage"] );
+			if( $results["successMessage"] != "" ) $this->_view->setSuccessMessage( $results["successMessage"] );			
+            $this->setCommonData();          
+			return( true );
 		}
+		
+		function performAjax()
+		{
+			$results = $this->_deleteTemplates();
+			
+			lt_include( PLOG_CLASS_PATH."class/view/admin/ajax/adminajaxview.class.php" );
+            $this->_view = new AdminAjaxView( $this->_blogInfo );
+			$this->_view->setMessage( $results );
+			$this->_view->setSuccess( true );			
+		}
 
         /**
          * Carries out the specified action
@@ -53,12 +60,21 @@
          */
         function _deleteTemplates()
         {
+			if( $this->_op == "deleteBlogTemplate" ) {
+				$this->_templateId = $this->_request->getValue( "templateId" );
+				$this->_templateIds = Array();
+				$this->_templateIds[] = $this->_templateId;
+			}
+			else
+				$this->_templateIds = $this->_request->getValue( "templateIds" );	
+	
         	$ts = new TemplateSetStorage();
 			$errorMessage = "";
 			$successMessage = "";
 			$totalOk = 0;
 			$blogTemplate = $this->_blogInfo->getTemplateSet();
-			$f = new HtmlFilter();
+			
+			$f = new RegexpFilter( "/[^A-Za-z0-9_\-]/" );			
 
             foreach( $this->_templateIds as $templateId ) {
 				$templateId = $f->filter( $templateId );
@@ -81,11 +97,6 @@
 				}
             }
 
-            $this->_view = new AdminBlogTemplateSetsListView( $this->_blogInfo );
-            if( $errorMessage != "" ) $this->_view->setErrorMessage( $errorMessage );
-            if( $successMessage != "" ) $this->_view->setSuccessMessage( $successMessage );			
-            $this->setCommonData();
-            
             // We should update the session too, or we will get data dirty
             lt_include( PLOG_CLASS_PATH."class/dao/blogs.class.php" );
             $blogs = new Blogs();
@@ -93,7 +104,7 @@
             $this->_session->setValue( "blogInfo", $blogInfo );
             $this->saveSession();
 
-            return true;
+            return( Array( "errorMessage" => $errorMessage, "successMessage" => $successMessage ));
         }
     }
 ?>
\ No newline at end of file

Modified: plog/trunk/class/action/admin/admineditblogtemplatesaction.class.php
===================================================================
--- plog/trunk/class/action/admin/admineditblogtemplatesaction.class.php	2007-09-07 21:38:00 UTC (rev 5918)
+++ plog/trunk/class/action/admin/admineditblogtemplatesaction.class.php	2007-09-07 22:08:28 UTC (rev 5919)
@@ -27,5 +27,10 @@
 
             return true;
         }
+
+		function performAjax()
+		{
+			return( $this->perform());
+		}
     }
 ?>

Modified: plog/trunk/class/view/admin/adminblogtemplatesetslistview.class.php
===================================================================
--- plog/trunk/class/view/admin/adminblogtemplatesetslistview.class.php	2007-09-07 21:38:00 UTC (rev 5918)
+++ plog/trunk/class/view/admin/adminblogtemplatesetslistview.class.php	2007-09-07 22:08:28 UTC (rev 5919)
@@ -14,7 +14,10 @@
 	
 		function AdminBlogTemplateSetsListView( $blogInfo ) 
 		{
-			$this->AdminTemplatedView( $blogInfo, "blogtemplates" );
+			if( Request::isXHR())
+				$this->AdminTemplatedView( $blogInfo, "blogtemplates_table" );			
+			else
+				$this->AdminTemplatedView( $blogInfo, "blogtemplates" );
 		}
 		
 		function render()

Modified: plog/trunk/templates/admin/blogtemplates_table.template
===================================================================
--- plog/trunk/templates/admin/blogtemplates_table.template	2007-09-07 21:38:00 UTC (rev 5918)
+++ plog/trunk/templates/admin/blogtemplates_table.template	2007-09-07 22:08:28 UTC (rev 5919)
@@ -1,17 +1,17 @@
-{foreach from=$templates item=sitetemplate}
+{foreach from=$templates item=blogtemplate}
  <div class="template-screenshot">
-	<input style="display:none" type="checkbox" name="templateIds[{counter}]" value="{$sitetemplate->getName()}" />
-	<span style="font-weight:bold;font-size:1.1em">{$sitetemplate->getName()}</span>
-	{if $sitetemplate->hasScreenshot()}
-	<a href="{$sitetemplate->getScreenshotUrl()}" onClick="Lifetype.UI.Misc.openInNewWindow(this);">
-		<img src="{$sitetemplate->getScreenshotUrl()}" alt="{$sitetemplate->getName()}" />
+	<input style="display:none" type="checkbox" name="templateIds[{counter}]" value="{$blogtemplate->getName()}" />
+	<span style="font-weight:bold;font-size:1.1em">{$blogtemplate->getName()}</span>
+	{if $blogtemplate->hasScreenshot()}
+	<a href="{$blogtemplate->getScreenshotUrl()}" onClick="Lifetype.UI.Misc.openInNewWindow(this);">
+		<img src="{$blogtemplate->getScreenshotUrl()}" alt="{$blogtemplate->getName()}" />
 	</a>
 	{/if}
 	<br/>
     {check_perms perm=update_blog_template}		
-  	  <a href="?op=editBlogTemplate&templateId={$sitetemplate->getName()}">{$locale->tr("edit")}</a> |
-	  <a href="#" onClick="Lifetype.UI.Pages.TemplateEditor.showCopyTemplatePrompt('{$sitetemplate->getName()}');return(false);">{$locale->tr("copy")}</a> | 
-	  <a href="?op=deleteBlogTemplate&amp;templateId={$sitetemplate->getName()}" onClick="Lifetype.Forms.performRequest(this);return(false);">{$locale->tr("delete")}</a>
+  	  <a href="?op=editBlogTemplate&templateId={$blogtemplate->getName()}">{$locale->tr("edit")}</a> |
+	  <a href="#" onClick="Lifetype.UI.Pages.TemplateEditor.showCopyBlogTemplatePrompt('{$blogtemplate->getName()}');return(false);">{$locale->tr("copy")}</a> | 
+	  <a href="?op=deleteBlogTemplate&amp;templateId={$blogtemplate->getName()}" onClick="Lifetype.Forms.performRequest(this);return(false);">{$locale->tr("delete")}</a>
 	{/check_perms}
  </div>
 {/foreach}
\ No newline at end of file



More information about the pLog-svn mailing list