00001 <?php
00002
00003 lt_include( PLOG_CLASS_PATH."class/action/admin/adminaction.class.php" );
00004 lt_include( PLOG_CLASS_PATH."class/action/admin/adminaddtemplateaction.class.php" );
00005 lt_include( PLOG_CLASS_PATH."class/file/unpacker/unpacker.class.php" );
00006 lt_include( PLOG_CLASS_PATH."class/view/admin/admintemplatedview.class.php" );
00007 lt_include( PLOG_CLASS_PATH."class/view/admin/adminblogtemplatesetslistview.class.php" );
00008 lt_include( PLOG_CLASS_PATH."class/template/templatesets/templatesetstorage.class.php" );
00009 lt_include( PLOG_CLASS_PATH."class/template/templatesandbox.class.php" );
00010 lt_include( PLOG_CLASS_PATH."class/file/fileuploads.class.php" );
00011
00018 class AdminAddBlogTemplateAction extends AdminAction
00019 {
00020
00021 var $_op;
00022
00023 function AdminAddBlogTemplateAction( $actionInfo, $request )
00024 {
00025 $this->AdminAction( $actionInfo, $request );
00026
00027
00028 if( $this->_request->getValue( "addBlogTemplate" ) != "" )
00029 $this->_op = "addBlogTemplate";
00030 else
00031 $this->_op = "scanBlogTemplates";
00032
00033 $this->requirePermission( "add_blog_template" );
00034 }
00035
00036 function validate()
00037 {
00038
00039
00040
00041
00042 $config =& Config::getConfig();
00043 if( !$config->getValue( "users_can_add_templates" )) {
00044 $this->_view = new AdminBlogTemplateSetsListView( $this->_blogInfo );
00045 $this->_view->setErrorMessage( $this->_locale->tr("error_add_template_disabled"));
00046 $this->setCommonData();
00047
00048 return false;
00049 }
00050
00051 return parent::validate();
00052 }
00053
00054 function _performUploadTemplate()
00055 {
00056
00057 $config =& Config::getConfig();
00058 $tmpFolder = $config->getValue( "temp_folder" );
00059
00060
00061 $files = HttpVars::getFiles();
00062
00063 if( count($files) == 0 || $files["templateFile"]["name"] == "") {
00064 $this->_view = new AdminTemplatedView( $this->_blogInfo, "newblogtemplate" );
00065 $this->_view->setValue( "templateFolder", TemplateSetStorage::getBlogBaseTemplateFolder( $this->_blogInfo->getId()));
00066 $this->_view->setErrorMessage( $this->_locale->tr("error_must_upload_file"));
00067 $this->setCommonData();
00068 return false;
00069 }
00070
00071 $uploads = new FileUploads( $files );
00072
00073 if( $this->userHasPermission( "view_blog_templates" ))
00074 $this->_view = new AdminBlogTemplateSetsListView( $this->_blogInfo );
00075 else
00076 $this->_view = new AdminTemplatedView( $this->_blogInfo, "newblogtemplate" );
00077
00078 $result = $uploads->process( $tmpFolder );
00079 if( $result < 0 ) {
00080 $this->_view->setErrorMessage( $this->_locale->tr("error_uploads_disabled"));
00081 $this->setCommonData();
00082
00083 return false;
00084 }
00085
00086 $upload = new FileUpload( $files["templateFile"] );
00087 $templateName = TemplateSandbox::toTemplateSetName( $upload->getFileName() );
00088
00089
00090 if( TemplateSets::isTemplate( $templateName ) || TemplateSets::isBlogTemplate( $templateName, $this->_blogInfo->getId() ) ) {
00091 $this->_view->setErrorMessage( $this->_locale->pr("error_template_exist", $templateName));
00092 $this->setCommonData();
00093
00094 return false;
00095 }
00096
00097
00098
00099 $templateSandbox = new TemplateSandbox();
00100 $valid = $templateSandbox->checkTemplateSet( $upload->getFileName(), $tmpFolder."/");
00101
00102 if( $valid < 0 ) {
00103 $this->_view->setErrorMessage( AdminAddTemplateAction::_checkTemplateSandboxResult( $valid ));
00104 $this->setCommonData();
00105
00106 return false;
00107 }
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117 $ts = new TemplateSetStorage();
00118 $blogTemplateFolder = $ts->createBlogTemplateFolder( $this->_blogInfo->getId());
00119
00120
00121 $destFolder = $blogTemplateFolder."/";
00122
00123 $unpacker = new Unpacker();
00124 if( !$unpacker->unpack( $tmpFolder."/".$upload->getFileName(), $destFolder )) {
00125 $this->_view->setErrorMessage( $this->_locale->tr("error_installing_template"));
00126 $this->setCommonData();
00127
00128
00129 File::delete( $tmpFolder."/".$upload->getFileName());
00130
00131 return false;
00132 }
00133
00134
00135
00136 $ts->addTemplate( $templateName, $this->_blogInfo->getId());
00137
00138
00139 File::delete( $tmpFolder."/".$upload->getFileName());
00140
00141 $this->_view->setSuccessMessage( $this->_locale->pr("template_installed_ok", $templateName));
00142 $this->setCommonData();
00143
00144 return true;
00145 }
00146
00147
00151 function _addTemplateCode( $templateName )
00152 {
00153 $config =& Config::getConfig();
00154 $templateFolder = $config->getValue( "template_folder" );
00155
00156 $ts = new TemplateSetStorage();
00157
00158 $this->_view = new AdminBlogTemplateSetsListView( $this->_blogInfo );
00159
00160
00161 $templateSandbox = new TemplateSandbox();
00162 $valid = $templateSandbox->checkTemplateFolder( $templateName, $ts->getBlogBaseTemplateFolder( $this->_blogInfo->getId()));
00163 if( $valid < 0 ) {
00164 $this->_errorMessage .= $this->_locale->pr( 'error_installing_template', $templateName ).': '.AdminAddTemplateAction::_checkTemplateSandboxResult( $valid ).'<br/>';
00165 $result = false;
00166 }
00167 else {
00168
00169 $ts->addTemplate( $templateName, $this->_blogInfo->getId());
00170 $this->_successMessage .= $this->_locale->pr( "template_installed_ok", $templateName )."<br/>";
00171 $result = true;
00172 }
00173
00174 $this->setCommonData();
00175 return $result;
00176 }
00177
00183 function _performScanTemplateFolder()
00184 {
00185 $this->_errorMessage = "";
00186 $this->_successMessage = "";
00187
00188
00189 if( $this->userHasPermission( "view_blog_templates" ))
00190 $this->_view = new AdminBlogTemplateSetsListView( $this->_blogInfo );
00191 else
00192 $this->_view = new AdminTemplatedView( $this->_blogInfo, "newblogtemplate" );
00193
00194
00195 $tf = new TemplateFinder( TemplateSetStorage::getBlogBaseTemplateFolder( $this->_blogInfo->getId()));
00196 $newTemplates = $tf->find( TemplateSets::getBlogTemplates( $this->_blogInfo->getId()));
00197
00198 $this->_errorMessage = "";
00199 $this->_successMessage = "";
00200
00201 if( count($newTemplates) == 0 ) {
00202
00203 $this->_errorMessage = $this->_locale->tr( 'error_no_new_templates_found' );
00204 }
00205 else {
00206
00207 foreach( $newTemplates as $newTemplate ) {
00208 $this->_addTemplateCode( $newTemplate );
00209 }
00210 }
00211
00212
00213 if( $this->_errorMessage != '' ) $this->_view->setErrorMessage( $this->_errorMessage );
00214 if( $this->_successMessage != '' ) $this->_view->setSuccessMessage( $this->_successMessage );
00215
00216 $this->setCommonData();
00217
00218 return true;
00219 }
00220
00221 function perform()
00222 {
00223 if( $this->_op == "addBlogTemplate" ) {
00224 $result = $this->_performUploadTemplate();
00225 }
00226 elseif( $this->_op == "scanBlogTemplates" ) {
00227 $result = $this->_performScanTemplateFolder();
00228 }
00229 else {
00230 throw( new Exception( "You shouldn't be seeing this!!! :)" ));
00231 die();
00232 }
00233
00234
00235 lt_include( PLOG_CLASS_PATH."class/dao/blogs.class.php" );
00236 $blogs = new Blogs();
00237 $blogInfo = $blogs->getBlogInfo( $this->_blogInfo->getId() );
00238 $this->_session->setValue( "blogInfo", $blogInfo );
00239 $this->saveSession();
00240
00241 return $result;
00242 }
00243 }
00244 ?>