At the beginning of February, we had a development meeting here in Oxford. The following is what we decided.
We discussed pre-1.0 (urgent) and post-1.0 (desirable/quick) additions.
Technical documentation: we discussed providing in-code documentation suitable for processing by phpDoc. All agreed that any new code written should have this embedded; if we can, it would be very good if edits to existing files could include additions of those comments as well. (This should perhaps go for plugin developers too.)
Kevin Jardine very kindly agreed to provide some additional documentation, including a "cheat sheet" for the new API calls we discussed.
Misc metadata: we agreed to create a new 'created' field for new users, probably in the users table itself, and discussed a new, decentralised 'metadata' field to be eventually introduced. The fields we discussed including are:
Title
Description
Creator
Object type
Update time
Created time
Language
Language was a tricky one, because it seems silly to have a pull-down to select this every time you make a blog post etc. Instead, it was suggested that we eventually have a hidden 'advanced options' toggle, allowing people to set things like language if they needed to on a per-item basis. This is post-1.0.
A set_updated() function would allow the object's update time to be updated without changing any other item of metadata.
All this is a post-1.0 feature internally, although its related table and API (get_metadata, set_metadata, get_metadata_title etc) should be available for plugins to be used pre-1.0, perhaps for version 0.9.
Widgets: we discussed Kevin's proposed widget API. Profile widgets will be displayed in two columns, with even number widgets in one and odd number widgets in the other. Some widgets will be undeletable. Control of widgets will be via little icons, perhaps hidden with CSS until you roll over them, so that nothing is obscured and you're not presented with a screen full of widget editing controls. Widget functions that return false won't display anything; widgets that return a string will. Widgets don't know how they're going to be displayed.
Ben's note: This will be rolled out in svn over the next few weeks.
Access controls: we discussed centralising access controls and ownership into a new table. The benefits of this would be many owners per item, allowing for shared ownership of communities etc; it would also allow for a generalised access control API for everything. The access controls themselves would be more granular (post 1.0), allowing for read, write, etc - and roles relating to an object. For now, although all the access control API functions should work, the more granular aspects should return false (or some other error code that suggests that facility isn't available yet).
Plugins: rather than being loaded alphabetically, Elgg would have an ordered list of available activated plugins. This means we can change the order in which plugins are run from the admin panel, and although new plugins are autodiscovered, they aren't actually activated until the admin says so. A new function, module_purge();, was discussed for uninstalling plugins.
In general, it was decided that there should be plugin standards that should be adhered to; only those that meet the standards should be approved by us. We're also going to stop making module_pagesetup mandatory.
Session data: we decided that using $_SESSION for determining the current user is not the way to go (it's too dependent on the internal PHP session functions). A set of functions should be established for determining the current user, page owner and template in particular. (There is ongoing discussion about whether these should be global variables instead - all thoughts appreciated!)