ItemLifecycleItemPane umgestaltet, um versehentliche Klicks auf zurückziehen zu vermeiden.

git-svn-id: https://svn.libreccm.org/ccm/trunk@1243 8810af33-2d31-482b-a856-94f89814c4df
master
jensp 2011-11-11 18:59:43 +00:00
parent 6118543a94
commit 0ca2616746
8 changed files with 420 additions and 143 deletions

View File

@ -112,19 +112,19 @@ public final class CMSConfig extends AbstractConfig {
return s_config; return s_config;
} }
/** /**
* Storage (map) for method getAssetStepsToSkip(ContentType type) to store * Storage (map) for method getAssetStepsToSkip(ContentType type) to store
* mapping of steps that are deemed irrelevant for the passid in type. * mapping of steps that are deemed irrelevant for the passid in type.
*/ */
private static Map s_skipAssetSteps = null; private static Map s_skipAssetSteps = null;
/** /**
* Item category add form speciofies Subclass of ItemCategoryForm * Item category add form speciofies Subclass of ItemCategoryForm
* to use for the assign categories step. * to use for the assign categories step.
* Used in c.ad.cms.ui.authoring.ItemCategoryStep * Used in c.ad.cms.ui.authoring.ItemCategoryStep
*/ */
private final Parameter m_categoryAuthoringAddForm = new SpecificClassParameter("com.arsdigita.cms.category_authoring_add_form", private final Parameter m_categoryAuthoringAddForm =
new SpecificClassParameter(
"com.arsdigita.cms.category_authoring_add_form",
Parameter.REQUIRED, Parameter.REQUIRED,
ItemCategoryForm.class, ItemCategoryForm.class,
SimpleComponent.class); SimpleComponent.class);
@ -132,19 +132,28 @@ public final class CMSConfig extends AbstractConfig {
* Path for the default item template. Path is relative to the * Path for the default item template. Path is relative to the
* Template Root path. * Template Root path.
*/ */
private final Parameter m_defaultItemTemplatePath = new StringParameter("com.arsdigita.cms.default_item_template_path", private final Parameter m_defaultItemTemplatePath =
Parameter.REQUIRED, "/default/item.jsp"); new StringParameter(
"com.arsdigita.cms.default_item_template_path",
Parameter.REQUIRED,
"/default/item.jsp");
/** /**
* Path for the default folder template. Path is relative to the * Path for the default folder template. Path is relative to the
* Template Root path. * Template Root path.
*/ */
private final Parameter m_defaultFolderTemplatePath = new StringParameter("com.arsdigita.cms.default_folder_template_path", private final Parameter m_defaultFolderTemplatePath =
Parameter.REQUIRED, "/default/folder.jsp"); new StringParameter(
"com.arsdigita.cms.default_folder_template_path",
Parameter.REQUIRED,
"/default/folder.jsp");
/** /**
* Path for the default template folder. Path is relative to webapp root * Path for the default template folder. Path is relative to webapp root
*/ */
private final Parameter m_templateRootPath = new StringParameter("com.arsdigita.cms.template_root_path", private final Parameter m_templateRootPath =
Parameter.REQUIRED, "/packages/content-section/templates"); new StringParameter(
"com.arsdigita.cms.template_root_path",
Parameter.REQUIRED,
"/packages/content-section/templates");
// URL resource: protocol handler removal: START // URL resource: protocol handler removal: START
// remove: // remove:
// try { // try {
@ -160,7 +169,9 @@ public final class CMSConfig extends AbstractConfig {
* Item Adapters File, path to an XML resource containing adapter * Item Adapters File, path to an XML resource containing adapter
* specifications. Path is relative to webapp root. * specifications. Path is relative to webapp root.
*/ */
private final Parameter m_itemAdapters = new ResourceParameter("com.arsdigita.cms.item_adapters", private final Parameter m_itemAdapters =
new ResourceParameter(
"com.arsdigita.cms.item_adapters",
Parameter.REQUIRED, Parameter.REQUIRED,
"/WEB-INF/resources/cms-item-adapters.xml"); "/WEB-INF/resources/cms-item-adapters.xml");
// URL resource: protocol handler removal: END // URL resource: protocol handler removal: END
@ -168,18 +179,21 @@ public final class CMSConfig extends AbstractConfig {
* Use streamlined content creation: upon item creation, * Use streamlined content creation: upon item creation,
* automatically open authoring steps and forward to the next step * automatically open authoring steps and forward to the next step
*/ */
private final Parameter m_useStreamlinedCreation = new BooleanParameter("com.arsdigita.cms.use_streamlined_creation", private final Parameter m_useStreamlinedCreation = new BooleanParameter(
Parameter.REQUIRED, new Boolean(true)); "com.arsdigita.cms.use_streamlined_creation",
Parameter.REQUIRED,
new Boolean(
true));
/** /**
* DHTML Editor Configuration for use in CMS module, lists the * DHTML Editor Configuration for use in CMS module, lists the
* config object name and Javascript source location for its definition. * config object name and Javascript source location for its definition.
*/ */
private final Parameter m_dhtmlEditorConfig = private final Parameter m_dhtmlEditorConfig =
new DHTMLEditorConfigParameter( new DHTMLEditorConfigParameter(
"com.arsdigita.cms.dhtml_editor_config", "com.arsdigita.cms.dhtml_editor_config",
Parameter.REQUIRED, Parameter.REQUIRED,
new DHTMLEditor.Config("XinhaConfig", new DHTMLEditor.Config("XinhaConfig",
"/assets/xinha/CCMcmsXinhaConfig.js")); "/assets/xinha/CCMcmsXinhaConfig.js"));
// previous parameter definition: // previous parameter definition:
// > DHTMLEditor.Config.STANDARD); < // > DHTMLEditor.Config.STANDARD); <
// didn't work because of broken unmarshalling (cf. similiar problem // didn't work because of broken unmarshalling (cf. similiar problem
@ -202,108 +216,162 @@ public final class CMSConfig extends AbstractConfig {
* Prevent undesirable functions from being made available, * Prevent undesirable functions from being made available,
* eg images should only be added through the cms methods. * eg images should only be added through the cms methods.
*/ */
private final Parameter m_dhtmlEditorHiddenButtons = new StringArrayParameter("com.arsdigita.cms.dhtml_editor_hidden_buttons", private final Parameter m_dhtmlEditorHiddenButtons =
new StringArrayParameter(
"com.arsdigita.cms.dhtml_editor_hidden_buttons",
Parameter.OPTIONAL, Parameter.OPTIONAL,
null); null);
/** /**
* Hide section admin tabs from users without administrative rights. * Hide section admin tabs from users without administrative rights.
*/ */
private final Parameter m_hideAdminTabs = new BooleanParameter("com.arsdigita.cms.hide_admin_tabs", private final Parameter m_hideAdminTabs = new BooleanParameter(
Parameter.REQUIRED, new Boolean(false)); "com.arsdigita.cms.hide_admin_tabs",
Parameter.REQUIRED,
new Boolean(
false));
/** /**
* Hide Folder Index Checkbox from folder view * Hide Folder Index Checkbox from folder view
*/ */
private final Parameter m_hideFolderIndexCheckbox = new BooleanParameter("com.arsdigita.cms.hide_folder_index_checkbox", private final Parameter m_hideFolderIndexCheckbox = new BooleanParameter(
Parameter.REQUIRED, new Boolean(false)); "com.arsdigita.cms.hide_folder_index_checkbox",
Parameter.REQUIRED,
new Boolean(
false));
/** /**
* Hide launch date parameter on all forms and displays where it's used. * Hide launch date parameter on all forms and displays where it's used.
*/ */
private final Parameter m_hideLaunchDate = new BooleanParameter("com.arsdigita.cms.hide_launch_date", private final Parameter m_hideLaunchDate = new BooleanParameter(
Parameter.REQUIRED, new Boolean(true)); "com.arsdigita.cms.hide_launch_date",
Parameter.REQUIRED,
new Boolean(
true));
/** /**
* Require the launch date parameter to be set by the content author. * Require the launch date parameter to be set by the content author.
*/ */
private final Parameter m_requireLaunchDate = new BooleanParameter("com.arsdigita.cms.require_launch_date", private final Parameter m_requireLaunchDate = new BooleanParameter(
Parameter.REQUIRED, new Boolean(false)); "com.arsdigita.cms.require_launch_date",
Parameter.REQUIRED,
new Boolean(
false));
/** /**
* Hide the templates tab on the item admin page. * Hide the templates tab on the item admin page.
*/ */
private final Parameter m_hideTemplatesTab = new BooleanParameter("com.arsdigita.cms.hide_templates_tab", private final Parameter m_hideTemplatesTab = new BooleanParameter(
Parameter.REQUIRED, new Boolean(false)); "com.arsdigita.cms.hide_templates_tab",
Parameter.REQUIRED,
new Boolean(
false));
/** /**
* Hide the upload file link in the editing of a text asset. * Hide the upload file link in the editing of a text asset.
*/ */
private final Parameter m_hideTextAssetUploadFile = new BooleanParameter("com.arsdigita.cms.hide_text_asset_upload_file", private final Parameter m_hideTextAssetUploadFile = new BooleanParameter(
"com.arsdigita.cms.hide_text_asset_upload_file",
Parameter.REQUIRED, Parameter.REQUIRED,
new Boolean(false)); new Boolean(
false));
/** /**
* Hide timezone labels (if, for example, all users will be in the * Hide timezone labels (if, for example, all users will be in the
* same timezone and such information would be unnecessary) * same timezone and such information would be unnecessary)
*/ */
private final Parameter m_hideTimezone = new BooleanParameter("com.arsdigita.cms.hide_timezone", private final Parameter m_hideTimezone = new BooleanParameter(
Parameter.REQUIRED, new Boolean(false)); "com.arsdigita.cms.hide_timezone",
Parameter.REQUIRED,
new Boolean(
false));
/** /**
* Hide User Defined Content Types UI * Hide User Defined Content Types UI
*/ */
private final Parameter m_hideUDCTUI = new BooleanParameter("com.arsdigita.cms.hide_udct_ui", private final Parameter m_hideUDCTUI = new BooleanParameter(
Parameter.REQUIRED, new Boolean(false)); "com.arsdigita.cms.hide_udct_ui",
Parameter.REQUIRED,
new Boolean(
false));
/** /**
* Specifies the name of the class to use as a PublishLifecycleListener * Specifies the name of the class to use as a PublishLifecycleListener
*/ */
private final Parameter m_publishLifecycleListenerClass = new StringParameter("com.arsdigita.cms.publish_lifecycle_listener_class", private final Parameter m_publishLifecycleListenerClass =
Parameter.OPTIONAL, PublishLifecycleListener.class.getName()); new StringParameter(
"com.arsdigita.cms.publish_lifecycle_listener_class",
Parameter.OPTIONAL,
PublishLifecycleListener.class.getName());
/** /**
* Wether the Wysiwyg editor should clear the text of MSWord tags, * Wether the Wysiwyg editor should clear the text of MSWord tags,
* everytime the user clicks on 'Save' * everytime the user clicks on 'Save'
*/ */
private final Parameter m_saveTextCleansWordTags = new BooleanParameter("com.arsdigita.cms.save_text_cleans_word_tags", private final Parameter m_saveTextCleansWordTags = new BooleanParameter(
Parameter.OPTIONAL, new Boolean(false)); "com.arsdigita.cms.save_text_cleans_word_tags",
Parameter.OPTIONAL,
new Boolean(
false));
/** /**
* Hide Additional Resource Fields on RelatedLinkPropertyForm * Hide Additional Resource Fields on RelatedLinkPropertyForm
*/ */
private final Parameter m_hideAdditionalResourceFields = new BooleanParameter("com.arsdigita.cms.contentassets.ui." private final Parameter m_hideAdditionalResourceFields =
new BooleanParameter(
"com.arsdigita.cms.contentassets.ui."
+ "RelatedLinkPropertyForm.hideAdditionalResourceFields", + "RelatedLinkPropertyForm.hideAdditionalResourceFields",
Parameter.REQUIRED, new Boolean(false)); Parameter.REQUIRED,
new Boolean(false));
/** /**
* Get the search indexing not to process FileAssets, * Get the search indexing not to process FileAssets,
* eg to avoid PDF slowdowns * eg to avoid PDF slowdowns
*/ */
private final Parameter m_disableFileAssetExtraction = new BooleanParameter("com.arsdigita.cms.search.disableFileAssetExtraction", private final Parameter m_disableFileAssetExtraction = new BooleanParameter(
Parameter.REQUIRED, new Boolean(false)); "com.arsdigita.cms.search.disableFileAssetExtraction",
Parameter.REQUIRED,
new Boolean(
false));
/** /**
* Whether an item's workflow should be deleted, once the item * Whether an item's workflow should be deleted, once the item
* has been (re)published * has been (re)published
*/ */
private final Parameter m_deleteWorkflowAfterPublication = new BooleanParameter("com.arsdigita.cms.delete_workflow_after_publication", private final Parameter m_deleteWorkflowAfterPublication =
Parameter.REQUIRED, new Boolean(true)); new BooleanParameter(
"com.arsdigita.cms.delete_workflow_after_publication",
Parameter.REQUIRED,
new Boolean(true));
/** /**
* Defines the number of days ahead that are covered in the * Defines the number of days ahead that are covered in the
* 'Soon Expired' tab * 'Soon Expired' tab
*/ */
private final Parameter m_soonExpiredTimespanDays = new IntegerParameter("com.arsdigita.cms.soon_expired_timespan_days", private final Parameter m_soonExpiredTimespanDays = new IntegerParameter(
Parameter.REQUIRED, new Integer(14)); "com.arsdigita.cms.soon_expired_timespan_days",
Parameter.REQUIRED,
new Integer(
14));
/** /**
* Defines the number of months ahead that are covered in the * Defines the number of months ahead that are covered in the
* 'Soon Expired' tab * 'Soon Expired' tab
*/ */
private final Parameter m_soonExpiredTimespanMonths = new IntegerParameter("com.arsdigita.cms.soon_expired_timespan_months", private final Parameter m_soonExpiredTimespanMonths = new IntegerParameter(
Parameter.REQUIRED, new Integer(1)); "com.arsdigita.cms.soon_expired_timespan_months",
Parameter.REQUIRED,
new Integer(
1));
/** /**
* Does a redirect to the unpublished item generate not found error? * Does a redirect to the unpublished item generate not found error?
*/ */
private final Parameter m_unpublishedNotFound = new BooleanParameter("com.arsdigita.cms.unpublished_not_found", private final Parameter m_unpublishedNotFound = new BooleanParameter(
Parameter.REQUIRED, new Boolean(true)); "com.arsdigita.cms.unpublished_not_found",
Parameter.REQUIRED,
new Boolean(
true));
/** /**
* Links created through browse interfaces should only be within the * Links created through browse interfaces should only be within the
* same subsite * same subsite
*/ */
private final Parameter m_linksOnlyInSameSubsite = new BooleanParameter("com.arsdigita.cms.browse_links_in_same_subsite_only", private final Parameter m_linksOnlyInSameSubsite = new BooleanParameter(
Parameter.REQUIRED, new Boolean(false)); "com.arsdigita.cms.browse_links_in_same_subsite_only",
Parameter.REQUIRED,
new Boolean(
false));
/** /**
* Item category step extension hook: Subclass of ItemCategoryExtension * Item category step extension hook: Subclass of ItemCategoryExtension
* which adds extension actions for the category authoring step * which adds extension actions for the category authoring step
*/ */
private final Parameter m_categoryAuthoringExtension = new SpecificClassParameter("com.arsdigita.cms.category_authoring_extension", private final Parameter m_categoryAuthoringExtension =
new SpecificClassParameter(
"com.arsdigita.cms.category_authoring_extension",
Parameter.REQUIRED, Parameter.REQUIRED,
ItemCategoryExtension.class, ItemCategoryExtension.class,
ItemCategoryExtension.class); ItemCategoryExtension.class);
@ -311,19 +379,25 @@ public final class CMSConfig extends AbstractConfig {
* Link available to reset lifecycle on republish. If false don't display * Link available to reset lifecycle on republish. If false don't display
* the link otherwise display. * the link otherwise display.
*/ */
private final Parameter m_hideResetLifecycleLink = new BooleanParameter("com.arsdigita.cms.hide_reset_lifecycle_link", private final Parameter m_hideResetLifecycleLink = new BooleanParameter(
Parameter.OPTIONAL, new Boolean(true)); "com.arsdigita.cms.hide_reset_lifecycle_link",
Parameter.OPTIONAL,
new Boolean(
true));
/** /**
* Whether to include INPATH operators to contains clause in intermedia search * Whether to include INPATH operators to contains clause in intermedia search
*/ */
private final Parameter m_scoreTitleAndKeywords = new BooleanParameter("com.arsdigita.cms.search.score_title_and_keywords", private final Parameter m_scoreTitleAndKeywords =
new BooleanParameter(
"com.arsdigita.cms.search.score_title_and_keywords",
Parameter.OPTIONAL, Parameter.OPTIONAL,
Boolean.FALSE); Boolean.FALSE);
/** /**
* Title Weight, the relative weight given to title element within * Title Weight, the relative weight given to title element within
* cms:item when ranking search results (only used by interMedia) * cms:item when ranking search results (only used by interMedia)
*/ */
private final Parameter m_titleWeight = new IntegerParameter("com.arsdigita.cms.search.intermedia.title_weight", private final Parameter m_titleWeight = new IntegerParameter(
"com.arsdigita.cms.search.intermedia.title_weight",
Parameter.OPTIONAL, Parameter.OPTIONAL,
new Integer(1)); new Integer(1));
/** /**
@ -331,13 +405,17 @@ public final class CMSConfig extends AbstractConfig {
* within dublinCore element within cms:item element when ranking * within dublinCore element within cms:item element when ranking
* search results (only used by interMedia) * search results (only used by interMedia)
*/ */
private final Parameter m_keywordWeight = new IntegerParameter("com.arsdigita.cms.search.intermedia.keyword_weight", private final Parameter m_keywordWeight =
new IntegerParameter(
"com.arsdigita.cms.search.intermedia.keyword_weight",
Parameter.OPTIONAL, Parameter.OPTIONAL,
new Integer(1)); new Integer(1));
/** /**
* Limit the item search to current content section * Limit the item search to current content section
*/ */
private final Parameter m_limitToContentSection = new BooleanParameter("com.arsdigita.cms.search.limitToContentSection", private final Parameter m_limitToContentSection =
new BooleanParameter(
"com.arsdigita.cms.search.limitToContentSection",
Parameter.OPTIONAL, Parameter.OPTIONAL,
Boolean.TRUE); Boolean.TRUE);
/** /**
@ -349,40 +427,55 @@ public final class CMSConfig extends AbstractConfig {
* Second string is the name of the bebop step component * Second string is the name of the bebop step component
* eg com.arsdigita.cms.contenttypes.ui.ImageStep * eg com.arsdigita.cms.contenttypes.ui.ImageStep
*/ */
private final Parameter m_skipAssetSteps = new StringArrayParameter("com.arsdigita.cms.skip_asset_steps", private final Parameter m_skipAssetSteps = new StringArrayParameter(
"com.arsdigita.cms.skip_asset_steps",
Parameter.OPTIONAL, Parameter.OPTIONAL,
null); null);
/** /**
* Mandatory Descriptions Content types may refer to this to decide * Mandatory Descriptions Content types may refer to this to decide
* whether to validate against empty descriptions * whether to validate against empty descriptions
*/ */
private final Parameter m_mandatoryDescriptions = new BooleanParameter("com.arsdigita.cms.mandatory_descriptions", private final Parameter m_mandatoryDescriptions = new BooleanParameter(
Parameter.OPTIONAL, new Boolean(false)); "com.arsdigita.cms.mandatory_descriptions",
Parameter.OPTIONAL,
new Boolean(
false));
/** /**
* Delete Finished Lifecycles. Decide whether lifecycles and their phases * Delete Finished Lifecycles. Decide whether lifecycles and their phases
* should be deleted from the system when finished. * should be deleted from the system when finished.
*/ */
private final Parameter m_deleteLifecycleWhenComplete = new BooleanParameter("com.arsdigita.cms.delete_lifecycle_when_complete", private final Parameter m_deleteLifecycleWhenComplete =
Parameter.OPTIONAL, new Boolean(false)); new BooleanParameter(
"com.arsdigita.cms.delete_lifecycle_when_complete",
Parameter.OPTIONAL,
new Boolean(false));
/** /**
* Contacts for content items. Allows you to add a Contact authoring step * Contacts for content items. Allows you to add a Contact authoring step
* to all items * to all items
*/ */
private final Parameter m_hasContactsAuthoringStep = new BooleanParameter("com.arsdigita.cms.has_contacts_authoring_step", private final Parameter m_hasContactsAuthoringStep = new BooleanParameter(
Parameter.REQUIRED, new Boolean(false)); "com.arsdigita.cms.has_contacts_authoring_step",
Parameter.REQUIRED,
new Boolean(
false));
/** /**
* Ordering for nodes in assign category tree. Decide whether entries * Ordering for nodes in assign category tree. Decide whether entries
* should be ordered alphabetically or according to sort key * should be ordered alphabetically or according to sort key
* (maintained in category admin tab in content centre) * (maintained in category admin tab in content centre)
* SortKey|Alphabetical is initialized in constructor! See below. * SortKey|Alphabetical is initialized in constructor! See below.
*/ */
private final Parameter m_categoryTreeOrdering = new EnumerationParameter("com.arsdigita.cms.category_tree_order", private final Parameter m_categoryTreeOrdering =
Parameter.OPTIONAL, Category.SORT_KEY); new EnumerationParameter(
"com.arsdigita.cms.category_tree_order",
Parameter.OPTIONAL,
Category.SORT_KEY);
/** /**
* Allow content creation in section listing. Allows you to turn off * Allow content creation in section listing. Allows you to turn off
* the ability to create content in the section listing * the ability to create content in the section listing
*/ */
private final Parameter m_allowContentCreateInSectionListing = new BooleanParameter("com.arsdigita.cms.allow_content_create_in_section_listing", private final Parameter m_allowContentCreateInSectionListing =
new BooleanParameter(
"com.arsdigita.cms.allow_content_create_in_section_listing",
Parameter.REQUIRED, Parameter.REQUIRED,
new Boolean(true)); new Boolean(true));
// /////////////////////////////////////////// // ///////////////////////////////////////////
@ -392,26 +485,38 @@ public final class CMSConfig extends AbstractConfig {
* Delete Sent Workflow Notifications. Decide whether successfully sent * Delete Sent Workflow Notifications. Decide whether successfully sent
* notifications and messages should be deleted from the system * notifications and messages should be deleted from the system
*/ */
private final Parameter m_deleteWorkflowNotificationsWhenSent = new BooleanParameter("com.arsdigita.cms.delete_workflow_notification_when_sent", private final Parameter m_deleteWorkflowNotificationsWhenSent =
Parameter.OPTIONAL, new Boolean(false)); new BooleanParameter(
"com.arsdigita.cms.delete_workflow_notification_when_sent",
Parameter.OPTIONAL,
new Boolean(false));
/** /**
* Decide whether successfully sent notifications and messages * Decide whether successfully sent notifications and messages
* should be deleted from the system * should be deleted from the system
*/ */
private final Parameter m_deleteExpiryNotificationsWhenSent = new BooleanParameter("com.arsdigita.cms.delete_expiry_notification_when_sent", private final Parameter m_deleteExpiryNotificationsWhenSent =
Parameter.OPTIONAL, new Boolean(false)); new BooleanParameter(
"com.arsdigita.cms.delete_expiry_notification_when_sent",
Parameter.OPTIONAL,
new Boolean(false));
/** /**
* Amount of time (in hours) before the expiration of a content item * Amount of time (in hours) before the expiration of a content item
* that users in the Alert Recipient role are alerted via email * that users in the Alert Recipient role are alerted via email
*/ */
private final Parameter m_defaultNotificationTime = new IntegerParameter("com.arsdigita.cms.default_notification_time", private final Parameter m_defaultNotificationTime = new IntegerParameter(
Parameter.REQUIRED, new Integer(0)); "com.arsdigita.cms.default_notification_time",
Parameter.REQUIRED,
new Integer(
0));
/** /**
* Wether a content item's author should be notified * Wether a content item's author should be notified
* by the item's LifecycleListener; defaults to true * by the item's LifecycleListener; defaults to true
*/ */
private final Parameter m_notifyAuthorOnLifecycle = new BooleanParameter("com.arsdigita.cms.notify_author_on_lifecycle", private final Parameter m_notifyAuthorOnLifecycle = new BooleanParameter(
Parameter.OPTIONAL, new Boolean(true)); "com.arsdigita.cms.notify_author_on_lifecycle",
Parameter.OPTIONAL,
new Boolean(
true));
// //////////////////////////////////////////////////// // ////////////////////////////////////////////////////
// Content Center (Workspace) config related parameters // Content Center (Workspace) config related parameters
// //////////////////////////////////////////////////// // ////////////////////////////////////////////////////
@ -426,8 +531,10 @@ public final class CMSConfig extends AbstractConfig {
// /////////////////////////////////////////// // ///////////////////////////////////////////
// Content Section config related parameters // Content Section config related parameters
// /////////////////////////////////////////// // ///////////////////////////////////////////
private final Parameter m_defaultSection = new StringParameter("com.arsdigita.cms.default_content_section", private final Parameter m_defaultSection = new StringParameter(
Parameter.REQUIRED, "content"); "com.arsdigita.cms.default_content_section",
Parameter.REQUIRED,
"content");
// /////////////////////////////////////////// // ///////////////////////////////////////////
// Content Section creation parameters // Content Section creation parameters
// XXX these are probably temporary parameters, as the // XXX these are probably temporary parameters, as the
@ -435,32 +542,49 @@ public final class CMSConfig extends AbstractConfig {
// to SectionInitializer. However, it still may be useful to // to SectionInitializer. However, it still may be useful to
// keep these for the default values. // keep these for the default values.
// /////////////////////////////////////////// // ///////////////////////////////////////////
private final Parameter m_defaultItemResolverClass = new SpecificClassParameter private final Parameter m_defaultItemResolverClass =
("com.arsdigita.cms.default_item_resolver_class", new SpecificClassParameter(
Parameter.REQUIRED, "com.arsdigita.cms.default_item_resolver_class",
MultilingualItemResolver.class, Parameter.REQUIRED,
ItemResolver.class); MultilingualItemResolver.class,
private final Parameter m_defaultTemplateResolverClass = new SpecificClassParameter("com.arsdigita.cms.default_template_resolver_class", ItemResolver.class);
private final Parameter m_defaultTemplateResolverClass =
new SpecificClassParameter(
"com.arsdigita.cms.default_template_resolver_class",
Parameter.REQUIRED, Parameter.REQUIRED,
DefaultTemplateResolver.class, DefaultTemplateResolver.class,
TemplateResolver.class); TemplateResolver.class);
///////////////////////////////////////////// /////////////////////////////////////////////
// ItemSearchWidget // ItemSearchWidget
///////////////////////////////////////////// /////////////////////////////////////////////
private final Parameter m_itemSearchDefaultTab = new StringParameter("com.arsdigita.cms.item_search.default_tab", private final Parameter m_itemSearchDefaultTab =
new StringParameter(
"com.arsdigita.cms.item_search.default_tab",
Parameter.REQUIRED, "browse"); Parameter.REQUIRED, "browse");
///////////////////////////////////////////// /////////////////////////////////////////////
// FolderBrowse // FolderBrowse
///////////////////////////////////////////// /////////////////////////////////////////////
private final Parameter m_folderBrowseListSize = new IntegerParameter("com.arsdigita.cms.folder_browse_list_size", private final Parameter m_folderBrowseListSize = new IntegerParameter(
Parameter.REQUIRED, 20); "com.arsdigita.cms.folder_browse_list_size",
Parameter.REQUIRED,
20);
///////////////////////////////////////////// /////////////////////////////////////////////
// Folder A to Z show limit: Display a A to Z filter bar when a folder has more than x items // Folder A to Z show limit: Display a A to Z filter bar when a folder has more than x items
///////////////////////////////////////////// /////////////////////////////////////////////
private final Parameter m_folderAtoZShowLimit = new IntegerParameter("com.arsdigita.cms.folder_atoz_show_limit", private final Parameter m_folderAtoZShowLimit = new IntegerParameter(
Parameter.REQUIRED, 100); "com.arsdigita.cms.folder_atoz_show_limit",
Parameter.REQUIRED,
100);
//////////////////////////////////////////////
//If set to true the old style ItemLifecycleItemPane (allows you to
//republish and withdraw items) is used. Otherwise the new style form is
//used, which is more secure against wrong clicks.
//////////////////////////////////////////////
private final Parameter m_useOldStyleItemLifecycleItemPane =
new BooleanParameter(
"com.arsdigita.cms.lifecycle.use_old_style_item_lifecycle_item_pane",
Parameter.REQUIRED,
false);
// /////////////////////////////////////////// // ///////////////////////////////////////////
// publishToFile package related parameter // publishToFile package related parameter
@ -478,8 +602,10 @@ public final class CMSConfig extends AbstractConfig {
// Initialize m_categoryTreeOrdering parameter here! // Initialize m_categoryTreeOrdering parameter here!
// 2 valid values at the moment - enumeration used rather than boolean // 2 valid values at the moment - enumeration used rather than boolean
// in case other possible orders are deemed valid // in case other possible orders are deemed valid
((EnumerationParameter) m_categoryTreeOrdering).put("SortKey", Category.SORT_KEY); ((EnumerationParameter) m_categoryTreeOrdering).put("SortKey",
((EnumerationParameter) m_categoryTreeOrdering).put("Alphabetical", Category.NAME); Category.SORT_KEY);
((EnumerationParameter) m_categoryTreeOrdering).put("Alphabetical",
Category.NAME);
register(m_templateRootPath); register(m_templateRootPath);
@ -523,7 +649,7 @@ public final class CMSConfig extends AbstractConfig {
register(m_categoryTreeOrdering); register(m_categoryTreeOrdering);
register(m_hasContactsAuthoringStep); register(m_hasContactsAuthoringStep);
register(m_hideTextAssetUploadFile); register(m_hideTextAssetUploadFile);
register(m_allowContentCreateInSectionListing); register(m_allowContentCreateInSectionListing);
// Content Center (Workspace) config related parameters // Content Center (Workspace) config related parameters
register(m_contentCenterMap); register(m_contentCenterMap);
@ -539,6 +665,8 @@ public final class CMSConfig extends AbstractConfig {
register(m_folderBrowseListSize); register(m_folderBrowseListSize);
register(m_folderAtoZShowLimit); register(m_folderAtoZShowLimit);
register(m_useOldStyleItemLifecycleItemPane);
// publishToFile package related parameter // publishToFile package related parameter
// Moved to publishToFile.PublishToFileConfig as of version 6.0.2 // Moved to publishToFile.PublishToFileConfig as of version 6.0.2
@ -720,8 +848,8 @@ public final class CMSConfig extends AbstractConfig {
private class DHTMLEditorConfigParameter extends StringParameter { private class DHTMLEditorConfigParameter extends StringParameter {
public DHTMLEditorConfigParameter(final String name, public DHTMLEditorConfigParameter(final String name,
final int multiplicity, final int multiplicity,
final Object defaultObj) { final Object defaultObj) {
super(name, multiplicity, defaultObj); super(name, multiplicity, defaultObj);
} }
@ -739,7 +867,8 @@ public final class CMSConfig extends AbstractConfig {
protected static HashMap extraXMLGenerators = new HashMap(); protected static HashMap extraXMLGenerators = new HashMap();
/** Add one ExtraXMLGenerator to the list. */ /** Add one ExtraXMLGenerator to the list. */
public static void registerExtraXMLGenerator(String type, ExtraXMLGenerator gen) { public static void registerExtraXMLGenerator(String type,
ExtraXMLGenerator gen) {
List gens = (List) extraXMLGenerators.get(type); List gens = (List) extraXMLGenerators.get(type);
if (gens == null) { if (gens == null) {
gens = new LinkedList(); gens = new LinkedList();
@ -807,7 +936,8 @@ public final class CMSConfig extends AbstractConfig {
* @return * @return
*/ */
public Collection getAssetStepsToSkip(ContentType type) { public Collection getAssetStepsToSkip(ContentType type) {
s_log.debug("getting asset steps to skip for type " + type.getClassName()); s_log.debug("getting asset steps to skip for type "
+ type.getClassName());
if (s_skipAssetSteps == null) { if (s_skipAssetSteps == null) {
// populate static map once based on config parameter value // populate static map once based on config parameter value
s_log.debug("loading skipsteps"); s_log.debug("loading skipsteps");
@ -819,8 +949,10 @@ public final class CMSConfig extends AbstractConfig {
for (int i = 0; i < skipSteps.length; i++) { for (int i = 0; i < skipSteps.length; i++) {
String[] pair = StringUtils.split(skipSteps[i], ':'); String[] pair = StringUtils.split(skipSteps[i], ':');
// 1st string is name of content type, 2nd string is name of asset step // 1st string is name of content type, 2nd string is name of asset step
s_log.debug("parameter read - type = " + pair[0] + " - step = " + pair[1]); s_log.debug("parameter read - type = " + pair[0]
Collection typeSteps = (Collection) s_skipAssetSteps.get(pair[0]); + " - step = " + pair[1]);
Collection typeSteps =
(Collection) s_skipAssetSteps.get(pair[0]);
if (typeSteps == null) { if (typeSteps == null) {
typeSteps = new HashSet(); typeSteps = new HashSet();
s_skipAssetSteps.put(pair[0], typeSteps); s_skipAssetSteps.put(pair[0], typeSteps);
@ -832,7 +964,8 @@ public final class CMSConfig extends AbstractConfig {
} }
} }
Collection skipSteps = (Collection) s_skipAssetSteps.get(type.getClassName()); Collection skipSteps = (Collection) s_skipAssetSteps.get(type.
getClassName());
if (skipSteps == null) { if (skipSteps == null) {
s_log.debug("no steps to skip"); s_log.debug("no steps to skip");
skipSteps = new HashSet(); skipSteps = new HashSet();
@ -884,7 +1017,8 @@ public final class CMSConfig extends AbstractConfig {
* *
*/ */
public boolean deleteWorkflowNotifications() { public boolean deleteWorkflowNotifications() {
return ((Boolean) get(m_deleteWorkflowNotificationsWhenSent)).booleanValue(); return ((Boolean) get(m_deleteWorkflowNotificationsWhenSent)).
booleanValue();
} }
public String getCategoryTreeOrder() { public String getCategoryTreeOrder() {
@ -910,7 +1044,8 @@ public final class CMSConfig extends AbstractConfig {
} }
public final boolean getAllowContentCreateInSectionListing() { public final boolean getAllowContentCreateInSectionListing() {
return ((Boolean) get(m_allowContentCreateInSectionListing)).booleanValue(); return ((Boolean) get(m_allowContentCreateInSectionListing)).
booleanValue();
} }
public String getItemSearchDefaultTab() { public String getItemSearchDefaultTab() {
@ -924,4 +1059,8 @@ public final class CMSConfig extends AbstractConfig {
public Integer getFolderAtoZShowLimit() { public Integer getFolderAtoZShowLimit() {
return (Integer) get(m_folderAtoZShowLimit); return (Integer) get(m_folderAtoZShowLimit);
} }
public Boolean getUseOldStyleItemLifecycleItemPane() {
return (Boolean) get(m_useOldStyleItemLifecycleItemPane);
}
} }

View File

@ -248,6 +248,11 @@ com.arsdigita.cms.folder_atoz_show_limit.purpose=Show a a to z filter bar when a
com.arsdigita.cms.folder_atoz_show_limit.example=100 com.arsdigita.cms.folder_atoz_show_limit.example=100
com.arsdigita.cms.folder_atoz_show_limit.format=[integer] com.arsdigita.cms.folder_atoz_show_limit.format=[integer]
com.arsdigita.cms.lifecycle.use_old_style_item_lifecycle_item_pane.title = Use old style ItemLifecycleItemPane
com.arsdigita.cms.lifecycle.use_old_style_item_lifecycle_item_pane.purpose = If set to true the old style ItemLifecycleItemPane will be used (with the two links), otherwise the new style ItemLifecycleItemPane if used (with a selectbox for the action and a submit button)
com.arsdigita.cms.lifecycle.use_old_style_item_lifecycle_item_pane.example = false
com.arsdigita.cms.lifecycle.use_old_style_item_lifecycle_item_pane.format = [Boolean]
com.arsdigita.cms.xx.title= com.arsdigita.cms.xx.title=
com.arsdigita.cms.xx.purpose= com.arsdigita.cms.xx.purpose=
com.arsdigita.cms.xx.example= com.arsdigita.cms.xx.example=

View File

@ -1085,3 +1085,5 @@ cms.contenttypes.ui.contact.alias.select.add=Select former name
cms.contenttypes.person.alias.select.wrong_type=No person selected cms.contenttypes.person.alias.select.wrong_type=No person selected
cms.contenttypes.person.alias.select.same_as_person=Selected person is the same as the current person. Alias and person can't be identical. cms.contenttypes.person.alias.select.same_as_person=Selected person is the same as the current person. Alias and person can't be identical.
cms.contenttypes.person.alias.select.no_suitable_language_variant=The selected item has no suitable language variant. cms.contenttypes.person.alias.select.no_suitable_language_variant=The selected item has no suitable language variant.
cms.ui.item.lifecycle.do=Execute
cms.ui.item.lifecycle.do.not_authorized=Your not authorized to publish this item.

View File

@ -1076,3 +1076,5 @@ cms.contenttypes.ui.contact.alias.select.add=Fr\u00fcheren Namen ausw\u00e4hlen
cms.contenttypes.person.alias.select.wrong_type=Kein Personendatensatz ausgew\u00e4hlt cms.contenttypes.person.alias.select.wrong_type=Kein Personendatensatz ausgew\u00e4hlt
cms.contenttypes.person.alias.select.same_as_person=Der ausgew\u00e4hlte Datensatz ist der gleiche Datensatz wie der aktuelle Datensatz. Alias und Person k\u00f6nnen nicht identisch sein. cms.contenttypes.person.alias.select.same_as_person=Der ausgew\u00e4hlte Datensatz ist der gleiche Datensatz wie der aktuelle Datensatz. Alias und Person k\u00f6nnen nicht identisch sein.
cms.contenttypes.person.alias.select.no_suitable_language_variant=Das ausgew\u00e4hlte Item hat keine passende Sprachvariante. cms.contenttypes.person.alias.select.no_suitable_language_variant=Das ausgew\u00e4hlte Item hat keine passende Sprachvariante.
cms.ui.item.lifecycle.do=Ausf\u00fchren
cms.ui.item.lifecycle.do.not_authorized=Sie sind nicht berechtigt, dieses Item zu publizieren.

View File

@ -24,3 +24,5 @@ cms.contenttypes.ui.contact.alias.select.add=
cms.contenttypes.person.alias.select.wrong_type= cms.contenttypes.person.alias.select.wrong_type=
cms.contenttypes.person.alias.select.same_as_person= cms.contenttypes.person.alias.select.same_as_person=
cms.contenttypes.person.alias.select.no_suitable_language_variant= cms.contenttypes.person.alias.select.no_suitable_language_variant=
cms.ui.item.lifecycle.do=
cms.ui.item.lifecycle.do.not_authorized=

View File

@ -555,3 +555,5 @@ cms.contenttypes.ui.contact.alias.select.add=
cms.contenttypes.person.alias.select.wrong_type= cms.contenttypes.person.alias.select.wrong_type=
cms.contenttypes.person.alias.select.same_as_person= cms.contenttypes.person.alias.select.same_as_person=
cms.contenttypes.person.alias.select.no_suitable_language_variant= cms.contenttypes.person.alias.select.no_suitable_language_variant=
cms.ui.item.lifecycle.do=
cms.ui.item.lifecycle.do.not_authorized=

View File

@ -18,12 +18,17 @@
*/ */
package com.arsdigita.cms.ui.lifecycle; package com.arsdigita.cms.ui.lifecycle;
import com.arsdigita.bebop.FormProcessException;
import com.arsdigita.bebop.event.FormSectionEvent;
import java.text.DateFormat; import java.text.DateFormat;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import com.arsdigita.bebop.ActionLink; import com.arsdigita.bebop.ActionLink;
import com.arsdigita.bebop.BoxPanel;
import com.arsdigita.bebop.Component; import com.arsdigita.bebop.Component;
import com.arsdigita.bebop.Form;
import com.arsdigita.bebop.FormData;
import com.arsdigita.bebop.Label; import com.arsdigita.bebop.Label;
import com.arsdigita.bebop.PageState; import com.arsdigita.bebop.PageState;
import com.arsdigita.bebop.RequestLocal; import com.arsdigita.bebop.RequestLocal;
@ -31,6 +36,13 @@ import com.arsdigita.bebop.SimpleContainer;
import com.arsdigita.bebop.Table; import com.arsdigita.bebop.Table;
import com.arsdigita.bebop.event.ActionEvent; import com.arsdigita.bebop.event.ActionEvent;
import com.arsdigita.bebop.event.ActionListener; import com.arsdigita.bebop.event.ActionListener;
import com.arsdigita.bebop.event.FormInitListener;
import com.arsdigita.bebop.event.FormProcessListener;
import com.arsdigita.bebop.form.Option;
import com.arsdigita.bebop.form.Select;
import com.arsdigita.bebop.form.SingleSelect;
import com.arsdigita.bebop.form.Submit;
import com.arsdigita.cms.CMS;
import com.arsdigita.cms.ContentItem; import com.arsdigita.cms.ContentItem;
import com.arsdigita.cms.ContentSection; import com.arsdigita.cms.ContentSection;
import com.arsdigita.cms.SecurityManager; import com.arsdigita.cms.SecurityManager;
@ -64,9 +76,8 @@ import com.arsdigita.xml.Element;
*/ */
class ItemLifecycleItemPane extends BaseItemPane { class ItemLifecycleItemPane extends BaseItemPane {
private static final Logger s_log = Logger.getLogger private static final Logger s_log = Logger.getLogger(
(ItemLifecycleItemPane.class); ItemLifecycleItemPane.class);
private final ContentItemRequestLocal m_item; private final ContentItemRequestLocal m_item;
private final LifecycleRequestLocal m_lifecycle; private final LifecycleRequestLocal m_lifecycle;
private final SimpleContainer m_detailPane; private final SimpleContainer m_detailPane;
@ -85,45 +96,51 @@ class ItemLifecycleItemPane extends BaseItemPane {
} }
private class SummarySection extends Section { private class SummarySection extends Section {
public SummarySection() { public SummarySection() {
setHeading(new Label(gz("cms.ui.lifecycle.details"))); setHeading(new Label(gz("cms.ui.lifecycle.details")));
final ActionGroup group = new ActionGroup(); final ActionGroup group = new ActionGroup();
setBody(group); setBody(group);
group.setSubject(new Properties()); if (CMS.getConfig().getUseOldStyleItemLifecycleItemPane()) {
group.addAction(new UnpublishLink()); group.setSubject(new Properties());
group.addAction(new RepublishLink()); group.addAction(new UnpublishLink());
if (!ContentSection.getConfig().hideResetLifecycleLink()){ group.addAction(new RepublishLink());
group.addAction(new RepublishAndResetLink()); if (!ContentSection.getConfig().hideResetLifecycleLink()) {
group.addAction(new RepublishAndResetLink());
}
} else {
group.addAction(new ActionForm());
} }
} }
private class Properties extends PropertyList { private class Properties extends PropertyList {
protected final java.util.List properties(final PageState state) { protected final java.util.List properties(final PageState state) {
final java.util.List props = super.properties(state); final java.util.List props = super.properties(state);
final Lifecycle cycle = m_lifecycle.getLifecycle(state); final Lifecycle cycle = m_lifecycle.getLifecycle(state);
final DateFormat format = DateFormat.getDateTimeInstance final DateFormat format =
(DateFormat.FULL, DateFormat.getDateTimeInstance(DateFormat.FULL,
ContentSection.getConfig().getHideTimezone() ? DateFormat.SHORT : DateFormat.FULL); ContentSection.
getConfig().getHideTimezone() ? DateFormat.SHORT
: DateFormat.FULL);
props.add(new Property(gz("cms.ui.name"), props.add(new Property(gz("cms.ui.name"),
cycle.getLabel())); cycle.getLabel()));
props.add(new Property props.add(new Property(gz("cms.ui.item.lifecycle.start_date"),
(gz("cms.ui.item.lifecycle.start_date"), format.format(cycle.getStartDate())));
format.format(cycle.getStartDate())));
final java.util.Date endDate = cycle.getEndDate(); final java.util.Date endDate = cycle.getEndDate();
if (endDate == null) { if (endDate == null) {
props.add(new Property props.add(new Property(gz("cms.ui.item.lifecycle.end_date"),
(gz("cms.ui.item.lifecycle.end_date"), lz("cms.ui.none")));
lz("cms.ui.none")));
} else { } else {
props.add(new Property props.add(new Property(gz("cms.ui.item.lifecycle.end_date"),
(gz("cms.ui.item.lifecycle.end_date"), format.format(endDate)));
format.format(endDate)));
} }
return props; return props;
@ -132,9 +149,12 @@ class ItemLifecycleItemPane extends BaseItemPane {
} }
private class PublishLink extends ActionLink { private class PublishLink extends ActionLink {
private RequestLocal m_canPublish = new RequestLocal(); private RequestLocal m_canPublish = new RequestLocal();
PublishLink(Component c) { super(c); } PublishLink(Component c) {
super(c);
}
public void generateXML(PageState ps, Element parent) { public void generateXML(PageState ps, Element parent) {
Boolean canPublish = (Boolean) m_canPublish.get(ps); Boolean canPublish = (Boolean) m_canPublish.get(ps);
@ -155,18 +175,19 @@ class ItemLifecycleItemPane extends BaseItemPane {
if (canPublish.booleanValue()) { if (canPublish.booleanValue()) {
if (s_log.isDebugEnabled()) { if (s_log.isDebugEnabled()) {
ContentItem item = m_item.getContentItem(ps); ContentItem item = m_item.getContentItem(ps);
s_log.debug ("User can publish " + item.getOID()); s_log.debug("User can publish " + item.getOID());
} }
super.generateXML(ps, parent); super.generateXML(ps, parent);
} else if (s_log.isDebugEnabled()) { } else if (s_log.isDebugEnabled()) {
ContentItem item = m_item.getContentItem(ps); ContentItem item = m_item.getContentItem(ps);
s_log.debug ("User cannot publish " + item.getOID()); s_log.debug("User cannot publish " + item.getOID());
} }
} }
} }
private class UnpublishLink extends PublishLink { private class UnpublishLink extends PublishLink {
UnpublishLink() { UnpublishLink() {
super(new Label(gz("cms.ui.item.lifecycle.unpublish"))); super(new Label(gz("cms.ui.item.lifecycle.unpublish")));
@ -174,15 +195,16 @@ class ItemLifecycleItemPane extends BaseItemPane {
} }
private class Listener implements ActionListener { private class Listener implements ActionListener {
public final void actionPerformed(final ActionEvent e) { public final void actionPerformed(final ActionEvent e) {
final PageState state = e.getPageState(); final PageState state = e.getPageState();
final ContentItem item = m_item.getContentItem(state); final ContentItem item = m_item.getContentItem(state);
item.unpublish(); item.unpublish();
final String target = URL.getDispatcherPath() + final String target = URL.getDispatcherPath() + ContentItemPage.
ContentItemPage.getItemURL(item, getItemURL(item,
ContentItemPage.AUTHORING_TAB); ContentItemPage.AUTHORING_TAB);
throw new RedirectSignal(target, true); throw new RedirectSignal(target, true);
} }
@ -193,14 +215,15 @@ class ItemLifecycleItemPane extends BaseItemPane {
item.republish(reset); item.republish(reset);
Workflow workflow = Workflow.getObjectWorkflow(item); Workflow workflow = Workflow.getObjectWorkflow(item);
try { try {
ItemLifecycleSelectForm.finish(workflow, item, Web ItemLifecycleSelectForm.finish(workflow, item, Web.getContext().
.getContext().getUser()); getUser());
} catch (TaskException te) { } catch (TaskException te) {
throw new UncheckedWrapperException(te); throw new UncheckedWrapperException(te);
} }
} }
private class RepublishLink extends PublishLink { private class RepublishLink extends PublishLink {
RepublishLink() { RepublishLink() {
super(new Label(gz("cms.ui.item.lifecycle.republish"))); super(new Label(gz("cms.ui.item.lifecycle.republish")));
@ -208,20 +231,23 @@ class ItemLifecycleItemPane extends BaseItemPane {
} }
private class Listener implements ActionListener { private class Listener implements ActionListener {
public final void actionPerformed(final ActionEvent e) { public final void actionPerformed(final ActionEvent e) {
final PageState state = e.getPageState(); final PageState state = e.getPageState();
final ContentItem item = m_item.getContentItem(state); final ContentItem item = m_item.getContentItem(state);
republish(item, false); republish(item, false);
if (ContentSection.getConfig().getUseStreamlinedCreation()) { if (ContentSection.getConfig().getUseStreamlinedCreation()) {
throw new RedirectSignal(URL.there(state.getRequest(), throw new RedirectSignal(
Utilities.getWorkspaceURL()), true); URL.there(state.getRequest(),
Utilities.getWorkspaceURL()), true);
} }
} }
} }
} }
private class RepublishAndResetLink extends PublishLink { private class RepublishAndResetLink extends PublishLink {
RepublishAndResetLink() { RepublishAndResetLink() {
super(new Label(gz("cms.ui.item.lifecycle.republish_and_reset"))); super(new Label(gz("cms.ui.item.lifecycle.republish_and_reset")));
@ -233,20 +259,23 @@ class ItemLifecycleItemPane extends BaseItemPane {
} }
private class Listener implements ActionListener { private class Listener implements ActionListener {
public final void actionPerformed(final ActionEvent e) { public final void actionPerformed(final ActionEvent e) {
final PageState state = e.getPageState(); final PageState state = e.getPageState();
final ContentItem item = m_item.getContentItem(state); final ContentItem item = m_item.getContentItem(state);
republish(item, true); republish(item, true);
if (ContentSection.getConfig().getUseStreamlinedCreation()) { if (ContentSection.getConfig().getUseStreamlinedCreation()) {
throw new RedirectSignal(URL.there(state.getRequest(), throw new RedirectSignal(
Utilities.getWorkspaceURL()), true); URL.there(state.getRequest(),
Utilities.getWorkspaceURL()), true);
} }
} }
} }
} }
private class PhaseSection extends Section { private class PhaseSection extends Section {
PhaseSection() { PhaseSection() {
super(gz("cms.ui.lifecycle.phases")); super(gz("cms.ui.lifecycle.phases"));
@ -258,14 +287,108 @@ class ItemLifecycleItemPane extends BaseItemPane {
} }
private class PhaseTable extends Table { private class PhaseTable extends Table {
PhaseTable() { PhaseTable() {
super(new ItemPhaseTableModelBuilder(m_lifecycle), super(new ItemPhaseTableModelBuilder(m_lifecycle),
new String[] { new String[]{
lz("cms.ui.name"), lz("cms.ui.name"),
lz("cms.ui.description"), lz("cms.ui.description"),
lz("cms.ui.item.lifecycle.start_date"), lz("cms.ui.item.lifecycle.start_date"),
lz("cms.ui.item.lifecycle.end_date") lz("cms.ui.item.lifecycle.end_date")
}); });
}
}
private class ActionForm
extends Form
implements FormProcessListener,
FormInitListener {
private static final String LIFECYCLE_ACTION =
"itemLifecycleItemPaneActionSelect";
private static final String REPUBLISH = "republish";
private static final String UNPUBLISH = "unpublish";
private static final String REPUBLISH_AND_RESET = "republishAndReset";
private final Submit submit;
private final Label notAuthorized;
public ActionForm() {
super("itemLifecycleItemPaneActionForm");
final BoxPanel actionPanel = new BoxPanel(BoxPanel.HORIZONTAL);
final SingleSelect actionSelect = new SingleSelect(
LIFECYCLE_ACTION);
actionSelect.addOption(new Option(REPUBLISH, (String) gz(
"cms.ui.item.lifecycle.republish").localize()));
if (!ContentSection.getConfig().hideResetLifecycleLink()) {
actionSelect.addOption(new Option(REPUBLISH_AND_RESET,
(String) gz(
"cms.ui.item.lifecycle.republish_and_reset").
localize()));
}
actionSelect.addOption(new Option(UNPUBLISH, (String) gz(
"cms.ui.item.lifecycle.unpublish").localize()));
submit = new Submit(gz("cms.ui.item.lifecycle.do"));
notAuthorized = new Label(gz(
"cms.ui.item.lifecycle.do.not_authorized"));
actionPanel.add(actionSelect);
actionPanel.add(submit);
actionPanel.add(notAuthorized);
add(actionPanel);
addInitListener(this);
addProcessListener(this);
}
public void init(FormSectionEvent fse) throws FormProcessException {
final PageState state = fse.getPageState();
final ContentItem item = m_item.getContentItem(state);
final SecurityManager sm = Utilities.getSecurityManager(state);
if (sm.canAccess(state.getRequest(),
SecurityManager.PUBLISH,
item)) {
submit.setVisible(state, true);
notAuthorized.setVisible(state, false);
} else {
submit.setVisible(state, false);
notAuthorized.setVisible(state, true);
}
}
public void process(final FormSectionEvent fse) throws
FormProcessException {
final PageState state = fse.getPageState();
final FormData data = fse.getFormData();
String selected = (String) data.get(LIFECYCLE_ACTION);
final ContentItem item = m_item.getContentItem(state);
if (REPUBLISH.equals(selected)) {
republish(item, false);
if (ContentSection.getConfig().getUseStreamlinedCreation()) {
throw new RedirectSignal(
URL.there(state.getRequest(),
Utilities.getWorkspaceURL()), true);
}
} else if (REPUBLISH_AND_RESET.equals(selected)) {
republish(item, true);
if (ContentSection.getConfig().getUseStreamlinedCreation()) {
throw new RedirectSignal(
URL.there(state.getRequest(),
Utilities.getWorkspaceURL()), true);
}
} else if (UNPUBLISH.equals(selected)) {
item.unpublish();
} else {
throw new IllegalArgumentException("Illegal selection");
}
} }
} }
} }

View File

@ -35,6 +35,8 @@ log4j.logger.com.arsdigita.web.CCMApplicationContextListener=INFO
log4j.logger.com.arsdigita.runtime.CCMResourceManager=INFO log4j.logger.com.arsdigita.runtime.CCMResourceManager=INFO
log4j.logger.com.arsdigita.runtime.Runtime=INFO log4j.logger.com.arsdigita.runtime.Runtime=INFO
log4j.logger.com.arsdigita.bundle.Loader=INFO
# For seeing progress of the 'ccm load' command # For seeing progress of the 'ccm load' command
log4j.logger.com.arsdigita.packaging.Loader=INFO log4j.logger.com.arsdigita.packaging.Loader=INFO
# log4j.logger.com.arsdigita.core.Loader=INFO # log4j.logger.com.arsdigita.core.Loader=INFO