commit 8f7d857c67fbe8604c289e5f8af8e3282db9e730
parent 04321b97cda1748a07807794a33d9e61fa3227c9
Author: dankert <openrat@jandankert.de>
Date: Fri, 11 Mar 2022 12:26:33 +0100
Fix: Catch error if something happens while publishing.
Diffstat:
7 files changed, 58 insertions(+), 20 deletions(-)
diff --git a/modules/cms/action/PageelementAction.class.php b/modules/cms/action/PageelementAction.class.php
@@ -26,6 +26,7 @@ use language\Messages;
use LogicException;
use util\ArrayUtils;
use util\exception\ObjectNotFoundException;
+use util\exception\PublisherException;
use util\exception\SecurityException;
use util\exception\ValidationException;
use util\Html;
@@ -613,10 +614,15 @@ class PageelementAction extends BaseAction
}
}
- $publisher->publish();
+ try {
+ $publisher->publish();
- $this->addNoticeFor( $this->value,Messages::PUBLISHED,[],
- implode("\n",$publisher->getDestinationFilenames() ) );
+ $this->addNoticeFor( $this->value,Messages::PUBLISHED,[],
+ implode("\n",$publisher->getDestinationFilenames() ) );
+
+ } catch( PublisherException $e ) {
+ $this->addErrorFor( $this->value,Messages::PUBLISHED_ERROR,[],$e->getMessage() );
+ }
}
diff --git a/modules/cms/action/file/FilePubAction.class.php b/modules/cms/action/file/FilePubAction.class.php
@@ -8,6 +8,8 @@ use cms\generator\Producer;
use cms\generator\Publisher;
use cms\generator\PublishOrder;
use cms\model\Permission;
+use language\Messages;
+use util\exception\PublisherException;
class FilePubAction extends FileAction implements Method {
public function getRequiredPermission() {
@@ -21,9 +23,14 @@ class FilePubAction extends FileAction implements Method {
$publisher = new Publisher( $this->file->projectid );
$publisher->addOrderForPublishing( new PublishOrder( $fileGenerator->getCache()->load()->getFilename(),$fileGenerator->getPublicFilename(),$this->file->lastchangeDate) );
- $publisher->publish();
- $this->file->setPublishedTimestamp();
- $this->addNoticeFor($this->file,'PUBLISHED',[],'Published items:'."\n".implode("\n",$publisher->getDestinationFilenames()) );
+ try {
+ $publisher->publish();
+ $this->file->setPublishedTimestamp();
+ $this->addNoticeFor($this->file,'PUBLISHED',[],'Published items:'."\n".implode("\n",$publisher->getDestinationFilenames()) );
+ } catch( PublisherException $e ) {
+ $this->addErrorFor( $this->file,Messages::PUBLISHED_ERROR,[],$e->getMessage() );
+ }
+
}
}
diff --git a/modules/cms/action/folder/FolderPubAction.class.php b/modules/cms/action/folder/FolderPubAction.class.php
@@ -16,6 +16,7 @@ use cms\model\Permission;
use cms\model\Folder;
use cms\model\Template;
use language\Messages;
+use util\exception\PublisherException;
use util\Session;
@@ -110,7 +111,13 @@ class FolderPubAction extends FolderAction implements Method {
}
}
- $publisher->publish();
+ try {
+ $publisher->publish();
+ $this->folder->setPublishedTimestamp();
+
+ } catch( PublisherException $e ) {
+ $this->addErrorFor( $this->folder,Messages::PUBLISHED_ERROR,[],$e->getMessage() );
+ }
}
diff --git a/modules/cms/action/page/PageAllAction.class.php b/modules/cms/action/page/PageAllAction.class.php
@@ -20,6 +20,7 @@ use cms\model\Permission;
use cms\model\Project;
use cms\model\Value;
use language\Messages;
+use util\exception\PublisherException;
use util\exception\SecurityException;
use util\exception\ValidationException;
use util\Session;
@@ -360,7 +361,12 @@ class PageAllAction extends PageAction implements Method {
$publisher->addOrderForPublishing( new PublishOrder( $pageGenerator->getCache()->load()->getFilename(),$pageGenerator->getPublicFilename(), $this->page->lastchangeDate ) );
}
- $publisher->publish();
+ try {
+ $publisher->publish();
+ } catch( PublisherException $e ) {
+ $this->addErrorFor( $this->page,Messages::PUBLISHED_ERROR,[],$e->getMessage() );
+ }
+
$this->page->setPublishedTimestamp();
$this->addNoticeFor( $this->page,Messages::PUBLISHED,[],
diff --git a/modules/cms/action/page/PagePubAction.class.php b/modules/cms/action/page/PagePubAction.class.php
@@ -11,6 +11,7 @@ use cms\model\Page;
use cms\model\Permission;
use cms\model\Template;
use language\Messages;
+use util\exception\PublisherException;
use util\Session;
class PagePubAction extends PageAction implements Method {
@@ -55,13 +56,17 @@ class PagePubAction extends PageAction implements Method {
}
}
- $publisher->publish();
- $this->page->setPublishedTimestamp();
-
- $this->addNoticeFor( $this->page,
- 'PUBLISHED',
- array(),
- implode("\n",$publisher->getDestinationFilenames() )
- );
+ try {
+ $publisher->publish();
+ $this->page->setPublishedTimestamp();
+
+ $this->addNoticeFor( $this->page,
+ 'PUBLISHED',
+ array(),
+ implode("\n",$publisher->getDestinationFilenames() )
+ );
+ } catch( PublisherException $e ) {
+ $this->addErrorFor( $this->page,Messages::PUBLISHED_ERROR,[],$e->getMessage() );
+ }
}
}
diff --git a/modules/cms/action/template/TemplatePubAction.class.php b/modules/cms/action/template/TemplatePubAction.class.php
@@ -11,6 +11,7 @@ use cms\model\Permission;
use cms\model\Page;
use cms\model\Project;
use language\Messages;
+use util\exception\PublisherException;
use util\Session;
@@ -50,9 +51,13 @@ class TemplatePubAction extends TemplateAction implements Method {
}
}
- $publisher->publish();
+ try {
+ $publisher->publish();
- $this->addNoticeFor( $this->template,Messages::PUBLISHED,[],
- implode("\n",$publisher->getDestinationFilenames() ) );
+ $this->addNoticeFor( $this->template,Messages::PUBLISHED,[],
+ implode("\n",$publisher->getDestinationFilenames() ) );
+ } catch( PublisherException $e ) {
+ $this->addErrorFor( $this->template,Messages::PUBLISHED_ERROR,[],$e->getMessage() );
+ }
}
}
diff --git a/modules/cms/generator/target/LocalTarget.class.php b/modules/cms/generator/target/LocalTarget.class.php
@@ -68,12 +68,14 @@ class LocalTarget extends BaseTarget
*
* @param String Quelle
* @param String Ziel
+ * @throws PublisherException
*/
public function put($source, $dest, $lastChangeDate)
{
// Is the output directory existent?
if ( !is_dir( $this->localDestinationDirectory ) )
- mkdir( $this->localDestinationDirectory ); // try to create this directory.
+ if ( ! @mkdir( $this->localDestinationDirectory ) )
+ throw new PublisherException('cannot create directory: ' . $this->localDestinationDirectory);
// Is the output directory writable?
if ( !is_writeable( $this->localDestinationDirectory ) )