* Fixed buggy characters in ChangeLog (mostly Kaspers surname)
[Packages/TYPO3.CMS.git] / TODO.txt
1 *******************************************
2 TODO LIST for the Core of TYPO3.
3
4 Maintained by Kasper
5 Do not modify without permission!
6 *******************************************
7
8 [@KASPER: ALSO SEE MY MAIL FOLDERS about Core development!]
9
10
11 General Backend:
12 - CHECK: What is the number of supported page levels? 20 or 100?
13 - Feature: "admin" can click a button which wipes out all record-lockings. (Message-Id: <200301281752.23246.mundaun@gmx.ch>)
14 - Feature: Controlling access to function menu modules as well (thus we could have a user-module inside ?Template? which could edit the constants field) (including workspace access)
15 - Feature: Web >plugins removed
16 - Substitute "->include_once[] = ...." with "require_once()" directly in classes - BUT the problem is that class files accesses $TYPO3_CONF_VARS (for XCLASS inclusion) and that is not accessible from the function including the script unless "global $TYPO3_CONF_VARS" is set before inclusion. THEN all XCLASSes of that class will break!!!
17 - Check the source for "require_once()" calls inside of methods and make sure "global $TYPO3_CONF_VARS" are set before (also update CGL document).
18 - Backend Interface: Dont show edit icons if editing cannot be performed due to recordEditAccessInternals() / editlock for pages (pid)
19 - class.t3lib_dmailer.php into direct_mail module?
20 - Avoiding the symlinks in core?
21 - GETll can be configured to show the label key so wrong labels can quickly be changed (using the key to find label in translator interface)
22 - lock cHash to id as well (otherwise spamming cache-table can be done with a series of cHash values/parameters and traversing known page ids)
23
24 TCEmain
25 (Related: DBint, User Admin module, logging-display, TCEforms, Web>List)
26 - Clean-up and commenting of the class.
27 - CHARSET:
28 - Note: No charset conversion is done in TCEmain. It is expected that the content enters TCEmain in the charset of the backend in general.
29 - LOGGING:
30 - Finally define the API to the "sys_log" table!
31 - Add detection of workspace
32 - Rewrite log-display, support writing to text-files, syslog on unix (API?)
33 - Reports/Monitoring: Show/send-by-email daily reports over accumulated activity (grouped by workspace/user/pagetree section/modules etc) [Richard at Dassault wanted this]
34 - Activity of individual users in a summary form
35 - Activity in branches of a page tree
36 - Activity in a workspace
37 - Finish the logging of TCEmain actions (delete/copy)
38 - Versioning: sys history/sys_log track the "uid" of a record and version swapping will invalidate the integrity of this! How to deal with?
39 - Centralized logging:
40 - Create a core API for logging data from all kinds of places in the system. (substituting the current sys_log?)
41 - Create an extension which shows how the log data can be stored in a) database, b) files
42 - extension "logit" / PEAR::log package?
43 - INTEGRITY / CLEAN_UP / REFERENCE TRACKING:
44 - Implement kill/restore of "deleted" records.
45 - Record Reference tracking in a table in TCEmain
46 - Tracks DB-references, Files and softrefs (including in FlexForms)
47 - Index is generated per record with an API call (both fe/be), making it easy to maintain it and possible to completely regenerate it
48 - Used for:
49 - Check before deletion that a record is not used?
50 - Used by applications (like TemplaVoila) where it is hard to track references in FlexForms
51 - Used for import/export module and anywhere else where we are looking up references!
52 - Basis for integrity checks
53 - clearing caching more effectively
54 - Record clean-up functionality
55 - Remove references to deleted records (also deleted-to-recycler records? Maybe "deleted-to-recycler" references are important to remove in order to make sure "recycler" records are not selected!) (refs to MM for both tables/files)
56 - Remove references to lost files etc.
57 - Cleaning FlexForm XML according to the current DS (old XML garbage might be left if DS changed)
58 - Versioning:
59 - Flush old versions (requires general clean-up features to be complete!)
60 - Check for "lost" versions during swap?
61 - PERMISSIONS:
62 - Permission API: Used for any DB-element in system (See Sune Vestergaards suggestion)
63 - More flexible setting of permissions
64 - Additional checks apart from read/edit/new/delete etc.
65 - Permissions for any record
66 - Can work in conjunction with current page permissions or simply work instead of them.
67 - Access Lists?
68 - CHECK: That permissions are properly evaluated, especially:
69 - Languages (there was a bug proved)
70 - Workspaces / Versioning
71 - Moving of records (source/destination PIDs)
72 - Security in tcemain: Uploaded/Attached files are allowed to be in ONLY a relative path OR in the "lockDir"!
73 - Roles (ideas about adding roles to the permission concept of TYPO3):
74 - There could be, say, 4 default roles: author, editor, administrator, developer
75 - Users can be assigned "membership" of a role (basically a "role" is like a hardcoded "user-group")
76 - Like you can configure database fields in TCA to be an "excludeField" you could also configure which ROLES can edit the field.
77 - Possibly each role could assign membership of some groups.
78 - Tools > User Admin:
79 - Features helping to configure roles/users?
80 - Versioning:
81 - Versioning must work for non-admins!
82 - Backend user access to elements is based on the access restrictions for the official element (except pages?). This must be implemented on core level.
83 - TCEforms/TCEmain available for frontend
84 - Makes portal features easier to create
85 - A rewrite of TCEmain might help very much!
86 - VARIOUS FEATURES:
87 - Support for submitting dates in non-UNIX-time format (eg. DD-MM-YYYY) (is there a PHP function to which you can directly pass something like "DD-MM-YYYY" and then it will clean it all up? Or convert?
88 - Recyclebin: If an item is deleted and is NOT in the recyclebin, then move it (all pages to the root of) the closest recyclebin (in a rootline pid AND with write permissions) in the pagetree. If that is not present, then delete normally. If you delete anything in a recycle bin, it's totally deleted.
89 - Implement field evaluation in TCEmain: Evaluate min/max? Checking references exists?
90 - Implement a feature, "max_number_of_records_in_pid" which means the TCEmain will check if a number of records of a kind has been exceeded for the page.
91 - "Pattern-control" for relation fields? (See "APPENDIX: PATTERN-control") Probably create an API by which you can do your own evaluating, return true/false, return an error message.
92 - "Tree-tables": Adding TCA-feature which can describe a field being a internal_pid for the table so tables can be listed as a tree in Web>List (and for TCEmain this means that copying an element). "parent" items. Rene needs this for "categories". See (Message-Id: <200212201257.24705.r.fritz@colorcube.de>)
93 - Support for "grouping": - eg. tt_content elements are grouped by "column" + "language". But copy/cut operations must understand this. And Web>List should reflect this as categorizing.
94 - "child records" - records which MUST be related to another table - and will be moved along with the main record if moved.
95 - Implement *real* record locking?
96 - Configure on a per-table basis
97 - For instance, the TCEforms will render non-editable fields for ordinary users, while editable fields for "admin" users still
98 - Should the check be done only in TCEforms - or also in TCEmain?
99 - If an input value in the data array is NOT a string/integer but an array then just serialize this array and store (thus allowing customly build forms from PHP scripts to submit hierarchical information)
100 - Could be solved by PRE-processing of content in user functions!
101 - Implement "last_edited_by" field saving the BE-user UID just like tstamps are... (JH asked)
102 - Transformation API: Implement the possibility of custom to/from transformations for the "user" type (or any field?)
103 - Selector box type:
104 - MM support for strings
105 - Support for MM-records which does NOT get deleted, but is kept... and then support for having data in those!! NOTE 3/12 04: This will cause severe problems in the import/export interface and probably many other places where the MM relations are stored only as the uid of another table and nothing more. That makes it impossible to track the record in the middle....
106 - Support that the content of a single field can be stored in an external file instead.
107 - Support that a list of fields can be stored in an external XML file instead.
108 - "uniquePerField"
109 - used for pages_overlay_records "pid"
110 - used for "tt_content"/"sys_language_uid", field "l18n_parent"
111 - Having references on the form [uid : filereference/] for fall-back abilities.
112 - BUG:
113 - if a file is uploaded (directly in the form) and there is an upper limit to the number of files which is then exceeded, the uploaded file is STILL copied to the upload folder and will thus be listed as "Files with no references at all (delete them!):"
114 - TCEmain: If there is a comma in the filename supplied as an uploaded file it will confuse the handling of files because the comma is also used to split the filename from each other. (29/04/2003). This is a problem with Inter-Photo Netprint where files uploaded by FTP with comma in the name will not be attached as they should. I think the solution should be found in TCEmain so any filename can be supplied as uploaded.
115 - IDEA: check for potential dangerous php-extension
116
117
118 TCEmain/TCEforms for FlexForms:
119 - Permissions handled per-field in FlexForms?
120 - What to do if data structure was not found? (Both TCEmain, TCEforms, templavoila_pi1, t3lib_transferdata)
121 - block the creation of FlexForm in FlexForm inside TCEforms.
122 - ['pi_flexform']['config']['ds'] must be set to some default message making sense!
123 - Other XML formats for DS: - API / services?
124 - xml2array - supporting looking for <>&" and if found wrapping in CDATA instead! (or maybe for multiline values?)
125 - TCEmain features:
126 - mapping values to a plain-text search field(s)
127 - Offering API functions for add/delete/move/copy/paste of FlexForm elements/sections
128 - Copy/Paste API for references? (see TemplaVoila page-module pioneer work)
129 - Possibility to write the XML data values into a table instead (see Marc Schlingers idea, stored on paper in my red organizer).
130 - TCEforms:
131 - Support for checkboxes which can expand/collapse sections/containers? fold-in, fold-out, passing a list of fields to show (with sub-levels for horizontal display).
132 - Visual interface for forms, DHTML for sheets etc, various sheet modes, language menu form.
133 - Fix the JavaScript in TCEform which keeps track of REG/CM images and required values etc. These things does not work for flex forms yet!
134 - Add many "types" of sections at a time when "add new"
135 - NiceToHave: Attaching an image to the Data Structure. This image is a preview of what the data structure can create. When rolling over the image you can have the form fields highlighted which affects the area. (by a red border or so...)
136 - visual: Table with condition in top header, condition value column + block column. Not user supplied. -> OR just a selector box deciding what is shown below!? (possibly "ALL")
137 - Displaying partial branch of the data structure (and to a certain level)
138 - FlexForms cannot be possible if the record is not saved? No, should be ok, BUT a data source can of course not be referenced from another field since that fields value is NOT actually there! So only for fixed references to flex form definitions can this be done.
139 - If you have a multiple selector field (or checkbox array) an array of objects could be forced to reflect exactly the fieldnames there 1-1 thus giving us configuration option possibilites per field! For newloginbox extension: You set up a selector box with multiple choice where you can select fields from the fe_users table to display. In an array of elements in the DS you configure that the VALUE of that field is dictating that the same number of objects should be shown for configuration of each field. A "hidden" value would point each object to which value from the field it was for! The same would be very useful for M-M lists of records.
140 - Implement "<displayCond>EXT:templavoila:LOADED:true</displayCond>" for flexforms. (needed for mininews!!)
141 - Implement CSH for FF fields.
142 - Localization of FlexForms:
143 - Permissions for specific language as well!
144 - Using DHTML tabs for langChildren = 0, making something else for langChildren = 1
145
146 TCEforms:
147 - Support for right-aligned charsets?
148 - FEATURES:
149 - GENERAL:
150 - Customized display of a field, possibly passing an array with code that should be displayed and then people can themselves put it together from PHP? (possible already?)
151 - Ability to set up user functions for pre and post processing of the data? (possible already?)
152 - API for adding JS-functions to the onchange-event. (possible already?)
153 - Make STORAGE_FOLDERs a LIST of pages - not just one page (still the first page could be the default while other pages will be where stuff is selected from).
154 - Workspace-ReadOnly flag for fields
155 Should be set for all fields which are used in where clauses in frontend. (Enables fields would candidate for example, but they must be handled otherwise since we WANT to be able to change those in new versions)
156 - Generally for fields: $TCA[$table]['ctrl']['languageField'] and $TCA[$table]['ctrl']['transOrigPointerField']
157 - field: pages_language_overlay:sys_language_uid
158 - field: pages:doktype (used for selection many places!) - but then we cannot make mounts points etc! (?)
159 - SELECT type:
160 - Ability to see icon/image from record of selected value in the selector box.
161 - IFRAME alternative for the selectorboxes where a HTML view can be shown. Possibly having an external script show the content which would be useful for display of tree-tables.
162 - Reflect possible tree-structure for records in Select/Items list.
163 - a way to grant read for the selectors without displaying the storagefolder in the treeview?
164 - CHECK: "multiple" feature, single, sorted and non-sorted selections.
165 - making copies of select fields etc - check that remapped records are OK treated (with foreign/neg_foreign + free string values)
166 - Letting one selectorbox set another hidden fields value apart from its own? [USE: When selecting a template, that also sets the DS value! (Thus a template is always selected!)]
167 - Exclude field selection better, in a tree? (in IFRAME, could be cool!)
168 - BUG: itemsArrayProcFunc only active IF there is an array! Shouldn't it be in any case?
169 - set the width of the selector field(s)
170 - GROUP type:
171 - [file] FILE-REFERENCES: allow the selection of files from the system to be added as REFERENCES, not copies!
172 - upload option to the folder specified in TCA
173 - Subfolders for uploads/ as well, detecting the first (#) a-z0-9 letters) (For large amounts of files!)
174 - Storing files with "a3#FILENAME.jpg" which indicates a subdirectory.
175 - In the thumbnail list add the Edit and view icons as in the good old days.
176 - BUG: By the way, isn't there a bug in the listing of the thumbnails of records?
177 - Nested records:
178 - Group-fields of DB-type could be made to actually SHOW the records it contains in the very same form! Possibly with Add/Delete facilities. (JH asked)
179 - IFRAME alternative for Element Browser.
180 - set the width of the selector field(s)
181 - DISPLAY_CONDITIONS:
182 - "readonly" flag, or user group dependant. See "Message-Id: <200210241441.50295.r.fritz@colorcube.de>"
183 - ? type:
184 - "Inverse relations"/"Foreign relations": A "Pseudo field", which lists records REFERING TO this record (foreign relations, eg. many small price-records belonging to ONE shop-article). Possibly this could also EDIT those references (attaching/adding new, removing old, no manual ordering though! - This is what RENE is doing (Message-Id: <E17LO4D-0002hj-00@cube.colorcube>)
185 - Concealed password fields, support for two fields with the same password being submitted... (JavaScript evaluated?)
186 - BUGS:
187 - Ask to save record when you want to add a category with the "Plus" icon.
188 - CHECK: ###STORAGE_PID### incorrectly calculated?
189 - DONE?: Support for label for main palette: (Rene: Message-Id: <200210011646.10346.r.fritz@colorcube.de>)
190
191 Element Browser:
192 - Support for DAM
193 - RTE API integration (rte_images + browselinks)
194 - Support for browsing custom category-trees (passed by some PHP script)
195 - Support for deleting files in the listing there.
196 - Disable thumbnail option for faster display. (Already done?)
197 - Element Browser configurable a) without the page tree but hardcoded to specific PID, b) just default PID (possibly able to override from TSconfig)
198 - Selecting files from other resource-fields of records (which the user can actually read) - maybe with the Element Browser, browsing for record, clicking it, seeing a list of files inside the record?)
199 - Ability to insert images when their info page (larger thumbnail) is displayed. Maybe a small + (plus) icon would do. (Notify Patrick Roeder)
200 - Some quick-lookup feature (like we have on TER)
201 - Showing more than the title column for records listing and making it possible to sort by the columns.
202 - BUG: fix bug when used as "wizard" for link fields!
203 - Support realurl paths translation to IDs?
204 - Implementing a hook so "realurl" can intercept the "Edit page ID" field in the shortcut frame and allow people to paste in a URL from the website which will be analysed to find the page id from the URL
205 - Implementing a hook similar to this, but used in the RTE link selector box (browse_links.php) so a link to a page can be made in the same way. Such an interface will just link to the page if an ID could be found, otherwise tell that the URL din't have a page id associated with it.
206 - Link selector: Disabling target box for selectors directly to HREf fields (DS case with templates...)
207
208 Wizards:
209 - Add wizard icon to TSconfig and Setup/Constants fields for immediate syntax highlighting (in popup window)
210 - Add wizard icon to see/clean up FlexForm data? Convert language mode?
211 - Wizard for editing FlexForm DS XML!
212
213 Kickstarter:
214 - Update kickstarter so new great options are not wastefully never known.
215
216 Usability / Interface:
217 - Review general backend logic
218 - TCEform presentation
219 - How tables fields are currently organized for eg. pages, tt-content etc. and if Tabs should be used more for some of those (example "Standard" / "Advanced" pages)
220 - Skin (WinXP skin, what difference would that heretic idea make?)
221 - Showing in "frameset-modules" which submodule you are currently inside. And ability to change submodule in the rightmost frame anyways - maybe as a panel in top of the pages (must be cached so all submodules must not be loaded each time...)?
222 - Ability to create another Main/sub module structure in the backend (Daniel H: Message-ID: <BAB9A920.E95D%daniel@typo3.com>)
223 - Change order, level, title, icon.
224 - Use User TSconfig... and allow someone to create an extension to visually create a TSconfig output
225 - Links could be going directly to the function menus inside modules as well!
226 - Review Skinning API:
227 - Better backend HTML?
228 - More consistent re-use of classes / icons?
229
230 Localization:
231 [See "Localization workflow" below]
232
233 Versioning/Workspaces:
234 [See "Versioning/Workspaces" below]
235
236 Context Sensitive Help (CSH):
237 - Add multimedia?
238
239 WEB main module/page tree:
240 - Option: For a frameset module, register the ID per sub-module, not just globally (JH asked)
241
242 Web>List:
243 - Add "New" to the clickmenu of eg. "be_users" (non-sorted items) when you want to copy a user into the list.
244 - Add email function where you can 0) send email to single records email field, 1) all records on the clipboard, 2) all emails in a list of shown records, 3) all records in the PID. By emailing you can select to receive a copy yourself. Backend user must have name/email configured as from/reply-to/return-path information. Mails can be sent Bcc,CC or seperately. Can be used for lightweight newsletter feature! Maybe implement through some API to the Web>List module.
245 - Page-tree-stop: Click on red "+" brings forth some kind of browser (list of pages, browseable, Web>List module feature?)
246 - Add flag to TCA/[interface] which keeps a table from being listed in the list module. Probably an option which allows the display for admin-users. (Already made?)
247 - Check that permissions are respected for the buttons in the control-panel of the List module (including for workspaces)
248 - Why is web>list slow on new typo3.org?
249 - Support for "grouping": - eg. tt_content elements are grouped by "column" + "language". This should be reflected in the LISTING order (before ordered by the "sorting" column) OR maybe in a hierarchical display?
250 - Support for tree-tables (that can be browsed).
251 - Support for a "tree-group" -> a chain of tables which are displayed in a tree since each table has a config for a parent field in a former table. (Eg. DS: brand -> domain -> product).
252 - Support for display of relations: Files, 1-M, M-M
253 - FlexForm tree view / editing:
254 - When a record contains a FlexForm the web>List module could display the fields inside in a nice tree structure which one could expand/collapse! Then by clicking "edit" for a brand you get an interface where you can edit *that branch* of the flexform! Brilliant way to manage large structures inside of flexforms!
255 - Can you picture it? That would be like expanding an XML document by a node-tree and add/edit/delete/rearrange any of the internal informational pieces!
256
257 File>List:
258 - BUG: UNIX: "RW" flag looks only on the permissions for the USER - not the group. So even if PHP via the group of a file can delete it, it is reported that it cannot. (Already made?)
259 - Adding possibility to show files recursively (more levels), filter on a file name, search file content
260 - From click-menu: Access to index files with indexed-search / create a "Indexing configuration" record for that folder / Initiate indexing of the "Indexing Configuration" for folder
261
262 History/Undo:
263 - Undo must be able to restore attached files as well
264 - Should be possible to disable for certain tables (can it be done already with TSconfig?)
265 - Delete saved states (and save whole record content).
266
267 EM:
268 - Display: review-flag + link to review - cannot be overridden?
269 - Display: After import, link to Install/Details.
270 - Display: Better filtering, quicker listing
271 - Feature: [suggested by robert] resolving of dependencies like in apt-get (Debian package manager). Necessary extensions can be downloaded and installed automatically (idea: create dummy extension which depends on several extensions and acts like a package of extensions)
272 - Feature: EM suggest clear-cache af scripts?
273 - Install: Extensions which can point the import/export to a directory with import-files.
274 - Install: Getting from TER only already installed extensions.
275 - Install: Flag: "Import ext"; "Show non-secure extensions" (show ALL ext., not only reviewed ones)
276 - Upload: emconf.php should have the md5-part updated when upload to TER
277 - CHECK: Better failure-tolerance when "fatal errors" occur in ext_localconf/ext_tables.php files!?
278 - CHECK: Can Install Tool bypass including ext_localconf/ext_tables if there are errors in them?
279 - BUG: EM-extMgm: caching af localconf + extTables configuration in ARRAY? Plus ?ndringer til API specs. (problem when those files includes classes etc... probably not possible)
280 - BUG: Clear cache files should remove ALL "temp_CACHED_*" files in typo3conf/ (not just the current two)
281 - BUG: Download of extensions (compressed...) will sometimes NOT get the same MD5 key after being saved (with any browser it seems) as shown at the download link. Origin of error not know. Please help if you encounter the problem.
282
283 The REGEX-{} problem:
284 - BUG: Regexs; "Warning: Unmatched \{ in /home/sites/site14/typo3_src-3.5b3/typo3/mod/tools/em/index.php on line 1983" which is a ereg with { WITHOUT preceeding slash! (Message-ID: <003c01c275aa$c0c60c10$e3a1a33e@pentiumriv4v9a>, Message-ID: <20030729082437.79900.qmail@web11305.mail.yahoo.com>)
285 - Should be fixed by "[{]..." instead!
286
287 Filepermissions of source:
288 - Test that these permissions work OK:
289 - chmod 555 typo3_src/ -R
290 - cd typo3_src/typo3/
291 - chmod 755 ext/
292
293 SQLengine (t3lib_sqlengine):
294 - Finish t3lib_sqlengine
295 - Test and compare against MySQL lookups
296 - XMLdb: Lave table locks
297 - Open Office / CSV tests (proof-of-concept)
298
299
300 *******************************
301 Versioning/Workspaces:
302 *******************************
303
304 - "They are also the only ones who can eventually publish the workspace content (except "admin" users)."
305 - "If set, records from tables where versioning is not enabled can still be edited "live" inside the workspace."
306 - "Admin user is the only one who can publish": Add that field, add flag in workspace table that "publish workspace gradually"
307 - "t3ver_stage" (only draft content in custom workspace): 0 = being edited (editing possible for members), 1 = pending for review (edit possible for reviewer), 2 = ready for publish (editing possible for admin), -1 = rejected, ready for editing (using sys-log for notice)
308
309 Next steps for workspaces:
310 - Overlays implemented in backend
311 - Permissions / UIDs reflected in buttons and clickmenus.
312 - Frontend previews done
313
314 - Clean-up of TCEmain/logging/permissions [in particular for versioning/workspaces!]
315 - Perform as much logic and re-mapping in tcemain as possible so applications doesn't have to (for instance re-mapping of source and target uids in paste operations.)
316
317
318 Testing:
319 t3lib_BEfunc::getFlexFormDS(), workspaceOL/fixVersioningPid ??
320 Page and (User) TSconfig?
321 Mounts points and versionized branches?
322 TemplateRecord previews?
323 - Apply versioning to other tables than the current.
324 - check page trees around for display of color backgrounds...
325 - check editing icons, overlays in various modules.
326 - Workspace access to Filelist module ?? (Should be OK)
327 - copy/cut/paste between versionized branches and other places (new pages).
328 - delete something twice?
329 template::getVersionSelector()
330 - overview of permissions handling?
331 - samspil med version module?
332
333 Dassault:
334 - Change "class.user_3dsplm_fakepage.php"
335
336 Manual:
337 - Overview
338 - Concept:
339 - Workspace is Container for draft versions => Solves all issues of previewing, managing versions, overviews, comparisons etc.
340 - All is draft, consequence; a) works only with versionizable records, b) no files can be managed in fileadmin (unless exception accepted for custom workspaces)! => Safe playground
341 - Must work transparently for user => No training needed.
342 - THE implementation of versioning!
343 - state, not process!
344 - Define:
345 - lifecycle
346 - workspace
347 - publish/swap workspace
348 - versioning modes: element, page, branch
349 - Modes:
350 - Live mode (online):
351 - Editing live content
352 - Like TYPO3 always was, however users can be excluded from online mode now.
353 - Draft mode (offline):
354 - Editing draft versions of content
355 - All editors can publish individual content or whole workspace at any time
356 - Usage: AdHoc needs for trusted editors etc.
357 - Custom mode:
358 - Editing draft versions of content
359 - Workspace owner is only person to publish (highest review authority) and edit workspace properties
360 - Workspace options: filemounts, reviewers, publishing time, Db mount
361 - Usage: For specific projects on a sitebranch, for simple review-cycle needs etc.
362 - Using Workspaces
363 - Transparency in action
364 - Colors for feedback
365 - What is "[#VEP#]" in the path (visually)
366 - Workspace manager
367 - Setting up users (draft/live etc)
368 - "options.pageTree.onlineWorkspaceInfo"
369 - Preview in frontend by workspace ID
370 - API
371 Intro:
372 - "versioningWS" instead of "versioning" in TCA
373 workspace 0 = online (live)
374 workspace -1 = offline (draft)
375 workspace > 0 = custom (projects)
376 workspace -99 = none selected at all.
377 [-99 is ERROR (none available), -1 is offline, 0 is online, >0 is custom workspaces.]
378 API:
379 Frontend:
380 Preview issues:
381 - Challenge: Previewing elements which are disabled by enableFields in the online version but not necessarily in offline versions! Also, new records with "t3ver_state" set to 1 (placeholder" must be filtered out as well - but not when previewed!
382 - Solution:
383 - Disable enableFields()/->where_del_hidden and check for them in versionOL on input record!
384 - Implementation:
385 - Any place where enableFields() are not used for selecting in frontend, the t3ver_state==1 flag must be checked in online display - otherwise placeholder records might be selected!
386 ->versionOL(): Check if record has enable-fields that prevents display and if so, unset!
387 ->fixVersioningPid(): For tracing back (getRootLine())
388 ->getWorkspaceVersionOfRecord()
389 - Scenarios for preview that is not planned to be implemented:
390 - Searching will probably never work in offline mode: All SQL selection happens on online records and the overlay is applied only after.
391 - It is impossible to preview "count(*)" selections since we would have to traverse all records and pass them through versionOL() before we could count on the result!
392 - In tslib_fe::getPageShortcut() sys_page->getMenu() is called with an additional WHERE clause which will not respect if those fields are changed for a future version. This could be the case other places where getmenu() is used (but a search shows it is not a big problem). In this case we will for now accept that a wrong shortcut destination can be experienced during previews.
393 - Whenever a SQL query is made which also selects on other fields than enableFields, THEN it is out of control to preview. See the example described above (tslib_fe::getPageShortcut)
394 Backend modules:
395 $MCONF['workspaces'] = online,offline,custom
396 Backend, overlay/checking:
397 t3lib_BEfunc::workspaceOL()
398 t3lib_BEfunc::fixVersioningPid()
399 t3lib_BEfunc::isPidInVersionizedBranch
400 t3lib_BEfunc::getWorkspaceVersionOfRecord
401 t3lib_BEfunc::selectVersionsOfRecord()
402
403 BE_USER:
404 ->workspaceEditState
405 ->workspaceTestPID
406 ->workspaceInit()
407 ->checkWorkspace()
408 ->setWorkspace()
409 ->setWorkspacePreview()
410 ->getDefaultWorkspace()
411
412 View/Preview:
413 - Frontend:
414 - ONLINE PREVIEW: Versionized pages should be previewed just by their UID (which will select the offline version!) - only in "Live" space, disabled at the moment inside tslib_fe!
415 OK - Workspace is used to set frontend in preview mode and display versions
416 ?! - TEST: Mounts points and versionized branches?
417 ? - tslib_content::getPidList(); TEST Mount points / Use offline UID values for "page" swapmodes; This is probably more natural for preview cases.
418 ? - versionOL() implementations missing:
419 - tslib_pibase::pi_getCategoryTableContents()
420 - tslib_content::checkPidArray()
421 - tslib_content::checkPid()
422 - tslib_content::exec_mm_query()/-_uidList() [These seems NOT to be used anymore!]
423 - Difficult frontend previews:
424 - All fields selected upon in frontend:
425 - $TCA[$table]['ctrl']['languageField'] and $TCA[$table]['ctrl']['transOrigPointerField']
426 - field: pages_language_overlay:sys_language_uid
427 - field: pages:doktype (used for selection many places!) - but then we cannot make mounts points etc! (?)
428 - Suggested solution:
429 - Setting a workspace-readonly flag for such values!
430 - However,
431 - menu previews are bypassing the problem already,
432 - page shortcut has trouble but is known,
433 - mount points will not be possible to preview (?)
434 - For new translations we might have the problem, for existing translations probably not since it is unlikely that the fields $TCA[$table]['ctrl']['languageField'] and $TCA[$table]['ctrl']['transOrigPointerField'] at changed later!
435 - For new records, maybe the placeholder record is updated along with offline version? (At least for non-file fields). This would solve the problem of build translations in a workspace and also offer the preview as working!
436
437 - In tslib_fe, this->contentPid is set to "_ORIG_UID" when a versionized page have swapmode set to "0". However this is not completely correct to do: Strictly the "_ORIG_UID" value should be used for tables where "versioning_followPages" is set and for others not. However this is a working quick-fix to display content elements at least!
438 t3lib_page::getPageOverlay() - because pages_language_overlay records have "versioning_followPages" set this should be observed when selecting language overlay records. But should it be hardcoded or something better?
439 - Backend:
440 - Page TSconfig, Access evaluation, TCEmain/ TCEforms, Flexforms etc: When to fixVersioningPid() / versionOL()?
441 - Quick Edit?
442
443 Workspace Manager TODO:
444 - Details view for versions
445 - versions inside branch?
446 - display change log for specific element
447 - warning if page is worked on in other workspace
448 - preview links on items
449 - Difference view in online mode as well.
450 - Publishing must be possible ONLY if Online mode is available for a user?
451 - Workspace list
452 - Admin features
453 - Implement the disabling of swap-mode on publish links when that is supported in the core (which I think it should be first...?)
454 - TEMPORARY? Disabled backend reloading when changing workspace.
455 - Click menu implementation of: Diff-view, raise level / publish. => Guess this is what the versioning element should hold!
456
457 Workflows:
458 - Workflows can regard a whole workspace!
459 - Special permission required for:
460 - Publishing workspace / Setting publishing time
461 - Freezing/unfreezing workspace
462
463 Swapping:
464 - (Support for) swapping using temporary file (instead of using negative ID)
465 - When swapping; Check "unique" fields (like pages.alias) etc.
466 - permissions?
467 - Problem: When a page+content or branch is versionized, the records that the user is NOT allowed to create/edit are NOT versionized. That mean that records are swapped out that should not be! Imagine if a user has no access to page language overlay but creates a new page+content. Then only page and tt_content is versionized but when swapped the page_language_overlay records are lost since none exist in the versionized page!
468
469 Various Notes:
470 - Pages-versioning and the impact of NOT swapping tt_content element uids:
471 - Loose anchor-points, manually made (could be hack-fixed by some intelligent copying tracking)
472 - TemplaVoila references to elements from other pages (will break, however bad practice to reference elements not in some sort of central library which will NEVER be page-versioned anyways)
473 - Insert-records could potentially do the same
474 - Impact assesment: Low.
475 - Clean-up module (in templavoila?) could also track such things
476 - Problems for non-templavoila sites would be low.
477 - What about a page alias?
478
479 - Trunk/Branch:
480 - Requirement: Intelligent swapping of "sub-element" ids that CAN be traced back to the original!
481
482 - MySQL:
483 - 4.0.14 fails with -1 uid! (4.0.18 is ok eg.)
484 - Correction possible:
485 -> ALTER TABLE jlajlajla AUTO_INCREMENT = 123
486 - Problems with other RDBMS because ID values cannot be changed at all!
487
488 Preview modes with no BE login; For single pages, for whole workspace?
489 - Can bypass hidden pages, fe_groups, set workspace
490 - Works for certain timespan
491 - Sets cookie
492 - Respects permissions of backend users issuing that permission!?
493
494
495
496
497
498 *************************
499 Localization workflow:
500 *************************
501 - Export Flow:
502 - Select language
503 - Select tree levels / exclude individual pages/branches from translation / Way to exclude specific elements from localization
504 - We can imagine having translation configuration records in branches defining some presets that export files are related to: Thus we can ensure the same settings are used for both import and export. Also they could contains diff-info for flexforms!
505 - Export mode:
506 - Export needs only (updates/new)
507 - Options (depending on file format):
508 - Include other data for view of context
509 - Include any diff-source data? (alternatively based on previously written file in XML/ser. array format!)
510 - Include current translation or not (if not, if would be because of TRADOS based situations where a previous file exists to compare a new file with and a file with only the translation is returned.)
511 - each page in single file OR all pages in one file
512 - Export Formats:
513 - Generic XML/ser.array (for TYPO3 translation module which will be made for this purpose: Contains data, existing translation, diff-source, timestamps and hashes, like locallang-XML...)
514 - Can contain meta data so their starting point and configuration can be re-loaded from a location on the filesystem to where they can also be re-written!!!
515 - HTML (for TRADOS etc.)
516 - XLS/SXC (for excel translation)
517 - SXW / HTML (for OO Writer translation: Put into a table with columns: id/data/translation/colored-diff-view/OK-sign-off
518 - Create workflow items to work from!
519 - Import Flow:
520 - Select file / upload
521 - Formats:
522 - ANY format is converted into internal standard array
523 - Create new elements via localization API in tcemain (to have l10n_mode per. field respected!)
524 - Generate $data array for tcemain from file IDs
525 - Options:
526 - Can deselect certain parts manually
527 - If original has changed, automatically warn/hide/deselect?
528 - If translation matches current already (if a previous import was done), automatically hidden/deselect/notify? (preference can depend on type of file format)
529 - Analyse a page:
530 - Pages:
531 - If no Page Translation Overlay: New
532 - If Page Translation Overlay: Update
533 (Maybe use hidden page translation overlays to identify pages picked for localization? This would work pretty fine I think.)
534 - Records in general:
535 - if [ctrl][languageField] AND [ctrl][transOrigPointerField] is set, select all records with 'default' language (ignoring 'ALL'/-1) and for each:
536 - if no translation found: new
537 - if translation found: update
538 - NOTICE: translations can be found in external tables (like pages_language_overlay)
539 - selected by sorting order according to [ctrl]
540 - TemplaVoila: Here a special selection could apply for tt_content elements based on references in the DS. That would leave out all non-placed content elements. But in fact I rather say that we should NOT do it this way and instead clear out such elements so a general selection of the elements from the page is enough. Anyway, it should be possible though.
541 - Field selection:
542 - Option: Work only on fields where "l10n_cat" is "text" or "image" (selected!). Alternatively, use "l10n_mode" to filter as default (do not show "exclude" fields for instance!)
543 - ERROR reporting:
544 - If two or more records are claiming to be translations of another (for pages_language_overlay, tt_content etc.)
545 - Limitations:
546 - Cannot work with content which has no parent/child relationship. This is the case for:
547 - Old style column based localization
548 - FlexForm fields with <langChildren> = 0
549 - Translation module:
550 - Based on concepts from llxmltranslate and supporting the generic XML fileformat translations can be exported in.
551
552
553 - Localization document!!!
554 - Needs:
555 - Clean-up for Unused TemplaVoila elements on a page!
556 -> Would need a reference index available.
557
558
559
560
561
562
563
564
565
566
567 **************************
568 DOCUMENTATION TODO list
569 **************************
570 Extensions:
571 - Document how to make "static_template_files" in an extension (Example: How to make a standard templates in extensions to TYPO3) => Rene Fritz doing that?
572
573 About Versioning ("Inside TYPO3")
574 - Versions can be done on element, page or branch level
575 - In any case a pure copy of the element/branch is produced
576 - "element": Copy of element (pages, tt_content, pages_lang_overlay, sys_template)
577 - "page": Copy of element + tables configured "versioning_followPages" (tt_content, pages_lang_overlay)
578 - "branch": COMPLETE copy of the branch to predefined level.
579 - About unique fields:
580 - They are NOT enforced in versionizing - this may be a problem when BRANCHES are exchanged because currently there is no check done if a value inside a versionized branch collides with values in the main branch!
581 - 'AND pid>=0' should be used to avoid problems!
582 - In tcemain::getUnique() there already is a check if "pid>=0"
583 - Backend user access to elements is based on the access restrictions (editing) for the official element. For pages; they carry their own access permissions with them. Notice that page permissions are NOT changed to the user making the new version!!!
584
585 About Charsets ("Inside TYPO3")
586 In TYPO3s backend charsets used have traditionally been the charset of the backend user language. This is of course a big problem (when other than western european languages are involved) since the encoding of content is thus depending on the charset of the user and not of the system
587 From TYPO3 3.6.0 you can define a global charset for the whole database. This can be any local charset like iso-8859-1 or windows-1250. But for multilingual sites it is recommended to use utf-8 since that can represent all languages.
588 You set the global charset in a localconf file like this: $TYPO3_CONF_VARS["BE"]["forceCharset"] = "utf-8";
589
590 Here are a few notes:
591 - JavaScript functions to convert cases to upper/lower seemed to work with all letters from any charset. In the old days this was not the case and thus functions in eg. "jsfunc.evalfield.js" compensated. This is now disabled since it is apparently not needed anymore.
592 - When one enters eg. danish letters in a form when the russian charset is used, these letters are converted to HTML entities, eg. "&#248;" - this is NOT changed. The philosophy is that IF anyone needs to use characters outside the range of the used backend character set he should use UTF-8 instead. Theoretically we COULD allow the entities to be shown correctly but we dont for now. Better use the right charset.
593
594
595 About System Extension:
596 - Explain that they are the only ones distributed with TYPO3 core.
597
598 Write:
599 - "css_styled_content" documentation
600 - Extension Programming Tutorials: What is status??
601
602 Review:
603 - doc_core_tstemplates (badly needs it!), doc_core_tsbyex, doc_tut_frontend, doc_tut_n1/n2/n3
604 - TSref overhaul
605 - "doc_tut_backend" revised/updated.
606
607 Remove:
608 - doc_core_usermgm : DELETE THIS!
609
610
611 ******************************************
612 APPENDIX: CLEANING UP FOR TYPO3 3.6.0
613 ******************************************
614 Cleaning for 3.6 involves:
615 - XHTML transitional compliance
616 - " to '
617 - Commented functions
618
619 1: Add comments
620 * NOTICE: This will also detect JavaScript functions, but if you place a comment line like "// ..." in the end of the function definition line they will not have the JavaDoc style comment added. Eg. " function blabla() { // "
621 2: Write comments, organize them, add sections etc. (search [type])
622 2a: Set "@access private"
623 3: double to single quote (check for "\n")
624 4: XHTML
625 5: $Id$ CVS keyword expansion
626 6: @package tags
627 7: Function Index in scripts
628 8: Depreciated use of t3lib_BEfunc::titleAttrib
629 9: Generally, try to read all GPvars in init() functions and set them as internal variables - gives a nice, natural overview of what is used from the outsite
630
631
632 Status 27/10 (TYPO3 Core + extensions "cms" and "lang" in sysext/ (but without global extensions in ext/ !)):
633 - 2000 @param and @return tags in 800 functions still needs commenting (3800 tags in 1400 functions has already been done)
634 - 50 scripts still needs cleaning for XHTML, comments and single-quotes
635
636
637 Note on XHTML compliance:
638 - We strive for XHTML transitional / frames
639 - Certain incompatibilities has been allowed for practical reasons (for now). These include:
640 - align="absmiddle" for images
641 - width/height properties for input tags when images are used
642 - missing "cols" attribute for textarea tags.
643 - Some attributes for framesets.
644 [The reason for allowing this is probably that I do not know any workaround to achieve the same effect. The problem of non-allowed attributes/values also rate very low in my understanding of XHTML compliancy - it is far more important with nesting integrity, char case of tags/attributes, etc.]
645
646
647 ---------------------------------------------------------------
648 NOTES ABOUT WHICH SCRIPTS HAS BEEN CLEANED AND WHICH REMAINS:
649 ---------------------------------------------------------------
650 Finished (XHTML, quotes, comments, revised-note), XQCR:
651 (Indented scripts are still missing clean-up)
652
653 typo3/___________________________________________:
654 XQCR: alt_clickmenu.php
655 XQCR: alt_db_navframe.php
656 XQCR: alt_doc.php TODO: Check "redirect" GPvar for XSS hole!?
657 XQCR: alt_doc_nodoc.php
658 XQCR: alt_file_navframe.php
659 XQCR: alt_intro.php
660 XQCR: alt_main.php
661 XQCR: alt_menu.php
662 XQCR: alt_menu_sel.php
663 XQCR: alt_mod_frameset.php
664 XQCR: alt_palette.php
665 XQCR: alt_shortcut.php
666 XQCR: alt_toplogo.php
667 XQCR: alt_topmenu_dummy.php
668 XQCR: browse_links.php
669 XQCR: browser.php
670 XQCR: class.alt_menu_functions.inc
671 XQCR: class.db_list.inc
672 XQCR: class.db_list_extra.inc
673 XQCR: class.file_list.inc
674 XQCR: class.show_rechis.inc
675 XQCR: db_list.php
676 XQCR: db_new.php
677 XQCR: db_new_content_el.php
678 default.htm
679 default.html
680 XQCR: dummy.php
681 XQCR: file_edit.php
682 XQCR: file_list.php
683 XQCR: file_newfolder.php
684 XQCR: file_rename.php
685 XQCR: file_upload.php
686 XQCR: index.php TODO: Check "redirect" GPvar for XSS hole!?
687 -QC-: index_re.php
688 -Q-R: init.php
689 XQCR: listframe_loader.php
690 XQCR: login_frameset.php
691 -QC-: logout.php TODO: Check "redirect" GPvar for XSS hole!?
692 XQCR: move_el.php
693 XQCR: show_item.php
694 XQCR: show_rechis.php
695 -QCR: tce_db.php
696 -QCR: tce_file.php
697 XQCR: template.php
698 XQCR: view_help.php
699 XQCR: wizard_add.php
700 XQCR: wizard_colorpicker.php
701 XQCR: wizard_edit.php
702 XQCR: wizard_forms.php
703 XQCR: wizard_list.php
704 XQCR: wizard_rte.php
705 XQCR: wizard_table.php
706 XQCR: wizard_tsconfig.php
707
708 XQCR: mod/help/about/index.php:
709 XQCR: mod/tools/em/index.php
710 XQCR: mod/web/info/index.php
711 XQCR: mod/web/func/index.php
712 XQCR: mod/web/perm/index.php
713
714
715 t3lib/________________________________________:
716 XQCR: t3lib/class.t3lib_admin.php
717 XQCR: t3lib/class.t3lib_arraybrowser.php
718 -QCR: t3lib/class.t3lib_basicfilefunc.php
719 XQCR: t3lib/class.t3lib_bedisplaylog.php
720 XQCR: t3lib/class.t3lib_befunc.php
721 XQCR: t3lib/class.t3lib_beuserauth.php
722 XQCR: t3lib/class.t3lib_browsetree.php
723 XQCR: t3lib/class.t3lib_clipboard.php
724 -QC-: t3lib/class.t3lib_cs.php
725 XQCR: t3lib/class.t3lib_diff.php
726 XQCR: t3lib/class.t3lib_div.php
727 t3lib/class.t3lib_dmailer.php [Jan-Erik!]
728 -QC-: t3lib/class.t3lib_exec.php
729 -QCR: t3lib/class.t3lib_extfilefunc.php
730 -QCR: t3lib/class.t3lib_extmgm.php
731 -QCR: t3lib/class.t3lib_extobjbase.php
732 XQCR: t3lib/class.t3lib_foldertree.php
733 -QCR: t3lib/class.t3lib_formmail.php
734 t3lib/class.t3lib_fullsearch.php [Kasper]
735 t3lib/class.t3lib_htmlmail.php [Jan-Erik?]
736 XQCR: t3lib/class.t3lib_iconworks.php
737 -QCR: t3lib/class.t3lib_install.php
738 -QCR: t3lib/class.t3lib_loaddbgroup.php
739 -QCR: t3lib/class.t3lib_loadmodules.php
740 -QCR: t3lib/class.t3lib_matchcondition.php
741 -QCR: t3lib/class.t3lib_modsettings.php
742 XQCR: t3lib/class.t3lib_page.php
743 XQCR: t3lib/class.t3lib_pagetree.php
744 XQCR: t3lib/class.t3lib_parsehtml.php
745 XQCR: t3lib/class.t3lib_parsehtml_proc.php
746 XQCR: t3lib/class.t3lib_positionmap.php
747 t3lib/class.t3lib_querygenerator.php [Kasper]
748 -QCR: t3lib/class.t3lib_readmail.php
749 XQCR: t3lib/class.t3lib_recordlist.php
750 -QCR: t3lib/class.t3lib_scbase.php
751 -QC-: t3lib/class.t3lib_sqlengine.php
752 -QCR: t3lib/class.t3lib_stdgraphic.php
753 XQCR: t3lib/class.t3lib_superadmin.php
754 -QC-: t3lib/class.t3lib_svbase.php
755 -QCR: t3lib/class.t3lib_tceforms.php [Kasper - 4.0]
756 t3lib/class.t3lib_tcemain.php [Kasper - 4.0]
757 XQCR: t3lib/class.t3lib_timetrack.php
758 -QCR: t3lib/class.t3lib_transferdata.php
759 XQCR: t3lib/class.t3lib_treeview.php
760 XQCR: t3lib/class.t3lib_tsfebeuserauth.php
761 -QCR: t3lib/class.t3lib_tsparser.php
762 t3lib/class.t3lib_tsparser_ext.php [Kasper]
763 t3lib/class.t3lib_tsstyleconfig.php [Kasper]
764 -QCR: t3lib/class.t3lib_tstemplate.php
765 XQCR: t3lib/class.t3lib_userauth.php
766 XQCR: t3lib/class.t3lib_userauthgroup.php
767 -QCR: t3lib/class.t3lib_xml.php
768
769 -QCR: t3lib/config_default.php
770 -QCR: t3lib/thumbs.php
771 XQCR: template.php
772 -QCR: t3lib/stddb/load_ext_tables.php
773 -QCR: t3lib/stddb/tables.php
774 -QCR: t3lib/stddb/tbl_be.php
775
776
777 sysext/cms/___________________________________________:
778 XQCR: tslib/class.tslib_content.php
779 XQCR: tslib/class.tslib_fe.php
780 -QCR: tslib/class.tslib_fetce.php
781 -QCR: tslib/class.tslib_feuserauth.php
782 -QCR: tslib/class.tslib_gifbuilder.php
783 XQCR: tslib/class.tslib_menu.php
784 XQCR: tslib/class.tslib_pagegen.php
785 XQCR: tslib/class.tslib_pibase.php
786 XQC-: tslib/class.tslib_search.php
787 XQCR: tslib/media/scripts/example_callfunction.php
788 XQCR: tslib/media/scripts/example_itemArrayProcFunc.php
789 XQCR: tslib/media/scripts/example_keepRollover.php
790 XQ-R: tslib/media/scripts/example_languageMenu.php
791 XQCR: tslib/media/scripts/example_typolinkpop.php
792 XQCR: tslib/media/scripts/fe_adminLib.inc
793 XQ-R: tslib/media/scripts/freesite_dummy_page_menu.php
794 XQCR: tslib/media/scripts/gmenu_foldout.php
795 XQCR: tslib/media/scripts/gmenu_layers.php
796 -QCR: tslib/media/scripts/makeMenu_datedirectory.inc
797 -QCR: tslib/media/scripts/makeMenu_keywords_updated.inc
798 XQCR: tslib/media/scripts/plaintextLib.inc
799 XQCR: tslib/media/scripts/postit.inc
800 ----: tslib/media/scripts/testscript.inc
801 ----: tslib/media/scripts/testscript_EXT.php
802 ----: tslib/media/scripts/testscript_INT.php
803 XQCR: tslib/media/scripts/tmenu_layers.php
804 XQCR: tslib/media/scripts/wapversionLib.inc
805 XQCR: tslib/media/scripts/xmlversionLib.inc
806 -Q-R: tslib/index_ts.php
807 -Q-R: tslib/pagegen.php
808 -Q-.: tslib/publish.php
809 .QCR: tslib/showpic.php
810 XQCR: web_info/class.tx_cms_webinfo.php
811 XQCR: layout/db_layout.php
812 XQCR: layout/class.tx_cms_layout.php
813 XQCR: layout/db_new_content_el.php
814
815
816 typo3/sysext/___________________________________________:
817 OK aboutmodules/
818 belog (2 / 500) [Kasper - 4.0]
819 - Needs a vision! Couldn't the Log be more useful?
820 beuser (1 / 1300) [Kasper - 4.0]
821 - Add option to Create backend users there! (backend users, groups, filemounts)
822 OK cms/
823 OK context_help/
824 css_styled_content (1/200) [H]
825 - Manual written?
826 XQCR: extra_page_cm_options/
827 XQCR: func_wizards/
828 XQC-: impexp
829 XQC-: indexed_search
830 XQCR info_pagetsconfig/
831 install/ [ingmar]
832 - Clean-up of the Install Tool in general!
833 OK lang/
834 lowlevel (2/800) [Kasper - 4.0]
835 - Extend support and finish it with the efforts soon to be done for TCEmain.
836 OK setup/
837 OK sv/
838 sys_action (1/400)
839 - Extend with API for adding custom action scripts
840 - flexforms for configuration!
841 OK sys_note
842 taskcenter (4/400) [Julle]
843 OK tsconfig_help
844 - Needs maintenance plan
845 version [Kasper - 4.0]
846 - (See Kaspers personal todo and Appendix about versioning in this document)
847 viewpage (2/200)
848 XQRC: wizard_crpages/
849 XQRC: wizard_sortpages/
850
851
852 For all extensions (even those approved):
853 - Remember to add package tags to all classes!
854 - Write documentation for each (CSH is fine enough).
855 - Check HTML source / CSS usage / XHTML compliancy / That icons are skinnable (add to "skin360")
856 - $LANG->getLL() are htmlspecialchars()'ed / second argument is "1"
857
858
859
860
861
862 *******************
863 APPENDIX: XHTML / XSS
864 *******************
865 Overview of implications before implementation:
866 - UTF-8 encoding is in fact expected by XML! So the real charset must be set
867 - Wellformedness: Nesting ok. All img tags must be ended with /> (frame,base,meta,link,img,br,hr,area,input)
868 - Lowercase for elements and attributes (and everything else...) + stylesheet element and attribute names.
869 - All attributes in quotes
870 - Minimized values not allowed: Must do this: selected="selected"
871 - Wrapping scripts and style element contents in CDATA - or alternatively they should have entitites converted.
872 - name/id attribute double
873 - Certain nesting of elements not allowed. Most interesting, <PRE> cannot contain img, big,small,sub,sup ...
874 - Setting charsets may put some special requirements on both XML declaration/ meta-http-equiv. (C.9)
875 - ampersands (and entities in general I think) MUST be converted to an entity reference! (&amps;). This may mean further conversion of non-tag content before output to page. May be related to the charset issue as a whole.
876
877 Related issues:
878 - Charset / encoding issues
879
880 ---------
881 Practical steps for creating XHTML compliance:
882
883 - lowercase: <(td|tr|p|div|table|b|i|u|a)
884 - attributes in lowercase and ""; TYP: bgColor, border=0 cellspacing=0 cellpadding=0, valign=top, onClick, onChange, onSubmit, method="POST", type="Submit"
885 - Ending tags: <br>, <hr>, <input>, <img> (Longer list: frame,base,meta,link,img,br,hr,area,input)
886 - shorthand: checked, selected, multiple, nowrap
887 - href="", action="", src="", onclick= tags: htmlspecialchars() of URLS
888 - <img -> ' alt="" />' REGEX: <img[^>]*[^-]>
889 - FINDING attributes with no quotes:
890 ([[:space:]]+)(class|face|hspace|vspace|rowspan|bgcolor|src|colspan|align|color|valign|border|width|height|cellpadding|cellspacing)=([^[:space:]>"']+)
891 ... and replace with: \1\2="\3"
892
893 -----------
894 Teststring for XSS bugs and SQL injection:
895 >><b><i>asdf</i></b>-\-\\-\"-\'-"-'-
896
897
898 ****************
899 APPENDIX: LPE
900 ****************
901 Syncronization (JH thoughts, general LPE):
902 DB -> DB (1):
903 - Production environment, which can dump configured set of tables to live server database and back. This is controlled from Production env.
904 - Live server has two databases: One which accepts content from P (and is never written to) (P->L). One which ARE written to and is READ back by P (L->P).
905 - The "P->L" database has a "backup" (db1, db2) where the "idle" database is the one being updated and after the update it's switched with the live db, which is now idle. The "L->P" database is not affected by this timing issue.
906 - uploads/* dirs (and any files at all) might be syncronized by general rsync/ftp syncronization. Both ways? Primarily from P->L. Basically this sync. might take the whole sourcecode with it...
907
908 Req to T3:
909 OK [The dbal implementation solves this.] - That EACH table can be found in its own database (configurable). This means the TYPO3_db constant might have to be wasted? And not just another MySQL database - at another Database server or type (like Oracle). This is related to DBAL.
910
911 DB->HTML
912 - Basically this is an rsync/ftp sync question which requires a set of static files.
913 - Also a "mixed mode" concept where static files not found are served dynamically by TYPO3, but where the TYPO3 install does NOT allow backend access at all - only frontend delivery.
914
915 Two situations:
916 - Publish static for local server, using mod_rewrite to direct requests transparently (static/dynamic). So all *.html requests WILL be found, static or dynamically! (Static/Dynamic blend)
917 - Publish static for FTP server. All *.html requests MUST exist. (Purely static, limitations acceptable.)
918
919 _____________________________________
920 Server sync. extension ("dbsync"):
921 Create an extension which syncronizes a set of tables to/from another TYPO3 installation
922 - Using SOAP for information exchange
923 - Local machine (production) = Client
924 - Remote machine (live) = Server
925 - Must have the "dbsync" extension installed both places
926 - client has a set of table names configured, where each is marked with the *direction* (possibly bi-directional in future?)
927 - For each table, client asks for a "header" which contains list of uid/tstamp/crdata/possibly MD5 sum of content (if tstamp/crdate is not present)
928 - Client compares this with local table, finds records to add/remove/delete
929 - Client pushes / retrieves records
930
931 _____________________________________
932 Static publishing ("staticpub" extension)
933 [2/2005: Today, a reverse proxy (using cache control) is a better solution than static publishing if you want to speed up a TYPO3 site. Therefore static publishing is a concept mostly interesting if you want to export a TYPO3 site as static files to an ordinary webhoster.]
934 - The extension "staticpub" has now been made for this purpose.
935
936
937 *****************************
938 APPENDIX: Image Processing
939 *****************************
940 Generally we want:
941 - Full PNG main support
942 - Full IM5.x support
943 - Non-ImageMagick version which CAN scale images (with GD/JPG)
944
945 To get rid of ImageMagick totally we need a GD with...:
946 - blur/sharpening
947 - scaling
948 - masking
949 - reduce colors / dithering
950 - jpg quality control
951 - 96 dpi / 72 dpi
952 - other effects?
953 - Support for many file formats.
954 This is currently implemented for GD2 by Kasper/Rene but the changes are not used. Just proof-of-concept. We are in contact with Pierre-Alain from the PHP-dev team about the issue and hope that his changes will make the future GDlib in PHP5 so powerful that ImageMagick is not needed anymore and most importantly: We can rely on a totally standard PHP installation available at any webhotel (in the future).
955
956 Notes:
957 - Consider imageprocessing issues like PNG / GDlib2 / Freetype2 / IM5.4.x / T1lib
958 - Other options: PHPImLib? GIMP?
959 - Improve Install Tool
960
961 --------------------
962 imagecopymerge
963
964 jonny at sanriowasteland dot net
965 29-Sep-2002 06:36
966
967 If you need to merge 2 png's (or presumably 2 gifs) with different color palettes, I have found this is the function to use. Just set pct to 99, and you are rocking. With pct set to 100, or imagecopy for that matter, the palette seems to go wonky. (It probably just uses the palette of the source image. but don't quote me on that).
968
969
970 Also see:
971 - [Kasper] "ImageManipulation" folder in Mailbox
972
973
974
975 *****************
976 APPENDIX: PHP5 issues
977 *****************
978 Generally: TYPO3 works with PHP5. But...:
979 - UTF-8 strings to freetype doesn't work! Renders box instead.
980 - array_merge must always have arrays as arguments. When this problem is found in TYPO3 it is regarded a TYPO3 bug and we fix it.
981 - Errors regarding treating strings as arrays: Normally, just check if the variable is an array first.
982 - Details: Non-existing indexes is not a problem if the variable is unset - only if it is another type (eg. string). This means we can normally just check if the first index is an array and it will work: is (is_array($a) && $a[key1][key2][key3]) ...
983
984
985
986 ***************************************
987 APPENDIX: Various ideas for extensions
988 ***************************************
989 EMAIL publication:
990 - People can publish stuff by sending email to certain adresse piping the content into database.
991 - This could also be upload of files, eg. a word document to a place in fileadmin/ (such a document could contain information inside which was displayed on the website).
992 - See mail from DH, subject; "Last day for feature requests" Message-ID: <200202181821120933.01CA5B9F@smtp.worldonline.dk>
993
994 IMPORT WEBSITE:
995 - Import external website! (Rene's extension). Includes some crawler feature (locally og external url)
996
997 BACKEND TOOLS:
998 - Global search and replace of records (Rene F?)
999
1000 Repeated intervals extension:
1001 - Cron-job which alters the start/end times according to some schedule.
1002 - Configurable for any element of course
1003
1004 New-Wizard:
1005 - An extension offering people to configure a wizard for creation of records. For instance you can configure to create a content element in three steps: First select type and header, then according to first choice, select more. Each screen has custom text/images/examples. Eventually the record is created. After creation there might be more options to set. In the end the wizard might fire up another application (like TemplaVoila) or a wizard or such.
1006 - Could be useful for: TemplaVoila Template Objects, Content Elements (like tables/forms/plugins), Pages of sorts.
1007 - Configuration could be in XML (since it needs a hierarchy)
1008
1009
1010 **************************************
1011 APPENDIX: PATTERN-control
1012 **************************************
1013 - Specify a pattern of allowed/required values.
1014 - Those values are on the basic level just "table:uids". On the next level it would also set requirements on one or more field values inside!
1015 - How can this be done?
1016 - Will be hard to manage that records being a part of the pattern are not changed after having been added to the pattern. But at least this could be a beginning...?
1017
1018
1019 **************************************
1020 Rapport of "deleted"-check in typoscripts (190500)
1021 **************************************
1022 TYPO3:
1023 - "deleted"-field must be set manually in userauth for user-tables!
1024 Hardcoding:
1025 - "pages" in load_tree.php
1026 - "sys_filemounts" in userauth_group
1027 - "user-group tables" in userauth_groups
1028 - "pages" in ti_inc.php
1029 - "pages" in transferdata.php
1030
1031 TypoScript:
1032 - sys_domain is NOT checked for deleted in "page.php"
1033 - getForeignRecords() (page.php) does not check for deleted!!! (this is even not used any more!!
1034 Hardcoding:
1035 - "pages" in page.php
1036 - "pages" in t_search.php
1037 - "pages" in index_ts.php (caching)
1038 - "sys_template" in t_template.php
1039 - "fe_groups" in index_ts.php
1040
1041
1042 **************************************
1043 Bugs, considerations, notes
1044 **************************************
1045 - mail() hangs in 90 second (approx) if computer is not on the net! (deliver to mail-server)
1046 - REWRITE of files when they already exists? shortMD5 is guilty?
1047 - "Fields not properly updated:" - error: Varchar(xx) cannot included spaces AFTER the last character and therefore TYPO3 interface reports an error. Solve this error by setting "eval" to "trim" in $TCA for inputfields of the type VARCHAR.
1048 - mysql_query() function should not be used I think as this queries the current database. mysql() should be used instead.
1049 - JavaScript: escape() doesn't rawurlencode the "+"-character. This can be a problem, eg. when trying to rename files with a plus in the name. I have made an alternative escape-function.
1050 - PDF-files over 600 k are not rendered by ImageMagick. Less than 270 is! How come and is this true. Number of pages?
1051 - When GDlib is disabled it can be very confusing that record icons does not change their look according to hidden/starttime/endtime etc...
1052 - many files in typo3temp/ slows down processing. Eg. a image resize with 33.000 files in typo3temp/ took 3 seconds where it would take 40 ms when the folder is clean. (on linux)
1053
1054
1055
1056 *********************************
1057 Translation of Backend
1058 *********************************
1059 Overview of missing translations. (1547 normal core labels, updated 22/5 2005 before release of TYPO3 3.8.0)
1060 Numbers are new labels needing translation (changed labels are not measured)
1061
1062 - dk [Danish] 0
1063 - de [German] 1
1064 - no [Norwegian] 0
1065 - it [Italian] 0
1066 - fr [French] 134
1067 - es [Spanish] 0
1068 - nl [Dutch] 1
1069 - cz [Czech] 202
1070 - pl [Polish] 4
1071 - si [Slovenian] 304
1072 - fi [Finnish] 0
1073 - tr [Turkish] 254
1074 - se [Swedish] 0
1075 - pt [Portuguese] 421
1076 - ru [Russian] 235
1077 - ro [Romanian] 358
1078 - ch [Chinese (Simpl)] 0
1079 - sk [Slovak] 113
1080 - lt [Lithuanian] 332
1081 - is [Icelandic] 904
1082 - hr [Croatian] 0
1083 - hu [Hungarian] 1
1084 - gl [Greenlandic] 1316
1085 - th [Thai] 426
1086 - gr [Greek] 1547
1087 - hk [Chinese (Trad)] 3
1088 - eu [Basque] 1223
1089 - bg [Bulgarian] 302
1090 - br [Brazilian Portuguese] 0
1091 - et [Estonian] 457
1092 - ar [Arabic] 149
1093 - he [Hebrew] 438
1094 - ua [Ukrainian] 292
1095 - lv [Latvian] 35
1096 - jp [Japanese] 123
1097 - vn [Vietnamese] 1530
1098 - ca [Catalan] 1547
1099 - ba [Bosnian] 1
1100 - kr [Korean] 1547
1101 - eo [Esperanto] 1536
1102 - my [Bahasa Malaysia] 1545
1103 - hi [Hindi] 1547
1104
1105
1106