File modules/cms/action/folder/FolderPubAction.class.php

Last commit: Fri Mar 11 12:26:33 2022 +0100	dankert	Fix: Catch error if something happens while publishing.
1 <?php 2 namespace cms\action\folder; 3 use cms\action\FolderAction; 4 use cms\action\Method; 5 use cms\base\Startup; 6 use cms\generator\FileContext; 7 use cms\generator\FileGenerator; 8 use cms\generator\PageContext; 9 use cms\generator\PageGenerator; 10 use cms\generator\Producer; 11 use cms\generator\Publisher; 12 use cms\generator\PublishOrder; 13 use cms\model\File; 14 use cms\model\Page; 15 use cms\model\Permission; 16 use cms\model\Folder; 17 use cms\model\Template; 18 use language\Messages; 19 use util\exception\PublisherException; 20 use util\Session; 21 22 23 class FolderPubAction extends FolderAction implements Method { 24 25 public function getRequiredPermission() { 26 return Permission::ACL_PUBLISH; 27 } 28 29 30 31 public function view() { 32 // Schalter nur anzeigen, wenn sinnvoll 33 34 // TODO texts, urls.... 35 $this->setTemplateVar('files' ,count($this->folder->getFiles()) >= 0 ); 36 $this->setTemplateVar('pages' ,count($this->folder->getPages()) > 0 ); 37 $this->setTemplateVar('subdirs',count($this->folder->getSubFolderIds()) > 0 ); 38 39 //$this->setTemplateVar('clean' ,$this->folder->isRoot ); 40 // Gefaehrliche Option, da dies bestehende Dateien, die evtl. nicht zum CMS gehören, überschreibt. 41 // Daher deaktiviert. 42 $this->setTemplateVar('clean' ,false ); 43 } 44 45 46 public function post() { 47 48 $project = $this->folder->getProject(); 49 $project->load(); 50 51 // Nothing is written to the session from this point. so we should free the session. 52 Session::close(); 53 54 $publisher = new Publisher( $project->projectid ); 55 56 // Create a list of all folders. 57 $folderList = [ $this->folder->objectid ]; 58 59 // Add all subfolders to the list 60 if ( $this->request->isTrue('subdirs') ) 61 $folderList = array_merge( $folderList, $this->folder->getAllSubFolderIds() ); 62 63 foreach( $folderList as $folderId ) { 64 65 $folder = new Folder( $folderId ); 66 $folder->load(); 67 68 // Publish all pages 69 if ( $this->request->isTrue('pages' ) ) { 70 71 foreach( $folder->getPages() as $pageObjectId ) { 72 73 $page = new Page( $pageObjectId ); 74 $page->load(); 75 76 $template = new Template( $page->templateid ); 77 $template->load(); 78 79 if ( ! $template->publish ) 80 continue; // Template should not be published. 81 82 $page->setPublishedTimestamp(); 83 84 foreach( $project->getModelIds() as $modelId ) { 85 86 foreach( $project->getLanguageIds() as $languageId ) { 87 88 $pageContext = new PageContext( $pageObjectId, Producer::SCHEME_PUBLIC ); 89 $pageContext->modelId = $modelId; 90 $pageContext->languageId = $languageId; 91 92 $pageGenerator = new PageGenerator( $pageContext ); 93 94 $publisher->addOrderForPublishing( new PublishOrder( $pageGenerator->getCache()->load()->getFilename(),$pageGenerator->getPublicFilename(), 0 ) ); 95 } 96 } 97 } 98 } 99 100 101 // Publish all files 102 if ( $this->request->isTrue('files' ) ) { 103 104 foreach( $folder->getFiles() as $fileid ) { 105 106 (new File($fileid))->setPublishedTimestamp(); 107 108 $fileGenerator = new FileGenerator( new FileContext( $fileid, Producer::SCHEME_PUBLIC)); 109 $publisher->addOrderForPublishing( new PublishOrder( $fileGenerator->getCache()->load()->getFilename(),$fileGenerator->getPublicFilename(),0 ) ); 110 111 } 112 } 113 114 try { 115 $publisher->publish(); 116 $this->folder->setPublishedTimestamp(); 117 118 } catch( PublisherException $e ) { 119 $this->addErrorFor( $this->folder,Messages::PUBLISHED_ERROR,[],$e->getMessage() ); 120 } 121 } 122 123 124 125 126 // Cleanup the target directory (if supported by the underlying target) 127 if ( $this->request->isTrue('clean') ) 128 $publisher->cleanOlderThan( Startup::getStartTime() ); 129 130 131 $this->addNoticeFor( $this->folder, 132 Messages::PUBLISHED, 133 array(), 134 'Published items:'."\n".implode("\n",$publisher->getDestinationFilenames() ) 135 ); 136 } 137 }
Download modules/cms/action/folder/FolderPubAction.class.php
History Fri, 11 Mar 2022 12:26:33 +0100 dankert Fix: Catch error if something happens while publishing. Wed, 9 Mar 2022 13:28:52 +0100 dankert Refactoring: Checkbox values are always sent to the server. In the actions we must test the value with 'isTrue()' Sun, 14 Mar 2021 02:14:31 +0100 Jan Dankert Fix: The public filename of files must contain their path... Sat, 6 Mar 2021 03:42:38 +0100 Jan Dankert New: Better permission checks. Sat, 27 Feb 2021 00:29:39 +0100 Jan Dankert New: Set publishing date on publishing. Fri, 26 Feb 2021 01:06:01 +0100 Jan Dankert Refactoring accessing the request parameter values. Sat, 20 Feb 2021 01:34:41 +0100 Jan Dankert New: Publish-switch for templates. Mon, 4 Jan 2021 19:03:18 +0100 Jan Dankert Refactoring: ACL class is renamed to Permission, because most RBAC/DMAC concepts are calling it a permission. Tue, 17 Nov 2020 23:51:00 +0100 Jan Dankert Refactoring: Every Actionmethod has now its own class.