From c35db8039eb67a2efe69c3f93b7e89adfbac6ac3 Mon Sep 17 00:00:00 2001 From: jensp Date: Sat, 14 Apr 2012 08:28:54 +0000 Subject: [PATCH] =?UTF-8?q?-=20Anzeige=20des=20Datums=20des=20letzten=20Re?= =?UTF-8?q?publizieren=20im=20Publizieren-Tab=20(Ticket=20#1191)=20-=20Aut?= =?UTF-8?q?omatische=20Benachrichtung=20des=20Admins,=20wenn=20das=20publi?= =?UTF-8?q?zieren=20eines=20Content-Items=20fehlschl=C3=A4gt=20(Ticket=20#?= =?UTF-8?q?1192)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://svn.libreccm.org/ccm/trunk@1592 8810af33-2d31-482b-a856-94f89814c4df --- .../com/arsdigita/cms/CMSResources.properties | 3 +- .../arsdigita/cms/CMSResources_de.properties | 3 +- .../cms/CMSResources_en_GB.properties | 1 + .../arsdigita/cms/CMSResources_fr.properties | 1 + .../ui/lifecycle/ItemLifecycleAdminPane.java | 2 +- .../ui/lifecycle/ItemLifecycleItemPane.java | 250 +++++++++++++++++- .../ui/lifecycle/ItemLifecycleSelectForm.java | 58 +++- 7 files changed, 311 insertions(+), 7 deletions(-) diff --git a/ccm-cms/src/com/arsdigita/cms/CMSResources.properties b/ccm-cms/src/com/arsdigita/cms/CMSResources.properties index 3c285fb16..27dcd0bcf 100755 --- a/ccm-cms/src/com/arsdigita/cms/CMSResources.properties +++ b/ccm-cms/src/com/arsdigita/cms/CMSResources.properties @@ -1089,5 +1089,6 @@ cms.ui.item.lifecycle.do=Execute cms.ui.item.lifecycle.do.not_authorized=Your not authorized to publish this item. cms.ui.item.lifecycle.publish_locked=This content item is being (re-)published cms.ui.item.lifecycle.publish_locked.update=Update -cms.ui.lifecycle.publish.error=An error occured while publishing this item. Please inform your system administrator. This item will stay locked until the locked is removed by the system administrator manually. +cms.ui.lifecycle.publish.error=An error occured while publishing this item.The system administrator has been notified about this problem. This item will stay locked until the lock is removed by the system administrator manually. cms.ui.delete_confirmation=Permanently delete this item? +cms.ui.lifecycle.details.last_published=Item last (re-)published diff --git a/ccm-cms/src/com/arsdigita/cms/CMSResources_de.properties b/ccm-cms/src/com/arsdigita/cms/CMSResources_de.properties index 53910c744..5867f41b6 100755 --- a/ccm-cms/src/com/arsdigita/cms/CMSResources_de.properties +++ b/ccm-cms/src/com/arsdigita/cms/CMSResources_de.properties @@ -1080,5 +1080,6 @@ cms.ui.item.lifecycle.do=Ausf\u00fchren cms.ui.item.lifecycle.do.not_authorized=Sie sind nicht berechtigt, dieses Item zu publizieren. cms.ui.item.lifecycle.publish_locked=Dieses Content-Item wird gerade (re-)publiziert cms.ui.item.lifecycle.publish_locked.update=Aktualisieren -cms.ui.lifecycle.publish.error=W\u00e4hrend des Publizierens ist ein Fehler aufgetreten. Bitte informieren Sie Ihren System-Administrator. Dieses Item bleibt besperrt, bis der Administrator die Sperre manuell entfernt. +cms.ui.lifecycle.publish.error=W\u00e4hrend des Publizierens ist ein Fehler aufgetreten. Der System-Administrator wurde per \u00fcber das Problem informiert. Dieses Item bleibt besperrt, bis der Administrator die Sperre manuell entfernt. cms.ui.delete_confirmation=Wollen Sie dieses Content-Item l\u00f6schen? +cms.ui.lifecycle.details.last_published=Das Item wurde zuletzt republiziert am diff --git a/ccm-cms/src/com/arsdigita/cms/CMSResources_en_GB.properties b/ccm-cms/src/com/arsdigita/cms/CMSResources_en_GB.properties index f06a6a752..85f3e5ec0 100755 --- a/ccm-cms/src/com/arsdigita/cms/CMSResources_en_GB.properties +++ b/ccm-cms/src/com/arsdigita/cms/CMSResources_en_GB.properties @@ -30,3 +30,4 @@ cms.ui.item.lifecycle.publish_locked= cms.ui.item.lifecycle.publish_locked.update= cms.ui.lifecycle.publish.error= cms.ui.delete_confirmation= +cms.ui.lifecycle.details.last_published= diff --git a/ccm-cms/src/com/arsdigita/cms/CMSResources_fr.properties b/ccm-cms/src/com/arsdigita/cms/CMSResources_fr.properties index e97a55294..8b513b9ce 100755 --- a/ccm-cms/src/com/arsdigita/cms/CMSResources_fr.properties +++ b/ccm-cms/src/com/arsdigita/cms/CMSResources_fr.properties @@ -561,3 +561,4 @@ cms.ui.item.lifecycle.publish_locked= cms.ui.item.lifecycle.publish_locked.update= cms.ui.lifecycle.publish.error= cms.ui.delete_confirmation= +cms.ui.lifecycle.details.last_published= diff --git a/ccm-cms/src/com/arsdigita/cms/ui/lifecycle/ItemLifecycleAdminPane.java b/ccm-cms/src/com/arsdigita/cms/ui/lifecycle/ItemLifecycleAdminPane.java index c09777218..7f1a53112 100755 --- a/ccm-cms/src/com/arsdigita/cms/ui/lifecycle/ItemLifecycleAdminPane.java +++ b/ccm-cms/src/com/arsdigita/cms/ui/lifecycle/ItemLifecycleAdminPane.java @@ -108,7 +108,7 @@ public class ItemLifecycleAdminPane extends BaseItemPane { final Label errorMsg = new Label(gz("cms.ui.lifecycle.publish.error")); m_errorPane.setBody(errorMsg); - connect(selectForm, m_detailPane); + connect(selectForm, m_detailPane); } private class ItemLifecycleRequestLocal extends LifecycleRequestLocal { diff --git a/ccm-cms/src/com/arsdigita/cms/ui/lifecycle/ItemLifecycleItemPane.java b/ccm-cms/src/com/arsdigita/cms/ui/lifecycle/ItemLifecycleItemPane.java index 30a23c974..3479120ae 100755 --- a/ccm-cms/src/com/arsdigita/cms/ui/lifecycle/ItemLifecycleItemPane.java +++ b/ccm-cms/src/com/arsdigita/cms/ui/lifecycle/ItemLifecycleItemPane.java @@ -38,6 +38,8 @@ import com.arsdigita.bebop.event.ActionEvent; import com.arsdigita.bebop.event.ActionListener; import com.arsdigita.bebop.event.FormInitListener; import com.arsdigita.bebop.event.FormProcessListener; +import com.arsdigita.bebop.event.PrintEvent; +import com.arsdigita.bebop.event.PrintListener; import com.arsdigita.bebop.form.Option; import com.arsdigita.bebop.form.SingleSelect; import com.arsdigita.bebop.form.Submit; @@ -54,6 +56,11 @@ import com.arsdigita.cms.ui.BaseItemPane; import com.arsdigita.cms.ui.ContentItemPage; import com.arsdigita.cms.ui.item.ContentItemRequestLocal; import com.arsdigita.domain.DomainObjectFactory; +import com.arsdigita.globalization.GlobalizationHelper; +import com.arsdigita.globalization.GlobalizedMessage; +import com.arsdigita.kernel.Party; +import com.arsdigita.kernel.PartyCollection; +import com.arsdigita.notification.Notification; import com.arsdigita.persistence.OID; import com.arsdigita.toolbox.ui.ActionGroup; import com.arsdigita.toolbox.ui.PropertyList; @@ -65,6 +72,10 @@ import com.arsdigita.web.Web; import com.arsdigita.workflow.simple.TaskException; import com.arsdigita.workflow.simple.Workflow; import com.arsdigita.xml.Element; +import java.io.PrintWriter; +import java.io.StringWriter; +import java.io.Writer; +import java.util.Locale; /** * This class contains the component which displays the information for a @@ -97,6 +108,29 @@ class ItemLifecycleItemPane extends BaseItemPane { setDefault(m_detailPane); m_detailPane.add(new SummarySection()); + final Label lastPublishedLabel = new Label(); + lastPublishedLabel.addPrintListener(new PrintListener() { + + public void prepare(final PrintEvent event) { + final PageState state = event.getPageState(); + final ContentItem item = m_item.getContentItem(state). + getLiveVersion(); + final Label label = (Label) event.getTarget(); + final String dateStr = + DateFormat.getDateTimeInstance(DateFormat.LONG, + DateFormat.SHORT, + GlobalizationHelper. + getNegotiatedLocale()).format(item.getLastModifiedDate()); + final String msg = String.format( + "%s %s", + new GlobalizedMessage( + "cms.ui.lifecycle.details.last_published", + "com.arsdigita.cms.CMSResources").localize(), + dateStr); + label.setLabel(msg); + } + }); + m_detailPane.add(lastPublishedLabel); m_detailPane.add(new PhaseSection()); } @@ -258,6 +292,59 @@ class ItemLifecycleItemPane extends BaseItemPane { + "publishing the item '%s': ", item.getOID().toString()), ex); + + if ((CMSConfig.getInstance(). + getPublicationFailureSender() + == null) + && (CMSConfig.getInstance(). + getPublicationFailureReceiver() == null)) { + return; + } + + final PartyCollection receiverParties = Party. + retrieveAllParties(); + Party receiver = null; + receiverParties.addEqualsFilter("primaryEmail", + CMSConfig. + getInstance(). + getPublicationFailureReceiver()); + if (receiverParties.next()) { + receiver = receiverParties.getParty(); + } + receiverParties.close(); + + final PartyCollection senderParties = Party. + retrieveAllParties(); + Party sender = null; + senderParties.addEqualsFilter("primaryEmail", + CMSConfig.getInstance(). + getPublicationFailureReceiver()); + if (senderParties.next()) { + sender = senderParties.getParty(); + } + senderParties.close(); + + if ((sender != null) && (receiver != null)) { + final Writer traceWriter = new StringWriter(); + final PrintWriter printWriter = new PrintWriter( + traceWriter); + ex.printStackTrace(printWriter); + + final Notification notification = + new Notification( + sender, + receiver, + String.format( + "Failed to publish item '%s'", + item.getOID().toString()), + String.format("Publishing item '%s' failed " + + "with error message: %s.\n\n" + + "Stacktrace:\n%s", + item.getOID().toString(), + ex.getMessage(), + traceWriter.toString())); + notification.save(); + } } }); @@ -345,6 +432,59 @@ class ItemLifecycleItemPane extends BaseItemPane { + "publishing the item '%s': ", item.getOID().toString()), ex); + + if ((CMSConfig.getInstance(). + getPublicationFailureSender() + == null) + && (CMSConfig.getInstance(). + getPublicationFailureReceiver() == null)) { + return; + } + + final PartyCollection receiverParties = Party. + retrieveAllParties(); + Party receiver = null; + receiverParties.addEqualsFilter("primaryEmail", + CMSConfig. + getInstance(). + getPublicationFailureReceiver()); + if (receiverParties.next()) { + receiver = receiverParties.getParty(); + } + receiverParties.close(); + + final PartyCollection senderParties = Party. + retrieveAllParties(); + Party sender = null; + senderParties.addEqualsFilter("primaryEmail", + CMSConfig.getInstance(). + getPublicationFailureReceiver()); + if (senderParties.next()) { + sender = senderParties.getParty(); + } + senderParties.close(); + + if ((sender != null) && (receiver != null)) { + final Writer traceWriter = new StringWriter(); + final PrintWriter printWriter = new PrintWriter( + traceWriter); + ex.printStackTrace(printWriter); + + final Notification notification = + new Notification( + sender, + receiver, + String.format( + "Failed to publish item '%s'", + item.getOID().toString()), + String.format("Publishing item '%s' failed " + + "with error message: %s.\n\n" + + "Stacktrace:\n%s", + item.getOID().toString(), + ex.getMessage(), + traceWriter.toString())); + notification.save(); + } } }); @@ -515,6 +655,59 @@ class ItemLifecycleItemPane extends BaseItemPane { + "publishing the item '%s': ", item.getOID().toString()), ex); + + if ((CMSConfig.getInstance(). + getPublicationFailureSender() + == null) + && (CMSConfig.getInstance(). + getPublicationFailureReceiver() == null)) { + return; + } + + final PartyCollection receiverParties = Party. + retrieveAllParties(); + Party receiver = null; + receiverParties.addEqualsFilter("primaryEmail", + CMSConfig. + getInstance(). + getPublicationFailureReceiver()); + if (receiverParties.next()) { + receiver = receiverParties.getParty(); + } + receiverParties.close(); + + final PartyCollection senderParties = Party. + retrieveAllParties(); + Party sender = null; + senderParties.addEqualsFilter("primaryEmail", + CMSConfig.getInstance(). + getPublicationFailureReceiver()); + if (senderParties.next()) { + sender = senderParties.getParty(); + } + senderParties.close(); + + if ((sender != null) && (receiver != null)) { + final Writer traceWriter = new StringWriter(); + final PrintWriter printWriter = new PrintWriter( + traceWriter); + ex.printStackTrace(printWriter); + + final Notification notification = + new Notification( + sender, + receiver, + String.format( + "Failed to publish item '%s'", + item.getOID().toString()), + String.format("Publishing item '%s' failed " + + "with error message: %s.\n\n" + + "Stacktrace:\n%s", + item.getOID().toString(), + ex.getMessage(), + traceWriter.toString())); + notification.save(); + } } }); @@ -550,6 +743,59 @@ class ItemLifecycleItemPane extends BaseItemPane { + "publishing the item '%s': ", item.getOID().toString()), ex); + + if ((CMSConfig.getInstance(). + getPublicationFailureSender() + == null) + && (CMSConfig.getInstance(). + getPublicationFailureReceiver() == null)) { + return; + } + + final PartyCollection receiverParties = Party. + retrieveAllParties(); + Party receiver = null; + receiverParties.addEqualsFilter("primaryEmail", + CMSConfig. + getInstance(). + getPublicationFailureReceiver()); + if (receiverParties.next()) { + receiver = receiverParties.getParty(); + } + receiverParties.close(); + + final PartyCollection senderParties = Party. + retrieveAllParties(); + Party sender = null; + senderParties.addEqualsFilter("primaryEmail", + CMSConfig.getInstance(). + getPublicationFailureReceiver()); + if (senderParties.next()) { + sender = senderParties.getParty(); + } + senderParties.close(); + + if ((sender != null) && (receiver != null)) { + final Writer traceWriter = new StringWriter(); + final PrintWriter printWriter = new PrintWriter( + traceWriter); + ex.printStackTrace(printWriter); + + final Notification notification = + new Notification( + sender, + receiver, + String.format( + "Failed to publish item '%s'", + item.getOID().toString()), + String.format("Publishing item '%s' failed " + + "with error message: %s.\n\n" + + "Stacktrace:\n%s", + item.getOID().toString(), + ex.getMessage(), + traceWriter.toString())); + notification.save(); + } } }); @@ -594,7 +840,7 @@ class ItemLifecycleItemPane extends BaseItemPane { private void doRepublish() { final ContentItem item = (ContentItem) DomainObjectFactory. newInstance(OID.valueOf(itemOid)); - republish(item, false); + republish(item, false); } public void run() { @@ -624,7 +870,7 @@ class ItemLifecycleItemPane extends BaseItemPane { private void doRepublishAndReset() { final ContentItem item = (ContentItem) DomainObjectFactory. newInstance(OID.valueOf(itemOid)); - republish(item, true); + republish(item, true); } public void run() { diff --git a/ccm-cms/src/com/arsdigita/cms/ui/lifecycle/ItemLifecycleSelectForm.java b/ccm-cms/src/com/arsdigita/cms/ui/lifecycle/ItemLifecycleSelectForm.java index 8517d861a..0949115d2 100755 --- a/ccm-cms/src/com/arsdigita/cms/ui/lifecycle/ItemLifecycleSelectForm.java +++ b/ccm-cms/src/com/arsdigita/cms/ui/lifecycle/ItemLifecycleSelectForm.java @@ -60,7 +60,10 @@ import com.arsdigita.cms.workflow.CMSEngine; import com.arsdigita.cms.workflow.CMSTask; import com.arsdigita.cms.workflow.CMSTaskType; import com.arsdigita.domain.DomainObjectFactory; +import com.arsdigita.kernel.Party; +import com.arsdigita.kernel.PartyCollection; import com.arsdigita.kernel.User; +import com.arsdigita.notification.Notification; import com.arsdigita.persistence.OID; import com.arsdigita.util.UncheckedWrapperException; import com.arsdigita.web.RedirectSignal; @@ -70,6 +73,9 @@ import com.arsdigita.workflow.simple.Engine; import com.arsdigita.workflow.simple.TaskException; import com.arsdigita.workflow.simple.Workflow; import com.arsdigita.workflow.simple.WorkflowTemplate; +import java.io.PrintWriter; +import java.io.StringWriter; +import java.io.Writer; import java.math.BigDecimal; import java.math.BigInteger; import java.util.Calendar; @@ -383,20 +389,68 @@ class ItemLifecycleSelectForm extends BaseForm { public void run() { PublishLock.getInstance().lock(item); publisher.publish(); - PublishLock.getInstance().unlock(item); + PublishLock.getInstance().unlock(item); } }; final Thread thread = new Thread(threadAction); thread.setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() { public void uncaughtException(final Thread thread, - final Throwable ex) { + final Throwable ex) { PublishLock.getInstance().setError(item); s_log.error(String.format( "An error occurred while " + "publishing the item '%s': ", item.getOID().toString()), ex); + + if ((CMSConfig.getInstance().getPublicationFailureSender() + == null) + && (CMSConfig.getInstance(). + getPublicationFailureReceiver() == null)) { + return; + } + + final PartyCollection receiverParties = Party. + retrieveAllParties(); + Party receiver = null; + receiverParties.addEqualsFilter("primaryEmail", + CMSConfig.getInstance(). + getPublicationFailureReceiver()); + if (receiverParties.next()) { + receiver = receiverParties.getParty(); + } + receiverParties.close(); + + final PartyCollection senderParties = Party. + retrieveAllParties(); + Party sender = null; + senderParties.addEqualsFilter("primaryEmail", CMSConfig. + getInstance().getPublicationFailureReceiver()); + if (senderParties.next()) { + sender = senderParties.getParty(); + } + senderParties.close(); + + if ((sender != null) && (receiver != null)) { + final Writer traceWriter = new StringWriter(); + final PrintWriter printWriter = new PrintWriter( + traceWriter); + ex.printStackTrace(printWriter); + + final Notification notification = new Notification( + sender, + receiver, + String.format("Failed to publish item '%s'", + item.getOID().toString()), + String.format("Publishing item '%s' failed " + + "with error message: %s.\n\n" + + "Stacktrace:\n%s", + item.getOID().toString(), + ex.getMessage(), + traceWriter.toString())); + notification.save(); + } } }); thread.start();