===================== ==== Underscores ==== ===================== IDs cannot contain underscores. Fix migration to convert underscores to dashes. (Default publication includes an ID with an underscore.) Add validation to Create Resource forms. ID Validation - No duplicate IDs, spaces, periods, exclamation marks, or underscores. UNID Validation - No < and >. Must be valid directory name (deny .:!,?*_"&+#/\| and leading ~). Can fix Location for easier parsing on underscores. Currently only allows 2-character languages. ================== ==== Security ==== ================== Implement in SitetreeGenerator and ContentSourceFactory. Resource-level Security. Access Control List in Resource.xml same as read Inherit from Resource using Structure. Multiple inheritance: default allow or deny. Authors field? Publication: Master group: "admin" Group bypasses security and is allowed to do anything. Revision-level security. Action-level security. "Not allowed" returns Sorry page (rather than error). Specify sorry page: module://lenya/sorry.xml "Does not exist" returns same Sorry page. Sorry page: Add link to login if not logged in. Workflow: Reproduce Lenya-1.2's approve/publish system. ============================================== ==== Links and i18n - Editor and Handling ==== ============================================== BUG?: Remove Attributes.removeAttribute from i18nTransformer.translateAttributes(). Add "Choose Lenya doc link" dialog to Xinha. Add "Create file resource" to Xinha. === XML Serializer Automatically pass through i18n Transformer using current module and current language. Build catalog using Module Inheritance. Cannot be file level inheritance; local overrides only local tags, and others are from ancestors. i18n Transformer must not remove i18n tags that are not in current catalog. Unknown messages must wait for other Modules and HTMLSerializer. === HTML Serializer Add link rewriting. Change to appropriate A tag. Change to appropriate IMG tag. Automatically pass through i18n Transformer using current language. Build catalog from current module (including inheritance), publication, and global. Replace unfound i18n tags with default. === CreateRevisionTransformer Replace all A and IMG tags with appropriate RESOURCE tags, creating new Resources as necessary. ==================== ==== Known Bugs ==== ==================== Saving xhtml Resource did not change "edit" version as specified. Workaround: Select old version before new Revision. Do we still need "edit" named revision? Alternate: Add links to "edit" Module for opening and editing each revision. Add "edit" button to live pages? File Resource: Create Translation does not save upload. Create Revision works. Edit File: Setting Default Language does not save. (Fixed for XML earlier, probably also affects Links.) ============================== ==== Other Critical Tasks ==== ============================== Edit: Add link for return to live. Need Administration navigation. Like 1.2 or 2.x? Test: Module Index Files (module.xml works, but did not test /modules/moduleid/myindex.index Include Cocoon in Lenya-1.3 so installing Cocoon separately is not required. (Or downgrade Xalan and SourceResolver to the versions included in Cocoon so replacing files before building Cocoon is not required.) Edit Screens: Use NamedRevisions. Only explicitly included Modules should appear on New Resource list. Inherited Modules should not appear. Configure default pub to exclude "text" (until working), "xml", and "homepage". Edit-Save must clear Cache. (Or "cache" Module must check if Resource is still valid.) Flat Migration: Test. Creates "live" structure? Needs mkdirs()? flat Module: content3.xsl sets doctype. Need to use rules in {pub}/parameter-doctype.xmap Migration: Copy XSLTs to proper modules and patch as needed. Flat Module: Use Content directory from publication.xconf flat/clean: move pub to ../pubs12, then copy content/index|relation|resource modules config/??? Add default option for Live Module to use old "xslt" directory when handling hierarchical content. ============================== ==== Non-critical Updates ==== ============================== FlatIndex: Need to synchronize so filename is created once. Currently creates each index twice. Administration navigation - Create Resource, return from edit resource. Modules are only added to Publications when server is started. Should ModuleSourceFactory check for changes before erroring? Modules - Add Resource description distinguished from Module description. DESIGN: Does Module differentiation by ContentType cause confusion with inheritance? A module overriding one type will intercept calls to all types. Remove Module Types. Let Module devs handle. Replace uses of post.xsp with RequestGenerator. Resource @defaultlanguage is used to return one Translation for all requests. Does it work? Xinha adds xmlns:xhtml="http://www.w3.org/1999/xhtml to some elements (P H1). Replace with Move page.css from {pub}\resources\shared\css\page.css to Module (xml?). Fix xml/live.xmap, page2html.xsl in home and xml, and Lenya global XMAPs. Add to migration? Check synchronization of HashMaps. ============================= ==== ToDo List from 2006 ==== ============================= === 1.2.x Conversion Session Module: login.xsp -> NullPointerException === Admin Screens Admin screen: Navigation between User/Group maintenance and Site maintenance. Admin screen: Language chooser Since all code is based on current language, may need method to have Admin menus in different language than Resource displayed. Probably add langauge as parameter: http:server/pub/admin/en/docid_xx.html === Search Doctype Configuration should define Body. Title is assumed from Revision Title? Or allow override? Multiple Languages? Or separate indexes for each language? Filter by type? doctype? IndexPart? URLs: Use a Structure? All flat (UNIDs)? Choice? (I dislike UNIDs in URLs, but a Structure limits the results to what it contains.) ======================= ==== Enhancements ==== ======================= [This section lists new abilities not required to complete 1.2 functionality.] Make a publication based on pubs/{publication-id}.xml. Content, Modules, and security can be placed outside Lenya removing the need for a publication directory, "relate" Module/Structure Editor: - Add Categories (placeholder for menu entries with no document) using quotes to distinguish from UNIDs. - Search other Revisions for Title when no "live" Revision or "live" Title is blank. - Add "Copy Resource and all descendants" action. - Add export/import to assist copying amongst Structures. - Filter Resources on Types. Replace System.out messages with logger. Saving Structure should only update indexes dependent on that Structure. Revisions: Remember base revision for each edit to enhance with branching history for diff viewer. Diff viewer showing progress and compare any two revisions. Edit Resource: Add description for Revisions, edited separately. Add return to edit and live. Add show version. Allow configuration of Named Revisions other than needed for Indexes. Currently only Indexes can specify Revision Names. Workflow should also configure new Revision Names and allow limiting to a specific Resource type. Many Modules were created before 1.3's SourceFactories and Transformers. Revise xml,file,link Modules to use Create Transformers directly without JS Flow. Try adding final slash to request before sending error. "relate" Module - Allow selection of "live" revision for Structures. Transactions - All changes saved to content/transactions filename formatted when(revision).unid.lang: 1207025524250.{uuid}.en.xml = Revision 1207025524250.{uuid}.en.ext = Revision Files 1207025524250.{uuid}.en.translation.xml = Translation 1207025524250.{uuid}.xml = Resource Create transaction during change, not when deleting. Future functions include scheduled zipping of transactions, monthly and annually. cocoon: protocol does not follow Module inheritance for missing files. Example: /pub/home/parameters should use /pub/xhtml/parameters if modules/home/module.xmap is missing. Needing module.xmap defeats purpose of inheritance. (module: protocol follows inheritance so resource-exists works as test for Module.) New Translation: Warn if no language chosen but other fields changed for new translation. Check {pub} directory for publication.xml. Module to clean migrated publications: copy content, modules, security. For content, fix type and remove doctype. Move publication.xml to {pub}. Admin screens: Resource: Change ID - Must Update structures and run Indexer. Move CreateResourceTransformer and CreateRevisionTransformer to content package with implementation code in content.flat. Admin: Revision History -- Use slider at top. Start at "edit" revision. WYSIWYG RichText fields (must open in XHTML editor to edit). publication:name - should return name, currently stored in publication.xml. Why? Move to publication.xconf? Must be available from Publication.java and PublicationModule.java Resource: Active dates: start, expire. Careful: All children will disappear from Index when parent is deactivated. Admin screen: User/Group editor Admin screen: User editor Change FileUser to allow dynamic fields. Show all fields. Pub can configure list of fields with default values. Editor: Save checks for static links and replaces with RESOURCE link tag. Create new Resource type=link for external links if they do not exist. Need syntax for embedded links. . Structure needed to create human-readable URLs. HTMLSerializer should replace with Anchor tag containing Title. Replace with HTML for editing, then replace with RESOURCE link tag during save. Editor: Create reusable CSS classes? Create "style" with settings of current location. Maintenance? For one RichText field, all RichText fields of the same type, for whole Publication, or Lenya server? Will be easier when CSS are Resources. Editor: Fix tables. Is there a better plugin? JCR/Jackrabbit datastore. == FlatIndexPart Parse using / forcing begining, * for any element, and // for any number of elements Example: token = "/xml" must be root Example: token = "/*/*" must be second level Example: token = "//xml/file" must be file under xml, but xml can be at any level. == Indexer Indexer should only update dependent Indexes when a Structure is saved. Optimize Indexer to only run for language changed. If exists and needs updating, check update freq. If cache-and-update (assume true), start new thread for update. Match identical indexconfs, same filters. ?superset include unless different value for same name. Could cause issues if poor code copies extra attributes. === 1.3.1 build/lenya directory should be self-contained runnable. Separate Cocoon building from Lenya build process so Cocoon download and build is optional. Correct ant target files. (Eclipse dislikes undeclared dependencies.)