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;
}
/**
* Storage (map) for method getAssetStepsToSkip(ContentType type) to store
* mapping of steps that are deemed irrelevant for the passid in type.
*/
private static Map s_skipAssetSteps = null;
/**
* Item category add form speciofies Subclass of ItemCategoryForm
* to use for the assign categories step.
* 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,
ItemCategoryForm.class,
SimpleComponent.class);
@ -132,19 +132,28 @@ public final class CMSConfig extends AbstractConfig {
* Path for the default item template. Path is relative to the
* Template Root path.
*/
private final Parameter m_defaultItemTemplatePath = new StringParameter("com.arsdigita.cms.default_item_template_path",
Parameter.REQUIRED, "/default/item.jsp");
private final Parameter m_defaultItemTemplatePath =
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
* Template Root path.
*/
private final Parameter m_defaultFolderTemplatePath = new StringParameter("com.arsdigita.cms.default_folder_template_path",
Parameter.REQUIRED, "/default/folder.jsp");
private final Parameter m_defaultFolderTemplatePath =
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
*/
private final Parameter m_templateRootPath = new StringParameter("com.arsdigita.cms.template_root_path",
Parameter.REQUIRED, "/packages/content-section/templates");
private final Parameter m_templateRootPath =
new StringParameter(
"com.arsdigita.cms.template_root_path",
Parameter.REQUIRED,
"/packages/content-section/templates");
// URL resource: protocol handler removal: START
// remove:
// try {
@ -160,7 +169,9 @@ public final class CMSConfig extends AbstractConfig {
* Item Adapters File, path to an XML resource containing adapter
* 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,
"/WEB-INF/resources/cms-item-adapters.xml");
// URL resource: protocol handler removal: END
@ -168,18 +179,21 @@ public final class CMSConfig extends AbstractConfig {
* Use streamlined content creation: upon item creation,
* automatically open authoring steps and forward to the next step
*/
private final Parameter m_useStreamlinedCreation = new BooleanParameter("com.arsdigita.cms.use_streamlined_creation",
Parameter.REQUIRED, new Boolean(true));
private final Parameter m_useStreamlinedCreation = new BooleanParameter(
"com.arsdigita.cms.use_streamlined_creation",
Parameter.REQUIRED,
new Boolean(
true));
/**
* DHTML Editor Configuration for use in CMS module, lists the
* config object name and Javascript source location for its definition.
*/
private final Parameter m_dhtmlEditorConfig =
new DHTMLEditorConfigParameter(
"com.arsdigita.cms.dhtml_editor_config",
Parameter.REQUIRED,
new DHTMLEditor.Config("XinhaConfig",
"/assets/xinha/CCMcmsXinhaConfig.js"));
private final Parameter m_dhtmlEditorConfig =
new DHTMLEditorConfigParameter(
"com.arsdigita.cms.dhtml_editor_config",
Parameter.REQUIRED,
new DHTMLEditor.Config("XinhaConfig",
"/assets/xinha/CCMcmsXinhaConfig.js"));
// previous parameter definition:
// > DHTMLEditor.Config.STANDARD); <
// 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,
* 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,
null);
/**
* Hide section admin tabs from users without administrative rights.
*/
private final Parameter m_hideAdminTabs = new BooleanParameter("com.arsdigita.cms.hide_admin_tabs",
Parameter.REQUIRED, new Boolean(false));
private final Parameter m_hideAdminTabs = new BooleanParameter(
"com.arsdigita.cms.hide_admin_tabs",
Parameter.REQUIRED,
new Boolean(
false));
/**
* Hide Folder Index Checkbox from folder view
*/
private final Parameter m_hideFolderIndexCheckbox = new BooleanParameter("com.arsdigita.cms.hide_folder_index_checkbox",
Parameter.REQUIRED, new Boolean(false));
private final Parameter m_hideFolderIndexCheckbox = new BooleanParameter(
"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.
*/
private final Parameter m_hideLaunchDate = new BooleanParameter("com.arsdigita.cms.hide_launch_date",
Parameter.REQUIRED, new Boolean(true));
private final Parameter m_hideLaunchDate = new BooleanParameter(
"com.arsdigita.cms.hide_launch_date",
Parameter.REQUIRED,
new Boolean(
true));
/**
* 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",
Parameter.REQUIRED, new Boolean(false));
private final Parameter m_requireLaunchDate = new BooleanParameter(
"com.arsdigita.cms.require_launch_date",
Parameter.REQUIRED,
new Boolean(
false));
/**
* Hide the templates tab on the item admin page.
*/
private final Parameter m_hideTemplatesTab = new BooleanParameter("com.arsdigita.cms.hide_templates_tab",
Parameter.REQUIRED, new Boolean(false));
private final Parameter m_hideTemplatesTab = new BooleanParameter(
"com.arsdigita.cms.hide_templates_tab",
Parameter.REQUIRED,
new Boolean(
false));
/**
* 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,
new Boolean(false));
new Boolean(
false));
/**
* Hide timezone labels (if, for example, all users will be in the
* same timezone and such information would be unnecessary)
*/
private final Parameter m_hideTimezone = new BooleanParameter("com.arsdigita.cms.hide_timezone",
Parameter.REQUIRED, new Boolean(false));
private final Parameter m_hideTimezone = new BooleanParameter(
"com.arsdigita.cms.hide_timezone",
Parameter.REQUIRED,
new Boolean(
false));
/**
* Hide User Defined Content Types UI
*/
private final Parameter m_hideUDCTUI = new BooleanParameter("com.arsdigita.cms.hide_udct_ui",
Parameter.REQUIRED, new Boolean(false));
private final Parameter m_hideUDCTUI = new BooleanParameter(
"com.arsdigita.cms.hide_udct_ui",
Parameter.REQUIRED,
new Boolean(
false));
/**
* 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",
Parameter.OPTIONAL, PublishLifecycleListener.class.getName());
private final Parameter m_publishLifecycleListenerClass =
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,
* everytime the user clicks on 'Save'
*/
private final Parameter m_saveTextCleansWordTags = new BooleanParameter("com.arsdigita.cms.save_text_cleans_word_tags",
Parameter.OPTIONAL, new Boolean(false));
private final Parameter m_saveTextCleansWordTags = new BooleanParameter(
"com.arsdigita.cms.save_text_cleans_word_tags",
Parameter.OPTIONAL,
new Boolean(
false));
/**
* 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",
Parameter.REQUIRED, new Boolean(false));
Parameter.REQUIRED,
new Boolean(false));
/**
* Get the search indexing not to process FileAssets,
* eg to avoid PDF slowdowns
*/
private final Parameter m_disableFileAssetExtraction = new BooleanParameter("com.arsdigita.cms.search.disableFileAssetExtraction",
Parameter.REQUIRED, new Boolean(false));
private final Parameter m_disableFileAssetExtraction = new BooleanParameter(
"com.arsdigita.cms.search.disableFileAssetExtraction",
Parameter.REQUIRED,
new Boolean(
false));
/**
* Whether an item's workflow should be deleted, once the item
* has been (re)published
*/
private final Parameter m_deleteWorkflowAfterPublication = new BooleanParameter("com.arsdigita.cms.delete_workflow_after_publication",
Parameter.REQUIRED, new Boolean(true));
private final Parameter m_deleteWorkflowAfterPublication =
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
* 'Soon Expired' tab
*/
private final Parameter m_soonExpiredTimespanDays = new IntegerParameter("com.arsdigita.cms.soon_expired_timespan_days",
Parameter.REQUIRED, new Integer(14));
private final Parameter m_soonExpiredTimespanDays = new IntegerParameter(
"com.arsdigita.cms.soon_expired_timespan_days",
Parameter.REQUIRED,
new Integer(
14));
/**
* Defines the number of months ahead that are covered in the
* 'Soon Expired' tab
*/
private final Parameter m_soonExpiredTimespanMonths = new IntegerParameter("com.arsdigita.cms.soon_expired_timespan_months",
Parameter.REQUIRED, new Integer(1));
private final Parameter m_soonExpiredTimespanMonths = new IntegerParameter(
"com.arsdigita.cms.soon_expired_timespan_months",
Parameter.REQUIRED,
new Integer(
1));
/**
* Does a redirect to the unpublished item generate not found error?
*/
private final Parameter m_unpublishedNotFound = new BooleanParameter("com.arsdigita.cms.unpublished_not_found",
Parameter.REQUIRED, new Boolean(true));
private final Parameter m_unpublishedNotFound = new BooleanParameter(
"com.arsdigita.cms.unpublished_not_found",
Parameter.REQUIRED,
new Boolean(
true));
/**
* Links created through browse interfaces should only be within the
* same subsite
*/
private final Parameter m_linksOnlyInSameSubsite = new BooleanParameter("com.arsdigita.cms.browse_links_in_same_subsite_only",
Parameter.REQUIRED, new Boolean(false));
private final Parameter m_linksOnlyInSameSubsite = new BooleanParameter(
"com.arsdigita.cms.browse_links_in_same_subsite_only",
Parameter.REQUIRED,
new Boolean(
false));
/**
* Item category step extension hook: Subclass of ItemCategoryExtension
* 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,
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
* the link otherwise display.
*/
private final Parameter m_hideResetLifecycleLink = new BooleanParameter("com.arsdigita.cms.hide_reset_lifecycle_link",
Parameter.OPTIONAL, new Boolean(true));
private final Parameter m_hideResetLifecycleLink = new BooleanParameter(
"com.arsdigita.cms.hide_reset_lifecycle_link",
Parameter.OPTIONAL,
new Boolean(
true));
/**
* 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,
Boolean.FALSE);
/**
* Title Weight, the relative weight given to title element within
* 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,
new Integer(1));
/**
@ -331,13 +405,17 @@ public final class CMSConfig extends AbstractConfig {
* within dublinCore element within cms:item element when ranking
* 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,
new Integer(1));
/**
* 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,
Boolean.TRUE);
/**
@ -349,40 +427,55 @@ public final class CMSConfig extends AbstractConfig {
* Second string is the name of the bebop step component
* 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,
null);
/**
* Mandatory Descriptions Content types may refer to this to decide
* whether to validate against empty descriptions
*/
private final Parameter m_mandatoryDescriptions = new BooleanParameter("com.arsdigita.cms.mandatory_descriptions",
Parameter.OPTIONAL, new Boolean(false));
private final Parameter m_mandatoryDescriptions = new BooleanParameter(
"com.arsdigita.cms.mandatory_descriptions",
Parameter.OPTIONAL,
new Boolean(
false));
/**
* Delete Finished Lifecycles. Decide whether lifecycles and their phases
* should be deleted from the system when finished.
*/
private final Parameter m_deleteLifecycleWhenComplete = new BooleanParameter("com.arsdigita.cms.delete_lifecycle_when_complete",
Parameter.OPTIONAL, new Boolean(false));
private final Parameter m_deleteLifecycleWhenComplete =
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
* to all items
*/
private final Parameter m_hasContactsAuthoringStep = new BooleanParameter("com.arsdigita.cms.has_contacts_authoring_step",
Parameter.REQUIRED, new Boolean(false));
private final Parameter m_hasContactsAuthoringStep = new BooleanParameter(
"com.arsdigita.cms.has_contacts_authoring_step",
Parameter.REQUIRED,
new Boolean(
false));
/**
* Ordering for nodes in assign category tree. Decide whether entries
* should be ordered alphabetically or according to sort key
* (maintained in category admin tab in content centre)
* SortKey|Alphabetical is initialized in constructor! See below.
*/
private final Parameter m_categoryTreeOrdering = new EnumerationParameter("com.arsdigita.cms.category_tree_order",
Parameter.OPTIONAL, Category.SORT_KEY);
private final Parameter m_categoryTreeOrdering =
new EnumerationParameter(
"com.arsdigita.cms.category_tree_order",
Parameter.OPTIONAL,
Category.SORT_KEY);
/**
* Allow content creation in section listing. Allows you to turn off
* 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,
new Boolean(true));
// ///////////////////////////////////////////
@ -392,26 +485,38 @@ public final class CMSConfig extends AbstractConfig {
* Delete Sent Workflow Notifications. Decide whether successfully sent
* notifications and messages should be deleted from the system
*/
private final Parameter m_deleteWorkflowNotificationsWhenSent = new BooleanParameter("com.arsdigita.cms.delete_workflow_notification_when_sent",
Parameter.OPTIONAL, new Boolean(false));
private final Parameter m_deleteWorkflowNotificationsWhenSent =
new BooleanParameter(
"com.arsdigita.cms.delete_workflow_notification_when_sent",
Parameter.OPTIONAL,
new Boolean(false));
/**
* Decide whether successfully sent notifications and messages
* should be deleted from the system
*/
private final Parameter m_deleteExpiryNotificationsWhenSent = new BooleanParameter("com.arsdigita.cms.delete_expiry_notification_when_sent",
Parameter.OPTIONAL, new Boolean(false));
private final Parameter m_deleteExpiryNotificationsWhenSent =
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
* that users in the Alert Recipient role are alerted via email
*/
private final Parameter m_defaultNotificationTime = new IntegerParameter("com.arsdigita.cms.default_notification_time",
Parameter.REQUIRED, new Integer(0));
private final Parameter m_defaultNotificationTime = new IntegerParameter(
"com.arsdigita.cms.default_notification_time",
Parameter.REQUIRED,
new Integer(
0));
/**
* Wether a content item's author should be notified
* by the item's LifecycleListener; defaults to true
*/
private final Parameter m_notifyAuthorOnLifecycle = new BooleanParameter("com.arsdigita.cms.notify_author_on_lifecycle",
Parameter.OPTIONAL, new Boolean(true));
private final Parameter m_notifyAuthorOnLifecycle = new BooleanParameter(
"com.arsdigita.cms.notify_author_on_lifecycle",
Parameter.OPTIONAL,
new Boolean(
true));
// ////////////////////////////////////////////////////
// Content Center (Workspace) config related parameters
// ////////////////////////////////////////////////////
@ -426,8 +531,10 @@ public final class CMSConfig extends AbstractConfig {
// ///////////////////////////////////////////
// Content Section config related parameters
// ///////////////////////////////////////////
private final Parameter m_defaultSection = new StringParameter("com.arsdigita.cms.default_content_section",
Parameter.REQUIRED, "content");
private final Parameter m_defaultSection = new StringParameter(
"com.arsdigita.cms.default_content_section",
Parameter.REQUIRED,
"content");
// ///////////////////////////////////////////
// Content Section creation parameters
// 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
// keep these for the default values.
// ///////////////////////////////////////////
private final Parameter m_defaultItemResolverClass = new SpecificClassParameter
("com.arsdigita.cms.default_item_resolver_class",
Parameter.REQUIRED,
MultilingualItemResolver.class,
ItemResolver.class);
private final Parameter m_defaultTemplateResolverClass = new SpecificClassParameter("com.arsdigita.cms.default_template_resolver_class",
private final Parameter m_defaultItemResolverClass =
new SpecificClassParameter(
"com.arsdigita.cms.default_item_resolver_class",
Parameter.REQUIRED,
MultilingualItemResolver.class,
ItemResolver.class);
private final Parameter m_defaultTemplateResolverClass =
new SpecificClassParameter(
"com.arsdigita.cms.default_template_resolver_class",
Parameter.REQUIRED,
DefaultTemplateResolver.class,
TemplateResolver.class);
/////////////////////////////////////////////
// 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");
/////////////////////////////////////////////
// FolderBrowse
/////////////////////////////////////////////
private final Parameter m_folderBrowseListSize = new IntegerParameter("com.arsdigita.cms.folder_browse_list_size",
Parameter.REQUIRED, 20);
private final Parameter m_folderBrowseListSize = new IntegerParameter(
"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
/////////////////////////////////////////////
private final Parameter m_folderAtoZShowLimit = new IntegerParameter("com.arsdigita.cms.folder_atoz_show_limit",
Parameter.REQUIRED, 100);
private final Parameter m_folderAtoZShowLimit = new IntegerParameter(
"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
@ -478,8 +602,10 @@ public final class CMSConfig extends AbstractConfig {
// Initialize m_categoryTreeOrdering parameter here!
// 2 valid values at the moment - enumeration used rather than boolean
// in case other possible orders are deemed valid
((EnumerationParameter) m_categoryTreeOrdering).put("SortKey", Category.SORT_KEY);
((EnumerationParameter) m_categoryTreeOrdering).put("Alphabetical", Category.NAME);
((EnumerationParameter) m_categoryTreeOrdering).put("SortKey",
Category.SORT_KEY);
((EnumerationParameter) m_categoryTreeOrdering).put("Alphabetical",
Category.NAME);
register(m_templateRootPath);
@ -523,7 +649,7 @@ public final class CMSConfig extends AbstractConfig {
register(m_categoryTreeOrdering);
register(m_hasContactsAuthoringStep);
register(m_hideTextAssetUploadFile);
register(m_allowContentCreateInSectionListing);
register(m_allowContentCreateInSectionListing);
// Content Center (Workspace) config related parameters
register(m_contentCenterMap);
@ -539,6 +665,8 @@ public final class CMSConfig extends AbstractConfig {
register(m_folderBrowseListSize);
register(m_folderAtoZShowLimit);
register(m_useOldStyleItemLifecycleItemPane);
// publishToFile package related parameter
// 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 {
public DHTMLEditorConfigParameter(final String name,
final int multiplicity,
final Object defaultObj) {
final int multiplicity,
final Object defaultObj) {
super(name, multiplicity, defaultObj);
}
@ -739,7 +867,8 @@ public final class CMSConfig extends AbstractConfig {
protected static HashMap extraXMLGenerators = new HashMap();
/** 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);
if (gens == null) {
gens = new LinkedList();
@ -807,7 +936,8 @@ public final class CMSConfig extends AbstractConfig {
* @return
*/
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) {
// populate static map once based on config parameter value
s_log.debug("loading skipsteps");
@ -819,8 +949,10 @@ public final class CMSConfig extends AbstractConfig {
for (int i = 0; i < skipSteps.length; i++) {
String[] pair = StringUtils.split(skipSteps[i], ':');
// 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]);
Collection typeSteps = (Collection) s_skipAssetSteps.get(pair[0]);
s_log.debug("parameter read - type = " + pair[0]
+ " - step = " + pair[1]);
Collection typeSteps =
(Collection) s_skipAssetSteps.get(pair[0]);
if (typeSteps == null) {
typeSteps = new HashSet();
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) {
s_log.debug("no steps to skip");
skipSteps = new HashSet();
@ -884,7 +1017,8 @@ public final class CMSConfig extends AbstractConfig {
*
*/
public boolean deleteWorkflowNotifications() {
return ((Boolean) get(m_deleteWorkflowNotificationsWhenSent)).booleanValue();
return ((Boolean) get(m_deleteWorkflowNotificationsWhenSent)).
booleanValue();
}
public String getCategoryTreeOrder() {
@ -910,7 +1044,8 @@ public final class CMSConfig extends AbstractConfig {
}
public final boolean getAllowContentCreateInSectionListing() {
return ((Boolean) get(m_allowContentCreateInSectionListing)).booleanValue();
return ((Boolean) get(m_allowContentCreateInSectionListing)).
booleanValue();
}
public String getItemSearchDefaultTab() {
@ -924,4 +1059,8 @@ public final class CMSConfig extends AbstractConfig {
public Integer getFolderAtoZShowLimit() {
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.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.purpose=
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.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.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.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.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.same_as_person=
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.same_as_person=
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;
import com.arsdigita.bebop.FormProcessException;
import com.arsdigita.bebop.event.FormSectionEvent;
import java.text.DateFormat;
import org.apache.log4j.Logger;
import com.arsdigita.bebop.ActionLink;
import com.arsdigita.bebop.BoxPanel;
import com.arsdigita.bebop.Component;
import com.arsdigita.bebop.Form;
import com.arsdigita.bebop.FormData;
import com.arsdigita.bebop.Label;
import com.arsdigita.bebop.PageState;
import com.arsdigita.bebop.RequestLocal;
@ -31,6 +36,13 @@ import com.arsdigita.bebop.SimpleContainer;
import com.arsdigita.bebop.Table;
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.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.ContentSection;
import com.arsdigita.cms.SecurityManager;
@ -64,9 +76,8 @@ import com.arsdigita.xml.Element;
*/
class ItemLifecycleItemPane extends BaseItemPane {
private static final Logger s_log = Logger.getLogger
(ItemLifecycleItemPane.class);
private static final Logger s_log = Logger.getLogger(
ItemLifecycleItemPane.class);
private final ContentItemRequestLocal m_item;
private final LifecycleRequestLocal m_lifecycle;
private final SimpleContainer m_detailPane;
@ -85,45 +96,51 @@ class ItemLifecycleItemPane extends BaseItemPane {
}
private class SummarySection extends Section {
public SummarySection() {
setHeading(new Label(gz("cms.ui.lifecycle.details")));
final ActionGroup group = new ActionGroup();
setBody(group);
group.setSubject(new Properties());
group.addAction(new UnpublishLink());
group.addAction(new RepublishLink());
if (!ContentSection.getConfig().hideResetLifecycleLink()){
group.addAction(new RepublishAndResetLink());
if (CMS.getConfig().getUseOldStyleItemLifecycleItemPane()) {
group.setSubject(new Properties());
group.addAction(new UnpublishLink());
group.addAction(new RepublishLink());
if (!ContentSection.getConfig().hideResetLifecycleLink()) {
group.addAction(new RepublishAndResetLink());
}
} else {
group.addAction(new ActionForm());
}
}
private class Properties extends PropertyList {
protected final java.util.List properties(final PageState state) {
final java.util.List props = super.properties(state);
final Lifecycle cycle = m_lifecycle.getLifecycle(state);
final DateFormat format = DateFormat.getDateTimeInstance
(DateFormat.FULL,
ContentSection.getConfig().getHideTimezone() ? DateFormat.SHORT : DateFormat.FULL);
final DateFormat format =
DateFormat.getDateTimeInstance(DateFormat.FULL,
ContentSection.
getConfig().getHideTimezone() ? DateFormat.SHORT
: DateFormat.FULL);
props.add(new Property(gz("cms.ui.name"),
cycle.getLabel()));
props.add(new Property
(gz("cms.ui.item.lifecycle.start_date"),
format.format(cycle.getStartDate())));
props.add(new Property(gz("cms.ui.item.lifecycle.start_date"),
format.format(cycle.getStartDate())));
final java.util.Date endDate = cycle.getEndDate();
if (endDate == null) {
props.add(new Property
(gz("cms.ui.item.lifecycle.end_date"),
lz("cms.ui.none")));
props.add(new Property(gz("cms.ui.item.lifecycle.end_date"),
lz("cms.ui.none")));
} else {
props.add(new Property
(gz("cms.ui.item.lifecycle.end_date"),
format.format(endDate)));
props.add(new Property(gz("cms.ui.item.lifecycle.end_date"),
format.format(endDate)));
}
return props;
@ -132,9 +149,12 @@ class ItemLifecycleItemPane extends BaseItemPane {
}
private class PublishLink extends ActionLink {
private RequestLocal m_canPublish = new RequestLocal();
PublishLink(Component c) { super(c); }
PublishLink(Component c) {
super(c);
}
public void generateXML(PageState ps, Element parent) {
Boolean canPublish = (Boolean) m_canPublish.get(ps);
@ -155,18 +175,19 @@ class ItemLifecycleItemPane extends BaseItemPane {
if (canPublish.booleanValue()) {
if (s_log.isDebugEnabled()) {
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);
} else if (s_log.isDebugEnabled()) {
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 {
UnpublishLink() {
super(new Label(gz("cms.ui.item.lifecycle.unpublish")));
@ -174,15 +195,16 @@ class ItemLifecycleItemPane extends BaseItemPane {
}
private class Listener implements ActionListener {
public final void actionPerformed(final ActionEvent e) {
final PageState state = e.getPageState();
final ContentItem item = m_item.getContentItem(state);
item.unpublish();
final String target = URL.getDispatcherPath() +
ContentItemPage.getItemURL(item,
ContentItemPage.AUTHORING_TAB);
final String target = URL.getDispatcherPath() + ContentItemPage.
getItemURL(item,
ContentItemPage.AUTHORING_TAB);
throw new RedirectSignal(target, true);
}
@ -193,14 +215,15 @@ class ItemLifecycleItemPane extends BaseItemPane {
item.republish(reset);
Workflow workflow = Workflow.getObjectWorkflow(item);
try {
ItemLifecycleSelectForm.finish(workflow, item, Web
.getContext().getUser());
ItemLifecycleSelectForm.finish(workflow, item, Web.getContext().
getUser());
} catch (TaskException te) {
throw new UncheckedWrapperException(te);
}
}
private class RepublishLink extends PublishLink {
RepublishLink() {
super(new Label(gz("cms.ui.item.lifecycle.republish")));
@ -208,20 +231,23 @@ class ItemLifecycleItemPane extends BaseItemPane {
}
private class Listener implements ActionListener {
public final void actionPerformed(final ActionEvent e) {
final PageState state = e.getPageState();
final ContentItem item = m_item.getContentItem(state);
republish(item, false);
if (ContentSection.getConfig().getUseStreamlinedCreation()) {
throw new RedirectSignal(URL.there(state.getRequest(),
Utilities.getWorkspaceURL()), true);
throw new RedirectSignal(
URL.there(state.getRequest(),
Utilities.getWorkspaceURL()), true);
}
}
}
}
private class RepublishAndResetLink extends PublishLink {
RepublishAndResetLink() {
super(new Label(gz("cms.ui.item.lifecycle.republish_and_reset")));
@ -233,20 +259,23 @@ class ItemLifecycleItemPane extends BaseItemPane {
}
private class Listener implements ActionListener {
public final void actionPerformed(final ActionEvent e) {
final PageState state = e.getPageState();
final ContentItem item = m_item.getContentItem(state);
republish(item, true);
if (ContentSection.getConfig().getUseStreamlinedCreation()) {
throw new RedirectSignal(URL.there(state.getRequest(),
Utilities.getWorkspaceURL()), true);
throw new RedirectSignal(
URL.there(state.getRequest(),
Utilities.getWorkspaceURL()), true);
}
}
}
}
private class PhaseSection extends Section {
PhaseSection() {
super(gz("cms.ui.lifecycle.phases"));
@ -258,14 +287,108 @@ class ItemLifecycleItemPane extends BaseItemPane {
}
private class PhaseTable extends Table {
PhaseTable() {
super(new ItemPhaseTableModelBuilder(m_lifecycle),
new String[] {
lz("cms.ui.name"),
lz("cms.ui.description"),
lz("cms.ui.item.lifecycle.start_date"),
lz("cms.ui.item.lifecycle.end_date")
});
new String[]{
lz("cms.ui.name"),
lz("cms.ui.description"),
lz("cms.ui.item.lifecycle.start_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.Runtime=INFO
log4j.logger.com.arsdigita.bundle.Loader=INFO
# For seeing progress of the 'ccm load' command
log4j.logger.com.arsdigita.packaging.Loader=INFO
# log4j.logger.com.arsdigita.core.Loader=INFO