diff --git a/ccm-aap-aplaws/CHANGE_LOG b/ccm-aap-aplaws/CHANGE_LOG new file mode 100644 index 000000000..c17adc606 --- /dev/null +++ b/ccm-aap-aplaws/CHANGE_LOG @@ -0,0 +1,6 @@ +2007-08-06: +./ccm-aap-aplaws/src/WEB-INF/content-types/c...types/aplaws-mparticle-item.jsp + + + + + + + + + + + + + + + + + + + + + + + + + Service module which tailors the aplaws software to a specific purpose + and/or a specific site. + - setting up a categorization / terms system (cf. load.java) + - integrate custom spezific jsp's + - setting up custom specific configuration parameters (cf. the bundles) + - overwrite default classes by custom specific ones (cf. src/.../aplaws) + - provide a default theme, which meets accessibility requirements and + overwrites the default, table based design (cf. web/.../themes) + + This modules tailors APLAWS for use at the "Akademie fuer Arbeit und Politik", + University of Bremen, Germany. + + APLAWS is a collaboration and content management system which is based upon + the Red Hat Web Application Framework, which is a platform for writing + database-backed web applications in Java. + + diff --git a/ccm-aap-aplaws/bundles/devel/AUTHORS b/ccm-aap-aplaws/bundles/devel/AUTHORS new file mode 100644 index 000000000..e69de29bb diff --git a/ccm-aap-aplaws/bundles/devel/ChangeLog b/ccm-aap-aplaws/bundles/devel/ChangeLog new file mode 100644 index 000000000..786623bdb --- /dev/null +++ b/ccm-aap-aplaws/bundles/devel/ChangeLog @@ -0,0 +1,9 @@ +* Thu Sep 22 2005 Alan Pevec +- Build all APLAWS+ bundles from the common set of templates. + +* Mon Feb 21 2005 Alan Pevec +- Requires applications. + +* Mon Jan 26 2004 Daniel Berrange +- Initial build. + diff --git a/ccm-aap-aplaws/bundles/devel/NEWS b/ccm-aap-aplaws/bundles/devel/NEWS new file mode 100644 index 000000000..e69de29bb diff --git a/ccm-aap-aplaws/bundles/devel/README b/ccm-aap-aplaws/bundles/devel/README new file mode 100644 index 000000000..e69de29bb diff --git a/ccm-aap-aplaws/bundles/devel/bundle.in b/ccm-aap-aplaws/bundles/devel/bundle.in new file mode 100644 index 000000000..5e469a349 --- /dev/null +++ b/ccm-aap-aplaws/bundles/devel/bundle.in @@ -0,0 +1,4 @@ +BUNDLE_NAME=aplaws-plus-zes-devel +BUNDLE_PRETTY_NAME="APLAWS+ ZeS Devel Bundle" +VERSION=1.0.5devel +RELEASE=1 diff --git a/ccm-aap-aplaws/bundles/devel/cfg/applications.cfg b/ccm-aap-aplaws/bundles/devel/cfg/applications.cfg new file mode 100644 index 000000000..65fb461ef --- /dev/null +++ b/ccm-aap-aplaws/bundles/devel/cfg/applications.cfg @@ -0,0 +1,78 @@ +# Main apps +ccm-core +ccm-cms + +# Content assets +ccm-cms-assets-fileattachment +ccm-cms-assets-notes +ccm-cms-assets-relatedlink + +# Content types +ccm-cms-types-address +# -- ccm-cms-types-agenda +ccm-cms-types-article +ccm-cms-types-bookmark +ccm-cms-types-contact +# -- ccm-cms-types-esdservice +ccm-cms-types-event +# -- faqitem koennte bei zes auch entfallen +# 2008-06-07 auskommentiert, ist in Produktionssystem +# nicht enthalten und nicht anwählbar. +# -- ccm-cms-types-faqitem +ccm-cms-types-filestorageitem +ccm-cms-types-formitem +ccm-cms-types-formsectionitem +# -- glossaryitem koennte bei zes auch entfallen +# 2008-06-07 auskommentiert, ist in Produktionssystem +# nicht enthalten und nicht anwählbar. +# -- ccm-cms-types-glossaryitem +# -- ccm-cms-types-htmlform +# -- ccm-cms-types-inlinesite +# -- ccm-cms-types-job +# -- ccm-cms-types-legalnotice +# -- ccm-cms-types-minutes +# -- ccm-cms-types-motditem +ccm-cms-types-mparticle +ccm-cms-types-newsitem +# -- ccm-cms-types-organization +# -- ccm-cms-types-pressrelease +# -- ccm-cms-types-service +ccm-cms-types-siteproxy +# -- xmlfeed wird moeglicherweise ebenfalls nicht gebraucht +# -- ccm-cms-types-xmlfeed + + +# Applications +# ------------ +# -- ccm-auth-http +# -- ccm-bookmarks +# -- ccm-docmngr ## temp., produces errors in build +# -- ccm-formbuilder-pdf +ccm-forum +# -- ccm-simplesurvey +ccm-user-preferences +# -- ccm-weblog +# -- ccm-webpage + +# ldn extensions +# -------------- +# -- ccm-ldn-aplaws +# -- ccm-ldn-atoz +# -- ccm-ldn-dublin +# -- ccm-ldn-exporter +# -- ccm-ldn-freeform +ccm-ldn-image-step +# -- ccm-ldn-importer +ccm-ldn-navigation +ccm-ldn-portal +ccm-ldn-rss +ccm-ldn-search +ccm-ldn-shortcuts +ccm-ldn-subsite +ccm-ldn-terms +ccm-ldn-theme +ccm-ldn-util + +# aap extensions +ccm-aap-aplaws + diff --git a/ccm-aap-aplaws/bundles/devel/cfg/integration.properties b/ccm-aap-aplaws/bundles/devel/cfg/integration.properties new file mode 100644 index 000000000..9f5602602 --- /dev/null +++ b/ccm-aap-aplaws/bundles/devel/cfg/integration.properties @@ -0,0 +1,113 @@ +waf.bebop.base_page=com.arsdigita.aplaws.ui.SimplePage +; dhtml editor to use (system wide) +waf.bebop.dhtml_editor=FCKeditor + +waf.categorization.show_internal_name=true +waf.categorization.supported_languages=de,en + +waf.dispatcher.default_expiry=3600 +; +waf.kernel.data_permission_check_enabled=false +waf.kernel.primary_user_identifier=email +; if you activate screen_name, forum loader doesn't work. +; waf.kernel.primary_user_identifier=screen_name + +; security.properties: +waf.auto_registration_on=false +waf.pagemap.root=navigation/ +waf.pagemap.workspace=navigation/ +waf.pagemap.login_redirect=content/content-center-redirect.jsp + +; Searches for localized style sheet (among others) +waf.templating.stylesheet_resolver=com.arsdigita.templating.PatternStylesheetResolver +waf.templating.stylesheet_paths=/WEB-INF/resources/aplaws-stylesheet-paths.txt + +; Configures the xml processing +waf.xml.xsl_transformer=xalan +waf.xml.activate_full_date_formatter=true + +com.arsdigita.cms.category_authoring_add_form=com.arsdigita.aplaws.ui.ItemCategoryPicker + +com.arsdigita.cms.default_item_template_path=/default/aplaws-item.jsp +com.arsdigita.cms.default_folder_template_path=/default/aplaws-folder.jsp +com.arsdigita.cms.default_template_resolver_class=com.arsdigita.london.subsite.dispatcher.SubsiteItemTemplateResolver + +; Configure dhtml editor for use in cms content-center +com.arsdigita.cms.dhtml_editor_config=FCKEditor.Config.StyleDefault?,/assets/fckeditor/config/fckconfigOpenCCM.js +com.arsdigita.cms.dhtml_editor_hidden_buttons= +; com.arsdigita.cms.dhtml_editor_plugins=TableOperations,CSS +com.arsdigita.cms.dhtml_editor_plugins= + +com.arsdigita.cms.disable_item_pfs=true + +com.arsdigita.cms.hide_admin_tabs=true +com.arsdigita.cms.hide_folder_index_checkbox=true +com.arsdigita.cms.hide_launch_date=true +com.arsdigita.cms.hide_templates_tab=true +com.arsdigita.cms.hide_timezone=true +com.arsdigita.cms.hide_udct_ui=true + +com.arsdigita.cms.use_section_categories=false +com.arsdigita.cms.use_streamlined_creation=true + + +com.arsdigita.cms.contenttypes.event.hide_cost=true +com.arsdigita.cms.contenttypes.event.hide_date_description=false +com.arsdigita.cms.contenttypes.event.hide_event_type=true +com.arsdigita.cms.contenttypes.event.hide_link_to_map=true +com.arsdigita.cms.contenttypes.event.hide_main_contributor=true +com.arsdigita.cms.contenttypes.event.use_html_date_description=false + + +com.arsdigita.cms.contenttypes.newsitem.hide_homepage=true + +com.arsdigita.cms.contenttypes.mparticle.template=/WEB-INF/content-types/com/arsdigita/cms/contenttypes/aplaws-mparticle-item.jsp + +com.arsdigita.cms.contenttypes.siteproxy.defaulttemplate=/WEB-INF/content-types/com/arsdigita/cms/contenttypes/aplaws-siteproxy-item.jsp + +; Forum application +com.arsdigita.forum.show_new_tabs=true +com.arsdigita.forum.use_wysiwyg_editor=true +com.arsdigita.forum.allow_quick_finish=true +com.arsdigita.forum.disable_page_caching=true + +; atoz currently not in use +; com.arsdigita.london.atoz.root_category_picker=com.arsdigita.london.terms.ui.RootCategoryPicker + +; com.arsdigita.london.navigation.category_menu_show_grand_children_min=1 +; com.arsdigita.london.navigation.category_menu_show_grand_children=adaptive +; com.arsdigita.london.navigation.category_menu_show_grand_children_limit=1 +; com.arsdigita.london.navigation.category_menu_show_grand_children_max=65536 +com.arsdigita.london.navigation.category_menu_show_grand_children=false +; com.arsdigita.london.navigation.category_menu_show_nephews=false +com.arsdigita.london.navigation.default_cat_root_path=/navigation/ +com.arsdigita.london.navigation.default_template=/packages/navigation/templates/aap-default.jsp + +com.arsdigita.london.search.show_sponsored_links=true + +com.arsdigita.london.subsite.root_category_picker=com.arsdigita.london.terms.ui.RootCategoryPicker + +com.arsdigita.london.theme.default_theme_context= +com.arsdigita.london.theme.default_theme_manifest=ccm-ldn-theme.web.mf +com.arsdigita.london.theme.default_theme_path=__ccm__/themes/aplaws-generic +com.arsdigita.london.theme.file_extensions=bmp gif jpeg jpg png css js png xsl xml + + +; ============================================================================================= +; devel specific configurations +waf.runtime.jdbc_url=jdbc\:postgresql\://localhost/aap?user\=aap&password\=aap47web +waf.runtime.jdbc_pool_size=80 + +waf.web.server=localhost\:8080 + +waf.admin.email=webmaster@aap.uni-bremen.de +waf.admin.name.given=AAP +waf.admin.name.family=Administrator +waf.admin.password=nge2015 +waf.admin.password.question=12345 +waf.admin.password.answer=6 + +; waf.debug in is kernel.properties, should be renamed waf.kernel.debug +waf.debug=true +waf.bebop.fancy_xsl_errors=true + diff --git a/ccm-aap-aplaws/bundles/devel/cfg/web.xml b/ccm-aap-aplaws/bundles/devel/cfg/web.xml new file mode 100644 index 000000000..9068fd468 --- /dev/null +++ b/ccm-aap-aplaws/bundles/devel/cfg/web.xml @@ -0,0 +1,561 @@ + + + + + CCM AAP + Content and Collaboration Management + + + + log4j-conf-file + WEB-INF/conf/log4j.properties + + + + + + + + shortcuts + com.arsdigita.london.shortcuts.ShortcutFilter + + + + subsite + com.arsdigita.london.subsite.SubsiteFilter + + + + + + subsite + /ccm/* + + + + + shortcuts + /* + + + + + com.arsdigita.web.CCMApplicationContextListener + + + + + + reg + com.arsdigita.web.ContextRegistrationServlet + + uri + / + + 1 + + + + legacy-dispatcher + com.arsdigita.sitenode.SiteNodeDispatcher + 3 + + + + ccm-dispatcher + com.arsdigita.web.DispatcherServlet + + fallback-servlet + legacy-dispatcher + + 2 + + + + legacy-adapter + com.arsdigita.web.LegacyAdapterServlet + + + + cache-manager + com.arsdigita.caching.CacheServlet + + + + db-test + com.arsdigita.web.monitoring.DBTestServlet + + + + versioning-log + com.arsdigita.versioning.VersioningServlet + + + + oid-redirect + com.arsdigita.web.OIDRedirectServlet + + + + resource-resolver + com.arsdigita.web.ResourceServlet + + + + + + content-section + com.arsdigita.cms.ContentSectionServlet + + + + content-type-xsl + com.arsdigita.cms.dispatcher.ContentTypeXSLServlet + + + + content-item-xsl + com.arsdigita.cms.dispatcher.ContentItemXSLServlet + + + + template-xsl + com.arsdigita.cms.dispatcher.TemplateXSLServlet + + + + TextOnlyServlet + Text Only Servlet + + com.arsdigita.web.InternalPrefixerServlet + + + prefix + /text + + + + + PrintFriendlyServlet + Printer Friendly Output Servlet + + com.arsdigita.web.InternalPrefixerServlet + + + prefix + /print + + + + + + + + + + forum-main + com.arsdigita.forum.ForumServlet + + + + + portal-files + com.arsdigita.web.ApplicationFileServlet + + template-path + /templates/ccm-ldn-portal + + + + + navigation-files + com.arsdigita.web.ApplicationFileServlet + + template-path + /templates/ccm-ldn-navigation + + + file-resolver + com.arsdigita.london.navigation.NavigationFileResolver + + + + + portlet-type-xsl + com.arsdigita.dispatcher.PortletTypeXSLServlet + + + + + rss-files + com.arsdigita.web.ApplicationFileServlet + + template-path + /templates/ccm-ldn-rss + + + file-resolver + com.arsdigita.london.rss.RSSFileResolver + + + + + + + worker + com.arsdigita.london.search.SearchWorkerServlet + 4 + + + + search-files + com.arsdigita.web.ApplicationFileServlet + + template-path + /templates/ccm-ldn-search + + + + + AxisServlet + Apache-Axis Servlet + + org.apache.axis.transport.http.AxisServlet + + + + + + + shortcuts-files + com.arsdigita.web.ApplicationFileServlet + + template-path + /templates/ccm-ldn-shortcuts + + + + + + subsite-files + com.arsdigita.web.ApplicationFileServlet + + template-path + /templates/ccm-ldn-subsite + + + + + + + terms-files + com.arsdigita.web.ApplicationFileServlet + + template-path + /templates/ccm-ldn-terms + + + + + + + theme-files + com.arsdigita.web.ApplicationFileServlet + + template-path + /templates/ccm-ldn-theme + + + + + ThemeDownload + com.arsdigita.london.theme.dispatcher.ThemeDownloadServlet + + + + ThemePreviewServlet + Servlet to allow admins to preview look/feel + + com.arsdigita.london.theme.dispatcher.InternalThemePrefixerServlet + + + prefix + /theme + + + + + + + + + + + forum-main + /forum-main/main/* + + + + + portlet-type-xsl + /__ccm__/servlet/portlet-type/* + + + + portal-files + /ccm-ldn-portal/files/* + + + + navigation-files + /ccm-ldn-navigation/files/* + + + + + rss-files + /ccm-ldn-rss/files/* + + + + + search-files + /ccm-ldn-search/files/* + + + + AxisServlet + /services/* + + + + + + shortcuts-files + /ccm-ldn-shortcuts/files/* + + + + + subsite-files + /ccm-ldn-subsite/files/* + + + + + + terms-files + /ccm-ldn-terms/files/* + + + + + + theme-files + /theme-files/* + + + + ThemeDownload + /theme-files/download/* + + + + ThemePreviewServlet + /theme/* + + + + + + + + reg + /__ccm__/null/reg/* + + + + ccm-dispatcher + /ccm/* + + + + legacy-adapter + /__ccm__/servlet/legacy-adapter/* + + + + cache-manager + /expireCache/* + + + + db-test + /dbtest + + + + versioning-log + /versioning/* + + + + oid-redirect + /redirect/* + + + + resource-resolver + /resource/* + + + + + + content-section + /__ccm__/servlet/content-section/* + + + + content-item-xsl + /__ccm__/servlet/content-item/* + + + + content-type-xsl + /__ccm__/servlet/content-type/* + + + + template-xsl + /__ccm__/servlet/template/* + + + + TextOnlyServlet + /text/* + + + + PrintFriendlyServlet + /print/* + + + + + + com.arsdigita.dispatcher.AccessDeniedException + /error/access-denied.jsp + + + + com.arsdigita.dispatcher.ObjectNotFoundException + /error/object-not-found.jsp + + + + com.arsdigita.kernel.permissions.PermissionException + /error/permission-denied.jsp + + + + com.arsdigita.persistence.DbNotAvailableException + /error/db-not-available.jsp + + + + com.arsdigita.db.DbNotAvailableException + /error/db-not-available.jsp + + + + java.lang.Exception + /error/general.jsp + + + + java.lang.Error + /error/general.jsp + + + + + + /WEB-INF/bebop-show.tld + /WEB-INF/bebop-show.tld + + + + /WEB-INF/bebop-define.tld + /WEB-INF/bebop-define.tld + + + diff --git a/ccm-aap-aplaws/bundles/devel/cfg/web.xml.woSearch b/ccm-aap-aplaws/bundles/devel/cfg/web.xml.woSearch new file mode 100644 index 000000000..e6a7b26a3 --- /dev/null +++ b/ccm-aap-aplaws/bundles/devel/cfg/web.xml.woSearch @@ -0,0 +1,564 @@ + + + + + CCM AAP + Content and Collaboration Management + + + + log4j-conf-file + WEB-INF/conf/log4j.properties + + + + + + + + shortcuts + com.arsdigita.london.shortcuts.ShortcutFilter + + + + subsite + com.arsdigita.london.subsite.SubsiteFilter + + + + + + subsite + /ccm/* + + + + + shortcuts + /* + + + + + com.arsdigita.web.CCMApplicationContextListener + + + + + + reg + com.arsdigita.web.ContextRegistrationServlet + + uri + / + + 1 + + + + legacy-dispatcher + com.arsdigita.sitenode.SiteNodeDispatcher + 3 + + + + ccm-dispatcher + com.arsdigita.web.DispatcherServlet + + fallback-servlet + legacy-dispatcher + + 2 + + + + legacy-adapter + com.arsdigita.web.LegacyAdapterServlet + + + + cache-manager + com.arsdigita.caching.CacheServlet + + + + db-test + com.arsdigita.web.monitoring.DBTestServlet + + + + versioning-log + com.arsdigita.versioning.VersioningServlet + + + + oid-redirect + com.arsdigita.web.OIDRedirectServlet + + + + resource-resolver + com.arsdigita.web.ResourceServlet + + + + + + content-section + com.arsdigita.cms.ContentSectionServlet + + + + content-type-xsl + com.arsdigita.cms.dispatcher.ContentTypeXSLServlet + + + + content-item-xsl + com.arsdigita.cms.dispatcher.ContentItemXSLServlet + + + + template-xsl + com.arsdigita.cms.dispatcher.TemplateXSLServlet + + + + TextOnlyServlet + Text Only Servlet + + com.arsdigita.web.InternalPrefixerServlet + + + prefix + /text + + + + + PrintFriendlyServlet + Printer Friendly Output Servlet + + com.arsdigita.web.InternalPrefixerServlet + + + prefix + /print + + + + + + + + + + forum-main + com.arsdigita.forum.ForumServlet + + + + + portal-files + com.arsdigita.web.ApplicationFileServlet + + template-path + /templates/ccm-ldn-portal + + + + + navigation-files + com.arsdigita.web.ApplicationFileServlet + + template-path + /templates/ccm-ldn-navigation + + + file-resolver + com.arsdigita.london.navigation.NavigationFileResolver + + + + + portlet-type-xsl + com.arsdigita.dispatcher.PortletTypeXSLServlet + + + + + rss-files + com.arsdigita.web.ApplicationFileServlet + + template-path + /templates/ccm-ldn-rss + + + file-resolver + com.arsdigita.london.rss.RSSFileResolver + + + + + + + + + + + shortcuts-files + com.arsdigita.web.ApplicationFileServlet + + template-path + /templates/ccm-ldn-shortcuts + + + + + + subsite-files + com.arsdigita.web.ApplicationFileServlet + + template-path + /templates/ccm-ldn-subsite + + + + + + + terms-files + com.arsdigita.web.ApplicationFileServlet + + template-path + /templates/ccm-ldn-terms + + + + + + + theme-files + com.arsdigita.web.ApplicationFileServlet + + template-path + /templates/ccm-ldn-theme + + + + + ThemeDownload + com.arsdigita.london.theme.dispatcher.ThemeDownloadServlet + + + + ThemePreviewServlet + Servlet to allow admins to preview look/feel + + com.arsdigita.london.theme.dispatcher.InternalThemePrefixerServlet + + + prefix + /theme + + + + + + + + + + + forum-main + /forum-main/main/* + + + + + portlet-type-xsl + /__ccm__/servlet/portlet-type/* + + + + portal-files + /ccm-ldn-portal/files/* + + + + navigation-files + /ccm-ldn-navigation/files/* + + + + + rss-files + /ccm-ldn-rss/files/* + + + + + + + shortcuts-files + /ccm-ldn-shortcuts/files/* + + + + + subsite-files + /ccm-ldn-subsite/files/* + + + + + + terms-files + /ccm-ldn-terms/files/* + + + + + + theme-files + /theme-files/* + + + + ThemeDownload + /theme-files/download/* + + + + ThemePreviewServlet + /theme/* + + + + + + + + reg + /__ccm__/null/reg/* + + + + ccm-dispatcher + /ccm/* + + + + legacy-adapter + /__ccm__/servlet/legacy-adapter/* + + + + cache-manager + /expireCache/* + + + + db-test + /dbtest + + + + versioning-log + /versioning/* + + + + oid-redirect + /redirect/* + + + + resource-resolver + /resource/* + + + + + + content-section + /__ccm__/servlet/content-section/* + + + + content-item-xsl + /__ccm__/servlet/content-item/* + + + + content-type-xsl + /__ccm__/servlet/content-type/* + + + + template-xsl + /__ccm__/servlet/template/* + + + + TextOnlyServlet + /text/* + + + + PrintFriendlyServlet + /print/* + + + + + + com.arsdigita.dispatcher.AccessDeniedException + /error/access-denied.jsp + + + + com.arsdigita.dispatcher.ObjectNotFoundException + /error/object-not-found.jsp + + + + com.arsdigita.kernel.permissions.PermissionException + /error/permission-denied.jsp + + + + com.arsdigita.persistence.DbNotAvailableException + /error/db-not-available.jsp + + + + com.arsdigita.db.DbNotAvailableException + /error/db-not-available.jsp + + + + java.lang.Exception + /error/general.jsp + + + + java.lang.Error + /error/general.jsp + + + + + + /WEB-INF/bebop-show.tld + /WEB-INF/bebop-show.tld + + + + /WEB-INF/bebop-define.tld + /WEB-INF/bebop-define.tld + + + diff --git a/ccm-aap-aplaws/bundles/standard/AUTHORS b/ccm-aap-aplaws/bundles/standard/AUTHORS new file mode 100644 index 000000000..e69de29bb diff --git a/ccm-aap-aplaws/bundles/standard/ChangeLog b/ccm-aap-aplaws/bundles/standard/ChangeLog new file mode 100644 index 000000000..786623bdb --- /dev/null +++ b/ccm-aap-aplaws/bundles/standard/ChangeLog @@ -0,0 +1,9 @@ +* Thu Sep 22 2005 Alan Pevec +- Build all APLAWS+ bundles from the common set of templates. + +* Mon Feb 21 2005 Alan Pevec +- Requires applications. + +* Mon Jan 26 2004 Daniel Berrange +- Initial build. + diff --git a/ccm-aap-aplaws/bundles/standard/NEWS b/ccm-aap-aplaws/bundles/standard/NEWS new file mode 100644 index 000000000..e69de29bb diff --git a/ccm-aap-aplaws/bundles/standard/README b/ccm-aap-aplaws/bundles/standard/README new file mode 100644 index 000000000..e69de29bb diff --git a/ccm-aap-aplaws/bundles/standard/bundle.in b/ccm-aap-aplaws/bundles/standard/bundle.in new file mode 100644 index 000000000..0bed0eda7 --- /dev/null +++ b/ccm-aap-aplaws/bundles/standard/bundle.in @@ -0,0 +1,4 @@ +BUNDLE_NAME=aplaws-plus-shp +BUNDLE_PRETTY_NAME="APLAWS+ SHP Standard Bundle" +VERSION=1.0.5devel +RELEASE=1 diff --git a/ccm-aap-aplaws/etc/servlet-declarations.xml b/ccm-aap-aplaws/etc/servlet-declarations.xml new file mode 100644 index 000000000..1093f614a --- /dev/null +++ b/ccm-aap-aplaws/etc/servlet-declarations.xml @@ -0,0 +1,23 @@ + + TextOnlyServlet + Text Only Servlet + + com.arsdigita.web.InternalPrefixerServlet + + + prefix + /text + + + + + PrintFriendlyServlet + Printer Friendly Output Servlet + + com.arsdigita.web.InternalPrefixerServlet + + + prefix + /print + + diff --git a/ccm-aap-aplaws/etc/servlet-mappings.xml b/ccm-aap-aplaws/etc/servlet-mappings.xml new file mode 100644 index 000000000..54d31d105 --- /dev/null +++ b/ccm-aap-aplaws/etc/servlet-mappings.xml @@ -0,0 +1,10 @@ + + TextOnlyServlet + /text/* + + + + PrintFriendlyServlet + /print/* + + diff --git a/ccm-aap-aplaws/pdl/.dummy b/ccm-aap-aplaws/pdl/.dummy new file mode 100644 index 000000000..e69de29bb diff --git a/ccm-aap-aplaws/src/WEB-INF/aplaws/aap-nav-domain-1.00.xml b/ccm-aap-aplaws/src/WEB-INF/aplaws/aap-nav-domain-1.00.xml new file mode 100644 index 000000000..befcff344 --- /dev/null +++ b/ccm-aap-aplaws/src/WEB-INF/aplaws/aap-nav-domain-1.00.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ccm-aap-aplaws/src/WEB-INF/aplaws/aap-nav-hierarchy-1.00.xml b/ccm-aap-aplaws/src/WEB-INF/aplaws/aap-nav-hierarchy-1.00.xml new file mode 100644 index 000000000..720a228ba --- /dev/null +++ b/ccm-aap-aplaws/src/WEB-INF/aplaws/aap-nav-hierarchy-1.00.xml @@ -0,0 +1,327 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ccm-aap-aplaws/src/WEB-INF/aplaws/xample-nav-domain.xml b/ccm-aap-aplaws/src/WEB-INF/aplaws/xample-nav-domain.xml new file mode 100644 index 000000000..87ee0c8c2 --- /dev/null +++ b/ccm-aap-aplaws/src/WEB-INF/aplaws/xample-nav-domain.xml @@ -0,0 +1,151 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ccm-aap-aplaws/src/WEB-INF/aplaws/xample-nav-hierarchy.xml b/ccm-aap-aplaws/src/WEB-INF/aplaws/xample-nav-hierarchy.xml new file mode 100644 index 000000000..ed6c7c16b --- /dev/null +++ b/ccm-aap-aplaws/src/WEB-INF/aplaws/xample-nav-hierarchy.xml @@ -0,0 +1,1034 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ccm-aap-aplaws/src/WEB-INF/aplaws/xample-nav-mapping-lgcl-anav.xml b/ccm-aap-aplaws/src/WEB-INF/aplaws/xample-nav-mapping-lgcl-anav.xml new file mode 100644 index 000000000..b983bd2d7 --- /dev/null +++ b/ccm-aap-aplaws/src/WEB-INF/aplaws/xample-nav-mapping-lgcl-anav.xml @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ccm-aap-aplaws/src/WEB-INF/aplaws/xample-nav-mapping-lgcl-anav.xsl b/ccm-aap-aplaws/src/WEB-INF/aplaws/xample-nav-mapping-lgcl-anav.xsl new file mode 100644 index 000000000..34b25d21e --- /dev/null +++ b/ccm-aap-aplaws/src/WEB-INF/aplaws/xample-nav-mapping-lgcl-anav.xsl @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ccm-aap-aplaws/src/WEB-INF/aplaws/zes-nav-domain-1.00.xml~ b/ccm-aap-aplaws/src/WEB-INF/aplaws/zes-nav-domain-1.00.xml~ new file mode 100644 index 000000000..7ab60bee2 --- /dev/null +++ b/ccm-aap-aplaws/src/WEB-INF/aplaws/zes-nav-domain-1.00.xml~ @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ccm-aap-aplaws/src/WEB-INF/aplaws/zes-nav-hierarchy-1.00.xml~ b/ccm-aap-aplaws/src/WEB-INF/aplaws/zes-nav-hierarchy-1.00.xml~ new file mode 100644 index 000000000..85e926879 --- /dev/null +++ b/ccm-aap-aplaws/src/WEB-INF/aplaws/zes-nav-hierarchy-1.00.xml~ @@ -0,0 +1,244 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ccm-aap-aplaws/src/WEB-INF/content-types/com/arsdigita/cms/contenttypes/aplaws-mparticle-item.jsp b/ccm-aap-aplaws/src/WEB-INF/content-types/com/arsdigita/cms/contenttypes/aplaws-mparticle-item.jsp new file mode 100644 index 000000000..b32819af7 --- /dev/null +++ b/ccm-aap-aplaws/src/WEB-INF/content-types/com/arsdigita/cms/contenttypes/aplaws-mparticle-item.jsp @@ -0,0 +1,44 @@ + + + + + + NavigationModel model = new CMSNavigationModel(); + + + + + + + ((com.arsdigita.london.navigation.ui.category.Path)categoryPath) + .setModel(model); + + + + ((com.arsdigita.london.navigation.ui.category.Menu)categoryMenu) + .setModel(model); + + + + + + + + + + + + + diff --git a/ccm-aap-aplaws/src/WEB-INF/content-types/com/arsdigita/cms/contenttypes/aplaws-siteproxy-item.jsp b/ccm-aap-aplaws/src/WEB-INF/content-types/com/arsdigita/cms/contenttypes/aplaws-siteproxy-item.jsp new file mode 100644 index 000000000..c3b18a227 --- /dev/null +++ b/ccm-aap-aplaws/src/WEB-INF/content-types/com/arsdigita/cms/contenttypes/aplaws-siteproxy-item.jsp @@ -0,0 +1,44 @@ + + + + + + NavigationModel model = new CMSNavigationModel(); + + + + + + + ((com.arsdigita.london.navigation.ui.category.Path)categoryPath) + .setModel(model); + + + + ((com.arsdigita.london.navigation.ui.category.Menu)categoryMenu) + .setModel(model); + + + + + + + + + + + + + diff --git a/ccm-aap-aplaws/src/WEB-INF/resources/aplaws-stylesheet-paths.txt b/ccm-aap-aplaws/src/WEB-INF/resources/aplaws-stylesheet-paths.txt new file mode 100644 index 000000000..73c1cb5bf --- /dev/null +++ b/ccm-aap-aplaws/src/WEB-INF/resources/aplaws-stylesheet-paths.txt @@ -0,0 +1,37 @@ +# -*- text -*- +# This file locates stylesheets, if you are using the +# "PatternStylesheetResolver". Please read the Javadoc for that file for +# the full story. + +# Output type is for things such as text/javascript +http://::host::/resource/::webapp::/__ccm__/apps/::application::/xsl/::url::-::outputtype::-::locale::.xsl +http://::host::/resource/::webapp::/__ccm__/apps/::application::/xsl/::url::-::outputtype::.xsl + +# Grabs custom item xsl for CMS +http://::host::/__ccm__/servlet/content-item/index.xsl?oid=::item_template_oid::&delegated=::item_delegated_url:: + +# added by Quasimodo +# Theme with single entry point (e.g Mandalay) +http://::host::/resource/::webapp::/__ccm__/::themedir::/::theme::/start.xsl + +# Theme, with optional locale & prefix +http://::host::/resource/::webapp::/__ccm__/::themedir::/::theme::/::application::-::url::-::prefix::-::locale::.xsl +http://::host::/resource/::webapp::/__ccm__/::themedir::/::theme::/::application::-::url::-::prefix::.xsl + +# Theme, with optional locale +http://::host::/resource/::webapp::/__ccm__/::themedir::/::theme::/::application::-::url::-::locale::.xsl +http://::host::/resource/::webapp::/__ccm__/::themedir::/::theme::/::application::-::url::.xsl + +# APLAWS generic default, with locale and prefix +# XXX change ROOT -> ccm-ldn-aplaws +http://::host::/resource/ROOT/__ccm__/themes/aplaws-generic/::application::-::url::-::prefix::-::locale::.xsl +http://::host::/resource/ROOT/__ccm__/themes/aplaws-generic/::application::-::url::-::prefix::.xsl + +# APLAWS generic default, with locale +# XXX change ROOT -> ccm-ldn-aplaws +http://::host::/resource/ROOT/__ccm__/themes/aplaws-generic/::application::-::url::-::locale::.xsl +http://::host::/resource/ROOT/__ccm__/themes/aplaws-generic/::application::-::url::.xsl + +# Global default, from application's own web app +http://::host::/resource/::webapp::/__ccm__/apps/::application::/xsl/::url::-::locale::.xsl +http://::host::/resource/::webapp::/__ccm__/apps/::application::/xsl/::url::.xsl diff --git a/ccm-aap-aplaws/src/ccm-aap-aplaws.config b/ccm-aap-aplaws/src/ccm-aap-aplaws.config new file mode 100644 index 000000000..b48e68f2b --- /dev/null +++ b/ccm-aap-aplaws/src/ccm-aap-aplaws.config @@ -0,0 +1,5 @@ + + + + diff --git a/ccm-aap-aplaws/src/ccm-aap-aplaws.load b/ccm-aap-aplaws/src/ccm-aap-aplaws.load new file mode 100644 index 000000000..2029fc000 --- /dev/null +++ b/ccm-aap-aplaws/src/ccm-aap-aplaws.load @@ -0,0 +1,23 @@ + + + +
+ +
+ + + + + + + + + + + + + + + diff --git a/ccm-aap-aplaws/src/com/arsdigita/aplaws/Aplaws.java b/ccm-aap-aplaws/src/com/arsdigita/aplaws/Aplaws.java new file mode 100644 index 000000000..4f6d74d7e --- /dev/null +++ b/ccm-aap-aplaws/src/com/arsdigita/aplaws/Aplaws.java @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2002-2005 Runtime Collective Ltd. All Rights Reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +package com.arsdigita.aplaws; + +import org.apache.log4j.Logger; + +public class Aplaws { + public static final String versionId = + "$Id: Aplaws.java 1297 2006-08-25 18:17:50Z apevec $"; + + private static final Logger LOG = Logger.getLogger(Aplaws.class); + + private static AplawsConfig aplawsConfig = new AplawsConfig(); + + static { + aplawsConfig.load(); + } + + public static final AplawsConfig getAplawsConfig() { + return aplawsConfig; + } +} diff --git a/ccm-aap-aplaws/src/com/arsdigita/aplaws/AplawsConfig.java b/ccm-aap-aplaws/src/com/arsdigita/aplaws/AplawsConfig.java new file mode 100644 index 000000000..f4d3db66b --- /dev/null +++ b/ccm-aap-aplaws/src/com/arsdigita/aplaws/AplawsConfig.java @@ -0,0 +1,53 @@ +/* + * Copyright (C) 2002-2005 Runtime Collective Ltd. All Rights Reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +package com.arsdigita.aplaws; + +import com.arsdigita.runtime.AbstractConfig; +import com.arsdigita.util.parameter.Parameter; +import com.arsdigita.util.parameter.BooleanParameter; +import com.arsdigita.util.parameter.StringParameter; + +/** + * AplawsConfig + * + * @version $Revision: 1.2 $ $Date: 2005/01/07 19:01:40 $ + */ + +public class AplawsConfig extends AbstractConfig { + + public final static String versionId = "$Id: AplawsConfig.java 1565 2007-04-18 16:46:14Z apevec $"; + + private final Parameter m_ajaxExpandAllBranches = new BooleanParameter( + "com.arsdigita.aplaws.ajax_expand_on_all_branches", + Parameter.OPTIONAL, + Boolean.FALSE); + + + + public AplawsConfig() { + register(m_ajaxExpandAllBranches); + loadInfo(); + } + + + + public boolean ajaxExpandAllBranches () { + return ((Boolean)get(m_ajaxExpandAllBranches)).booleanValue(); + } +} diff --git a/ccm-aap-aplaws/src/com/arsdigita/aplaws/AplawsConfig_parameter.properties b/ccm-aap-aplaws/src/com/arsdigita/aplaws/AplawsConfig_parameter.properties new file mode 100644 index 000000000..b4de56826 --- /dev/null +++ b/ccm-aap-aplaws/src/com/arsdigita/aplaws/AplawsConfig_parameter.properties @@ -0,0 +1,4 @@ +com.arsdigita.aplaws.ajax_expand_on_all_branches.title=Use Ajax on all branch expansions +com.arsdigita.aplaws.ajax_expand_on_all_branches.purpose=Use Ajax on all branches, or bring back entire subtree on expansion of top level root +com.arsdigita.aplaws.ajax_expand_on_all_branches.example=true|false +com.arsdigita.aplaws.ajax_expand_on_all_branches.format=[boolean] diff --git a/ccm-aap-aplaws/src/com/arsdigita/aplaws/Initializer.java b/ccm-aap-aplaws/src/com/arsdigita/aplaws/Initializer.java new file mode 100644 index 000000000..6f1697843 --- /dev/null +++ b/ccm-aap-aplaws/src/com/arsdigita/aplaws/Initializer.java @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2001-2004 Red Hat Inc. All Rights Reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +package com.arsdigita.aplaws; + +import com.arsdigita.categorization.Categorization; +import com.arsdigita.london.terms.TermCategoryListener; +import com.arsdigita.runtime.CompoundInitializer; +import com.arsdigita.runtime.DomainInitEvent; +import org.apache.log4j.Logger; + +import com.arsdigita.templating.PatternStylesheetResolver; + +/** + * The APLAWS initializer. + * + * @version $Id: Initializer.java 1232 2006-06-22 12:01:30Z sskracic $ + */ +public class Initializer extends CompoundInitializer { + + private static Logger s_log = Logger.getLogger + (Initializer.class.getName()); + + + public void init(DomainInitEvent evt) { + super.init(evt); + + Categorization.addCategoryListener(new TermCategoryListener()); + + PatternStylesheetResolver.registerPatternGenerator( + "webapp", + new WebAppPatternGenerator() + ); + } +} diff --git a/ccm-aap-aplaws/src/com/arsdigita/aplaws/Loader.java b/ccm-aap-aplaws/src/com/arsdigita/aplaws/Loader.java new file mode 100644 index 000000000..b68ff8ffe --- /dev/null +++ b/ccm-aap-aplaws/src/com/arsdigita/aplaws/Loader.java @@ -0,0 +1,379 @@ +/* + * Copyright (C) 2001-2004 Red Hat Inc. All Rights Reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +package com.arsdigita.aplaws; + +import com.arsdigita.london.navigation.Navigation; +import com.arsdigita.london.navigation.Template; +import com.arsdigita.london.navigation.TemplateMapping; +import com.arsdigita.london.terms.Domain; +import com.arsdigita.london.terms.importer.Parser; +import com.arsdigita.london.portal.PageLayout; +import com.arsdigita.london.portal.Workspace; + +import com.arsdigita.categorization.Category; +import com.arsdigita.categorization.RootCategoryCollection; +import com.arsdigita.cms.ContentSection; +import com.arsdigita.cms.SecurityManager; +import com.arsdigita.cms.ui.role.RoleFactory; +import com.arsdigita.loader.PackageLoader; +import com.arsdigita.kernel.Role; +import com.arsdigita.kernel.RoleCollection; +import com.arsdigita.kernel.permissions.PrivilegeDescriptor; +import com.arsdigita.persistence.DataQuery; +import com.arsdigita.runtime.ScriptContext; +import com.arsdigita.util.Assert; +import com.arsdigita.util.UncheckedWrapperException; +import com.arsdigita.util.parameter.BooleanParameter; +import com.arsdigita.util.parameter.Parameter; +import com.arsdigita.util.parameter.StringParameter; +import com.arsdigita.util.parameter.URLParameter; +import com.arsdigita.web.Application; + +import org.apache.log4j.Logger; + +import java.net.URL; +import java.net.MalformedURLException; +import java.util.Date; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Set; + +/** + * Loader. + * + * Creates category domains in the terms application according to + * configuration files and adds jsp templates to navigation. + * + * @author Justin Ross <jross@redhat.com> + * @version $Id: Loader.java 755 2005-09-02 13:42:47Z sskracic $ + */ +public class Loader extends PackageLoader { + public final static String versionId = + "$Id: Loader.java 755 2005-09-02 13:42:47Z sskracic $" + + "$Author: sskracic $" + + "$DateTime: 2004/03/25 09:34:39 $"; + + private static final Logger s_log = Logger.getLogger(Loader.class); + + private static final String[] categoryFiles = new String[] { + "WEB-INF/aplaws/aap-nav-domain-1.00.xml" + , "WEB-INF/aplaws/aap-nav-hierarchy-1.00.xml" + }; + + private StringParameter m_navigationDomain; + // private StringParameter m_servicesDomain; + // private StringParameter m_interactionDomain; + // private StringParameter m_subjectDomain; + // private StringParameter m_rssDomain; + + public Loader() { + + // Es werden stumpf mehrere Kategorisierungsdomains fuer TERMS + // definiert und dann über xml Dateien gefüllt: + // navigationDomain f. Navigation + // subjectDomain f. ??? + // interactionDomain f. ??? + // rssDomain fuer vermutlich RSS Feed + // + m_navigationDomain = new StringParameter( + "com.arsdigita.aplaws.navigation_domain", + Parameter.REQUIRED, + "AAP-NAV"); + register(m_navigationDomain); + + /* + * You may add more catagory domains by adding resources + * according the followin schema + */ + + /* currently not used + m_subjectDomain = new StringParameter( + "com.arsdigita.aplaws.subject_domain", + Parameter.REQUIRED, + "LGCL"); + register(m_subjectDomain); + */ + + /* currently not used + m_interactionDomain = new StringParameter( + "com.arsdigita.aplaws.subject_domain", + Parameter.REQUIRED, + "LGIL"); + register(m_interactionDomain); + */ + + /* currently not used + m_rssDomain = new StringParameter( + "com.arsdigita.aplaws.rss_domain", + Parameter.REQUIRED, + "APLAWS-RSS"); + register(m_rssDomain); + */ + + + } + + + public void run(final ScriptContext ctx) { + + String[] files = categoryFiles; + + final Parser parser = new Parser(); + for (int i = 0 ; i < files.length ; i++) { + final String file = files[i]; + if (s_log.isInfoEnabled()) { + s_log.info("Process " + file); + } + parser.parse(Thread.currentThread().getContextClassLoader + ().getResourceAsStream + (file)); + } + + String navigationKey = (String)get(m_navigationDomain); + registerDomain(navigationKey, "/navigation/", null); + registerDomain(navigationKey, "/content/", null); + registerDomain(navigationKey, "/portal/", null); + //registerDomain(navigationKey, "/atoz/", null); + //registerDomain(navigationKey, "/admin/subsite/", null); + + /* + * You may add more catagory domains by adding resources + * according the following schema + */ + + // String subjectKey = (String)get(m_subjectDomain); + // registerDomain(subjectKey, "/search/", null); + // registerDomain(subjectKey, "/content/", "subject"); + + // String servicesKey = (String)get(m_servicesDomain); + // registerDomain(servicesKey, "/services/", null); + // registerDomain(servicesKey, "/content/", "services"); + + // String rssKey = (String)get(m_rssDomain); + // registerDomain(rssKey, "/channels/", null); + // registerDomain(rssKey, "/content/", "rss"); + + // String interactionKey = (String)get(m_interactionDomain); + // registerDomain(interactionKey, "/content/", "interaction"); + + + + // register new / addidional JSP templates (index pages) in Navigation + // registerServicesTemplate("/services/"); wird nicht gebraucht + registerNavigationTemplates(); + + // Switch /portal/ to use 1 column layout for funky aplaws stuff. + Workspace portal = (Workspace)Application + .retrieveApplicationForPath("/portal/"); + portal.setDefaultLayout(PageLayout + .findLayoutByFormat(PageLayout.FORMAT_ONE_COLUMN)); + } + +// public void registerServicesTemplate(String appURL) { +// Application app = Application.retrieveApplicationForPath(appURL); +// Assert.exists(app, Application.class); +// Category root = Category.getRootForObject(app); +// Assert.exists(root, Category.class); +// +// Template template = Template.create( +// "APLAWS Services", +// "APLAWS ESD Toolkit Services", +// "/packages/navigation/templates/aplaws-services.jsp"); +// +// new TemplateMapping( template, +// root, +// Template.DEFAULT_DISPATCHER_CONTEXT, +// Template.DEFAULT_USE_CONTEXT ); +// } + + /** + * Use Package com.arsdigita.london.navigation to add additional + * templates (JSP page - index page) for use in navigation. + * These JSP pages can be choosen in admin/navigation as index + * pages for one or more specific categories. + * + * TODO: make configurable without recompiling! + */ + public void registerNavigationTemplates() { + Template template ; + + template = Template.create( + "AAP AtoZ paginator", + "AAP AtoZ paginator index page", + "/packages/navigation/templates/aap-atoz.jsp"); + + template = Template.create( + "AAP Default", + "AAP default index page", + "/packages/navigation/templates/aap-default.jsp"); + + template = Template.create( + "AAP Portalseite", + "AAP Portal Page", + "/packages/navigation/templates/aap-portal.jsp"); + + template = Template.create( + "AAP Recent", + "AAP reverse order page", + "/packages/navigation/templates/aap-recent.jsp"); + + template = Template.create( + "AAP Welcome Page", + "AAP Welcome Page for navigation", + "/packages/navigation/templates/aap-welcome.jsp"); + + } + + /** + * Function to create an empty default domain in terms, preconfigured + * for navigation. It may be populated manually by the user/publisher + * using the terms admin application. + * This step is useful only if no specific navigation tree is + * delivered. + */ + // -- public void registerDefaultNavigationDomain() { + + // -- private StringParameter m_customNavKey; + // -- private URLParameter m_customNavDomainURL; + // -- private StringParameter m_customNavPath; + // -- private StringParameter m_customNavUseContext; + // -- private StringParameter m_customNavTitle; + // -- private StringParameter m_customNavDesc; + + // -- m_customNavKey = new StringParameter( + // -- "com.arsdigita.aplaws.custom_nav_key", + // -- Parameter.REQUIRED, + // -- "APLAWS-NAVIGATION"); + +/* Zugriff auf Website wird nicht benötigt, aber der Parameter bei Einrichtung + * der Kategorien. Funktion URL prüft auf korrekte Syntax, nicht auf Existenz + */ + // -- try { + // -- m_customNavDomainURL = new URLParameter( + // -- "com.arsdigita.aplaws.custom_nav_domain_url", + // -- Parameter.REQUIRED, + // -- new URL("http://www.aplaws.org.uk/" + + // -- "standards/custom/1.00/termslist.xml")); + // -- } catch (MalformedURLException ex) { + // -- throw new UncheckedWrapperException("Cannot parse url", ex); + // -- } + + + // -- m_customNavPath = new StringParameter( + // -- "com.arsdigita.aplaws.custom_nav_path", + // -- Parameter.REQUIRED, + // -- "local"); + + // -- m_customNavUseContext = new StringParameter( + // -- "com.arsdigita.aplaws.custom_nav_use_context", + // -- Parameter.REQUIRED, + // -- "local"); + + // -- m_customNavTitle = new StringParameter( + // -- "com.arsdigita.aplaws.custom_nav_title", + // -- Parameter.REQUIRED, + // -- "APLAWS Custom Navigation"); + + // -- m_customNavDesc = new StringParameter( + // -- "com.arsdigita.aplaws.custom_nav_desc", + // -- Parameter.REQUIRED, + // -- "Installation specific navigation tree"); + + + // -- register(m_customNavDesc); + // -- register(m_customNavDomainURL); + // -- register(m_customNavKey); + // -- register(m_customNavPath); + // -- register(m_customNavTitle); + // -- register(m_customNavUseContext); + + // -- String customNavPath = (String)get(m_customNavPath); + // -- String customNavTitle = (String)get(m_customNavTitle); + + // Package com.arsdigita.web + // Application.createApplication(Navigation.BASE_DATA_OBJECT_TYPE, + // customNavPath, + // customNavTitle, + // null); + + + + // -- String customNavDesc = (String)get(m_customNavDesc); + // -- String customNavKey = (String)get(m_customNavKey); + // -- String customNavUseContext = (String)get(m_customNavUseContext); + // -- URL customNavDomainURL = (URL)get(m_customNavDomainURL); + + // -- Domain.create(customNavKey, customNavDomainURL, + // -- customNavTitle, customNavDesc, "1.0.0", new Date()); + + // registerDomain(customNavKey, '/'+customNavPath+'/', null); + // -- registerDomain(customNavKey, "/content/", customNavUseContext); + + // -- } + + /** + * Use Package com.arsdigita.london.terms to register a Domain for + * Categorisation + */ + public void registerDomain(String domainKey, + String appURL, + String context) { + if (s_log.isDebugEnabled()) { + s_log.debug("Mapping domain " + domainKey + + " to app " + appURL + + " in context " + context); + } + + Domain domain = Domain.retrieve(domainKey); // package com.arsdigita.london.terms + Application app = Application.retrieveApplicationForPath(appURL); + domain.setAsRootForObject(app, context); + if (app instanceof ContentSection) { + RoleCollection coll = ((ContentSection) app).getStaffGroup().getOrderedRoles(); + Set adminRoles = new HashSet(); + Set categorizeRoles = new HashSet(); + while (coll.next()) { + Role role = coll.getRole(); + final DataQuery privs = RoleFactory.getRolePrivileges + (app.getID(), role.getGroup().getID()); + while (privs.next()) { + String priv = (String) privs.get(RoleFactory.PRIVILEGE); + if (priv.equals(SecurityManager.CMS_CATEGORY_ADMIN)) { + adminRoles.add(role); + } else if (priv.equals(SecurityManager.CMS_CATEGORIZE_ITEMS)) { + categorizeRoles.add(role); + } + } + + } + RootCategoryCollection catCollection = Category.getRootCategories(((ContentSection) app)); + while (catCollection.next()) { + Iterator adminIter = adminRoles.iterator(); + while (adminIter.hasNext()) { + ((Role) adminIter.next()).grantPermission(catCollection.getCategory(), + PrivilegeDescriptor.ADMIN); + } + Iterator categorizeIter = categorizeRoles.iterator(); + while (categorizeIter.hasNext()) { + ((Role) categorizeIter.next()).grantPermission(catCollection.getCategory(), + Category.MAP_DESCRIPTOR); + } + } + } + } +} diff --git a/ccm-aap-aplaws/src/com/arsdigita/aplaws/ObjectTypeSchemaGenerator.java b/ccm-aap-aplaws/src/com/arsdigita/aplaws/ObjectTypeSchemaGenerator.java new file mode 100644 index 000000000..7d31607f7 --- /dev/null +++ b/ccm-aap-aplaws/src/com/arsdigita/aplaws/ObjectTypeSchemaGenerator.java @@ -0,0 +1,371 @@ +/* + * Copyright (C) 2001-2004 Red Hat Inc. All Rights Reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +package com.arsdigita.aplaws; + +import com.arsdigita.xml.Element; + +import com.arsdigita.persistence.metadata.ObjectType; +import com.arsdigita.persistence.metadata.Property; + +import java.util.HashMap; +import java.util.Stack; +import java.math.BigDecimal; + +public class ObjectTypeSchemaGenerator extends ObjectTypeTraversal { + + private boolean m_wrapRoot = false; + private boolean m_wrapObjects = false; + private boolean m_wrapAttributes = false; + + + + private Stack m_history = new Stack(); + private HashMap m_elements = new HashMap(); + + // The xs:element + private Element m_element; + // The (optional) xs:complexType + private Element m_type; + // The (optional) xs:sequence + private Element m_sequence; + // The (optional property + private Property m_property; + private Stack m_properties = new Stack(); + + private Element m_root; + private String m_rootName; + + public static final String SCHEMA_PREFIX = "xs:"; + + public static final String SCHEMA_NS = + "http://www.w3.org/2001/XMLSchema"; + + private static HashMap s_types = new HashMap(); + static { + s_types.put(String.class, "xs:string"); + s_types.put(Boolean.class, "xs:boolean"); + s_types.put(Integer.class, "xs:integer"); + s_types.put(BigDecimal.class, "xs:double"); + } + + protected static String lookupType(Class klass) { + if (s_types.containsKey(klass)) { + return (String)s_types.get(klass); + } + return "xs:string"; + } + + public static void registerType(Class klass, String type) { + s_types.put(klass, type); + } + + + public ObjectTypeSchemaGenerator(String rootName, + String namespace) { + m_root = new Element(SCHEMA_PREFIX + "schema", + SCHEMA_NS); + m_rootName = rootName; + + // Set the namespace for nodes defined by the schema + m_root.addAttribute("targetNamespace", namespace); + // Set the default namespace for unqualified nodes + m_root.addAttribute("xmlns", namespace); + // All nodes in an instance doc conforming to the schema + // must be qualified + m_root.addAttribute("elementFormDefault", "qualified"); + } + + public Element getRoot() { + return m_root; + } + + + /** + * Determines XML output for root object. + * If set to true a separate element will + * be output for the root object, if false, + * then the element passed into the constructor + * will be used. + */ + public void setWrapRoot(boolean value) { + m_wrapRoot = value; + } + + /** + * Determines XML output used for objects. + * If set to true, then a wrapper XML element + * will be generated for the association, + * and then individual elements generated for + * each object. If false then no wrapper + * XML element will be produced. + */ + public void setWrapObjects(boolean value) { + m_wrapObjects = value; + } + + /** + * Determines XML output used for scalar + * attributes. If set to true, then each + * attribute is output as a separate element, + * otherwise, attributes are output as simple + * attributes. + */ + public void setWrapAttributes(boolean value) { + m_wrapAttributes = value; + } + + /** + * Method called when the processing of an object + * starts + */ + protected void beginObject(ObjectType obj, + String path) { + // XXX deal with revisited objects - xs:choice possibly + + if (m_type != null && m_sequence == null) { + Element sequence = m_type.newChildElement(SCHEMA_PREFIX + "sequence", + SCHEMA_NS); + m_sequence = sequence; + } + + Element parent; + String name; + if (m_element == null) { + if (m_wrapRoot) { + Element element = m_root.newChildElement(SCHEMA_PREFIX + "element", + SCHEMA_NS); + element.addAttribute("name", m_rootName); + + Element type = element.newChildElement(SCHEMA_PREFIX + "complexType", + SCHEMA_NS); + Element sequence = type.newChildElement(SCHEMA_PREFIX + "sequence", + SCHEMA_NS); + + parent = sequence; + name = nameFromPath(path); + } else { + parent = m_root; + name = m_rootName; + } + } else { + parent = m_sequence; + if (m_wrapObjects) { + name = "object"; + } else { + name = nameFromPath(path); + } + } + Element element = parent.newChildElement(SCHEMA_PREFIX + "element", + SCHEMA_NS); + element.addAttribute("name", name); + + if (m_property != null) { + if (m_property.isNullable()) { + element.addAttribute("minOccurs", "0"); + } + if (m_property.isCollection()) { + element.addAttribute("maxOccurs", "unbounded"); + } + } + + Element type = element.newChildElement(SCHEMA_PREFIX + "complexType", + SCHEMA_NS); + + Element oid = type.newChildElement(SCHEMA_PREFIX + "attribute", + SCHEMA_NS); + oid.addAttribute("name", "oid"); + oid.addAttribute("type", "xs:string"); + + // Add to the path -> element map, not that we use this info yet + m_elements.put(path, element); + + // Preserve context + m_history.push(new Element[] { m_element, m_type, m_sequence }); + + m_element = element; + m_type = type; + m_sequence = null; + } + + /** + * Method called when the procesing of an object + * completes + */ + protected void endObject(ObjectType obj, + String path) { + Element[] saved = (Element[])m_history.pop(); + m_element = saved[0]; + m_type = saved[1]; + m_sequence = saved[2]; + } + + /** + * Method called when an attribute is encountered + */ + protected void handleAttribute(ObjectType obj, + String path, + Property property) { + if (m_wrapAttributes) { + if (m_sequence == null) { + Element sequence = m_type.newChildElement(SCHEMA_PREFIX + "sequence", + SCHEMA_NS); + m_sequence = sequence; + } + + Element element = new Element(SCHEMA_PREFIX + "element", + SCHEMA_NS); + element.addAttribute("name", property.getName()); + // XXX pdl type -> xs type mapping + element.addAttribute("type",lookupType(property.getJavaClass())); + + if (property.isNullable()) { + element.addAttribute("minOccurs", "0"); + } + + // Add to element + m_sequence.addContent(element); + + // Add to the path -> element map + m_elements.put(path, element); + } else { + Element element = new Element(SCHEMA_PREFIX + "attribute", + SCHEMA_NS); + element.addAttribute("name", property.getName()); + // XXX pdl type -> xs type mapping + element.addAttribute("type", lookupType(property.getJavaClass())); + + if (property.isRequired()) { + element.addAttribute("use", "required"); + } + + // Add to element + m_type.addContent(element); + + // Add to the path -> element map + m_elements.put(path, element); + } + } + + /** + * Method called when the processing of a role + * starts + */ + protected void beginRole(ObjectType obj, + String path, + Property property) { + if (m_wrapObjects) { + if (m_sequence == null) { + Element sequence = m_type.newChildElement(SCHEMA_PREFIX + "sequence", + SCHEMA_NS); + m_sequence = sequence; + } + + Element element = m_sequence.newChildElement(SCHEMA_PREFIX + "element", + SCHEMA_NS); + element.addAttribute("name", property.getName()); + if (property.isNullable()) { + element.addAttribute("minOccurs", "0"); + } + + Element type = element.newChildElement(SCHEMA_PREFIX + "complexType", + SCHEMA_NS); + Element sequence = type.newChildElement(SCHEMA_PREFIX + "sequence", + SCHEMA_NS); + + // Preserve context + m_history.push(new Element[] { m_element, m_type, m_sequence }); + + m_element = element; + m_type = type; + m_sequence = sequence; + } + m_properties.push(m_property); + m_property = property; + } + + /** + * Method called when the procesing of a role + * completes + */ + protected void endRole(ObjectType obj, + String path, + Property property) { + if (m_wrapObjects) { + Element[] saved = (Element[])m_history.pop(); + m_element = saved[0]; + m_type = saved[1]; + m_sequence = saved[2]; + } + m_property = (Property)m_properties.pop(); + } + + /** + * Method called when the processing of an association + * starts + */ + protected void beginAssociation(ObjectType obj, + String path, + Property property) { + if (m_wrapObjects) { + if (m_sequence == null) { + Element sequence = m_type.newChildElement(SCHEMA_PREFIX + "sequence", + SCHEMA_NS); + m_sequence = sequence; + } + + Element element = m_sequence.newChildElement(SCHEMA_PREFIX + "element", + SCHEMA_NS); + element.addAttribute("name", property.getName()); + if (property.isNullable()) { + element.addAttribute("minOccurs", "0"); + } + + Element type = element.newChildElement(SCHEMA_PREFIX + "complexType", + SCHEMA_NS); + Element sequence = type.newChildElement(SCHEMA_PREFIX + "sequence", + SCHEMA_NS); + + // Preserve context + m_history.push(new Element[] { m_element, m_type, m_sequence }); + + m_element = element; + m_type = type; + m_sequence = sequence; + } + m_properties.push(m_property); + m_property = property; + } + + /** + * Method called when the procesing of an association + * completes + */ + protected void endAssociation(ObjectType obj, + String path, + Property property) { + if (m_wrapObjects) { + Element[] saved = (Element[])m_history.pop(); + m_element = saved[0]; + m_type = saved[1]; + m_sequence = saved[2]; + } + m_property = (Property)m_properties.pop(); + } + +} diff --git a/ccm-aap-aplaws/src/com/arsdigita/aplaws/ObjectTypeTraversal.java b/ccm-aap-aplaws/src/com/arsdigita/aplaws/ObjectTypeTraversal.java new file mode 100644 index 000000000..802d77164 --- /dev/null +++ b/ccm-aap-aplaws/src/com/arsdigita/aplaws/ObjectTypeTraversal.java @@ -0,0 +1,358 @@ +/* + * Copyright (C) 2001-2004 Red Hat Inc. All Rights Reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +package com.arsdigita.aplaws; + +import com.arsdigita.util.Assert; + +import com.arsdigita.persistence.metadata.ObjectType; +import com.arsdigita.persistence.metadata.Property; +import com.arsdigita.persistence.metadata.MetadataRoot; + +import java.util.Iterator; +import java.util.HashMap; + +import org.apache.log4j.Logger; + +// XXX this class is pretty similar to DomainObjectTraversal +// and it would be nice to figure out a way to let them share +// some of their logic (provided it didn't cripple / obfuscate +// the API). + +// At minimum the process for registering & looking up hierachical +// adapters can be shared. Also the mangling of names / paths. + + +/** + *

This class provides a general purpose framework for iterating + * over a domain object's properties, processing attributes and + * traversing associations as required.

+ * + *

Subclasses should implement the startXXX and endXXX methods to + * provide whatever processing logic they require upon encountering + * attributes, roles, associations and objects.

+ * + *

The {@link com.arsdigita.domain.ObjectTypeTraversalAdapter} + * provides a means to control which properties are processed and, + * most importantly, which associations are traversed. When + * registering an adapter, a 'use context' is supplied allowing + * different adapters to be used according to the requirements of any + * implementing subclass. It is recommended that the use context be + * based on the fully qualified name of the class using + * ObjectTypeTraversal, e.g., + * com.arsdigita.cms.ui.ObjectTypeRenderer.

+ * + *

The path argument provided to the adapter and the startXXX ad + * endXXX methods indicates which associations are currently being + * traversed. The first element in the path is always '/object'. If it + * then starts to traverse the 'rootCategory' association, the path + * will become '/object/rootCategory'. For self-recursive + * associations, rather than building up a long repeating string, the + * path will be shortened by adding a '+' for each element that is + * repeated. For example, '/object/container+' indicates that the + * container association has been followed two or more times.

+ */ +public abstract class ObjectTypeTraversal { + + private static HashMap s_adapters = new HashMap(); + + private static final Logger s_log = Logger.getLogger(ObjectTypeTraversal.class); + + /** + * Registers a traversal adapter for an object type in a given + * context. + * + * @param type the object type whose items will be traversed + * @param adapter the adapter for controlling object traversal + * @param context the context in which the adapter should be used + */ + public static void registerAdapter(ObjectType type, + ObjectTypeTraversalAdapter adapter, + String context) { + s_adapters.put(new AdapterKey(type, context), adapter); + } + + /** + * Unregisteres a traversal adapter for an object type in a + * given context + * + * @param type the object type whose items will be traversed + * @param context the context in which the adapter should be used + */ + public static void unregisterAdapter(ObjectType type, + String context) { + s_adapters.remove(new AdapterKey(type, context)); + } + + /** + * Registers a traversal adapter for an object type in a given + * context. + * + * @param type the object type whose items will be traversed + * @param adapter the adapter for controlling object traversal + * @param context the context in which the adapter should be used + */ + public static void registerAdapter(String type, + ObjectTypeTraversalAdapter adapter, + String context) { + registerAdapter(MetadataRoot.getMetadataRoot().getObjectType(type), + adapter, + context); + } + + /** + * Unregisteres a traversal adapter for an object type in a + * given context + * + * @param type the object type whose items will be traversed + * @param context the context in which the adapter should be used + */ + public static void unregisterAdapter(String type, + String context) { + unregisterAdapter(MetadataRoot.getMetadataRoot().getObjectType(type), + context); + } + + /** + * Retrieves the traversal adapter for an object type in a given + * context. + * + * @param type the object type to lookup + * @param context the adapter context + */ + public static ObjectTypeTraversalAdapter lookupAdapter(ObjectType type, + String context) { + return (ObjectTypeTraversalAdapter)s_adapters + .get(new AdapterKey(type, context)); + } + + /** + * Retrieves the closest matching traversal adapter for an object type + * in a given context. The algorithm looks for an exact match, then + * considers the supertype, and the supertype's supertype. If no match + * could be found at all, returns null + * + * @param type the object type to search for + * @param context the adapter context + */ + public static ObjectTypeTraversalAdapter findAdapter(ObjectType type, + String context) { + ObjectTypeTraversalAdapter adapter = null; + while (adapter == null && type != null) { + adapter = lookupAdapter(type, context); + type = type.getSupertype(); + } + return adapter; + } + + /** + * Walks over properties of a domain object, invoking + * methods to handle assoications, roles and attributes. + * + * @param obj the domain object to traverse + * @param context the context for the traversal adapter + */ + public void walk(String type, + String context) { + walk(MetadataRoot.getMetadataRoot().getObjectType(type), + context); + } + + /** + * Walks over properties of a domain object, invoking + * methods to handle assoications, roles and attributes. + * + * @param obj the domain object to traverse + * @param context the context for the traversal adapter + */ + public void walk(ObjectType type, + String context) { + Assert.exists(type, ObjectType.class); + + ObjectTypeTraversalAdapter adapter = findAdapter(type, + context); + Assert.exists(adapter, ObjectTypeTraversalAdapter.class); + walk(adapter, type, "/object"); + } + + private void walk(ObjectTypeTraversalAdapter adapter, + ObjectType type, + String path) { + beginObject(type, path); + + if (s_log.isInfoEnabled()) { + s_log.info("Walking " + path + " type: " + type.getQualifiedName()); + } + + for (Iterator i = type.getProperties(); i.hasNext(); ) { + Property prop = (Property) i.next(); + String propName = prop.getName(); + + if (!adapter.processProperty(type, + appendToPath(path, prop.getName()), + prop)) { + if (s_log.isDebugEnabled()) { + s_log.debug("Skipping property " + propName); + } + continue; + } + if (s_log.isDebugEnabled()) { + s_log.debug("Process property " + propName + " type " + prop.getType().getQualifiedName()); + } + + if (prop.isAttribute()) { + handleAttribute(type, path, prop); + } else { + if (!prop.isCollection()) { + beginRole(type, path, prop); + + walk(adapter, + (ObjectType)prop.getType(), + appendToPath(path, propName)); + + endRole(type, path, prop); + } else { + beginAssociation(type, path, prop); + + Property roleProp = prop.getAssociatedProperty(); + + walk(adapter, + (ObjectType)prop.getType(), + appendToPath(path, propName)); + + endAssociation(type, path, prop); + } + } + } + + endObject(type, path); + } + + + /** + * Method called when the processing of an object + * starts + */ + protected abstract void beginObject(ObjectType obj, + String path); + /** + * Method called when the procesing of an object + * completes + */ + protected abstract void endObject(ObjectType obj, + String path); + + /** + * Method called when an attribute is encountered + */ + protected abstract void handleAttribute(ObjectType obj, + String path, + Property property); + + /** + * Method called when the processing of a role + * starts + */ + protected abstract void beginRole(ObjectType obj, + String path, + Property property); + + /** + * Method called when the procesing of a role + * completes + */ + protected abstract void endRole(ObjectType obj, + String path, + Property property); + + /** + * Method called when the processing of an association + * starts + */ + protected abstract void beginAssociation(ObjectType obj, + String path, + Property property); + + /** + * Method called when the procesing of an association + * completes + */ + protected abstract void endAssociation(ObjectType obj, + String path, + Property property); + + + protected String appendToPath(String path, + String name) { + if (path.endsWith("/" + name)) { + path = path + "+"; + } else if (!path.endsWith("/" + name + "+")) { + path = path + "/" + name; + } + + return path; + } + + protected String nameFromPath(String path) { + int index = path.lastIndexOf("/"); + Assert.truth(index >= 0, "Path starts with /"); + + if (path.endsWith("+")) { + return path.substring(index + 1, path.length() - 2); + } else { + return path.substring(index + 1); + } + } + + protected String parentFromPath(String path) { + int index = path.lastIndexOf("/"); + Assert.truth(index >= 0, "Path starts with /"); + + if (index == 0) { + return null; + } else { + return path.substring(0, index - 1); + } + } + + private static class AdapterKey { + private ObjectType m_type; + private String m_context; + + public AdapterKey(ObjectType type, + String context) { + m_type = type; + m_context = context; + } + + public boolean equals(Object o) { + if (o instanceof AdapterKey) { + AdapterKey k = (AdapterKey)o; + return k.m_type.equals(m_type) && + k.m_context.equals(m_context); + } else { + return false; + } + } + + public int hashCode() { + return m_type.hashCode() + m_context.hashCode(); + } + } + +} diff --git a/ccm-aap-aplaws/src/com/arsdigita/aplaws/ObjectTypeTraversalAdapter.java b/ccm-aap-aplaws/src/com/arsdigita/aplaws/ObjectTypeTraversalAdapter.java new file mode 100644 index 000000000..7376585f1 --- /dev/null +++ b/ccm-aap-aplaws/src/com/arsdigita/aplaws/ObjectTypeTraversalAdapter.java @@ -0,0 +1,60 @@ +/* + * Copyright (C) 2001-2004 Red Hat Inc. All Rights Reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +package com.arsdigita.aplaws; + +import com.arsdigita.persistence.metadata.Property; +import com.arsdigita.persistence.metadata.ObjectType; + +// XXX this class is pretty similar to DomainObjectTraversal +// and it would be nice to figure out a way to let them share +// some of their logic (provided it didn't cripple / obfuscate +// the API). + +/** + *

This interface is used to control traversal of domain + * objects. Whenever a property is encountered, the {@link + * #processProperty} method will be called to determine whether or not + * to continue processing the object. The most important use for this + * is to prevent the needless (and potentially infinite) traversal of + * associations between objects, but it can also be used to filter out + * certain attributes.

+ * + *

Instances of this class need to be registered using the + * DomainObjectTraversal.registerAdapter method.

+ * + * @see com.arsdigita.domain.DomainObjectTraversal + * @see com.arsdigita.domain.SimpleDomainObjectTraversalAdapter + * @version $Id: ObjectTypeTraversalAdapter.java 287 2005-02-22 00:29:02Z sskracic $ + */ +public interface ObjectTypeTraversalAdapter { + /** + * Invoked to determine whether to process a property. + * Should return true to allow processing to commence, + * false to prevent it. + * + * @param obj the object type currently being processed + * @param path the path to the current domain object from + * the root object being traversed + * @param prop the property about to be processed + * @return true if the property should be processed + */ + public boolean processProperty(ObjectType obj, + String path, + Property prop); +} diff --git a/ccm-aap-aplaws/src/com/arsdigita/aplaws/SimpleObjectTypeTraversalAdapter.java b/ccm-aap-aplaws/src/com/arsdigita/aplaws/SimpleObjectTypeTraversalAdapter.java new file mode 100644 index 000000000..131c6785a --- /dev/null +++ b/ccm-aap-aplaws/src/com/arsdigita/aplaws/SimpleObjectTypeTraversalAdapter.java @@ -0,0 +1,151 @@ +/* + * Copyright (C) 2001-2004 Red Hat Inc. All Rights Reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +package com.arsdigita.aplaws; + +import org.apache.log4j.Logger; +import com.arsdigita.persistence.metadata.Property; +import com.arsdigita.persistence.metadata.ObjectType; +import java.util.HashSet; + +/** + * This is a general purpose traversal adaptor + * that allows/denies processing of a property + * based on the path to the property, and its + * presence in an inclusion/exclusion set. + * + * Instances of this class can be configured using + * the ObjectTypeTraversalInitializer + * + *

See com.arsdigita.cms.installer.ObjectTypeTraversalInitializer. + */ +public class SimpleObjectTypeTraversalAdapter + implements ObjectTypeTraversalAdapter { + + private static final Logger s_log = + Logger.getLogger(SimpleObjectTypeTraversalAdapter.class); + + /** + * Rule that indicates the set of properties should be treated + * as an inclusion list. ie, don't allow any properties except + * those listed. This is the default for associations + */ + public final static int RULE_INCLUDE = 0; + /** + * Rule that indicates the set of properties should be treated + * as an exclusion list. ie, allow through all properties, + * except those listed. This is the default for attributes. + */ + public final static int RULE_EXCLUDE = 1; + + private HashSet m_attr = new HashSet(); + private HashSet m_assoc = new HashSet(); + + private int m_attrRule = RULE_EXCLUDE; + private int m_assocRule = RULE_INCLUDE; + + private SimpleObjectTypeTraversalAdapter m_parent; + + /** + * Creates a new traversal adapter, with no parent + * delegate. If no explicit rule is present it will + * return false if RULE_INCLUDE is set, or true if + * RULE_EXCLUDE is set. + */ + public SimpleObjectTypeTraversalAdapter() { + this(null); + } + + /** + * Creates a new traversal adapter, extending the rules + * defined by a parent. If there is no explicit rule + * for the property questioned, it will delegate the + * query to the parent. + * @param parent the parent adapter to delegate to + */ + public SimpleObjectTypeTraversalAdapter( + SimpleObjectTypeTraversalAdapter parent + ) { + m_parent = parent; + } + + /** + * Set the rule for processing attributes + * + * @param rule the new processing rule + */ + public void setAttributeRule(int rule) { + m_attrRule = rule; + } + + /** + * Set the rule for processing associations + * + * @param rule the new processing rule + */ + public void setAssociationRule(int rule) { + m_assocRule = rule; + } + + /** + * Add a property to the attribute property set. + * + * @param path the full path to the property + */ + public void addAttributeProperty(String prop) { + m_attr.add(prop); + } + + /** + * Add a property to the association property set. + * + * @param path the full path to the property + */ + public void addAssociationProperty(String prop) { + m_assoc.add(prop); + } + + /** + * Determines whether or not to allow processing + * of a property, based on the property set and + * the processing rule + */ + public boolean processProperty(ObjectType obj, + String path, + Property prop) { + if (prop.isAttribute()) { + boolean result = m_attr.contains(path); + s_log.debug("Check attr " + path + " contains " + + result + " " + m_attrRule); + if (!result && m_parent != null) { + s_log.debug("No explicit rule, delegating to parent"); + return m_parent.processProperty(obj, path, prop); + } + return m_attrRule == RULE_INCLUDE ? result : !result; + } else { + boolean result = m_assoc.contains(path); + s_log.debug("Check assoc " + path + " contains " + + result + " " + m_attrRule); + if (!result && m_parent != null) { + s_log.debug("No explicit rule, delegating to parent"); + return m_parent.processProperty(obj, path, prop); + } + return m_assocRule == RULE_INCLUDE ? result : !result; + } + } +} diff --git a/ccm-aap-aplaws/src/com/arsdigita/aplaws/WebAppPatternGenerator.java b/ccm-aap-aplaws/src/com/arsdigita/aplaws/WebAppPatternGenerator.java new file mode 100644 index 000000000..824a1eeed --- /dev/null +++ b/ccm-aap-aplaws/src/com/arsdigita/aplaws/WebAppPatternGenerator.java @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2001-2004 Red Hat Inc. All Rights Reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +package com.arsdigita.aplaws; + + +import com.arsdigita.web.Application; +import com.arsdigita.web.Web; +import com.arsdigita.templating.PatternGenerator; + +import javax.servlet.http.HttpServletRequest; + +import org.apache.log4j.Logger; + + +/** + * Generates a set of patterns corresponding to the current + * web application prefix + */ +public class WebAppPatternGenerator implements PatternGenerator { + + private static final Logger s_log = + Logger.getLogger(WebAppPatternGenerator.class); + + public String[] generateValues(String key, + HttpServletRequest req) { + Application app = Web.getContext().getApplication(); + String ctx = app == null ? null : app.getContextPath(); + + if (app == null || + ctx == null || + "".equals(ctx)) { + return new String[] { Web.ROOT_WEBAPP }; + } + + if (ctx.startsWith("/")) { + ctx = ctx.substring(1); + } + + return new String[] { ctx }; + } +} diff --git a/ccm-aap-aplaws/src/com/arsdigita/aplaws/ui/ACSObjectCategoryPicker.java b/ccm-aap-aplaws/src/com/arsdigita/aplaws/ui/ACSObjectCategoryPicker.java new file mode 100644 index 000000000..4a355a9c1 --- /dev/null +++ b/ccm-aap-aplaws/src/com/arsdigita/aplaws/ui/ACSObjectCategoryPicker.java @@ -0,0 +1,278 @@ +/* + * Copyright (C) 2001-2004 Red Hat Inc. All Rights Reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +package com.arsdigita.aplaws.ui; + +import com.arsdigita.aplaws.Aplaws; +import com.arsdigita.bebop.Label; +import com.arsdigita.bebop.SimpleContainer; +import com.arsdigita.bebop.PageState; +import com.arsdigita.bebop.parameters.StringParameter; +import com.arsdigita.bebop.parameters.BigDecimalParameter; +import com.arsdigita.bebop.event.ActionEvent; +import com.arsdigita.bebop.event.ActionListener; +import com.arsdigita.bebop.form.Widget; +import com.arsdigita.persistence.SessionManager; +import com.arsdigita.persistence.DataCollection; +import com.arsdigita.domain.DomainCollection; +import com.arsdigita.domain.DomainObjectFactory; +import com.arsdigita.kernel.ACSObject; +import com.arsdigita.london.terms.Term; +import com.arsdigita.london.terms.Domain; +import com.arsdigita.categorization.ui.ACSObjectCategoryForm; +import com.arsdigita.cms.ContentItem; +import com.arsdigita.cms.CMS; +import com.arsdigita.cms.ui.authoring.ItemCategoryForm; + +import java.util.Collection; +import java.util.List; +import java.util.LinkedList; +import java.util.Iterator; + +import org.apache.log4j.Logger; + +/** + * abstracted from original version of ItemCategoryPicker r1297 + * chris gilbert + */ +public abstract class ACSObjectCategoryPicker extends SimpleContainer { + private static final Logger s_log = Logger.getLogger(ItemCategoryPicker.class); + + private ACSObjectCategoryForm m_form; + private BigDecimalParameter m_root; + + public ACSObjectCategoryPicker(BigDecimalParameter root, + StringParameter mode) { + + m_form = getForm(root, mode); + m_root = root; + + add(m_form); + m_form.addCompletionListener(new ItemCategoryFormCompletion()); + } + + protected abstract ACSObjectCategoryForm getForm(BigDecimalParameter root, StringParameter mode); + + protected abstract ACSObject getObject(PageState state); + + + + + private class ItemCategoryFormCompletion implements ActionListener { + public void actionPerformed(ActionEvent ev) { + + PageState state = ev.getPageState(); + Domain domain = getDomain(state); + String domainKey = domain.getKey(); + + if (s_log.isDebugEnabled()) { + s_log.debug("Saving categories in: " + domainKey); + } + + ACSObject object = getObject(state); + + if ("LGCL".equals(domainKey)) { + lgclSelected(domain, object); + } + + else if ("LGDL".equals(domainKey)) { + lgdlSelected(domain, object); + } + + fireCompletionEvent(state); + } + + private void lgclSelected(Domain domain, ACSObject object) { + List lgclTerms = getCurrentCategories(domain, object); + + Domain gcl = Domain.retrieve("GCL"); + Collection gclTerms = getRelatedTerms(lgclTerms, gcl); + clearTerms(gcl, object); + assignTerms(gclTerms, object); + + // The assignment below is removed to satisfy requirement 4.1, + // use case 1 of the document "Metadata Improvements" version 1 + // by Camden, dated 23/01/05. + //Domain lgsl = Domain.retrieve("LGSL"); + //Collection lgslTerms = getRelatedTerms(lgclTerms, lgsl); + //clearTerms(lgsl, object); + //assignTerms(lgslTerms, object); + + // adding processing or mapping from LGCL to APLAWS-NAV too +// boolean lgclOverrideAnav = Aplaws.getAplawsConfig().getOverrideAnavFromLGCLMappings().booleanValue(); +// if (lgclOverrideAnav) { +// Domain aplawsNav = Domain.retrieve("APLAWS-NAV"); +// Collection aplawsNavTerms = getRelatedTerms(lgclTerms, aplawsNav); +// clearTerms(aplawsNav, object); +// assignTerms(aplawsNavTerms, object); +// } + } + + // User has selected a term in the LGDL hierarchy, which includes + // terms from the LGSL. We're only interested in LGSL terms here. + private void lgdlSelected(Domain domain, ACSObject object) { + Domain lgsl = Domain.retrieve("LGSL"); + Domain gcl = Domain.retrieve("GCL"); + Domain lgcl = Domain.retrieve("LGCL"); + + // We have a mapping LGSL -> LGCL based on the reverse of a + // published mapping. We don't have a mapping LGSL -> GCL, so we + // do LGSL -> LGCL -> GCL instead. + + List lgslTerms = getCurrentCategories(lgsl, object); + Collection lgclTerms = getRelatedTerms(lgslTerms, lgcl); + + LinkedList lgclIDs = new LinkedList(); + Iterator i = lgclTerms.iterator(); + while (i.hasNext()) { + Term term = (Term) i.next(); + lgclIDs.add(term.getModel().getID()); + } + + Collection gclTerms = getRelatedTerms(lgclIDs, gcl); + + clearTerms(lgcl, object); + assignTerms(lgclTerms, object); + + clearTerms(gcl, object); + assignTerms(gclTerms, object); + } + } + + protected List getCurrentCategories(Domain domain, + ACSObject object) { + if (s_log.isDebugEnabled()) { + s_log.debug("Getting terms from " + domain + " to " + object); + } + DomainCollection terms = domain.getTerms(); + terms.addEqualsFilter("model.childObjects.id", object.getID()); + terms.addPath("model.id"); + + List current = new LinkedList(); + while (terms.next()) { + if (s_log.isDebugEnabled()) { + s_log.debug("Got term " + terms.get("model.id")); + } + current.add(terms.get("model.id")); + } + return current; + } + + // TODO move out of UI code + public static Collection getCurrentTerms(Domain domain, + ACSObject object) { + if (s_log.isDebugEnabled()) { + s_log.debug("Getting terms from " + domain + " to " + object); + } + Collection current = new LinkedList(); + DomainCollection terms = domain.getTerms(); + terms.addEqualsFilter("model.childObjects.id", object.getID()); + terms.addPath("model.id"); + while (terms.next()) { + if (s_log.isDebugEnabled()) { + s_log.debug("Got term " + terms.get("model.id")); + } + current.add(terms.getDomainObject()); + } + return current; + } + + // TODO move out of UI code + public static Collection getRelatedTerms(Collection src, + Domain domain) { + if (s_log.isDebugEnabled()) { + s_log.debug("Getting related terms to " + domain); + + } + if (src.isEmpty()) { + // this is a hack, it would be better not to use a completion event listener as + // this is called even when the form is cancelled... + return new LinkedList(); + } + DomainCollection terms = domain.getTerms(); + // these next two lines build the query + terms.addEqualsFilter("model.parents.link.relationType", "related"); + terms.addFilter("model.parents.id in :ids").set("ids", src); + + Collection related = new LinkedList(); + while (terms.next()) { + if (s_log.isDebugEnabled()) { + s_log.debug("Got term " + terms.getDomainObject()); + } + related.add(terms.getDomainObject()); + } + return related; + } + + protected void clearTerms(Domain domain, + ACSObject object) { + if (s_log.isDebugEnabled()) { + s_log.debug("Removing terms from " + domain + " to " + object); + } + Iterator terms = getCurrentTerms(domain, object).iterator(); + while (terms.hasNext()) { + Term term = (Term)terms.next(); + if (s_log.isDebugEnabled()) { + s_log.debug("Removing term " + term + " from " + object); + } + term.removeObject(object); + } + } + + + // TODO move out of UI code + public static void assignTerms(Collection terms, + ACSObject object) { + if (s_log.isDebugEnabled()) { + s_log.debug("Assigning terms to " + object); + } + Iterator i = terms.iterator(); + while (i.hasNext()) { + Term term = (Term)i.next(); + if (s_log.isDebugEnabled()) { + s_log.debug("Assigning term " + term + " to " + object); + } + term.addObject(object); + } + } + + protected Domain getDomain(PageState state) { + if (s_log.isDebugEnabled()) { + s_log.debug("Getting domain for " + state.getValue(m_root)); + } + + DataCollection domains = SessionManager.getSession() + .retrieve(Domain.BASE_DATA_OBJECT_TYPE); + domains.addEqualsFilter("model.id", + state.getValue(m_root)); + + if (domains.next()) { + Domain domain = (Domain)DomainObjectFactory + .newInstance(domains.getDataObject()); + if (s_log.isDebugEnabled()) { + s_log.debug("Got domain " + domain); + } + domains.close(); + return domain; + } + if (s_log.isDebugEnabled()) { + s_log.debug("No domain found"); + } + return null; + } +} diff --git a/ccm-aap-aplaws/src/com/arsdigita/aplaws/ui/AssignedIndexItemTerms.java b/ccm-aap-aplaws/src/com/arsdigita/aplaws/ui/AssignedIndexItemTerms.java new file mode 100644 index 000000000..38efa6beb --- /dev/null +++ b/ccm-aap-aplaws/src/com/arsdigita/aplaws/ui/AssignedIndexItemTerms.java @@ -0,0 +1,46 @@ +/** + * Copyright (C) 2005 Runtime Collective Ltd. All Rights Reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +package com.arsdigita.aplaws.ui; + +import com.arsdigita.bebop.PageState; +import com.arsdigita.cms.CMS; +import com.arsdigita.cms.ContentBundle; +import com.arsdigita.cms.ContentItem; +import com.arsdigita.cms.ContentPage; +import com.arsdigita.kernel.ACSObject; +import com.arsdigita.london.navigation.Navigation; +import com.arsdigita.london.terms.ui.AbstractAssignedTerms; + +import org.apache.log4j.Logger; + +public class AssignedIndexItemTerms extends AbstractAssignedTerms { + + private static final Logger s_log = Logger.getLogger(AssignedIndexItemTerms.class); + + protected ACSObject getObject(PageState state) { + + ACSObject obj = Navigation.getConfig().getDefaultModel().getObject(); + + if (s_log.isDebugEnabled()) { + s_log.debug("Dealing with item " + obj); + } + + return obj; + } +} diff --git a/ccm-aap-aplaws/src/com/arsdigita/aplaws/ui/AssignedItemTerms.java b/ccm-aap-aplaws/src/com/arsdigita/aplaws/ui/AssignedItemTerms.java new file mode 100644 index 000000000..1718892d8 --- /dev/null +++ b/ccm-aap-aplaws/src/com/arsdigita/aplaws/ui/AssignedItemTerms.java @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2001-2004 Red Hat Inc. All Rights Reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +package com.arsdigita.aplaws.ui; + +import com.arsdigita.bebop.PageState; +import com.arsdigita.cms.CMS; +import com.arsdigita.kernel.ACSObject; +import com.arsdigita.london.terms.ui.AbstractAssignedTerms; + +public class AssignedItemTerms extends AbstractAssignedTerms { + + protected ACSObject getObject(PageState state) { + return CMS.getContext().getContentItem().getParent(); + } +} diff --git a/ccm-aap-aplaws/src/com/arsdigita/aplaws/ui/CategoryPortalSelectionModel.java b/ccm-aap-aplaws/src/com/arsdigita/aplaws/ui/CategoryPortalSelectionModel.java new file mode 100644 index 000000000..df6e2aec4 --- /dev/null +++ b/ccm-aap-aplaws/src/com/arsdigita/aplaws/ui/CategoryPortalSelectionModel.java @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2001-2004 Red Hat Inc. All Rights Reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +package com.arsdigita.aplaws.ui; + +import com.arsdigita.london.navigation.Navigation; +import com.arsdigita.london.navigation.NavigationModel; + +import com.arsdigita.persistence.SessionManager; +import com.arsdigita.persistence.DataCollection; + +import com.arsdigita.domain.DomainObjectFactory; + +import com.arsdigita.categorization.Category; +import com.arsdigita.util.Assert; +import com.arsdigita.bebop.PageState; + +import com.arsdigita.london.portal.Workspace; +import com.arsdigita.london.portal.ui.WorkspaceSelectionModel; + +public class CategoryPortalSelectionModel extends WorkspaceSelectionModel { + + protected Workspace getDefaultWorkspace(PageState state) { + NavigationModel model = Navigation.getConfig().getDefaultModel(); + Category cat = model.getCategory(); + Assert.exists(cat); + + DataCollection workspaces + = SessionManager.getSession().retrieve( + Workspace.BASE_DATA_OBJECT_TYPE); + workspaces.addEqualsFilter("categories.id", cat.getID()); + + if (workspaces.next()) { + Workspace wk = (Workspace)DomainObjectFactory + .newInstance(workspaces.getDataObject()); + workspaces.close(); + return wk; + } + + return null; + } +} diff --git a/ccm-aap-aplaws/src/com/arsdigita/aplaws/ui/CategorySubtree.java b/ccm-aap-aplaws/src/com/arsdigita/aplaws/ui/CategorySubtree.java new file mode 100644 index 000000000..e8660d49b --- /dev/null +++ b/ccm-aap-aplaws/src/com/arsdigita/aplaws/ui/CategorySubtree.java @@ -0,0 +1,49 @@ +package com.arsdigita.aplaws.ui; + +import java.math.BigDecimal; +import java.util.Iterator; +import java.util.Map; + +import org.apache.commons.lang.StringUtils; +import org.apache.log4j.Logger; + +import com.arsdigita.bebop.Page; +import com.arsdigita.bebop.PageState; +import com.arsdigita.bebop.SimpleComponent; +import com.arsdigita.bebop.parameters.BigDecimalParameter; +import com.arsdigita.bebop.parameters.IntegerParameter; +import com.arsdigita.bebop.parameters.StringParameter; +import com.arsdigita.categorization.Category; +import com.arsdigita.domain.DomainObjectFactory; +import com.arsdigita.persistence.OID; +import com.arsdigita.xml.Element; + +/** + * Generate part of the category tree. Used by Assign Category authoring step. + * + * @author Alan Pevec + */ +public class CategorySubtree extends SimpleComponent { + + StringParameter nodeIDparam = new StringParameter("nodeID"); + + private static Logger s_log = Logger.getLogger(CategorySubtree.class); + public void register(Page p) { + super.register(p); + p.addGlobalStateParam(nodeIDparam); + + } + + public void generateXML(PageState state, Element p) { + + String node = (String)state.getValue(nodeIDparam); + s_log.debug("selected node = " + node); + String[] pathElements = StringUtils.split(node, "-"); + + Category root = (Category) DomainObjectFactory.newInstance(new OID( + Category.BASE_DATA_OBJECT_TYPE, new BigDecimal(pathElements[pathElements.length - 1]))); + s_log.debug("generating subtree for cat " + root.getID()); + TermWidget.generateSubtree(p, root); + } + +} diff --git a/ccm-aap-aplaws/src/com/arsdigita/aplaws/ui/CategoryTermDetails.java b/ccm-aap-aplaws/src/com/arsdigita/aplaws/ui/CategoryTermDetails.java new file mode 100644 index 000000000..4c8bf00ff --- /dev/null +++ b/ccm-aap-aplaws/src/com/arsdigita/aplaws/ui/CategoryTermDetails.java @@ -0,0 +1,66 @@ +/* + * Copyright (C) 2001-2004 Red Hat Inc. All Rights Reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +package com.arsdigita.aplaws.ui; + +import com.arsdigita.london.terms.Term; +import com.arsdigita.london.terms.ui.AbstractTermDetails; +import com.arsdigita.persistence.DataCollection; +import com.arsdigita.persistence.SessionManager; +import com.arsdigita.london.navigation.Navigation; +import com.arsdigita.categorization.Category; +import com.arsdigita.bebop.PageState; +import com.arsdigita.domain.DomainObjectFactory; + +import org.apache.log4j.Logger; + +public class CategoryTermDetails extends AbstractTermDetails { + + private static final Logger s_log = Logger.getLogger(CategoryTermDetails.class); + + protected Term getTerm(PageState state) { + Category cat = Navigation.getConfig().getDefaultModel() + .getCategory(); + + if (cat == null) { + s_log.debug("No category found, skiping term"); + return null; + } + + DataCollection terms = SessionManager.getSession() + .retrieve(Term.BASE_DATA_OBJECT_TYPE); + terms.addEqualsFilter(Term.MODEL + "." + Category.ID, + cat.getID()); + + if (terms.next()) { + Term term = (Term)DomainObjectFactory + .newInstance(terms.getDataObject()); + terms.close(); + if (s_log.isInfoEnabled()) { + s_log.info("Found term " + term + " for category " + cat); + } + return term; + } + + if (s_log.isDebugEnabled()) { + s_log.debug("No term found for category " + cat); + } + return null; + } + +} diff --git a/ccm-aap-aplaws/src/com/arsdigita/aplaws/ui/HomepagePortalSelectionModel.java b/ccm-aap-aplaws/src/com/arsdigita/aplaws/ui/HomepagePortalSelectionModel.java new file mode 100644 index 000000000..5de5558c4 --- /dev/null +++ b/ccm-aap-aplaws/src/com/arsdigita/aplaws/ui/HomepagePortalSelectionModel.java @@ -0,0 +1,75 @@ +/* + * Copyright (C) 2001 ArsDigita Corporation. All Rights Reserved. + * + * The contents of this file are subject to the ArsDigita Public + * License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of + * the License at http://www.arsdigita.com/ADPL.txt + * + * Software distributed under the License is distributed on an "AS + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or + * implied. See the License for the specific language governing + * rights and limitations under the License. + * + */ + +package com.arsdigita.aplaws.ui; + +import com.arsdigita.bebop.AbstractSingleSelectionModel; +import com.arsdigita.london.portal.ui.PortalSelectionModel; +import com.arsdigita.london.portal.WorkspacePage; +import com.arsdigita.bebop.PageState; +import com.arsdigita.bebop.parameters.ParameterModel; +import com.arsdigita.domain.DomainObject; + +public class HomepagePortalSelectionModel extends AbstractSingleSelectionModel + implements PortalSelectionModel { + + private HomepageWorkspaceSelectionModel m_workspace; + private int m_column; + + public HomepagePortalSelectionModel(HomepageWorkspaceSelectionModel workspace, + int column) { + m_workspace = workspace; + m_column = column; + } + + public void onCustomize(PageState state) { + m_workspace.onCustomize(state, m_column); + } + + public void onReset(PageState state) { + m_workspace.onReset(state, m_column); + } + + public HomepageWorkspaceSelectionModel getWorkspaceModel() { + return m_workspace; + } + + public Object getSelectedKey(PageState state) { + return getSelectedPortal(state).getID(); + } + + public void setSelectedKey(PageState state, + Object key) { + throw new UnsupportedOperationException("cannot set key"); + } + + public void setSelectedObject(PageState state, + DomainObject key) { + throw new UnsupportedOperationException("cannot set object"); + } + + public ParameterModel getStateParameter() { + throw new UnsupportedOperationException("not state param"); + } + + + public DomainObject getSelectedObject(PageState state) { + return getSelectedPortal(state); + } + + public WorkspacePage getSelectedPortal(PageState state) { + return m_workspace.getPortal(state, m_column); + } +} diff --git a/ccm-aap-aplaws/src/com/arsdigita/aplaws/ui/HomepageWorkspace.java b/ccm-aap-aplaws/src/com/arsdigita/aplaws/ui/HomepageWorkspace.java new file mode 100644 index 000000000..e4c44173b --- /dev/null +++ b/ccm-aap-aplaws/src/com/arsdigita/aplaws/ui/HomepageWorkspace.java @@ -0,0 +1,155 @@ +/* + * Copyright (C) 2001 ArsDigita Corporation. All Rights Reserved. + * + * The contents of this file are subject to the ArsDigita Public + * License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of + * the License at http://www.arsdigita.com/ADPL.txt + * + * Software distributed under the License is distributed on an "AS + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or + * implied. See the License for the specific language governing + * rights and limitations under the License. + * + */ + +package com.arsdigita.aplaws.ui; + +import com.arsdigita.bebop.SimpleContainer; +import com.arsdigita.bebop.ActionLink; +import com.arsdigita.bebop.Page; +import com.arsdigita.bebop.event.ActionEvent; +import com.arsdigita.bebop.event.ActionListener; +import com.arsdigita.london.portal.ui.PersistentPortal; +import com.arsdigita.london.portal.Workspace; +import com.arsdigita.bebop.PageState; +import com.arsdigita.xml.Element; +import com.arsdigita.london.portal.ui.PortalConstants; +import com.arsdigita.kernel.permissions.PermissionService; +import com.arsdigita.kernel.permissions.PermissionDescriptor; +import com.arsdigita.kernel.permissions.PrivilegeDescriptor; +import com.arsdigita.kernel.Party; +import com.arsdigita.kernel.Kernel; + + +public class HomepageWorkspace extends SimpleContainer { + + private HomepagePortalSelectionModel m_model; + private ActionLink m_reset; + private ActionLink m_browse; + private ActionLink m_edit; + private PersistentPortal m_browser; + private PersistentPortal m_editor; + private boolean m_customizable; + private boolean m_readOnly; + private String m_name; + + public HomepageWorkspace() { + super("portal:homepageWorkspace", PortalConstants.PORTAL_XML_NS); + m_customizable = false; + } + + public void setModel(HomepagePortalSelectionModel model) { + m_model = model; + } + + public void setCustomizable(boolean customizable) { + m_customizable = customizable; + } + + public void setReadOnly(boolean readOnly) { + m_readOnly = readOnly; + } + + public void setName(String name) { + m_name = name; + } + + public void addWidgets() { + m_edit = new ActionLink("customize"); + m_browse = new ActionLink("browse"); + m_reset = new ActionLink("reset"); + m_reset.setConfirmation("Are you sure you wish to reset this column? " + + "This will permanently remove all portlets."); + + m_browser = new PersistentPortal(m_model, + m_name, + PortalConstants.MODE_DISPLAY); + m_editor = new PersistentPortal(m_model, + m_name, + PortalConstants.MODE_EDITOR); + + m_edit.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + PageState state = e.getPageState(); + setDisplayMode(state, false); + + m_model.onCustomize(state); + } + }); + m_browse.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + PageState state = e.getPageState(); + setDisplayMode(state, true); + } + }); + m_reset.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + PageState state = e.getPageState(); + setDisplayMode(state, true); + + m_model.onReset(state); + } + }); + + add(m_edit); + add(m_browse); + add(m_reset); + add(m_editor); + add(m_browser); + } + + public void setDisplayMode(PageState state, + boolean browse) { + if (m_readOnly) { + return; + } + m_browse.setVisible(state, !browse); + m_reset.setVisible(state, !browse); + m_edit.setVisible(state, browse); + m_browser.setVisible(state, browse); + m_editor.setVisible(state, !browse); + } + + public void register(Page page) { + super.register(page); + + page.setVisibleDefault(m_browse, false); + page.setVisibleDefault(m_reset, false); + page.setVisibleDefault(m_edit, !m_readOnly); + page.setVisibleDefault(m_browser, true); + page.setVisibleDefault(m_editor, false); + } + + public void generateXML(PageState state, + Element parent) { + Party party = Kernel.getContext().getParty(); + Workspace global = m_model.getWorkspaceModel().getGlobalWorkspace(state); + PermissionDescriptor admin = + new PermissionDescriptor(PrivilegeDescriptor.ADMIN, + global, + party); + boolean hasAdmin = PermissionService.checkPermission(admin); + boolean userWorkspaces = Workspace.getConfig().getCreateUserWorkspaces(); + + if (party == null || m_readOnly || + (!hasAdmin && !m_customizable) || (!hasAdmin && !userWorkspaces)) { + m_reset.setVisible(state, false); + m_browse.setVisible(state, false); + m_edit.setVisible(state, false); + } + + super.generateXML(state, parent); + } + +} diff --git a/ccm-aap-aplaws/src/com/arsdigita/aplaws/ui/HomepageWorkspaceSelectionModel.java b/ccm-aap-aplaws/src/com/arsdigita/aplaws/ui/HomepageWorkspaceSelectionModel.java new file mode 100644 index 000000000..ca8201159 --- /dev/null +++ b/ccm-aap-aplaws/src/com/arsdigita/aplaws/ui/HomepageWorkspaceSelectionModel.java @@ -0,0 +1,287 @@ +/* + * Copyright (C) 2001 ArsDigita Corporation. All Rights Reserved. + * + * The contents of this file are subject to the ArsDigita Public + * License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of + * the License at http://www.arsdigita.com/ADPL.txt + * + * Software distributed under the License is distributed on an "AS + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or + * implied. See the License for the specific language governing + * rights and limitations under the License. + * + */ + +package com.arsdigita.aplaws.ui; + + +import com.arsdigita.bebop.RequestLocal; +import com.arsdigita.bebop.PageState; + + +import com.arsdigita.kernel.Party; +import com.arsdigita.kernel.User; +import com.arsdigita.kernel.Kernel; +import com.arsdigita.kernel.permissions.PermissionService; +import com.arsdigita.kernel.permissions.PermissionDescriptor; +import com.arsdigita.kernel.permissions.PrivilegeDescriptor; + +import com.arsdigita.london.portal.Workspace; +import com.arsdigita.london.portal.WorkspacePage; +import com.arsdigita.london.portal.WorkspacePageCollection; + +import com.arsdigita.london.subsite.Subsite; + +import com.arsdigita.util.Assert; +import com.arsdigita.util.UncheckedWrapperException; + +import com.arsdigita.domain.DataObjectNotFoundException; + +import org.apache.log4j.Logger; + + +public class HomepageWorkspaceSelectionModel { + private RequestLocal m_loaded = new RequestLocal(); + private RequestLocal m_global = new RequestLocal(); + private RequestLocal m_personal = new RequestLocal(); + private RequestLocal m_left = new RequestLocal(); + private RequestLocal m_middle = new RequestLocal(); + private RequestLocal m_right = new RequestLocal(); + private RequestLocal m_custom = new RequestLocal(); + + private static Logger s_log = Logger.getLogger + (HomepageWorkspaceSelectionModel.class.getName()); + + public WorkspacePage getPortal(PageState state, + int column) { + if (!Boolean.TRUE.equals(m_loaded.get(state))) { + loadWorkspacePages(state); + } + + if (column == 0) { // Always global portal + return (WorkspacePage)m_left.get(state); + } else if (column == 1) { // Always global portal + return (WorkspacePage)m_middle.get(state); + } else if (column == 2) { // Personal portal, fallback on global + Party party = (Party)Kernel.getContext().getParty(); + WorkspacePage right = (WorkspacePage)m_right.get(state); + PermissionDescriptor admin = + new PermissionDescriptor(PrivilegeDescriptor.ADMIN, + right, + party); + // Always ensure admin gets global portal + // don't use custom portals if asked not to + if (m_custom.get(state) == null || + PermissionService.checkPermission(admin) || + !Workspace.getConfig().getCreateUserWorkspaces()) { + s_log.debug("Returning global portal"); + return (WorkspacePage)m_right.get(state); + } else { + s_log.debug("Returning personal portal"); + return (WorkspacePage)m_custom.get(state); + } + } + + throw new UncheckedWrapperException("column out of range (0..2)"); + } + + public void onCustomize(PageState state, + int column) { + if (!Boolean.TRUE.equals(m_loaded.get(state))) { + loadWorkspacePages(state); + } + + Party party = (Party)Kernel.getContext().getParty(); + + Assert.exists(party, Party.class); + + // When customizing right column, may need to clone + // for a personal portal + // don't use custom portals if asked not to + if (column == 2 && + Workspace.getConfig().getCreateUserWorkspaces()) { + Workspace global = getTopWorkspace(); + + WorkspacePage right = (WorkspacePage)m_right.get(state); + PermissionDescriptor admin = + new PermissionDescriptor(PrivilegeDescriptor.ADMIN, + right, + party); + if (PermissionService.checkPermission(admin)) { + s_log.debug("Party has admin on global portal"); + return; + } + + if (m_custom.get(state) != null) { + s_log.debug("Party has custom portal already"); + return; + } + + s_log.debug("Looking for custom column 2"); + + Workspace custom = null; + try { + custom = global.retrieveSubworkspaceForParty(party); + s_log.debug("Found exsting personal workspce"); + } catch (DataObjectNotFoundException ex) { + s_log.debug("Created new personal workspace"); + custom = Workspace.createWorkspace( + "personal-" + party.getID(), + "Personal Workspace for " + party.getDisplayName(), + global, + (User)party + ); + } + s_log.debug("Looking for portal"); + m_personal.set(state, custom); + WorkspacePageCollection portals = custom.getPages(); + portals.addOrder(WorkspacePage.SORT_KEY); + WorkspacePage portal; + if (portals.next()) { + s_log.debug("Found portal"); + portal = portals.getPage(); + portals.close(); + } else { + s_log.debug("Create portal"); + portal = custom.addPage("Custom", "Custom page"); + } + m_custom.set(state, portal); + } + } + + + public void onReset(PageState state, + int column) { + if (!Boolean.TRUE.equals(m_loaded.get(state))) { + loadWorkspacePages(state); + } + + Party party = Kernel.getContext().getParty(); + + Assert.exists(party, Party.class); + + WorkspacePage clear = null; + + // don't use custom portals if asked not to + if (column == 2 && + Workspace.getConfig().getCreateUserWorkspaces()) { + // If we find a custom workspace, then delete it, + // otherwise just clear the portlets. + Workspace global = getTopWorkspace(); + Workspace custom = null; + try { + custom = global.retrieveSubworkspaceForParty(party); + Assert.truth(custom.getParty() != null && + custom.getParty().equals(party), + "party is not null and not admin"); + s_log.debug("Found exsting personal workspce"); + custom.delete(); + m_custom.set(state, null); + } catch (DataObjectNotFoundException ex) { + clear = (WorkspacePage)m_right.get(state); + } + } else if (column == 1) { + clear = (WorkspacePage)m_middle.get(state); + } else if (column == 0) { + clear = (WorkspacePage)m_left.get(state); + } + + if (clear != null) { + clear.clearPortlets(); + } + } + + + public Workspace getGlobalWorkspace(PageState state) { + if (!Boolean.TRUE.equals(m_loaded.get(state))) { + loadWorkspacePages(state); + } + + return (Workspace)m_global.get(state); + } + + public Workspace getPersonalWorkspace(PageState state) { + if (!Boolean.TRUE.equals(m_loaded.get(state))) { + loadWorkspacePages(state); + } + + return (Workspace)m_personal.get(state); + } + + private void loadWorkspacePages(PageState state) { + Workspace global = getTopWorkspace(); + m_global.set(state, global); + + WorkspacePage left = null; + WorkspacePage middle = null; + WorkspacePage right = null; + + WorkspacePageCollection portals = global.getPages(); + portals.addOrder(WorkspacePage.SORT_KEY); + while (portals.next()) { + WorkspacePage portal = portals.getPage(); + + if (portal.getSortKey() == 0) { + left = portal; + } else if (portal.getSortKey() == 1) { + middle = portal; + } else if (portal.getSortKey() == 2) { + right = portal; + } + } + + if (left == null) { + left = global.addPage("Left", "Left hand page"); + } + if (middle == null) { + middle = global.addPage("Middle", "Middle page"); + } + if (right == null) { + right = global.addPage("Right", "Right hand page"); + } + m_left.set(state, left); + m_middle.set(state, middle); + m_right.set(state, right); + + + Party party = (Party)Kernel.getContext().getParty(); + m_custom.set(state, null); + if (party != null) { + Workspace custom = null; + try { + custom = global.retrieveSubworkspaceForParty(party); + } catch (DataObjectNotFoundException ex) { + // nada + } + if (custom != null) { + portals = custom.getPages(); + portals.addOrder(WorkspacePage.SORT_KEY); + if (portals.next()) { + WorkspacePage portal = portals.getPage(); + m_custom.set(state, portal); + } + portals.close(); + } + s_log.debug("Is there a custom portal ?" + custom + + " - " + m_custom.get(state)); + m_personal.set(state, custom); + } + + m_loaded.set(state, Boolean.TRUE); + } + + protected Workspace getTopWorkspace() { + if (Subsite.getContext().hasSite()) { + if (s_log.isDebugEnabled()) { + s_log.debug("Return a subsite front page"); + } + return (Workspace)Subsite.getContext().getSite().getFrontPage(); + } else { + if (s_log.isDebugEnabled()) { + s_log.debug("Return the main front page"); + } + return (Workspace)Kernel.getContext().getResource(); + } + } +} diff --git a/ccm-aap-aplaws/src/com/arsdigita/aplaws/ui/ItemCategoryPicker.java b/ccm-aap-aplaws/src/com/arsdigita/aplaws/ui/ItemCategoryPicker.java new file mode 100644 index 000000000..007c269d3 --- /dev/null +++ b/ccm-aap-aplaws/src/com/arsdigita/aplaws/ui/ItemCategoryPicker.java @@ -0,0 +1,76 @@ +/* + * Copyright (C) 2001-2004 Red Hat Inc. All Rights Reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +package com.arsdigita.aplaws.ui; + +import org.apache.log4j.Logger; + +import com.arsdigita.bebop.PageState; +import com.arsdigita.bebop.parameters.BigDecimalParameter; +import com.arsdigita.bebop.parameters.StringParameter; +import com.arsdigita.categorization.ui.ACSObjectCategoryForm; +import com.arsdigita.cms.CMS; +import com.arsdigita.cms.ContentItem; +import com.arsdigita.cms.ui.authoring.*; +import com.arsdigita.kernel.ACSObject; + +/** + *

cms specific Concrete implementation of + * com.arsdigita.aplaws.ui.ACSObjectCategoryPicker.

+ * + * + * + *

Activated by pointing the parameter + * com.arsdigita.cms.category_authoring_add_form< to it.

+ */ + + +public class ItemCategoryPicker extends ACSObjectCategoryPicker { + private static final Logger s_log = Logger.getLogger(ItemCategoryPicker.class); + + + public ItemCategoryPicker(BigDecimalParameter root, + StringParameter mode) { + super(root, mode); + s_log.debug("instantiating ItemCategoryPicker"); + + } + + + /* + * @see com.arsdigita.aplaws.ui.ACSObjectCategoryPicker#getForm( + com.arsdigita.bebop.parameters.BigDecimalParameter, + com.arsdigita.bebop.parameters.StringParameter) + */ + protected ACSObjectCategoryForm getForm(BigDecimalParameter root, StringParameter mode) { + s_log.debug("getForm"); + return new ItemCategoryForm(root, mode, new TermWidget(mode, this)); + } + + + /* + * @see com.arsdigita.aplaws.ui.ACSObjectCategoryPicker#getObject() + */ + protected ACSObject getObject(PageState state) { + ContentItem item = CMS.getContext().getContentItem(); + return item.getParent(); + + } + + +} diff --git a/ccm-aap-aplaws/src/com/arsdigita/aplaws/ui/SimplePage.java b/ccm-aap-aplaws/src/com/arsdigita/aplaws/ui/SimplePage.java new file mode 100644 index 000000000..bafa8be3c --- /dev/null +++ b/ccm-aap-aplaws/src/com/arsdigita/aplaws/ui/SimplePage.java @@ -0,0 +1,69 @@ +/* + * Copyright (C) 2001-2004 Red Hat Inc. All Rights Reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +package com.arsdigita.aplaws.ui; + +import com.arsdigita.bebop.PageState; +import com.arsdigita.bebop.Label; +import com.arsdigita.dispatcher.DispatcherHelper; +import com.arsdigita.xml.Document; +import com.arsdigita.xml.Element; +import com.arsdigita.web.Web; + +/** + *

+ * Special implementation of com.arsdigita.ui.SimplePage as + * the base page to serve bebop pages.

+ * + *

Activated by pointing the parameter waf.bebop.base_page + * to it.

+ */ +public class SimplePage extends com.arsdigita.ui.SimplePage { + + public SimplePage(String application, + Label title, + String id) { + super(application, title, id); + } + + + public Element generateXMLHelper(PageState state, + Document parent) { + Element page = super.generateXMLHelper(state, parent); + + /* + * TODO: What specific funcionality is added here and what is + * its purpose and why is the bebop standard implementation + * insufficient. + * + * Two xml attributes are added in addition to the bebop standard + * implementation. + */ + if (Web.getContext().getRequestURL() != null) { + page.addAttribute("url", Web.getContext().getRequestURL().toString()); + + page.addAttribute("textOnly", "/text".equals( + DispatcherHelper + .getDispatcherPrefix(state.getRequest())) + ? "1" : "0" + ); + } + + return page; + } +} diff --git a/ccm-aap-aplaws/src/com/arsdigita/aplaws/ui/TermItemSummary.java b/ccm-aap-aplaws/src/com/arsdigita/aplaws/ui/TermItemSummary.java new file mode 100644 index 000000000..f6aee2e6e --- /dev/null +++ b/ccm-aap-aplaws/src/com/arsdigita/aplaws/ui/TermItemSummary.java @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2001-2004 Red Hat Inc. All Rights Reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +package com.arsdigita.aplaws.ui; + +import com.arsdigita.london.terms.Domain; +import com.arsdigita.london.terms.ui.AbstractTermItemSummary; + +import com.arsdigita.bebop.PageState; +import com.arsdigita.bebop.Page; +import com.arsdigita.bebop.parameters.StringParameter; + +public class TermItemSummary extends AbstractTermItemSummary { + + private StringParameter m_key; + private String m_defaultKey = "LGSL"; + + public TermItemSummary() { + m_key = new StringParameter("key"); + } + + public void register(Page p) { + super.register(p); + + p.addGlobalStateParam(m_key); + } + + public void setDefaultDomain(String key) { + m_defaultKey = key; + } + + protected Domain getDomain(PageState state) { + String key = (String)state.getValue(m_key); + + if (key == null) { + key = m_defaultKey; + } + + return Domain.retrieve(key); + } + +} diff --git a/ccm-aap-aplaws/src/com/arsdigita/aplaws/ui/TermWidget.java b/ccm-aap-aplaws/src/com/arsdigita/aplaws/ui/TermWidget.java new file mode 100644 index 000000000..028ae2edd --- /dev/null +++ b/ccm-aap-aplaws/src/com/arsdigita/aplaws/ui/TermWidget.java @@ -0,0 +1,334 @@ +/* + * Copyright (C) 2004 Red Hat Inc. All Rights Reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +package com.arsdigita.aplaws.ui; + +import java.math.BigDecimal; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import com.arsdigita.aplaws.Aplaws; +import com.arsdigita.bebop.PageState; +import com.arsdigita.bebop.form.Widget; +import com.arsdigita.bebop.parameters.ArrayParameter; +import com.arsdigita.bebop.parameters.BigDecimalParameter; +import com.arsdigita.bebop.parameters.StringParameter; +import com.arsdigita.categorization.Category; +import com.arsdigita.cms.CMS; +import com.arsdigita.cms.ContentItem; +import com.arsdigita.cms.ContentSection; +import com.arsdigita.domain.DomainCollection; +import com.arsdigita.domain.DomainObjectFactory; +import com.arsdigita.london.terms.Domain; +import com.arsdigita.london.terms.Term; +import com.arsdigita.london.terms.indexing.Indexer; +import com.arsdigita.london.terms.indexing.RankedTerm; +import com.arsdigita.persistence.DataCollection; +import com.arsdigita.persistence.SessionManager; +import com.arsdigita.xml.Element; +import com.arsdigita.xml.XML; + +/** + * A Widget for selecting Terms. Based heavily on CategoryWidget. + * + * @author mbooth@redhat.com + * + * Chris Gilbert - updated to identify each node uniquely (correct behaviour + * for polyhierarchical trees) - also, allow ajax update on all branches or + * just top level branch + * + * nb - widget applies to allocation of categories to any ACSObject hence + * xml prefix should be more generic eg bebop rather than cms. cms retained + * for compatibility with existing stylesheets + */ +public class TermWidget extends Widget { + private StringParameter m_mode; + private ACSObjectCategoryPicker m_picker; + + public TermWidget(StringParameter mode, ACSObjectCategoryPicker picker) { + super(new ArrayParameter(new BigDecimalParameter("category"))); + + m_mode = mode; + m_picker = picker; + + } + + + + protected String getType() { + return "category"; + } + + public boolean isCompound() { + return false; + } + + protected void generateWidget(PageState state, + Element parent) { + Domain domain = m_picker.getDomain(state); + + Element widget = parent.newChildElement("cms:categoryWidget", + CMS.CMS_XML_NS); + exportAttributes(widget); + + widget.addAttribute("mode", (String)state.getValue(m_mode)); + widget.addAttribute("name", getName()); + + Set ids = new HashSet(); + + BigDecimal[] values = (BigDecimal[])getValue(state); + if (values != null) { + for (int i = 0 ; i < values.length ; i++) { + ids.add(values[i]); + } + } + + // only root terms at first, the rest is loaded on-demand via AJAX + DomainCollection terms = domain.getRootTerms(); + terms.addPath("model.parents.link.sortKey"); + terms.addPath("model.parents.id"); + terms.addPath("domain.key"); + + // Pull out everything related to the category, otherwise + // another query per row is executed when doing term.getModel(); + terms.addPath("model.objectType"); + terms.addPath("model.displayName"); + terms.addPath("model.defaultDomainClass"); + terms.addPath("model.name"); + terms.addPath("model.description"); + terms.addPath("model.url"); + terms.addPath("model.isEnabled"); + terms.addPath("model.isAbstract"); + terms.addPath("model.defaultAncestors"); + + List roots = new LinkedList(); + while (terms.next()) { + Term term = (Term) terms.getDomainObject(); + roots.add(new TermSortKeyPair + (term,(BigDecimal)terms.get("model.parents.link.sortKey"))); + } + + Element el = generateCategory(widget, domain.getModel(), ids, null); + + /** + * Used by kea based keyphrase extraction facility. + * (Added r1885) + * + * @Author: terry_permeance + */ + Indexer indexer = Indexer.retrieve(domain); + if (indexer != null) { + ContentItem item = CMS.getContext().getContentItem(); + List autoTerms = indexer.index(item, 16); + Element autoCategories = widget.newChildElement("cms:autoCategories", CMS.CMS_XML_NS); + for (Iterator i = autoTerms.iterator(); i.hasNext(); ) { + RankedTerm nextRankedTerm = i.next(); + Category cat = nextRankedTerm.getTerm().getModel(); + if (!ids.contains(cat.getID())) { + String fullname = cat.getQualifiedName(" > ", false); + if (fullname != null) { + Element catEl = autoCategories.newChildElement("cms:category", CMS.CMS_XML_NS); + catEl.addAttribute("id", XML.format(cat.getID())); + catEl.addAttribute("name", cat.getName()); + catEl.addAttribute("description", cat.getDescription()); + catEl.addAttribute("isAbstract", cat.isAbstract() ? "1" : "0"); + catEl.addAttribute("isEnabled", cat.isEnabled() ? "1" : "0"); + catEl.addAttribute("sortKey", nextRankedTerm.getRanking().toString()); + catEl.addAttribute("fullname", fullname); + } + } + } + } + + if (Aplaws.getAplawsConfig().ajaxExpandAllBranches()) { + // add attribute to the parent node, so that in stylesheet + // we can look for any ancestor with this attribute (can't + // add attribute to categoryWidget element as that is not + // visible when subbranches are transformed) + el.addAttribute("expand", "all" ); + } + + for (Iterator i=roots.iterator(); i.hasNext(); ) { + TermSortKeyPair pair = (TermSortKeyPair) i.next(); + Term term = pair.getTerm(); + BigDecimal sortKey = pair.getSortKey(); + + generateRootTerm(el, term, ids, sortKey); + } + } + + public static Element generateCategory(Element parent, + Category cat, + Set selected, + BigDecimal sortKey) { + Element el = parent.newChildElement("cms:category", CMS.CMS_XML_NS); + + el.addAttribute("id", XML.format(cat.getID())); + el.addAttribute("name", cat.getName()); + el.addAttribute("description", cat.getDescription()); + el.addAttribute("isSelected", selected.contains(cat.getID()) ? "1" : "0"); + el.addAttribute("isAbstract", cat.isAbstract() ? "1" : "0"); + el.addAttribute("isEnabled", cat.isEnabled() ? "1" : "0"); + if (sortKey != null) { + el.addAttribute("sortKey", sortKey.toString()); + } + // sort order attribute added to every node so that we can + // correctly transform xml fragments returned by ajax + el.addAttribute("order", ContentSection.getConfig().getCategoryTreeOrder()); + + StringBuffer path = new StringBuffer(parent.getAttribute("fullname")); + if (path.length() > 0) path.append(" > "); + path.append(cat.getName()); + el.addAttribute("fullname", path.toString()); + + // need to uniquely identify each node in polyhierarchical trees + // so that expand/contract is applied to the correct node by + // javascript getElementByID function + StringBuffer nodeID = new StringBuffer(parent.getAttribute("node-id")); + if (nodeID.length() > 0) nodeID.append("-"); + nodeID.append(cat.getID()); + el.addAttribute("node-id", nodeID.toString()); + + return el; + } + + public static Element generateTerm(Element parent, + Term term, + Set selected, + BigDecimal sortKey) { + Category cat = term.getModel(); + Element el = generateCategory(parent, cat, selected, sortKey); + + el.addAttribute("pid", term.getUniqueID().toString()); + el.addAttribute("domain", term.getDomain().getKey()); + return el; + } + + private static void generateRootTerm(Element parent, + Term term, + Set selected, + BigDecimal sortKey) { + Element el = generateTerm(parent, term, selected, sortKey); + el.addAttribute("root","1"); + } + + public static void generateSubtree(Element parent, Category root) { + DataCollection terms = SessionManager.getSession().retrieve( + Term.BASE_DATA_OBJECT_TYPE); + terms.addEqualsFilter("model.roTransParents.id", root.getID()); + terms.addEqualsFilter("model.parents.link.relationType", "child"); + + Map children = new HashMap(); + while (terms.next()) { + Term term = (Term) DomainObjectFactory.newInstance(terms + .getDataObject()); + BigDecimal parentID = (BigDecimal) terms.get("model.parents.id"); + + List childList = (List) children.get(parentID); + if (childList == null) { + childList = new LinkedList(); + children.put(parentID, childList); + } + + childList.add(new TermSortKeyPair(term, (BigDecimal) terms + .get("model.parents.link.sortKey"))); + } + + // XXX for isSelected + Set ids = new HashSet(); + + Element el = generateCategory(parent, root, ids, null); + el.addAttribute("fullname", root.getName()); + el.addAttribute("node-id", root.getID().toString()); + el.addAttribute("order", ContentSection.getConfig().getCategoryTreeOrder()); + if (Aplaws.getAplawsConfig().ajaxExpandAllBranches()) { + // recognisable attribute has to be in the XML for each snippet that is transformed, + // hence add it to the parent + el.addAttribute("expand", "all" ); + } + + List roots = (List) children.get(root.getID()); + if (null != roots) { + Iterator i = roots.iterator(); + while (i.hasNext()) { + TermSortKeyPair pair = (TermSortKeyPair) i.next(); + Term term = pair.getTerm(); + BigDecimal sortKey = pair.getSortKey(); + + generateTermWithChildren(el, term, ids, sortKey, children); + } + } + } + + private static void generateTermWithChildren(Element parent, + Term term, + Set selected, + BigDecimal sortKey, + Map children) { + Category cat = term.getModel(); + Element el = generateCategory(parent, cat, selected, sortKey); + + el.addAttribute("pid", term.getUniqueID().toString()); + el.addAttribute("domain", term.getDomain().getKey()); + + List c = (List) children.get(cat.getID()); + if (c != null) { + Iterator i = c.iterator(); + while (i.hasNext()) { + TermSortKeyPair pair = (TermSortKeyPair) i.next(); + Term child = pair.getTerm(); + BigDecimal childSortKey = pair.getSortKey(); + + // either generate next level down, or get all levels below current + + if (Aplaws.getAplawsConfig().ajaxExpandAllBranches()) { + generateTerm(el, child, selected, childSortKey); + + } else { + generateTermWithChildren(el, child, selected, childSortKey, + children); + } + + + + } + } + } + + private static class TermSortKeyPair { + private Term m_term; + private BigDecimal m_sortKey; + + public TermSortKeyPair(Term term, BigDecimal sortKey) { + m_term = term; + m_sortKey = sortKey; + } + public Term getTerm() { + return m_term; + } + public BigDecimal getSortKey() { + return m_sortKey; + } + } +} diff --git a/ccm-aap-aplaws/web/WEB-INF/web.xml-aplaws b/ccm-aap-aplaws/web/WEB-INF/web.xml-aplaws new file mode 100644 index 000000000..a67ee1a46 --- /dev/null +++ b/ccm-aap-aplaws/web/WEB-INF/web.xml-aplaws @@ -0,0 +1,566 @@ + + + + + CCM AAP + Content and Collaboration Management + + + + log4j-conf-file + WEB-INF/conf/log4j.properties + + + + + + + + + shortcuts + com.arsdigita.london.shortcuts.ShortcutFilter + + + + subsite + com.arsdigita.london.subsite.SubsiteFilter + + + + + + + + subsite + /ccm/* + + + + + shortcuts + /* + + + + + com.arsdigita.web.CCMApplicationContextListener + + + + + + reg + com.arsdigita.web.ContextRegistrationServlet + + uri + / + + 1 + + + + legacy-dispatcher + com.arsdigita.sitenode.SiteNodeDispatcher + 3 + + + + ccm-dispatcher + com.arsdigita.web.DispatcherServlet + + fallback-servlet + legacy-dispatcher + + 2 + + + + legacy-adapter + com.arsdigita.web.LegacyAdapterServlet + + + + cache-manager + com.arsdigita.caching.CacheServlet + + + + db-test + com.arsdigita.web.monitoring.DBTestServlet + + + + versioning-log + com.arsdigita.versioning.VersioningServlet + + + + oid-redirect + com.arsdigita.web.OIDRedirectServlet + + + + resource-resolver + com.arsdigita.web.ResourceServlet + + + + + + content-section + com.arsdigita.cms.ContentSectionServlet + + + + content-type-xsl + com.arsdigita.cms.dispatcher.ContentTypeXSLServlet + + + + content-item-xsl + com.arsdigita.cms.dispatcher.ContentItemXSLServlet + + + + template-xsl + com.arsdigita.cms.dispatcher.TemplateXSLServlet + + + + + TextOnlyServlet + Text Only Servlet + + com.arsdigita.web.InternalPrefixerServlet + + + prefix + /text + + + + + PrintFriendlyServlet + Printer Friendly Output Servlet + + com.arsdigita.web.InternalPrefixerServlet + + + prefix + /print + + + + + + + + + + forum-main + com.arsdigita.forum.ForumServlet + + + + + portal-files + com.arsdigita.web.ApplicationFileServlet + + template-path + /templates/ccm-ldn-portal + + + + + navigation-files + com.arsdigita.web.ApplicationFileServlet + + template-path + /templates/ccm-ldn-navigation + + + file-resolver + com.arsdigita.london.navigation.NavigationFileResolver + + + + + portlet-type-xsl + com.arsdigita.dispatcher.PortletTypeXSLServlet + + + + + rss-files + com.arsdigita.web.ApplicationFileServlet + + template-path + /templates/ccm-ldn-rss + + + file-resolver + com.arsdigita.london.rss.RSSFileResolver + + + + + + + worker + com.arsdigita.london.search.SearchWorkerServlet + 4 + + + + search-files + com.arsdigita.web.ApplicationFileServlet + + template-path + /templates/ccm-ldn-search + + + + + AxisServlet + Apache-Axis Servlet + + org.apache.axis.transport.http.AxisServlet + + + + + + + shortcuts-files + com.arsdigita.web.ApplicationFileServlet + + template-path + /templates/ccm-ldn-shortcuts + + + + + + subsite-files + com.arsdigita.web.ApplicationFileServlet + + template-path + /templates/ccm-ldn-subsite + + + + + + + terms-files + com.arsdigita.web.ApplicationFileServlet + + template-path + /templates/ccm-ldn-terms + + + + + + + theme-files + com.arsdigita.web.ApplicationFileServlet + + template-path + /templates/ccm-ldn-theme + + + + + ThemeDownload + com.arsdigita.london.theme.dispatcher.ThemeDownloadServlet + + + + ThemePreviewServlet + Servlet to allow admins to preview look/feel + + com.arsdigita.london.theme.dispatcher.InternalThemePrefixerServlet + + + prefix + /theme + + + + + + + + + + + forum-main + /forum-main/main/* + + + + + portlet-type-xsl + /__ccm__/servlet/portlet-type/* + + + + portal-files + /ccm-ldn-portal/files/* + + + + navigation-files + /ccm-ldn-navigation/files/* + + + + + rss-files + /ccm-ldn-rss/files/* + + + + + search-files + /ccm-ldn-search/files/* + + + + AxisServlet + /services/* + + + + + + shortcuts-files + /ccm-ldn-shortcuts/files/* + + + + + subsite-files + /ccm-ldn-subsite/files/* + + + + + + terms-files + /ccm-ldn-terms/files/* + + + + + + theme-files + /theme-files/* + + + + ThemeDownload + /theme-files/download/* + + + + ThemePreviewServlet + /theme/* + + + + + + + + reg + /__ccm__/null/reg/* + + + + ccm-dispatcher + /ccm/* + + + + legacy-adapter + /__ccm__/servlet/legacy-adapter/* + + + + cache-manager + /expireCache/* + + + + db-test + /dbtest + + + + versioning-log + /versioning/* + + + + oid-redirect + /redirect/* + + + + resource-resolver + /resource/* + + + + + + content-section + /__ccm__/servlet/content-section/* + + + + content-item-xsl + /__ccm__/servlet/content-item/* + + + + content-type-xsl + /__ccm__/servlet/content-type/* + + + + template-xsl + /__ccm__/servlet/template/* + + + + TextOnlyServlet + /text/* + + + + PrintFriendlyServlet + /print/* + + + + + + + com.arsdigita.dispatcher.AccessDeniedException + /error/access-denied.jsp + + + + com.arsdigita.dispatcher.ObjectNotFoundException + /error/object-not-found.jsp + + + + com.arsdigita.kernel.permissions.PermissionException + /error/permission-denied.jsp + + + + com.arsdigita.persistence.DbNotAvailableException + /error/db-not-available.jsp + + + + com.arsdigita.db.DbNotAvailableException + /error/db-not-available.jsp + + + + java.lang.Exception + /error/general.jsp + + + + java.lang.Error + /error/general.jsp + + + + + + /WEB-INF/bebop-show.tld + /WEB-INF/bebop-show.tld + + + + /WEB-INF/bebop-define.tld + /WEB-INF/bebop-define.tld + + + diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/admin-index.css b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/admin-index.css new file mode 100644 index 000000000..4210f401a --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/admin-index.css @@ -0,0 +1 @@ +@import url(/css/acs-master.css); diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/admin-index.xsl b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/admin-index.xsl new file mode 100644 index 000000000..2d9d2dcc5 --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/admin-index.xsl @@ -0,0 +1,16 @@ + + + + + + + + + + + + + diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/atoz-admin.css.NotUsedForNow b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/atoz-admin.css.NotUsedForNow new file mode 100644 index 000000000..54c8c5bc3 --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/atoz-admin.css.NotUsedForNow @@ -0,0 +1,2 @@ +@import url("/css/acs-master.css"); +@import url("/__ccm__/static/atoz/atoz.css"); diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/atoz-admin.xsl.NotUsedForNow b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/atoz-admin.xsl.NotUsedForNow new file mode 100644 index 000000000..c5ca40b98 --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/atoz-admin.xsl.NotUsedForNow @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/atoz-index.css.NotUsedForNow b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/atoz-index.css.NotUsedForNow new file mode 100644 index 000000000..54c8c5bc3 --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/atoz-index.css.NotUsedForNow @@ -0,0 +1,2 @@ +@import url("/css/acs-master.css"); +@import url("/__ccm__/static/atoz/atoz.css"); diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/atoz-index.xsl.NotUsedForNow b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/atoz-index.xsl.NotUsedForNow new file mode 100644 index 000000000..bc76dcdc2 --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/atoz-index.xsl.NotUsedForNow @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + + + + + APLAWS+: A to Z + + + + + + Skip over navigation + | + + + + + + + + + + + +
+ + + + + + + + +
+ + + + +

A to Z List

+
+ | + + + | + + +
+ + + + + + + + + + + +
+

+home +&gt; +A to Z +

+
+
+ + + + + + + + + + +Skip to A-Z results + +
Browse the alphabetically listed information and services below
+
+
+ + + ?letter= + + | + +
+
Categories starting with the letter
+
+ + +
+
+ + + + + + + + +
+

[]

+ +
+ +
+
+
+
+
+ + + + + diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/category-step.xsl b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/category-step.xsl new file mode 100644 index 000000000..693fd7c38 --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/category-step.xsl @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/consultations-index.xsl b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/consultations-index.xsl new file mode 100644 index 000000000..40ca23cd0 --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/consultations-index.xsl @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + +
+ + + + + + +
+
+
+ + + + + bebop:dimensionalNavbar + + + + + + +  >  + + + + + + + /bebop:dimensionalNavbar + + + + + + + +
+ + + + + + + post + + + + + + +
+
+ + + + + + + + + + + + +
diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/content-center-index.xsl b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/content-center-index.xsl new file mode 100644 index 000000000..8ff5c3798 --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/content-center-index.xsl @@ -0,0 +1,69 @@ + + + + + + + + + /cms/admin/page + + + + + + <xsl:value-of select="bebop:title"/> + + + + + + + + + + + + + +
+ + + +
+ + +
+
+ + +
+ + +
+
+ +
+
+
+ + + + + diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/content-section-admin.xsl b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/content-section-admin.xsl new file mode 100644 index 000000000..5c22541fa --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/content-section-admin.xsl @@ -0,0 +1,79 @@ + + + + + + + + + + + /cms/admin/page + + + + + + () + + + + + + + + <xsl:value-of select="bebop:title"/> + + + + + + + + + + + + + +
+ + + +
+
+ +
+
+
+
+
+ + +
+
+ +
+
+
+ + +
+ +
diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/content-section-index.xsl b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/content-section-index.xsl new file mode 100644 index 000000000..9797efa5a --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/content-section-index.xsl @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + APLAWS+: <xsl:call-template name="Title"/> + + + + + + Skip over navigation + | + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +

+
+ | + + + | + + + +
+ + + + + + + +
+ +
+ diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/css/main.css b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/css/main.css new file mode 100644 index 000000000..8ba53c820 --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/css/main.css @@ -0,0 +1,1066 @@ +/* Uncomment to debug box model */ +/* +* { + border: 1px solid black !important; + margin: 2px !important; + padding: 2px !important; +} +*/ + +body { +margin: 0; +background-color: #FFF; +color: #000; +font-family: Verdana, Arial, Helvetica, sans-serif; +} + +a { + color: #333; + text-decoration: underline; +} + +a:hover { + text-decoration: underline; +} + +#startcontent { +text-decoration: none !important; +} + +.intLink { +text-decoration: none !important; +} + +.topLink { +color: #69C !important; +text-decoration: none !important; +} + + +img,a img { +border: none; +} + +.hide {display:none} + +.navHide { + position: absolute; + left: -1000px; + width: 990px; + font-size:1px; +} + + + + + + + +#header { +clear: both; +width: 100%; +background-color: #036; +margin: 0px; +border-top: 4px solid #036; +border-bottom: 1px solid #999; +} + +#logo { +float: left; +margin: 0px; +} + +#utils { +float: left; +width: 50%; +margin: 7px 0 0 0; +text-align: right; +font-size: 0.7em; +font-weight: normal; +color: #FFF; +} + +#utils a:link { +color: #FFF; +text-decoration: underline; +} +#utils a:visited { +color: #FFF; +text-decoration: underline; +} +#utils a:hover { +color: #FFF; +text-decoration: underline; +} +#utils a:active { +color: #FFF; +text-decoration: underline; +} + +#search { +float: right; +text-align: right; +margin: 0px 10px 0 0; +font-weight: bold; +color: #000; +background-color: #999; +border-top: 3px solid #999; +border-bottom: 3px solid #999; +} + +#search form { +margin: 0; +} + +#search label { +display: none; +position: absolute; +} + +.searchBox { +font-size: 0.7em; +font-weight: normal; +margin-left: 20px; +} + +.go { +font-size: 0.7em; +font-weight: normal; +margin-right: 10px; +padding: 0px; +} + +#clear { + clear: both; +} + +#tlcNav { +clear: both; +position: relative; +width: 100%; +font-size: 0.6em; +font-weight: normal; +color: #666; +background-color: #CCC; +border-top: 1px solid #9CF; +border-bottom: 1px solid #9CF; +text-transform: uppercase; +} + +#tlcNav p{ +margin: 0 2px 0 3px; +} + + +#tlcNav a{ +color: #036; +text-transform: uppercase; +text-decoration: none; +} + +#tlcNav a:hover{ +color: #FFF; +text-transform: uppercase; +text-decoration: underline; +} + +#bread { +clear: both; +position: relative; +width: 100%; +font-size: 0.7em; +border-top: 1px solid #036; +border-bottom: 1px solid #333; +background-color: #EEE; +text-transform: lowercase; +} + +#bread p { +margin: 1px 0 1px 3px; +} + +#bread a { +color: #333 !important; +text-decoration: none; +} + +#bread a:hover { +color: #000; +text-decoration: underline; +} + +#LHS{ +text-transform: capitalize; +} + +#nav{ +padding-top: 1em; +margin: 0 0 0px 2px; +} + +.navUp { +margin-top: 5px; +font-size: 0.7em; +border-bottom: 1px solid #333; +} + +.navUp a{ +text-decoration: none; +} + +.navHere { +font-size: 0.7em; +font-weight: normal; +color: #000; +background-color: #CCC; +border-bottom: 1px solid #333; +} + +.navHere p { +margin: 0 0 0 1.4em; +} + +.navHere a { +text-decoration: none; +} + +.navChild { +display: block; +font-size: 0.7em; +font-weight: normal; +color: #000; +margin: 0.2em 0 0.2em 1.4em; +border-bottom: 1px solid #9CF; +text-decoration: none; +} + +.navChild:hover { +background-color: #DDD; +text-decoration: none; +} + +#title { +padding-top: 1em; +} + +#title h1{ +font-size: 0.7em; +font-weight: bold; +margin: 5px 0 0 15px; +border-bottom: 1px solid #CCC; +} + +#greeting { +margin: 1em 1em 2em 15px; +} + +#greeting img{ +margin: 0 0 0 1em; +} + +#greeting { +font-size: 0.7em; +font-weight: normal; +color: #000; +} + +#greeting ul{ +list-style: square; +margin-left: 15px; +font-size: 1em; +font-weight: normal; +color: #000; +} + +#contentLinks{ +clear: both; +position: relative; +margin: 1em 1em 2em 15px; +border-bottom: 20px solid #FFF; +} + +#contentLinks a { +display: block; +font-size: 0.7em; +font-weight: normal; +padding: 0.2em 0 0.2em 0; +color: #000; +text-decoration: underline; +} + +#contentLinks a:hover { +text-decoration: underline; +} + +#lead { +font-weight: bold; +} + +#leadDetails { +font-weight: normal; +} + +#leadDetails .bold { +display: block; +font-weight: bold; +} + +#details { +clear: both; +position: relative; +margin: 2em 1em 2em 15px; +font-size: 0.7em; +font-weight: normal; +color: #000; +} + +#details p{ +margin: 0 0 0.3em 0; +} + +#details .bold{ +padding: 0 0.5em 0 0; +font-weight:bold; +} + +#newsDate { +text-align: right; +} + +.caption { +text-align: right; +} + +#R_image { +float: right; +margin: 0 0 1em 2em; +padding: 0 0 0 0.8em; +text-align: left; +} + +#mainBody { +clear: both; +position: relative; +margin: 2em 1em 2em 15px; +font-size: 0.7em; +font-weight: normal; +color: #000; +} + +#mainBody ul { +list-style: square; +margin-left: 15px; +font-size: 1em; +font-weight: normal; +color: #000; +} + +#mainBody ol { +list-style: decimal; +margin-left: 22px; +font-size: 1em; +font-weight: normal; +color: #000; +} + +#mainBody .bold { +font-weight: bold; +} + +.attachment { +clear: both; +position: relative; +margin: 2em 1em 2em 15px; +font-size: 0.7em; +font-weight: normal; +color: #000; +} + +.attachment h2{ +font-size: 1em; +font-weight: bold; +border-bottom: 1px solid #CCC; +} + +.attachment ul { +list-style: square; +margin-left: 15px; +font-size: 1em; +font-weight: normal; +color: #000; +} + +#sectionList { +clear: both; +position: relative; +margin: 1em 1em 2em 15px; +font-size: 0.7em; +font-weight: normal; +color: #000; +} + +#sectionList .bold { +display: block; +font-weight: bold; +} + +#sectionList a { +color: #69C; +} + +.section { +clear: both; +position: relative; +margin: 1em 1em 2em 15px; +font-size: 0.7em; +font-weight: normal; +color: #000; +} + +.section img{ +margin: 0 0 0 1em; +} + +.section ul { +list-style: square; +margin-left: 15px; +font-size: 1em; +font-weight: normal; +color: #000; +} + +.section ol { +list-style: decimal; +margin-left: 22px; +font-size: 1em; +font-weight: normal; +color: #000; +} + +.section .bold { +float: left; +display: block; +font-weight: bold; +font-size: 1em; +color: #000; +} + +#mpaDirection { +clear: both; +position: relative; +margin: 1em 1em 2em 15px; +font-size: 0.7em; +font-weight: normal; +color: #000; +} + +#mpaDirection a { +color: #000; +font-weight: bold; +text-decoration: none; +} + +#related{ +margin: 1em 2px 0 0; +border-left: 1px solid #9CF; +} + +#related h2{ +font-size: 0.7em; +font-weight: bold; +padding-left: 1em; +} + +#related a { +display: block; +width: 100%; +font-size: 0.7em; +font-weight: normal; +color: #000; +padding: 0.2em 0 0.2em 1.1em; +text-decoration: none; +} + +#related a:hover { +text-decoration: underline; +} + +#footer { +text-align: center; +border-top: 1px solid #036; +padding-top: 0.3em; +} + +#foottlc { +font-size: 0.7em; +font-weight: normal; +color: #333; +margin: 0 10%; +} + +#foottlc a{ +color: #333; +text-transform: lowercase; +} + +#legal { +border-top: 1px solid #999; +font-size: 0.65em; +font-weight: normal; +color: #666; +margin: 1em 0 0 0;} + +#legal a{ +color: #666; +} + +#compliance{ +} + +#compliance a { +} + +#compliance img { +border: 0; +} + +#searchArea { +clear: both; +position: relative; +margin: 1em 1em 2em 15px; +background-color: #CCC; +color: #333; +} + +.searchLabel { +position: absolute; +left: -1000px; +width: 990px; +font-size:1px; +} + + + + + +.searchExplanation { +margin: 1em 0 2em 3px; +font-size: 0.7em; +font-weight: normal; +color: #000; +border-top: 1px solid #999; +} + +#advGo { +text-align: right; +border-top: 1px solid #9CF; +} + +.adgo { +font-size: 0.7em; +font-weight: normal; +height: 1.6em; +background-color: #9CF; +} + +.searchAgain { +padding-left: 0.3em; +font-size: 0.7em; +font-weight: normal; +color: #000; +} + +#resultsInfo { +clear: both; +position: relative; +margin: 1em 0 1em 0.3em; +border-bottom: 1px solid #FFF; +font-size: 0.7em; +font-weight: normal; +color: #000; +} + +#resultsList { +clear: both; +position: relative; +margin: 1em 1em 2em 15px; +font-size: 0.7em; +font-weight: normal; +color: #000; +border-bottom: 20px solid #FFF; +} + +.searchResult { +clear: both; +position: relative; +margin: 1em 0 1em 0; +font-weight: normal; +color: #000 !important; +} + +.searchResult a{ +display: block; +font-weight: bold; +color: #333; +} + +#resultsPage { +clear: both; +position: relative; +margin: 1em 1em 2em 15px; +font-size: 0.7em; +font-weight: normal; +color: #000; +border-top: 1px solid #CCC; +} + +#pLeft { +float: left; +text-align: left; +border-top: 1px solid #CCC; +margin-top: -1px; +} + +#pRight { +float: right; +text-align: right; +border-top: 1px solid #CCC; +margin-top: -1px; +} + +#resultsPage a { +color: #333; +} + +.searchFilter { +margin: 0; +color: #333; +font-size: 0.7em; +} + +#advancedS { +width: 255px !important; +margin-top: 8px; +font-size: 0.7em; +border: 1px solid #666; +} + +#advlisthead { +color: #FFF; +background-color: #9CF; +} + +#remoteS { +width: 255px !important; +margin-top: 8px; +font-size: 0.7em; +border: 1px solid #666; +} + +#remotelisthead { +color: #FFF; +background-color: #9CF; +} + +#sLinks{ +margin: 3em 2px 0 0; +border-left: 1px solid #333; +} + +#sLinks h2{ +color: #000; +font-size: 0.7em; +font-weight: bold; +padding-left: 1em; +} + +.sLink { +width: 100%; +font-size: 0.7em ; +font-weight: normal; +color: #000; +padding: 1em 0 0.2em 1.1em; +} + +.sLink a { +display: block; +font-weight: bold; +color: #9CF !important; +text-decoration: none; +} + +.sLink a:hover { +text-decoration: underline; +} + + + + +#azArea { +clear: both; +position: relative; +margin: 1em 1em 1em 15px; +background-color: #CCC; +padding-bottom: 0.3em; +} + +#azSub { +clear: both; +position: relative; +margin: 2em 0 0 15px; +font-size: 0.7em; +font-weight: normal; +color: #000; +} + +#azInfo { +clear: both; +position: relative; +margin: 1em 0 1em 0; +border-bottom: 1px solid #FFF; +padding-bottom: 0.2em; +font-size: 0.7em; +font-weight: normal; +color: #000; +} + +#azPlace { +clear: both; +position: relative; +margin: 2em 0 0 0; +font-size: 0.7em; +font-weight: normal; +color: #000; +} + +#azList { +clear: both; +position: relative; +margin: 1em 1em 1em 15px; +font-size: 0.7em; +font-weight: normal; +color: #000; +border-bottom: 20px solid #FFF; +} + +.letterSelected { +font-weight: bold !important; +text-transform: uppercase; +} + +#azList h2{ +font-size: 1em; +} + +.azTitleDescription { +font-weight: normal !important; +margin: 0 0 0 1em; +} + +.azResult { +clear: both; +position: relative; +margin: 1em 0; +font-weight: normal; +color: #000 !important; +} + +.azResult a{ +display: block; +font-weight: normal; +color: #333; +} + +#siteArea { +clear: both; +position: relative; +margin: 1em 1em 1em 15px; +background-color: #CCC; +padding-bottom: 1em; +} + +#siteInfo { +clear: both; +position: relative; +margin: 1em 0 1em 0.3em; +border-bottom: 1px solid #FFF; +font-size: 0.7em; +font-weight: normal; +color: #000; +} + +#topSiteList { +clear: both; +position: relative; +margin: 1em 0 0em 0.3em; +font-size: 0.7em; +font-weight: bold; +color: #000; +} + +#topSiteList a{ +display: block; +} + +.anchor { +text-decoration: none !important; +} + +#siteList { +clear: both; +position: relative; +margin: 1em 1em 2em 15px; +font-size: 0.7em; +font-weight: normal; +color: #000; +border-bottom: 20px solid #FFF; +} + +#siteList ul { +list-style: none; +} + +.L1 { +margin: 0 !important; +} + +.L2 { +margin: 0 !important; +} + +.L3 { +margin: 0 !important; +} + +.L4 { +margin: 0 !important; +} + +.cat1 { +margin: 1em 0 1em 0; +border-top: 1px solid #9CF; +} + +.cat1 a { +font-weight: bold; +text-decoration: underline; +} + +.cat1 a:hover { +font-weight: bold; +text-decoration: underline !important; +} + +.cat2 { +margin: 1em 0 2em 2em; +border-top: 1px solid #CCC; +} + +.cat2 a { +font-weight: bold; +text-decoration: none; +} + +.cat2 a:hover { +font-weight: bold; +text-decoration: underline; +} + +.cat3 { +font-weight: normal; +margin: 0em 0 0em 0; +} + +.cat3 a { +font-weight: bold; +text-decoration: none; +} + +.cat4 { +font-weight: normal; +margin: 0em 0 0em 2em; +} + +.item { +font-weight: normal !important; +padding-left: 1em; +background-image: url("../images/arrowSitemap.gif") !important; +background-position: 0px 5px; +background-repeat: no-repeat; +} + +.toTop { +margin: 1em 0 5em 0; +} + +#dirBox { +clear: both; +position: relative; +margin: 0.5em 0 0 0 ; +padding: 0.3em; +border-top: 4px solid #CCC; +} + +#dirBox h2 { +font-size: 1.2em; +margin: 0 0 1em 0; +} + +.RSS { +padding: 0.5em 0em 0.5em 0em ; +margin: 0; +font-size: 1em; +font-weight: normal; +color: #000; +background-color: #9CF; +} + +.RSS h2 { +font-size: 1.2em; +margin: 0 0 1em 0; +border-bottom: 1px solid #666; +} + +.RSS a { +display: block; +font-weight: normal; +color: #333; +} + +.RSS a:hover { +color: #000; +} + +#poll { +clear: both; +position: relative; +margin: 0; +padding: 0.3em; +font-size: 0.7em; +font-weight: normal; +color: #000; +background-color: #CCC; +border-top: 2px solid #666; +border-bottom: 1px solid #9CF; +} + +#poll h2 { +font-size: 1.2em; +margin: 0 0 1em 0; +border-top: 1px solid #9CF; +} + +.pollQ { +border-bottom: 1px solid #FFF; +} + +.pollSend { +border-top: 1px solid #FFF; +text-align: right; +font-size: 1em; +} + +.pollSend input{ +border-top: 1px solid #FFF; +text-align: center; +font-size: 1em; +} + +.CI { +clear: both; +position: relative; +margin: 0em 0em 1em 0; +} + +.CI h2 { +font-size: 1.2em; +margin: 0 0 1em 0; +} + +#loginBox { +clear: both; +position: relative; +margin: 0 ; +padding: 0.3em; +font-size: 1em; +font-weight: normal; +color: #000; +background-color: #CCC; +border-top: 2px solid #666; +border-bottom: 1px solid #9CF; +} + +#loginBox h2 { +font-size: 1.2em; +margin: 0 0 1em 0; +} + +#loginBox ul { +list-style: none; +margin: 1em 0; +} + +#registerB { +font-weight: bold; +text-align: right; +} + +#portalTitle h1{ +font-size: 0.7em; +font-weight: bold; +margin: 5px 0 0 0px; +border-bottom: 1px solid #CCC; +} + +#portalLHS { +padding-top: 0em; +} + +.portalWrap { +font-size: 0.7em; +font-weight: normal; +color: #000; +} + +.portletWrap { +width: 100%; +} + +.dirCat { +margin-top: 5px; +border-top: 1px solid #9CF; +} + +.custLink { +margin-top: 1em; +font-size: 0.7em; +font-weight: normal; +color: #000; +border-top: 1px solid #CCC; +background-color: #EEE; +} + +.custLink a { +padding-right: 1em; +} + +.directoryEntryLink { +font-weight: bold; +} + +.logbx { +width: 100px; +font-size: 1em; +} + +.logSubmit { +text-align: right; +border-top: 1px solid #9CF; +} + +.loggo { +font-size: 1em; +font-weight: normal; +height: 1.6em; +background-color: #9CF; +} diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/css/wysiwyg.css b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/css/wysiwyg.css new file mode 100644 index 000000000..2b9fd37ca --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/css/wysiwyg.css @@ -0,0 +1,17 @@ + +.main { +color: #333 !important; +} + +.light { +color: #CCC !important; +} + +.medium { +color: #6F3 !important; +} + +.dark { +color: #336 !important; +font-style: bold !important; +} diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/categorised-forum/forum-categories.xsl b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/categorised-forum/forum-categories.xsl new file mode 100644 index 000000000..c53df6013 --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/categorised-forum/forum-categories.xsl @@ -0,0 +1,308 @@ + + + + + + + + + + + +
+ +

Assign Categories

+
+ + + + + +
+
+ + + + + + + + +   + + Add categories + + + + + + +
+ There are no categories assigned in this context +
+
+ +
    + + +
  • +   + + +   + Remove + +
  • +
    +
+
+
+
+
+
+ + + + + + + + + + + + + + +
+ + + +
+
+
+

Selected Categories

+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + catSelect('', ' + + ', '') + + + + + + + + + + + + + + + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + + + + + + ' + \' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/categorised-forum/forum-index.xsl b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/categorised-forum/forum-index.xsl new file mode 100644 index 000000000..ad7703bd7 --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/categorised-forum/forum-index.xsl @@ -0,0 +1,1311 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Forum + + + + + + + + + + + Skip over navigation + | + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + + | + + + + | + +
+

+
+
+ +
+
+
+ + + + + + + + + + postOdd + + + postEven + + + + + + + + + + + + + + + + + + + + + + + +
Thread:
+ + +
+ +
+
+
+
+ + + ( + + ) + +
+ + +
+ + + Approve + + +   + + + + + Reject + + +   + + + + Edit + + +   + + + + Delete + + +   + + +   +   +   + + Reply + +   + Reply +   + +
+
+
+ +
+ Posted:  + +  by  + + + +
+ +
+ + + +
+ +
+
+
+ +
+
+
+ +
+ +
+ +
+ + +
+ {./description} +
+
+
+
+
+ + + + + + +
+ +
+
+ + + +
+
+ + + + + + + + + + <<< Previous + +   +   + + Page  +   + of  +   + +   +   + + + + + + + + + Next >>> + + +
+
+
+ + + +
+
+ +
+
Filter by topic:
+ +
+ +
+
+
+
+
+
+ + +
+
+
Thread
+
Author
+
Replies
+
Last Post
+
+ +
No messages have been posted yet
+
+ + +
+ + + + odd + + + even + + + + + +
+ + + +
+
+ +
+
+ +
+
+ +
+ +
+
+
+ + + +
+ + +
+
+
Subject
+
Replies
+
Author
+
Last Post
+
Status
+
Delete
+
+
+ +
+ You are not subscribed to any threads +
+
+ + + + + postOdd + + + postEven + + + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+ + +
+ + + + false + + + +
+
+ + + + +
+
+
Topic
+
Threads
+
Last Post
+
+ + + + + + postOdd + + + postEven + + + +
+
+ + + + + + + + + + + + + + + + + +
+
+ +
+
+ + + + + + n/a + + +
+
+
+ + + + + postOdd + + + postEven + + + +
+
+ + + + + + + + + + + None + + + + None + + +
+
+ +
+
+ + + + + + n/a + + +
+
+
+
+
+ + +
+
Forum Alerts
+
+ +
+
+ + + + +
+
Thread Alerts
+
+ +
+
+ + + +
+ + + + +
+ + + + +
+
+
+   +
+
+
+
+ + + + + + +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + forum member list +
+
+ + + +
+
+
+
+ + + +
+ +
+
+   +
+
+ + +
+ +
+
+   +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
+ + + post + + + + + + + +
+

+ +
+ +
+
+ + + + + +
+
+ +
+
+ +
+
+
+ + + + +
+
+
+
+
+ +
+ + + + +
+
Subject:
+
+ +
+ +
+
+
+
+
Message:
+
+ +
+ +
+
+
+ + + +
+
Topic:
+
+ +
+
+
+ +
+ Original Message: +
+
+
+ +
+
+
+
+ +
+ + + + + + +
+
+ + + +
+
+ +
+ Posted + +
+
+
+ +
+
+
+ + + + + + + + + + + + +
+
Image:
+
+ +
+ +
+
+
+
+
Description:
+
+ +
+ +
+
+
+
+
+ +
+
+
+ + + + + + +
+ No images attached to this post +
+
+ + + + + + + postOdd + + + postEven + + + +
+
+
+ {@caption} +
+
+ +
+
+ Remove +
+
+
+
+
+
+
+ + + + + + +
+ +
+ +
+
File:
+
+ +
+ +
+
+
+
+
Description:
+
+ +
+ +
+
+
+
+
+ +
+
+
+ + + + +
+ No files attached to this post +
+
+ +
+ + + + + + + + + + + + +
File
Description
+
+ + + + + + + + + + + Remove
+
+
+
+ +
+ +
+ + +
+ +
+
+ + + + + + + Post New Message + + + Add Images (optional) + + + Add Files (optional) + + + Preview New Message + + + + + + + + + + + + Edit Message + + + Edit Images + + + Edit Files + + + Preview Changes + + + + + + + + + + + + Post reply + + + Add Images (optional) + + + Add Files (optional) + + + Preview Reply + + + + + + + + +
+
+ + + +
+

+
+
+ +
+
Name:
+
+ +
+ +
+
+
+
+
Description:
+
+ +
+ +
+
+
+
+
+ +
+
+
+ +
+
+ + + + +
+ + + + + +
+

+
+
+
+ + +
+
+
+ +
+ +
+
+
+
+
+
+ +
+ +
+
+
+
+ + +
+ + + + + +
+
+
+
+ +
+
+
+ +
+
+
+
+ +
+ + +
+
+ + + +
+ +
+
+ +
+
+ +
+
+ +
+
+ + +
+ + +
+
+ +
+
+ +
+
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ +
+ + + + + + + + + + + + + + +
+ You are watching this thread. To stop watching this thread, click "Stop Watching Thread" below. +
+ +
+ + + + + + + + + + + +
+ + + + +
+ + + +
+
+
+ + diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/forum-index.css b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/forum-index.css new file mode 100644 index 000000000..31ac138af --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/forum-index.css @@ -0,0 +1,402 @@ +@import url("css/main.css"); +<--@import url("/css/acs-master.css");--> +<--@import url("/css/tabbed-pane/tabbed-pane.css");--> + + +body { + margin: 0; + background-color: #FFF; + color: #000; + font-family: Verdana, Arial, Helvetica, sans-serif; +} + +.forum { + font-size: 0.8em; + margin: 8px 0 10px 2px; +} + +.content { + margin-left: 10px; +} + + +/*form submission*/ + +.forumSelect { + margin-top: 0.2em; + float:left; +} +.forumButton input { + float:left; + margin-top: 0.2em; + margin-right: 5px; + padding-left: 2px; + padding-right: 2px; + color: #000; + background-color: #CCC; + vertical-align: middle; + border: 1px solid #000; + +} + +.submit { + clear: both; + margin-left: 100px; +} + +/* +view all threads + +*/ + +#selectLabel { + float:left; + color: white; + padding-top: 0.2em; + padding-left: 0.2em; +} +#selectCategory { + background-color: #999; + height: 2.2em; + +} + +#threadHead { + background-color: #E5F3FC; + font-weight: bold; + height: 1.5em; + padding-left: 0.2em; + margin-bottom: 0.3em; + +} +#noMessages { + clear:both; + float:left; + width: 100%; + +} +.subject { + clear: both; + float:left; + width: 190px; + padding: 4px 0 4px 22px; + background-position: 4px 0.7em; + background-repeat: no-repeat; + background-image: url("images/forum/read.gif"); +} + +.topic { + clear:both; + float:left; + width: 212px; + padding: 4px 0 4px 0px; +} + +.threadSubject { + clear:both; + float:left; + width: 140px; + padding: 4px 0 4px 0px; +} + +.author { + float:left; + width: 100px; + padding: 4px 0 4px 0px; + text-align: center; +} + +.replies { + float:left; + text-align: center; + width: 60px; + padding: 4px 0 4px 0px; +} + +.threads { + float:left; + text-align: center; + width: 75px; + padding: 4px 0 4px 0px; +} + +.status { + float:left; + width: 75px; + padding: 4px 0 4px 0px; +} + +.delete { + float:left; + text-align: center; + width: 50px; + padding: 4px 0 4px 0px; +} + +.lastPost { + float: left; + text-align: center; + width: 150px; + padding: 4px 0 4px 0px; +} + +#newTopicLink a { + padding: 4px 0 4px 22px; + background-position: 0px 0.3em; + background-repeat: no-repeat; + background-image: url("images/forum/post-16x16.gif"); +} + +#viewAllTopicsLink a { + float: left; + padding: 4px 15px 4px 22px; + background-position: 0px 0.3em; + background-repeat: no-repeat; + background-image: url("images/forum/back-to-16x16.gif"); + +} + +#watchTopicLink a { + float: left; + padding: 4px 0 4px 22px; + background-position: 0px 0.3em; + background-repeat: no-repeat; + background-image: url("images/forum/watch-16x16.gif"); + margin-left: 0.8em; + margin-bottom: 0.8em; +} + +#info { + clear:both; + padding: 4px 0 4px 22px; + background-position: 0px 0.6em; + background-repeat: no-repeat; + background-image: url("images/forum/info-16x16.gif"); + color: green; + margin-left: 0.8em; +} + +.post { + clear: both; + margin-bottom: 0.8em; + font-size: 1em; +} + +.postOdd { + background-color: #EFEFEF; + +} + +.postEven { + background-color: #FFFFFF; +} + +#topic { + margin-bottom: 0.8em; + font-weight: bold; +} + +.actions { + float: right; + margin-right: 0.3em; +} + +.header { + float: left; + margin-left: 0.3em; + font-weight: bold; +} + +.message { + clear: both; + float: left; + width:98%; + margin-left: 0.3em; + margin-bottom: 0.5em; +} + +.postDetails { + clear: both; + float: left; + margin-bottom: 0.5em; + margin-left: 0.3em; +} + +.bar { + clear:both; + float:left; + width: 98%; + padding-left: 0.3em; + padding-right: 0.3em; + padding-top: 0.5em; + padding-bottom: 0.5em; +} + +.replyBar { + clear:both; + padding-right: 0.3em; + padding-top: 0.5em; + padding-bottom: 0.5em; +} + + +.clearGroup { + clear:both; + margin-bottom: 0.5em; +} + +.columnOne { + float: left; + width: 100px; + font-size: 1em; +} + +.columnOneWide { + float: left; + width: 130px; + font-size: 1em; +} + +.columnTwo { + display: inline; + font-size: 1em; + margin: 0; +} + + +.columnTwo input { + width: 300px; +} + +.columnTwo select { + width: 300px; +} + + +.columnTwo textArea { + width: 300px; +} + +.columnThree { + font-size: 1em; +} + +#title { + float:left; + width: 100%; + + font-size: 1.2em; +} + + +fieldset { + padding: 0.3em 0.3em 0.3em 0.3em; +} + +.fileLink { + margin-left: 0.5em; + clear: both; + float:left; +} + + +textarea { + width: 450px; +} + +.validationError { + color: red; + margin-left: 100px; +} + +#images { + clear: both; + float:left; + margin-left: 0.3em; +} + +#plainText { + clear: both; + font-size: 1em; + margin-bottom: 0.5em; +} + +li { + list-style-position: inside; +} + +.expiry input { + width: 50px; +} + +.fileTable { + width: 100%; +} + + +pre { + + font-size: 1em; +} + + +/* Contents of tabbed-pane.css - forum tabs */ + +div.tabbed-pane div, div.tabbed-pane table.tab-set, div.tabbed-pane table.tab-set td { + margin: 0; + border: 0; + padding: 0; +} + +div.tabbed-pane table { + border-collapse: collapse; +} + +div.tabbed-pane table.tab-set { + margin-left: 10px; +} + +div.tabbed-pane table.tab-set a { + text-decoration: none; + color: rgb(63,63,63); +} + +div.tabbed-pane table.tab-set td.tab-label { + margin-left: 4px; + padding: 5px 0 3px 10px; + + background: rgb(225,225,225) url(/css/tabbed-pane/tab-unselected.png) no-repeat; +} + +div.tabbed-pane table.tab-set td.tab-end { + width: 10px; + background: url(/css/tabbed-pane/tab-unselected-end.png) no-repeat; +} + +div.tabbed-pane table.tab-set td.current-tab-label { + margin-left: 4px; + padding: 5px 0 3px 10px; + background: rgb(162,30,30) url(/css/tabbed-pane/tab-selected.png) no-repeat; + color: white; +} + +div.tabbed-pane table.tab-set td.current-tab-end { + width: 10px; + background: url(/css/tabbed-pane/tab-selected-end.png) no-repeat; +} + +div.tabbed-pane table.tab-set td.tab-spacer { + width: 4px; +} + +div.tabbed-pane table.rule { + margin-left: 10px; + width: 100%; + background: rgb(162,30,30) url(/css/tabbed-pane/tab-bar.png) repeat-x; + height: 10px; +} + +div.tabbed-pane div.current-pane { + width: 100%; +} + diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/forum-index.xsl b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/forum-index.xsl new file mode 100644 index 000000000..86e99e146 --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/forum-index.xsl @@ -0,0 +1,1308 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Forum + + + + + + + + + + Skip over navigation + | + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + + | + + + + | + +
+

+
+
+ +
+
+
+ + + + + + + + + + postOdd + + + postEven + + + + + + + + + + + + + + + + + + + + + + + +
Thread:
+ + +
+ +
+
+
+
+ + + ( + + ) + +
+ + +
+ + + Approve + + +   + + + + + Reject + + +   + + + + Edit + + +   + + + + Delete + + +   + + +   +   +   + + Reply + +   + Reply +   + +
+
+
+ +
+ Posted:  + +  by  + + + +
+ +
+ + + +
+ +
+
+
+ +
+
+
+ +
+ +
+ +
+ + +
+ {./description} +
+
+
+
+
+ + + + + + +
+ +
+
+ + + +
+
+ + + + + + + + + + <<< Previous + +   +   + + Page  +   + of  +   + +   +   + + + + + + + + + Next >>> + + +
+
+
+ + + +
+
+ +
+
Filter by topic:
+ +
+ +
+
+
+
+
+
+ + +
+
+
Thread
+
Author
+
Replies
+
Last Post
+
+ +
No messages have been posted yet
+
+ + +
+ + + + odd + + + even + + + + + +
+ + + +
+
+ +
+
+ +
+
+ +
+ +
+
+
+ + + +
+ + +
+
+
Subject
+
Replies
+
Author
+
Last Post
+
Status
+
Delete
+
+
+ +
+ You are not subscribed to any threads +
+
+ + + + + postOdd + + + postEven + + + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+ + +
+ + + + false + + + +
+
+ + + + +
+
+
Topic
+
Threads
+
Last Post
+
+ + + + + + postOdd + + + postEven + + + +
+
+ + + + + + + + + + + + + + + + + +
+
+ +
+
+ + + + + + n/a + + +
+
+
+ + + + + postOdd + + + postEven + + + +
+
+ + + + + + + + + + + None + + + + None + + +
+
+ +
+
+ + + + + + n/a + + +
+
+
+
+
+ + +
+
Forum Alerts
+
+ +
+
+ + + + +
+
Thread Alerts
+
+ +
+
+ + + +
+ + + + +
+ + + + +
+
+
+   +
+
+
+
+ + + + + + +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + forum member list +
+
+ + + +
+
+
+
+ + + +
+ +
+
+   +
+
+ + +
+ +
+
+   +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
+ + + post + + + + + + + +
+

+ +
+ +
+
+ + + + + +
+
+ +
+
+ +
+
+
+ + + + +
+
+
+
+
+ +
+ + + + +
+
Subject:
+
+ +
+ +
+
+
+
+
Message:
+
+ +
+ +
+
+
+ + + +
+
Topic:
+
+ +
+
+
+ +
+ Original Message: +
+
+
+ +
+
+
+
+ +
+ + + + + + +
+
+ + + +
+
+ +
+ Posted + +
+
+
+ +
+
+
+ + + + + + + + + + + + +
+
Image:
+
+ +
+ +
+
+
+
+
Description:
+
+ +
+ +
+
+
+
+
+ +
+
+
+ + + + + + +
+ No images attached to this post +
+
+ + + + + + + postOdd + + + postEven + + + +
+
+
+ {@caption} +
+
+ +
+
+ Remove +
+
+
+
+
+
+
+ + + + + + +
+ +
+ +
+
File:
+
+ +
+ +
+
+
+
+
Description:
+
+ +
+ +
+
+
+
+
+ +
+
+
+ + + + +
+ No files attached to this post +
+
+ +
+ + + + + + + + + + + + +
File
Description
+
+ + + + + + + + + + + Remove
+
+
+
+ +
+ +
+ + +
+ +
+
+ + + + + + + Post New Message + + + Add Images (optional) + + + Add Files (optional) + + + Preview New Message + + + + + + + + + + + + Edit Message + + + Edit Images + + + Edit Files + + + Preview Changes + + + + + + + + + + + + Post reply + + + Add Images (optional) + + + Add Files (optional) + + + Preview Reply + + + + + + + + +
+
+ + + +
+

+
+
+ +
+
Name:
+
+ +
+ +
+
+
+
+
Description:
+
+ +
+ +
+
+
+
+
+ +
+
+
+ +
+
+ + + + +
+ + + + + +
+

+
+
+
+ + +
+
+
+ +
+ +
+
+
+
+
+
+ +
+ +
+
+
+
+ + +
+ + + + + +
+
+
+
+ +
+
+
+ +
+
+
+
+ +
+ + +
+
+ + + +
+ +
+
+ +
+
+ +
+
+ +
+
+ + +
+ + +
+
+ +
+
+ +
+
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+ +
+ + + + + + + + + + + + + + +
+ You are watching this thread. To stop watching this thread, click "Stop Watching Thread" below. +
+ +
+ + + + + + + + + + + +
+ + + + +
+ + + +
+
+
+ + diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/images/forum/archived-16x16.gif b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/images/forum/archived-16x16.gif new file mode 100644 index 000000000..2d3db34c2 Binary files /dev/null and b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/images/forum/archived-16x16.gif differ diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/images/forum/back-to-16x16.gif b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/images/forum/back-to-16x16.gif new file mode 100644 index 000000000..95d374a32 Binary files /dev/null and b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/images/forum/back-to-16x16.gif differ diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/images/forum/delete-16x16.gif b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/images/forum/delete-16x16.gif new file mode 100644 index 000000000..867d48eee Binary files /dev/null and b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/images/forum/delete-16x16.gif differ diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/images/forum/edit-16x16.gif b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/images/forum/edit-16x16.gif new file mode 100644 index 000000000..3e9a90a47 Binary files /dev/null and b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/images/forum/edit-16x16.gif differ diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/images/forum/info-16x16.gif b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/images/forum/info-16x16.gif new file mode 100644 index 000000000..5acb95064 Binary files /dev/null and b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/images/forum/info-16x16.gif differ diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/images/forum/post-16x16.gif b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/images/forum/post-16x16.gif new file mode 100644 index 000000000..07b98d107 Binary files /dev/null and b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/images/forum/post-16x16.gif differ diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/images/forum/read.gif b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/images/forum/read.gif new file mode 100644 index 000000000..26d0d6fb5 Binary files /dev/null and b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/images/forum/read.gif differ diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/images/forum/reply-16x16.gif b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/images/forum/reply-16x16.gif new file mode 100644 index 000000000..0395fca0f Binary files /dev/null and b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/images/forum/reply-16x16.gif differ diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/images/forum/watch-16x16.gif b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/images/forum/watch-16x16.gif new file mode 100644 index 000000000..01e001924 Binary files /dev/null and b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/forum-example/images/forum/watch-16x16.gif differ diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/forum-index.css b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/forum-index.css new file mode 100644 index 000000000..132b7d723 --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/forum-index.css @@ -0,0 +1,2 @@ +@import url("/css/acs-master.css"); +@import url("/__ccm__/static/forum/forum.css"); diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/forum-index.xsl b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/forum-index.xsl new file mode 100644 index 000000000..b7b067338 --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/forum-index.xsl @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/images/aplaws-logo-small.png b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/images/aplaws-logo-small.png new file mode 100644 index 000000000..3280df920 Binary files /dev/null and b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/images/aplaws-logo-small.png differ diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/images/aplaws-logo.gif b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/images/aplaws-logo.gif new file mode 100644 index 000000000..e0fa5a9ee Binary files /dev/null and b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/images/aplaws-logo.gif differ diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/images/aplawsplus.gif b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/images/aplawsplus.gif new file mode 100644 index 000000000..576719675 Binary files /dev/null and b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/images/aplawsplus.gif differ diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/images/arrowSitemap.gif b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/images/arrowSitemap.gif new file mode 100644 index 000000000..278673f15 Binary files /dev/null and b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/images/arrowSitemap.gif differ diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/images/spacer.gif b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/images/spacer.gif new file mode 100644 index 000000000..5bfd67a2d Binary files /dev/null and b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/images/spacer.gif differ diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/images/tlcArrow-s.gif b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/images/tlcArrow-s.gif new file mode 100644 index 000000000..9be407815 Binary files /dev/null and b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/images/tlcArrow-s.gif differ diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/images/tlcArrow.gif b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/images/tlcArrow.gif new file mode 100644 index 000000000..8230bf333 Binary files /dev/null and b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/images/tlcArrow.gif differ diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/images/w3c-css.bmp b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/images/w3c-css.bmp new file mode 100644 index 000000000..7f7cf9381 Binary files /dev/null and b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/images/w3c-css.bmp differ diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/images/w3c-css.png b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/images/w3c-css.png new file mode 100644 index 000000000..020c75a73 Binary files /dev/null and b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/images/w3c-css.png differ diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/images/w3c-xhtml.bmp b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/images/w3c-xhtml.bmp new file mode 100644 index 000000000..e0328dc6f Binary files /dev/null and b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/images/w3c-xhtml.bmp differ diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/images/w3c-xhtml.png b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/images/w3c-xhtml.png new file mode 100644 index 000000000..3855210c6 Binary files /dev/null and b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/images/w3c-xhtml.png differ diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/lib/body.xsl b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/lib/body.xsl new file mode 100644 index 000000000..0c1921625 --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/lib/body.xsl @@ -0,0 +1,48 @@ + + + + + + + + +
+ +
+
+ + +
+ APLAWS> +
+
+ + +

+
+ +
+
+ + +
+ +
+
+ + +
+ + +
+
+ +
diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/lib/head.xsl b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/lib/head.xsl new file mode 100644 index 000000000..d92c8db7e --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/lib/head.xsl @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/lib/header.xsl b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/lib/header.xsl new file mode 100644 index 000000000..65a6df7d4 --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/lib/header.xsl @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/lib/leftNav.xsl b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/lib/leftNav.xsl new file mode 100644 index 000000000..14fb8bf89 --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/lib/leftNav.xsl @@ -0,0 +1,86 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/lib/lib.xsl b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/lib/lib.xsl new file mode 100644 index 000000000..fec9b385d --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/lib/lib.xsl @@ -0,0 +1,562 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +| +
+

+ +home&nbsp;&gt;&nbsp; +| + + + + + + + + +| +&nbsp;&gt;&nbsp; + + + + + + +

+| +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Data Protection and Information Sharing notice. No personal information you have given us will be passed on to third parties for commercial purposes. The Council's policy is that all information will be shared among officers and other agencies where the legal framework allows it, if this will help to improve the service you receive and to develop other services. If you do not wish certain information about you to be exchanged within the Council, you can request that this does not happen. + + + + + + + + + + + + + + + + + + + + + + + +A to Z + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ + /cms-service/stream/image/?image_id= + + +
+
+

+ +

+
+ +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + Dated Links + + + + + + + + + + + +
+

Related Files:

+ +
+
+
+ + + + !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ +  ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ + + + !'()*-.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz~ + + 0123456789ABCDEF + + + + + + + + + + + + + + + + + + + Warning: string contains a character that is out of range! Substituting "?". + 63 + + + + + + + + + + + + + + + + + + + +
+

Associated Links:

+ +
+
+
+ + + + +

Related Items

+ + + + | +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +APLAWS+: + + + + + + + + + + + + + +20 + - + + + 01 + 02 + 03 + 04 + 05 + 06 + 07 + 08 + 09 + 10 + 11 + 12 + + - + + + + + + +
+ + +
+
+ + +
diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/lib/lib.xsl~ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/lib/lib.xsl~ new file mode 100644 index 000000000..ad362ffde --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/lib/lib.xsl~ @@ -0,0 +1,565 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +| +
+

+ +home&nbsp;&gt;&nbsp; +| + + + + + + + + +| +&nbsp;&gt;&nbsp; + + + + + + +

+| +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Data Protection and Information Sharing notice. No personal information you have given us will be passed on to third parties for commercial purposes. The Council's policy is that all information will be shared among officers and other agencies where the legal framework allows it, if this will help to improve the service you receive and to develop other services. If you do not wish certain information about you to be exchanged within the Council, you can request that this does not happen. + + + + + + + + + + + + + + + + + + + + + + + +A to Z + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ + /cms-service/stream/image/?image_id= + + +
+
+

+ +

+
+ +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + Dated Links + + + + + + + + + + + +
+

Related Files:

+ +
+
+
+ + + + !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ +  ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ + + + !'()*-.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz~ + + 0123456789ABCDEF + + + + + + + + + + + + + + + + + + + Warning: string contains a character that is out of range! Substituting "?". + 63 + + + + + + + + + + + + + + + + + + + +
+

Associated Links:

+ +
+
+
+ + + + +

Related Items

+ + + + | +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +APLAWS+: + + + + + + + + + + + + + +20 + - + + + 01 + 02 + 03 + 04 + 05 + 06 + 07 + 08 + 09 + 10 + 11 + 12 + + - + + + + + + +
+ + +
+
+ + +
diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/lib/page.xsl b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/lib/page.xsl new file mode 100644 index 000000000..1f8f422cc --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/lib/page.xsl @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + <xsl:call-template name="aplaws:pageTitle"/> + + + + + + + + + + + + + + + + diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/lib/user-banner.xsl b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/lib/user-banner.xsl new file mode 100644 index 000000000..1e9b0bb8d --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/lib/user-banner.xsl @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + + +
       + + + + +
+ +   + +   + + +
+
+ + + + + + + + +
+
+
+ + + + + + + + + +
       + + + + +
+ You are not currently logged in +
+
+ + + + + Login + +
+
+
+
+ +
diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/navigation-admin.css b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/navigation-admin.css new file mode 100644 index 000000000..278ecd8e6 --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/navigation-admin.css @@ -0,0 +1,2 @@ +@import url("/css/acs-master.css"); +@import url("/__ccm__/apps/navigation/xsl/admin.css"); diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/navigation-admin.xsl b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/navigation-admin.xsl new file mode 100644 index 000000000..6233f0d7a --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/navigation-admin.xsl @@ -0,0 +1,16 @@ + + + + + + + + + + + + + diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/navigation-directory.xsl b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/navigation-directory.xsl new file mode 100644 index 000000000..6a8c818af --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/navigation-directory.xsl @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/navigation-index.xsl b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/navigation-index.xsl new file mode 100644 index 000000000..b18a3896b --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/navigation-index.xsl @@ -0,0 +1,18 @@ + + + + + + + + + diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/navigation-services.xsl b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/navigation-services.xsl new file mode 100644 index 000000000..6a8c818af --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/navigation-services.xsl @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/navigation-sitemap.xsl b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/navigation-sitemap.xsl new file mode 100644 index 000000000..aae53c18b --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/navigation-sitemap.xsl @@ -0,0 +1,191 @@ + + + + + + + + + + + + + + + + + + + + + APLAWS+: Site Map + + + + + + Skip over navigation + | + + + + + + + + + + + + + + + + + + + + +
+ + + + +

Site Map

+
+ | + + + | + + + +
+ +
+ + + + + + + + + +
+

+home +&gt; +Site Map +

+
+
+ + + + + + + + + + + + + + + + +
+ +
Select an area to view
+ +
+ + | + +
+
+ + + +
+ + + + + + + +
+ + +
    + +
  • + +
      + +
    • + +
        + +
      • + + +
          + +
        • +
          +
        +
        + +
      • +
        +
      + +
    • +
      +
    +
  • + +
  • top
  • +
    +
+
+ + + + + +
+
+ + + + +
diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/navigation-summary.xsl b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/navigation-summary.xsl new file mode 100644 index 000000000..f88dd0c97 --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/navigation-summary.xsl @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PIDTerm# items
+
+ +
diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/portal/application-directory-portlet.xsl b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/portal/application-directory-portlet.xsl new file mode 100644 index 000000000..d3ec401c9 --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/portal/application-directory-portlet.xsl @@ -0,0 +1,28 @@ + + + + + + + + + + + + +
+ + + + +
+
+ + +
diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/portal/content-item-portlet.xsl b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/portal/content-item-portlet.xsl new file mode 100644 index 000000000..5dd4f948d --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/portal/content-item-portlet.xsl @@ -0,0 +1,28 @@ + + + + + + + + + + + + + diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/portal/content-sections-portlet.xsl b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/portal/content-sections-portlet.xsl new file mode 100644 index 000000000..a38288f70 --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/portal/content-sections-portlet.xsl @@ -0,0 +1,41 @@ + + + + + + + +
+ + + +
+
+ + admin + + admin +
+
+ + + +
+ + + table_row_odd + table_row_even + + + +
+
+
+ +
diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/portal/directory-portlet.xsl b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/portal/directory-portlet.xsl new file mode 100644 index 000000000..6aab1c230 --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/portal/directory-portlet.xsl @@ -0,0 +1,40 @@ + + + + + + +
+

+ +
+
+ + + + + +
+
+ + + + | + + +
+
+ + + + + + + +
diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/portal/freeform-html-portlet.xsl b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/portal/freeform-html-portlet.xsl new file mode 100644 index 000000000..317ee6eab --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/portal/freeform-html-portlet.xsl @@ -0,0 +1,16 @@ + + + + +
+ +
+
+ +
diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/portal/lib.xsl b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/portal/lib.xsl new file mode 100644 index 000000000..856679e83 --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/portal/lib.xsl @@ -0,0 +1,53 @@ + + + + + + + + + + + + Move Down + + + Move Up + + + Configure + + + Delete + + + + + + {$title} + + + + + + + + + + +
+
+ + +
+ +
+
+ +
+ diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/portal/login-portlet.xsl b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/portal/login-portlet.xsl new file mode 100644 index 000000000..3b982ff14 --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/portal/login-portlet.xsl @@ -0,0 +1,48 @@ + + + + + + + +
+
+ + + + +

+ Welcome   + +| + + +
+ + +

Site Login

+ +
+
Email:
+
Password:
+
+ +
+
+ + +
+
+ +
diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/portal/portlets.xsl b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/portal/portlets.xsl new file mode 100644 index 000000000..7af695964 --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/portal/portlets.xsl @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/portal/rss-feed-portlet.xsl b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/portal/rss-feed-portlet.xsl new file mode 100644 index 000000000..d2fd5570e --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/portal/rss-feed-portlet.xsl @@ -0,0 +1,95 @@ + + + + + +
+

+ + + + +
+
+ + +
+ +
+
+ + + + + + + + + + + + + + + + + + + +
+ +
+
+
+ + + + + + +
+ +
+
+
+ + +
+ +
+
+ +
+
+ + + + + + + +
+ +
+
+
+ + +
+ +
+
+ +
+
+ +
diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/portal/tasklist-portlet.xsl b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/portal/tasklist-portlet.xsl new file mode 100644 index 000000000..720efab26 --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/portal/tasklist-portlet.xsl @@ -0,0 +1,62 @@ + + + + + + +
+ + + +
+
+ + + +
+
+ +
+
+ , + + No assigned users + + + 1 assigned user + + + assigned users + +
+
+ + + +

No tasks to display.

+
+ + + + + + + + table_row_odd + table_row_even + + + + + +
Item TitleActionDue DateStatus
+
+
+ +
diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/portal/time-of-day-portlet.xsl b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/portal/time-of-day-portlet.xsl new file mode 100644 index 000000000..1d4dd4075 --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/portal/time-of-day-portlet.xsl @@ -0,0 +1,15 @@ + + + + + + + + + diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/portal/workspace-directory-portlet.xsl b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/portal/workspace-directory-portlet.xsl new file mode 100644 index 000000000..1e533ace5 --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/portal/workspace-directory-portlet.xsl @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/search-admin.xsl b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/search-admin.xsl new file mode 100644 index 000000000..1d143a00e --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/search-admin.xsl @@ -0,0 +1,21 @@ + + + + + + + + + diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/search-index.xsl b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/search-index.xsl new file mode 100644 index 000000000..ba76bc478 --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/search-index.xsl @@ -0,0 +1,590 @@ + + + + + + + + + + + + + + + + + + + + + + APLAWS+: Search + + + + + + Skip over navigation + | + + + + + + + + + + + + + + + + + + +
+ + + + +

Search

+
+ | + + + + | + + + + + + +
+ + +
+ + + + + +
+

+ home + &gt; + + + Search + Advanced Search + Remote Search + + + +

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + Explanation of Search + +
+ +
+ Type your query: + + + + +
+ + +
+ + +
+
+ +
+ + + + +
+
+ + + Explanation of Advanced Search + +
+ +
+ Type your query: + + + + + +
Select the content types you would like to search
+ + + + + + +
+ + +
+ + +
+
+ +
+ + + + +
+
+ + + Explanation of Remote Search + +
+ +
+ Type your query: + + + + + +
Select the connected websites you would like to search
+ + + + + + + + + + +
+ + +
+ + +
+
+ +
+ + + + + + + + + + + + + +
+
+ +
+ + + + +
+ | +
+
+ +
+
+ + + + + +You searched for &gt; + + + There were no results for your search + + + + results found + + + + + + + + + + + +
+ + + There were no results for your search + + + + displaying results + + to + + + + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Displaying page + + of + + (maximum of + + results per page) +
+
+
+ + + + + + + + + + + + + + + + + + odd + even + + + + + +
ScoreTitleSummary
+
+ + + + + + + + + + + + + + + + + + + +
+ + + + +
+
+ + + + Query: + + + + + + + + + Types: + + + + + + + + + Categories: + + + + + + + + + + + hidden + + + + + + + + +
diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/shortcuts-index.css b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/shortcuts-index.css new file mode 100644 index 000000000..4210f401a --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/shortcuts-index.css @@ -0,0 +1 @@ +@import url(/css/acs-master.css); diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/shortcuts-index.xsl b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/shortcuts-index.xsl new file mode 100644 index 000000000..a4e103c89 --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/shortcuts-index.xsl @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/subsite-index.css b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/subsite-index.css new file mode 100644 index 000000000..4210f401a --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/subsite-index.css @@ -0,0 +1 @@ +@import url(/css/acs-master.css); diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/subsite-index.xsl b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/subsite-index.xsl new file mode 100644 index 000000000..cb04a688c --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/subsite-index.xsl @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/terms-index.css b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/terms-index.css new file mode 100644 index 000000000..15fd56956 --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/terms-index.css @@ -0,0 +1,6 @@ +@import url(/css/acs-master.css); +/* Following import is valid if terms is executed in its own */ +/* web application context (ccm-ldn-terms) */ +/* @import url(/ccm-ldn-terms/__ccm__/apps/terms/xsl/index.css); */ +/* import if installed in the main (common) web context */ +@import url(/__ccm__/apps/terms/xsl/index.css); diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/terms-index.xsl b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/terms-index.xsl new file mode 100644 index 000000000..0ee053d22 --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/terms-index.xsl @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/theme-index.css b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/theme-index.css new file mode 100644 index 000000000..4210f401a --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/theme-index.css @@ -0,0 +1 @@ +@import url(/css/acs-master.css); diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/theme-index.xsl b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/theme-index.xsl new file mode 100644 index 000000000..44121cbda --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/theme-index.xsl @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/types/Address.xsl b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/types/Address.xsl new file mode 100644 index 000000000..70f9f4de5 --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/types/Address.xsl @@ -0,0 +1,65 @@ + + + + + + + + +
+ +

+Address: +

+
+ +

+Post Code: +

+
+ +

+Country: +

+
+ +

+Phone: +

+
+ +

+Mobile: +

+
+ +

+Fax: +

+
+ +

+Email: +

+
+ +

+Notes: +

+
+
+ + +
+

+ +

+ +
+ +
+
diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/types/Agenda.xsl b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/types/Agenda.xsl new file mode 100644 index 000000000..17c62d363 --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/types/Agenda.xsl @@ -0,0 +1,98 @@ + +]> + + + + + + +
+

+Date: +

+

+Location: +

+

+Attendees: +

+

+Contact Info: +

+
+ +
+

+Subject Items: + +

+

+Summary: + +

+ +
+
+ + + + + + + + +&nbsp; + + + + + + +Mon +Tue +Wed +Thu +Fri +Sat +Sun + + +&nbsp; + + +st +nd +rd +th + +&nbsp; + + +Jan +Feb +Mar +Apr +May +Jun +Jul +Aug +Sep +Oct +Nov +Dec + + +&nbsp; +20 +&nbsp; + + + + + +
\ No newline at end of file diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/types/Article.xsl b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/types/Article.xsl new file mode 100644 index 000000000..5053ca2d6 --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/types/Article.xsl @@ -0,0 +1,36 @@ + +]> + + + + + + + +
+ +
+ +/cms-service/stream/image/?image_id= + + +
+
+ +
+ +
+ +
+
+ +
+ +
+
+ diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/types/ContentTypes.xsl b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/types/ContentTypes.xsl new file mode 100644 index 000000000..e385d8209 --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/types/ContentTypes.xsl @@ -0,0 +1,77 @@ + +]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/types/Event.xsl b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/types/Event.xsl new file mode 100644 index 000000000..9a25fec03 --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/types/Event.xsl @@ -0,0 +1,60 @@ + +]> + + + + + +
+

+Event Type: +

+

+Event Date: + +

+

+Start Date: + +

+

+Start Time: + +

+

+End Date: + +

+

+End Time: + +

+

+Contributor: +

+

+Location: +

+

+Map: + +View map + +

+

+Cost: +

+
+
+

+ +

+ +
+
+
\ No newline at end of file diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/types/FileStorageItem.xsl b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/types/FileStorageItem.xsl new file mode 100644 index 000000000..af6319ba7 --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/types/FileStorageItem.xsl @@ -0,0 +1,25 @@ + + + + + + + + + +
+ +
+ +
+View in browser +&nbsp;|&nbsp; +Save to disk +
+ +
+
diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/types/InlineSite.xsl b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/types/InlineSite.xsl new file mode 100644 index 000000000..e87f28ef8 --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/types/InlineSite.xsl @@ -0,0 +1,29 @@ + +]> + + + + + + + + + + + + + diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/types/Job.xsl b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/types/Job.xsl new file mode 100644 index 000000000..b6e1c034d --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/types/Job.xsl @@ -0,0 +1,46 @@ + +]> + + + + + + +
+

+Grade: +

+

+Department: +

+

+Salary: +

+

+Ref: +

+

+Closing Date: +

+

+Contact: +

+
+
+

+Job Description: + +

+

+Person Specification: + +

+ +
+
+
\ No newline at end of file diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/types/LegalNotice.xsl b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/types/LegalNotice.xsl new file mode 100644 index 000000000..4a6bfe587 --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/types/LegalNotice.xsl @@ -0,0 +1,23 @@ + +]> + + + + + + +
+

+UID: +

+
+
+ +
+
+
\ No newline at end of file diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/types/Minutes.xsl b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/types/Minutes.xsl new file mode 100644 index 000000000..43360a7ae --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/types/Minutes.xsl @@ -0,0 +1,34 @@ + +]> + + + + + +
+

+Description of Minutes: +

+

+Minutes ID Number: +

+

+Attendees At Meeting: +

+
+
+

+ +

+

+Action Item: +

+ +
+
+
diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/types/MultiPartArticle.xsl b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/types/MultiPartArticle.xsl new file mode 100644 index 000000000..c37146903 --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/types/MultiPartArticle.xsl @@ -0,0 +1,151 @@ + +]> + + + + + +
+
+ +
+
+ + | + + + + + + + + + + + +
+ + + + + + + + + + + + + + + | + + + + + + + +
+ +
+ + + + + +
+ + + + /cms-service/stream/image/?image_id= + + + + + + + + +
:
+
+ + + + +
+ + + + + +
+ +
+ +
\ No newline at end of file diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/types/NewsItem.xsl b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/types/NewsItem.xsl new file mode 100644 index 000000000..8a7030c51 --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/types/NewsItem.xsl @@ -0,0 +1,41 @@ + +]> + + + + + + +
+ +
+ +
+ + +
+ +/cms-service/stream/image/?image_id= + + +
+
+
+ +
+ +
+
+ +
+ +
+
+ + +
\ No newline at end of file diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/types/PressRelease.xsl b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/types/PressRelease.xsl new file mode 100644 index 000000000..a25dd2dc5 --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/types/PressRelease.xsl @@ -0,0 +1,30 @@ + +]> + + + + + +
+

+Ref Code: +

+

+Contact: +

+
+ +
+

+

+ +
+ +
+ +
\ No newline at end of file diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/types/Service.xsl b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/types/Service.xsl new file mode 100644 index 000000000..2758df8a3 --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/types/Service.xsl @@ -0,0 +1,40 @@ + +]> + + + + + + +
+

+Opening Times: +

+

+Contact: +

+

+Address: +

+
+ +
+

+Services Provided: + +

+

+Summary: + +

+ +
+ +
+ +
\ No newline at end of file diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/types/SiteProxy.xsl b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/types/SiteProxy.xsl new file mode 100644 index 000000000..2d4aa9b97 --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/types/SiteProxy.xsl @@ -0,0 +1,21 @@ + +]> + + + + + + + + + + + + \ No newline at end of file diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/workspace-admin.xsl b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/workspace-admin.xsl new file mode 100644 index 000000000..30d9905c6 --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/workspace-admin.xsl @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + diff --git a/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/workspace-index.xsl b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/workspace-index.xsl new file mode 100644 index 000000000..e76ed6279 --- /dev/null +++ b/ccm-aap-aplaws/web/__ccm__/themes/aplaws-generic/workspace-index.xsl @@ -0,0 +1,173 @@ + + + + + + + + + + + + + + + + + + + + + + APLAWS+: <xsl:call-template name="Title"/> + + + + + + + Skip over navigation + | + + + + + + + + + + + + + + + + + + + + + + + +
+

+home +

+
+
+ + + + + + + + + + + + + + +
+ + + +

APLAWS+ Plus

+
+ + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + +back to user's view +delete area +customise area + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ diff --git a/ccm-aap-aplaws/web/aplaws/schema.jsp b/ccm-aap-aplaws/web/aplaws/schema.jsp new file mode 100644 index 000000000..2b463c183 --- /dev/null +++ b/ccm-aap-aplaws/web/aplaws/schema.jsp @@ -0,0 +1,56 @@ + + + + + + + + + + StringParameter typeParam = new StringParameter("type"); + String type = (String)typeParam.transformValue(request); + + StringParameter contextParam = new StringParameter("context"); + String context = (String)contextParam.transformValue(request); + + BooleanParameter wrapAttrParam = new BooleanParameter("wrapAttr"); + Boolean wrapAttr = (Boolean)wrapAttrParam.transformValue(request); + + BooleanParameter wrapRootParam = new BooleanParameter("wrapRoot"); + Boolean wrapRoot = (Boolean)wrapRootParam.transformValue(request); + + BooleanParameter wrapObjectParam = new BooleanParameter("wrapObject"); + Boolean wrapObject = (Boolean)wrapObjectParam.transformValue(request); + + String ns = type.replace('.', '/'); + + ObjectTypeSchemaGenerator gen = new ObjectTypeSchemaGenerator("object", + "http://aplaws.org/schemas/content-types/" + ns); + if (Boolean.TRUE.equals(wrapObject)) { + gen.setWrapObjects(true); + } else if (Boolean.FALSE.equals(wrapObject)) { + gen.setWrapObjects(false); + } + if (Boolean.TRUE.equals(wrapAttr)) { + gen.setWrapAttributes(true); + } else if (Boolean.FALSE.equals(wrapAttr)) { + gen.setWrapAttributes(false); + } + if (Boolean.TRUE.equals(wrapRoot)) { + gen.setWrapRoot(true); + } else if (Boolean.FALSE.equals(wrapRoot)) { + gen.setWrapRoot(false); + } + gen.walk(type, context); + + Document doc = new Document(gen.getRoot()); + + response.setContentType("text/plain; charset=UTF-8"); + Writer writer = response.getWriter(); + writer.write(doc.toString()); + + diff --git a/ccm-aap-aplaws/web/assets/fckeditor/config/fckconfigOpenCCM.js b/ccm-aap-aplaws/web/assets/fckeditor/config/fckconfigOpenCCM.js new file mode 100644 index 000000000..fe045f7ce --- /dev/null +++ b/ccm-aap-aplaws/web/assets/fckeditor/config/fckconfigOpenCCM.js @@ -0,0 +1,137 @@ +/* + * FCKeditor - The text editor for internet + * Copyright (C) 2003-2005 Frederico Caldeira Knabben + * + * Licensed under the terms of the GNU Lesser General Public License: + * http://www.opensource.org/licenses/lgpl-license.php + * + * For further information visit: + * http://www.fckeditor.net/ + * + * File Name: fckconfigOpenCCM.js + * Editor configuration settings for use in admin interface in APLAWS/OpenCCM. + * This configuration is designed to match the following goals: + * - Easy useage of the editor + * - Clean HTML output, this means for example that no deprected elements are useable from the editor + * + * This file is organized in the same way as the page of the FCKEditor documentation showing all config options. + * The page can be found here: http://docs.fckeditor.net/FCKeditor_2.x/Developers_Guide/Configuration/Configuration_Options + * + * - Semantic HTML output. This means that elements like are prefered against such as + * This config is loaded from the Javascript in the calling page using AFTER the + * default fckconfig.js is loaded. + * + * File Authors: + * Chris Burnett (orginale fckeditordefaultstyle.js for APLAWS) + * Jens Pelzetter + */ + +/* **************************************************************************************************************** */ + + +/* Editor Behavior + --------------- */ + +FCKConfig.AutoDetectPasteFromWord = false ; //Paste Word text directly to the editor (only IE) +FCKConfig.CleanWordKeepsStructure = true ; //Prefer to keep HTML structure, not layout +FCKConfig.DocType = '' ; +FCKConfig.ForcePasteAsPlainText = true ; //Text pasted in from another app will appear as plain text + + +/* Styles + ------ */ + +FCKConfig.StylesXmlPath = FCKConfig.EditorPath + 'config/fckconfigOpenCCM.xml' ; //Some styles + +/* HTML Output + ----------- */ + +FCKConfig.FormatOutput = true ; //Format output code +FCKConfig.FormatSource = true ; + +/* User interface + -------------- */ + +FCKConfig.ContextMenu = ['Generic','Link','Anchor','Image','Flash','Select','Textarea','Checkbox','Radio','TextField','HiddenField','ImageButton','Button','BulletedList','NumberedList','TableCell','Table','Form'] ; +FCKConfig.ImageDlgHideLink = true ; +FCKConfig.ImageDlgHideAdvanced = true ; +FCKConfig.ShowDropDialog = true ; +FCKConfig.ToolbarSets["AplawsBasic"] = [ + ['Style','-','OrderedList','UnorderedList','Subscript', 'Superscript', '-','SpellCheck','Link','Unlink','RemoveFormat','-','ImageButton', '-', 'AdvToolbar', 'About'] +] ; + +FCKConfig.ToolbarSets["AplawsAdvanced"] = [ + ['Style','-','OrderedList','UnorderedList','Subscript', 'Superscript'], + ['Cut','Copy','Paste','PasteText','PasteWord','Undo','Redo','RemoveFormat'], + ['Find','Replace','SelectAll', '-','SpellCheck'], + '/', + ['Link','Unlink','Anchor','-','Source'], + ['SimpleToolbar'] +] ; + + +// Replace the Advanced toolbar with AplawsAdvanced & setup the Basic toolbar to use the AplawsBasic toolbar +// The two toolbars are used to support the dynamic toolbar switching plugin. +// Set the Default to be the Basic version so that the editor loads the basic toolbar on startup. + +FCKConfig.ToolbarSets["Advanced"] = FCKConfig.ToolbarSets["AplawsAdvanced"] ; +FCKConfig.ToolbarSets["Basic"] = FCKConfig.ToolbarSets["AplawsBasic"] ; +FCKConfig.ToolbarSets["Default"] = FCKConfig.ToolbarSets["Basic"] ; + +/* Advanced + -------- */ +FCKConfig.FirefoxSpellChecker = true ; +FCKConfig.SpellChecker = 'ieSpell' ; // 'ieSpell' | 'SpellerPages' +FCKConfig.IeSpellDownloadUrl = 'http://www.iespell.com/rel/ieSpellSetup211325.exe' ; + +/* File Browser and Updoader + ------------------------- */ + +FCKConfig.LinkBrowser = true ; +FCKConfig.LinkBrowserURL = "/ccm/content/admin/search.jsp?useURL=true&widget=getElementById('txtUrl')" ; +FCKConfig.LinkBrowserWindowWidth = FCKConfig.ScreenWidth * 0.7 ; // 70% +FCKConfig.LinkBrowserWindowHeight = FCKConfig.ScreenHeight * 0.7 ; // 70% + + +/* +FCKConfig.ToolbarSets["AplawsBasic"] = [ + ['Style','-','Bold','OrderedList','UnorderedList','-','SpellCheck','Link','Unlink','RemoveFormat','-','AdvToolbar'] +] ; + +FCKConfig.ToolbarSets["AplawsAdvanced"] = [ + ['Style','-','Bold','OrderedList','UnorderedList'], + ['Cut','Copy','Paste','PasteText','PasteWord','Undo','Redo','RemoveFormat'], + ['Find','Replace','SelectAll', '-','SpellCheck'], + '/', + ['UniversalKey'], + ['Link','Unlink','Anchor','-','Source'], + ['SimpleToolbar'] +] ; + + +// Replace the Advanced toolbar with AplawsAdvanced & setup the Basic toolbar to use the AplawsBasic toolbar +// The two toolbars are used to support the dynamic toolbar switching plugin. +// Set the Default to be the Basic version so that the editor loads the basic toolbar on startup. + +FCKConfig.ToolbarSets["Advanced"] = FCKConfig.ToolbarSets["AplawsAdvanced"] ; +FCKConfig.ToolbarSets["Basic"] = FCKConfig.ToolbarSets["AplawsBasic"] ; +FCKConfig.ToolbarSets["Default"] = FCKConfig.ToolbarSets["Basic"] ; + + +FCKConfig.StylesXmlPath = FCKConfig.EditorPath + 'config/fckconfigstyledefault.xml' ; +FCKConfig.ContextMenu = ['Generic','Link','Anchor','Image','Flash','Select','Textarea','Checkbox','Radio','TextField','HiddenField','ImageButton','Button','BulletedList','NumberedList','TableCell','Table','Form'] ; + +FCKConfig.SpellChecker = 'ieSpell' ; // 'ieSpell' | 'SpellerPages' +FCKConfig.IeSpellDownloadUrl = 'http://www.iespell.com/rel/ieSpellSetup211325.exe' ; + +FCKConfig.ImageDlgHideLink = true ; +FCKConfig.ImageDlgHideAdvanced = true ; + +FCKConfig.FlashDlgHideAdvanced = true ; + +FCKConfig.LinkBrowser = true ; +FCKConfig.LinkBrowserURL = "/ccm/content/admin/search.jsp?useURL=true&widget=getElementById('txtUrl')" ; +FCKConfig.LinkBrowserWindowWidth = FCKConfig.ScreenWidth * 0.7 ; // 70% +FCKConfig.LinkBrowserWindowHeight = FCKConfig.ScreenHeight * 0.7 ; // 70% +*/ + diff --git a/ccm-aap-aplaws/web/assets/fckeditor/config/fckconfigOpenCCM.xml b/ccm-aap-aplaws/web/assets/fckeditor/config/fckconfigOpenCCM.xml new file mode 100644 index 000000000..c5ebd5667 --- /dev/null +++ b/ccm-aap-aplaws/web/assets/fckeditor/config/fckconfigOpenCCM.xml @@ -0,0 +1,12 @@ + + + + +