Create a plugin manager in the application that reads all plugin configuration from the plugin.xml files. Plugins are created only when needed, no caching or sharing is implemented yet. Three types of plugins are implemented: class, text and an internal pointer to another plugin. Parameters for the class type can also be built from these three types.
Added the missing exception PluginNotFoundException for the plugin manager.
Removed the unnecessary methods 'hasPlugin' and 'getPlugin' from the plugin collection and replaced their usage with the array accessors for the collection.
Created a 'plugin' method in the abstract Page class. A page can now request a plugin by calling '$this->plugin("name")' instead of the longer '$this->pluginManager->createPlugin("name")'.
Assume that a plugin definition without a type is a class definition.
Assuma that the default type of a parameter in a plugin definition is an internal definition.
Naive check to find arrays inside the plugins XML file. If multiple children have the same name, assume that it is an array. Treat the children as seperate elements otherwise.
Restructured the plugins XML factory by splitting off several methods. This is far more readable and self explaning.