[TASK] Updated release notes for 1.4.0, updated version number
[Packages/TYPO3.CMS.git] / typo3 / sysext / extbase / ChangeLog.txt
1 ChangeLog for Extbase
2 =====================
3
4 Changes for 1.4.0:
5 ==================
6 included in TYPO3 4.6.0.
7
8 This release features more than 100 changes, most of them being bugfixes in all areas of Extbase.
9 Thanks every community member for bug reports, submitting patches and reviewing! Extbase
10 would not be possible without you!
11
12 !!! New Property Mapper, updated MVC stack
13 ------------------------------------------
14
15 The Property Mapper has been completely rewritten in FLOW3, and this has also been backported
16 to Extbase. The new property mapper is very configurable and extensible.
17
18 Furthermore, the MVC stack has been adjusted to be in sync with FLOW3 again. However, the new
19 behavior is ONLY ACTIVATED MANUALLY. We suggest that you activate it for your new extensions
20 by inserting:
21
22 plugin.tx_[yourExtensionName].features.rewrittenPropertyMapper = 1
23
24 The documentation for the new property mapper can be found at
25
26 http://flow3.typo3.org/documentation/guide/partiii/propertymapping.html
27
28 They also apply to Extbase.
29
30 !!! Updated Validation API
31 --------------------------
32
33 The Validation API has also changed, but this is only a breaking change if you do NOT subclass
34 *AbstractValidator*, but implement *ValidatorInterface* yourself. In this case, you need to
35 adjust your custom validator to support the new API.
36
37 Dependency Injection for Domain Objects
38 ---------------------------------------
39
40 Dependency Injection is now also possible for reconstituted Domain Objects.
41
42 Signal / Slot implementation
43 ----------------------------
44
45 The "Signal / Slot" feature has been backported from FLOW3, implementing a future-proof
46 alternative to hooks.
47
48 Command Controller
49 ------------------
50
51 Use it from commandline like this:
52 ./cli_dispatch.phpsh extbase <command identifier> --argumentName=value
53
54 for example:
55 ./cli_dispatch.phpsh extbase help
56
57 NOTE: Unlike in FLOW3 Commands have to be registered explictly
58 in ext_localconf.php in order to be callable via CLI:
59 if (TYPO3_MODE === 'BE') {
60 $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['extbase']['commandControllers'][] = 'Tx_MyExtension_Command_FooCommandController';
61 }
62
63
64 Full Changes for 1.4.0 beta1 - 1.4.0:
65 =====================================
66 [BUGFIX] Pootle: Multi-line labels are not rendered properly
67 [TASK] English XLIFF files should not contain target element
68 [TASK] Fix CGL issues on "else if" constructs
69 [TASK] Update version to 1.4.0-rc1
70 [FEATURE] Backport CommandController Implementation
71 [!!!][TASK] Disable rewritten property mapper by default
72 [BUGFIX] Removing "Repository" in class name makes extensions unusable
73 [BUGFIX] Default error FlashMessage has wrong severity
74 [BUGFIX] Fix check against @ignorevalidation annotations
75 [BUGFIX] ConfigurationManager use FrontendSimulator only if neccessary
76 [TASK] Increase version number
77 [BUGFIX] Default action is not properly resolved
78 [FEATURE] Descriptive error on invalid action name
79 [BUGFIX] Replaced call to deprecated t3lib_div::testInt()
80 [FEATURE] Skip default controller and action in generated URIs
81 [FEATURE] Setting a scheme for a URI
82 [BUGFIX] Don't clone ContentObject in ConfigurationManager
83 [TASK] Remove deprecated methods & properties
84 [BUGFIX] Tx_Extbase_Utility_Localization::translate() must return NULL for non-existing keys
85 [BUGFIX] Clone ContentObject
86 [BUGFIX] Fix method visibility of AbstractConfigurationManager::getTypoScriptSetup()
87 [TASK] Convert XLIFF files to Tab indentation
88 [BUGFIX] XLIFF: Approved attribute is on wrong element
89 [+BUGFIX] Fixing incorrect references to F3 classes
90 [+BUGFIX] Added missing initializeView method in EmptyView
91 [+BUGFIX] Fix classname of Exception, ConfigurationManager
92
93 Full Changes for 1.4.0 beta1:
94 =============================
95 [!!!][TASK] Enable rewritten property mapper by default
96 [+FEATURE] Extbase (Persistence): Allow pid of object to be set from action-controller. Thanks to Michael Budnick and Balisky Christophe. Resolves: #7572
97 [FEATURE] Speed up ObjectAccess
98 [+FEATURE] Extbase (Persistence): Allow removing previously set limit with unsetLimit(). Resolves: #27445
99 [-TASK] Remove autoloader. Thanks to Christian Kuhn. Resolves: #28249
100 [+FEATURE] introduce signal in MVC/Dispatcher
101 [TASK] Correct classnaming for Tx_Extbase_Tests_Unit_BaseTestCase
102 [-BUGFIX] remove datecheck on timezone test
103 [+FEATURE] remove usage of deprecated methods in unit-tests
104 [BUGFIX] Adjust unit tests to changes
105 [BUGFIX] create ClassSchema with ObjectManager::create()
106 [BUGFIX] TypeHandling class not found. This is a hotfix for #28121. Resolves: #28121
107 [TASK] Extbase (Utility): Add service for TypeHandling. Related: #13864
108 [+BUGFIX] Extbase: CGL: Convert case of acronyms from UPPERCASE to CamelCase. Resolves: #12189
109 [TASK] Extbase: Use strpos() instead of strstr() where possible
110 [+BUGFIX] allow skipping of arguments in signal dispatch
111 [TASK] Adjust PHP dependency in ext_emconf.php
112 [FEATURE] Add check for loaded DBAL to requirements check
113 [TASK] Recreate ext_autoload.php. Resolves: #27680
114 [!!!][+FEATURE] (MVC): Modify MVC stack to use the new property mapper. Resolves: #27656
115 [!!!][+FEATURE] (Validation): Adjusted and re-done Validation API. Resolves: #27653
116 [+FEATURE] (Property): Add new property mapper. Related: #27059
117 [+FEATURE] (Persistence): Synchronize PersistenceManagerInterface more with FLOW3. Resolves: #27657
118 [+FEATURE] (Reflection): Object Access can now access private properties. Resolves: #27652
119 [+FEATURE] (Utility): synchronize TypeHandling class with FLOW3. Resolves: #27651
120 [!!!][FEATURE] Improve error and message handling. Resolves: #27650
121 [TASK] (MVC, Property): Deprecation of the the old property mapper
122 [+FEATURE] (Configuration): Feature flag implementation
123 [+BUGFIX] (Persistence): return correct objectCountByQuery when query contains left join and no limit. Fixes: #13075
124 [BUGFIX] Adapt cache configuration to 4.6. Resolves: #27546
125 [+BUGFIX] (SignalSlot): Fix unit tests. Resolves: #27550
126 [+BUGFIX] Make ObjectManager::isRegistered work
127 [+FEATURE] backport SignalSlotDispatcher
128 [+BUGFIX] Fix localization handling to support XLIFF. Resolves: #27411
129 [+BUGFIX] Extbase (Validation): E-mail address with space at the end is invalid. Thanks to Marc Bastian Heinrichs. Resolves: #27305
130 [+BUGFIX] Throw exception if a class to be reflected does not exist. Fixes: #8718
131 [TASK][!!!] Fix localization handling to support XLIFF. Resolves: #27411
132 [TASK] Extbase (Validation): Clean up tests for FloatValidatorTest and Integer ValidatorTest
133 [+BUGFIX] Extbase (Persistence): Use correct language-uid for translations. Thanks to Benjamin Mack. Resolves: #26521
134 [TASK] Extbase (Persistence): Remove duplicate registration in identity map. Thanks to Alexander Stehlik. Resolves: #26875
135 [BUGFIX] Fix EmailAddressValidatorTest
136 [+FEATURE] Extbase (MVC): Make response format configurable in TypoScript. Thanks to Christian Zenker. Resolves: #9216
137 [BUGFIX] Docu, AbstractController: Clearer difference of forward/redirect. Resolves: #7900
138 [BUGFIX] Fix case of setChildSortByFieldName in DataMapFactory. Resolves: #27334
139 [+BUGFIX] (Property) Fixed only adding objects to ObjectStorage. Thanks to Thomas Maroschik. Fixes: #13288
140 [+TASK] Extbase: Move static typoscript utility methods to a service. Related: #13864
141 [+TASK] Extbase: Move most of the static extension utility methods to a service. Related: #13864
142 [+BUGFIX] baseUri is added on external links. Thanks to Michael Feinbier for this fix! Resolves: #10258
143 [+BUGFIX] (Testing): Fix wrong doc comment in BaseTestCase. Resolves #13695
144 [+BUGFIX] Cloning a ValueObject should not set its uid to NULL. Resolves #26772
145 [+BUGFIX] ObjectStorage->toArray(): fix array pointer problem. Resolves #9117
146 [+BUGFIX] Persistence: Fixed building unionStatement from opposite. Thanks to Christian Zindel. Resolves #13782
147 [+BUGFIX] Persistence: Update tstamp column on objects removal. Thanks to Michel Nederlof. Resolves #10634
148 [+BUGFIX] correct warning in ObjectStorage & LazyObjectStorage
149 [~CLEANUP] some smaller comment cleanups
150 [+TASK] Extbase: Moved static cache utility class to a service. Relates to: #13864
151 [+FEATURE] implement ObjectManager::isRegistered()
152 [+TASK] improve exception message in Argument
153 [TASK] Performance tuning in container by moving some information into the cached ClassInfo object.
154 [~BUGFIX] avoid fe_user's type to be overridden
155 [+BUGFIX] Avoiding cHash for nonCacheable actions prevent action from being called. Related: #13970
156 [+BUGFIX] MVC: Make forwarding of objects work. Resolves #9867
157 [~CLEANUP] correct function parameter types
158 [+BUGFIX] Persistence: return ObjectCount return value as an integer. Thanks to Georg Ringer. Resolves #13151
159 [+BUGFIX] Revert incorrect deletion of Query::count() & Query::withUid(). Relates: #13745
160 [~CLEANUP] apply naming convention for flexForms
161 [+TASK] Move FlexForm parsing to a dedicated Service. Thanks to Rens Admiraal. Resolves #13032
162 [!!!][+BUGFIX] make backend-modules in web use new pagetree by default
163 [~CLEANUP] smaller deprecated clean-ups
164 [+FEATURE] Extbase: Enable Dependency Injection for Domain Models. Thanks to Pascal Jungblut. Resolves #11311
165 [+BUGFIX] (Persistence) Make Typo3QuerySettings exchangeable. Resolves #13191
166 [+BUGFIX] (Persistence) clone setDefaultQuerySettings for new queries. Resolves #12702
167 [~BUGFIX] correct annotations of Tx_Extbase_Persistence_Mapper_DataMapper. Resolves #13185. Thanks to Simon Schaufelberger.
168 [~TASK] (FlashMessages) finish the renaming of flashMessages
169 [+BUGFIX] (Configuration): Adjusted ConfigurationManagerInterface Interface to implementation
170 [~TASK] Extbase: Raising version from 1.3.0 to 1.4.0-devel
171 [+TASK] Extbase (MVC): Removed duplicated code from RequestBuilder. Thanks to Peter Niederlag. Resolves #12569.
172
173
174 Changes for 1.3.0:
175 ==================
176 included in TYPO3 4.5.0 LTS.
177
178 This release fixes an important bug in the persistence layer, which caused related objects not to be updated.
179
180 Full Changes for 1.3.0:
181 =======================
182
183 [+BUGFIX] Extbase (Tests): reset added t3lib_div instances in UriBuilder & Extension tests
184 [+BUGFIX] Extbase (Persistence): Fixed updating of related objects. Thanks to Björn Steinbrück and Bastian Waidelich for digging into this issue. Resolves #9270, #9182, #10211.
185 This is the second attempt after having reverted the first one in r3920. The patch includes some clean-up. Important additional changes:
186 * The objects within an ObjectStorage are now added to the queue. This is necessary to persist changes made to those contained objects without having changed the composition of objects.
187 * Moved the _memorizeCleanState() from the AbstractEntity to the AbstractDomainObject. In theory ValueObjects are immutable, but we need this as sometimes ValueObjects are stored in two steps (1. to get a UID, 2. to persist its properties). Maybe we have to recheck this for 1.4.
188 * Fixed some possible problems with detecting an ObjectStorage (namely SplObjectStorage->getUid()).
189 [+TASK] Extbase (Persistence): Added two properties to describe a weird PHP behavior if calling current() on an ObjectStorage.
190 [+BUGFIX] Extbase (MVC): Fixed argument order of Tx_Extbase_Utility_Extension::isActionCacheable() call in UriBuilder
191 [+TASK] Extbase (DomainObject): Added setPid() and getPid() to the DomainObjectInterface and removed the "final" keyword.
192 [~TASK] Extbase: Moved isActionCacheable() from UriBuilder to Utility/Extension helper class
193 Moved the protected method to a public static functions in Tx_Extbase_Utility_Extension
194 and added respective unit tests.
195 Note: We're not happy with all the public static functions in Utility/Extension.php
196 but that's currently the place for those helper functions.
197 [+TASK] Extbase (Utility): implemented validation of arguments passed to sql statements in Tx_Extbase_Utility_Cache. (resolves #11978)
198
199 Changes for 1.3.0 RC1:
200 ======================
201 included in TYPO3 4.5.0 RC1.
202
203 This release features many bugfixes, in the following areas:
204 * Persistence - invalid SQL has been fixed at various places
205 * MVC - the URI Builder can now handle cached / uncached actions correctly
206 * Improved error handling to catch some configuration errors
207 * Localization - TypoScript overrides for locallang keys with dot inside now works (_LOCAL_LANG.foo.bar)
208 * Persistence - added "pid" property and getter and setter to AbstractDomainModel; thus you can now move
209 domain objects to different pages. However, this feature has *no support for workspaces* yet.
210 * Dependency Injection - now allows the injection of prototypes (see below)
211 * Configuration - for defining the Storage PID, one can use arbitary TypoScript objects (see below)
212
213 Dependency Injection Improvements
214 ---------------------------------
215
216 Now, Prototype objects are allowed to be injected into other objects. This means the following cases
217 are supported:
218
219 * Singletons which need Singletons (most common)
220 * Singletons which need Prototypes (very uncommon,
221 as it usually hints at the fact that the injected
222 prototype should be a singleton). In this case,
223 WE WRITE A DEVLOG MESSAGE
224 * Prototypes which need Singletons
225 * Prototypes which need Prototypes
226
227 TypoScript Storage PID Improvements
228 -----------------------------------
229
230 The persistence.storagePid now has stdWrap properties so the storagePid can be set dynamically.
231 Now follows an example for use in the Frontend:
232 plugin.tx_extkey.persistence.storagePid.cObject = TEXT
233 plugin.tx_extkey.persistence.storagePid.cObject.value = 8,3
234 ... and this is how you can use it in the backend:
235 module.tx_extkey.persistence.storagePid.cObject = TEXT
236 module.tx_extkey.persistence.storagePid.cObject.value = 8,3
237
238 Full Changes for 1.3.0 RC1:
239 ===========================
240 [+BUGFIX] Extbase (Object): constructor injection now works if default value for a dependency is NULL. Thanks to Lienhart Woitok! Resolves #11623
241 [+BUGFIX] Extbase (Object): Allow injection of prototypes via dependency injection. Resolves #12013
242 [+BUGFIX] Extbase (Persistence): Use sql_free_result() in Typo3DbBackend to free result memory. Resolves #10957
243 [~BUGFIX] Extbase (Persistence): fixed an wrong referenced exception (resolves #12403)
244 [~BUGFIX] Extbase (Persistence): make Tx_Extbase_Persistence_Repository::remove() handle freshly created objects right. (resolves #11128)
245 [+BUGFIX] Extbase (MVC): UriBuilder automatically added a cHash even on links to nonCacheable actions where this is not needed/recommended (resolves #8565)
246 [~BUGFIX] Extbase (Persistence): made union statement on comma seperated list use find_in_set (Thanks to Marc Bastian Heinrichs) (resolves #9772)
247 [~FOLLOWUP] Extbase (Utility): allow clearPageCache() to clear single, multiple and all pageCaches. (resolves 11978)
248 [+TASK] Extbase (Utility): allow clearPageCache() to clear single, multiple and all pageCaches.
249 [+BUGFIX] Extbase (MVC): Improve Error Handling in Request Builder. Resolves #11302
250 [+BUGFIX] Extbase (Persistence): remove superfluous require_once statements. Thanks to Oliver Klee. Resolves #12324
251 [+BUGFIX] Extbase (Tests): Remove require_once of phpunit testclasses. Thanks to Oliver Klee. Resolves #12323
252 [+BUGFIX] Extbase (Utility): Make _LOCAL_LANG override work with dots. Thanks to Thomas Maroschik. Resolves #12121
253 [+BUGFIX] Extbase (Persistence): Fixed using the correct columnname for contains comparison with RELATION_HAS_MANY and empty parentKeyFieldName. Resolves #11048
254 [+BUGFIX] Extbase (Persistence): Added the missing pid property to the AbstractDomainModel. Related to #11361
255 [+BUGFIX] Extbase (Persistence): Language Oberlay now works with page table as well. Thanks to Andre Stoesel. Resolves #11319
256 [+BUGFIX] Extbase (Persistence): The QueryObject gets cloned now in the getFirst() method of the QueryResult (as it was intended). Thanks to Sebastian Fischer. Resolves #11855.
257 [+BUGFIX] Extbase (Bootstrap): Bootstrap calls initialize on reflectionService if it's already initialized. Resolves #12346, resolves #12156
258 [+BUGFIX] Extbase (Persistence): Fix equals constraint with $caseSensitive FALSE (closing bracket missing). Thanks to Alexander Berl. Resolves #10781
259 [+BUGFIX] Extbase (Reflection): ObjectAccess::isPropertyGettable works for ArrayAccess objects. Resolves #10148
260 [+BUGFIX] Extbase (Configuration): Allow StoragePid to be manually defined by TS. Thanks to Rens Admiraal! Resolves #8397
261 [+BUGFIX] Extbase (Configuration): Fix warning in AbstractConfigurationManager. Resolves #11631
262 [+BUGFIX] Extbase (Object): Disabling Dependency Injection for injectSettings method. Resolves #11011
263
264
265 Changes for 1.3.0 Beta 4:
266 =========================
267 included in TYPO3 4.5.0 Beta 4.
268
269 This release contains numerous bugfixes, and a few small features:
270
271 * Tx_Extbase_Utility_Extension::registerPlugin() now has a fourth parameter $pluginIconPathAndFilename
272 that you can set to the path of an icon, that will be displayed in the plugin dropdown in the backend.
273 You can use it like:
274 Tx_Extbase_Utility_Extension::registerPlugin(
275 $_EXTKEY,
276 'MyPlugin',
277 'My Plugin description',
278 t3lib_extMgm::extRelPath($_EXTKEY) . 'Resources/Public/Icons/someIcon.gif'
279 );
280 * Hidden Records in Workspaces now work
281 Before, if t3lib_pageSelect::getRecordOverlay returned FALSE (if
282 no translation is found), a fatal error occured:
283 PHP Catchable Fatal Error: Argument 2 passed to Tx_Extbase_Persistence_Mapper_DataMapper::getTargetType()
284 must be an array, boolean given, called in Persistence/Mapper/DataMapper.php
285
286 Full Changes for 1.3.0 Beta 4:
287 ==============================
288
289 [+TASK] Extbase (Tests): Fixed a repository unit test so that it works in CLI mode
290 [+TASK] Extbase (Tests): Fixed Extbase unit tests
291 [+BUGFIX] Extbase (Persistence): Hidden Records in Workspaces now work
292 [~TASK] Extbase: Fixed line endings (Windows to Unix).
293 [~TASK] Fluid (Tests): Fixed some more testcase class names and some unit tests
294 [+FEATURE] Extbase (Utility): Add support for custom specify custom plugin icon. Resolves #11179
295
296 Changes for 1.3.0 Beta 3:
297 =========================
298 included in TYPO3 4.5.0 Beta 3.
299
300 This release features numerous stability improvements, the biggest one
301 being a re-written core of the Object Manager, such that Lifecycle Methods
302 are supported now. This means, that a method "initializeObject()" gets called
303 as soon as all dependencies are injected and initialized.
304
305 Additionally, Extbase didn't work in all cases in the TYPO3 Backend. This has
306 also been improved, so Extbase (again) works in the backend
307 with an empty page tree.
308
309 Full Changes for 1.3.0 Beta 3:
310 =============================
311
312 [+BUGFIX] Extbase (Tests): Fixed Tx_Extbase_MVC_Controller_AbstractController_testcase. Thanks to Oliver Klee. Resolves #11567.
313 [BUGFIX] Extbase (Configuration): Make Extbase work again in Backend
314 [!!!][+TASK] Extbase (Object): Rewritten Object Container
315 [+BUGFIX] Extbase (MVC): Improve Exception message
316 If one misses the @dontvalidate annotation, he will
317 get a strange error which does not have a hint that
318 the @dontvalidate is missing. Now, the exception message
319 is extended.
320 [+API] Extbase (Configuration): Adding getContentObject to API
321 [+TASK] Extbase (Reflection): Added deprecation annotation to ObjectAccess::getAccessiblePropertyNames()
322 To stay in sync with FLOW3, the methods getAccessibleProperties() and getAccessiblePropertyNames() to
323 getGettableProperties() and getGettablePropertyNames().
324 For compatibility reasons the old methods will stay in Extbase until version 1.5.
325 Note: you can now check wheter properties are settable as well
326 [+FEATURE] Extbase (Reflection): Tx_Extbase_Reflection_ObjectAccess supports stdClass objects now
327 I've backported the ObjectAccess class and its unit tests from FLOW3.
328 Note: FLOW3's implementation allows to specify a third argument for the
329 method getPropertyPath() in order to support Closures.
330 This part is not backported as it's not compatible with PHP < 5.3.
331
332 Changes for 1.3.0 Beta 2a:
333 ==========================
334 included in TYPO3 4.5.0 Beta 2.
335
336 This release includes a whole bunch of bugfixes and refactorings, the most important ones listed below.
337 Because the FlashMessages now use t3lib_FlashMessage, TYPO3 4.5 is MANDATORY!
338
339 The main changes are:
340
341 * Tx_Extbase_MVC_Controller_FlashMessages now internally uses the
342 t3lib_FlashMessageQueue that has been introduced with TYPO3 4.3.
343 This results in following changes:
344 - flashmessages are now treated globally, not in a per-extension-scope. As soon as you output the messages first, the session will be flushed
345 - a flashmessage is not a simple strings anymore, but consists of
346 message body and (optionally) title & severity.
347 You can specify title and severity like this:
348 $this->flashMessages->add('Your message', 'some title', t3lib_FlashMessage::WARNING);
349 - you can now output flashmessages in backend that were set from other TYPO3 classes
350 - a revised flashmessage ViewHelper allows you to render flashmessages in the style
351 of core flashmessages now (see Fluid changelog)
352 - Resolves #10821
353 * Configuration Manager can now deal with recurring FlexForm Sections (#6067)
354 * Fixed Tx_Extbase_Domain_Model_FrontendUser (and marked the old API as deprecated)
355 * Bugfixes related to Lazy Loading
356
357 Full Changes for 1.3.0 Beta 2a:
358 ==============================
359 [+BUGFIX] Extbase (Configuration): change the order of methods to determine the current pageId for backend modules, which is used to fetch the TS framework configuration. Fixes #11205
360 [+TASK] Extbase (Object): Make sure the class info cache is returning valid objects
361 [+BUGFIX] Extbase (Persistence): Persistence_Backend::getIdentifierByObject should work with LazyLoadingProxy
362 getIdentifierByObject should check if object is an instance of Tx_Extbase_Persistence_LazyLoadingProxy and should return the
363 identifier of the real object.
364 [+BUGFIX] Extbase (Configuration): slightly tweaked FrontendConfigurationManager (basically replaced explode() by t3lib_div::trimExplode() call)
365 [+TASK] Extbase (Tests): Added some unit tests for Backend- and FrontendConfigurationManager. To be continued
366 [+BUGFIX] Extbase (DomainObject): added default __toString method to Tx_Extbase_DomainObject_AbstractDomainObject. Thanks to Marco Huber. Resolves #8083
367 [+BUGFIX] Extbase (MVC): Fixed UriBuilder for handling LazyLoadingProxy objects as arguments. Resolves #10705
368 [+TASK] Extbase (Object): re-added Tx_Extbase_Object_Manager to gain more backwards compatibility. This class is marked deprecated and will be removed in Extbase 1.5
369 [+BUGFIX] Extbase (Tests): tweaked ObjectContainer tests. Tests are failing deliberately for now
370 The DI implementation has to be rewritten, as discussed.
371 This relates to: #11160
372 [+BUGFIX] Extbase (Domain): fixed (non-breaking) method name for getting usergroup in Tx_Extbase_Domain_Model_FrontendUser. Resolves #11019
373 [+TASK] extbase (ConfigurationManager): Made FrontendConfigurationManager parse recurring sections in flexforms right. Thanks to Franz Koch (resolves #6067)
374 [+BUGFIX] Extbase (Configuration): Slightly tweaked AbstractConfigurationManager
375 [+TASK] Extbase (Tests): Added unit tests for AbstractConfigurationManager
376 Note: the ConfigurationManager now always overrides switchableControllerActions
377 when retrieving configuration for the current plugin. Before that only happened
378 when no extensionName/pluginName was specified.
379 Additionally: It's not possible anymore to specify new controllers in
380 switchableControllerAction configuration. That was the intended behavior.
381 [+TASK] Extbase (Tests): Renamed test files from "*_testcase.php" to "*Test.php"
382 [+TASK] Extbase (Tests): Moving all Tests in "Unit" directory.
383 [+FEATURE] Extbase (MVC): add possibility to output FlashMessageQueue (Resolves #10821)
384 [+TASK] Extbase (Persistence): counting query results does not work with limit constraints (resolves #10956) Tx_Extbase_Persistence_Storage_Typo3DbBackend::getObjectCountByQuery() replaces the SELECT part
385 of a query by COUNT(*) before executing a statement.
386 This did not work as expected in some cases, e.g. the LIMIT constraint was ignored by the count query.
387 [+TASK] Extbase (Persistence): findOneBy*() methods should return NULL if no item was found (Resolves #10958)
388 [+TASK] Extbase (Core): Slightly improved error handling in bootstrap (Resolves #11055)
389 [~TASK] Extbase (Utility): Changed Tx_Extbase_Utility_TypoScript:convertPlainArrayToTypoScriptArray to self::convertPlainArrayToTypoScriptArray. Resolves #10538.
390 [+BUGFIX] Extbase (MVC): UriBuilder: use current plugin if no pluginName has been specified
391 If multiple plugins are found, that are configured to handle the specified action, Extbase
392 will throw an Exception. Now, this only happens if the *current* plugin does not contain
393 the action.
394
395 Changes for 1.3.0 Beta 1a:
396 ==========================
397 included in TYPO3 4.5.0 Beta 1.
398
399 Extbase 1.3.0 Beta 1 has a lot new and greatly improved features, and also many bugfixes.
400 The highlights are outlined below, and explained in-depth a little further down.
401
402 NOTE: This release brings new table definitions, so please visit the install tool or the Extension
403 Manager and update the tables of Extbase.
404
405 *** EVERY FEATURE IS DESCRIBED IN DEPTH BELOW ***
406
407 * Dependency Injection
408 * Dispatcher Refactoring & Completely re-done Configuration Manager
409 This means that Tx_Extbase_Dispatcher is now DEPRECATED!
410 Additionally, if you defined the TypoScript setup for a plugin by hand (which you should not),
411 the syntax has changed a bit there.
412 * QueryResult refactoring (needed for Fluid Widgets)
413 THIS COULD BE A BREAKING CHANGE FOR YOU!
414
415 Additionally, the following smaller features were implemented:
416
417 * Configurable plugin namespaces (#8365)
418 * Automatic target page determination (#9121)
419 * Improved resolveView() mechanism
420 * Allowing plugins to be registered as new content element (#10666)
421 * Default Orderings & QuerySettings (#10319)
422
423 Breaking Changes:
424
425 * The UriBuilder now uses the current cObject instead of creating a new instance in the constructor. This is a breaking change if you instantiated the UriBuilder in your code. Please use the Extbase ObjectManager or inject the ConfigurationManager manually.
426 * fixed typo in getter and setter of Tx_Extbase_Domain_Model_FrontendUser::lastlogin
427 * Flashmessages now share a scope throughout the extension. Before, every plugin had it's own scope leading to the messages only being output when entering the same plugin again (e.g. redirecting from one plugin to another would never display the messages)
428
429 Known issues:
430
431 * The Unit Tests do not fully work again, we will fix that in the next days.
432 * There might be still issues with the support of backend modules, we are working on that!
433
434 Dependency Injection
435 --------------------
436
437 Instead of creating objects through t3lib_div::makeInstance, and connecting them together manually,
438 you yan now use Dependency Injection (DI) for that. Let's give an example: If my class "Tx_Foo_Controller_MyController"
439 needs another class "Tx_Foo_Service_LoggingService", it can get an instance of the logging service
440 by Dependency Injection, by specifying the following code:
441
442 class Tx_Foo_Controller_MyController {
443 protected $loggingService;
444
445 /**
446 * @param Tx_Foo_Service_LoggingService $loggingService
447 */
448 public function injectLoggingService(Tx_Foo_Service_LoggingService $loggingService) {
449 $this->loggingService = $loggingService;
450 }
451 }
452
453 The DI container finds that the class "MyController" has an method whose name starts with "inject",
454 and thus passes the logging service to MyController.
455 It is important that you can *only retrieve Singletons* through the inject annotations. If you need
456 to instanciate a prototype object, it is important to *not* use t3lib_div::makeInstance() anymore
457 (as it bypasses the DI container), but instead you need to inject the ObjectManager, and ask it
458 to create your prototype object using the create() method. Example:
459
460 class Tx_Foo_Controller_MyController {
461 protected $logFile;
462
463 /**
464 * @param Tx_Extbase_Object_ObjectManagerInterface $objectManager
465 */
466 public function injectObjectManager(Tx_Extbase_Object_ObjectManagerInterface $objectManager) {
467 $this->logFile = $objectManager->create('Tx_Foo_Domain_Model_LogFile');
468 }
469 }
470
471 In the above example, you have seen that we reference not the concrete implementation *ObjectManager*,
472 but instead the *ObjectManagerInterface*. If a name ends with "...Interface", Extbase DI automatically
473 strips away the "Interface" from the name, and expects to find a concrete implementation of that interface.
474 This is generally a very good practice: For your core classes, you should always reference an *interface*,
475 and let the DI container instanciate the concrete class.
476
477 Additionally, Extbase DI allows to *replace* certain implementation classes by other classes through
478 configuration in TypoScript. Let's give an example, and then you can see the concept:
479
480 config.tx_extbase.objects {
481 Tx_Extbase_Persistence_Storage_BackendInterface {
482 className = Tx_Extbase_Persistence_Storage_Typo3DbBackend
483 }
484 }
485
486 This essentially means to the DI container: "At all places where you encounter a "BackendInterface",
487 you should instanciate the "Typo3DbBackend" class."
488
489 However, note that this setting can only be configured *globally* right now, it is not possible
490 to override that on a per-extension basis.
491
492 Generally, the Extbase DI container provides a subset of the functionality of FLOW3's dependency injection.
493
494 Dispatcher Refactoring & Completely re-done Configuration Manager
495 -----------------------------------------------------------------
496
497 In the last versions of Extbase, the Dispatcher (Tx_Extbase_Dispatcher) was the main entry point to Extbase.
498 However, as we did not have Dependency Injection at that point, it became really complex and did lots of things
499 which it should not do in the first place. That's why we greatly improved that part. Now, any Extbase extension
500 is invoked using the Tx_Extbase_Core_Bootstrap. Additionally, the TypoScript used for the registration of any
501 Extbase extension has been cleaned up and adjusted:
502
503 lib.foo = USER
504 lib.foo {
505 userFunc = tx_extbase_core_bootstrap->run
506 extensionName = YourExtension
507 pluginName = YourPlugin
508 }
509
510 Additionally, you can also override the list of Switchable Controller Actions through TypoScript:
511
512 lib.foo = USER
513 lib.foo {
514 userFunc = tx_extbase_core_bootstrap->run
515 extensionName = YourExtension
516 pluginName = YourPlugin
517 switchableControllerActions {
518 Standard {
519 1 = action2
520 2 = action3
521 }
522 }
523 }
524
525 Of course, you cannot call actions which were not defined previously in the plugin; so the Switchable
526 Controller Actions in TypoScript can be only used to shrink the number of actions available.
527
528 NOTE: If you manually defined the above snippet, notice that there is a NON-BACKWARDS-COMPATIBLE change
529 in there. But you did that at your own risk, as that was never public API ;)
530
531 If you used Tx_Extbase_Dispatcher before in your own code, it should still work, but it is deprecated.
532 Instead, instead
533
534 OLD: Tx_Extbase_Dispatcher::getConfigurationManager()
535 NEW: inject Tx_Extbase_Configuration_ConfigurationManagerInterface into your class
536
537 OLD: Tx_Extbase_Dispatcher::getPersistenceManager()
538 NEW: inject Tx_Extbase_Persistence_ManagerInterface into your class
539
540 OLD: Tx_Extbase_Dispatcher::getExtbaseFrameworkConfiguration()
541 NEW: inject Tx_Extbase_Configuration_ConfigurationManagerInterface into your class,
542 and call $configurationManager->getConfiguration(Tx_Extbase_Configuration_ConfigurationManagerInterface::CONFIGURATION_TYPE_FRAMEWORK);
543 on the ConfigurationManager.
544
545 Please note that the Configuration Manager is STILL NO PUBLIC API, and its method signature has also changed.
546
547 QueryResult refactoring (needed for Fluid Widgets)
548 --------------------------------------------------
549
550 Before this change, a call of $query->execute() inside a repository immediately executed the query and
551 returned the result as array.
552 Now, queries are executed lazily at the first moment where you really need them. This means that $query->execute()
553 returns an object of type Tx_Extbase_Persistence_QueryResultInterface, which behaves like an array, meaning you
554 can use foreach() to loop over the query result.
555 However, due to an inconsistency of PHP, the array_* methods, and the iteration methods like current(),
556 next(), ... do NOT work on objects which implement ArrayAccess -- that's the reason why the QueryResult
557 refactoring is a breaking change.
558
559 Now, however, the following is possible:
560 * Return the first query result: $query->execute()->getFirst()
561 * Get the underlying query: $query->execute()->getQuery()
562 * Convert the result to array: $query->execute()->toArray()
563
564 This change is a prerequisite for Fluid Widgets to work. See the Fluid ChangeLog for details.
565
566
567 Configurable Plugin Namespaces
568 ------------------------------
569
570 By default each Extbase plugin has a unique URI prefix to avoid collisions with other plugins on your website.
571 This so called plugin namespace usually has the format tx_yourextension_yourplugin.
572 With Extbase 1.3 it is possible to override this namespace. This comes in handy if want to interact with 3rd party
573 extensions, for example with tt_news:
574
575 plugin.tx_yourextension.view.pluginNamespace = tx_ttnews
576
577 This sets the plugin namespace of all your plugins inside the extension to "tx_ttnews", making it possibl
578 to directly access tt_news parameters in your controller:
579
580 /**
581 * @param integer $tt_news tt_news Article uid
582 * @return void
583 */
584 public function yourAction($tt_news) {
585 // interact with $tt_news uid
586 }
587
588 This works with automatic mapping to Domain models too of course:
589
590 /**
591 * @param Tx_YourExtension_Domain_Model_NewsArticle $tt_news tt_news Article
592 * @return void
593 */
594 public function yourAction(Tx_YourExtension_Domain_Model_NewsArticle $tt_news) {
595 // interact with $tt_news object
596 }
597
598 You can also override the plugin namespace for a single instance by adding the section <view.pluginNamespace> to your
599 plugin FlexForm.
600
601
602 Automatic target page determination
603 -----------------------------------
604
605 In TYPO3 v5 we won't have the notion of page uids. To accustom developers to this change, we're trying to free you from
606 the need to specify target pages from within your Extension. Of course you can put all your functionality into one fully
607 fledged plugin, then you won't have to deal with target pages as the current page is used by default.
608
609 But sometimes you want to be able to change the surrounding contents of a special view of your extension (e.g. the
610 subcontent column of a details page). As before you can still specify the target page explicitly like:
611
612 <f:link.action action="foo" pageUid="123" />
613
614 With Extbase 1.3 you can also use a new feature called "automatic target page determination". It is disabled by default,
615 but you can enable it with the following TypoScript:
616
617 plugin.tx_yourextension.view.defaultPid = auto
618
619 Then Extbase will search the page tree for a plugin that is configured to handle the specified action and you can omit
620 the "pageUid" parameter in your links. Of course, this does not work if you use the same plugin multiple times in your
621 page tree. In this case you can override the default page ID for the respective plugins:
622
623 plugin.tx_yourextension_yourplugin.view.defaultPid = 123
624
625 Note: By default this feature is not activated, because that would be a breaking change in some cases
626
627
628 Improved resolveView() mechanism
629 --------------------------------
630
631 Another feature we backported from FLOW3 is the improved view resolving.
632 You can now change the default view implementation *per format* by inserting the following line in your Controller:
633
634 protected $viewFormatToObjectNameMap = array(
635 'json' => 'Tx_YourExtension_View_JsonView',
636 'html' => 'Tx_YourExtension_View_HtmlView'
637 );
638
639
640 Allowing plugins to be registered as new content element
641 --------------------------------------------------------
642
643 This is done using an additional parameter to Tx_Extbase_Utility_Extension::configurePlugin
644 that allows you to specify the plugin type. Example:
645
646 Tx_Extbase_Utility_Extension::configurePlugin(
647 $_EXTKEY,
648 'BlogList',
649 array('Blog' => 'index'),
650 array(),
651 Tx_Extbase_Utility_Extension::PLUGIN_TYPE_CONTENT_ELEMENT
652 );
653 (The default value for the pluginType parameter is Tx_Extbase_Utility_Extension::PLUGIN_TYPE_PLUGIN)
654
655 Default Orderings & QuerySettings
656 ---------------------------------
657
658 It is now possible to change the default orderings of a repository without you having to modify the query by setting
659 the $defaultOrderings property of your Repository to a non-empty array:
660
661 protected $defaultOrderings = array(
662 'title' => Tx_Extbase_Persistence_QueryInterface::ORDER_ASCENDING,
663 'date' => 'title' => Tx_Extbase_Persistence_QueryInterface::ORDER_DESCENDING
664 );
665
666 This will change the default ordering for all queries created by this repository. Of course you can override the
667 ordering by calling $query->setOrderings() in your custom finder method.
668
669 Besides it's now possible to change the default query settings of a repository. This way you could for instance disable
670 "respect storage pid" for all queries. We added a life-cycle method "initializeObject" to the repository which will be
671 executed as soon as the repository is created. Just override it like the following:
672
673 public function initializeObject() {
674 $querySettings = $this->objectManager->create('Tx_Extbase_Persistence_Typo3QuerySettings');
675 $querySettings->setRespectStoragePage(FALSE);
676 $this->setDefaultQuerySettings($querySettings);
677 }
678
679 Of course, QuerySettings can be overridden too in your custom finder method by calling $query->setQuerySettings();
680
681
682 Full Changes for 1.3.0 Beta 1a:
683 ===============================
684 [+TASK] Extbase: Re-implement support for BE modules
685 [+FEATURE] Extbase (Utility): Allow plugins to be registered as new content element
686 Added a fifth parameter to Tx_Extbase_Utility_Extension::configurePlugin that allows
687 you to specify the plugin type (currently "list_type" and "CType" are supported).
688 Thanks to Marc Bastian Heinrichs, Rens Admiraal & Franz Koch for your help!
689 Resolves: #10666
690 [+BUGFIX] Extbase (Utility): Added condition to Tx_Extbase_Utility_Extension::getTargetPidByPlugin() in order to only select tt_content entries that are of CType "list". Thanks to Marc Bastian Heinrichs
691 [!!!][~TASK] Extbase (Configuration): Major rework of the ConfigurationManager
692 Configuration of controllers and actions is now stored in a global registry
693 ($GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['extbase']['extensions']). But you
694 should never access this directly. Instead always retrieve the frameworkConfiguration
695 from the ConfigurationManager.
696 Inserting an Extbase plugin is now as simple as:
697 lib.foo = USER
698 lib.foo {
699 userFunc = tx_extbase_core_bootstrap->run
700 extensionName = YourExtension
701 pluginName = YourPlugin
702 }
703 This is not really a breaking change as it does not change the public API. But it's not unlikely that it changes the behavior of your Extension in case you modified the TypoScript, that is generated by Tx_Extbase_Utility_Extension::configurePlugin().
704 NOTE: Unit tests of Extbase and Fluid v4 are broken currently. We'll be fixing those asap
705 [~TAKS] Extbase (MVC): FrontendRequestHandler now retrieves the current cObject through the ConfigurationManager
706 [+BUGFIX] Extbase (MVC): FrontendRequestHandler was refering to $this->frameworkConfiguration which wasn't available
707 [-API] Extbase (MVC): marked Tx_Extbase_MVC_Web_Request::getContentObjectData() deprecated as should retrieve the current cObject through the ConfigurationManager
708 [+TASK] Extbase (MVC): modified the Tx_Extbase_MVC_Web_RequestBuilder so that it's possible to change the action only by specifying the action parameter. Before you had to specify the controller as well, even if it was the default controller
709 [+BUGFIX] Extbase (MVC): Flashmessages now share a scope throughout the extension. Before, every plugin had it's own scope leading to the messages only being output when entering the same plugin again (e.g. redirecting from one plugin to another would never display the messages)
710 [~TASK] Extbase (Core): The Flashmessages now get persisted in the Bootstrap in resetSingletons()
711 [-TASK] Extbase (Core): Removed some commented lines from Bootstrap
712 [FEATURE] Extbase (Object): Make DI Class Mapping configurable through TS
713 It is now possible to configure the Dependency Injection class mapping by specifying:
714 config.tx_extbase.objects.[FullyQualifiedObjectName].className = [NewClassName]
715 This has the effect of effectively replacing [FullyQualifiedObjectName] with
716 [NewClassName].
717 Resolves: #10559
718 [-TASK] Extbase (Utility): Removed two obsolete checks for $GLOBALS['TSFE']->tmpl->setup['tt_content.']['list.']['20.'] in Tx_Extbase_Utility_Extension
719 [~TASK] Extbase: added two doc comments that were missing
720 [+BUGFIX] Extbase (Persistence): Extbase still used PHPs current() on some QueryResults in Persistence/Repository. Replaced these by calls to the getFirst() method of the QueryResult
721 [+TASK] Extbase (Persistence): added a private field to the QueryResult to make the above case easier to debug: When calling current() on an Iterator, PHP returns the first field of that object instead of calling the current() method of the Iterator interface.. With our somewhat pragmatic approach you'll see the warning if you debug the results of current($query->execute())
722 [+BUGFIX] Extbase (Persistence): Replaced two occurrences of Query->count() by Query->execute()->count() to avoid deprecated warnings in the Core
723 [+BUGFIX] Extbase (MVC): view configuration (templateRootPath, ...) has to be set before View::canRender() is called
724 [!!!][+TASK] Extbase (MVC): The UriBuilder now uses the current cObject instead of creating a new instance in the constructor. This is a breaking change if you instantiated the UriBuilder in your code. Please use the Extbase ObjectManager or inject the ConfigurationManager manually.
725 [+BUGFIX] Extbase (Reflection): ReflectionService now uses a cacheIdentifier per Extension. Besides the Bootstrap now resets the ReflectionService after dispatching a request. This resolves #10146
726 [+TASK] Extbase (Configuration): The ConfigurationManager now holds the current cObject. You can retrieve it via ConfigurationManagerInterface::getContentObject()
727 [+BUGFIX] Extbase (Configuration): When loading configuration of other plugins, the context specific configuration (e.g. flexform settings) are no longer merged with the frameworkConfiguration
728 [+BUGFIX] Extbase (MVC): Controllers are no Singletons by default. If a controller contains stateful fields (e.g. $this->settings) this breaks multiple plugins on one page
729 [+TASK] Extbase (Persistence): QuerySettings now also store the storage page id(s). This is required for the upcoming Ajax Widgets
730 [+BUGFIX] Extbase: fixed php warning in Tx_Extbase_Persistence_LazyLoadingProxy when loading the real instance would return NULL. Resolves #10683
731 [+BUGFIX] Extbase: use 3rd parameter = TRUE of t3lib_div::trimExplode to split switchableControllerActionParts from flexform. Thanks to Georg Ringer. Resolves #10688
732 [+TASK] Extbase: Replaced "public static" by "static public" in various places to be CGL conform
733 [+TASK] Extbase: Marked Utitlity_Extension camelCase/underscore helper functions deprecated
734 [+TASK] Extbase: Removed obsolete FIXME comments, whitespace fixes
735 [!!!] Extbase: Reintegrating branch "dispatcher" to trunk. Resolves: #10605
736 Branch history:
737 [+FEATURE] Extbase (Configuration): Extend ConfigurationManager so that it can load configuration of different plugins
738 [+FEATURE] Extbase (Configuration): 1st level cache for ConfigurationManager. Resolves: #10717. Resolves: #10716
739 [+TASK] Extbase: cleaned up Configuration* implementation, replaced t3lib_div::makeInstance() calls
740 Streamlined ConfigurationManager API and enforced its usage throughout the Extbase classes.
741 Replaced all t3lib_div::makeInstance() calls by $objectManager->create()/$objectManager->get() throughout the Extbase classes.
742 Some smaller tweaks and fixes. Resolves: #10655. Resolves: #10712
743 [TASK] Extbase (Object): Make tests work again. Resolves: #10709
744 [TASK] Extbase (Object): Updated autoload.php and emconf. Relates to: #10561
745 [TASK] Extbase (Object): Use typed exceptions. Relates to: #10561
746 [TASK] Extbase (Object): CGL cleanup
747 Additionally, removed support for @inject annotations at methods. Relates to: #10561
748 [TASK] Extbase (Object): Remove getParents. Relates to: #10561
749 [TASK] Extbase (Object): Remove isSingleton. Relates to: #10561
750 [TASK] Extbase (Object): Remove injectExtensionSettings feature. Relates to: #10561
751 [TASK] Extbase (Object): Change namespaces to Tx_Extbase_Object_Container. Relates to: #10561
752 [TASK] Extbase (Object): Add Container to Extbase. Relates to: #10561
753 [+TASK] Extbase (Core): moved Tx_Extbase_Bootstrap to Tx_Extbase_Core_Bootstrap
754 Moving Bootstrap to be compliant with FLOW3
755 Removed obsolete Classes. Resolves: #10704
756 [+TASK] Extbase: Merged current trunk (r2689) with local modifications into dispatcher branch
757 Note: This still needs a cleanup and some fixes (see FIXME comments) before it can be merged back to the trunk. Relates to: #10605. Relates to: #10655
758 [+TASK] Extbase (Configuration): Moved CONFIGURATION_TYPE_* constraints to ConfigurationManagerInterface. Resolves #10604.
759 [~TASK] Extbase (Configuration): The concrete configuration management strategy gets instanciate only once now.
760 [+FEATURE] Extbase (MVC): Decoupled framework settings from Dispatcher.
761 With the new dependency injection feature you can get the Configuration Manager injected by adding the lines
762 protected $configurationManager;
763 public function injectConfigurationManager(Tx_Extbase_Configuration_ConfigurationManagerInterface $configurationManager) {
764 $this->configurationManager = $configurationManager;
765 }
766 You can get various types of configuration invoking
767 $this->configurationManager->getConfiguration(Tx_Extbase_Configuration_ConfigurationManager::CONFIGURATION_TYPE_EXTBASE)
768 where the class constant must be either CONFIGURATION_TYPE_EXTBASE (for Extbase settings), or CONFIGURATION_TYPE_SETTINGS (for the current module/plugin settings), or CONFIGURATION_TYPE_TYPOSCRIPT (for a raw TS array). Resolves #4741.
769 [~TAKS] Extbase: Removed obsolete code.
770 [~TASK] Extbase: Added core patch for mod.php (see previous commit).
771 [+TASK] Extbase: Changed the way a module gets called.
772 - You can now specify a function name to be invoked by mod.php:
773 $TBE_MODULES['_dispatcher'][] = 'Tx_Extbase_Bootstrap->callModule';
774 - This requires a core patch.
775 [~TASK] Extbase: Changed configuration of the RequestHandler class names to TypoScript.
776 - The request handlers can now be registered in TypoScript with the setting:
777 config.tx_extbase.mvc.requestHandlers.[RequestHandlerClassName] = [RequestHandlerClassName].
778 - There are now two RequestHandlers in Extbase: FrontendRequestHandler and BackendRequestHandler. Common functionality is in the AbstractRequestHandler.
779 [+API][+FEATURE] Extbase (Utility): Implemented mechanism to register RequestHandlers.
780 [+TASK] Extbase: Backported Request Handler Resolver.
781 [~TASK] Extbase: Added "deprecated" annotation to Dispatcher.
782 [~TASK] Extbase: Added missing comment.
783 [+BUGFIX] Extbase (Reflection): The ReflectionService now gets injected to the dispatcher. Related to #10146.
784 [+BUGFIX] Extbase (Reflection): Changed the way the Reflection Service and it's cache gets initialized.
785 * Removed check for pre-initialized Reflection Service in the Bootstrap.
786 * Now using a fixed cache key ('ReflectionData').
787 Related to #10146.
788 [~TASK] Extbase: First step of the Dispatcher refactoring.
789 * Added and adapted some Unit Tests.
790 * Moved the Dispatcher to MVC.
791 * Added a backwards compatibility Dispatcher on root level.
792 * Added a Bootstrap class.
793 * Removed all backend module support for now.
794 Related to #7153.
795 [+TASK] Extbase: Added branch for the dispatcher refactoring.
796 [!!!][+BUGFIX] Extbase: fixed typo in getter and setter of Tx_Extbase_Domain_Model_FrontendUser::lastlogin . Thanks to Christian Schwan. Resolves #9345
797 [+FEATURE] Extbase (MVC): Backport possibility to change the view object class name more easily
798 Backported FLOW3s improved resolveView() mechanism. Tx_Fluid_View_TemplateView is still the default implementation, but can be easily changed by setting $defaultViewObjectName in your controller. Besides it's possible to specifying different views depending on the current request format by setting $viewFormatToObjectNameMap.
799 NOTE: If the view can't be rendered, the new template based "NotFoundView" will be created. So instead of the invisible HTML comments of the EmptyView, you'll get a more meaningful error message if the template file could not be found
800 Resolves: #8990
801 [!!!][+FEATURE] Extbase (Persistence): Backport QueryResult from FLOW3
802 Now Query::execute() returns an instance of QueryResultInterface that allows it to modify the query before actually accessing the records that it retrieves. This is required for the upcoming "Fluid widgets" backport (#10568).
803 NOTE: This change is not backwards compatible, if you work with PHPs array_* functions on the query result. To work around this issue, you'll have to convert the query result to an array before by calling the QueryResult::toArray() method. We're planning to add a compatibility mode, but that's not yet implemented.
804 Resolves: #10566
805 [+BUGFIX] Extbase (Object): Minor fix in ObjectManager to make it compatible with PHP 5.2.x
806 Relates to: #9062
807 [+BUGFIX] Extbase (Object): Refactor Object Manager
808 The Object Manager is now at the same location and
809 has the same API as in FLOW3.
810 [+BUGFIX] Extbase: Major cleanups to Dependency Injection and Persistence
811 Now, DI finally works with Persistence, cleaning
812 this greatly up. Additionally, all internal
813 t3lib_div::makeInstance calls have been replaced.
814 Now, dependency injection is actually usable.
815 Additionally, we completely thought over which
816 persistence classes need to be singleton and which
817 should be prototype, leading finally to a
818 coherent design in the persistence layer.
819 [+BUGFIX] Extbase: remove non-used interfaces
820 Removed classes which were not used.
821 Relates to: #9062
822 Resolves: #10585
823 Resolves: #10564
824 * Cleaned up Persistence Backend
825 * Cleaned up QOM Factory
826 [+BUGFIX] Extbase (MVC): Fix arguments object
827 The arguments object is now correctly inheriting from ArrayObject
828 Resolves: #10562
829 [+BUGFIX] Extbase (MVC): Make database connection work again
830 Resolves: #10585
831 [+FEATURE] Extbase (DI): merging DI into trunk. (resolves #10558)
832 [+TASK] Extbase: Undefined identifier in Tx_Extbase_Persistence_Storage_Typo3DbBackend::removeRow
833 Method clearPageCache was given an undefined variable $uid as second parameter.
834 Resolves: #10570
835 [+TASK] Extbase: $query->contains generate incomplete SQL
836 Use FIND_IN_SET instead of a self-constructed query of LIKE statements
837 Resolves: #8959
838 [+BUGFIX] Extbase (Persistence): Removed method createQuery from the QOMFactory. It is neither part of the API nor is it used by Extbase. Resolves #10215
839 [+BUGFIX] Extbase (Property): Minor fix in PHP doc comment
840 Fix the order of @param annotation in Tx_Extbase_Property_Mapper::mapAndValidate()
841 Resolves: #5887
842 [~CONFIGURATION] Extbase (MVC): Changed default value for automatic target page determination
843 The page id gets automatically detected if plugin.tx_extensionname_pluginname.view.defaultPid
844 is an empty string (was "auto" before). This ensures backwards compatibility.
845 Resolves #9121
846 [TASK] Extbase: moved Release Notes to ChangeLog.txt.
847 [+FEATURE] Extbase (MVC): Automatic target page determination
848 you can use the "pageUid" argument of the link.* and uri.* view helpers
849 to link to a different page. That is deprecated though as we won't have
850 the notion of "page uids" in v5. Instead the target page is now determined
851 automatically.
852 If the target page can't be determined because more than one active
853 plugin is capable of handling the action an exception will be thrown.
854 In that case you'll have to define the target page either by using the
855 pageUid argument or - preferably - by setting
856 plugin.tx_extensionname_pluginname.view.defaultPid to a fixed page uid.
857 Note: This feature still has to be documented!
858 Resolves: #9121
859 [+FEATURE] Extbase (MVC): Configurable plugin namespace
860 until now the namespace (aka prefix) of Extbase plugins was
861 fixed (tx_extensionname_pluginname). This is now configurable
862 via TypoScript. Just write:
863 plugin.tx_extensionname_pluginname.view.pluginNamespace = my_custom_namespace
864 to change the prefix for a specific plugin or
865 plugin.tx_extensionname.view.pluginNamespace = my_custom_namespace
866 to change if for the whole extension.
867 Note: This feature still has to be documented!
868 Resolves: #8365
869
870 Changes for 1.3.0 Alpha 2:
871 ==========================
872 included in TYPO3 4.5.0 Alpha 2.
873
874 Since the last version, one (possible BREAKING) change happened:
875
876 * Fixed Extbase Caching Bug.
877 Non-cacheable actions were cached due to the fact that TYPO3s
878 TypoScript condition "GP" does not merge GET & POST vars.
879 Additionally "switchableControllerActions" that were overridden
880 in the plugin flexform were not taken into account.
881
882 !!! This is a breaking change if you set up your TS configuration
883 of the plugin manually.
884
885 Full Changes:
886 -------------
887
888 [!!!][+BUGFIX] Extbase: Fix Extbase Caching Bug (thanks to Bastian Waidelich)
889
890 [-TASK] Extbase (MVC): removed fallback to current page in AbstractController::redirect() as that's already done within the UriBuilder if $targetPageUid is NULL
891
892
893 Changes for 1.3.0 Alpha 1:
894 ==========================
895 included in TYPO3 4.5.0 Alpha 1.
896
897 Since the last version, the following notable things happened:
898
899 * All methods trying to find an object by uid now ignore the storagePid. This changes the behavior of argument mapping and the way extbase fetches 1:1 relations. Resolves #5631. You should not experience any negative side-effects of this change, i.e. if your extension worked before, it will definitely after this change. However, it makes the record handling more robust.
900 * Performance improvements in TypoScript::convertTypoScriptArrayToPlainArray. Thanks to Timo Schmidt.
901 * Numerous other bugfixes, see below.
902
903 Full Changes:
904 -------------
905 [~TASK] Extbase: Raised version number to 1.3.0-devel to reflect the version scheme defined in the wiki. Resolves #9152. Thanks Xavier for pointing to it.
906 [+TASK] Extbase (MVC): cleaned up View implementations and added assign() and assignMultiple() methods to ViewInterface. This resolves #9137
907 [+BUGFIX] Extbase: Fixed a small typo in extension description.
908 [+BUGFIX] Extbase (Persistence): DataMapper now mapps NULL into a property on non-existing related object instead of FALSE. Resolves #8973.
909 [+BUGFIX] Extbase (Reflection): getParentClass() in Tx_Extbase_Reflection_ClassReflection no longer causes a fatal error if no parent class exists. Resolves #8800.
910 [+BUGFIX] Extbase (Utility): Improved performance of TypoScript::convertTypoScriptArrayToPlainArray. Thanks to Timo Schmidt. Resolves #8857.
911 [~TASK] Extbase: Changed state to 'stable'. Resolves #8768.
912 [+BUGFIX] Extbase: Fixed EOL and encoding of several files. Resolves #8876.
913 [+BUGFIX] Extbase (MVC): Fixed a problem where a non-required action argument throwed Exception if it was not found in the Backend. Thanks to Marc Bastian Heinrichs. Resolves #7277.
914 [!!!][+BUGFIX] Extbase (Persistence): All methods trying to find an object by uid now ignores the storagePid. This changes the behavior of argument mapping and the way extbase fetches 1:1 relations. Resolves #5631.
915 [+BUGFIX] Extbase (Persistence): Fixed a problem where localized objects inside an aggregate are not translated. Resolves #8555.
916 [~TASK] Extbase: Removed new lines at the end of php files.
917
918 RELEASE NOTES of Extbase v1.0.0
919 ===============================
920
921 This package contains the Extbase Framework for Extensions. You may
922 also want to install the BlogExample (blog_example) to experiment
923 with. This little example extension demonstrates some of the main
924 features of Extbase. The documentation is bundled in a separate
925 extension called doc_extbase. Both, the blog_example and the
926 doc_extbase can downloaded via TER.
927
928 http://typo3.org/extensions/repository/view/blog_example/current/
929 http://typo3.org/extensions/repository/view/doc_extbase/current/
930
931 Currently Extbase is in ALPHA state. Do not expect everything in the
932 right place and shape. And keep in mind that the API may change
933 until TYPO3 v4.3beta1 is released.
934
935 If you have any feature requests or encountered issues regarding
936 this package please use the facilities on forge to report.
937
938 We are very open to answer your questions. Please use the newsgroup
939
940 typo3.projects.typo3v4mvc on lists.netfielders.de
941
942 so other developers can react to your comments and also
943 profit from the postet solutions. Do not contact a member of the
944 development team via private email (or skype, or visits, or ...)
945 until he accepted this channel. We all do coding for Extbase on
946 our sparetime and must handle our regular work load - and don't
947 forget about our families ;-).
948
949 We hope you have fun with this package!
950
951 -- Your Extbase Development Team
952
953 HOW TO CREATE THE CHANGELOG
954 ===========================
955 git log [startRevision]..HEAD --pretty=format:"%s%n%b%n" | grep -v "^$" | grep -v "git-svn-id"
956
957 Verify that the merge into the Core succeeded:
958 diff -urNw --exclude=".git" --exclude=".svn" -I "@version" ../../../typo3/sysext/extbase/ .