[~TASK] Extbase: Fixed line endings (Windows to Unix).
[Packages/TYPO3.CMS.git] / typo3 / sysext / extbase / ChangeLog.txt
1 ChangeLog for Extbase
2 =====================
3
4 Changes for 1.3.0 Beta 3:
5 ==========================
6 included in TYPO3 4.5.0 Beta 3.
7
8 This release features numerous stability improvements, the biggest one
9 being a re-written core of the Object Manager, such that Lifecycle Methods
10 are supported now. This means, that a method "initializeObject()" gets called
11 as soon as all dependencies are injected and initialized.
12
13 Additionally, Extbase didn't work in all cases in the TYPO3 Backend. This has
14 also been improved, so Extbase (again) works in the backend
15 with an empty page tree.
16
17 Full Changes for 1.3.0 Beta 3:
18 =============================
19
20 [+BUGFIX] Extbase (Tests): Fixed Tx_Extbase_MVC_Controller_AbstractController_testcase. Thanks to Oliver Klee. Resolves #11567.
21 [BUGFIX] Extbase (Configuration): Make Extbase work again in Backend
22 [!!!][+TASK] Extbase (Object): Rewritten Object Container
23 [+BUGFIX] Extbase (MVC): Improve Exception message
24 If one misses the @dontvalidate annotation, he will
25 get a strange error which does not have a hint that
26 the @dontvalidate is missing. Now, the exception message
27 is extended.
28 [+API] Extbase (Configuration): Adding getContentObject to API
29 [+TASK] Extbase (Reflection): Added deprecation annotation to ObjectAccess::getAccessiblePropertyNames()
30 To stay in sync with FLOW3, the methods getAccessibleProperties() and getAccessiblePropertyNames() to
31 getGettableProperties() and getGettablePropertyNames().
32 For compatibility reasons the old methods will stay in Extbase until version 1.5.
33 Note: you can now check wheter properties are settable as well
34 [+FEATURE] Extbase (Reflection): Tx_Extbase_Reflection_ObjectAccess supports stdClass objects now
35 I've backported the ObjectAccess class and its unit tests from FLOW3.
36 Note: FLOW3's implementation allows to specify a third argument for the
37 method getPropertyPath() in order to support Closures.
38 This part is not backported as it's not compatible with PHP < 5.3.
39
40 Changes for 1.3.0 Beta 2a:
41 ==========================
42 included in TYPO3 4.5.0 Beta 2.
43
44 This release includes a whole bunch of bugfixes and refactorings, the most important ones listed below.
45 Because the FlashMessages now use t3lib_FlashMessage, TYPO3 4.5 is MANDATORY!
46
47 The main changes are:
48
49 * Tx_Extbase_MVC_Controller_FlashMessages now internally uses the
50 t3lib_FlashMessageQueue that has been introduced with TYPO3 4.3.
51 This results in following changes:
52 - flashmessages are now treated globally, not in a per-extension-scope. As soon as you output the messages first, the session will be flushed
53 - a flashmessage is not a simple strings anymore, but consists of
54 message body and (optionally) title & severity.
55 You can specify title and severity like this:
56 $this->flashMessages->add('Your message', 'some title', t3lib_FlashMessage::WARNING);
57 - you can now output flashmessages in backend that were set from other TYPO3 classes
58 - a revised flashmessage ViewHelper allows you to render flashmessages in the style
59 of core flashmessages now (see Fluid changelog)
60 - Resolves #10821
61 * Configuration Manager can now deal with recurring FlexForm Sections (#6067)
62 * Fixed Tx_Extbase_Domain_Model_FrontendUser (and marked the old API as deprecated)
63 * Bugfixes related to Lazy Loading
64
65 Full Changes for 1.3.0 Beta 2a:
66 ==============================
67 [+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
68 [+TASK] Extbase (Object): Make sure the class info cache is returning valid objects
69 [+BUGFIX] Extbase (Persistence): Persistence_Backend::getIdentifierByObject should work with LazyLoadingProxy
70 getIdentifierByObject should check if object is an instance of Tx_Extbase_Persistence_LazyLoadingProxy and should return the
71 identifier of the real object.
72 [+BUGFIX] Extbase (Configuration): slightly tweaked FrontendConfigurationManager (basically replaced explode() by t3lib_div::trimExplode() call)
73 [+TASK] Extbase (Tests): Added some unit tests for Backend- and FrontendConfigurationManager. To be continued
74 [+BUGFIX] Extbase (DomainObject): added default __toString method to Tx_Extbase_DomainObject_AbstractDomainObject. Thanks to Marco Huber. Resolves #8083
75 [+BUGFIX] Extbase (MVC): Fixed UriBuilder for handling LazyLoadingProxy objects as arguments. Resolves #10705
76 [+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
77 [+BUGFIX] Extbase (Tests): tweaked ObjectContainer tests. Tests are failing deliberately for now
78 The DI implementation has to be rewritten, as discussed.
79 This relates to: #11160
80 [+BUGFIX] Extbase (Domain): fixed (non-breaking) method name for getting usergroup in Tx_Extbase_Domain_Model_FrontendUser. Resolves #11019
81 [+TASK] extbase (ConfigurationManager): Made FrontendConfigurationManager parse recurring sections in flexforms right. Thanks to Franz Koch (resolves #6067)
82 [+BUGFIX] Extbase (Configuration): Slightly tweaked AbstractConfigurationManager
83 [+TASK] Extbase (Tests): Added unit tests for AbstractConfigurationManager
84 Note: the ConfigurationManager now always overrides switchableControllerActions
85 when retrieving configuration for the current plugin. Before that only happened
86 when no extensionName/pluginName was specified.
87 Additionally: It's not possible anymore to specify new controllers in
88 switchableControllerAction configuration. That was the intended behavior.
89 [+TASK] Extbase (Tests): Renamed test files from "*_testcase.php" to "*Test.php"
90 [+TASK] Extbase (Tests): Moving all Tests in "Unit" directory.
91 [+FEATURE] Extbase (MVC): add possibility to output FlashMessageQueue (Resolves #10821)
92 [+TASK] Extbase (Persistence): counting query results does not work with limit constraints (resolves #10956) Tx_Extbase_Persistence_Storage_Typo3DbBackend::getObjectCountByQuery() replaces the SELECT part
93 of a query by COUNT(*) before executing a statement.
94 This did not work as expected in some cases, e.g. the LIMIT constraint was ignored by the count query.
95 [+TASK] Extbase (Persistence): findOneBy*() methods should return NULL if no item was found (Resolves #10958)
96 [+TASK] Extbase (Core): Slightly improved error handling in bootstrap (Resolves #11055)
97 [~TASK] Extbase (Utility): Changed Tx_Extbase_Utility_TypoScript:convertPlainArrayToTypoScriptArray to self::convertPlainArrayToTypoScriptArray. Resolves #10538.
98 [+BUGFIX] Extbase (MVC): UriBuilder: use current plugin if no pluginName has been specified
99 If multiple plugins are found, that are configured to handle the specified action, Extbase
100 will throw an Exception. Now, this only happens if the *current* plugin does not contain
101 the action.
102
103 Changes for 1.3.0 Beta 1a:
104 ==========================
105 included in TYPO3 4.5.0 Beta 1.
106
107 Extbase 1.3.0 Beta 1 has a lot new and greatly improved features, and also many bugfixes.
108 The highlights are outlined below, and explained in-depth a little further down.
109
110 NOTE: This release brings new table definitions, so please visit the install tool or the Extension
111 Manager and update the tables of Extbase.
112
113 *** EVERY FEATURE IS DESCRIBED IN DEPTH BELOW ***
114
115 * Dependency Injection
116 * Dispatcher Refactoring & Completely re-done Configuration Manager
117 This means that Tx_Extbase_Dispatcher is now DEPRECATED!
118 Additionally, if you defined the TypoScript setup for a plugin by hand (which you should not),
119 the syntax has changed a bit there.
120 * QueryResult refactoring (needed for Fluid Widgets)
121 THIS COULD BE A BREAKING CHANGE FOR YOU!
122
123 Additionally, the following smaller features were implemented:
124
125 * Configurable plugin namespaces (#8365)
126 * Automatic target page determination (#9121)
127 * Improved resolveView() mechanism
128 * Allowing plugins to be registered as new content element (#10666)
129 * Default Orderings & QuerySettings (#10319)
130
131 Breaking Changes:
132
133 * 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.
134 * fixed typo in getter and setter of Tx_Extbase_Domain_Model_FrontendUser::lastlogin
135 * 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)
136
137 Known issues:
138
139 * The Unit Tests do not fully work again, we will fix that in the next days.
140 * There might be still issues with the support of backend modules, we are working on that!
141
142 Dependency Injection
143 --------------------
144
145 Instead of creating objects through t3lib_div::makeInstance, and connecting them together manually,
146 you yan now use Dependency Injection (DI) for that. Let's give an example: If my class "Tx_Foo_Controller_MyController"
147 needs another class "Tx_Foo_Service_LoggingService", it can get an instance of the logging service
148 by Dependency Injection, by specifying the following code:
149
150 class Tx_Foo_Controller_MyController {
151 protected $loggingService;
152
153 /**
154 * @param Tx_Foo_Service_LoggingService $loggingService
155 */
156 public function injectLoggingService(Tx_Foo_Service_LoggingService $loggingService) {
157 $this->loggingService = $loggingService;
158 }
159 }
160
161 The DI container finds that the class "MyController" has an method whose name starts with "inject",
162 and thus passes the logging service to MyController.
163 It is important that you can *only retrieve Singletons* through the inject annotations. If you need
164 to instanciate a prototype object, it is important to *not* use t3lib_div::makeInstance() anymore
165 (as it bypasses the DI container), but instead you need to inject the ObjectManager, and ask it
166 to create your prototype object using the create() method. Example:
167
168 class Tx_Foo_Controller_MyController {
169 protected $logFile;
170
171 /**
172 * @param Tx_Extbase_Object_ObjectManagerInterface $objectManager
173 */
174 public function injectObjectManager(Tx_Extbase_Object_ObjectManagerInterface $objectManager) {
175 $this->logFile = $objectManager->create('Tx_Foo_Domain_Model_LogFile');
176 }
177 }
178
179 In the above example, you have seen that we reference not the concrete implementation *ObjectManager*,
180 but instead the *ObjectManagerInterface*. If a name ends with "...Interface", Extbase DI automatically
181 strips away the "Interface" from the name, and expects to find a concrete implementation of that interface.
182 This is generally a very good practice: For your core classes, you should always reference an *interface*,
183 and let the DI container instanciate the concrete class.
184
185 Additionally, Extbase DI allows to *replace* certain implementation classes by other classes through
186 configuration in TypoScript. Let's give an example, and then you can see the concept:
187
188 config.tx_extbase.objects {
189 Tx_Extbase_Persistence_Storage_BackendInterface {
190 className = Tx_Extbase_Persistence_Storage_Typo3DbBackend
191 }
192 }
193
194 This essentially means to the DI container: "At all places where you encounter a "BackendInterface",
195 you should instanciate the "Typo3DbBackend" class."
196
197 However, note that this setting can only be configured *globally* right now, it is not possible
198 to override that on a per-extension basis.
199
200 Generally, the Extbase DI container provides a subset of the functionality of FLOW3's dependency injection.
201
202 Dispatcher Refactoring & Completely re-done Configuration Manager
203 -----------------------------------------------------------------
204
205 In the last versions of Extbase, the Dispatcher (Tx_Extbase_Dispatcher) was the main entry point to Extbase.
206 However, as we did not have Dependency Injection at that point, it became really complex and did lots of things
207 which it should not do in the first place. That's why we greatly improved that part. Now, any Extbase extension
208 is invoked using the Tx_Extbase_Core_Bootstrap. Additionally, the TypoScript used for the registration of any
209 Extbase extension has been cleaned up and adjusted:
210
211 lib.foo = USER
212 lib.foo {
213 userFunc = tx_extbase_core_bootstrap->run
214 extensionName = YourExtension
215 pluginName = YourPlugin
216 }
217
218 Additionally, you can also override the list of Switchable Controller Actions through TypoScript:
219
220 lib.foo = USER
221 lib.foo {
222 userFunc = tx_extbase_core_bootstrap->run
223 extensionName = YourExtension
224 pluginName = YourPlugin
225 switchableControllerActions {
226 Standard {
227 1 = action2
228 2 = action3
229 }
230 }
231 }
232
233 Of course, you cannot call actions which were not defined previously in the plugin; so the Switchable
234 Controller Actions in TypoScript can be only used to shrink the number of actions available.
235
236 NOTE: If you manually defined the above snippet, notice that there is a NON-BACKWARDS-COMPATIBLE change
237 in there. But you did that at your own risk, as that was never public API ;)
238
239 If you used Tx_Extbase_Dispatcher before in your own code, it should still work, but it is deprecated.
240 Instead, instead
241
242 OLD: Tx_Extbase_Dispatcher::getConfigurationManager()
243 NEW: inject Tx_Extbase_Configuration_ConfigurationManagerInterface into your class
244
245 OLD: Tx_Extbase_Dispatcher::getPersistenceManager()
246 NEW: inject Tx_Extbase_Persistence_ManagerInterface into your class
247
248 OLD: Tx_Extbase_Dispatcher::getExtbaseFrameworkConfiguration()
249 NEW: inject Tx_Extbase_Configuration_ConfigurationManagerInterface into your class,
250 and call $configurationManager->getConfiguration(Tx_Extbase_Configuration_ConfigurationManagerInterface::CONFIGURATION_TYPE_FRAMEWORK);
251 on the ConfigurationManager.
252
253 Please note that the Configuration Manager is STILL NO PUBLIC API, and its method signature has also changed.
254
255 QueryResult refactoring (needed for Fluid Widgets)
256 --------------------------------------------------
257
258 Before this change, a call of $query->execute() inside a repository immediately executed the query and
259 returned the result as array.
260 Now, queries are executed lazily at the first moment where you really need them. This means that $query->execute()
261 returns an object of type Tx_Extbase_Persistence_QueryResultInterface, which behaves like an array, meaning you
262 can use foreach() to loop over the query result.
263 However, due to an inconsistency of PHP, the array_* methods, and the iteration methods like current(),
264 next(), ... do NOT work on objects which implement ArrayAccess -- that's the reason why the QueryResult
265 refactoring is a breaking change.
266
267 Now, however, the following is possible:
268 * Return the first query result: $query->execute()->getFirst()
269 * Get the underlying query: $query->execute()->getQuery()
270 * Convert the result to array: $query->execute()->toArray()
271
272 This change is a prerequisite for Fluid Widgets to work. See the Fluid ChangeLog for details.
273
274
275 Configurable Plugin Namespaces
276 ------------------------------
277
278 By default each Extbase plugin has a unique URI prefix to avoid collisions with other plugins on your website.
279 This so called plugin namespace usually has the format tx_yourextension_yourplugin.
280 With Extbase 1.3 it is possible to override this namespace. This comes in handy if want to interact with 3rd party
281 extensions, for example with tt_news:
282
283 plugin.tx_yourextension.view.pluginNamespace = tx_ttnews
284
285 This sets the plugin namespace of all your plugins inside the extension to "tx_ttnews", making it possibl
286 to directly access tt_news parameters in your controller:
287
288 /**
289 * @param integer $tt_news tt_news Article uid
290 * @return void
291 */
292 public function yourAction($tt_news) {
293 // interact with $tt_news uid
294 }
295
296 This works with automatic mapping to Domain models too of course:
297
298 /**
299 * @param Tx_YourExtension_Domain_Model_NewsArticle $tt_news tt_news Article
300 * @return void
301 */
302 public function yourAction(Tx_YourExtension_Domain_Model_NewsArticle $tt_news) {
303 // interact with $tt_news object
304 }
305
306 You can also override the plugin namespace for a single instance by adding the section <view.pluginNamespace> to your
307 plugin FlexForm.
308
309
310 Automatic target page determination
311 -----------------------------------
312
313 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
314 the need to specify target pages from within your Extension. Of course you can put all your functionality into one fully
315 fledged plugin, then you won't have to deal with target pages as the current page is used by default.
316
317 But sometimes you want to be able to change the surrounding contents of a special view of your extension (e.g. the
318 subcontent column of a details page). As before you can still specify the target page explicitly like:
319
320 <f:link.action action="foo" pageUid="123" />
321
322 With Extbase 1.3 you can also use a new feature called "automatic target page determination". It is disabled by default,
323 but you can enable it with the following TypoScript:
324
325 plugin.tx_yourextension.view.defaultPid = auto
326
327 Then Extbase will search the page tree for a plugin that is configured to handle the specified action and you can omit
328 the "pageUid" parameter in your links. Of course, this does not work if you use the same plugin multiple times in your
329 page tree. In this case you can override the default page ID for the respective plugins:
330
331 plugin.tx_yourextension_yourplugin.view.defaultPid = 123
332
333 Note: By default this feature is not activated, because that would be a breaking change in some cases
334
335
336 Improved resolveView() mechanism
337 --------------------------------
338
339 Another feature we backported from FLOW3 is the improved view resolving.
340 You can now change the default view implementation *per format* by inserting the following line in your Controller:
341
342 protected $viewFormatToObjectNameMap = array(
343 'json' => 'Tx_YourExtension_View_JsonView',
344 'html' => 'Tx_YourExtension_View_HtmlView'
345 );
346
347
348 Allowing plugins to be registered as new content element
349 --------------------------------------------------------
350
351 This is done using an additional parameter to Tx_Extbase_Utility_Extension::configurePlugin
352 that allows you to specify the plugin type. Example:
353
354 Tx_Extbase_Utility_Extension::configurePlugin(
355 $_EXTKEY,
356 'BlogList',
357 array('Blog' => 'index'),
358 array(),
359 Tx_Extbase_Utility_Extension::PLUGIN_TYPE_CONTENT_ELEMENT
360 );
361 (The default value for the pluginType parameter is Tx_Extbase_Utility_Extension::PLUGIN_TYPE_PLUGIN)
362
363 Default Orderings & QuerySettings
364 ---------------------------------
365
366 It is now possible to change the default orderings of a repository without you having to modify the query by setting
367 the $defaultOrderings property of your Repository to a non-empty array:
368
369 protected $defaultOrderings = array(
370 'title' => Tx_Extbase_Persistence_QueryInterface::ORDER_ASCENDING,
371 'date' => 'title' => Tx_Extbase_Persistence_QueryInterface::ORDER_DESCENDING
372 );
373
374 This will change the default ordering for all queries created by this repository. Of course you can override the
375 ordering by calling $query->setOrderings() in your custom finder method.
376
377 Besides it's now possible to change the default query settings of a repository. This way you could for instance disable
378 "respect storage pid" for all queries. We added a life-cycle method "initializeObject" to the repository which will be
379 executed as soon as the repository is created. Just override it like the following:
380
381 public function initializeObject() {
382 $querySettings = $this->objectManager->create('Tx_Extbase_Persistence_Typo3QuerySettings');
383 $querySettings->setRespectStoragePage(FALSE);
384 $this->setDefaultQuerySettings($querySettings);
385 }
386
387 Of course, QuerySettings can be overridden too in your custom finder method by calling $query->setQuerySettings();
388
389
390 Full Changes for 1.3.0 Beta 1a:
391 ===============================
392 [+TASK] Extbase: Re-implement support for BE modules
393 [+FEATURE] Extbase (Utility): Allow plugins to be registered as new content element
394 Added a fifth parameter to Tx_Extbase_Utility_Extension::configurePlugin that allows
395 you to specify the plugin type (currently "list_type" and "CType" are supported).
396 Thanks to Marc Bastian Heinrichs, Rens Admiraal & Franz Koch for your help!
397 Resolves: #10666
398 [+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
399 [!!!][~TASK] Extbase (Configuration): Major rework of the ConfigurationManager
400 Configuration of controllers and actions is now stored in a global registry
401 ($GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['extbase']['extensions']). But you
402 should never access this directly. Instead always retrieve the frameworkConfiguration
403 from the ConfigurationManager.
404 Inserting an Extbase plugin is now as simple as:
405 lib.foo = USER
406 lib.foo {
407 userFunc = tx_extbase_core_bootstrap->run
408 extensionName = YourExtension
409 pluginName = YourPlugin
410 }
411 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().
412 NOTE: Unit tests of Extbase and Fluid v4 are broken currently. We'll be fixing those asap
413 [~TAKS] Extbase (MVC): FrontendRequestHandler now retrieves the current cObject through the ConfigurationManager
414 [+BUGFIX] Extbase (MVC): FrontendRequestHandler was refering to $this->frameworkConfiguration which wasn't available
415 [-API] Extbase (MVC): marked Tx_Extbase_MVC_Web_Request::getContentObjectData() deprecated as should retrieve the current cObject through the ConfigurationManager
416 [+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
417 [+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)
418 [~TASK] Extbase (Core): The Flashmessages now get persisted in the Bootstrap in resetSingletons()
419 [-TASK] Extbase (Core): Removed some commented lines from Bootstrap
420 [FEATURE] Extbase (Object): Make DI Class Mapping configurable through TS
421 It is now possible to configure the Dependency Injection class mapping by specifying:
422 config.tx_extbase.objects.[FullyQualifiedObjectName].className = [NewClassName]
423 This has the effect of effectively replacing [FullyQualifiedObjectName] with
424 [NewClassName].
425 Resolves: #10559
426 [-TASK] Extbase (Utility): Removed two obsolete checks for $GLOBALS['TSFE']->tmpl->setup['tt_content.']['list.']['20.'] in Tx_Extbase_Utility_Extension
427 [~TASK] Extbase: added two doc comments that were missing
428 [+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
429 [+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())
430 [+BUGFIX] Extbase (Persistence): Replaced two occurrences of Query->count() by Query->execute()->count() to avoid deprecated warnings in the Core
431 [+BUGFIX] Extbase (MVC): view configuration (templateRootPath, ...) has to be set before View::canRender() is called
432 [!!!][+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.
433 [+BUGFIX] Extbase (Reflection): ReflectionService now uses a cacheIdentifier per Extension. Besides the Bootstrap now resets the ReflectionService after dispatching a request. This resolves #10146
434 [+TASK] Extbase (Configuration): The ConfigurationManager now holds the current cObject. You can retrieve it via ConfigurationManagerInterface::getContentObject()
435 [+BUGFIX] Extbase (Configuration): When loading configuration of other plugins, the context specific configuration (e.g. flexform settings) are no longer merged with the frameworkConfiguration
436 [+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
437 [+TASK] Extbase (Persistence): QuerySettings now also store the storage page id(s). This is required for the upcoming Ajax Widgets
438 [+BUGFIX] Extbase: fixed php warning in Tx_Extbase_Persistence_LazyLoadingProxy when loading the real instance would return NULL. Resolves #10683
439 [+BUGFIX] Extbase: use 3rd parameter = TRUE of t3lib_div::trimExplode to split switchableControllerActionParts from flexform. Thanks to Georg Ringer. Resolves #10688
440 [+TASK] Extbase: Replaced "public static" by "static public" in various places to be CGL conform
441 [+TASK] Extbase: Marked Utitlity_Extension camelCase/underscore helper functions deprecated
442 [+TASK] Extbase: Removed obsolete FIXME comments, whitespace fixes
443 [!!!] Extbase: Reintegrating branch "dispatcher" to trunk. Resolves: #10605
444 Branch history:
445 [+FEATURE] Extbase (Configuration): Extend ConfigurationManager so that it can load configuration of different plugins
446 [+FEATURE] Extbase (Configuration): 1st level cache for ConfigurationManager. Resolves: #10717. Resolves: #10716
447 [+TASK] Extbase: cleaned up Configuration* implementation, replaced t3lib_div::makeInstance() calls
448 Streamlined ConfigurationManager API and enforced its usage throughout the Extbase classes.
449 Replaced all t3lib_div::makeInstance() calls by $objectManager->create()/$objectManager->get() throughout the Extbase classes.
450 Some smaller tweaks and fixes. Resolves: #10655. Resolves: #10712
451 [TASK] Extbase (Object): Make tests work again. Resolves: #10709
452 [TASK] Extbase (Object): Updated autoload.php and emconf. Relates to: #10561
453 [TASK] Extbase (Object): Use typed exceptions. Relates to: #10561
454 [TASK] Extbase (Object): CGL cleanup
455 Additionally, removed support for @inject annotations at methods. Relates to: #10561
456 [TASK] Extbase (Object): Remove getParents. Relates to: #10561
457 [TASK] Extbase (Object): Remove isSingleton. Relates to: #10561
458 [TASK] Extbase (Object): Remove injectExtensionSettings feature. Relates to: #10561
459 [TASK] Extbase (Object): Change namespaces to Tx_Extbase_Object_Container. Relates to: #10561
460 [TASK] Extbase (Object): Add Container to Extbase. Relates to: #10561
461 [+TASK] Extbase (Core): moved Tx_Extbase_Bootstrap to Tx_Extbase_Core_Bootstrap
462 Moving Bootstrap to be compliant with FLOW3
463 Removed obsolete Classes. Resolves: #10704
464 [+TASK] Extbase: Merged current trunk (r2689) with local modifications into dispatcher branch
465 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
466 [+TASK] Extbase (Configuration): Moved CONFIGURATION_TYPE_* constraints to ConfigurationManagerInterface. Resolves #10604.
467 [~TASK] Extbase (Configuration): The concrete configuration management strategy gets instanciate only once now.
468 [+FEATURE] Extbase (MVC): Decoupled framework settings from Dispatcher.
469 With the new dependency injection feature you can get the Configuration Manager injected by adding the lines
470 protected $configurationManager;
471 public function injectConfigurationManager(Tx_Extbase_Configuration_ConfigurationManagerInterface $configurationManager) {
472 $this->configurationManager = $configurationManager;
473 }
474 You can get various types of configuration invoking
475 $this->configurationManager->getConfiguration(Tx_Extbase_Configuration_ConfigurationManager::CONFIGURATION_TYPE_EXTBASE)
476 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.
477 [~TAKS] Extbase: Removed obsolete code.
478 [~TASK] Extbase: Added core patch for mod.php (see previous commit).
479 [+TASK] Extbase: Changed the way a module gets called.
480 - You can now specify a function name to be invoked by mod.php:
481 $TBE_MODULES['_dispatcher'][] = 'Tx_Extbase_Bootstrap->callModule';
482 - This requires a core patch.
483 [~TASK] Extbase: Changed configuration of the RequestHandler class names to TypoScript.
484 - The request handlers can now be registered in TypoScript with the setting:
485 config.tx_extbase.mvc.requestHandlers.[RequestHandlerClassName] = [RequestHandlerClassName].
486 - There are now two RequestHandlers in Extbase: FrontendRequestHandler and BackendRequestHandler. Common functionality is in the AbstractRequestHandler.
487 [+API][+FEATURE] Extbase (Utility): Implemented mechanism to register RequestHandlers.
488 [+TASK] Extbase: Backported Request Handler Resolver.
489 [~TASK] Extbase: Added "deprecated" annotation to Dispatcher.
490 [~TASK] Extbase: Added missing comment.
491 [+BUGFIX] Extbase (Reflection): The ReflectionService now gets injected to the dispatcher. Related to #10146.
492 [+BUGFIX] Extbase (Reflection): Changed the way the Reflection Service and it's cache gets initialized.
493 * Removed check for pre-initialized Reflection Service in the Bootstrap.
494 * Now using a fixed cache key ('ReflectionData').
495 Related to #10146.
496 [~TASK] Extbase: First step of the Dispatcher refactoring.
497 * Added and adapted some Unit Tests.
498 * Moved the Dispatcher to MVC.
499 * Added a backwards compatibility Dispatcher on root level.
500 * Added a Bootstrap class.
501 * Removed all backend module support for now.
502 Related to #7153.
503 [+TASK] Extbase: Added branch for the dispatcher refactoring.
504 [!!!][+BUGFIX] Extbase: fixed typo in getter and setter of Tx_Extbase_Domain_Model_FrontendUser::lastlogin . Thanks to Christian Schwan. Resolves #9345
505 [+FEATURE] Extbase (MVC): Backport possibility to change the view object class name more easily
506 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.
507 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
508 Resolves: #8990
509 [!!!][+FEATURE] Extbase (Persistence): Backport QueryResult from FLOW3
510 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).
511 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.
512 Resolves: #10566
513 [+BUGFIX] Extbase (Object): Minor fix in ObjectManager to make it compatible with PHP 5.2.x
514 Relates to: #9062
515 [+BUGFIX] Extbase (Object): Refactor Object Manager
516 The Object Manager is now at the same location and
517 has the same API as in FLOW3.
518 [+BUGFIX] Extbase: Major cleanups to Dependency Injection and Persistence
519 Now, DI finally works with Persistence, cleaning
520 this greatly up. Additionally, all internal
521 t3lib_div::makeInstance calls have been replaced.
522 Now, dependency injection is actually usable.
523 Additionally, we completely thought over which
524 persistence classes need to be singleton and which
525 should be prototype, leading finally to a
526 coherent design in the persistence layer.
527 [+BUGFIX] Extbase: remove non-used interfaces
528 Removed classes which were not used.
529 Relates to: #9062
530 Resolves: #10585
531 Resolves: #10564
532 * Cleaned up Persistence Backend
533 * Cleaned up QOM Factory
534 [+BUGFIX] Extbase (MVC): Fix arguments object
535 The arguments object is now correctly inheriting from ArrayObject
536 Resolves: #10562
537 [+BUGFIX] Extbase (MVC): Make database connection work again
538 Resolves: #10585
539 [+FEATURE] Extbase (DI): merging DI into trunk. (resolves #10558)
540 [+TASK] Extbase: Undefined identifier in Tx_Extbase_Persistence_Storage_Typo3DbBackend::removeRow
541 Method clearPageCache was given an undefined variable $uid as second parameter.
542 Resolves: #10570
543 [+TASK] Extbase: $query->contains generate incomplete SQL
544 Use FIND_IN_SET instead of a self-constructed query of LIKE statements
545 Resolves: #8959
546 [+BUGFIX] Extbase (Persistence): Removed method createQuery from the QOMFactory. It is neither part of the API nor is it used by Extbase. Resolves #10215
547 [+BUGFIX] Extbase (Property): Minor fix in PHP doc comment
548 Fix the order of @param annotation in Tx_Extbase_Property_Mapper::mapAndValidate()
549 Resolves: #5887
550 [~CONFIGURATION] Extbase (MVC): Changed default value for automatic target page determination
551 The page id gets automatically detected if plugin.tx_extensionname_pluginname.view.defaultPid
552 is an empty string (was "auto" before). This ensures backwards compatibility.
553 Resolves #9121
554 [TASK] Extbase: moved Release Notes to ChangeLog.txt.
555 [+FEATURE] Extbase (MVC): Automatic target page determination
556 you can use the "pageUid" argument of the link.* and uri.* view helpers
557 to link to a different page. That is deprecated though as we won't have
558 the notion of "page uids" in v5. Instead the target page is now determined
559 automatically.
560 If the target page can't be determined because more than one active
561 plugin is capable of handling the action an exception will be thrown.
562 In that case you'll have to define the target page either by using the
563 pageUid argument or - preferably - by setting
564 plugin.tx_extensionname_pluginname.view.defaultPid to a fixed page uid.
565 Note: This feature still has to be documented!
566 Resolves: #9121
567 [+FEATURE] Extbase (MVC): Configurable plugin namespace
568 until now the namespace (aka prefix) of Extbase plugins was
569 fixed (tx_extensionname_pluginname). This is now configurable
570 via TypoScript. Just write:
571 plugin.tx_extensionname_pluginname.view.pluginNamespace = my_custom_namespace
572 to change the prefix for a specific plugin or
573 plugin.tx_extensionname.view.pluginNamespace = my_custom_namespace
574 to change if for the whole extension.
575 Note: This feature still has to be documented!
576 Resolves: #8365
577
578 Changes for 1.3.0 Alpha 2:
579 ==========================
580 included in TYPO3 4.5.0 Alpha 2.
581
582 Since the last version, one (possible BREAKING) change happened:
583
584 * Fixed Extbase Caching Bug.
585 Non-cacheable actions were cached due to the fact that TYPO3s
586 TypoScript condition "GP" does not merge GET & POST vars.
587 Additionally "switchableControllerActions" that were overridden
588 in the plugin flexform were not taken into account.
589
590 !!! This is a breaking change if you set up your TS configuration
591 of the plugin manually.
592
593 Full Changes:
594 -------------
595
596 [!!!][+BUGFIX] Extbase: Fix Extbase Caching Bug (thanks to Bastian Waidelich)
597
598 [-TASK] Extbase (MVC): removed fallback to current page in AbstractController::redirect() as that's already done within the UriBuilder if $targetPageUid is NULL
599
600
601 Changes for 1.3.0 Alpha 1:
602 ==========================
603 included in TYPO3 4.5.0 Alpha 1.
604
605 Since the last version, the following notable things happened:
606
607 * 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.
608 * Performance improvements in TypoScript::convertTypoScriptArrayToPlainArray. Thanks to Timo Schmidt.
609 * Numerous other bugfixes, see below.
610
611 Full Changes:
612 -------------
613 [~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.
614 [+TASK] Extbase (MVC): cleaned up View implementations and added assign() and assignMultiple() methods to ViewInterface. This resolves #9137
615 [+BUGFIX] Extbase: Fixed a small typo in extension description.
616 [+BUGFIX] Extbase (Persistence): DataMapper now mapps NULL into a property on non-existing related object instead of FALSE. Resolves #8973.
617 [+BUGFIX] Extbase (Reflection): getParentClass() in Tx_Extbase_Reflection_ClassReflection no longer causes a fatal error if no parent class exists. Resolves #8800.
618 [+BUGFIX] Extbase (Utility): Improved performance of TypoScript::convertTypoScriptArrayToPlainArray. Thanks to Timo Schmidt. Resolves #8857.
619 [~TASK] Extbase: Changed state to 'stable'. Resolves #8768.
620 [+BUGFIX] Extbase: Fixed EOL and encoding of several files. Resolves #8876.
621 [+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.
622 [!!!][+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.
623 [+BUGFIX] Extbase (Persistence): Fixed a problem where localized objects inside an aggregate are not translated. Resolves #8555.
624 [~TASK] Extbase: Removed new lines at the end of php files.
625
626 RELEASE NOTES of Extbase v1.0.0
627 ===============================
628
629 This package contains the Extbase Framework for Extensions. You may
630 also want to install the BlogExample (blog_example) to experiment
631 with. This little example extension demonstrates some of the main
632 features of Extbase. The documentation is bundled in a separate
633 extension called doc_extbase. Both, the blog_example and the
634 doc_extbase can downloaded via TER.
635
636 http://typo3.org/extensions/repository/view/blog_example/current/
637 http://typo3.org/extensions/repository/view/doc_extbase/current/
638
639 Currently Extbase is in ALPHA state. Do not expect everything in the
640 right place and shape. And keep in mind that the API may change
641 until TYPO3 v4.3beta1 is released.
642
643 If you have any feature requests or encountered issues regarding
644 this package please use the facilities on forge to report.
645
646 We are very open to answer your questions. Please use the newsgroup
647
648 typo3.projects.typo3v4mvc on lists.netfielders.de
649
650 so other developers can react to your comments and also
651 profit from the postet solutions. Do not contact a member of the
652 development team via private email (or skype, or visits, or ...)
653 until he accepted this channel. We all do coding for Extbase on
654 our sparetime and must handle our regular work load - and don't
655 forget about our families ;-).
656
657 We hope you have fun with this package!
658
659 -- Your Extbase Development Team
660
661 HOW TO CREATE THE CHANGELOG
662 ===========================
663 git log [startRevision]..HEAD --pretty=format:"%s%n%b%n" | grep -v "^$" | grep -v "git-svn-id"
664
665 Verify that the merge into the Core succeeded:
666 diff -urNw --exclude=".git" --exclude=".svn" -I "@version" ../../../typo3/sysext/extbase/ .