aboutsummaryrefslogtreecommitdiff
path: root/includes/js/dojox/uuid/git@cgit.fluxo.info:semanticscuttle
diff options
context:
space:
mode:
authorChristian Weiske <cweiske@cweiske.de>2011-08-16 20:09:41 +0200
committerChristian Weiske <cweiske@cweiske.de>2011-09-05 18:50:25 +0200
commitcf4036104b5fffd63473dfa53f44fd15ef4d1727 (patch)
treed0d8bd4b7c69863485240b2343ad186dbae78254 /includes/js/dojox/uuid/git@cgit.fluxo.info:semanticscuttle
parent057bc0b9320e1118940f61239fc21a5598beb124 (diff)
downloadsemanticscuttle-cf4036104b5fffd63473dfa53f44fd15ef4d1727.tar.gz
semanticscuttle-cf4036104b5fffd63473dfa53f44fd15ef4d1727.tar.bz2
fix sioc export
Diffstat (limited to 'includes/js/dojox/uuid/git@cgit.fluxo.info:semanticscuttle')
0 files changed, 0 insertions, 0 deletions
ne' style='width: 99.1%;'/> -rw-r--r--LICENSE.txt280
-rw-r--r--README.md28
-rw-r--r--README.txt39
-rw-r--r--UPGRADE.txt83
-rw-r--r--_css/css.php40
-rw-r--r--_css/js.php41
-rw-r--r--_graphics/SPRITES_LICENSE.TXT9
-rw-r--r--_graphics/admin_sprites.pngbin0 -> 2255 bytes-rw-r--r--_graphics/ajax_loader.gifbin4421 -> 2608 bytes-rw-r--r--_graphics/ajax_loader_bw.gifbin0 -> 2608 bytes-rw-r--r--_graphics/avatar_menu_arrows.gifbin419 -> 0 bytes-rw-r--r--_graphics/button_background.gifbin0 -> 786 bytes-rw-r--r--_graphics/button_graduation.pngbin0 -> 384 bytes-rw-r--r--_graphics/elgg_logo.pngbin0 -> 11481 bytes-rw-r--r--_graphics/elgg_sprites.pngbin0 -> 19302 bytes-rw-r--r--_graphics/elgg_toolbar_logo.gifbin1547 -> 1525 bytes-rw-r--r--_graphics/elgg_toolbar_logout.gifbin893 -> 0 bytes-rw-r--r--_graphics/favicon.icobin0 -> 1150 bytes-rw-r--r--_graphics/footer_back.gifbin1382 -> 0 bytes-rw-r--r--_graphics/friends_picker_arrows.gifbin1876 -> 0 bytes-rw-r--r--_graphics/friendspicker.pngbin0 -> 4853 bytes-rw-r--r--_graphics/header_shadow.pngbin0 -> 154 bytes-rw-r--r--_graphics/icon_bookmarkthis.gifbin574 -> 0 bytes-rw-r--r--_graphics/icon_customise_drag.gifbin338 -> 0 bytes-rw-r--r--_graphics/icon_customise_info.gifbin352 -> 0 bytes-rw-r--r--_graphics/icon_customise_remove.gifbin214 -> 0 bytes-rw-r--r--_graphics/icon_customise_remove.pngbin650 -> 0 bytes-rw-r--r--_graphics/icon_gallery.gifbin181 -> 0 bytes-rw-r--r--_graphics/icon_odd.gifbin569 -> 0 bytes-rw-r--r--_graphics/icon_reportthis.gifbin569 -> 0 bytes-rw-r--r--_graphics/icon_rss.gifbin583 -> 0 bytes-rw-r--r--_graphics/icon_tag.gifbin340 -> 0 bytes-rw-r--r--_graphics/icons/default/topbar.pngbin372 -> 313 bytes-rw-r--r--_graphics/icons/user/defaultlarge.gifbin0 -> 2924 bytes-rw-r--r--_graphics/icons/user/defaultmaster.gifbin0 -> 43 bytes-rw-r--r--_graphics/icons/user/defaultmedium.gifbin0 -> 2855 bytes-rw-r--r--_graphics/icons/user/defaultsmall.gifbin0 -> 1027 bytes-rw-r--r--_graphics/icons/user/defaulttiny.gifbin0 -> 745 bytes-rw-r--r--_graphics/icons/user/defaulttopbar.gifbin0 -> 599 bytes-rw-r--r--_graphics/owner_block_back.jpgbin1207 -> 0 bytes-rw-r--r--_graphics/owner_block_menu_arrow.gifbin169 -> 0 bytes-rw-r--r--_graphics/owner_block_menu_dot.gifbin85 -> 0 bytes-rw-r--r--_graphics/page_back_linen.gifbin16222 -> 0 bytes-rw-r--r--_graphics/page_back_linen_shadow.gifbin1763 -> 0 bytes-rw-r--r--_graphics/river_icons/river_icon_blog.gifbin672 -> 0 bytes-rw-r--r--_graphics/river_icons/river_icon_bookmarks.gifbin356 -> 0 bytes-rw-r--r--_graphics/river_icons/river_icon_comment.gifbin571 -> 0 bytes-rw-r--r--_graphics/river_icons/river_icon_feed.gifbin583 -> 0 bytes-rw-r--r--_graphics/river_icons/river_icon_files.gifbin382 -> 0 bytes-rw-r--r--_graphics/river_icons/river_icon_forum.gifbin403 -> 0 bytes-rw-r--r--_graphics/river_icons/river_icon_friends.gifbin371 -> 0 bytes-rw-r--r--_graphics/river_icons/river_icon_messageboard.gifbin634 -> 0 bytes-rw-r--r--_graphics/river_icons/river_icon_pages.gifbin84 -> 0 bytes-rw-r--r--_graphics/river_icons/river_icon_plugin.gifbin619 -> 0 bytes-rw-r--r--_graphics/river_icons/river_icon_privatemessage.gifbin373 -> 0 bytes-rw-r--r--_graphics/river_icons/river_icon_profile.gifbin321 -> 0 bytes-rw-r--r--_graphics/river_icons/river_icon_status.gifbin387 -> 0 bytes-rw-r--r--_graphics/river_icons/river_icon_thewire.gifbin565 -> 0 bytes-rw-r--r--_graphics/sidebar_background.gifbin0 -> 1354 bytes-rw-r--r--_graphics/skyscraper.gifbin1306 -> 0 bytes-rw-r--r--[-rwxr-xr-x]_graphics/spacer.gifbin43 -> 43 bytes-rw-r--r--_graphics/spotlight_back.gifbin1466 -> 0 bytes-rw-r--r--_graphics/toolbar_arrow.pngbin301 -> 0 bytes-rw-r--r--_graphics/toolbar_arrow_ie.gifbin332 -> 0 bytes-rw-r--r--_graphics/tools_over.pngbin233 -> 0 bytes-rw-r--r--_graphics/two_sidebar_background.gifbin0 -> 85 bytes-rw-r--r--_graphics/walled_garden/one_column_bottom.pngbin0 -> 1336 bytes-rw-r--r--_graphics/walled_garden/one_column_middle.pngbin0 -> 226 bytes-rw-r--r--_graphics/walled_garden/one_column_top.pngbin0 -> 1345 bytes-rw-r--r--_graphics/walled_garden/two_column_bottom.pngbin0 -> 1353 bytes-rw-r--r--_graphics/walled_garden/two_column_middle.pngbin0 -> 231 bytes-rw-r--r--_graphics/walled_garden/two_column_top.pngbin0 -> 1366 bytes-rw-r--r--account/forgotten_password.php22
-rw-r--r--account/register.php30
-rw-r--r--actions/admin/delete_admin_notice.php13
-rw-r--r--actions/admin/menu/save.php34
-rw-r--r--actions/admin/plugins/activate.php59
-rw-r--r--actions/admin/plugins/activate_all.php33
-rw-r--r--actions/admin/plugins/deactivate.php53
-rw-r--r--actions/admin/plugins/deactivate_all.php33
-rw-r--r--actions/admin/plugins/disable.php34
-rw-r--r--actions/admin/plugins/enable.php34
-rw-r--r--actions/admin/plugins/reorder.php53
-rw-r--r--actions/admin/plugins/set_priority.php39
-rw-r--r--actions/admin/site/flush_cache.php10
-rw-r--r--actions/admin/site/regenerate_secret.php11
-rw-r--r--actions/admin/site/unlock_upgrade.php10
-rw-r--r--actions/admin/site/update_advanced.php98
-rw-r--r--actions/admin/site/update_basic.php110
-rw-r--r--actions/admin/user/ban.php63
-rw-r--r--actions/admin/user/delete.php67
-rw-r--r--actions/admin/user/makeadmin.php56
-rw-r--r--actions/admin/user/removeadmin.php56
-rw-r--r--actions/admin/user/resetpassword.php81
-rw-r--r--actions/admin/user/unban.php62
-rw-r--r--actions/avatar/crop.php72
-rw-r--r--actions/avatar/remove.php36
-rw-r--r--actions/avatar/upload.php62
-rw-r--r--actions/comments/add.php120
-rw-r--r--actions/comments/delete.php53
-rw-r--r--actions/email/save.php55
-rw-r--r--actions/entities/delete.php48
-rw-r--r--actions/friends/add.php71
-rw-r--r--actions/friends/addcollection.php50
-rw-r--r--actions/friends/collections/add.php31
-rw-r--r--actions/friends/collections/delete.php23
-rw-r--r--actions/friends/collections/edit.php23
-rw-r--r--actions/friends/deletecollection.php52
-rw-r--r--actions/friends/editcollection.php20
-rw-r--r--actions/friends/remove.php73
-rw-r--r--actions/import/opendd.php50
-rw-r--r--actions/login.php116
-rw-r--r--actions/logout.php43
-rw-r--r--actions/notifications/settings/usersettings/save.php58
-rw-r--r--actions/plugins/settings/save.php71
-rw-r--r--actions/plugins/usersettings/save.php88
-rw-r--r--actions/profile/edit.php116
-rw-r--r--actions/profile/fields/add.php40
-rw-r--r--actions/profile/fields/delete.php28
-rw-r--r--actions/profile/fields/edit.php20
-rw-r--r--actions/profile/fields/reorder.php12
-rw-r--r--actions/profile/fields/reset.php20
-rw-r--r--actions/register.php151
-rw-r--r--actions/river/delete.php21
-rw-r--r--actions/security/refreshtoken.php5
-rw-r--r--actions/systemsettings/install.php120
-rw-r--r--actions/user/language.php43
-rw-r--r--actions/user/name.php43
-rw-r--r--actions/user/password.php50
-rw-r--r--actions/user/passwordreset.php42
-rw-r--r--actions/user/requestnewpassword.php54
-rw-r--r--actions/user/spotlight.php34
-rw-r--r--actions/useradd.php117
-rw-r--r--actions/usersettings/save.php33
-rw-r--r--actions/widgets/add.php85
-rw-r--r--actions/widgets/delete.php20
-rw-r--r--actions/widgets/move.php24
-rw-r--r--actions/widgets/reorder.php56
-rw-r--r--actions/widgets/save.php82
-rw-r--r--actions/widgets/upgrade.php65
-rw-r--r--admin/index.php21
-rw-r--r--admin/plugins.php30
-rw-r--r--admin/site.php26
-rw-r--r--admin/statistics.php27
-rw-r--r--admin/user.php45
-rw-r--r--crontab.example27
-rw-r--r--dashboard/index.php33
-rw-r--r--dashboard/latest.php30
-rw-r--r--documentation/coding_standards/best_practices.txt60
-rw-r--r--documentation/coding_standards/css_coding_standards.txt67
-rw-r--r--documentation/coding_standards/deprecation.txt36
-rw-r--r--documentation/coding_standards/html_best_practices.txt1
-rw-r--r--documentation/coding_standards/javascript_best_practices.txt1
-rw-r--r--documentation/coding_standards/javascript_coding_standards.txt13
-rw-r--r--documentation/coding_standards/php_best_practices.txt1
-rw-r--r--documentation/coding_standards/php_coding_standards.txt55
-rw-r--r--documentation/examples/actions/basic.php22
-rw-r--r--documentation/examples/crontab.example28
-rw-r--r--documentation/examples/events/advanced.php13
-rw-r--r--documentation/examples/events/all.php30
-rw-r--r--documentation/examples/events/basic.php17
-rw-r--r--documentation/examples/events/trigger.php11
-rw-r--r--documentation/examples/hooks/advanced.php28
-rw-r--r--documentation/examples/hooks/all.php12
-rw-r--r--documentation/examples/hooks/basic.php17
-rw-r--r--documentation/examples/hooks/trigger.php14
-rw-r--r--documentation/examples/plugins/README.txt5
-rw-r--r--documentation/examples/plugins/actions/.gitignore0
-rw-r--r--documentation/examples/plugins/languages/en.php24
-rw-r--r--documentation/examples/plugins/manifest.xml18
-rw-r--r--documentation/examples/plugins/start.php22
-rw-r--r--documentation/examples/plugins/views/default/.gitignore0
-rw-r--r--documentation/info/config.php430
-rw-r--r--documentation/info/manifest.xml98
-rw-r--r--engine/classes/APIException.php11
-rw-r--r--engine/classes/CallException.php10
-rw-r--r--engine/classes/ClassException.php10
-rw-r--r--engine/classes/ClassNotFoundException.php10
-rw-r--r--engine/classes/ConfigurationException.php10
-rw-r--r--engine/classes/CronException.php10
-rw-r--r--engine/classes/DataFormatException.php9
-rw-r--r--engine/classes/DatabaseException.php10
-rw-r--r--engine/classes/ElggAccess.php70
-rw-r--r--engine/classes/ElggAnnotation.php133
-rw-r--r--engine/classes/ElggAttributeLoader.php248
-rw-r--r--engine/classes/ElggAutoP.php336
-rw-r--r--engine/classes/ElggBatch.php433
-rw-r--r--engine/classes/ElggCache.php247
-rw-r--r--engine/classes/ElggCrypto.php208
-rw-r--r--engine/classes/ElggData.php309
-rw-r--r--engine/classes/ElggDiskFilestore.php417
-rw-r--r--engine/classes/ElggEntity.php1770
-rw-r--r--engine/classes/ElggExtender.php214
-rw-r--r--engine/classes/ElggFile.php440
-rw-r--r--engine/classes/ElggFileCache.php230
-rw-r--r--engine/classes/ElggFilestore.php139
-rw-r--r--engine/classes/ElggGroup.php393
-rw-r--r--engine/classes/ElggGroupItemVisibility.php93
-rw-r--r--engine/classes/ElggHMACCache.php99
-rw-r--r--engine/classes/ElggLRUCache.php181
-rw-r--r--engine/classes/ElggMemcache.php203
-rw-r--r--engine/classes/ElggMenuBuilder.php291
-rw-r--r--engine/classes/ElggMenuItem.php590
-rw-r--r--engine/classes/ElggMetadata.php158
-rw-r--r--engine/classes/ElggObject.php216
-rw-r--r--engine/classes/ElggPAM.php105
-rw-r--r--engine/classes/ElggPlugin.php1006
-rw-r--r--engine/classes/ElggPluginManifest.php656
-rw-r--r--engine/classes/ElggPluginManifestParser.php102
-rw-r--r--engine/classes/ElggPluginManifestParser17.php82
-rw-r--r--engine/classes/ElggPluginManifestParser18.php97
-rw-r--r--engine/classes/ElggPluginPackage.php640
-rw-r--r--engine/classes/ElggPriorityList.php366
-rw-r--r--engine/classes/ElggRelationship.php231
-rw-r--r--engine/classes/ElggRiverItem.php115
-rw-r--r--engine/classes/ElggSession.php153
-rw-r--r--engine/classes/ElggSharedMemoryCache.php40
-rw-r--r--engine/classes/ElggSite.php455
-rw-r--r--engine/classes/ElggStaticVariableCache.php96
-rw-r--r--engine/classes/ElggTranslit.php269
-rw-r--r--engine/classes/ElggUser.php588
-rw-r--r--engine/classes/ElggVolatileMetadataCache.php355
-rw-r--r--engine/classes/ElggWidget.php245
-rw-r--r--engine/classes/ElggXMLElement.php131
-rw-r--r--engine/classes/ErrorResult.php54
-rw-r--r--engine/classes/ExportException.php9
-rw-r--r--engine/classes/Exportable.php23
-rw-r--r--engine/classes/Friendable.php104
-rw-r--r--engine/classes/GenericResult.php125
-rw-r--r--engine/classes/IOException.php9
-rw-r--r--engine/classes/ImportException.php8
-rw-r--r--engine/classes/Importable.php19
-rw-r--r--engine/classes/IncompleteEntityException.php10
-rw-r--r--engine/classes/InstallationException.php9
-rw-r--r--engine/classes/InvalidClassException.php9
-rw-r--r--engine/classes/InvalidParameterException.php9
-rw-r--r--engine/classes/Locatable.php49
-rw-r--r--engine/classes/Loggable.php65
-rw-r--r--engine/classes/LoginException.php10
-rw-r--r--engine/classes/NotImplementedException.php10
-rw-r--r--engine/classes/Notable.php41
-rw-r--r--engine/classes/NotificationException.php8
-rw-r--r--engine/classes/ODD.php131
-rw-r--r--engine/classes/ODDDocument.php202
-rw-r--r--engine/classes/ODDEntity.php34
-rw-r--r--engine/classes/ODDMetaData.php39
-rw-r--r--engine/classes/ODDRelationship.php33
-rw-r--r--engine/classes/PluginException.php11
-rw-r--r--engine/classes/RegistrationException.php9
-rw-r--r--engine/classes/SecurityException.php10
-rw-r--r--engine/classes/SuccessResult.php34
-rw-r--r--engine/classes/XMLRPCArrayParameter.php56
-rw-r--r--engine/classes/XMLRPCBase64Parameter.php28
-rw-r--r--engine/classes/XMLRPCBoolParameter.php30
-rw-r--r--engine/classes/XMLRPCCall.php62
-rw-r--r--engine/classes/XMLRPCDateParameter.php33
-rw-r--r--engine/classes/XMLRPCDoubleParameter.php29
-rw-r--r--engine/classes/XMLRPCErrorResponse.php36
-rw-r--r--engine/classes/XMLRPCIntParameter.php29
-rw-r--r--engine/classes/XMLRPCParameter.php16
-rw-r--r--engine/classes/XMLRPCResponse.php71
-rw-r--r--engine/classes/XMLRPCStringParameter.php30
-rw-r--r--engine/classes/XMLRPCStructParameter.php55
-rw-r--r--engine/classes/XMLRPCSuccessResponse.php22
-rw-r--r--engine/classes/XmlElement.php20
-rw-r--r--engine/handlers/action_handler.php40
-rw-r--r--engine/handlers/cache_handler.php105
-rw-r--r--engine/handlers/cron_handler.php39
-rw-r--r--engine/handlers/export_handler.php118
-rw-r--r--engine/handlers/page_handler.php48
-rw-r--r--engine/handlers/pagehandler.php26
-rw-r--r--engine/handlers/service_handler.php27
-rw-r--r--engine/handlers/xml-rpc_handler.php90
-rw-r--r--engine/lib/access.php1524
-rw-r--r--engine/lib/actions.php776
-rw-r--r--engine/lib/activity.php154
-rw-r--r--engine/lib/admin.php839
-rw-r--r--engine/lib/annotations.php1497
-rw-r--r--engine/lib/api.php1221
-rw-r--r--engine/lib/cache.php856
-rw-r--r--engine/lib/calendar.php1023
-rw-r--r--engine/lib/configuration.php825
-rw-r--r--engine/lib/cron.php140
-rw-r--r--engine/lib/database.php1379
-rw-r--r--engine/lib/deprecated-1.7.php1164
-rw-r--r--engine/lib/deprecated-1.8.php4820
-rw-r--r--engine/lib/deprecated-1.9.php582
-rw-r--r--engine/lib/elgglib.php4345
-rw-r--r--engine/lib/entities.php5331
-rw-r--r--engine/lib/exceptions.php164
-rw-r--r--engine/lib/export.php453
-rw-r--r--engine/lib/extender.php661
-rw-r--r--engine/lib/filestore.php1319
-rw-r--r--engine/lib/group.php1147
-rw-r--r--engine/lib/input.php996
-rw-r--r--engine/lib/install.php126
-rw-r--r--engine/lib/languages.php586
-rw-r--r--engine/lib/location.php404
-rw-r--r--engine/lib/mb_wrapper.php233
-rw-r--r--engine/lib/memcache.php243
-rw-r--r--engine/lib/metadata.php1846
-rw-r--r--engine/lib/metastrings.php1047
-rw-r--r--engine/lib/navigation.php527
-rw-r--r--engine/lib/notification.php962
-rw-r--r--engine/lib/objects.php499
-rw-r--r--engine/lib/opendd.php457
-rw-r--r--engine/lib/output.php469
-rw-r--r--engine/lib/pagehandler.php275
-rw-r--r--engine/lib/pageowner.php450
-rw-r--r--engine/lib/pam.php163
-rw-r--r--engine/lib/ping.php49
-rw-r--r--engine/lib/plugins.php1877
-rw-r--r--engine/lib/private_settings.php414
-rw-r--r--engine/lib/query.php886
-rw-r--r--engine/lib/relationships.php1480
-rw-r--r--engine/lib/river.php1195
-rw-r--r--engine/lib/river2.php271
-rw-r--r--engine/lib/sessions.php1250
-rw-r--r--engine/lib/sites.php857
-rw-r--r--engine/lib/social.php128
-rw-r--r--engine/lib/statistics.php222
-rw-r--r--engine/lib/system_log.php591
-rw-r--r--engine/lib/tags.php517
-rw-r--r--engine/lib/upgrade.php365
-rw-r--r--engine/lib/upgrades/2008100701.php13
-rw-r--r--engine/lib/upgrades/2008101303.php20
-rw-r--r--engine/lib/upgrades/2009022701.php7
-rw-r--r--engine/lib/upgrades/2009041701.php8
-rw-r--r--engine/lib/upgrades/2009070101.php9
-rw-r--r--engine/lib/upgrades/2009102801.php222
-rw-r--r--engine/lib/upgrades/2010010501.php8
-rw-r--r--engine/lib/upgrades/2010033101.php70
-rw-r--r--engine/lib/upgrades/2010040201.php41
-rw-r--r--engine/lib/upgrades/2010052601.php27
-rw-r--r--engine/lib/upgrades/2010060101.php16
-rw-r--r--engine/lib/upgrades/2010060401.php59
-rw-r--r--engine/lib/upgrades/2010061501.php75
-rw-r--r--engine/lib/upgrades/2010062301.php33
-rw-r--r--engine/lib/upgrades/2010062302.php33
-rw-r--r--engine/lib/upgrades/2010070301.php9
-rw-r--r--engine/lib/upgrades/2010071001.php58
-rw-r--r--engine/lib/upgrades/2010071002.php50
-rw-r--r--engine/lib/upgrades/2010111501.php33
-rw-r--r--engine/lib/upgrades/2010121601.php9
-rw-r--r--engine/lib/upgrades/2010121602.php10
-rw-r--r--engine/lib/upgrades/2010121701.php10
-rw-r--r--engine/lib/upgrades/2010123101.php9
-rw-r--r--engine/lib/upgrades/2011010101.php98
-rw-r--r--engine/lib/upgrades/2011021800-1.8_svn-goodbye_walled_garden-083121a656d06894.php34
-rw-r--r--engine/lib/upgrades/2011022000-1.8_svn-custom_profile_fields-390ac967b0bb5665.php59
-rw-r--r--engine/lib/upgrades/2011030700-1.8_svn-blog_status_metadata-4645225d7b440876.php24
-rw-r--r--engine/lib/upgrades/2011031300-1.8_svn-twitter_api-12b832a5a7a3e1bd.php54
-rw-r--r--engine/lib/upgrades/2011031600-1.8_svn-datalist_grows_up-0b8aec5a55cc1e1c.php18
-rw-r--r--engine/lib/upgrades/2011032000-1.8_svn-widgets_arent_plugins-61836261fa280a5c.php10
-rw-r--r--engine/lib/upgrades/2011032200-1.8_svn-admins_like_widgets-7f19d2783c1680d3.php13
-rw-r--r--engine/lib/upgrades/2011052801.php46
-rw-r--r--engine/lib/upgrades/2011061200-1.8b1-sites_need_a_site_guid-6d9dcbf46c0826cc.php31
-rw-r--r--engine/lib/upgrades/2011092500-1.8.0.1-forum_reply_river_view-5758ce8d86ac56ce.php12
-rw-r--r--engine/lib/upgrades/2011123100-1.8.2-fix_friend_river-b17e7ff8345c2269.php12
-rw-r--r--engine/lib/upgrades/2011123101-1.8.2-fix_blog_status-b14c2a0e7b9e7d55.php25
-rw-r--r--engine/lib/upgrades/2012012000-1.8.3-ip_in_syslog-87fe0f068cf62428.php12
-rw-r--r--engine/lib/upgrades/2012012100-1.8.3-system_cache-93100e7d55a24a11.php13
-rw-r--r--engine/lib/upgrades/2012041800-1.8.3-dont_filter_passwords-c0ca4a18b38ae2bc.php11
-rw-r--r--engine/lib/upgrades/2012041801-1.8.3-multiple_user_tokens-852225f7fd89f6c5.php13
-rw-r--r--engine/lib/upgrades/2013030600-1.8.13-update_user_location-8999eb8bf1bdd9a3.php24
-rw-r--r--engine/lib/upgrades/2013051700-1.8.15-add_missing_group_index-52a63a3a3ffaced2.php28
-rw-r--r--engine/lib/upgrades/2013052900-1.8.15-ipv6_in_syslog-f5c2cc0196e9e731.php12
-rw-r--r--engine/lib/upgrades/2013060900-1.8.15-site_secret-404fc165cf9e0ac9.php16
-rw-r--r--engine/lib/upgrades/create_upgrade.php152
-rw-r--r--engine/lib/user_settings.php360
-rw-r--r--engine/lib/users.php3142
-rw-r--r--engine/lib/usersettings.php86
-rw-r--r--engine/lib/version.php121
-rw-r--r--engine/lib/views.php1665
-rw-r--r--engine/lib/web_services.php1454
-rw-r--r--engine/lib/widgets.php941
-rw-r--r--engine/lib/xml-rpc.php730
-rw-r--r--engine/lib/xml.php257
-rw-r--r--engine/schema/mysql.sql818
-rw-r--r--engine/schema/upgrades/2009051401.sql5
-rw-r--r--engine/schema/upgrades/2009052201.sql5
-rw-r--r--engine/schema/upgrades/2009091901.sql3
-rw-r--r--engine/schema/upgrades/2009100701.sql2
-rw-r--r--engine/schema/upgrades/2010012901.sql1
-rw-r--r--engine/schema/upgrades/2010030101.sql1
-rw-r--r--engine/schema/upgrades/2010062401.sql1
-rw-r--r--engine/settings.example.php252
-rw-r--r--engine/start.php340
-rw-r--r--engine/tests/api/access_collections.php290
-rw-r--r--engine/tests/api/annotations.php150
-rw-r--r--engine/tests/api/entity_getter_functions.php2884
-rw-r--r--engine/tests/api/helpers.php705
-rw-r--r--engine/tests/api/metadata.php230
-rw-r--r--engine/tests/api/metadata_cache.php176
-rw-r--r--engine/tests/api/metastrings.php217
-rw-r--r--engine/tests/api/output.php74
-rw-r--r--engine/tests/api/plugins.php299
-rw-r--r--engine/tests/api/river.php21
-rw-r--r--engine/tests/elgg_unit_test.php29
-rw-r--r--engine/tests/objects/entities.php423
-rw-r--r--engine/tests/objects/filestore.php100
-rw-r--r--engine/tests/objects/objects.php306
-rw-r--r--engine/tests/objects/sites.php77
-rw-r--r--engine/tests/objects/users.php250
-rw-r--r--engine/tests/regression/trac_bugs.php405
-rw-r--r--engine/tests/services/api.php324
-rw-r--r--engine/tests/suite.php53
-rw-r--r--engine/tests/test_files/output/autop/block-a.exp.norun.html6
-rw-r--r--engine/tests/test_files/output/autop/block-a.in.norun.html9
-rw-r--r--engine/tests/test_files/output/autop/domdoc_exp.html46
-rw-r--r--engine/tests/test_files/output/autop/domdoc_in.html80
-rw-r--r--engine/tests/test_files/output/autop/typical-post.exp.html84
-rw-r--r--engine/tests/test_files/output/autop/typical-post.in.html89
-rw-r--r--engine/tests/test_files/output/autop/wp-welcome.exp.html22
-rw-r--r--engine/tests/test_files/output/autop/wp-welcome.in.html25
-rw-r--r--engine/tests/test_files/output/autop/wpautop-fails.exp.html31
-rw-r--r--engine/tests/test_files/output/autop/wpautop-fails.in.html41
-rw-r--r--engine/tests/test_files/output/autop/wysiwyg-test.exp.html51
-rw-r--r--engine/tests/test_files/output/autop/wysiwyg-test.in.html79
-rw-r--r--engine/tests/test_files/plugin_17/manifest.xml10
-rw-r--r--engine/tests/test_files/plugin_17/start.php0
-rw-r--r--engine/tests/test_files/plugin_18/manifest.xml108
-rw-r--r--engine/tests/test_files/plugin_18/start.php0
-rw-r--r--engine/tests/test_files/xxe/external_entity.txt1
-rw-r--r--engine/tests/test_files/xxe/request.xml8
-rw-r--r--engine/tests/test_skeleton.php55
-rw-r--r--entities/index.php68
-rw-r--r--entities/list.php21
-rw-r--r--friends/add.php28
-rw-r--r--friends/collections.php28
-rw-r--r--friends/edit.php39
-rw-r--r--friends/index.php26
-rw-r--r--friends/of.php26
-rw-r--r--friends/pickercallback.php61
-rw-r--r--gpl-plugins20
-rw-r--r--htaccess_dist285
-rw-r--r--index.php79
-rw-r--r--install.php62
-rw-r--r--install/ElggInstaller.php1575
-rw-r--r--install/ElggRewriteTester.php199
-rw-r--r--install/cli/sample_installer.php67
-rw-r--r--install/css/install.css295
-rw-r--r--install/js/install.js42
-rw-r--r--install/languages/en.php161
-rw-r--r--js/classes/ElggEntity.js20
-rw-r--r--js/classes/ElggPriorityList.js92
-rw-r--r--js/classes/ElggUser.js28
-rw-r--r--js/lib/ajax.js242
-rw-r--r--js/lib/configuration.js10
-rw-r--r--js/lib/elgglib.js563
-rw-r--r--js/lib/hooks.js173
-rw-r--r--js/lib/languages.js96
-rw-r--r--js/lib/pageowner.js18
-rw-r--r--js/lib/prototypes.js66
-rw-r--r--js/lib/security.js107
-rw-r--r--js/lib/session.js123
-rw-r--r--js/lib/ui.autocomplete.js14
-rw-r--r--js/lib/ui.avatar_cropper.js76
-rw-r--r--js/lib/ui.friends_picker.js91
-rw-r--r--js/lib/ui.js293
-rw-r--r--js/lib/ui.river.js14
-rw-r--r--js/lib/ui.userpicker.js117
-rw-r--r--js/lib/ui.widgets.js209
-rw-r--r--js/tests/ElggAjaxOptionsTest.js61
-rw-r--r--js/tests/ElggAjaxTest.js59
-rw-r--r--js/tests/ElggHooksTest.js28
-rw-r--r--js/tests/ElggLanguagesTest.js45
-rw-r--r--js/tests/ElggLibTest.js140
-rw-r--r--js/tests/ElggPriorityListTest.js47
-rw-r--r--js/tests/ElggSecurityTest.js75
-rw-r--r--js/tests/ElggSessionTest.js36
-rw-r--r--js/tests/README25
-rw-r--r--js/tests/jsTestDriver.conf10
-rw-r--r--languages/en.php2420
-rw-r--r--mod/apiadmin/actions/generate.php35
-rw-r--r--mod/apiadmin/actions/revokekey.php23
-rw-r--r--mod/apiadmin/index.php36
-rw-r--r--mod/apiadmin/languages/en.php41
-rw-r--r--mod/apiadmin/manifest.xml9
-rw-r--r--mod/apiadmin/start.php79
-rw-r--r--mod/apiadmin/views/default/apiadmin/forms/add_key.php13
-rw-r--r--mod/apiadmin/views/default/object/api_key.php35
-rw-r--r--mod/beechat/README23
-rw-r--r--mod/beechat/actions/get_connection.php21
-rw-r--r--mod/beechat/actions/get_details.php21
-rw-r--r--mod/beechat/actions/get_icons.php52
-rw-r--r--mod/beechat/actions/get_state.php21
-rw-r--r--mod/beechat/actions/get_statuses.php41
-rw-r--r--mod/beechat/actions/join_groupchat.php15
-rw-r--r--mod/beechat/actions/leave_groupchat.php12
-rw-r--r--mod/beechat/actions/save_state.php29
-rw-r--r--mod/beechat/classes/BeechatSync.php37
-rw-r--r--mod/beechat/disablechat.php8
-rw-r--r--mod/beechat/enablechat.php8
-rw-r--r--mod/beechat/graphics/icons/bullet_arrow_down.pngbin0 -> 201 bytes-rw-r--r--mod/beechat/graphics/icons/bullet_arrow_up.pngbin0 -> 201 bytes-rw-r--r--mod/beechat/graphics/icons/bullet_black.pngbin0 -> 211 bytes-rw-r--r--mod/beechat/graphics/icons/bullet_blue.pngbin0 -> 289 bytes-rw-r--r--mod/beechat/graphics/icons/bullet_delete.pngbin0 -> 308 bytes-rw-r--r--mod/beechat/graphics/icons/bullet_error.pngbin0 -> 454 bytes-rw-r--r--mod/beechat/graphics/icons/bullet_green.pngbin0 -> 295 bytes-rw-r--r--mod/beechat/graphics/icons/bullet_orange.pngbin0 -> 283 bytes-rw-r--r--mod/beechat/graphics/icons/bullet_pink.pngbin0 -> 286 bytes-rw-r--r--mod/beechat/graphics/icons/bullet_purple.pngbin0 -> 294 bytes-rw-r--r--mod/beechat/graphics/icons/bullet_red.pngbin0 -> 287 bytes-rw-r--r--mod/beechat/graphics/icons/bullet_star.pngbin0 -> 331 bytes-rw-r--r--mod/beechat/graphics/icons/bullet_white.pngbin0 -> 201 bytes-rw-r--r--mod/beechat/graphics/icons/bullet_yellow.pngbin0 -> 287 bytes-rw-r--r--mod/beechat/graphics/icons/chat_icon.pngbin0 -> 456 bytes-rw-r--r--mod/beechat/graphics/icons/cog_edit.pngbin0 -> 865 bytes-rw-r--r--mod/beechat/graphics/icons/comment_edit.pngbin0 -> 644 bytes-rw-r--r--mod/beechat/graphics/icons/emoticon_evilgrin.pngbin0 -> 727 bytes-rw-r--r--mod/beechat/graphics/icons/emoticon_grin.pngbin0 -> 714 bytes-rw-r--r--mod/beechat/graphics/icons/emoticon_happy.pngbin0 -> 731 bytes-rw-r--r--mod/beechat/graphics/icons/emoticon_smile.pngbin0 -> 725 bytes-rw-r--r--mod/beechat/graphics/icons/emoticon_surprised.pngbin0 -> 741 bytes-rw-r--r--mod/beechat/graphics/icons/emoticon_tongue.pngbin0 -> 727 bytes-rw-r--r--mod/beechat/graphics/icons/emoticon_unhappy.pngbin0 -> 723 bytes-rw-r--r--mod/beechat/graphics/icons/emoticon_waii.pngbin0 -> 737 bytes-rw-r--r--mod/beechat/graphics/icons/emoticon_wink.pngbin0 -> 712 bytes-rw-r--r--mod/beechat/graphics/icons/heart.pngbin0 -> 749 bytes-rw-r--r--mod/beechat/graphics/icons/house.pngbin0 -> 806 bytes-rw-r--r--mod/beechat/graphics/icons/muc_icon.pngbin0 -> 592 bytes-rw-r--r--mod/beechat/graphics/icons/notification_pink.pngbin0 -> 3140 bytes-rw-r--r--mod/beechat/graphics/icons/pointer.pngbin0 -> 2833 bytes-rw-r--r--mod/beechat/graphics/icons/resultset_next.pngbin0 -> 395 bytes-rw-r--r--mod/beechat/graphics/icons/resultset_previous.pngbin0 -> 389 bytes-rw-r--r--mod/beechat/graphics/icons/statuses.pngbin0 -> 5857 bytes-rw-r--r--mod/beechat/graphics/icons/vcard.pngbin0 -> 533 bytes-rw-r--r--mod/beechat/languages/en.php45
-rw-r--r--mod/beechat/languages/es.php43
-rw-r--r--mod/beechat/languages/fr.php32
-rw-r--r--mod/beechat/lib/beechat.php250
-rw-r--r--mod/beechat/manifest.xml15
-rw-r--r--mod/beechat/migrate.php88
-rw-r--r--mod/beechat/migrategroups.php18
-rw-r--r--mod/beechat/sounds/newmessage.wavbin0 -> 39440 bytes-rw-r--r--mod/beechat/start.php184
-rw-r--r--mod/beechat/views/default/beechat/beechat.js.php2498
-rw-r--r--mod/beechat/views/default/beechat/beechat.php84
-rw-r--r--mod/beechat/views/default/beechat/beechat.userjs.php54
-rw-r--r--mod/beechat/views/default/beechat/screen.css.php672
-rw-r--r--mod/beechat/views/default/js/b64.js.php74
-rw-r--r--mod/beechat/views/default/js/jquery.cookie.min.js.php10
-rw-r--r--mod/beechat/views/default/js/jquery.localscroll-1.2.7-min.js.php9
-rwxr-xr-xmod/beechat/views/default/js/jquery.scrollTo-min.js.php11
-rwxr-xr-xmod/beechat/views/default/js/jquery.serialScroll-min.js.php10
-rw-r--r--mod/beechat/views/default/js/jquery.tools.min.js.php49
-rw-r--r--mod/beechat/views/default/js/json2.js.php476
-rw-r--r--mod/beechat/views/default/js/md5.js.php261
-rw-r--r--mod/beechat/views/default/js/sha1.js.php207
-rw-r--r--mod/beechat/views/default/js/strophe.min.js.php1
-rw-r--r--mod/beechat/views/default/js/strophe.muc.js300
-rw-r--r--mod/beechat/views/default/js/strophe.muc.js.php300
-rwxr-xr-xmod/beechat/views/default/settings/beechat/edit.php31
-rw-r--r--mod/blog/actions/blog/auto_save_revision.php89
-rw-r--r--mod/blog/actions/blog/delete.php27
-rw-r--r--mod/blog/actions/blog/save.php182
-rw-r--r--mod/blog/activate.php10
-rw-r--r--mod/blog/classes/ElggBlog.php42
-rw-r--r--mod/blog/deactivate.php6
-rw-r--r--mod/blog/languages/en.php78
-rw-r--r--mod/blog/lib/blog.php478
-rw-r--r--mod/blog/manifest.xml19
-rw-r--r--mod/blog/start.php302
-rw-r--r--mod/blog/views/default/blog/css.php14
-rw-r--r--mod/blog/views/default/blog/group_module.php46
-rw-r--r--mod/blog/views/default/blog/sidebar.php30
-rw-r--r--mod/blog/views/default/blog/sidebar/archives.php34
-rw-r--r--mod/blog/views/default/blog/sidebar/revisions.php79
-rw-r--r--mod/blog/views/default/forms/blog/save.php166
-rw-r--r--mod/blog/views/default/js/blog/save_draft.php67
-rw-r--r--mod/blog/views/default/object/blog.php99
-rw-r--r--mod/blog/views/default/river/object/blog/create.php15
-rw-r--r--mod/blog/views/default/widgets/blog/content.php30
-rw-r--r--mod/blog/views/default/widgets/blog/edit.php22
-rw-r--r--mod/bookmarks/actions/bookmarks/delete.php24
-rw-r--r--mod/bookmarks/actions/bookmarks/save.php90
-rw-r--r--mod/bookmarks/graphics/bookmark.gifbin0 -> 576 bytes-rw-r--r--mod/bookmarks/graphics/bookmarklet.gif (renamed from _graphics/elgg_bookmarklet.gif)bin790 -> 790 bytes-rw-r--r--mod/bookmarks/languages/en.php91
-rw-r--r--mod/bookmarks/lib/bookmarks.php46
-rw-r--r--mod/bookmarks/manifest.xml19
-rw-r--r--mod/bookmarks/pages/bookmarks/add.php22
-rw-r--r--mod/bookmarks/pages/bookmarks/all.php33
-rw-r--r--mod/bookmarks/pages/bookmarks/bookmarklet.php36
-rw-r--r--mod/bookmarks/pages/bookmarks/edit.php30
-rw-r--r--mod/bookmarks/pages/bookmarks/friends.php33
-rw-r--r--mod/bookmarks/pages/bookmarks/owner.php50
-rw-r--r--mod/bookmarks/pages/bookmarks/view.php38
-rw-r--r--mod/bookmarks/start.php316
-rw-r--r--mod/bookmarks/views/default/bookmarks/bookmarklet.php35
-rw-r--r--mod/bookmarks/views/default/bookmarks/css.php3
-rw-r--r--mod/bookmarks/views/default/bookmarks/group_module.php47
-rw-r--r--mod/bookmarks/views/default/bookmarks/js.php12
-rw-r--r--mod/bookmarks/views/default/bookmarks/sidebar.php14
-rw-r--r--mod/bookmarks/views/default/forms/bookmarks/save.php59
-rw-r--r--mod/bookmarks/views/default/object/bookmarks.php127
-rw-r--r--mod/bookmarks/views/default/river/object/bookmarks/create.php15
-rw-r--r--mod/bookmarks/views/default/widgets/bookmarks/content.php32
-rw-r--r--mod/bookmarks/views/default/widgets/bookmarks/edit.php24
-rw-r--r--mod/bookmarks/views/rss/object/bookmarks.php37
-rw-r--r--mod/categories/activate.php11
-rw-r--r--mod/categories/deactivate.php6
-rw-r--r--mod/categories/languages/en.php15
-rw-r--r--mod/categories/manifest.xml17
-rw-r--r--mod/categories/pages/categories/listing.php39
-rw-r--r--mod/categories/readme.txt25
-rw-r--r--mod/categories/start.php83
-rw-r--r--mod/categories/views/default/categories.php12
-rw-r--r--mod/categories/views/default/categories/css.php12
-rw-r--r--mod/categories/views/default/categories/view.php8
-rw-r--r--mod/categories/views/default/input/categories.php56
-rw-r--r--mod/categories/views/default/output/categories.php29
-rw-r--r--mod/categories/views/default/plugins/categories/settings.php22
-rw-r--r--mod/colorbox/COPYING661
-rw-r--r--mod/colorbox/languages/ca.php29
-rw-r--r--mod/colorbox/languages/en.php29
-rw-r--r--mod/colorbox/languages/es.php29
-rw-r--r--mod/colorbox/manifest.xml29
-rw-r--r--mod/colorbox/start.php36
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/README.md318
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/colorbox.ai1811
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/colorbox/jquery.colorbox-min.js4
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/colorbox/jquery.colorbox.js926
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/content/ajax.html11
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/content/flash.html8
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/content/homer.jpgbin0 -> 8917 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/content/marylou.jpgbin0 -> 55125 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/content/ohoopee1.jpgbin0 -> 74827 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/content/ohoopee2.jpgbin0 -> 117411 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/content/ohoopee3.jpgbin0 -> 71514 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example1/colorbox.css86
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example1/images/border.pngbin0 -> 112 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example1/images/controls.pngbin0 -> 2893 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example1/images/ie6/borderBottomCenter.pngbin0 -> 111 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example1/images/ie6/borderBottomLeft.pngbin0 -> 215 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example1/images/ie6/borderBottomRight.pngbin0 -> 217 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example1/images/ie6/borderMiddleLeft.pngbin0 -> 108 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example1/images/ie6/borderMiddleRight.pngbin0 -> 108 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example1/images/ie6/borderTopCenter.pngbin0 -> 111 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example1/images/ie6/borderTopLeft.pngbin0 -> 216 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example1/images/ie6/borderTopRight.pngbin0 -> 214 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example1/images/loading.gifbin0 -> 9427 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example1/images/loading_background.pngbin0 -> 157 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example1/images/overlay.pngbin0 -> 182 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example1/index.html87
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example2/colorbox.css43
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example2/images/controls.pngbin0 -> 570 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example2/images/loading.gifbin0 -> 9427 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example2/index.html87
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example3/colorbox.css38
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example3/images/controls.pngbin0 -> 1633 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example3/images/loading.gifbin0 -> 9427 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example3/index.html87
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example4/colorbox.css82
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example4/images/border1.pngbin0 -> 1057 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example4/images/border2.pngbin0 -> 170 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example4/images/ie6/borderBottomCenter.pngbin0 -> 153 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example4/images/ie6/borderBottomLeft.pngbin0 -> 473 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example4/images/ie6/borderBottomRight.pngbin0 -> 470 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example4/images/ie6/borderMiddleLeft.pngbin0 -> 148 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example4/images/ie6/borderMiddleRight.pngbin0 -> 139 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example4/images/ie6/borderTopCenter.pngbin0 -> 153 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example4/images/ie6/borderTopLeft.pngbin0 -> 359 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example4/images/ie6/borderTopRight.pngbin0 -> 465 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example4/images/loading.gifbin0 -> 9427 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example4/index.html87
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example5/colorbox.css52
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example5/images/border.pngbin0 -> 163 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example5/images/controls.pngbin0 -> 2033 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example5/images/loading.gifbin0 -> 9427 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example5/images/loading_background.pngbin0 -> 166 bytes-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example5/index.html87
-rw-r--r--mod/colorbox/views/default/css/lightbox.php73
-rw-r--r--mod/colorbox/views/default/js/embed/embed.php171
-rw-r--r--mod/colorbox/views/default/js/lightbox.php81
-rw-r--r--mod/crontrigger/manifest.xml10
-rw-r--r--mod/crontrigger/start.php82
-rw-r--r--mod/custom_index/index.php68
-rw-r--r--mod/custom_index/languages/en.php14
-rw-r--r--mod/custom_index/manifest.xml15
-rw-r--r--mod/custom_index/start.php30
-rw-r--r--mod/custom_index/views/default/custom_index/css.php23
-rw-r--r--mod/custom_index/views/default/page/layouts/custom_index.php68
-rw-r--r--mod/custom_index_widgets/index.php66
-rw-r--r--mod/custom_index_widgets/languages/de.php78
-rw-r--r--mod/custom_index_widgets/languages/en.php82
-rw-r--r--mod/custom_index_widgets/languages/es.php78
-rw-r--r--mod/custom_index_widgets/languages/fr.php80
-rw-r--r--mod/custom_index_widgets/manifest.xml21
-rw-r--r--mod/custom_index_widgets/start.php159
-rw-r--r--mod/custom_index_widgets/views/default/admin/appearance/custom_index_widgets.php56
-rw-r--r--mod/custom_index_widgets/views/default/custom_index_widgets/css.php347
-rw-r--r--mod/custom_index_widgets/views/default/custom_index_widgets/footerlinks.php3
-rw-r--r--mod/custom_index_widgets/views/default/page/layouts/edit_widgets.php61
-rw-r--r--mod/custom_index_widgets/views/default/page/layouts/index.php30
-rw-r--r--mod/custom_index_widgets/views/default/page/layouts/index_1rsss.php29
-rw-r--r--mod/custom_index_widgets/views/default/page/layouts/index_2rbhh.php30
-rw-r--r--mod/custom_index_widgets/views/default/page/layouts/index_2rbms.php30
-rw-r--r--mod/custom_index_widgets/views/default/page/layouts/index_2rbsm.php28
-rw-r--r--mod/custom_index_widgets/views/default/page/layouts/index_2rhhb.php30
-rw-r--r--mod/custom_index_widgets/views/default/page/layouts/index_2rmsb.php30
-rw-r--r--mod/custom_index_widgets/views/default/page/layouts/index_2rsmb.php30
-rw-r--r--mod/custom_index_widgets/views/default/plugins/custom_index_widgets/settings.php61
-rw-r--r--mod/custom_index_widgets/views/default/widgets/cloud_generic_index/content.php59
-rw-r--r--mod/custom_index_widgets/views/default/widgets/cloud_generic_index/edit.php120
-rw-r--r--mod/custom_index_widgets/views/default/widgets/feed_reader_index/content.php8
-rw-r--r--mod/custom_index_widgets/views/default/widgets/feed_reader_index/edit.php5
-rw-r--r--mod/custom_index_widgets/views/default/widgets/inline_content_index/content.php7
-rw-r--r--mod/custom_index_widgets/views/default/widgets/inline_content_index/edit.php46
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_activity_index/content.php20
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_activity_index/edit.php64
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_album_index/content.php64
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_album_index/edit.php64
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_blogs_index/content.php43
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_blogs_index/edit.php85
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_bookmarks_index/content.php43
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_bookmarks_index/edit.php85
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_events_index/content.php95
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_events_index/edit.php96
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_files_index/content.php44
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_files_index/edit.php86
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_generic_index/content.php47
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_generic_index/edit.php103
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_groups_index/content.php21
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_groups_index/edit.php63
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_izap_videos_index/content.php50
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_izap_videos_index/edit.php86
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_members_index/content.php20
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_members_index/edit.php79
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_news_index/content.php47
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_news_index/edit.php85
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_pages_index/content.php45
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_pages_index/edit.php86
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_photos_index/content.php25
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_photos_index/edit.php64
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_tasks_index/content.php45
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_tasks_index/edit.php85
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_wire_index/content.php17
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_wire_index/edit.php62
-rw-r--r--mod/custom_index_widgets/views/default/widgets/login_index/content.php15
-rw-r--r--mod/custom_index_widgets/views/default/widgets/login_index/edit.php27
-rw-r--r--mod/custom_index_widgets/views/default/widgets/rich_media_index/content.php27
-rw-r--r--mod/custom_index_widgets/views/default/widgets/rich_media_index/edit.php78
-rw-r--r--mod/dashboard/languages/en.php14
-rw-r--r--mod/dashboard/manifest.xml15
-rw-r--r--mod/dashboard/start.php83
-rw-r--r--mod/dashboard/views/default/dashboard/blurb.php17
-rw-r--r--mod/dashboard/views/default/dashboard/css.php10
-rw-r--r--mod/dashboard/views/default/widgets/group_activity/content.php36
-rw-r--r--mod/dashboard/views/default/widgets/group_activity/edit.php45
-rw-r--r--mod/developers/actions/developers/inspect.php16
-rw-r--r--mod/developers/actions/developers/settings.php35
-rw-r--r--mod/developers/classes/ElggInspector.php201
-rw-r--r--mod/developers/classes/ElggLogCache.php44
-rw-r--r--mod/developers/languages/en.php69
-rw-r--r--mod/developers/manifest.xml19
-rw-r--r--mod/developers/start.php209
-rw-r--r--mod/developers/vendors/jsTree/jquery.jstree.js4544
-rw-r--r--mod/developers/vendors/jsTree/themes/apple/bg.jpgbin0 -> 331 bytes-rw-r--r--mod/developers/vendors/jsTree/themes/apple/d.pngbin0 -> 7765 bytes-rw-r--r--mod/developers/vendors/jsTree/themes/apple/dot_for_ie.gifbin0 -> 43 bytes-rw-r--r--mod/developers/vendors/jsTree/themes/apple/style.css61
-rw-r--r--mod/developers/vendors/jsTree/themes/apple/throbber.gifbin0 -> 1849 bytes-rw-r--r--mod/developers/vendors/jsTree/themes/classic/d.gifbin0 -> 3003 bytes-rw-r--r--mod/developers/vendors/jsTree/themes/classic/d.pngbin0 -> 7535 bytes-rw-r--r--mod/developers/vendors/jsTree/themes/classic/dot_for_ie.gifbin0 -> 43 bytes-rw-r--r--mod/developers/vendors/jsTree/themes/classic/style.css77
-rw-r--r--mod/developers/vendors/jsTree/themes/classic/throbber.gifbin0 -> 1849 bytes-rw-r--r--mod/developers/vendors/jsTree/themes/default-rtl/d.gifbin0 -> 2872 bytes-rw-r--r--mod/developers/vendors/jsTree/themes/default-rtl/d.pngbin0 -> 7459 bytes-rw-r--r--mod/developers/vendors/jsTree/themes/default-rtl/dots.gifbin0 -> 132 bytes-rw-r--r--mod/developers/vendors/jsTree/themes/default-rtl/style.css84
-rw-r--r--mod/developers/vendors/jsTree/themes/default-rtl/throbber.gifbin0 -> 1849 bytes-rw-r--r--mod/developers/vendors/jsTree/themes/default/d.gifbin0 -> 2944 bytes-rw-r--r--mod/developers/vendors/jsTree/themes/default/d.pngbin0 -> 7635 bytes-rw-r--r--mod/developers/vendors/jsTree/themes/default/style.css74
-rw-r--r--mod/developers/vendors/jsTree/themes/default/throbber.gifbin0 -> 1849 bytes-rw-r--r--mod/developers/views/default/admin/develop_tools/inspect.php14
-rw-r--r--mod/developers/views/default/admin/develop_tools/preview.php8
-rw-r--r--mod/developers/views/default/admin/develop_tools/unit_tests.php17
-rw-r--r--mod/developers/views/default/admin/developers/settings.php63
-rw-r--r--mod/developers/views/default/developers/css.php27
-rw-r--r--mod/developers/views/default/developers/ipsum.php7
-rw-r--r--mod/developers/views/default/developers/log.php18
-rw-r--r--mod/developers/views/default/developers/tree.php18
-rw-r--r--mod/developers/views/default/forms/developers/inspect.php23
-rw-r--r--mod/developers/views/default/forms/developers/settings.php36
-rw-r--r--mod/developers/views/default/js/developers/developers.php44
-rw-r--r--mod/developers/views/default/page/theme_preview.php43
-rw-r--r--mod/developers/views/default/theme_preview/buttons.php41
-rw-r--r--mod/developers/views/default/theme_preview/components.php25
-rw-r--r--mod/developers/views/default/theme_preview/components/image_block.php6
-rw-r--r--mod/developers/views/default/theme_preview/components/list.php19
-rw-r--r--mod/developers/views/default/theme_preview/components/messages.php5
-rw-r--r--mod/developers/views/default/theme_preview/components/table.php12
-rw-r--r--mod/developers/views/default/theme_preview/components/tagcloud.php17
-rw-r--r--mod/developers/views/default/theme_preview/components/tags.php5
-rw-r--r--mod/developers/views/default/theme_preview/forms.php138
-rw-r--r--mod/developers/views/default/theme_preview/general.php46
-rw-r--r--mod/developers/views/default/theme_preview/grid.php114
-rw-r--r--mod/developers/views/default/theme_preview/icons.php10
-rw-r--r--mod/developers/views/default/theme_preview/icons/avatars.php36
-rw-r--r--mod/developers/views/default/theme_preview/icons/loader.php1
-rw-r--r--mod/developers/views/default/theme_preview/icons/sprites.php61
-rw-r--r--mod/developers/views/default/theme_preview/miscellaneous.php22
-rw-r--r--mod/developers/views/default/theme_preview/miscellaneous/lightbox.php19
-rw-r--r--mod/developers/views/default/theme_preview/miscellaneous/popup.php15
-rw-r--r--mod/developers/views/default/theme_preview/miscellaneous/site_menu.php15
-rw-r--r--mod/developers/views/default/theme_preview/miscellaneous/system_messages.php35
-rw-r--r--mod/developers/views/default/theme_preview/miscellaneous/toggle.php15
-rw-r--r--mod/developers/views/default/theme_preview/miscellaneous/user_hover_menu.php16
-rw-r--r--mod/developers/views/default/theme_preview/modules.php6
-rw-r--r--mod/developers/views/default/theme_preview/modules/modules.php23
-rw-r--r--mod/developers/views/default/theme_preview/modules/widgets.php64
-rw-r--r--mod/developers/views/default/theme_preview/navigation.php23
-rw-r--r--mod/developers/views/default/theme_preview/navigation/breadcrumbs.php10
-rw-r--r--mod/developers/views/default/theme_preview/navigation/default.php11
-rw-r--r--mod/developers/views/default/theme_preview/navigation/entity.php12
-rw-r--r--mod/developers/views/default/theme_preview/navigation/extras.php18
-rw-r--r--mod/developers/views/default/theme_preview/navigation/filter.php13
-rw-r--r--mod/developers/views/default/theme_preview/navigation/footer.php10
-rw-r--r--mod/developers/views/default/theme_preview/navigation/horizontal.php12
-rw-r--r--mod/developers/views/default/theme_preview/navigation/owner_block.php13
-rw-r--r--mod/developers/views/default/theme_preview/navigation/page.php20
-rw-r--r--mod/developers/views/default/theme_preview/navigation/pagination.php8
-rw-r--r--mod/developers/views/default/theme_preview/navigation/site.php18
-rw-r--r--mod/developers/views/default/theme_preview/navigation/tabs.php10
-rw-r--r--mod/developers/views/default/theme_preview/typography.php12
-rw-r--r--mod/developers/views/default/theme_preview/typography/fonts.php7
-rw-r--r--mod/developers/views/default/theme_preview/typography/headings.php6
-rw-r--r--mod/developers/views/default/theme_preview/typography/misc.php16
-rw-r--r--mod/developers/views/default/theme_preview/typography/paragraph.php19
-rw-r--r--mod/diagnostics/actions/download.php36
-rw-r--r--mod/diagnostics/index.php29
-rw-r--r--mod/diagnostics/languages/en.php51
-rw-r--r--mod/diagnostics/manifest.xml25
-rw-r--r--mod/diagnostics/start.php324
-rw-r--r--mod/diagnostics/views/default/admin/administer_utilities/diagnostics.php17
-rw-r--r--mod/diagnostics/views/default/diagnostics/forms/download.php14
-rw-r--r--mod/dokuwiki/AUTHORS2
-rwxr-xr-xmod/dokuwiki/COPYING340
-rw-r--r--mod/dokuwiki/README31
-rw-r--r--mod/dokuwiki/index.php17
-rw-r--r--mod/dokuwiki/languages/ca.php18
-rwxr-xr-xmod/dokuwiki/languages/de.php21
-rwxr-xr-xmod/dokuwiki/languages/en.php32
-rw-r--r--mod/dokuwiki/languages/es.php18
-rw-r--r--mod/dokuwiki/languages/fr.php12
-rw-r--r--mod/dokuwiki/languages/gl.php23
-rwxr-xr-xmod/dokuwiki/languages/pl.php21
-rw-r--r--mod/dokuwiki/languages/pt.php23
-rw-r--r--mod/dokuwiki/lib/dokuwiki.php60
-rw-r--r--mod/dokuwiki/manifest.xml21
-rw-r--r--mod/dokuwiki/start.php168
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/COPYING (renamed from vendors/kses/COPYING)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/README9
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/VERSION1
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/bin/dwpage.php378
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/bin/indexer.php172
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/bin/wantedpages.php134
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/acl.auth.php24
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/acl.auth.php.dist21
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/acronyms.conf143
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/dokuwiki.php156
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/entities.conf22
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/interwiki.conf125
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/license.php40
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/local.php43
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/local.php.dist26
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/mediameta.php57
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/mime.conf52
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/msg8
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/mysql.conf.php.example253
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/scheme.conf11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/smileys.conf27
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/users.auth.php10
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/users.auth.php.dist10
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/wordblock.conf8004
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/words.aspell.dist5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/data/_dummy1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/data/attic/_dummy0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/data/cache/_dummy0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/data/index/_dummy0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/data/locks/_dummy0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/data/media/wiki/dokuwiki-128.pngbin0 -> 33615 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/data/meta/_dummy0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/data/pages/playground/playground.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/data/pages/sidebar.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/data/pages/wiki/dokuwiki.txt66
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/data/pages/wiki/syntax.txt488
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/data/tmp/_dummy0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/doku.php109
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/feed.php353
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/DifferenceEngine.php1066
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/EmailAddressValidator.php146
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/FeedParser.php76
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/HTTPClient.php573
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/IXR_Library.php817
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/JSON.php624
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/JpegMeta.php3116
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/SimplePie.php10849
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/TarLib.class.php918
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/ZipLib.class.php475
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/actions.php639
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/adLDAP.php2347
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/auth.php1099
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/auth/ad.class.php205
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/auth/basic.class.php403
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/auth/elgg.class.php352
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/auth/ldap.class.php357
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/auth/mysql.class.php942
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/auth/pgsql.class.php411
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/auth/plain.class.php324
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/blowfish.php521
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/cache.php292
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/changelog.php474
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/cliopts.php361
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/common.php1549
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/confutils.php320
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/events.php202
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/feedcreator.class.php1572
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/form.php918
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/fulltext.php722
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi.php4644
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/abap.php1409
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/actionscript-french.php957
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/actionscript.php197
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/actionscript3.php473
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/ada.php133
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/apache.php480
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/applescript.php157
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/apt_sources.php144
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/asm.php225
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/asp.php164
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/autoit.php1171
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/avisynth.php194
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/bash.php282
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/basic4gl.php341
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/bf.php114
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/blitzbasic.php185
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/bnf.php110
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/boo.php217
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/c.php188
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/c_mac.php212
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/caddcl.php126
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/cadlisp.php186
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/cfdg.php124
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/cfm.php299
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/cil.php196
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/cobol.php244
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/cpp-qt.php315
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/cpp.php226
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/csharp.php250
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/css.php212
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/d.php272
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/dcs.php185
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/delphi.php289
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/diff.php196
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/div.php126
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/dos.php198
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/dot.php164
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/eiffel.php395
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/email.php209
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/fortran.php160
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/freebasic.php141
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/genero.php463
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/gettext.php97
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/glsl.php205
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/gml.php506
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/gnuplot.php296
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/groovy.php1011
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/haskell.php198
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/hq9plus.php104
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/html4strict.php203
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/idl.php123
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/ini.php128
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/inno.php212
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/intercal.php122
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/io.php138
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/java.php983
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/java5.php1031
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/javascript.php150
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/kixtart.php329
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/klonec.php282
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/klonecpp.php310
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/latex.php218
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/lisp.php144
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/locobasic.php130
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/lolcode.php152
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/lotusformulas.php318
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/lotusscript.php191
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/lscript.php387
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/lsl2.php898
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/lua.php137
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/m68k.php143
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/make.php151
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/matlab.php227
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/mirc.php171
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/modula3.php135
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/mpasm.php164
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/mxml.php145
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/mysql.php475
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/nsis.php351
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/oberon2.php135
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/objc.php358
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/ocaml-brief.php111
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/ocaml.php174
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/oobas.php135
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/oracle11.php614
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/oracle8.php496
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/pascal.php152
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/per.php302
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/perl.php213
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/php-brief.php222
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/php.php1114
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/pic16.php141
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/pixelbender.php176
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/plsql.php256
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/povray.php199
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/powershell.php277
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/progress.php485
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/prolog.php143
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/providex.php299
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/python.php237
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/qbasic.php151
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/rails.php406
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/rebol.php196
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/reg.php233
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/robots.php98
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/ruby.php226
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/sas.php290
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/scala.php122
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/scheme.php170
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/scilab.php295
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/sdlbasic.php165
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/smalltalk.php160
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/smarty.php192
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/sql.php140
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/tcl.php194
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/teraterm.php317
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/text.php84
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/thinbasic.php868
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/tsql.php375
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/typoscript.php300
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/vb.php133
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/vbnet.php201
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/verilog.php173
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/vhdl.php144
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/vim.php185
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/visualfoxpro.php456
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/visualprolog.php129
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/whitespace.php121
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/winbatch.php369
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/xml.php157
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/xorg_conf.php124
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/xpp.php436
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/z80.php144
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/html.php1608
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/httputils.php199
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/indexer.php705
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/infoutils.php385
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/init.php598
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/io.php593
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/af/lang.php75
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/admin.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/backlinks.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/conflict.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/denied.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/diff.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/draft.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/index.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/lang.php223
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/login.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/norev.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/preview.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/pwconfirm.txt8
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/read.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/recent.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/register.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/revisions.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/stopwords.txt29
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/subscribermail.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/updateprofile.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/admin.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/backlinks.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/conflict.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/denied.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/draft.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/install.html25
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/lang.php247
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/login.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/mailtext.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/newpage.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/preview.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/pwconfirm.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/recent.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/registermail.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/stopwords.txt29
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/subscribermail.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/updateprofile.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/uploadmail.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/wordblock.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/backlinks.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/conflict.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/denied.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/draft.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/install.html11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/lang.php250
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/login.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/norev.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/pwconfirm.txt15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/register.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/resendpwd.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/stopwords.txt76
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/subscribermail.txt23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/updateprofile.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/backlinks.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/conflict.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/denied.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/draft.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/install.html8
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/lang.php247
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/login.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/mailtext.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/norev.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/pwconfirm.txt15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/stopwords.txt106
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/subscribermail.txt15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/updateprofile.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/admin.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/backlinks.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/conflict.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/denied.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/draft.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/index.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/install.html23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/lang.php247
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/login.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/norev.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/preview.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/pwconfirm.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/read.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/recent.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/register.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/revisions.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/showrev.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/stopwords.txt944
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/subscribermail.txt23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/updateprofile.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/wordblock.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/backlinks.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/conflict.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/denied.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/draft.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/index.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/install.html24
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/lang.php253
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/login.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/pwconfirm.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/revisions.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/stopwords.txt87
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/subscribermail.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/updateprofile.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/wordblock.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/backlinks.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/conflict.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/denied.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/diff.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/draft.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/edit.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/install.html27
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/lang.php249
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/locked.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/login.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/newpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/preview.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/pwconfirm.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/searchpage.txt7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/stopwords.txt125
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/subscribermail.txt23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/updateprofile.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/backlinks.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/conflict.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/denied.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/diff.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/draft.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/edit.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/install.html27
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/lang.php257
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/locked.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/login.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/newpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/preview.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/pwconfirm.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/searchpage.txt7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/stopwords.txt125
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/subscribermail.txt23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/updateprofile.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/admin.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/backlinks.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/conflict.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/denied.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/diff.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/draft.txt7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/index.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/install.html25
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/lang.php243
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/locked.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/login.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/pwconfirm.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/read.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/recent.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/register.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/resendpwd.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/revisions.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/stopwords.txt29
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/subscribermail.txt24
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/updateprofile.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/uploadmail.txt15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/adminplugins.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/backlinks.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/conflict.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/denied.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/draft.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/install.html24
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/lang.php280
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/login.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/newpage.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/pwconfirm.txt15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/resendpwd.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/stopwords.txt39
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/subscribermail.txt23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/updateprofile.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/admin.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/backlinks.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/conflict.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/denied.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/draft.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/index.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/install.html9
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/lang.php254
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/login.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/mailtext.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/newpage.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/norev.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/preview.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/pwconfirm.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/recent.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/revisions.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/stopwords.txt23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/subscribermail.txt23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/updateprofile.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/wordblock.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/admin.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/backlinks.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/conflict.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/denied.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/draft.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/install.html14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/lang.php262
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/login.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/pwconfirm.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/read.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/register.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/stopwords.txt171
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/subscribermail.txt23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/updateprofile.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/backlinks.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/conflict.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/denied.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/draft.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/editrev.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/index.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/lang.php214
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/login.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/mailtext.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/preview.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/pwconfirm.txt12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/resendpwd.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/stopwords.txt15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/subscribermail.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/updateprofile.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/admin.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/backlinks.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/conflict.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/denied.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/draft.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/install.html9
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/lang.php223
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/login.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/norev.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/preview.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/pwconfirm.txt12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/read.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/recent.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/register.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/registermail.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/revisions.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/stopwords.txt26
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/subscribermail.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/updateprofile.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/uploadmail.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/wordblock.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/admin.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/backlinks.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/conflict.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/denied.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/diff.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/draft.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/editrev.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/index.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/install.html12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/lang.php253
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/login.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/norev.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/preview.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/pwconfirm.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/read.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/recent.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/register.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/revisions.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/showrev.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/stopwords.txt445
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/subscribermail.txt21
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/updateprofile.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/wordblock.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/admin.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/backlinks.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/conflict.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/denied.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/diff.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/draft.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/index.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/install.html21
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/lang.php248
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/login.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/norev.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/preview.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/pwconfirm.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/read.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/recent.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/register.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/revisions.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/stopwords.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/subscribermail.txt23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/updateprofile.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/wordblock.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/backlinks.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/conflict.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/denied.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/index.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/lang.php173
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/login.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/revisions.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/stopwords.txt87
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/subscribermail.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/updateprofile.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/wordblock.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/backlinks.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/conflict.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/denied.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/draft.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/install.html19
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/lang.php258
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/login.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/mailtext.txt18
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/newpage.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/pwconfirm.txt15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/register.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/resendpwd.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/stopwords.txt112
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/subscribermail.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/updateprofile.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/backlinks.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/conflict.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/denied.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/draft.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/install.html25
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/lang.php243
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/login.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/newpage.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/pwconfirm.txt15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/stopwords.txt246
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/subscribermail.txt19
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/updateprofile.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/backlinks.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/conflict.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/denied.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/draft.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/install.html13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/lang.php224
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/login.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/pwconfirm.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/register.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/resendpwd.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/stopwords.txt29
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/subscribermail.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/updateprofile.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hi/lang.php126
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/admin.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/backlinks.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/conflict.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/denied.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/diff.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/index.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/lang.php200
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/login.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/mailtext.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/norev.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/preview.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/read.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/recent.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/register.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/revisions.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/searchpage.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/stopwords.txt29
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/subscribermail.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/updateprofile.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/wordblock.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/admin.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/backlinks.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/conflict.txt7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/denied.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/draft.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/install.html26
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/lang.php249
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/locked.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/login.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/mailtext.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/norev.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/pwconfirm.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/registermail.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/revisions.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/stopwords.txt39
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/subscribermail.txt18
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/updateprofile.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/uploadmail.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/wordblock.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id-ni/lang.php79
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/backlinks.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/conflict.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/denied.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/draft.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/install.html25
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/lang.php210
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/login.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/pwconfirm.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/stopwords.txt37
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/subscribermail.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/updateprofile.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/is/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/is/diff.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/is/lang.php196
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/is/login.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/is/recent.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/is/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/is/subscribermail.txt23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/backlinks.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/conflict.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/denied.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/draft.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/install.html24
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/lang.php240
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/login.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/mailtext.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/norev.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/preview.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/pwconfirm.txt15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/read.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/recent.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/revisions.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/stopwords.txt119
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/subscribermail.txt18
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/updateprofile.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/backlinks.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/conflict.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/denied.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/draft.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/edit.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/install.html14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/lang.php249
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/login.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/newpage.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/pwconfirm.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/resendpwd.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/stopwords.txt29
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/subscribermail.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/updateprofile.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/km/admin.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/km/backlinks.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/km/conflict.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/km/denied.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/km/edit.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/km/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/km/index.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/km/lang.php230
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/km/login.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/km/newpage.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/km/norev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/km/pwconfirm.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/km/recent.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/km/register.txt7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/km/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/backlinks.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/conflict.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/denied.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/diff.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/draft.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/install.html17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/lang.php229
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/login.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/norev.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/pwconfirm.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/resendpwd.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/stopwords.txt29
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/subscribermail.txt15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/updateprofile.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/uploadmail.txt15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/backlinks.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/conflict.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/denied.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/index.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/lang.php163
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/login.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/preview.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/recent.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/stopwords.txt29
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/subscribermail.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/backlinks.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/conflict.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/denied.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/lang.php207
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/login.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/mailtext.txt18
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/newpage.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/norev.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/preview.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/read.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/subscribermail.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/updateprofile.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/admin.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/backlinks.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/conflict.txt8
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/denied.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/diff.txt7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/draft.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/editrev.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/install.html12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/lang.php244
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/locked.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/login.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/mailtext.txt18
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/newpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/norev.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/preview.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/pwconfirm.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/read.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/recent.txt8
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/revisions.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/searchpage.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/stopwords.txt48
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/subscribermail.txt23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/updateprofile.txt8
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/backlinks.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/conflict.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/denied.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/lang.php135
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/locked.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/login.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/preview.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/read.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/register.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/revisions.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/searchpage.txt7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/wordblock.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/admin.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/backlinks.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/conflict.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/denied.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/diff.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/draft.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/index.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/install.html10
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/lang.php229
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/login.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/mailtext.txt15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/norev.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/preview.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/pwconfirm.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/read.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/recent.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/register.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/registermail.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/revisions.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/stopwords.txt39
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/subscribermail.txt21
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/updateprofile.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/uploadmail.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/wordblock.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/admin.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/backlinks.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/conflict.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/denied.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/diff.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/draft.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/index.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/lang.php220
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/norev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/pwconfirm.txt12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/read.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/recent.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/searchpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/subscribermail.txt19
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/updateprofile.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/uploadmail.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/admin.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/backlinks.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/conflict.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/denied.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/diff.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/draft.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/install.html14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/lang.php253
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/login.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/pwconfirm.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/recent.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/stopwords.txt37
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/subscribermail.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/updateprofile.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/admin.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/backlinks.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/conflict.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/denied.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/draft.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/install.html24
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/lang.php260
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/login.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/pwconfirm.txt15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/resendpwd.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/stopwords.txt130
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/subscribermail.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/updateprofile.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/backlinks.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/conflict.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/denied.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/draft.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/edit.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/install.html23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/lang.php248
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/login.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/mailtext.txt18
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/newpage.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/pwconfirm.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/registermail.txt15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/resendpwd.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/stopwords.txt89
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/subscribermail.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/updateprofile.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/uploadmail.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/backlinks.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/conflict.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/denied.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/diff.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/draft.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/editrev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/index.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/install.html7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/lang.php247
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/login.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/norev.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/preview.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/pwconfirm.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/read.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/recent.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/stopwords.txt55
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/subscribermail.txt24
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/updateprofile.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/admin.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/backlinks.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/conflict.txt9
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/denied.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/diff.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/draft.txt7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/edit.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/editrev.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/index.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/install.html8
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/lang.php237
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/locked.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/login.txt7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/mailtext.txt20
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/newpage.txt7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/norev.txt7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/preview.txt7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/pwconfirm.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/read.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/register.txt7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/revisions.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/searchpage.txt7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/showrev.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/stopwords.txt141
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/subscribermail.txt15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/updateprofile.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/wordblock.txt7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/admin.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/backlinks.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/conflict.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/denied.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/draft.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/install.html10
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/lang.php251
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/login.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/mailtext.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/pwconfirm.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/register.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/stopwords.txt29
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/subscribermail.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/updateprofile.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/backlinks.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/conflict.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/denied.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/draft.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/install.html7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/lang.php258
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/login.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/pwconfirm.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/register.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/revisions.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/stopwords.txt93
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/subscribermail.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/updateprofile.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/wordblock.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/admin.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/backlinks.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/conflict.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/denied.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/draft.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/editrev.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/index.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/install.html23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/lang.php227
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/login.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/norev.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/preview.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/pwconfirm.txt15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/recent.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/register.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/resendpwd.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/revisions.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/showrev.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/stopwords.txt28
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/subscribermail.txt18
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/updateprofile.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/wordblock.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/backlinks.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/conflict.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/denied.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/lang.php162
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/login.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/pwconfirm.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/backlinks.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/conflict.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/denied.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/draft.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/install.html12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/lang.php224
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/login.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/pwconfirm.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/registermail.txt15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/stopwords.txt12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/subscribermail.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/updateprofile.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/adminplugins.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/backlinks.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/conflict.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/denied.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/draft.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/install.html25
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/lang.php261
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/login.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/pwconfirm.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/resendpwd.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/stopwords.txt129
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/subscribermail.txt24
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/updateprofile.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/admin.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/backlinks.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/conflict.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/denied.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/diff.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/draft.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/index.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/lang.php249
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/login.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/norev.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/preview.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/pwconfirm.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/read.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/recent.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/register.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/revisions.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/searchpage.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/subscribermail.txt22
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/updateprofile.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/wordblock.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/admin.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/backlinks.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/conflict.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/denied.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/draft.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/install.html8
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/lang.php226
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/locked.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/login.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/mailtext.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/newpage.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/pwconfirm.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/registermail.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/stopwords.txt29
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/subscribermail.txt18
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/updateprofile.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/uploadmail.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/backlinks.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/conflict.txt8
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/denied.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/draft.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/install.html21
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/lang.php244
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/login.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/newpage.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/pwconfirm.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/recent.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/stopwords.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/subscribermail.txt22
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/updateprofile.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/admin.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/backlinks.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/conflict.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/denied.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/index.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/lang.php106
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/login.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/mailtext.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/norev.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/preview.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/read.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/recent.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/register.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/revisions.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/wordblock.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/backlinks.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/conflict.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/denied.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/draft.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/index.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/install.html8
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/lang.php252
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/login.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/mailtext.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/pwconfirm.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/read.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/registermail.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/revisions.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/stopwords.txt31
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/subscribermail.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/updateprofile.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/uploadmail.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/admin.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/backlinks.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/conflict.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/denied.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/diff.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/draft.txt7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/index.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/install.html8
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/lang.php230
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/login.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/norev.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/preview.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/pwconfirm.txt15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/register.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/registermail.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/resendpwd.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/revisions.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/stopwords.txt29
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/subscribermail.txt19
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/updateprofile.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/uploadmail.txt20
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/wordblock.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/mail.php266
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/media.php1102
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/pageutils.php537
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/parser/code.php58
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/parser/handler.php1697
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/parser/lexer.php600
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/parser/metadata.php483
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/parser/parser.php956
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/parser/renderer.php322
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/parser/xhtml.php1142
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/parser/xhtmlsummary.php90
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/parserutils.php672
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/plugin.php248
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/plugincontroller.class.php172
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/pluginutils.php47
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/search.php630
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/template.php1413
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/toolbar.php241
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/utf8.php1657
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/index.php8
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/install.php516
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/_fla/MultipleUpload.as329
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/_fla/README4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/_fla/index.html12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/_fla/multipleUpload.flabin0 -> 1812480 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/exe/ajax.php370
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/exe/css.php330
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/exe/detail.php58
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/exe/fetch.php173
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/exe/index.html12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/exe/indexer.php375
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/exe/js.php397
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/exe/mediamanager.php105
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/exe/multipleUpload.swfbin0 -> 64561 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/exe/opensearch.php38
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/exe/xmlrpc.php921
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/admin/README2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/admin/acl.pngbin0 -> 1336 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/admin/config.pngbin0 -> 1761 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/admin/plugin.pngbin0 -> 1415 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/admin/popularity.pngbin0 -> 1420 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/admin/revert.pngbin0 -> 1598 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/admin/usermanager.pngbin0 -> 1850 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/arrow_down.gifbin0 -> 273 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/arrow_up.gifbin0 -> 274 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/at.gifbin0 -> 57 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/blank.gifbin0 -> 42 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/close.pngbin0 -> 1345 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/del.pngbin0 -> 433 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/diff.pngbin0 -> 219 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/edit.gifbin0 -> 142 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/error.pngbin0 -> 706 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/bz2.pngbin0 -> 720 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/c.pngbin0 -> 774 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/conf.pngbin0 -> 717 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/cpp.pngbin0 -> 859 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/cs.pngbin0 -> 808 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/css.pngbin0 -> 843 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/deb.pngbin0 -> 716 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/doc.pngbin0 -> 659 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/file.pngbin0 -> 720 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/gif.pngbin0 -> 1001 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/gz.pngbin0 -> 716 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/htm.pngbin0 -> 748 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/html.pngbin0 -> 748 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/index.php50
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/java.pngbin0 -> 739 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/jpeg.pngbin0 -> 1001 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/jpg.pngbin0 -> 1001 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/js.pngbin0 -> 809 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/lua.pngbin0 -> 465 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odc.pngbin0 -> 749 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odf.pngbin0 -> 807 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odg.pngbin0 -> 788 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odi.pngbin0 -> 788 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odp.pngbin0 -> 744 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/ods.pngbin0 -> 749 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odt.pngbin0 -> 577 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/pdf.pngbin0 -> 663 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/php.pngbin0 -> 755 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/pl.pngbin0 -> 698 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/png.pngbin0 -> 1001 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/ppt.pngbin0 -> 762 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/ps.pngbin0 -> 534 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/py.pngbin0 -> 714 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/rar.pngbin0 -> 631 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/rb.pngbin0 -> 828 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/rpm.pngbin0 -> 638 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/rtf.pngbin0 -> 474 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/swf.pngbin0 -> 843 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/sxc.pngbin0 -> 749 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/sxd.pngbin0 -> 788 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/sxi.pngbin0 -> 744 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/sxw.pngbin0 -> 577 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/tar.pngbin0 -> 747 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/tgz.pngbin0 -> 716 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/txt.pngbin0 -> 542 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/xls.pngbin0 -> 731 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/xml.pngbin0 -> 475 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/zip.pngbin0 -> 874 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/history.pngbin0 -> 202 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/index.html12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/info.pngbin0 -> 783 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki.pngbin0 -> 1089 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/amazon.de.gifbin0 -> 882 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/amazon.gifbin0 -> 882 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/amazon.uk.gifbin0 -> 882 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/coral.gifbin0 -> 85 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/doku.gifbin0 -> 257 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/dokubug.gifbin0 -> 166 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/google.gifbin0 -> 980 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/meatball.gifbin0 -> 1100 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/phpfn.gifbin0 -> 330 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/sb.gifbin0 -> 886 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wiki.gifbin0 -> 909 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wp.gifbin0 -> 680 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpde.gifbin0 -> 680 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpes.gifbin0 -> 680 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpfr.gifbin0 -> 680 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpjp.gifbin0 -> 680 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpmeta.gifbin0 -> 680 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wppl.gifbin0 -> 680 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/larger.gifbin0 -> 87 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-nc-nd.pngbin0 -> 5281 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-nc-sa.pngbin0 -> 5460 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-nc.pngbin0 -> 5145 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-nd.pngbin0 -> 4880 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-sa.pngbin0 -> 5083 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by.pngbin0 -> 4739 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc.pngbin0 -> 958 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/gnufdl.pngbin0 -> 1748 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/publicdomain.pngbin0 -> 4962 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-nc-nd.pngbin0 -> 678 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-nc-sa.pngbin0 -> 686 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-nc.pngbin0 -> 663 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-nd.pngbin0 -> 658 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-sa.pngbin0 -> 661 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by.pngbin0 -> 629 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc.pngbin0 -> 728 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/gnufdl.pngbin0 -> 839 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/publicdomain.pngbin0 -> 621 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/list-minus.gifbin0 -> 64 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/list-plus.gifbin0 -> 67 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/loading.gifbin0 -> 1876 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/magnifier.pngbin0 -> 615 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/minus.gifbin0 -> 858 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/multiupload.pngbin0 -> 698 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/notify.pngbin0 -> 789 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/ns.pngbin0 -> 853 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/page.pngbin0 -> 635 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/pencil.pngbin0 -> 450 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/plus.gifbin0 -> 860 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smaller.gifbin0 -> 86 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/delete.gifbin0 -> 1421 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/fixme.gifbin0 -> 1435 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_arrow.gifbin0 -> 170 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_biggrin.gifbin0 -> 172 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_confused.gifbin0 -> 171 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_cool.gifbin0 -> 172 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_cry.gifbin0 -> 498 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_doubt.gifbin0 -> 990 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_doubt2.gifbin0 -> 992 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_eek.gifbin0 -> 170 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_evil.gifbin0 -> 236 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_exclaim.gifbin0 -> 236 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_frown.gifbin0 -> 171 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_fun.gifbin0 -> 590 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_idea.gifbin0 -> 176 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_kaddi.gifbin0 -> 991 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_lol.gifbin0 -> 336 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_mrgreen.gifbin0 -> 349 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_neutral.gifbin0 -> 171 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_question.gifbin0 -> 248 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_razz.gifbin0 -> 176 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_redface.gifbin0 -> 650 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_rolleyes.gifbin0 -> 485 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_sad.gifbin0 -> 171 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_silenced.gifbin0 -> 231 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_smile.gifbin0 -> 174 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_smile2.gifbin0 -> 174 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_surprised.gifbin0 -> 174 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_twisted.gifbin0 -> 238 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_wink.gifbin0 -> 170 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/success.pngbin0 -> 816 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/throbber.gifbin0 -> 875 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/bold.pngbin0 -> 433 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/chars.pngbin0 -> 619 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h.pngbin0 -> 360 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h1.pngbin0 -> 420 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h2.pngbin0 -> 442 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h3.pngbin0 -> 452 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h4.pngbin0 -> 432 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h5.pngbin0 -> 440 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/hequal.pngbin0 -> 426 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/hminus.pngbin0 -> 538 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/hplus.pngbin0 -> 520 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/hr.pngbin0 -> 329 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/image.pngbin0 -> 625 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/italic.pngbin0 -> 322 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/link.pngbin0 -> 579 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/linkextern.pngbin0 -> 962 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/mono.pngbin0 -> 385 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/ol.pngbin0 -> 403 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/sig.pngbin0 -> 569 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/smiley.pngbin0 -> 755 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/strike.pngbin0 -> 415 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/ul.pngbin0 -> 383 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/underline.pngbin0 -> 375 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/trash.pngbin0 -> 476 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/up.pngbin0 -> 376 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/wrap.gifbin0 -> 86 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/index.html12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/admin.php809
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/ajax.php62
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/af/lang.php10
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ar/lang.php24
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/bg/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/bg/lang.php36
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ca-valencia/help.txt15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ca-valencia/lang.php37
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ca/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ca/lang.php38
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/cs/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/cs/lang.php37
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/da/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/da/lang.php42
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/de-informal/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/de-informal/lang.php35
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/de/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/de/lang.php47
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/el/help.txt10
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/el/lang.php43
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/en/help.txt12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/en/lang.php46
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/eo/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/eo/lang.php40
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/es/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/es/lang.php48
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/et/lang.php23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/eu/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/eu/lang.php34
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fa/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fa/lang.php38
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fi/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fi/lang.php36
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fr/help.txt9
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fr/lang.php48
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/gl/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/gl/lang.php36
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/he/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/he/lang.php35
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/hi/lang.php6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/hr/lang.php7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/hu/help.txt12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/hu/lang.php36
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/id-ni/lang.php7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/id/lang.php21
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/is/lang.php15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/it/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/it/lang.php42
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ja/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ja/lang.php39
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ko/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ko/lang.php41
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/lt/lang.php22
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/lv/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/lv/lang.php35
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/mr/help.txt12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/mr/lang.php37
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ne/lang.php27
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/nl/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/nl/lang.php45
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/no/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/no/lang.php46
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pl/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pl/lang.php38
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pt-br/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pt-br/lang.php47
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pt/help.txt9
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pt/lang.php39
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ro/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ro/lang.php39
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ru/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ru/lang.php42
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sk/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sk/lang.php38
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sl/lang.php21
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sr/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sr/lang.php37
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sv/help.txt8
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sv/lang.php46
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/th/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/th/lang.php27
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/tr/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/tr/lang.php40
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/uk/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/uk/lang.php39
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/vi/lang.php21
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/zh-tw/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/zh-tw/lang.php40
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/zh/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/zh/lang.php39
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/pix/group.pngbin0 -> 753 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/pix/ns.pngbin0 -> 853 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/pix/page.pngbin0 -> 635 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/pix/user.pngbin0 -> 706 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/script.js163
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/style.css96
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/action.php26
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/admin.php49
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/box/print.css274
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/box/style.css272
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/box/syntax.php287
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/index.html12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/COPYING340
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/CREDITS58
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/VERSION.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/action.php169
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/admin.php453
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/ajax.php196
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/changelog207
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/conf/default.php19
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/conf/metadata.php18
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/edit-full.js152
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/edit.js1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/close.gifbin0 -> 64 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/base.gifbin0 -> 578 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/empty.gifbin0 -> 62 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/folder.gifbin0 -> 352 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/folderh.gifbin0 -> 572 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/folderhopen.gifbin0 -> 577 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/folderopen.gifbin0 -> 354 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/info.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/join.gifbin0 -> 69 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/joinbottom.gifbin0 -> 66 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/line.gifbin0 -> 66 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/minus.gifbin0 -> 86 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/minusbottom.gifbin0 -> 85 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/nolines_minus.gifbin0 -> 861 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/nolines_plus.gifbin0 -> 870 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/page.gifbin0 -> 565 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/plus.gifbin0 -> 89 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/plusbottom.gifbin0 -> 88 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/empty.gifbin0 -> 275 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/indexmenu_toolbar.pngbin0 -> 726 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/larrow.gifbin0 -> 1829 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/msort.gifbin0 -> 420 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/rarrow.gifbin0 -> 81 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/toc_bullet.gifbin0 -> 74 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/inc/pclzip.lib.php5748
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/inc/repo.class.php51
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/indexmenu-full.js640
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/indexmenu.js18
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/jsmenu/admmenu.js71
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/jsmenu/menu.js56
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/jsmenu/usrmenu.js69
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/lang/de/lang.php27
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/lang/en/lang.php28
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/lang/es/lang.php28
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/lang/it/lang.php29
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/nojsindex-full.js101
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/nojsindex.js1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/script.js152
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/style.css190
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/syntax/indexmenu.php720
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/syntax/tag.php70
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/info/syntax.php259
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/important.pngbin0 -> 2250 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/note.pngbin0 -> 2520 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tb_important.pngbin0 -> 1366 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tb_note.pngbin0 -> 1461 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tb_tip.pngbin0 -> 1441 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tb_warning.pngbin0 -> 1870 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tip.pngbin0 -> 2909 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/warning.pngbin0 -> 3249 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/info.txt8
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/script.js36
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/style.css41
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/syntax.php191
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/ChangeLog.txt255
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/README.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/ZipLib.class.php391
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/action.php41
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/conf/default.php7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/conf/metadata.php8
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/info.txt8
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/de/lang.php9
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/en/lang.php12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/es/lang.php19
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/fr/lang.php12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/it/lang.php7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/ja/lang.php12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/ru/lang.php12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/zh/lang.php12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/odt.pngbin0 -> 3320 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/renderer.php1232
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/styles.xml158
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/syntax.php96
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/admin.php202
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/af/lang.php5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ar/lang.php6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/bg/intro.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/bg/lang.php15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ca-valencia/intro.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ca-valencia/lang.php15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ca/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ca/lang.php18
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/cs/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/cs/lang.php22
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/da/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/da/lang.php19
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/de-informal/lang.php14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/de/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/de/lang.php23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/el/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/el/lang.php20
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/en/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/en/lang.php23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/eo/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/eo/lang.php22
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/es/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/es/lang.php27
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/eu/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/eu/lang.php17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fa/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fa/lang.php19
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fi/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fi/lang.php17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fr/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fr/lang.php22
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/gl/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/gl/lang.php17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/he/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/he/lang.php16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/hi/lang.php6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/hr/lang.php7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/hu/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/hu/lang.php17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/id-ni/lang.php7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/id/lang.php7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/is/lang.php10
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/it/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/it/lang.php20
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ja/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ja/lang.php17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ko/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ko/lang.php18
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/lt/lang.php7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/lv/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/lv/lang.php15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/mr/intro.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/mr/lang.php18
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ne/lang.php16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/nl/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/nl/lang.php21
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/no/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/no/lang.php26
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pl/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pl/lang.php17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pt-br/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pt-br/lang.php25
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pt/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pt/lang.php18
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ro/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ro/lang.php20
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ru/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ru/lang.php22
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sk/intro.txt0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sk/lang.php17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sl/lang.php7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sr/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sr/lang.php16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sv/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sv/lang.php28
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/th/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/th/lang.php19
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/tr/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/tr/lang.php19
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/uk/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/uk/lang.php18
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/zh-tw/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/zh-tw/lang.php19
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/zh/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/zh/lang.php20
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/README20
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/conf/default.php4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/conf/metadata.php4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/lang/en/lang.php3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/lang/ru/lang.php3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/lang/sp/lang.php3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/plugin.info.txt8
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/renderer.php338
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/screen.gifbin0 -> 1574 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/syntax.php72
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/license.txt29
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/null.mp3bin0 -> 2508 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/soundmanager2.js658
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/soundmanager2.swfbin0 -> 2198 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/audio_link.pngbin0 -> 1183 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/audio_on.pngbin0 -> 1227 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/audio_over.pngbin0 -> 1245 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/auto_link.pngbin0 -> 1076 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/auto_on.pngbin0 -> 1106 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/auto_over.pngbin0 -> 1117 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/backgrnd.pngbin0 -> 10257 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/bluebg.gifbin0 -> 2295 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/bluebottom.gifbin0 -> 3428 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/bluefooter.gifbin0 -> 591 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/delay_link.pngbin0 -> 1943 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/exit_link.pngbin0 -> 867 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/exit_over.pngbin0 -> 877 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/fade_link.pngbin0 -> 1079 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/fade_on.pngbin0 -> 1039 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/fade_over.pngbin0 -> 1093 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/footer.jpgbin0 -> 4451 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/framing.css23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/header.pngbin0 -> 27487 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/last_link.pngbin0 -> 975 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/last_over.pngbin0 -> 1001 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/list_link.pngbin0 -> 908 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/loop_link.pngbin0 -> 1622 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/loop_on.pngbin0 -> 1665 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/loop_over.pngbin0 -> 1711 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/next_link.pngbin0 -> 713 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/next_over.pngbin0 -> 734 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/notes_link.pngbin0 -> 755 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/notes_over.pngbin0 -> 789 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/opera.css7
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/outline.css15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pause_link.pngbin0 -> 732 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pause_on.pngbin0 -> 726 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pause_over.pngbin0 -> 757 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pretty.css173
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/prev_link.pngbin0 -> 757 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/prev_over.pngbin0 -> 748 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/print.css1
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/s5-core.css9
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/toggle_link.pngbin0 -> 1039 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/toggle_over.pngbin0 -> 1071 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/volume_link.pngbin0 -> 943 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/zero_link.pngbin0 -> 968 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/zero_over.pngbin0 -> 1004 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/audio_link.pngbin0 -> 1183 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/audio_on.pngbin0 -> 1227 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/audio_over.pngbin0 -> 1245 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/auto_link.pngbin0 -> 1076 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/auto_on.pngbin0 -> 1106 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/auto_over.pngbin0 -> 1117 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/backgrnd.pngbin0 -> 10257 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/blank.gifbin0 -> 49 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/bodybg.gifbin0 -> 10119 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/delay_link.pngbin0 -> 1943 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/exit_link.pngbin0 -> 867 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/exit_over.pngbin0 -> 877 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/fade_link.pngbin0 -> 1079 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/fade_on.pngbin0 -> 1039 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/fade_over.pngbin0 -> 1093 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/footer.jpgbin0 -> 4451 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/framing.css23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/header.pngbin0 -> 27487 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/iepngfix.htc42
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/last_link.pngbin0 -> 975 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/last_over.pngbin0 -> 1001 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/list_link.pngbin0 -> 908 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/loop_link.pngbin0 -> 1622 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/loop_on.pngbin0 -> 1665 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/loop_over.pngbin0 -> 1711 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/next_link.pngbin0 -> 713 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/next_over.pngbin0 -> 734 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/notes_link.pngbin0 -> 755 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/notes_over.pngbin0 -> 789 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/opera.css7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/outline.css15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pause_link.pngbin0 -> 732 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pause_on.pngbin0 -> 726 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pause_over.pngbin0 -> 757 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pretty.css156
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/prev_link.pngbin0 -> 757 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/prev_over.pngbin0 -> 748 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/print.css1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/s5-core.css9
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/toggle_link.pngbin0 -> 1039 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/toggle_over.pngbin0 -> 1071 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/volume_link.pngbin0 -> 943 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/zero_link.pngbin0 -> 968 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/zero_over.pngbin0 -> 1004 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/audio_link.pngbin0 -> 1183 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/audio_on.pngbin0 -> 1227 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/audio_over.pngbin0 -> 1245 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/auto_link.pngbin0 -> 1076 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/auto_on.pngbin0 -> 1106 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/auto_over.pngbin0 -> 1117 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/backgrnd.pngbin0 -> 10257 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/blank.gifbin0 -> 49 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/delay_link.pngbin0 -> 1943 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/exit_link.pngbin0 -> 867 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/exit_over.pngbin0 -> 877 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/fade_link.pngbin0 -> 1079 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/fade_on.pngbin0 -> 1039 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/fade_over.pngbin0 -> 1093 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/footer.jpgbin0 -> 4451 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/framing.css23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/header.pngbin0 -> 27487 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/iepngfix.htc42
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/last_link.pngbin0 -> 975 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/last_over.pngbin0 -> 1001 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/list_link.pngbin0 -> 908 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/logo.pngbin0 -> 16746 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/loop_link.pngbin0 -> 1622 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/loop_on.pngbin0 -> 1665 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/loop_over.pngbin0 -> 1711 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/next_link.pngbin0 -> 713 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/next_over.pngbin0 -> 734 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/notes_link.pngbin0 -> 755 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/notes_over.pngbin0 -> 789 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/opera.css7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/outline.css15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pause_link.pngbin0 -> 732 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pause_on.pngbin0 -> 726 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pause_over.pngbin0 -> 757 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pretty.css163
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/prev_link.pngbin0 -> 757 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/prev_over.pngbin0 -> 748 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/print.css1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/s5-core.css9
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/toggle_link.pngbin0 -> 1039 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/toggle_over.pngbin0 -> 1071 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/volume_link.pngbin0 -> 943 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/zero_link.pngbin0 -> 968 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/zero_over.pngbin0 -> 1004 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/MIT-LICENSE20
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/builder.js136
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/controls.js965
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/dragdrop.js974
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/effects.js1123
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/presentacular.js153
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/prototype.js4874
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/scriptaculous.js68
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/slider.js275
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/sound.js59
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/unittest.js568
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/LEEME.txt31
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/audio_link.pngbin0 -> 1183 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/audio_on.pngbin0 -> 1227 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/audio_over.pngbin0 -> 1245 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/auto_link.pngbin0 -> 1076 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/auto_on.pngbin0 -> 1106 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/auto_over.pngbin0 -> 1117 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/backgrnd.pngbin0 -> 10257 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/blank.gifbin0 -> 49 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/delay_link.pngbin0 -> 1943 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/exit_link.pngbin0 -> 867 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/exit_over.pngbin0 -> 877 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/fade_link.pngbin0 -> 1079 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/fade_on.pngbin0 -> 1039 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/fade_over.pngbin0 -> 1093 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/footer.jpgbin0 -> 4451 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/framing.css23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/header.pngbin0 -> 27487 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/iepngfix.htc42
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/index.html100
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/last_link.pngbin0 -> 975 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/last_over.pngbin0 -> 1001 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/list_link.pngbin0 -> 908 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/loop_link.pngbin0 -> 1622 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/loop_on.pngbin0 -> 1665 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/loop_over.pngbin0 -> 1711 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/next_link.pngbin0 -> 713 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/next_over.pngbin0 -> 734 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/notes_link.pngbin0 -> 755 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/notes_over.pngbin0 -> 789 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/opera.css7
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/outline.css15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pause_link.pngbin0 -> 732 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pause_on.pngbin0 -> 726 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pause_over.pngbin0 -> 757 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/back-handout-print.pngbin0 -> 5999 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/back-slide-print.pngbin0 -> 6487 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/back_console.pngbin0 -> 14135 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/background-foot.pngbin0 -> 451 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/background-head.pngbin0 -> 450 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/background-head.xcfbin0 -> 6114 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/background-main.pngbin0 -> 92480 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/favicon.icobin0 -> 1406 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/logo.pngbin0 -> 9760 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/table-background.pngbin0 -> 460 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/table-header.pngbin0 -> 344 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pretty.css545
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/prev_link.pngbin0 -> 757 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/prev_over.pngbin0 -> 748 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/print.css1
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/s5-core.css9
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/toggle_link.pngbin0 -> 1039 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/toggle_over.pngbin0 -> 1071 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/volume_link.pngbin0 -> 943 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/zero_link.pngbin0 -> 968 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/zero_over.pngbin0 -> 1004 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/across.pngbin0 -> 178955 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/audio_link.pngbin0 -> 1183 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/audio_on.pngbin0 -> 1227 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/audio_over.pngbin0 -> 1245 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/auto_link.pngbin0 -> 1076 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/auto_on.pngbin0 -> 1106 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/auto_over.pngbin0 -> 1117 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/blank.gifbin0 -> 49 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/bottom.pngbin0 -> 41109 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/delay_link.pngbin0 -> 1943 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/druplicon.pngbin0 -> 9215 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/exit_link.pngbin0 -> 867 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/exit_over.pngbin0 -> 877 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/fade_link.pngbin0 -> 1079 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/fade_on.pngbin0 -> 1039 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/fade_over.pngbin0 -> 1093 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/framing.css65
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/iepngfix.htc42
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/last_link.pngbin0 -> 975 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/last_over.pngbin0 -> 1001 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/list_link.pngbin0 -> 908 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/loop_link.pngbin0 -> 1622 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/loop_on.pngbin0 -> 1665 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/loop_over.pngbin0 -> 1711 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/next_link.pngbin0 -> 713 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/next_over.pngbin0 -> 734 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/notes.css122
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/notes_link.pngbin0 -> 755 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/notes_over.pngbin0 -> 789 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/opera.css7
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/outline.css15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pause_link.pngbin0 -> 732 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pause_on.pngbin0 -> 726 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pause_over.pngbin0 -> 757 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pretty.css354
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/prev_link.pngbin0 -> 757 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/prev_over.pngbin0 -> 748 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/print.css1
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/s5-core.css9
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/toggle_link.pngbin0 -> 1039 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/toggle_over.pngbin0 -> 1071 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/top.pngbin0 -> 74839 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/volume_link.pngbin0 -> 943 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/zero_link.pngbin0 -> 968 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/zero_over.pngbin0 -> 1004 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/audio_link.pngbin0 -> 1183 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/audio_on.pngbin0 -> 1227 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/audio_over.pngbin0 -> 1245 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/auto_link.pngbin0 -> 1076 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/auto_on.pngbin0 -> 1106 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/auto_over.pngbin0 -> 1117 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/backgrnd.pngbin0 -> 10257 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/blume.jpgbin0 -> 6779 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/blumerechts.jpgbin0 -> 2215 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/delay_link.pngbin0 -> 1943 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/exit_link.pngbin0 -> 867 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/exit_over.pngbin0 -> 877 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/fade_link.pngbin0 -> 1079 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/fade_on.pngbin0 -> 1039 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/fade_over.pngbin0 -> 1093 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/footer.jpgbin0 -> 4451 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/framing.css23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/header.pngbin0 -> 27487 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/last_link.pngbin0 -> 975 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/last_over.pngbin0 -> 1001 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/list_link.pngbin0 -> 908 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/loop_link.pngbin0 -> 1622 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/loop_on.pngbin0 -> 1665 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/loop_over.pngbin0 -> 1711 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/next_link.pngbin0 -> 713 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/next_over.pngbin0 -> 734 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/notes_link.pngbin0 -> 755 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/notes_over.pngbin0 -> 789 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/opera.css7
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/outline.css15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pause_link.pngbin0 -> 732 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pause_on.pngbin0 -> 726 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pause_over.pngbin0 -> 757 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pretty.css168
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/prev_link.pngbin0 -> 757 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/prev_over.pngbin0 -> 748 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/print.css1
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/s5-core.css9
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/toggle_link.pngbin0 -> 1039 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/toggle_over.pngbin0 -> 1071 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/volume_link.pngbin0 -> 943 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/zero_link.pngbin0 -> 968 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/zero_over.pngbin0 -> 1004 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/audio_link.pngbin0 -> 1183 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/audio_on.pngbin0 -> 1227 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/audio_over.pngbin0 -> 1245 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/auto_link.pngbin0 -> 1076 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/auto_on.pngbin0 -> 1106 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/auto_over.pngbin0 -> 1117 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/bg-slide.jpgbin0 -> 48642 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/delay_link.pngbin0 -> 1943 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/exit_link.pngbin0 -> 867 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/exit_over.pngbin0 -> 877 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/fade_link.pngbin0 -> 1079 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/fade_on.pngbin0 -> 1039 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/fade_over.pngbin0 -> 1093 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/framing.css23
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/iepngfix.htc42
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/last_link.pngbin0 -> 975 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/last_over.pngbin0 -> 1001 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/list_link.pngbin0 -> 908 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/loop_link.pngbin0 -> 1622 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/loop_on.pngbin0 -> 1665 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/loop_over.pngbin0 -> 1711 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/next_link.pngbin0 -> 713 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/next_over.pngbin0 -> 734 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/notes_link.pngbin0 -> 755 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/notes_over.pngbin0 -> 789 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/opera.css7
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/outline.css15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pause_link.pngbin0 -> 732 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pause_on.pngbin0 -> 726 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pause_over.pngbin0 -> 757 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pretty.css130
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/prev_link.pngbin0 -> 757 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/prev_over.pngbin0 -> 748 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/print.css1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/s5-core.css9
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/toggle_link.pngbin0 -> 1039 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/toggle_over.pngbin0 -> 1071 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/volume_link.pngbin0 -> 943 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/zero_link.pngbin0 -> 968 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/zero_over.pngbin0 -> 1004 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/LEEME.txt32
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/audio_link.pngbin0 -> 1183 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/audio_on.pngbin0 -> 1227 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/audio_over.pngbin0 -> 1245 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/auto_link.pngbin0 -> 1076 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/auto_on.pngbin0 -> 1106 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/auto_over.pngbin0 -> 1117 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/backgrnd.pngbin0 -> 10257 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/blank.gifbin0 -> 49 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/delay_link.pngbin0 -> 1943 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/exit_link.pngbin0 -> 867 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/exit_over.pngbin0 -> 877 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/fade_link.pngbin0 -> 1079 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/fade_on.pngbin0 -> 1039 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/fade_over.pngbin0 -> 1093 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/footer.jpgbin0 -> 4451 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/framing.css23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/header.pngbin0 -> 27487 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/iepngfix.htc42
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/index.html100
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/last_link.pngbin0 -> 975 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/last_over.pngbin0 -> 1001 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/list_link.pngbin0 -> 908 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/loop_link.pngbin0 -> 1622 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/loop_on.pngbin0 -> 1665 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/loop_over.pngbin0 -> 1711 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/next_link.pngbin0 -> 713 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/next_over.pngbin0 -> 734 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/notes_link.pngbin0 -> 755 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/notes_over.pngbin0 -> 789 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/opera.css7
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/outline.css15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pause_link.pngbin0 -> 732 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pause_on.pngbin0 -> 726 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pause_over.pngbin0 -> 757 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/back-handout-print.pngbin0 -> 5999 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/back-slide-print.pngbin0 -> 6487 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/back_console.pngbin0 -> 14135 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/background-foot.pngbin0 -> 501 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/background-head.pngbin0 -> 2999 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/background-main.pngbin0 -> 1824 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/background-main2.pngbin0 -> 3735 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/favicon.icobin0 -> 1406 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/logo.pngbin0 -> 16331 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/table-background.pngbin0 -> 460 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/table-header.pngbin0 -> 247 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pretty.css583
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/prev_link.pngbin0 -> 757 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/prev_over.pngbin0 -> 748 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/print.css1
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/s5-core.css9
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/toggle_link.pngbin0 -> 1039 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/toggle_over.pngbin0 -> 1071 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/volume_link.pngbin0 -> 943 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/zero_link.pngbin0 -> 968 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/zero_over.pngbin0 -> 1004 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/blank.gifbin0 -> 49 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/finish.gifbin0 -> 1364 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/fixed.js1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/help.jpgbin0 -> 30942 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/iepngfix.htc42
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/numeric.pngbin0 -> 7144 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/progress.gifbin0 -> 4237 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/00_head.txt8
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/audio_link.pngbin0 -> 1183 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/audio_on.pngbin0 -> 1227 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/audio_over.pngbin0 -> 1245 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/auto_link.pngbin0 -> 1076 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/auto_on.pngbin0 -> 1106 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/auto_over.pngbin0 -> 1117 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/backgrnd.pngbin0 -> 10257 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/bg-shade.pngbin0 -> 594 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/bg-slide.jpgbin0 -> 31239 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/delay_link.pngbin0 -> 1943 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/exit_link.pngbin0 -> 867 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/exit_over.pngbin0 -> 877 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/fade_link.pngbin0 -> 1079 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/fade_on.pngbin0 -> 1039 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/fade_over.pngbin0 -> 1093 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/footer.jpgbin0 -> 4451 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/framing.css23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/header.pngbin0 -> 27487 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/last_link.pngbin0 -> 975 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/last_over.pngbin0 -> 1001 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/list_link.pngbin0 -> 908 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/loop_link.pngbin0 -> 1622 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/loop_on.pngbin0 -> 1665 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/loop_over.pngbin0 -> 1711 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/next_link.pngbin0 -> 713 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/next_over.pngbin0 -> 734 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/notes_link.pngbin0 -> 755 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/notes_over.pngbin0 -> 789 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/opera.css7
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/outline.css15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pause_link.pngbin0 -> 732 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pause_on.pngbin0 -> 726 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pause_over.pngbin0 -> 757 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pretty.css139
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/prev_link.pngbin0 -> 757 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/prev_over.pngbin0 -> 748 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/print.css1
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/s5-core.css9
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/toggle_link.pngbin0 -> 1039 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/toggle_over.pngbin0 -> 1071 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/volume_link.pngbin0 -> 943 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/zero_link.pngbin0 -> 968 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/zero_over.pngbin0 -> 1004 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/LEEME.txt31
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/audio_link.pngbin0 -> 1183 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/audio_on.pngbin0 -> 1227 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/audio_over.pngbin0 -> 1245 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/auto_link.pngbin0 -> 1076 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/auto_on.pngbin0 -> 1106 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/auto_over.pngbin0 -> 1117 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/backgrnd.pngbin0 -> 10257 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/blank.gifbin0 -> 49 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/delay_link.pngbin0 -> 1943 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/exit_link.pngbin0 -> 867 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/exit_over.pngbin0 -> 877 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/fade_link.pngbin0 -> 1079 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/fade_on.pngbin0 -> 1039 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/fade_over.pngbin0 -> 1093 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/footer.jpgbin0 -> 4451 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/framing.css23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/header.pngbin0 -> 27487 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/iepngfix.htc42
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/index.html100
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/last_link.pngbin0 -> 975 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/last_over.pngbin0 -> 1001 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/list_link.pngbin0 -> 908 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/loop_link.pngbin0 -> 1622 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/loop_on.pngbin0 -> 1665 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/loop_over.pngbin0 -> 1711 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/next_link.pngbin0 -> 713 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/next_over.pngbin0 -> 734 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/notes_link.pngbin0 -> 755 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/notes_over.pngbin0 -> 789 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/opera.css7
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/outline.css15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pause_link.pngbin0 -> 732 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pause_on.pngbin0 -> 726 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pause_over.pngbin0 -> 757 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/back-handout-print.pngbin0 -> 5958 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/back-slide-print.pngbin0 -> 5648 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/back_console.pngbin0 -> 11708 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-foot.pngbin0 -> 397 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-head.pngbin0 -> 401 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-head.xcf.7zbin0 -> 2889 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-main.pngbin0 -> 27159 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-main2.pngbin0 -> 27171 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/favicon.icobin0 -> 1406 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/logo.pngbin0 -> 11222 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/table-background.pngbin0 -> 460 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/table-header.pngbin0 -> 654 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pretty.css584
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/prev_link.pngbin0 -> 757 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/prev_over.pngbin0 -> 748 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/print.css1
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/s5-core.css9
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/toggle_link.pngbin0 -> 1039 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/toggle_over.pngbin0 -> 1071 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/volume_link.pngbin0 -> 943 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/zero_link.pngbin0 -> 968 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/zero_over.pngbin0 -> 1004 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/audio_link.pngbin0 -> 1183 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/audio_on.pngbin0 -> 1227 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/audio_over.pngbin0 -> 1245 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/auto_link.pngbin0 -> 1076 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/auto_on.pngbin0 -> 1106 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/auto_over.pngbin0 -> 1117 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/backgrnd.pngbin0 -> 10257 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/delay_link.pngbin0 -> 1943 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/exit_link.pngbin0 -> 867 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/exit_over.pngbin0 -> 877 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/fade_link.pngbin0 -> 1079 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/fade_on.pngbin0 -> 1039 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/fade_over.pngbin0 -> 1093 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/footer.jpgbin0 -> 4451 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/framing.css23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/header.pngbin0 -> 27487 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/last_link.pngbin0 -> 975 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/last_over.pngbin0 -> 1001 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/list_link.pngbin0 -> 908 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/loop_link.pngbin0 -> 1622 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/loop_on.pngbin0 -> 1665 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/loop_over.pngbin0 -> 1711 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/next_link.pngbin0 -> 713 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/next_over.pngbin0 -> 734 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/notes_link.pngbin0 -> 755 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/notes_over.pngbin0 -> 789 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/opera.css7
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/outline.css15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pause_link.pngbin0 -> 732 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pause_on.pngbin0 -> 726 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pause_over.pngbin0 -> 757 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pixelbg.gifbin0 -> 1716 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pixelheader.jpgbin0 -> 3571 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pixelslide0bg.gifbin0 -> 3180 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pretty.css166
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/prev_link.pngbin0 -> 757 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/prev_over.pngbin0 -> 748 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/print.css1
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/s5-core.css9
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/toggle_link.pngbin0 -> 1039 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/toggle_over.pngbin0 -> 1071 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/volume_link.pngbin0 -> 943 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/zero_link.pngbin0 -> 968 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/zero_over.pngbin0 -> 1004 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/LEEME.txt31
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/audio_link.pngbin0 -> 1183 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/audio_on.pngbin0 -> 1227 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/audio_over.pngbin0 -> 1245 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/auto_link.pngbin0 -> 1076 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/auto_on.pngbin0 -> 1106 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/auto_over.pngbin0 -> 1117 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/backgrnd.pngbin0 -> 10257 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/blank.gifbin0 -> 49 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/delay_link.pngbin0 -> 1943 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/exit_link.pngbin0 -> 867 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/exit_over.pngbin0 -> 877 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/fade_link.pngbin0 -> 1079 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/fade_on.pngbin0 -> 1039 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/fade_over.pngbin0 -> 1093 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/footer.jpgbin0 -> 4451 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/framing.css23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/header.pngbin0 -> 27487 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/iepngfix.htc42
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/index.html100
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/last_link.pngbin0 -> 975 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/last_over.pngbin0 -> 1001 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/list_link.pngbin0 -> 908 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/loop_link.pngbin0 -> 1622 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/loop_on.pngbin0 -> 1665 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/loop_over.pngbin0 -> 1711 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/next_link.pngbin0 -> 713 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/next_over.pngbin0 -> 734 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/notes_link.pngbin0 -> 755 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/notes_over.pngbin0 -> 789 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/opera.css7
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/outline.css15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pause_link.pngbin0 -> 732 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pause_on.pngbin0 -> 726 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pause_over.pngbin0 -> 757 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/back-handout-print.pngbin0 -> 5999 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/back-index.pngbin0 -> 15049 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/back-slide-print.pngbin0 -> 6487 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/back_console.pngbin0 -> 14135 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/background-foot.pngbin0 -> 389 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/background-head.pngbin0 -> 373 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/background-main.pngbin0 -> 9066 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/favicon.icobin0 -> 318 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/logo.pngbin0 -> 1312 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/table-background.pngbin0 -> 460 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/table-header.pngbin0 -> 384 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pretty.css585
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/prev_link.pngbin0 -> 757 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/prev_over.pngbin0 -> 748 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/print.css1
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/s5-core.css9
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/toggle_link.pngbin0 -> 1039 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/toggle_over.pngbin0 -> 1071 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/volume_link.pngbin0 -> 943 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/zero_link.pngbin0 -> 968 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/zero_over.pngbin0 -> 1004 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/s5-notes.html157
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/audio_link.pngbin0 -> 1183 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/audio_on.pngbin0 -> 1227 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/audio_over.pngbin0 -> 1245 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/auto_link.pngbin0 -> 1076 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/auto_on.pngbin0 -> 1106 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/auto_over.pngbin0 -> 1117 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/backgrnd.jpgbin0 -> 3648 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/backgrnd.pngbin0 -> 10257 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/blank.gifbin0 -> 49 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/chalks.pngbin0 -> 30926 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/delay_link.pngbin0 -> 1943 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/exit_link.pngbin0 -> 867 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/exit_over.pngbin0 -> 877 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/fade_link.pngbin0 -> 1079 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/fade_on.pngbin0 -> 1039 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/fade_over.pngbin0 -> 1093 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/footer.jpgbin0 -> 4451 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/footer.pngbin0 -> 34238 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/framing.css22
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/header.pngbin0 -> 49918 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/iepngfix.htc42
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/index.html100
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/last_link.pngbin0 -> 975 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/last_over.pngbin0 -> 1001 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/list_link.pngbin0 -> 908 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/loop_link.pngbin0 -> 1622 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/loop_on.pngbin0 -> 1665 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/loop_over.pngbin0 -> 1711 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/next_link.pngbin0 -> 713 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/next_over.pngbin0 -> 734 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/notes_link.pngbin0 -> 755 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/notes_over.pngbin0 -> 789 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/opera.css7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/outline.css14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pause_link.pngbin0 -> 732 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pause_on.pngbin0 -> 726 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pause_over.pngbin0 -> 757 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pretty.css162
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/prev_link.pngbin0 -> 757 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/prev_over.pngbin0 -> 748 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/print.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/s5-core.css8
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/toggle_link.pngbin0 -> 1039 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/toggle_over.pngbin0 -> 1071 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/triangle.pngbin0 -> 81350 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/volume_link.pngbin0 -> 943 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/zero_link.pngbin0 -> 968 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/zero_over.pngbin0 -> 1004 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/audio_link.pngbin0 -> 1183 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/audio_on.pngbin0 -> 1227 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/audio_over.pngbin0 -> 1245 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/auto_link.pngbin0 -> 1076 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/auto_on.pngbin0 -> 1106 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/auto_over.pngbin0 -> 1117 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/backgrnd.pngbin0 -> 12943 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/bank.pngbin0 -> 41837 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/blank.gifbin0 -> 49 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/delay_link.pngbin0 -> 1943 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/exit_link.pngbin0 -> 867 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/exit_over.pngbin0 -> 877 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/fade_link.pngbin0 -> 1079 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/fade_on.pngbin0 -> 1039 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/fade_over.pngbin0 -> 1093 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/footer.jpgbin0 -> 4451 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/footer.pngbin0 -> 62136 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/framing.css22
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/header.pngbin0 -> 27487 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/iepngfix.htc42
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/index.html100
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/last_link.pngbin0 -> 975 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/last_over.pngbin0 -> 1001 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/list_link.pngbin0 -> 908 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/loop_link.pngbin0 -> 1622 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/loop_on.pngbin0 -> 1665 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/loop_over.pngbin0 -> 1711 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/next_link.pngbin0 -> 713 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/next_over.pngbin0 -> 734 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/notes_link.pngbin0 -> 755 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/notes_over.pngbin0 -> 789 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/opera.css7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/outline.css14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pattern.pngbin0 -> 226 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pause_link.pngbin0 -> 732 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pause_on.pngbin0 -> 726 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pause_over.pngbin0 -> 757 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pretty.css163
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/prev_link.pngbin0 -> 757 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/prev_over.pngbin0 -> 748 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/print.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/s5-core.css8
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/sun.pngbin0 -> 32851 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/toggle_link.pngbin0 -> 1039 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/toggle_over.pngbin0 -> 1071 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/volume_link.pngbin0 -> 943 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/zero_link.pngbin0 -> 968 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/zero_over.pngbin0 -> 1004 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/LEEME.txt31
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/audio_link.pngbin0 -> 1183 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/audio_on.pngbin0 -> 1227 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/audio_over.pngbin0 -> 1245 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/auto_link.pngbin0 -> 1076 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/auto_on.pngbin0 -> 1106 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/auto_over.pngbin0 -> 1117 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/backgrnd.pngbin0 -> 10257 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/blank.gifbin0 -> 49 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/delay_link.pngbin0 -> 1943 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/exit_link.pngbin0 -> 867 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/exit_over.pngbin0 -> 877 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/fade_link.pngbin0 -> 1079 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/fade_on.pngbin0 -> 1039 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/fade_over.pngbin0 -> 1093 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/footer.jpgbin0 -> 4451 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/framing.css23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/header.pngbin0 -> 27487 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/iepngfix.htc42
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/index.html100
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/last_link.pngbin0 -> 975 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/last_over.pngbin0 -> 1001 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/list_link.pngbin0 -> 908 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/loop_link.pngbin0 -> 1622 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/loop_on.pngbin0 -> 1665 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/loop_over.pngbin0 -> 1711 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/next_link.pngbin0 -> 713 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/next_over.pngbin0 -> 734 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/notes_link.pngbin0 -> 755 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/notes_over.pngbin0 -> 789 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/opera.css7
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/outline.css15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pause_link.pngbin0 -> 732 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pause_on.pngbin0 -> 726 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pause_over.pngbin0 -> 757 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/back-handout-print.pngbin0 -> 5999 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/back-slide-print.pngbin0 -> 6487 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/back_console.pngbin0 -> 14135 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/background-foot.pngbin0 -> 604 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/background-head.pngbin0 -> 605 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/background-main.pngbin0 -> 51209 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/favicon.icobin0 -> 1406 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/logo.pngbin0 -> 14675 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/table-background.pngbin0 -> 460 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/table-header.pngbin0 -> 309 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pretty.css583
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/prev_link.pngbin0 -> 757 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/prev_over.pngbin0 -> 748 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/print.css1
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/s5-core.css9
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/toggle_link.pngbin0 -> 1039 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/toggle_over.pngbin0 -> 1071 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/volume_link.pngbin0 -> 943 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/zero_link.pngbin0 -> 968 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/zero_over.pngbin0 -> 1004 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/LEEME.txt36
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/audio_link.pngbin0 -> 1183 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/audio_on.pngbin0 -> 1227 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/audio_over.pngbin0 -> 1245 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/auto_link.pngbin0 -> 1076 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/auto_on.pngbin0 -> 1106 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/auto_over.pngbin0 -> 1117 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/backgrnd.pngbin0 -> 10257 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/blank.gifbin0 -> 49 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/delay_link.pngbin0 -> 1943 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/exit_link.pngbin0 -> 867 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/exit_over.pngbin0 -> 877 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/fade_link.pngbin0 -> 1079 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/fade_on.pngbin0 -> 1039 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/fade_over.pngbin0 -> 1093 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/footer.jpgbin0 -> 4451 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/framing.css23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/header.pngbin0 -> 27487 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/iepngfix.htc42
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/index.html100
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/last_link.pngbin0 -> 975 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/last_over.pngbin0 -> 1001 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/list_link.pngbin0 -> 908 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/loop_link.pngbin0 -> 1622 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/loop_on.pngbin0 -> 1665 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/loop_over.pngbin0 -> 1711 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/next_link.pngbin0 -> 713 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/next_over.pngbin0 -> 734 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/notes_link.pngbin0 -> 755 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/notes_over.pngbin0 -> 789 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/opera.css7
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/outline.css15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pause_link.pngbin0 -> 732 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pause_on.pngbin0 -> 726 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pause_over.pngbin0 -> 757 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/background-foot.pngbin0 -> 1705 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/background-head.pngbin0 -> 1700 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/background-main.pngbin0 -> 358052 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/favicon.icobin0 -> 1150 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/logo.pngbin0 -> 13015 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/table-background.pngbin0 -> 460 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/table-header.pngbin0 -> 309 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pretty.css583
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/prev_link.pngbin0 -> 757 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/prev_over.pngbin0 -> 748 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/print.css1
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/s5-core.css9
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/toggle_link.pngbin0 -> 1039 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/toggle_over.pngbin0 -> 1071 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/volume_link.pngbin0 -> 943 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/zero_link.pngbin0 -> 968 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/zero_over.pngbin0 -> 1004 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/LEEME.txt31
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/audio_link.pngbin0 -> 1183 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/audio_on.pngbin0 -> 1227 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/audio_over.pngbin0 -> 1245 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/auto_link.pngbin0 -> 1076 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/auto_on.pngbin0 -> 1106 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/auto_over.pngbin0 -> 1117 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/backgrnd.pngbin0 -> 10257 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/blank.gifbin0 -> 49 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/delay_link.pngbin0 -> 1943 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/exit_link.pngbin0 -> 867 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/exit_over.pngbin0 -> 877 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/fade_link.pngbin0 -> 1079 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/fade_on.pngbin0 -> 1039 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/fade_over.pngbin0 -> 1093 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/footer.jpgbin0 -> 4451 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/framing.css23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/header.pngbin0 -> 27487 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/iepngfix.htc42
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/index.php102
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/last_link.pngbin0 -> 975 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/last_over.pngbin0 -> 1001 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/list_link.pngbin0 -> 908 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/loop_link.pngbin0 -> 1622 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/loop_on.pngbin0 -> 1665 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/loop_over.pngbin0 -> 1711 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/next_link.pngbin0 -> 713 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/next_over.pngbin0 -> 734 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/notes_link.pngbin0 -> 755 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/notes_over.pngbin0 -> 789 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/opera.css7
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/outline.css15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pause_link.pngbin0 -> 732 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pause_on.pngbin0 -> 726 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pause_over.pngbin0 -> 757 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/back-handout-print.pngbin0 -> 5999 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/back-slide-print.pngbin0 -> 6487 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/back_console.pngbin0 -> 14135 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/background-foot.pngbin0 -> 451 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/background-head.pngbin0 -> 450 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/background-head.xcfbin0 -> 6114 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/background-main.pngbin0 -> 92480 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/favicon.icobin0 -> 1406 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/logo.jpgbin0 -> 7126 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/table-background.pngbin0 -> 460 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/table-header.pngbin0 -> 344 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pretty.css525
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/prev_link.pngbin0 -> 757 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/prev_over.pngbin0 -> 748 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/print.css1
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/s5-core.css9
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/slides.js2846
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/toggle_link.pngbin0 -> 1039 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/toggle_over.pngbin0 -> 1071 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/volume_link.pngbin0 -> 943 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/zero_link.pngbin0 -> 968 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/zero_over.pngbin0 -> 1004 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/LEEME.txt32
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/audio_link.pngbin0 -> 1183 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/audio_on.pngbin0 -> 1227 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/audio_over.pngbin0 -> 1245 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/auto_link.pngbin0 -> 1076 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/auto_on.pngbin0 -> 1106 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/auto_over.pngbin0 -> 1117 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/backgrnd.pngbin0 -> 10257 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/blank.gifbin0 -> 49 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/delay_link.pngbin0 -> 1943 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/exit_link.pngbin0 -> 867 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/exit_over.pngbin0 -> 877 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/fade_link.pngbin0 -> 1079 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/fade_on.pngbin0 -> 1039 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/fade_over.pngbin0 -> 1093 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/footer.jpgbin0 -> 4451 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/framing.css23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/header.pngbin0 -> 27487 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/iepngfix.htc42
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/images/favicon.icobin0 -> 3638 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/index.html100
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/last_link.pngbin0 -> 975 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/last_over.pngbin0 -> 1001 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/list_link.pngbin0 -> 908 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/loop_link.pngbin0 -> 1622 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/loop_on.pngbin0 -> 1665 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/loop_over.pngbin0 -> 1711 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/next_link.pngbin0 -> 713 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/next_over.pngbin0 -> 734 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/notes_link.pngbin0 -> 755 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/notes_over.pngbin0 -> 789 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/opera.css7
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/outline.css15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pause_link.pngbin0 -> 732 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pause_on.pngbin0 -> 726 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pause_over.pngbin0 -> 757 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/background-foot.pngbin0 -> 269 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/background-head.pngbin0 -> 273 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/background-main.pngbin0 -> 14732 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/dot.pngbin0 -> 670 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/dot2.pngbin0 -> 422 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/h1icon.pngbin0 -> 2999 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/link.pngbin0 -> 447 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/logo.pngbin0 -> 15020 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/mail.pngbin0 -> 993 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pretty.css543
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/prev_link.pngbin0 -> 757 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/prev_over.pngbin0 -> 748 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/print.css1
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/s5-core.css9
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/toggle_link.pngbin0 -> 1039 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/toggle_over.pngbin0 -> 1071 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/volume_link.pngbin0 -> 943 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/zero_link.pngbin0 -> 968 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/zero_over.pngbin0 -> 1004 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/audio_link.pngbin0 -> 1183 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/audio_on.pngbin0 -> 1227 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/audio_over.pngbin0 -> 1245 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/auto_link.pngbin0 -> 1076 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/auto_on.pngbin0 -> 1106 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/auto_over.pngbin0 -> 1117 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/bkgr.jpgbin0 -> 9069 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/blank.gifbin0 -> 49 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/bodybg.gifbin0 -> 10119 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/buzzsaw.gifbin0 -> 5087 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/buzzsaw.pngbin0 -> 4494 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/delay_link.pngbin0 -> 1943 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/exit_link.pngbin0 -> 867 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/exit_over.pngbin0 -> 877 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/fade_link.pngbin0 -> 1079 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/fade_on.pngbin0 -> 1039 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/fade_over.pngbin0 -> 1093 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/framing.css23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/iepngfix.htc42
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/last_link.pngbin0 -> 975 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/last_over.pngbin0 -> 1001 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/list_link.pngbin0 -> 908 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/loop_link.pngbin0 -> 1622 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/loop_on.pngbin0 -> 1665 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/loop_over.pngbin0 -> 1711 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/next_link.pngbin0 -> 713 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/next_over.pngbin0 -> 734 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/notes_link.pngbin0 -> 755 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/notes_over.pngbin0 -> 789 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/opera.css7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/outline.css15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pause_link.pngbin0 -> 732 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pause_on.pngbin0 -> 726 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pause_over.pngbin0 -> 757 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pretty.css1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/prev_link.pngbin0 -> 757 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/prev_over.pngbin0 -> 748 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/print.css1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/s5-core.css9
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/toggle_link.pngbin0 -> 1039 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/toggle_over.pngbin0 -> 1071 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/volume_link.pngbin0 -> 943 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/zero_link.pngbin0 -> 968 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/zero_over.pngbin0 -> 1004 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/audio_link.pngbin0 -> 1183 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/audio_on.pngbin0 -> 1227 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/audio_over.pngbin0 -> 1245 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/auto_link.pngbin0 -> 1076 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/auto_on.pngbin0 -> 1106 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/auto_over.pngbin0 -> 1117 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/backgrnd.pngbin0 -> 10257 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/bodybg.gifbin0 -> 1373 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/button.gifbin0 -> 920 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/delay_link.pngbin0 -> 1943 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/exit_link.pngbin0 -> 867 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/exit_over.pngbin0 -> 877 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/fade_link.pngbin0 -> 1079 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/fade_on.pngbin0 -> 1039 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/fade_over.pngbin0 -> 1093 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/footer.jpgbin0 -> 4451 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/framing.css23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/head.gifbin0 -> 1373 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/header.pngbin0 -> 27487 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/last_link.pngbin0 -> 975 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/last_over.pngbin0 -> 1001 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/list_link.pngbin0 -> 908 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/loop_link.pngbin0 -> 1622 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/loop_on.pngbin0 -> 1665 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/loop_over.pngbin0 -> 1711 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/next_link.pngbin0 -> 713 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/next_over.pngbin0 -> 734 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/notes_link.pngbin0 -> 755 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/notes_over.pngbin0 -> 789 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/opera.css7
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/outline.css15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pause_link.pngbin0 -> 732 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pause_on.pngbin0 -> 726 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pause_over.pngbin0 -> 757 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pretty.css221
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/prev_link.pngbin0 -> 757 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/prev_over.pngbin0 -> 748 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/print.css1
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/s5-core.css9
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/slide0h1.gifbin0 -> 3143 bytes-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/toggle.gifbin0 -> 1128 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/toggle_link.pngbin0 -> 1039 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/toggle_over.pngbin0 -> 1071 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/volume_link.pngbin0 -> 943 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/zero_link.pngbin0 -> 968 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/zero_over.pngbin0 -> 1004 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/syntax.php281
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/tbt/script.js207
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/tbt/style.css7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/tbt/syntax.php79
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/admin.php627
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/images/search.pngbin0 -> 733 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/af/lang.php14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ar/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ar/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ar/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ar/lang.php27
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/lang.php48
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/lang.php49
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/lang.php50
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/lang.php50
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/lang.php52
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/lang.php48
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/lang.php56
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/lang.php53
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/lang.php58
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/lang.php54
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/lang.php60
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/lang.php47
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/lang.php51
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/lang.php49
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/lang.php55
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/lang.php49
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/lang.php48
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hi/lang.php6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hr/lang.php7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/add.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/delete.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/intro.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/lang.php49
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/list.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id-ni/lang.php7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/lang.php47
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/is/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/is/lang.php18
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/lang.php54
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/lang.php50
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/lang.php50
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/add.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/delete.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/intro.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/lang.php48
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/list.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/lang.php48
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/lang.php50
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/lang.php49
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/lang.php53
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/lang.php56
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/lang.php50
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/lang.php57
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/lang.php50
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/lang.php52
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/lang.php56
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/add.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/delete.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/intro.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/lang.php50
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/list.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/lang.php20
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/lang.php48
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/lang.php58
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/lang.php47
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/lang.php51
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/lang.php52
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/lang.php52
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/lang.php51
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/script.js9
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/style.css20
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/ajax.js68
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/cookie.js112
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/drag.js99
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/edit.js442
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/events.js176
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/helpers.js146
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/index.html12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/index.js116
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/linkwiz.js282
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/media.js351
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/pngbehavior.htc53
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/script.js561
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/textselection.js226
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/toolbar.js252
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/tw-sack.js136
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/styles/feed.css63
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/styles/index.html12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/styles/style.css113
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/conf/default.php8
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/conf/metadata.php9
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/design.css796
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/detail.php89
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/footer.html41
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/bullet.gifbin0 -> 50 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-cc.gifbin0 -> 1231 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-css.pngbin0 -> 299 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-donate.gifbin0 -> 187 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-dw.pngbin0 -> 427 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-php.gifbin0 -> 269 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-rss.pngbin0 -> 280 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-xhtml.pngbin0 -> 321 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/buttonshadow.pngbin0 -> 257 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/closed.gifbin0 -> 54 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/favicon.icobin0 -> 7406 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/inputshadow.pngbin0 -> 155 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/link_icon.gifbin0 -> 942 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/mail_icon.gifbin0 -> 918 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/open.gifbin0 -> 54 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/sidebar-border.gifbin0 -> 34 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/tocdot2.gifbin0 -> 810 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/windows.gifbin0 -> 223 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/layout.css79
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/main.php69
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/main_index.php135
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/media.css205
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/media.php54
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/mediaedit.php88
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/mediamanager.php44
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/mediaref.php50
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/print.css238
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/rtl.css119
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/sidebar.css189
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/sidebar.php9
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/sidebar_print.css9
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/style.ini67
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/tplfn_sidebar.php98
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/_admin.css43
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/_linkwiz.css68
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/design.css835
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/detail.php89
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/footer.html41
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/UWEB.pngbin0 -> 1138 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/UWEBshadow.pngbin0 -> 1123 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/bullet.gifbin0 -> 50 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-cc.gifbin0 -> 1231 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-css.pngbin0 -> 299 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-donate.gifbin0 -> 187 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-dw.pngbin0 -> 427 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-php.gifbin0 -> 207 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-rss.pngbin0 -> 280 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-xhtml.pngbin0 -> 321 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/buttonshadow.pngbin0 -> 257 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/closed.gifbin0 -> 54 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/favicon.icobin0 -> 7406 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/inputshadow.pngbin0 -> 155 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/link_icon.gifbin0 -> 942 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/mail_icon.gifbin0 -> 918 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/open.gifbin0 -> 54 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/tocdot2.gifbin0 -> 810 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/windows.gifbin0 -> 223 bytes-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/layout.css79
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/main.php27
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/main_index.php121
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/media.css205
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/mediamanager.php44
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/print.css238
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/rtl.css119
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/style.ini67
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/index.php68
-rw-r--r--mod/dokuwiki/views/default/dokuwiki/css.php12
-rw-r--r--mod/dokuwiki/views/default/dokuwiki/grouppage.php9
-rw-r--r--mod/dokuwiki/views/default/dokuwiki/index.php13
-rw-r--r--mod/dokuwiki/views/default/dokuwiki/metatags.php5
-rw-r--r--mod/dokuwiki/views/default/dokuwiki/sidebar.php10
-rw-r--r--mod/dokuwiki/views/default/object/dokuwiki.php19
-rw-r--r--mod/dokuwiki/views/default/river/dokuwiki.php17
-rw-r--r--mod/embed/README.txt76
-rw-r--r--mod/embed/languages/en.php21
-rw-r--r--mod/embed/manifest.xml22
-rw-r--r--mod/embed/start.php165
-rw-r--r--mod/embed/views/default/embed/addcontentjs.php7
-rw-r--r--mod/embed/views/default/embed/css.php37
-rw-r--r--mod/embed/views/default/embed/item.php39
-rw-r--r--mod/embed/views/default/embed/layout.php40
-rw-r--r--mod/embed/views/default/embed/list.php58
-rw-r--r--mod/embed/views/default/js/embed/embed.php147
-rw-r--r--mod/embed/views/default/navigation/menu/embed.php18
-rw-r--r--mod/event_calendar/CHANGES.txt154
-rw-r--r--mod/event_calendar/CONTRIBUTIONS.txt7
-rw-r--r--mod/event_calendar/README.txt89
-rw-r--r--mod/event_calendar/actions/event_calendar/add_personal.php17
-rw-r--r--mod/event_calendar/actions/event_calendar/add_to_group.php10
-rw-r--r--mod/event_calendar/actions/event_calendar/add_to_group_members.php15
-rw-r--r--mod/event_calendar/actions/event_calendar/addtocalendar.php33
-rw-r--r--mod/event_calendar/actions/event_calendar/delete.php21
-rw-r--r--mod/event_calendar/actions/event_calendar/edit.php55
-rw-r--r--mod/event_calendar/actions/event_calendar/join_conference.php20
-rw-r--r--mod/event_calendar/actions/event_calendar/killrequest.php23
-rw-r--r--mod/event_calendar/actions/event_calendar/manage_subscribers.php26
-rw-r--r--mod/event_calendar/actions/event_calendar/modify_full_calendar.php24
-rw-r--r--mod/event_calendar/actions/event_calendar/remove_from_group.php8
-rw-r--r--mod/event_calendar/actions/event_calendar/remove_from_group_members.php15
-rw-r--r--mod/event_calendar/actions/event_calendar/remove_personal.php12
-rw-r--r--mod/event_calendar/actions/event_calendar/request_personal_calendar.php16
-rw-r--r--mod/event_calendar/actions/event_calendar/toggle_personal_calendar.php40
-rw-r--r--mod/event_calendar/activate.php4
-rw-r--r--mod/event_calendar/images/calendar.gifbin0 -> 269 bytes-rw-r--r--mod/event_calendar/images/event_icon.gifbin0 -> 1254 bytes-rw-r--r--mod/event_calendar/images/event_icon_old.gifbin0 -> 1531 bytes-rw-r--r--mod/event_calendar/images/ics.pngbin0 -> 344 bytes-rw-r--r--mod/event_calendar/images/river_icon_event.gifbin0 -> 586 bytes-rw-r--r--mod/event_calendar/languages/ca.php143
-rw-r--r--mod/event_calendar/languages/en.php360
-rw-r--r--mod/event_calendar/languages/es.php215
-rw-r--r--mod/event_calendar/languages/fr.php124
-rw-r--r--mod/event_calendar/languages/ru.php365
-rw-r--r--mod/event_calendar/manifest.xml16
-rw-r--r--mod/event_calendar/models/model.php2518
-rw-r--r--mod/event_calendar/start.php414
-rw-r--r--mod/event_calendar/views/default/css/elements/forms/datepicker_multi.php39
-rw-r--r--mod/event_calendar/views/default/event_calendar/agenda_footer.php5
-rw-r--r--mod/event_calendar/views/default/event_calendar/agenda_header.php12
-rw-r--r--mod/event_calendar/views/default/event_calendar/agenda_item_view.php26
-rw-r--r--mod/event_calendar/views/default/event_calendar/agenda_view.php34
-rw-r--r--mod/event_calendar/views/default/event_calendar/calendar.php70
-rw-r--r--mod/event_calendar/views/default/event_calendar/calendar_toggle.php18
-rw-r--r--mod/event_calendar/views/default/event_calendar/conference_button.php33
-rw-r--r--mod/event_calendar/views/default/event_calendar/container.php28
-rw-r--r--mod/event_calendar/views/default/event_calendar/css.php264
-rw-r--r--mod/event_calendar/views/default/event_calendar/datetime_edit.php46
-rw-r--r--mod/event_calendar/views/default/event_calendar/entities/entity_list.php66
-rw-r--r--mod/event_calendar/views/default/event_calendar/entities/gallery.php44
-rw-r--r--mod/event_calendar/views/default/event_calendar/entities/gallery_item.php63
-rw-r--r--mod/event_calendar/views/default/event_calendar/filter_menu.php78
-rw-r--r--mod/event_calendar/views/default/event_calendar/forms/add_to_group.php74
-rw-r--r--mod/event_calendar/views/default/event_calendar/full_calendar_view.php200
-rw-r--r--mod/event_calendar/views/default/event_calendar/group_module.php37
-rw-r--r--mod/event_calendar/views/default/event_calendar/groupprofile_calendar.php33
-rw-r--r--mod/event_calendar/views/default/event_calendar/groupprofile_calendar_deprecated.php44
-rw-r--r--mod/event_calendar/views/default/event_calendar/input/date_local.php55
-rw-r--r--mod/event_calendar/views/default/event_calendar/metatags.php2
-rw-r--r--mod/event_calendar/views/default/event_calendar/nav.php38
-rw-r--r--mod/event_calendar/views/default/event_calendar/paged_footer.php4
-rw-r--r--mod/event_calendar/views/default/event_calendar/paged_header.php15
-rw-r--r--mod/event_calendar/views/default/event_calendar/paged_item_view.php27
-rw-r--r--mod/event_calendar/views/default/event_calendar/paged_view.php36
-rw-r--r--mod/event_calendar/views/default/event_calendar/personal_manage_section.php20
-rw-r--r--mod/event_calendar/views/default/event_calendar/personal_toggle_js.php20
-rw-r--r--mod/event_calendar/views/default/event_calendar/region_select.php21
-rw-r--r--mod/event_calendar/views/default/event_calendar/reminder_section.php28
-rw-r--r--mod/event_calendar/views/default/event_calendar/repeat_form_element.php32
-rw-r--r--mod/event_calendar/views/default/event_calendar/review_requests.php30
-rw-r--r--mod/event_calendar/views/default/event_calendar/schedule_section.php22
-rw-r--r--mod/event_calendar/views/default/event_calendar/share_section.php26
-rw-r--r--mod/event_calendar/views/default/event_calendar/show_events.php64
-rw-r--r--mod/event_calendar/views/default/event_calendar/strapline.php18
-rw-r--r--mod/event_calendar/views/default/forms/event_calendar/edit.php233
-rw-r--r--mod/event_calendar/views/default/forms/event_calendar/manage_subscribers.php14
-rw-r--r--mod/event_calendar/views/default/fullcalendar/css.php618
-rw-r--r--mod/event_calendar/views/default/fullcalendar/fullcalendar.print.css61
-rw-r--r--mod/event_calendar/views/default/icon/object/event_calendar/small.php3
-rw-r--r--mod/event_calendar/views/default/input/datepicker_inline.php83
-rw-r--r--mod/event_calendar/views/default/input/timepicker.php51
-rw-r--r--mod/event_calendar/views/default/input/timepicker_old.php38
-rw-r--r--mod/event_calendar/views/default/js/event_calendar/event_calendar.php171
-rw-r--r--mod/event_calendar/views/default/js/event_calendar/fullcalendar.min.js114
-rw-r--r--mod/event_calendar/views/default/js/event_calendar/fullcalendar.php5227
-rw-r--r--mod/event_calendar/views/default/js/event_calendar/gcal.js112
-rw-r--r--mod/event_calendar/views/default/object/event_calendar.php115
-rw-r--r--mod/event_calendar/views/default/plugins/event_calendar/settings.php474
-rw-r--r--mod/event_calendar/views/default/river/object/event_calendar/create.php13
-rw-r--r--mod/event_calendar/views/default/river/object/event_calendar/update.php13
-rw-r--r--mod/event_calendar/views/default/widgets/event_calendar/content.php43
-rw-r--r--mod/event_calendar/views/default/widgets/event_calendar/edit.php35
-rw-r--r--mod/event_calendar/views/ical/event_calendar/show_events.php7
-rw-r--r--mod/event_calendar/views/ical/object/event_calendar.php44
-rw-r--r--mod/event_calendar/views/ical/page/default.php17
-rw-r--r--mod/event_calendar/views/ical/page/layouts/default.php2
-rw-r--r--mod/event_calendar/views/rss/event_calendar/show_events.php24
-rw-r--r--mod/event_calendar/views/rss/object/event_calendar.php61
-rw-r--r--mod/externalpages/actions/edit.php35
-rw-r--r--mod/externalpages/languages/en.php27
-rw-r--r--mod/externalpages/manifest.xml15
-rw-r--r--mod/externalpages/start.php102
-rw-r--r--mod/externalpages/views/default/admin/appearance/expages.php10
-rw-r--r--mod/externalpages/views/default/expages/menu.php23
-rw-r--r--mod/externalpages/views/default/expages/wrapper.php16
-rw-r--r--mod/externalpages/views/default/forms/expages/edit.php58
-rw-r--r--mod/file/actions/file/delete.php33
-rw-r--r--mod/file/actions/file/download.php11
-rw-r--r--mod/file/actions/file/upload.php222
-rw-r--r--mod/file/classes/FilePluginFile.php31
-rw-r--r--mod/file/download.php12
-rw-r--r--mod/file/graphics/icons/application.gifbin0 -> 2465 bytes-rw-r--r--mod/file/graphics/icons/application_lrg.gifbin0 -> 7781 bytes-rw-r--r--mod/file/graphics/icons/archive.gifbin0 -> 2419 bytes-rw-r--r--mod/file/graphics/icons/archive_lrg.gifbin0 -> 7918 bytes-rw-r--r--mod/file/graphics/icons/excel.gifbin0 -> 2509 bytes-rw-r--r--mod/file/graphics/icons/excel_lrg.gifbin0 -> 7571 bytes-rw-r--r--mod/file/graphics/icons/general.gifbin0 -> 1528 bytes-rw-r--r--mod/file/graphics/icons/general_lrg.gifbin0 -> 4594 bytes-rw-r--r--mod/file/graphics/icons/music.gifbin0 -> 2297 bytes-rw-r--r--mod/file/graphics/icons/music_lrg.gifbin0 -> 6748 bytes-rw-r--r--mod/file/graphics/icons/openoffice.gifbin0 -> 2313 bytes-rw-r--r--mod/file/graphics/icons/openoffice_lrg.gifbin0 -> 6617 bytes-rw-r--r--mod/file/graphics/icons/pages.gifbin0 -> 2766 bytes-rw-r--r--mod/file/graphics/icons/pages_lrg.gifbin0 -> 10234 bytes-rw-r--r--mod/file/graphics/icons/pdf.gifbin0 -> 2197 bytes-rw-r--r--mod/file/graphics/icons/pdf_lrg.gifbin0 -> 6014 bytes-rw-r--r--mod/file/graphics/icons/ppt.gifbin0 -> 2495 bytes-rw-r--r--mod/file/graphics/icons/ppt_lrg.gifbin0 -> 7423 bytes-rw-r--r--mod/file/graphics/icons/text.gifbin0 -> 2881 bytes-rw-r--r--mod/file/graphics/icons/text_lrg.gifbin0 -> 9855 bytes-rw-r--r--mod/file/graphics/icons/vcard.gifbin0 -> 2385 bytes-rw-r--r--mod/file/graphics/icons/vcard_lrg.gifbin0 -> 6798 bytes-rw-r--r--mod/file/graphics/icons/video.gifbin0 -> 2603 bytes-rw-r--r--mod/file/graphics/icons/video_lrg.gifbin0 -> 7319 bytes-rw-r--r--mod/file/graphics/icons/word.gifbin0 -> 2479 bytes-rw-r--r--mod/file/graphics/icons/word_lrg.gifbin0 -> 7350 bytes-rw-r--r--mod/file/languages/en.php118
-rw-r--r--mod/file/lib/file.php45
-rw-r--r--mod/file/manifest.xml18
-rw-r--r--mod/file/pages/file/download.php38
-rw-r--r--mod/file/pages/file/edit.php40
-rw-r--r--mod/file/pages/file/friends.php36
-rw-r--r--mod/file/pages/file/owner.php57
-rw-r--r--mod/file/pages/file/search.php99
-rw-r--r--mod/file/pages/file/upload.php37
-rw-r--r--mod/file/pages/file/view.php46
-rw-r--r--mod/file/pages/file/world.php33
-rw-r--r--mod/file/start.php416
-rw-r--r--mod/file/thumbnail.php57
-rw-r--r--mod/file/views/default/embed/file_upload/content.php17
-rw-r--r--mod/file/views/default/file/css.php15
-rw-r--r--mod/file/views/default/file/group_module.php45
-rw-r--r--mod/file/views/default/file/sidebar.php14
-rw-r--r--mod/file/views/default/file/specialcontent/image/default.php20
-rw-r--r--mod/file/views/default/file/typecloud.php50
-rw-r--r--mod/file/views/default/forms/file/upload.php68
-rw-r--r--mod/file/views/default/icon/object/file.php54
-rw-r--r--mod/file/views/default/object/file.php107
-rw-r--r--mod/file/views/default/river/object/file/create.php13
-rw-r--r--mod/file/views/default/widgets/filerepo/content.php33
-rw-r--r--mod/file/views/default/widgets/filerepo/edit.php25
-rw-r--r--mod/file/views/rss/file/enclosure.php16
-rw-r--r--mod/friendrequest/actions/friendrequest/decline.php12
-rw-r--r--mod/friendrequest/actions/friends/add.php53
-rw-r--r--mod/friendrequest/actions/friends/remove.php36
-rw-r--r--mod/friendrequest/languages/ca.php20
-rw-r--r--mod/friendrequest/languages/en.php31
-rw-r--r--mod/friendrequest/languages/es.php22
-rw-r--r--mod/friendrequest/languages/gl.php31
-rw-r--r--mod/friendrequest/languages/pt.php31
-rw-r--r--mod/friendrequest/languages/sr.php31
-rw-r--r--mod/friendrequest/manifest.xml16
-rw-r--r--mod/friendrequest/start.php151
-rw-r--r--mod/friendrequest/views/default/friendrequest/requests.php47
-rw-r--r--mod/garbagecollector/languages/en.php57
-rw-r--r--mod/garbagecollector/manifest.xml25
-rw-r--r--mod/garbagecollector/start.php122
-rw-r--r--mod/garbagecollector/views/default/plugins/garbagecollector/settings.php28
-rw-r--r--mod/garbagecollector/views/default/settings/garbagecollector/edit.php20
-rw-r--r--mod/groups/actions/addtogroup.php102
-rw-r--r--mod/groups/actions/delete.php18
-rw-r--r--mod/groups/actions/discussion/delete.php29
-rw-r--r--mod/groups/actions/discussion/reply/delete.php26
-rw-r--r--mod/groups/actions/discussion/reply/save.php58
-rw-r--r--mod/groups/actions/discussion/save.php75
-rw-r--r--mod/groups/actions/edit.php127
-rw-r--r--mod/groups/actions/featured.php44
-rw-r--r--mod/groups/actions/forums/addpost.php56
-rw-r--r--mod/groups/actions/forums/addtopic.php78
-rw-r--r--mod/groups/actions/forums/deletepost.php44
-rw-r--r--mod/groups/actions/forums/deletetopic.php45
-rw-r--r--mod/groups/actions/forums/edittopic.php87
-rw-r--r--mod/groups/actions/groups/delete.php42
-rw-r--r--mod/groups/actions/groups/edit.php235
-rw-r--r--mod/groups/actions/groups/featured.php27
-rw-r--r--mod/groups/actions/groups/membership/add.php42
-rw-r--r--mod/groups/actions/groups/membership/delete_invite.php24
-rw-r--r--mod/groups/actions/groups/membership/delete_request.php20
-rw-r--r--mod/groups/actions/groups/membership/invite.php56
-rw-r--r--mod/groups/actions/groups/membership/join.php72
-rw-r--r--mod/groups/actions/groups/membership/leave.php36
-rw-r--r--mod/groups/actions/groups/membership/remove.php31
-rw-r--r--mod/groups/actions/join.php58
-rw-r--r--mod/groups/actions/joinrequest.php91
-rw-r--r--mod/groups/actions/leave.php43
-rw-r--r--mod/groups/addtopic.php29
-rw-r--r--mod/groups/all.php72
-rw-r--r--mod/groups/discussions.php30
-rw-r--r--mod/groups/edit.php33
-rw-r--r--mod/groups/edittopic.php36
-rw-r--r--mod/groups/forum.php31
-rw-r--r--mod/groups/graphics/defaultlarge.gifbin12871 -> 4939 bytes-rw-r--r--mod/groups/graphics/defaultmedium.gifbin4976 -> 2336 bytes-rw-r--r--mod/groups/graphics/defaultsmall.gifbin1836 -> 1127 bytes-rw-r--r--mod/groups/graphics/defaulttiny.gifbin1307 -> 782 bytes-rw-r--r--mod/groups/graphics/icon.php45
-rw-r--r--mod/groups/groupprofile.php60
-rw-r--r--mod/groups/icon.php54
-rw-r--r--mod/groups/index.php31
-rw-r--r--mod/groups/invite.php34
-rw-r--r--mod/groups/languages/en.php501
-rw-r--r--mod/groups/lib/discussion.php235
-rw-r--r--mod/groups/lib/groups.php590
-rw-r--r--mod/groups/manifest.xml26
-rw-r--r--mod/groups/membership.php37
-rw-r--r--mod/groups/new.php22
-rw-r--r--mod/groups/start.php1559
-rw-r--r--mod/groups/topicposts.php50
-rw-r--r--mod/groups/upgrades/2011030101.php65
-rw-r--r--mod/groups/views/default/annotation/group_topic_post.php19
-rw-r--r--mod/groups/views/default/discussion/closed.php6
-rw-r--r--mod/groups/views/default/discussion/group_module.php48
-rw-r--r--mod/groups/views/default/discussion/replies.php28
-rw-r--r--mod/groups/views/default/forms/discussion/reply/save.php57
-rw-r--r--mod/groups/views/default/forms/discussion/save.php57
-rw-r--r--mod/groups/views/default/forms/forums/addpost.php36
-rw-r--r--mod/groups/views/default/forms/forums/addtopic.php96
-rw-r--r--mod/groups/views/default/forms/forums/edittopic.php107
-rw-r--r--mod/groups/views/default/forms/groups/edit.php310
-rw-r--r--mod/groups/views/default/forms/groups/find.php16
-rw-r--r--mod/groups/views/default/forms/groups/invite.php48
-rw-r--r--mod/groups/views/default/forms/groups/search.php20
-rw-r--r--mod/groups/views/default/forum/topicposts.php69
-rw-r--r--mod/groups/views/default/forum/topics.php132
-rw-r--r--mod/groups/views/default/forum/viewposts.php58
-rw-r--r--mod/groups/views/default/group/default.php37
-rw-r--r--mod/groups/views/default/group/group.php21
-rw-r--r--mod/groups/views/default/groups/closedmembership.php15
-rw-r--r--mod/groups/views/default/groups/css.php410
-rw-r--r--mod/groups/views/default/groups/edit.php15
-rw-r--r--mod/groups/views/default/groups/featured.php29
-rw-r--r--mod/groups/views/default/groups/find.php14
-rw-r--r--mod/groups/views/default/groups/forum_latest.php37
-rw-r--r--mod/groups/views/default/groups/group_sort_menu.php64
-rw-r--r--mod/groups/views/default/groups/groupgallery.php25
-rw-r--r--mod/groups/views/default/groups/grouplisting.php49
-rw-r--r--mod/groups/views/default/groups/groupprofile.php93
-rw-r--r--mod/groups/views/default/groups/icon.php48
-rw-r--r--mod/groups/views/default/groups/invitationrequests.php51
-rw-r--r--mod/groups/views/default/groups/js.php13
-rw-r--r--mod/groups/views/default/groups/members.php30
-rw-r--r--mod/groups/views/default/groups/membershiprequests.php47
-rw-r--r--mod/groups/views/default/groups/profile/activity_module.php44
-rw-r--r--mod/groups/views/default/groups/profile/closed_membership.php16
-rw-r--r--mod/groups/views/default/groups/profile/fields.php38
-rw-r--r--mod/groups/views/default/groups/profile/layout.php13
-rw-r--r--mod/groups/views/default/groups/profile/module.php25
-rw-r--r--mod/groups/views/default/groups/profile/summary.php64
-rw-r--r--mod/groups/views/default/groups/profile/widgets.php24
-rw-r--r--mod/groups/views/default/groups/profileitems.php28
-rw-r--r--mod/groups/views/default/groups/side_menu.php8
-rw-r--r--mod/groups/views/default/groups/sidebar/featured.php25
-rw-r--r--mod/groups/views/default/groups/sidebar/find.php14
-rw-r--r--mod/groups/views/default/groups/sidebar/members.php32
-rw-r--r--mod/groups/views/default/groups/sidebar/my_status.php62
-rw-r--r--mod/groups/views/default/groups/sidebar/search.php15
-rw-r--r--mod/groups/views/default/icon/group/default/large.php3
-rw-r--r--mod/groups/views/default/icon/group/default/medium.php3
-rw-r--r--mod/groups/views/default/icon/group/default/small.php3
-rw-r--r--mod/groups/views/default/icon/group/default/tiny.php3
-rw-r--r--mod/groups/views/default/object/groupforumtopic.php149
-rw-r--r--mod/groups/views/default/plugins/groups/settings.php40
-rw-r--r--mod/groups/views/default/river/annotation/group_topic_post/reply.php12
-rw-r--r--mod/groups/views/default/river/group/create.php13
-rw-r--r--mod/groups/views/default/river/object/group/create.php13
-rw-r--r--mod/groups/views/default/river/object/groupforumtopic/annotate.php14
-rw-r--r--mod/groups/views/default/river/object/groupforumtopic/create.php36
-rw-r--r--mod/groups/views/default/river/object/groupforumtopic/update.php13
-rw-r--r--mod/groups/views/default/river/relationship/member/create.php48
-rw-r--r--mod/groups/views/default/sharing/invite.php41
-rw-r--r--mod/groups/views/default/widgets/a_users_groups/content.php33
-rw-r--r--mod/groups/views/default/widgets/a_users_groups/edit.php39
-rw-r--r--mod/groups/views/default/widgets/a_users_groups/view.php20
-rw-r--r--mod/groups/views/default/widgets/group_entities_widget/edit.php23
-rw-r--r--mod/groups/views/default/widgets/group_entities_widget/view.php35
-rw-r--r--mod/groups/views/default/widgets/group_members_widget/edit.php23
-rw-r--r--mod/groups/views/default/widgets/group_members_widget/view.php35
-rw-r--r--mod/groups/views/rss/annotation/group_topic_post.php32
-rw-r--r--mod/groups/views/rss/discussion/replies.php12
-rw-r--r--mod/groups/views/rss/forum/topics.php21
-rw-r--r--mod/groups/views/rss/forum/viewposts.php16
-rw-r--r--mod/groups/views/rss/groups/profile/layout.php18
-rw-r--r--mod/groups/views/rss/groups/profileitems.php20
-rw-r--r--mod/groups/views/rss/object/groupforumtopic.php35
-rw-r--r--mod/guidtool/actions/delete.php21
-rw-r--r--mod/guidtool/export.php22
-rw-r--r--mod/guidtool/format_picker.php25
-rw-r--r--mod/guidtool/import.php24
-rw-r--r--mod/guidtool/index.php45
-rw-r--r--mod/guidtool/languages/en.php32
-rw-r--r--mod/guidtool/manifest.xml10
-rw-r--r--mod/guidtool/start.php125
-rw-r--r--mod/guidtool/view.php22
-rw-r--r--mod/guidtool/views/default/forms/guidtool/export.php23
-rw-r--r--mod/guidtool/views/default/forms/guidtool/format.php40
-rw-r--r--mod/guidtool/views/default/forms/guidtool/import.php26
-rw-r--r--mod/guidtool/views/default/guidtool/gallery.php29
-rw-r--r--mod/guidtool/views/default/guidtool/listing.php39
-rw-r--r--mod/guidtool/views/default/guidtool/profile.php16
-rw-r--r--mod/guidtool/views/default/object/guidtoolwrapper.php21
-rw-r--r--mod/habitorio_theme/graphics/button.pngbin0 -> 1092 bytes-rw-r--r--mod/habitorio_theme/graphics/elgg_sprites.pngbin0 -> 19372 bytes-rw-r--r--mod/habitorio_theme/graphics/login.pngbin0 -> 537 bytes-rw-r--r--mod/habitorio_theme/graphics/logo.pngbin0 -> 3067 bytes-rw-r--r--mod/habitorio_theme/graphics/menu.gifbin0 -> 3008 bytes-rw-r--r--mod/habitorio_theme/graphics/menu.pngbin0 -> 2682 bytes-rw-r--r--mod/habitorio_theme/graphics/people.pngbin0 -> 143134 bytes-rw-r--r--mod/habitorio_theme/graphics/preset1.pngbin0 -> 131 bytes-rw-r--r--mod/habitorio_theme/graphics/preset2.pngbin0 -> 131 bytes-rw-r--r--mod/habitorio_theme/graphics/preset3.pngbin0 -> 131 bytes-rw-r--r--mod/habitorio_theme/graphics/preset4.pngbin0 -> 125 bytes-rw-r--r--mod/habitorio_theme/graphics/preset5.pngbin0 -> 131 bytes-rw-r--r--mod/habitorio_theme/graphics/preset6.pngbin0 -> 131 bytes-rw-r--r--mod/habitorio_theme/graphics/preset7.pngbin0 -> 125 bytes-rw-r--r--mod/habitorio_theme/graphics/purity_01.pngbin0 -> 5204 bytes-rw-r--r--mod/habitorio_theme/graphics/purity_02.pngbin0 -> 550 bytes-rw-r--r--mod/habitorio_theme/graphics/purity_03.pngbin0 -> 2480 bytes-rw-r--r--mod/habitorio_theme/graphics/search.gifbin0 -> 819 bytes-rw-r--r--mod/habitorio_theme/graphics/search.pngbin0 -> 1589 bytes-rw-r--r--mod/habitorio_theme/graphics/sidebar_background.gifbin0 -> 1355 bytes-rw-r--r--mod/habitorio_theme/graphics/spacer.gifbin0 -> 175 bytes-rw-r--r--mod/habitorio_theme/graphics/topbar.gifbin0 -> 2756 bytes-rw-r--r--mod/habitorio_theme/manifest.xml18
-rw-r--r--mod/habitorio_theme/start.php84
-rw-r--r--mod/habitorio_theme/views/default/css/admin.php1443
-rw-r--r--mod/habitorio_theme/views/default/css/elements/OOCSS_LICENSE30
-rw-r--r--mod/habitorio_theme/views/default/css/elements/buttons.php132
-rw-r--r--mod/habitorio_theme/views/default/css/elements/components.php286
-rw-r--r--mod/habitorio_theme/views/default/css/elements/core.php117
-rw-r--r--mod/habitorio_theme/views/default/css/elements/forms.php298
-rw-r--r--mod/habitorio_theme/views/default/css/elements/grid.php54
-rw-r--r--mod/habitorio_theme/views/default/css/elements/helpers.php160
-rw-r--r--mod/habitorio_theme/views/default/css/elements/icons.php348
-rw-r--r--mod/habitorio_theme/views/default/css/elements/layout.php142
-rw-r--r--mod/habitorio_theme/views/default/css/elements/misc.php62
-rw-r--r--mod/habitorio_theme/views/default/css/elements/modules.php194
-rw-r--r--mod/habitorio_theme/views/default/css/elements/navigation.php559
-rw-r--r--mod/habitorio_theme/views/default/css/elements/reset.php79
-rw-r--r--mod/habitorio_theme/views/default/css/elements/typography.php155
-rw-r--r--mod/habitorio_theme/views/default/css/elgg.php68
-rw-r--r--mod/habitorio_theme/views/default/css/ie.php8
-rw-r--r--mod/habitorio_theme/views/default/css/ie6.php12
-rw-r--r--mod/habitorio_theme/views/default/css/ie7.php65
-rw-r--r--mod/habitorio_theme/views/default/css/lightbox.php371
-rw-r--r--mod/habitorio_theme/views/default/css/walled_garden.php81
-rw-r--r--mod/habitorio_theme/views/default/custom_index/css.php17
-rw-r--r--mod/habitorio_theme/views/default/habitorio_theme/css.php178
-rw-r--r--mod/habitorio_theme/views/default/habitorio_theme/leftside.php5
-rw-r--r--mod/habitorio_theme/views/default/habitorio_theme/rightside.php5
-rw-r--r--mod/habitorio_theme/views/default/page/default.php58
-rw-r--r--mod/habitorio_theme/views/default/page/elements/footer.php12
-rw-r--r--mod/habitorio_theme/views/default/page/elements/header.php22
-rw-r--r--mod/habitorio_theme/views/default/page/elements/header_logo.php21
-rw-r--r--mod/habitorio_theme/views/default/page/elements/messages.php27
-rw-r--r--mod/habitorio_theme/views/default/page/elements/topbar.php25
-rw-r--r--mod/habitorio_theme/views/default/page/layouts/custom_index.php48
-rw-r--r--mod/habitorio_theme/views/default/plugins/purity_theme/settings.php24
-rw-r--r--mod/html5/.gitignore3
-rw-r--r--mod/html5/README7
-rw-r--r--mod/html5/manifest.xml15
-rw-r--r--mod/html5/start.php11
-rw-r--r--mod/html5/vendors/Modernizr-1.5.min.js28
-rw-r--r--mod/html5/vendors/jquery/jquery.placeholder-1.0.1.js58
-rw-r--r--mod/html5/views/default/html/img.php11
-rw-r--r--mod/html5/views/default/html5/css.php2
-rw-r--r--mod/html5/views/default/html5/theme_preview/forms/inputs.php101
-rw-r--r--mod/html5/views/default/input/color.php12
-rw-r--r--mod/html5/views/default/input/datetime-local.php14
-rw-r--r--mod/html5/views/default/input/datetime.php15
-rw-r--r--mod/html5/views/default/input/image.php11
-rw-r--r--mod/html5/views/default/input/month.php16
-rw-r--r--mod/html5/views/default/input/number.php11
-rw-r--r--mod/html5/views/default/input/option.php13
-rw-r--r--mod/html5/views/default/input/range.php13
-rw-r--r--mod/html5/views/default/input/search.php13
-rw-r--r--mod/html5/views/default/input/tel.php12
-rw-r--r--mod/html5/views/default/input/time.php13
-rw-r--r--mod/html5/views/default/input/week.php13
-rw-r--r--mod/html5/views/default/output/friendlytime.php14
-rw-r--r--mod/html5/views/default/page/admin.php68
-rw-r--r--mod/html5/views/default/page/default.php78
-rw-r--r--mod/html5/views/default/page/elements/footer.php23
-rw-r--r--mod/html5/views/default/page/elements/head.php78
-rw-r--r--mod/html5/views/default/page/layouts/admin.php42
-rw-r--r--mod/html5/views/default/page/layouts/one_sidebar.php50
-rw-r--r--mod/html5/views/default/page/layouts/two_sidebar.php45
-rw-r--r--mod/html5/views/default/page/walled_garden.php42
-rw-r--r--mod/html5/views/default/search/search_box.php43
-rw-r--r--mod/htmlawed/manifest.xml17
-rw-r--r--mod/htmlawed/start.php163
-rw-r--r--mod/htmlawed/tests/tags.php47
-rwxr-xr-xmod/htmlawed/vendors/htmLawed/htmLawed.php723
-rwxr-xr-xmod/htmlawed/vendors/htmLawed/htmLawedTest.php650
-rwxr-xr-xmod/htmlawed/vendors/htmLawed/htmLawed_README.htm2178
-rwxr-xr-xmod/htmlawed/vendors/htmLawed/htmLawed_README.txt1734
-rwxr-xr-xmod/htmlawed/vendors/htmLawed/htmLawed_TESTCASE.txt450
-rw-r--r--mod/identica/graphics/identica.pngbin0 -> 488 bytes-rw-r--r--mod/identica/graphics/thewire_speech_bubble.gifbin0 -> 560 bytes-rw-r--r--mod/identica/languages/ca.php10
-rw-r--r--mod/identica/languages/en.php16
-rw-r--r--mod/identica/languages/es.php12
-rw-r--r--mod/identica/manifest.xml17
-rw-r--r--mod/identica/start.php16
-rw-r--r--mod/identica/views/default/identica/css.php63
-rw-r--r--mod/identica/views/default/identica/js.php40
-rw-r--r--mod/identica/views/default/js/friendly_time.php50
-rw-r--r--mod/identica/views/default/widgets/identica/content.php30
-rw-r--r--mod/identica/views/default/widgets/identica/edit.php16
-rw-r--r--mod/invitefriends/actions/invite.php88
-rw-r--r--mod/invitefriends/languages/en.php43
-rw-r--r--mod/invitefriends/manifest.xml17
-rw-r--r--mod/invitefriends/start.php50
-rw-r--r--mod/invitefriends/views/default/forms/invitefriends/invite.php35
-rw-r--r--mod/invitefriends/views/default/invitefriends/form.php8
-rw-r--r--mod/invitefriends/views/default/invitefriends/formitems.php4
-rw-r--r--mod/languages/README.txt9
-rw-r--r--mod/languages/languages/ca/ca.blog.php54
-rw-r--r--mod/languages/languages/ca/ca.bookmarks.php51
-rw-r--r--mod/languages/languages/ca/ca.categories.php12
-rw-r--r--mod/languages/languages/ca/ca.core.php994
-rw-r--r--mod/languages/languages/ca/ca.custom_index.php11
-rw-r--r--mod/languages/languages/ca/ca.dashboard.php11
-rw-r--r--mod/languages/languages/ca/ca.developers.php47
-rw-r--r--mod/languages/languages/ca/ca.diagnostics.php30
-rw-r--r--mod/languages/languages/ca/ca.embed.php14
-rw-r--r--mod/languages/languages/ca/ca.externalpages.php15
-rw-r--r--mod/languages/languages/ca/ca.file.php74
-rw-r--r--mod/languages/languages/ca/ca.garbagecollector.php17
-rw-r--r--mod/languages/languages/ca/ca.groups.php219
-rw-r--r--mod/languages/languages/ca/ca.invitefriends.php26
-rw-r--r--mod/languages/languages/ca/ca.likes.php34
-rw-r--r--mod/languages/languages/ca/ca.logbrowser20
-rw-r--r--mod/languages/languages/ca/ca.logrotate.php20
-rw-r--r--mod/languages/languages/ca/ca.members.php13
-rw-r--r--mod/languages/languages/ca/ca.messageboard.php43
-rw-r--r--mod/languages/languages/ca/ca.messages.php64
-rw-r--r--mod/languages/languages/ca/ca.notifications.php16
-rw-r--r--mod/languages/languages/ca/ca.pages.php62
-rw-r--r--mod/languages/languages/ca/ca.profile.php8
-rw-r--r--mod/languages/languages/ca/ca.relatedgroups.php11
-rw-r--r--mod/languages/languages/ca/ca.reportedcontent.php34
-rw-r--r--mod/languages/languages/ca/ca.search.php18
-rw-r--r--mod/languages/languages/ca/ca.subgroups.php22
-rw-r--r--mod/languages/languages/ca/ca.tagcloud.php7
-rw-r--r--mod/languages/languages/ca/ca.thewire.php34
-rw-r--r--mod/languages/languages/ca/ca.tinymce.php8
-rw-r--r--mod/languages/languages/ca/ca.twitter.php10
-rw-r--r--mod/languages/languages/ca/ca.uservalidationbyemail.php48
-rw-r--r--mod/languages/languages/da/da.blog.php70
-rw-r--r--mod/languages/languages/da/da.bookmarks.php82
-rw-r--r--mod/languages/languages/da/da.categories.php15
-rw-r--r--mod/languages/languages/da/da.custom_index.php14
-rw-r--r--mod/languages/languages/da/da.developers.php60
-rw-r--r--mod/languages/languages/da/da.diagnostics.php70
-rw-r--r--mod/languages/languages/da/da.embed.php21
-rw-r--r--mod/languages/languages/da/da.event_manager.php302
-rw-r--r--mod/languages/languages/da/da.externalpages.php30
-rw-r--r--mod/languages/languages/da/da.file.php106
-rw-r--r--mod/languages/languages/da/da.garbagecollector.php26
-rw-r--r--mod/languages/languages/da/da.groups.php265
-rw-r--r--mod/languages/languages/da/da.image_captcha.php31
-rw-r--r--mod/languages/languages/da/da.invitefriends.php42
-rw-r--r--mod/languages/languages/da/da.likes.php25
-rw-r--r--mod/languages/languages/da/da.logbrowser.php27
-rw-r--r--mod/languages/languages/da/da.logrotate.php29
-rw-r--r--mod/languages/languages/da/da.market.php148
-rw-r--r--mod/languages/languages/da/da.members.php16
-rw-r--r--mod/languages/languages/da/da.menu_builder.php49
-rw-r--r--mod/languages/languages/da/da.messageboard.php73
-rw-r--r--mod/languages/languages/da/da.messages.php95
-rw-r--r--mod/languages/languages/da/da.notifications.php31
-rw-r--r--mod/languages/languages/da/da.pages.php104
-rw-r--r--mod/languages/languages/da/da.php1343
-rw-r--r--mod/languages/languages/da/da.profile.php13
-rw-r--r--mod/languages/languages/da/da.reportedcontent.php44
-rw-r--r--mod/languages/languages/da/da.river_activity_3C.php142
-rw-r--r--mod/languages/languages/da/da.roles_group_admins.php20
-rw-r--r--mod/languages/languages/da/da.search.php25
-rw-r--r--mod/languages/languages/da/da.tagcloud.php12
-rw-r--r--mod/languages/languages/da/da.tasks.php144
-rw-r--r--mod/languages/languages/da/da.thewire.php60
-rw-r--r--mod/languages/languages/da/da.tidypics.php190
-rw-r--r--mod/languages/languages/da/da.tinymce.php13
-rw-r--r--mod/languages/languages/da/da.twitter.php17
-rw-r--r--mod/languages/languages/da/da.twitter_api.php35
-rw-r--r--mod/languages/languages/da/da.uservalidationbyemail.php63
-rw-r--r--mod/languages/languages/de/de.blog.php50
-rw-r--r--mod/languages/languages/de/de.bookmarks.php46
-rw-r--r--mod/languages/languages/de/de.categories.php12
-rw-r--r--mod/languages/languages/de/de.core.php969
-rw-r--r--mod/languages/languages/de/de.custom_index.php11
-rw-r--r--mod/languages/languages/de/de.dashboard.php11
-rw-r--r--mod/languages/languages/de/de.developers.php43
-rw-r--r--mod/languages/languages/de/de.diagnostics.php39
-rw-r--r--mod/languages/languages/de/de.embed.php14
-rw-r--r--mod/languages/languages/de/de.externalpages.php15
-rw-r--r--mod/languages/languages/de/de.file.php69
-rw-r--r--mod/languages/languages/de/de.garbagecollector.php18
-rw-r--r--mod/languages/languages/de/de.groups.php204
-rw-r--r--mod/languages/languages/de/de.install.php156
-rw-r--r--mod/languages/languages/de/de.invitefriends.php30
-rw-r--r--mod/languages/languages/de/de.likes.php36
-rw-r--r--mod/languages/languages/de/de.logbrowser.php20
-rw-r--r--mod/languages/languages/de/de.logrotate.php22
-rw-r--r--mod/languages/languages/de/de.members.php13
-rw-r--r--mod/languages/languages/de/de.messageboard.php43
-rw-r--r--mod/languages/languages/de/de.messages.php60
-rw-r--r--mod/languages/languages/de/de.notifications.php18
-rw-r--r--mod/languages/languages/de/de.pages.php54
-rw-r--r--mod/languages/languages/de/de.profile.php8
-rw-r--r--mod/languages/languages/de/de.reportedcontent.php44
-rw-r--r--mod/languages/languages/de/de.search.php18
-rw-r--r--mod/languages/languages/de/de.tagcloud.php9
-rw-r--r--mod/languages/languages/de/de.thewire.php36
-rw-r--r--mod/languages/languages/de/de.tinymce.php9
-rw-r--r--mod/languages/languages/de/de.twitter.php12
-rw-r--r--mod/languages/languages/de/de.twitter_api.php60
-rw-r--r--mod/languages/languages/de/de.uservalidationbyemail.php51
-rw-r--r--mod/languages/languages/en/en.core.php39
-rw-r--r--mod/languages/languages/es/es.blog.php57
-rw-r--r--mod/languages/languages/es/es.bookmarks.php55
-rw-r--r--mod/languages/languages/es/es.categories.php12
-rw-r--r--mod/languages/languages/es/es.core.php1001
-rw-r--r--mod/languages/languages/es/es.custom_index.php11
-rw-r--r--mod/languages/languages/es/es.custom_keys.php5
-rw-r--r--mod/languages/languages/es/es.dashboard.php11
-rw-r--r--mod/languages/languages/es/es.developers.php49
-rw-r--r--mod/languages/languages/es/es.diagnostics.php40
-rw-r--r--mod/languages/languages/es/es.embed.php14
-rw-r--r--mod/languages/languages/es/es.externalpages.php15
-rw-r--r--mod/languages/languages/es/es.file.php76
-rw-r--r--mod/languages/languages/es/es.garbagecollector.php18
-rw-r--r--mod/languages/languages/es/es.groups.php213
-rw-r--r--mod/languages/languages/es/es.install.php156
-rw-r--r--mod/languages/languages/es/es.invitefriends.php29
-rw-r--r--mod/languages/languages/es/es.likes.php36
-rw-r--r--mod/languages/languages/es/es.logbrowser.php21
-rw-r--r--mod/languages/languages/es/es.logrotate.php22
-rw-r--r--mod/languages/languages/es/es.members.php13
-rw-r--r--mod/languages/languages/es/es.messageboard.php43
-rw-r--r--mod/languages/languages/es/es.messages.php66
-rw-r--r--mod/languages/languages/es/es.notifications.php18
-rw-r--r--mod/languages/languages/es/es.pages.php62
-rw-r--r--mod/languages/languages/es/es.profile.php8
-rw-r--r--mod/languages/languages/es/es.reportedcontent.php36
-rw-r--r--mod/languages/languages/es/es.search.php18
-rw-r--r--mod/languages/languages/es/es.tagcloud.php9
-rw-r--r--mod/languages/languages/es/es.thewire.php36
-rw-r--r--mod/languages/languages/es/es.tinymce.php9
-rw-r--r--mod/languages/languages/es/es.twitter.php12
-rw-r--r--mod/languages/languages/es/es.twitter_api.php58
-rw-r--r--mod/languages/languages/es/es.uservalidationbyemail.php64
-rw-r--r--mod/languages/languages/eu/eu.blog.php57
-rw-r--r--mod/languages/languages/eu/eu.bookmarks.php53
-rw-r--r--mod/languages/languages/eu/eu.categories.php11
-rw-r--r--mod/languages/languages/eu/eu.core.php996
-rw-r--r--mod/languages/languages/eu/eu.custom_index.php10
-rw-r--r--mod/languages/languages/eu/eu.dashboard.php10
-rw-r--r--mod/languages/languages/eu/eu.developers.php48
-rw-r--r--mod/languages/languages/eu/eu.diagnostics.php39
-rw-r--r--mod/languages/languages/eu/eu.embed.php13
-rw-r--r--mod/languages/languages/eu/eu.externalpages.php14
-rw-r--r--mod/languages/languages/eu/eu.file.php76
-rw-r--r--mod/languages/languages/eu/eu.garbagecollector.php17
-rw-r--r--mod/languages/languages/eu/eu.groups.php213
-rw-r--r--mod/languages/languages/eu/eu.install.php134
-rw-r--r--mod/languages/languages/eu/eu.invitefriends.php29
-rw-r--r--mod/languages/languages/eu/eu.likes.php35
-rw-r--r--mod/languages/languages/eu/eu.logbrowser.php21
-rw-r--r--mod/languages/languages/eu/eu.logrotate.php21
-rw-r--r--mod/languages/languages/eu/eu.members.php12
-rw-r--r--mod/languages/languages/eu/eu.messageboard.php42
-rw-r--r--mod/languages/languages/eu/eu.messages.php65
-rw-r--r--mod/languages/languages/eu/eu.notifications.php17
-rw-r--r--mod/languages/languages/eu/eu.pages.php62
-rw-r--r--mod/languages/languages/eu/eu.profile.php7
-rw-r--r--mod/languages/languages/eu/eu.reportedcontent.php35
-rw-r--r--mod/languages/languages/eu/eu.search.php17
-rw-r--r--mod/languages/languages/eu/eu.tagcloud.php8
-rw-r--r--mod/languages/languages/eu/eu.thewire.php35
-rw-r--r--mod/languages/languages/eu/eu.tinymce.php8
-rw-r--r--mod/languages/languages/eu/eu.twitter.php11
-rw-r--r--mod/languages/languages/eu/eu.twitter_api.php40
-rw-r--r--mod/languages/languages/eu/eu.uservalidationbyemail.php50
-rw-r--r--mod/languages/languages/fr/fr.blog.php69
-rw-r--r--mod/languages/languages/fr/fr.bookmarks.php82
-rw-r--r--mod/languages/languages/fr/fr.categories.php15
-rw-r--r--mod/languages/languages/fr/fr.custom_index.php14
-rw-r--r--mod/languages/languages/fr/fr.dashboard.php14
-rw-r--r--mod/languages/languages/fr/fr.developers.php61
-rw-r--r--mod/languages/languages/fr/fr.diagnostics.php70
-rw-r--r--mod/languages/languages/fr/fr.embed.php21
-rw-r--r--mod/languages/languages/fr/fr.externalpages.php27
-rw-r--r--mod/languages/languages/fr/fr.file.php110
-rw-r--r--mod/languages/languages/fr/fr.garbagecollector.php25
-rw-r--r--mod/languages/languages/fr/fr.groups.php265
-rw-r--r--mod/languages/languages/fr/fr.install.php156
-rw-r--r--mod/languages/languages/fr/fr.invitefriends.php43
-rw-r--r--mod/languages/languages/fr/fr.likes.php44
-rw-r--r--mod/languages/languages/fr/fr.logbrowser.php27
-rw-r--r--mod/languages/languages/fr/fr.logrotate.php28
-rw-r--r--mod/languages/languages/fr/fr.members.php16
-rw-r--r--mod/languages/languages/fr/fr.messageboard.php72
-rw-r--r--mod/languages/languages/fr/fr.messages.php96
-rw-r--r--mod/languages/languages/fr/fr.notifications.php26
-rw-r--r--mod/languages/languages/fr/fr.pages.php104
-rw-r--r--mod/languages/languages/fr/fr.php1310
-rw-r--r--mod/languages/languages/fr/fr.profile.php12
-rw-r--r--mod/languages/languages/fr/fr.reportedcontent.php44
-rw-r--r--mod/languages/languages/fr/fr.search.php21
-rw-r--r--mod/languages/languages/fr/fr.tagcloud.php12
-rw-r--r--mod/languages/languages/fr/fr.thewire.php61
-rw-r--r--mod/languages/languages/fr/fr.tinymce.php14
-rw-r--r--mod/languages/languages/fr/fr.twitter.php7
-rw-r--r--mod/languages/languages/fr/fr.twitter_api.php59
-rw-r--r--mod/languages/languages/fr/fr.uservalidationbyemail.php64
-rw-r--r--mod/languages/languages/gl/gl.blog.php16
-rw-r--r--mod/languages/languages/gl/gl.bookmarks.php40
-rw-r--r--mod/languages/languages/gl/gl.core.php664
-rw-r--r--mod/languages/languages/gl/gl.custom_index.php11
-rw-r--r--mod/languages/languages/gl/gl.embed.php8
-rw-r--r--mod/languages/languages/gl/gl.externalpages.php14
-rw-r--r--mod/languages/languages/gl/gl.file.php61
-rw-r--r--mod/languages/languages/gl/gl.groups.php143
-rw-r--r--mod/languages/languages/gl/gl.messageboard.php36
-rw-r--r--mod/languages/languages/gl/gl.messages.php52
-rw-r--r--mod/languages/languages/gl/gl.pages.php42
-rw-r--r--mod/languages/languages/gl/gl.profile.php8
-rw-r--r--mod/languages/languages/gl/gl.reportedcontent.php7
-rw-r--r--mod/languages/languages/gl/gl.uservalidationbyemail.php8
-rw-r--r--mod/languages/languages/it/it.blog.php12
-rw-r--r--mod/languages/languages/it/it.bookmarks.php31
-rw-r--r--mod/languages/languages/it/it.categories.php10
-rw-r--r--mod/languages/languages/it/it.core.php707
-rw-r--r--mod/languages/languages/it/it.custom_index.php11
-rw-r--r--mod/languages/languages/it/it.file.php53
-rw-r--r--mod/languages/languages/it/it.groups.php141
-rw-r--r--mod/languages/languages/it/it.messageboard.php39
-rw-r--r--mod/languages/languages/it/it.messages.php56
-rw-r--r--mod/languages/languages/it/it.pages.php41
-rw-r--r--mod/languages/languages/it/it.profile.php8
-rw-r--r--mod/languages/languages/it/it.reportedcontent.php7
-rw-r--r--mod/languages/languages/ja/ja.blog.php12
-rw-r--r--mod/languages/languages/ja/ja.bookmarks.php37
-rw-r--r--mod/languages/languages/ja/ja.categories.php11
-rw-r--r--mod/languages/languages/ja/ja.core.php661
-rw-r--r--mod/languages/languages/ja/ja.custom_index.php11
-rw-r--r--mod/languages/languages/ja/ja.embed.php8
-rw-r--r--mod/languages/languages/ja/ja.externalpages.php14
-rw-r--r--mod/languages/languages/ja/ja.file.php61
-rw-r--r--mod/languages/languages/ja/ja.groups.php155
-rw-r--r--mod/languages/languages/ja/ja.messageboard.php41
-rw-r--r--mod/languages/languages/ja/ja.messages.php55
-rw-r--r--mod/languages/languages/ja/ja.pages.php43
-rw-r--r--mod/languages/languages/ja/ja.reportedcontent.php30
-rw-r--r--mod/languages/languages/nl/nl.blog.php50
-rw-r--r--mod/languages/languages/nl/nl.bookmarks.php46
-rw-r--r--mod/languages/languages/nl/nl.categories.php12
-rw-r--r--mod/languages/languages/nl/nl.core.php947
-rw-r--r--mod/languages/languages/nl/nl.custom_index.php11
-rw-r--r--mod/languages/languages/nl/nl.dashboard.php11
-rw-r--r--mod/languages/languages/nl/nl.developers.php43
-rw-r--r--mod/languages/languages/nl/nl.diagnostics.php32
-rw-r--r--mod/languages/languages/nl/nl.embed.php14
-rw-r--r--mod/languages/languages/nl/nl.externalpages.php15
-rw-r--r--mod/languages/languages/nl/nl.file.php69
-rw-r--r--mod/languages/languages/nl/nl.garbagecollector.php18
-rw-r--r--mod/languages/languages/nl/nl.groups.php205
-rw-r--r--mod/languages/languages/nl/nl.invitefriends.php28
-rw-r--r--mod/languages/languages/nl/nl.likes.php31
-rw-r--r--mod/languages/languages/nl/nl.logbrowser.php20
-rw-r--r--mod/languages/languages/nl/nl.logrotate.php18
-rw-r--r--mod/languages/languages/nl/nl.members.php13
-rw-r--r--mod/languages/languages/nl/nl.messageboard.php41
-rw-r--r--mod/languages/languages/nl/nl.messages.php63
-rw-r--r--mod/languages/languages/nl/nl.notifications.php18
-rw-r--r--mod/languages/languages/nl/nl.pages.php54
-rw-r--r--mod/languages/languages/nl/nl.profile.php8
-rw-r--r--mod/languages/languages/nl/nl.reportedcontent.php36
-rw-r--r--mod/languages/languages/nl/nl.search.php18
-rw-r--r--mod/languages/languages/nl/nl.tagcloud.php9
-rw-r--r--mod/languages/languages/nl/nl.thewire.php36
-rw-r--r--mod/languages/languages/nl/nl.tinymce.php9
-rw-r--r--mod/languages/languages/nl/nl.twitter.php12
-rw-r--r--mod/languages/languages/nl/nl.twitter_api.php41
-rw-r--r--mod/languages/languages/nl/nl.uservalidationbyemail.php49
-rw-r--r--mod/languages/languages/pt/pt.blog.php50
-rw-r--r--mod/languages/languages/pt/pt.bookmarks.php46
-rw-r--r--mod/languages/languages/pt/pt.brainstorm.php63
-rw-r--r--mod/languages/languages/pt/pt.categories.php12
-rw-r--r--mod/languages/languages/pt/pt.core.php966
-rw-r--r--mod/languages/languages/pt/pt.custom_index.php11
-rw-r--r--mod/languages/languages/pt/pt.dashboard.php11
-rw-r--r--mod/languages/languages/pt/pt.developers.php43
-rw-r--r--mod/languages/languages/pt/pt.diagnostics.php34
-rw-r--r--mod/languages/languages/pt/pt.embed.php14
-rw-r--r--mod/languages/languages/pt/pt.externalpages.php15
-rw-r--r--mod/languages/languages/pt/pt.file.php69
-rw-r--r--mod/languages/languages/pt/pt.garbagecollector.php17
-rw-r--r--mod/languages/languages/pt/pt.groups.php204
-rw-r--r--mod/languages/languages/pt/pt.install.php132
-rw-r--r--mod/languages/languages/pt/pt.invitefriends.php36
-rw-r--r--mod/languages/languages/pt/pt.likes.php35
-rw-r--r--mod/languages/languages/pt/pt.logbrowser.php20
-rw-r--r--mod/languages/languages/pt/pt.logrotate.php20
-rw-r--r--mod/languages/languages/pt/pt.members.php13
-rw-r--r--mod/languages/languages/pt/pt.messageboard.php43
-rw-r--r--mod/languages/languages/pt/pt.messages.php66
-rw-r--r--mod/languages/languages/pt/pt.moderated_comments.php48
-rw-r--r--mod/languages/languages/pt/pt.notifications.php20
-rw-r--r--mod/languages/languages/pt/pt.pages.php55
-rw-r--r--mod/languages/languages/pt/pt.profile.php8
-rw-r--r--mod/languages/languages/pt/pt.reportedcontent.php36
-rw-r--r--mod/languages/languages/pt/pt.search.php18
-rw-r--r--mod/languages/languages/pt/pt.spam_login_filter.php80
-rw-r--r--mod/languages/languages/pt/pt.speak_freely.php55
-rw-r--r--mod/languages/languages/pt/pt.tagcloud.php9
-rw-r--r--mod/languages/languages/pt/pt.thewire.php37
-rw-r--r--mod/languages/languages/pt/pt.tinymce.php9
-rw-r--r--mod/languages/languages/pt/pt.twitter.php12
-rw-r--r--mod/languages/languages/pt/pt.twitter_api.php43
-rw-r--r--mod/languages/languages/pt/pt.uservalidationbyemail.php51
-rw-r--r--mod/languages/languages/sr/sr.blog.php12
-rw-r--r--mod/languages/languages/sr/sr.core.php389
-rw-r--r--mod/languages/languages/sr/sr.custom_index.php10
-rw-r--r--mod/languages/languages/sr/sr.externalpages.php10
-rw-r--r--mod/languages/languages/sr/sr.file.php7
-rw-r--r--mod/languages/languages/sr/sr.friendrequest.php20
-rw-r--r--mod/languages/languages/sr/sr.groups.php148
-rw-r--r--mod/languages/languages/sr/sr.messageboard.php38
-rw-r--r--mod/languages/languages/sr/sr.messages.php55
-rw-r--r--mod/languages/languages/sr/sr.pages.php7
-rw-r--r--mod/languages/languages/sr/sr.profile.php8
-rw-r--r--mod/languages/languages/sr/sr.reportedcontent.php30
-rw-r--r--mod/languages/languages/th/th.core.php651
-rw-r--r--mod/languages/languages/zh/zh.blog.php69
-rw-r--r--mod/languages/languages/zh/zh.core.php662
-rw-r--r--mod/languages/languages/zh/zh.profile.php8
-rw-r--r--mod/languages/manifest.xml16
-rw-r--r--mod/languages/start.php55
-rw-r--r--mod/languages/views/default/js/languages/ca.php2
-rw-r--r--mod/languages/views/default/js/languages/da.php2
-rw-r--r--mod/languages/views/default/js/languages/de.php2
-rw-r--r--mod/languages/views/default/js/languages/en.php2
-rw-r--r--mod/languages/views/default/js/languages/es.php2
-rw-r--r--mod/languages/views/default/js/languages/eu.php2
-rw-r--r--mod/languages/views/default/js/languages/fr.php2
-rw-r--r--mod/languages/views/default/js/languages/gl.php2
-rw-r--r--mod/languages/views/default/js/languages/it.php2
-rw-r--r--mod/languages/views/default/js/languages/ja.php2
-rw-r--r--mod/languages/views/default/js/languages/nl.php2
-rw-r--r--mod/languages/views/default/js/languages/pt.php2
-rw-r--r--mod/languages/views/default/js/languages/sr.php2
-rw-r--r--mod/languages/views/default/js/languages/th.php2
-rw-r--r--mod/languages/views/default/js/languages/zh.php2
-rw-r--r--mod/lightpics/CONFIG.txt73
-rw-r--r--mod/lightpics/FAQ.txt31
-rw-r--r--mod/lightpics/actions/photos/admin/create_thumbnails.php70
-rw-r--r--mod/lightpics/actions/photos/admin/imtest.php18
-rw-r--r--mod/lightpics/actions/photos/admin/settings.php29
-rw-r--r--mod/lightpics/actions/photos/admin/upgrade.php52
-rw-r--r--mod/lightpics/actions/photos/album/save.php48
-rw-r--r--mod/lightpics/actions/photos/album/set_cover.php23
-rw-r--r--mod/lightpics/actions/photos/album/sort.php21
-rw-r--r--mod/lightpics/actions/photos/batch/edit.php42
-rw-r--r--mod/lightpics/actions/photos/delete.php48
-rw-r--r--mod/lightpics/actions/photos/image/save.php40
-rw-r--r--mod/lightpics/actions/photos/image/upload.php147
-rw-r--r--mod/lightpics/activate.php51
-rw-r--r--mod/lightpics/classes/TidypicsAlbum.php375
-rw-r--r--mod/lightpics/classes/TidypicsImage.php406
-rw-r--r--mod/lightpics/contributions.txt442
-rw-r--r--mod/lightpics/deactivate.php10
-rw-r--r--mod/lightpics/fonts/LiberationSerif-Regular.ttfbin0 -> 172964 bytes-rw-r--r--mod/lightpics/fonts/License.txt13
-rw-r--r--mod/lightpics/graphics/empty_album.pngbin0 -> 1389 bytes-rw-r--r--mod/lightpics/graphics/icons/album.gifbin0 -> 1411 bytes-rw-r--r--mod/lightpics/graphics/icons/general.jpgbin0 -> 7036 bytes-rw-r--r--mod/lightpics/graphics/icons/river_icon_album.gifbin0 -> 398 bytes-rw-r--r--mod/lightpics/graphics/icons/river_icon_image.gifbin0 -> 945 bytes-rw-r--r--mod/lightpics/graphics/icons/river_icon_tag.gifbin0 -> 184 bytes-rw-r--r--mod/lightpics/graphics/image_error_large.pngbin0 -> 2208 bytes-rw-r--r--mod/lightpics/graphics/image_error_small.pngbin0 -> 2351 bytes-rw-r--r--mod/lightpics/graphics/image_error_thumb.pngbin0 -> 759 bytes-rw-r--r--mod/lightpics/graphics/loader.gifbin0 -> 2545 bytes-rw-r--r--mod/lightpics/graphics/spacer.gifbin0 -> 43 bytes-rw-r--r--mod/lightpics/languages/ca.php210
-rw-r--r--mod/lightpics/languages/da.php169
-rw-r--r--mod/lightpics/languages/de.php248
-rw-r--r--mod/lightpics/languages/en.php262
-rw-r--r--mod/lightpics/languages/es.php210
-rw-r--r--mod/lightpics/languages/fr.php140
-rw-r--r--mod/lightpics/languages/he.php135
-rw-r--r--mod/lightpics/languages/it.php113
-rw-r--r--mod/lightpics/languages/pl.php96
-rw-r--r--mod/lightpics/languages/ru.php101
-rw-r--r--mod/lightpics/languages/tr.php86
-rw-r--r--mod/lightpics/lib/exif.php110
-rw-r--r--mod/lightpics/lib/migrate.php301
-rw-r--r--mod/lightpics/lib/resize.php522
-rw-r--r--mod/lightpics/lib/tidypics.php365
-rw-r--r--mod/lightpics/lib/upload.php119
-rw-r--r--mod/lightpics/manifest.xml30
-rw-r--r--mod/lightpics/pages/lists/highestrated.php65
-rw-r--r--mod/lightpics/pages/lists/highestvotecount.php50
-rw-r--r--mod/lightpics/pages/lists/mostcommentedimages.php42
-rw-r--r--mod/lightpics/pages/lists/mostcommentedimagesthismonth.php50
-rw-r--r--mod/lightpics/pages/lists/mostcommentedimagestoday.php50
-rw-r--r--mod/lightpics/pages/lists/mostrecentimages.php56
-rw-r--r--mod/lightpics/pages/lists/mostviewedimages.php79
-rw-r--r--mod/lightpics/pages/lists/mostviewedimageslastmonth.php50
-rw-r--r--mod/lightpics/pages/lists/mostviewedimagesthismonth.php50
-rw-r--r--mod/lightpics/pages/lists/mostviewedimagesthisyear.php50
-rw-r--r--mod/lightpics/pages/lists/mostviewedimagestoday.php50
-rw-r--r--mod/lightpics/pages/lists/recentlycommented.php61
-rw-r--r--mod/lightpics/pages/lists/recentlyviewed.php60
-rw-r--r--mod/lightpics/pages/lists/recentvotes.php52
-rw-r--r--mod/lightpics/pages/photos/album/add.php34
-rw-r--r--mod/lightpics/pages/photos/album/edit.php48
-rw-r--r--mod/lightpics/pages/photos/album/sort.php56
-rw-r--r--mod/lightpics/pages/photos/album/view.php63
-rw-r--r--mod/lightpics/pages/photos/all.php38
-rw-r--r--mod/lightpics/pages/photos/batch/edit.php44
-rw-r--r--mod/lightpics/pages/photos/friends.php34
-rw-r--r--mod/lightpics/pages/photos/image/download.php41
-rw-r--r--mod/lightpics/pages/photos/image/edit.php54
-rw-r--r--mod/lightpics/pages/photos/image/thumbnail.php38
-rw-r--r--mod/lightpics/pages/photos/image/upload.php64
-rw-r--r--mod/lightpics/pages/photos/image/view.php61
-rw-r--r--mod/lightpics/pages/photos/owner.php56
-rw-r--r--mod/lightpics/start.php421
-rw-r--r--mod/lightpics/upgrades/2009082901.php29
-rw-r--r--mod/lightpics/upgrades/2010073101.php27
-rw-r--r--mod/lightpics/upgrades/2010102801.php26
-rw-r--r--mod/lightpics/upgrades/2012020901.php26
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/README.md73
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/cors/postmessage.html75
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/cors/result.html20
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/css/jquery.fileupload-ui.css107
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/css/style.css92
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/img/loading.gifbin0 -> 3897 bytes-rw-r--r--mod/lightpics/vendors/jquery-file-upload/img/progressbar.gifbin0 -> 3323 bytes-rw-r--r--mod/lightpics/vendors/jquery-file-upload/index.html234
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/js/cors/jquery.postmessage-transport.js117
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/js/cors/jquery.xdr-transport.js85
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/js/jquery.fileupload-fp.js219
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/js/jquery.fileupload-jui.js141
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/js/jquery.fileupload-ui.js736
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/js/jquery.fileupload.js972
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/js/jquery.iframe-transport.js171
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/js/locale.js29
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/js/main.js93
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/js/vendor/canvas-to-blob.min.js1
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/js/vendor/jquery.ui.widget.js282
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/js/vendor/load-image.min.js1
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/js/vendor/tmpl.min.js1
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/package.json56
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/server/gae-go/app.yaml12
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/server/gae-go/app/main.go361
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/server/gae-go/resize/resize.go247
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/server/gae-go/static/favicon.icobin0 -> 1150 bytes-rw-r--r--mod/lightpics/vendors/jquery-file-upload/server/gae-go/static/robots.txt2
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/server/gae-python/app.yaml16
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/server/gae-python/main.py149
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/server/gae-python/static/favicon.icobin0 -> 1150 bytes-rw-r--r--mod/lightpics/vendors/jquery-file-upload/server/gae-python/static/robots.txt2
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/server/node/.gitignore2
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/server/node/package.json41
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/server/node/public/files/thumbnail/.gitignore0
-rwxr-xr-xmod/lightpics/vendors/jquery-file-upload/server/node/server.js285
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/server/node/tmp/.gitignore0
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/server/php/files/.htaccess4
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/server/php/index.php46
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/server/php/thumbnails/.htaccess0
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/server/php/upload.class.php436
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/test/index.html146
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/test/test.js1279
-rw-r--r--mod/lightpics/version.php7
-rw-r--r--mod/lightpics/views/default/admin/settings/photos.php71
-rw-r--r--mod/lightpics/views/default/admin/settings/photos/help.php14
-rw-r--r--mod/lightpics/views/default/admin/settings/photos/image_lib.php38
-rw-r--r--mod/lightpics/views/default/admin/settings/photos/server_config.php14
-rw-r--r--mod/lightpics/views/default/admin/settings/photos/server_info.php120
-rw-r--r--mod/lightpics/views/default/admin/settings/photos/settings.php18
-rw-r--r--mod/lightpics/views/default/admin/settings/photos/thumbnail.php54
-rw-r--r--mod/lightpics/views/default/forms/photos/admin/settings.php26
-rw-r--r--mod/lightpics/views/default/forms/photos/admin/settings/activity.php31
-rw-r--r--mod/lightpics/views/default/forms/photos/admin/settings/image_lib.php20
-rw-r--r--mod/lightpics/views/default/forms/photos/admin/settings/main.php39
-rw-r--r--mod/lightpics/views/default/forms/photos/admin/settings/thumbnails.php33
-rw-r--r--mod/lightpics/views/default/forms/photos/album/save.php48
-rw-r--r--mod/lightpics/views/default/forms/photos/album/sort.php28
-rw-r--r--mod/lightpics/views/default/forms/photos/basic_upload.php63
-rw-r--r--mod/lightpics/views/default/forms/photos/batch/edit.php33
-rw-r--r--mod/lightpics/views/default/forms/photos/batch/edit/image.php35
-rw-r--r--mod/lightpics/views/default/forms/photos/image/save.php48
-rw-r--r--mod/lightpics/views/default/icon/object/album.php41
-rw-r--r--mod/lightpics/views/default/icon/object/image.php62
-rw-r--r--mod/lightpics/views/default/js/photos/tidypics.php43
-rw-r--r--mod/lightpics/views/default/js/photos/upload.php63
-rw-r--r--mod/lightpics/views/default/object/album.php22
-rw-r--r--mod/lightpics/views/default/object/album/full.php59
-rw-r--r--mod/lightpics/views/default/object/album/gallery.php36
-rw-r--r--mod/lightpics/views/default/object/album/list.php42
-rw-r--r--mod/lightpics/views/default/object/image.php211
-rw-r--r--mod/lightpics/views/default/object/image/full.php62
-rw-r--r--mod/lightpics/views/default/object/image/navigation.php34
-rw-r--r--mod/lightpics/views/default/object/image/summary.php41
-rw-r--r--mod/lightpics/views/default/photos/css.php470
-rw-r--r--mod/lightpics/views/default/photos/group_module.php45
-rw-r--r--mod/lightpics/views/default/photos/sidebar.php18
-rw-r--r--mod/lightpics/views/default/photos/sidebar/exif.php20
-rw-r--r--mod/lightpics/views/default/photos/sidebar/quota.php27
-rw-r--r--mod/lightpics/views/default/river/object/album/create.php40
-rw-r--r--mod/lightpics/views/default/river/object/image/create.php41
-rw-r--r--mod/lightpics/views/default/river/object/tidypics_batch/create.php66
-rw-r--r--mod/lightpics/views/default/widgets/album_view/content.php17
-rw-r--r--mod/lightpics/views/default/widgets/album_view/edit.php25
-rw-r--r--mod/lightpics/views/default/widgets/latest_photos/content.php18
-rw-r--r--mod/lightpics/views/default/widgets/latest_photos/edit.php25
-rw-r--r--mod/lightpics/views/rss/extensions/photos/xmlns.php9
-rw-r--r--mod/lightpics/views/rss/object/album.php17
-rw-r--r--mod/lightpics/views/rss/object/album/full.php19
-rw-r--r--mod/lightpics/views/rss/object/album/summary.php33
-rw-r--r--mod/lightpics/views/rss/object/image.php42
-rw-r--r--mod/likes/actions/likes/add.php50
-rw-r--r--mod/likes/actions/likes/delete.php31
-rw-r--r--mod/likes/languages/en.php45
-rw-r--r--mod/likes/manifest.xml17
-rw-r--r--mod/likes/start.php171
-rw-r--r--mod/likes/views/default/annotation/likes.php49
-rw-r--r--mod/likes/views/default/likes/button.php39
-rw-r--r--mod/likes/views/default/likes/count.php36
-rw-r--r--mod/likes/views/default/likes/css.php17
-rw-r--r--mod/likes/views/default/likes/js.php26
m---------mod/linkup0
m---------mod/livestream0
-rw-r--r--mod/logbrowser/index.php66
-rw-r--r--mod/logbrowser/languages/en.php56
-rw-r--r--mod/logbrowser/manifest.xml25
-rw-r--r--mod/logbrowser/start.php87
-rw-r--r--mod/logbrowser/views/default/admin/administer_utilities/logbrowser.php81
-rw-r--r--mod/logbrowser/views/default/forms/logbrowser/refine.php54
-rw-r--r--mod/logbrowser/views/default/logbrowser/adminlinks.php4
-rw-r--r--mod/logbrowser/views/default/logbrowser/css.php43
-rw-r--r--mod/logbrowser/views/default/logbrowser/form.php66
-rw-r--r--mod/logbrowser/views/default/logbrowser/refine.php40
-rw-r--r--mod/logbrowser/views/default/logbrowser/table.php90
-rw-r--r--mod/logbrowser/views/default/object/logwrapper.php50
-rw-r--r--mod/logrotate/languages/en.php47
-rw-r--r--mod/logrotate/manifest.xml25
-rw-r--r--mod/logrotate/start.php172
-rw-r--r--mod/logrotate/views/default/plugins/logrotate/settings.php48
-rw-r--r--mod/logrotate/views/default/settings/logrotate/edit.php20
-rw-r--r--mod/members/languages/en.php16
-rw-r--r--mod/members/manifest.xml16
-rw-r--r--mod/members/pages/members/index.php36
-rw-r--r--mod/members/pages/members/search.php55
-rw-r--r--mod/members/start.php41
-rw-r--r--mod/members/views/default/members/nav.php24
-rw-r--r--mod/members/views/default/members/sidebar.php25
-rw-r--r--mod/messageboard/actions/add.php38
-rw-r--r--mod/messageboard/actions/delete.php17
-rw-r--r--mod/messageboard/languages/en.php72
-rw-r--r--mod/messageboard/manifest.xml17
-rw-r--r--mod/messageboard/pages/messageboard/owner.php57
-rw-r--r--mod/messageboard/start.php163
-rw-r--r--mod/messageboard/views/default/forms/messageboard/add.php20
-rw-r--r--mod/messageboard/views/default/messageboard/css.php10
-rw-r--r--mod/messageboard/views/default/messageboard/js.php56
-rw-r--r--mod/messageboard/views/default/river/object/messageboard/create.php12
-rw-r--r--mod/messageboard/views/default/widgets/messageboard/content.php35
-rw-r--r--mod/messageboard/views/default/widgets/messageboard/edit.php22
-rw-r--r--mod/messages/actions/messages/delete.php20
-rw-r--r--mod/messages/actions/messages/process.php35
-rw-r--r--mod/messages/actions/messages/send.php46
-rw-r--r--mod/messages/graphics/icon_notifications_site.gifbin0 -> 456 bytes-rw-r--r--mod/messages/graphics/toolbar_messages_icon.gif (renamed from _graphics/toolbar_messages_icon.gif)bin502 -> 502 bytes-rw-r--r--mod/messages/languages/en.php97
-rw-r--r--mod/messages/lib/messages.php32
-rw-r--r--mod/messages/manifest.xml17
-rw-r--r--mod/messages/pages/messages/inbox.php48
-rw-r--r--mod/messages/pages/messages/read.php60
-rw-r--r--mod/messages/pages/messages/send.php27
-rw-r--r--mod/messages/pages/messages/sent.php48
-rw-r--r--mod/messages/start.php477
-rw-r--r--mod/messages/views/default/forms/messages/process.php43
-rw-r--r--mod/messages/views/default/forms/messages/reply.php38
-rw-r--r--mod/messages/views/default/forms/messages/send.php54
-rw-r--r--mod/messages/views/default/messages/css.php63
-rw-r--r--mod/messages/views/default/messages/js.php7
-rw-r--r--mod/messages/views/default/object/messages.php86
-rw-r--r--mod/notifications/actions/groupsave.php93
-rw-r--r--mod/notifications/actions/save.php85
-rw-r--r--mod/notifications/graphics/icon_notifications_site.gifbin0 -> 456 bytes-rw-r--r--mod/notifications/groups.php88
-rw-r--r--mod/notifications/index.php89
-rw-r--r--mod/notifications/languages/en.php55
-rw-r--r--mod/notifications/manifest.xml26
-rw-r--r--mod/notifications/start.php253
-rw-r--r--mod/notifications/views/default/forms/notificationsettings/groupsave.php111
-rw-r--r--mod/notifications/views/default/forms/notificationsettings/save.php21
-rw-r--r--mod/notifications/views/default/notifications/css.php151
-rw-r--r--mod/notifications/views/default/notifications/settings/usersettings.php3
-rw-r--r--mod/notifications/views/default/notifications/subscriptions/collections.php305
-rw-r--r--mod/notifications/views/default/notifications/subscriptions/form.php41
-rw-r--r--mod/notifications/views/default/notifications/subscriptions/forminternals.php387
-rw-r--r--mod/notifications/views/default/notifications/subscriptions/groupsform.php101
-rw-r--r--mod/notifications/views/default/notifications/subscriptions/jsfuncs.php104
-rw-r--r--mod/notifications/views/default/notifications/subscriptions/personal.php134
-rw-r--r--mod/openid_api/classes/OpenID_ElggStore.php420
-rw-r--r--mod/openid_api/lib/openid_consumer.php15
-rw-r--r--mod/openid_api/lib/openid_server.php13
-rw-r--r--mod/openid_api/manifest.xml19
-rw-r--r--mod/openid_api/start.php22
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID.php563
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/AX.php1022
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/Association.php610
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/BigMath.php451
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/Consumer.php2234
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/CryptUtil.php122
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/DatabaseConnection.php130
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/DiffieHellman.php113
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/Discover.php606
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/DumbStore.php99
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/Extension.php61
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/FileStore.php618
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/HMAC.php105
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/Interface.php196
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/KVForm.php111
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/MDB2Store.php413
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/MemcachedStore.php207
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/Message.php920
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/MySQLStore.php77
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/Nonce.php108
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/PAPE.php300
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/Parse.php377
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/PostgreSQLStore.php112
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/SQLStore.php557
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/SQLiteStore.php70
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/SReg.php521
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/Server.php1765
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/ServerRequest.php36
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/TrustRoot.php461
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/URINorm.php249
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/Yadis/HTTPFetcher.php174
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/Yadis/Manager.php521
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/Yadis/Misc.php58
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/Yadis/ParanoidHTTPFetcher.php245
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/Yadis/ParseHTML.php258
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/Yadis/PlainHTTPFetcher.php248
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/Yadis/XML.php352
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/Yadis/XRDS.php478
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/Yadis/XRI.php234
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/Yadis/XRIRes.php72
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/Yadis/Yadis.php382
-rw-r--r--mod/openid_api/vendors/php-openid/COPYING202
-rw-r--r--mod/openid_api/vendors/php-openid/README136
-rw-r--r--mod/openid_client/actions/openid_client/login.php32
-rw-r--r--mod/openid_client/actions/openid_client/register.php35
-rw-r--r--mod/openid_client/classes/ElggOpenIDConsumer.php238
-rw-r--r--mod/openid_client/graphics/openid_icon.pngbin0 -> 733 bytes-rw-r--r--mod/openid_client/languages/en.php28
-rw-r--r--mod/openid_client/lib/helpers.php114
-rw-r--r--mod/openid_client/manifest.xml19
-rw-r--r--mod/openid_client/return.php69
-rw-r--r--mod/openid_client/start.php78
-rw-r--r--mod/openid_client/upgrade.php12
-rw-r--r--mod/openid_client/upgrades/2012100501.php53
-rw-r--r--mod/openid_client/views/default/core/account/login_box.php24
-rw-r--r--mod/openid_client/views/default/core/account/login_dropdown.php31
-rw-r--r--mod/openid_client/views/default/forms/openid_client/login.php43
-rw-r--r--mod/openid_client/views/default/forms/openid_client/register.php71
-rw-r--r--mod/openid_client/views/default/openid_client/css.php13
-rw-r--r--mod/openid_client/views/default/openid_client/icon.php8
-rw-r--r--mod/openid_client/views/default/openid_client/js.php26
-rw-r--r--mod/openid_client/views/default/openid_client/register.php11
-rw-r--r--mod/openid_server/Crypt/RSA.php524
-rw-r--r--mod/openid_server/Crypt/RSA/ErrorHandler.php234
-rw-r--r--mod/openid_server/Crypt/RSA/Key.php314
-rw-r--r--mod/openid_server/Crypt/RSA/KeyPair.php804
-rw-r--r--mod/openid_server/Crypt/RSA/Math/BCMath.php482
-rw-r--r--mod/openid_server/Crypt/RSA/Math/BigInt.php313
-rw-r--r--mod/openid_server/Crypt/RSA/Math/GMP.php361
-rw-r--r--mod/openid_server/Crypt/RSA/MathLoader.php135
-rwxr-xr-xmod/openid_server/actions/admin.php90
-rwxr-xr-xmod/openid_server/actions/autologin.php52
-rwxr-xr-xmod/openid_server/actions/autologout.php48
-rwxr-xr-xmod/openid_server/actions/trust.php93
-rw-r--r--mod/openid_server/languages/ca.php40
-rwxr-xr-xmod/openid_server/languages/en.php47
-rwxr-xr-xmod/openid_server/languages/es.php40
-rw-r--r--mod/openid_server/languages/gl.php40
-rw-r--r--mod/openid_server/languages/pt.php27
-rwxr-xr-xmod/openid_server/lib/actions.php173
-rwxr-xr-xmod/openid_server/lib/common.php164
-rwxr-xr-xmod/openid_server/lib/session.php140
-rwxr-xr-xmod/openid_server/manifest.xml20
-rwxr-xr-xmod/openid_server/openid_server_include.php340
-rwxr-xr-xmod/openid_server/server.php32
-rwxr-xr-xmod/openid_server/start.php65
-rwxr-xr-xmod/openid_server/views/default/forms/openid_server/trust.php34
-rwxr-xr-xmod/openid_server/views/default/openid_server/forms/admin.php154
-rwxr-xr-xmod/openid_server/views/default/openid_server/forms/autologin.php22
-rwxr-xr-xmod/openid_server/views/default/openid_server/forms/autologout.php24
-rwxr-xr-xmod/openid_server/views/default/openid_server/forms/trust.php35
-rwxr-xr-xmod/openid_server/views/default/openid_server/metatags.php6
-rw-r--r--mod/openid_server/views/xrds/openid_server/profile.php11
-rw-r--r--mod/openid_server/views/xrds/openid_server/service.php15
-rw-r--r--mod/opensearch/README21
-rw-r--r--mod/opensearch/languages/ca.php26
-rw-r--r--mod/opensearch/languages/en.php28
-rw-r--r--mod/opensearch/languages/es.php23
-rw-r--r--mod/opensearch/languages/eu.php11
-rwxr-xr-xmod/opensearch/languages/pl.php11
-rw-r--r--mod/opensearch/manifest.xml16
-rw-r--r--mod/opensearch/start.php33
-rw-r--r--mod/opensearch/views/default/opensearch/includes.php10
-rw-r--r--mod/opensearch/views/default/plugins/opensearch/settings.php97
-rw-r--r--mod/opensearch/views/opensearch_rss/page/default.php42
-rw-r--r--mod/opensearch/views/opensearch_rss/page/layouts/default.php5
-rw-r--r--mod/opensearch/views/opensearch_rss/search/layout.php5
-rw-r--r--mod/opensearch/views/opensearch_rss/search/list.php27
-rw-r--r--mod/opensearch/views/xml/opensearch/description.php75
-rw-r--r--mod/pages/actions/annotations/page/delete.php20
-rw-r--r--mod/pages/actions/pages/delete.php68
-rw-r--r--mod/pages/actions/pages/edit.php115
-rw-r--r--mod/pages/images/pages.gifbin0 -> 2766 bytes-rw-r--r--mod/pages/images/pages_lrg.gifbin0 -> 10234 bytes-rw-r--r--mod/pages/languages/en.php119
-rw-r--r--mod/pages/lib/pages.php152
-rw-r--r--mod/pages/manifest.xml18
-rw-r--r--mod/pages/pages/pages/edit.php54
-rw-r--r--mod/pages/pages/pages/friends.php33
-rw-r--r--mod/pages/pages/pages/history.php47
-rw-r--r--mod/pages/pages/pages/new.php37
-rw-r--r--mod/pages/pages/pages/owner.php53
-rw-r--r--mod/pages/pages/pages/revision.php53
-rw-r--r--mod/pages/pages/pages/view.php55
-rw-r--r--mod/pages/pages/pages/world.php31
-rw-r--r--mod/pages/start.php370
-rw-r--r--mod/pages/upgrades/2012061800.php49
-rw-r--r--mod/pages/vendors/jquery-treeview/.gitignore7
-rw-r--r--mod/pages/vendors/jquery-treeview/README.md8
-rw-r--r--mod/pages/vendors/jquery-treeview/changelog.txt36
-rw-r--r--mod/pages/vendors/jquery-treeview/demo/async.html91
-rw-r--r--mod/pages/vendors/jquery-treeview/demo/bg.gifbin0 -> 1175 bytes-rw-r--r--mod/pages/vendors/jquery-treeview/demo/demo.js31
-rw-r--r--mod/pages/vendors/jquery-treeview/demo/edit.html82
-rw-r--r--mod/pages/vendors/jquery-treeview/demo/images.html56
-rw-r--r--mod/pages/vendors/jquery-treeview/demo/index.html338
-rw-r--r--mod/pages/vendors/jquery-treeview/demo/large.html561
-rw-r--r--mod/pages/vendors/jquery-treeview/demo/prerendered.html620
-rw-r--r--mod/pages/vendors/jquery-treeview/demo/screen.css24
-rw-r--r--mod/pages/vendors/jquery-treeview/demo/simple.html82
-rw-r--r--mod/pages/vendors/jquery-treeview/demo/sortable.html222
-rw-r--r--mod/pages/vendors/jquery-treeview/demo/source.php88
-rw-r--r--mod/pages/vendors/jquery-treeview/demo/source.phps88
-rw-r--r--mod/pages/vendors/jquery-treeview/images/ajax-loader.gifbin0 -> 847 bytes-rw-r--r--mod/pages/vendors/jquery-treeview/images/file.gifbin0 -> 110 bytes-rw-r--r--mod/pages/vendors/jquery-treeview/images/folder-closed.gifbin0 -> 105 bytes-rw-r--r--mod/pages/vendors/jquery-treeview/images/folder.gifbin0 -> 106 bytes-rw-r--r--mod/pages/vendors/jquery-treeview/images/minus.gifbin0 -> 837 bytes-rw-r--r--mod/pages/vendors/jquery-treeview/images/plus.gifbin0 -> 841 bytes-rw-r--r--mod/pages/vendors/jquery-treeview/images/treeview-black-line.gifbin0 -> 1877 bytes-rw-r--r--mod/pages/vendors/jquery-treeview/images/treeview-black.gifbin0 -> 1216 bytes-rw-r--r--mod/pages/vendors/jquery-treeview/images/treeview-default-line.gifbin0 -> 1993 bytes-rw-r--r--mod/pages/vendors/jquery-treeview/images/treeview-default.gifbin0 -> 1222 bytes-rw-r--r--mod/pages/vendors/jquery-treeview/images/treeview-famfamfam-line.gifbin0 -> 807 bytes-rw-r--r--mod/pages/vendors/jquery-treeview/images/treeview-famfamfam.gifbin0 -> 1280 bytes-rw-r--r--mod/pages/vendors/jquery-treeview/images/treeview-gray-line.gifbin0 -> 1877 bytes-rw-r--r--mod/pages/vendors/jquery-treeview/images/treeview-gray.gifbin0 -> 1230 bytes-rw-r--r--mod/pages/vendors/jquery-treeview/images/treeview-red-line.gifbin0 -> 1877 bytes-rw-r--r--mod/pages/vendors/jquery-treeview/images/treeview-red.gifbin0 -> 1230 bytes-rw-r--r--mod/pages/vendors/jquery-treeview/jquery.treeview.async.js110
-rw-r--r--mod/pages/vendors/jquery-treeview/jquery.treeview.css74
-rw-r--r--mod/pages/vendors/jquery-treeview/jquery.treeview.edit.js37
-rw-r--r--mod/pages/vendors/jquery-treeview/jquery.treeview.js256
-rw-r--r--mod/pages/vendors/jquery-treeview/jquery.treeview.min.js17
-rw-r--r--mod/pages/vendors/jquery-treeview/jquery.treeview.sortable.js378
-rw-r--r--mod/pages/vendors/jquery-treeview/lib/jquery.cookie.js92
-rw-r--r--mod/pages/vendors/jquery-treeview/lib/jquery.js6883
-rw-r--r--mod/pages/vendors/jquery-treeview/todo8
-rw-r--r--mod/pages/views/default/annotation/page.php60
-rw-r--r--mod/pages/views/default/forms/pages/edit.php77
-rw-r--r--mod/pages/views/default/input/write_access.php35
-rw-r--r--mod/pages/views/default/object/page.php8
-rw-r--r--mod/pages/views/default/object/page_top.php119
-rw-r--r--mod/pages/views/default/pages/css.php19
-rw-r--r--mod/pages/views/default/pages/group_module.php49
-rw-r--r--mod/pages/views/default/pages/icon.php25
-rw-r--r--mod/pages/views/default/pages/input/parent.php37
-rw-r--r--mod/pages/views/default/pages/sidebar.php14
-rw-r--r--mod/pages/views/default/pages/sidebar/history.php21
-rw-r--r--mod/pages/views/default/pages/sidebar/navigation.php58
-rw-r--r--mod/pages/views/default/river/object/page/create.php13
-rw-r--r--mod/pages/views/default/river/object/page_top/create.php8
-rw-r--r--mod/pages/views/default/widgets/pages/content.php32
-rw-r--r--mod/pages/views/default/widgets/pages/edit.php24
-rw-r--r--mod/profile/actions/cropicon.php72
-rw-r--r--mod/profile/actions/deletedefaultprofileitem.php26
-rw-r--r--mod/profile/actions/edit.php80
-rw-r--r--mod/profile/actions/editdefault.php38
-rw-r--r--mod/profile/actions/iconupload.php82
-rw-r--r--mod/profile/actions/resetdefaultprofile.php29
-rw-r--r--mod/profile/defaultprofile.php56
-rw-r--r--mod/profile/edit.php48
-rw-r--r--mod/profile/editicon.php35
-rw-r--r--mod/profile/graphics/defaultlarge.jpgbin5072 -> 0 bytes-rw-r--r--mod/profile/graphics/defaultmaster.jpgbin304 -> 0 bytes-rw-r--r--mod/profile/graphics/defaultmedium.jpgbin2640 -> 0 bytes-rw-r--r--mod/profile/graphics/defaultsmall.jpgbin1400 -> 0 bytes-rw-r--r--mod/profile/graphics/defaulttiny.jpgbin1053 -> 0 bytes-rw-r--r--mod/profile/graphics/defaulttopbar.jpgbin837 -> 0 bytes-rw-r--r--mod/profile/icon.php53
-rw-r--r--mod/profile/icondirect.php166
-rw-r--r--mod/profile/index.php38
-rw-r--r--mod/profile/javascript.php22
-rw-r--r--mod/profile/languages/en.php12
-rw-r--r--mod/profile/manifest.xml23
-rw-r--r--mod/profile/start.php482
-rw-r--r--mod/profile/views/default/icon/user/default/large.php3
-rw-r--r--mod/profile/views/default/icon/user/default/master.php3
-rw-r--r--mod/profile/views/default/icon/user/default/medium.php3
-rw-r--r--mod/profile/views/default/icon/user/default/small.php3
-rw-r--r--mod/profile/views/default/icon/user/default/tiny.php3
-rw-r--r--mod/profile/views/default/icon/user/default/topbar.php3
-rw-r--r--mod/profile/views/default/js/jquery.imgareaselect-0.4.2.js355
-rw-r--r--mod/profile/views/default/js/jquery.imgareaselect-0.4.2.min.js1
-rw-r--r--mod/profile/views/default/profile/css.php220
-rw-r--r--mod/profile/views/default/profile/details.php68
-rw-r--r--mod/profile/views/default/profile/edit.php67
-rw-r--r--mod/profile/views/default/profile/editdefaultprofile.php34
-rw-r--r--mod/profile/views/default/profile/editicon.php136
-rw-r--r--mod/profile/views/default/profile/gallery.php47
-rw-r--r--mod/profile/views/default/profile/hoverover.php26
-rw-r--r--mod/profile/views/default/profile/icon.php92
-rw-r--r--mod/profile/views/default/profile/javascript.php138
-rw-r--r--mod/profile/views/default/profile/js.php9
-rw-r--r--mod/profile/views/default/profile/listing.php58
-rw-r--r--mod/profile/views/default/profile/menu/actions.php25
-rw-r--r--mod/profile/views/default/profile/menu/adminlinks.php40
-rw-r--r--mod/profile/views/default/profile/menu/adminwrapper.php11
-rw-r--r--mod/profile/views/default/profile/menu/links.php25
-rw-r--r--mod/profile/views/default/profile/menu/linksownpage.php22
-rw-r--r--mod/profile/views/default/profile/metatags.php35
-rw-r--r--mod/profile/views/default/profile/owner_block.php66
-rw-r--r--mod/profile/views/default/profile/profilelinks.php50
-rw-r--r--mod/profile/views/default/profile/submenu.php22
-rw-r--r--mod/profile/views/default/profile/userdetails.php163
-rw-r--r--mod/profile/views/default/profile/wrapper.php12
-rw-r--r--mod/profile/views/default/river/user/default/profileiconupdate.php11
-rw-r--r--mod/profile/views/default/river/user/default/profileupdate.php10
-rw-r--r--mod/profile_widgets/languages/en.php7
-rw-r--r--mod/profile_widgets/languages/es.php7
-rwxr-xr-xmod/profile_widgets/manifest.xml16
-rw-r--r--mod/profile_widgets/start.php13
-rw-r--r--mod/profile_widgets/views/default/widgets/thewirewrite/view.php11
m---------mod/purity_theme7
-rw-r--r--mod/registrationterms/.gitignore3
-rw-r--r--mod/registrationterms/README.md9
-rw-r--r--mod/registrationterms/languages/ca.php6
-rw-r--r--mod/registrationterms/languages/en.php6
-rw-r--r--mod/registrationterms/manifest.xml25
-rw-r--r--mod/registrationterms/screenshots/register-form.pngbin0 -> 8653 bytes-rw-r--r--mod/registrationterms/start.php18
-rw-r--r--mod/registrationterms/views/default/registrationterms/register.php17
-rw-r--r--mod/reportedcontent/actions/add.php49
-rw-r--r--mod/reportedcontent/actions/archive.php38
-rw-r--r--mod/reportedcontent/actions/delete.php41
-rw-r--r--mod/reportedcontent/actions/reportedcontent/add.php39
-rw-r--r--mod/reportedcontent/actions/reportedcontent/archive.php27
-rw-r--r--mod/reportedcontent/actions/reportedcontent/delete.php28
-rw-r--r--mod/reportedcontent/add.php36
-rw-r--r--mod/reportedcontent/graphics/icon_reportthis.gifbin0 -> 570 bytes-rw-r--r--mod/reportedcontent/index.php32
-rw-r--r--mod/reportedcontent/languages/en.php91
-rw-r--r--mod/reportedcontent/manifest.xml24
-rw-r--r--mod/reportedcontent/start.php171
-rw-r--r--mod/reportedcontent/views/default/admin/administer_utilities/reportedcontent.php13
-rw-r--r--mod/reportedcontent/views/default/forms/reportedcontent/add.php57
-rw-r--r--mod/reportedcontent/views/default/object/reported_content.php84
-rw-r--r--mod/reportedcontent/views/default/reportedcontent/admin_css.php46
-rw-r--r--mod/reportedcontent/views/default/reportedcontent/css.php75
-rw-r--r--mod/reportedcontent/views/default/reportedcontent/form.php72
-rw-r--r--mod/reportedcontent/views/default/reportedcontent/listing.php39
-rw-r--r--mod/reportedcontent/views/default/reportedcontent/user_report.php6
-rw-r--r--mod/reportedcontent/views/default/widgets/reportedcontent/content.php16
-rw-r--r--mod/reportedcontent/views/default/widgets/reportedcontent/edit.php22
-rw-r--r--mod/river_privacy/CHANGES.txt7
-rw-r--r--mod/river_privacy/README.md4
-rw-r--r--mod/river_privacy/languages/ca.php7
-rw-r--r--mod/river_privacy/languages/en.php13
-rw-r--r--mod/river_privacy/manifest.xml17
-rw-r--r--mod/river_privacy/start.php30
-rw-r--r--mod/river_privacy/views/default/plugins/river_privacy/settings.php17
-rw-r--r--mod/river_privacy/views_override/default/page/components/list.php89
-rw-r--r--mod/riverdashboard/actions/add.php59
-rw-r--r--mod/riverdashboard/actions/delete.php36
-rw-r--r--mod/riverdashboard/index.php64
-rw-r--r--mod/riverdashboard/languages/en.php33
-rw-r--r--mod/riverdashboard/manifest.xml10
-rw-r--r--mod/riverdashboard/start.php37
-rw-r--r--mod/riverdashboard/views/default/river/sitemessage/create.php15
-rw-r--r--mod/riverdashboard/views/default/riverdashboard/css.php55
-rw-r--r--mod/riverdashboard/views/default/riverdashboard/nav.php56
-rw-r--r--mod/riverdashboard/views/default/riverdashboard/newestmembers.php28
-rw-r--r--mod/riverdashboard/views/default/riverdashboard/sitemessage.php97
-rw-r--r--mod/riverdashboard/views/default/riverdashboard/welcome.php17
-rw-r--r--mod/riverdashboard/views/default/widgets/river_widget/edit.php28
-rw-r--r--mod/riverdashboard/views/default/widgets/river_widget/view.php40
-rw-r--r--mod/search/README.txt276
-rw-r--r--mod/search/languages/en.php21
-rw-r--r--mod/search/manifest.xml16
-rw-r--r--mod/search/pages/search/index.php275
-rw-r--r--mod/search/search_hooks.php490
-rw-r--r--mod/search/start.php502
-rw-r--r--mod/search/views/default/search/comments/entity.php55
-rw-r--r--mod/search/views/default/search/css.php67
-rw-r--r--mod/search/views/default/search/entity.php57
-rw-r--r--mod/search/views/default/search/header.php6
-rw-r--r--mod/search/views/default/search/layout.php8
-rw-r--r--mod/search/views/default/search/list.php115
-rw-r--r--mod/search/views/default/search/no_results.php6
-rw-r--r--mod/search/views/default/search/search_box.php43
-rw-r--r--mod/search/views/default/search/startblurb.php6
-rw-r--r--mod/search/views/rss/search/comments/entity.php54
-rw-r--r--mod/search/views/rss/search/entity.php24
-rw-r--r--mod/search/views/rss/search/layout.php6
-rw-r--r--mod/search/views/rss/search/list.php25
m---------mod/simple_faq0
-rw-r--r--mod/simplepie/README19
-rw-r--r--mod/simplepie/actions/simplepie/save_group_feed.php14
-rw-r--r--mod/simplepie/languages/en.php14
-rw-r--r--mod/simplepie/languages/es.php14
-rw-r--r--mod/simplepie/manifest.xml36
-rw-r--r--mod/simplepie/start.php33
-rw-r--r--mod/simplepie/vendors/simplepie.inc15299
-rw-r--r--mod/simplepie/views/default/forms/simplepie/save_group_feed.php39
-rw-r--r--mod/simplepie/views/default/simplepie/css.php17
-rw-r--r--mod/simplepie/views/default/simplepie/group_module.php109
-rw-r--r--mod/simplepie/views/default/widgets/feed_reader/content.php81
-rw-r--r--mod/simplepie/views/default/widgets/feed_reader/edit.php62
-rw-r--r--mod/tagcloud/languages/en.php12
-rw-r--r--mod/tagcloud/manifest.xml16
-rw-r--r--mod/tagcloud/start.php10
-rw-r--r--mod/tagcloud/views/default/widgets/tagcloud/content.php16
-rw-r--r--mod/tagcloud/views/default/widgets/tagcloud/edit.php23
-rw-r--r--mod/thewire/actions/add.php88
-rw-r--r--mod/thewire/actions/delete.php77
-rw-r--r--mod/thewire/activate.php10
-rw-r--r--mod/thewire/add.php28
-rw-r--r--mod/thewire/classes/ElggWire.php40
-rw-r--r--mod/thewire/deactivate.php6
-rw-r--r--mod/thewire/everyone.php24
-rw-r--r--mod/thewire/graphics/river_icon_thewire.gifbin0 -> 365 bytes-rw-r--r--mod/thewire/graphics/thewire_speech_bubble.gifbin286 -> 278 bytes-rw-r--r--mod/thewire/index.php35
-rw-r--r--mod/thewire/languages/en.php139
-rw-r--r--mod/thewire/manifest.xml24
-rw-r--r--mod/thewire/pages/thewire/everyone.php31
-rw-r--r--mod/thewire/pages/thewire/friends.php31
-rw-r--r--mod/thewire/pages/thewire/owner.php39
-rw-r--r--mod/thewire/pages/thewire/previous.php20
-rw-r--r--mod/thewire/pages/thewire/reply.php28
-rw-r--r--mod/thewire/pages/thewire/tag.php35
-rw-r--r--mod/thewire/pages/thewire/thread.php27
-rw-r--r--mod/thewire/pages/thewire/view.php31
-rw-r--r--mod/thewire/readme.txt13
-rw-r--r--mod/thewire/start.php689
-rw-r--r--mod/thewire/tests/regex.php303
-rw-r--r--mod/thewire/upgrades/2012122701-fix_entity_class.php8
-rw-r--r--mod/thewire/views/default/forms/thewire/add.php41
-rw-r--r--mod/thewire/views/default/js/thewire.php86
-rw-r--r--mod/thewire/views/default/object/thewire.php167
-rw-r--r--mod/thewire/views/default/river/object/thewire/create.php46
-rw-r--r--mod/thewire/views/default/thewire/activity_view.php45
-rw-r--r--mod/thewire/views/default/thewire/css.php152
-rw-r--r--mod/thewire/views/default/thewire/forms/add.php54
-rw-r--r--mod/thewire/views/default/thewire/notfound.php21
-rw-r--r--mod/thewire/views/default/thewire/previous.php11
-rw-r--r--mod/thewire/views/default/thewire/profile_status.php70
-rw-r--r--mod/thewire/views/default/thewire/reply.php14
-rw-r--r--mod/thewire/views/default/thewire/scripts/counter.js44
-rw-r--r--mod/thewire/views/default/thewire/sidebar.php9
-rw-r--r--mod/thewire/views/default/thewire/view.php27
-rw-r--r--mod/thewire/views/default/widgets/thewire/content.php30
-rw-r--r--mod/thewire/views/default/widgets/thewire/edit.php36
-rw-r--r--mod/thewire/views/default/widgets/thewire/view.php26
-rw-r--r--mod/thewire/views/rss/object/thewire.php36
-rw-r--r--mod/thewire/views/rss/search/object/thewire/entity.php27
-rw-r--r--mod/tinymce/README.txt10
-rw-r--r--mod/tinymce/activate.php14
-rw-r--r--mod/tinymce/css/elgg_tinymce.css5
-rw-r--r--mod/tinymce/languages/en.php15
-rw-r--r--mod/tinymce/manifest.xml17
-rw-r--r--mod/tinymce/start.php47
-rw-r--r--mod/tinymce/vendor/tinymce/changelog.txt477
-rw-r--r--mod/tinymce/vendor/tinymce/examples/accessibility.html101
-rw-r--r--mod/tinymce/vendor/tinymce/examples/css/content.css105
-rw-r--r--mod/tinymce/vendor/tinymce/examples/css/word.css53
-rw-r--r--mod/tinymce/vendor/tinymce/examples/custom_formats.html111
-rw-r--r--mod/tinymce/vendor/tinymce/examples/full.html101
-rw-r--r--mod/tinymce/vendor/tinymce/examples/index.html10
-rw-r--r--mod/tinymce/vendor/tinymce/examples/lists/image_list.js9
-rw-r--r--mod/tinymce/vendor/tinymce/examples/lists/link_list.js10
-rw-r--r--mod/tinymce/vendor/tinymce/examples/lists/media_list.js14
-rw-r--r--mod/tinymce/vendor/tinymce/examples/lists/template_list.js9
-rw-r--r--mod/tinymce/vendor/tinymce/examples/media/logo.jpgbin0 -> 2729 bytes-rw-r--r--mod/tinymce/vendor/tinymce/examples/media/logo_over.jpgbin0 -> 6473 bytes-rw-r--r--mod/tinymce/vendor/tinymce/examples/media/sample.avibin0 -> 82944 bytes-rw-r--r--mod/tinymce/vendor/tinymce/examples/media/sample.dcrbin0 -> 6774 bytes-rw-r--r--mod/tinymce/vendor/tinymce/examples/media/sample.flvbin0 -> 88722 bytes-rw-r--r--mod/tinymce/vendor/tinymce/examples/media/sample.movbin0 -> 55622 bytes-rw-r--r--mod/tinymce/vendor/tinymce/examples/media/sample.ram1
-rw-r--r--mod/tinymce/vendor/tinymce/examples/media/sample.rmbin0 -> 17846 bytes-rw-r--r--mod/tinymce/vendor/tinymce/examples/media/sample.swfbin0 -> 6118 bytes-rw-r--r--mod/tinymce/vendor/tinymce/examples/menu.html18
-rw-r--r--mod/tinymce/vendor/tinymce/examples/simple.html47
-rw-r--r--mod/tinymce/vendor/tinymce/examples/skins.html216
-rw-r--r--mod/tinymce/vendor/tinymce/examples/templates/layout1.htm15
-rw-r--r--mod/tinymce/vendor/tinymce/examples/templates/snippet1.htm1
-rw-r--r--mod/tinymce/vendor/tinymce/examples/word.html72
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/ar.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/az.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/be.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/bg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/bn.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/br.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/bs.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/ca.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/ch.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/cn.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/cs.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/cy.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/da.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/de.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/dv.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/el.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/en.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/eo.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/es.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/et.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/eu.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/fa.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/fi.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/fr.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/gl.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/gu.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/he.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/hi.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/hr.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/hu.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/hy.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/ia.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/id.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/is.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/it.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/ja.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/ka.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/kl.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/km.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/ko.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/kz.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/lb.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/lt.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/lv.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/mk.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/ml.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/mn.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/ms.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/my.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/nb.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/nl.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/nn.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/no.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/pl.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/ps.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/pt.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/ro.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/ru.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/sc.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/se.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/si.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/sk.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/sl.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/sq.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/sr.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/sv.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/sy.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/ta.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/te.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/th.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/tn.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/tr.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/tt.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/tw.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/uk.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/ur.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/vi.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/zh-cn.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/zh-tw.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/zh.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/zu.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/license.txt504
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/css/advhr.css5
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/editor_plugin_src.js57
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/js/rule.js43
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/ar_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/az_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/be_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/bg_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/bn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/br_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/bs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/ca_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/ch_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/cs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/cy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/da_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/de_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/dv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/el_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/en_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/eo_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/es_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/et_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/eu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/fa_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/fi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/fr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/gl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/gu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/he_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/hi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/hr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/hu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/hy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/ia_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/id_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/is_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/it_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/ja_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/ka_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/kl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/km_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/ko_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/kz_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/lb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/lt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/lv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/mk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/ml_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/mn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/ms_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/my_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/nb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/nl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/nn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/no_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/pl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/ps_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/pt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/ro_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/ru_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/sc_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/se_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/si_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/sk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/sl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/sq_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/sr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/sv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/sy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/ta_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/te_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/th_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/tn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/tr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/tt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/uk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/ur_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/vi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/zh-cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/zh-tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/zh_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/zu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/rule.htm58
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/css/advimage.css13
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/editor_plugin_src.js50
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/image.htm235
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/img/sample.gifbin0 -> 1624 bytes-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/js/image.js464
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/ar_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/az_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/be_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/bg_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/bn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/br_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/bs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/ca_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/ch_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/cs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/cy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/da_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/de_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/dv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/el_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/en_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/eo_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/es_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/et_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/eu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/fa_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/fi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/fr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/gl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/gu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/he_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/hi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/hr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/hu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/hy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/ia_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/id_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/is_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/it_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/ja_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/ka_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/kl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/km_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/ko_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/kz_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/lb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/lt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/lv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/mk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/ml_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/mn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/ms_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/my_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/nb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/nl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/nn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/no_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/pl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/ps_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/pt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/ro_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/ru_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/sc_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/se_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/si_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/sk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/sl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/sq_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/sr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/sv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/sy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/ta_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/te_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/th_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/tn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/tr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/tt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/uk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/ur_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/vi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/zh-cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/zh-tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/zh_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/zu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/css/advlink.css8
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/editor_plugin_src.js61
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/js/advlink.js543
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/ar_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/az_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/be_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/bg_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/bn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/br_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/bs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/ca_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/ch_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/cs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/cy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/da_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/de_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/dv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/el_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/en_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/eo_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/es_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/et_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/eu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/fa_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/fi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/fr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/gl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/gu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/he_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/hi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/hr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/hu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/hy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/ia_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/id_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/is_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/it_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/ja_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/ka_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/kl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/km_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/ko_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/kz_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/lb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/lt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/lv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/mk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/ml_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/mn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/ms_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/my_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/nb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/nl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/nn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/no_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/pl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/ps_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/pt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/ro_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/ru_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/sc_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/se_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/si_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/sk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/sl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/sq_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/sr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/sv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/sy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/ta_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/te_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/th_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/tn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/tr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/tt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/uk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/ur_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/vi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/zh-cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/zh-tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/zh_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/zu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/link.htm338
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlist/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlist/editor_plugin_src.js176
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/autolink/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/autolink/editor_plugin_src.js184
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/autoresize/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/autoresize/editor_plugin_src.js119
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/autosave/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/autosave/editor_plugin_src.js433
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/bbcode/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/bbcode/editor_plugin_src.js120
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/contextmenu/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/contextmenu/editor_plugin_src.js163
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/directionality/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/directionality/editor_plugin_src.js85
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/editor_plugin_src.js43
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/emotions.htm42
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-cool.gifbin0 -> 354 bytes-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-cry.gifbin0 -> 329 bytes-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-embarassed.gifbin0 -> 331 bytes-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-foot-in-mouth.gifbin0 -> 342 bytes-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-frown.gifbin0 -> 340 bytes-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-innocent.gifbin0 -> 336 bytes-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-kiss.gifbin0 -> 338 bytes-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-laughing.gifbin0 -> 343 bytes-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-money-mouth.gifbin0 -> 321 bytes-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-sealed.gifbin0 -> 323 bytes-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-smile.gifbin0 -> 344 bytes-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-surprised.gifbin0 -> 338 bytes-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-tongue-out.gifbin0 -> 328 bytes-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-undecided.gifbin0 -> 337 bytes-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-wink.gifbin0 -> 350 bytes-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-yell.gifbin0 -> 336 bytes-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/js/emotions.js43
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/ar_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/az_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/be_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/bg_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/bn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/br_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/bs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/ca_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/ch_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/cs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/cy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/da_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/de_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/dv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/el_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/en_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/eo_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/es_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/et_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/eu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/fa_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/fi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/fr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/gl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/gu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/he_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/hi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/hr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/hu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/hy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/ia_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/id_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/is_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/it_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/ja_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/ka_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/kl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/km_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/ko_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/kz_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/lb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/lt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/lv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/mk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/ml_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/mn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/ms_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/my_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/nb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/nl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/nn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/no_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/pl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/ps_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/pt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/ro_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/ru_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/sc_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/se_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/si_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/sk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/sl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/sq_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/sr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/sv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/sy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/ta_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/te_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/th_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/tn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/tr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/tt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/uk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/ur_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/vi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/zh-cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/zh-tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/zh_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/zu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/example/dialog.htm22
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/example/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/example/editor_plugin_src.js84
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/example/img/example.gifbin0 -> 87 bytes-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/example/js/dialog.js19
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/example/langs/en.js3
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/example/langs/en_dlg.js3
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/example_dependency/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/example_dependency/editor_plugin_src.js50
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/css/fullpage.css143
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/editor_plugin_src.js405
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/fullpage.htm259
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/js/fullpage.js232
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/ar_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/az_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/be_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/bg_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/bn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/br_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/bs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/ca_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/ch_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/cs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/cy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/da_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/de_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/dv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/el_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/en_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/eo_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/es_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/et_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/eu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/fa_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/fi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/fr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/gl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/gu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/he_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/hi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/hr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/hu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/hy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/ia_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/id_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/is_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/it_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/ja_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/ka_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/kl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/km_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/ko_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/kz_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/lb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/lt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/lv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/mk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/ml_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/mn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/ms_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/my_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/nb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/nl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/nn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/no_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/pl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/ps_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/pt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/ro_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/ru_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/sc_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/se_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/si_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/sk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/sl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/sq_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/sr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/sv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/sy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/ta_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/te_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/th_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/tn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/tr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/tt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/uk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/ur_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/vi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/zh-cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/zh-tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/zh_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/zu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullscreen/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullscreen/editor_plugin_src.js159
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullscreen/fullscreen.htm110
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/iespell/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/iespell/editor_plugin_src.js54
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/inlinepopups/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/inlinepopups/editor_plugin_src.js699
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/alert.gifbin0 -> 810 bytes-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/button.gifbin0 -> 272 bytes-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/buttons.gifbin0 -> 1195 bytes-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/confirm.gifbin0 -> 907 bytes-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/corners.gifbin0 -> 909 bytes-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/horizontal.gifbin0 -> 769 bytes-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/vertical.gifbin0 -> 84 bytes-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/window.css90
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/inlinepopups/template.htm387
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/insertdatetime/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/insertdatetime/editor_plugin_src.js83
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/layer/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/layer/editor_plugin_src.js262
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/legacyoutput/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/legacyoutput/editor_plugin_src.js139
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/lists/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/lists/editor_plugin_src.js955
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/css/media.css17
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/editor_plugin_src.js898
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/js/embed.js73
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/js/media.js513
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/ar_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/az_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/be_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/bg_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/bn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/br_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/bs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/ca_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/ch_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/cs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/cy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/da_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/de_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/dv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/el_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/en_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/eo_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/es_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/et_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/eu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/fa_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/fi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/fr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/gl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/gu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/he_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/hi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/hr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/hu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/hy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/ia_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/id_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/is_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/it_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/ja_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/ka_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/kl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/km_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/ko_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/kz_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/lb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/lt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/lv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/mk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/ml_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/mn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/ms_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/my_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/nb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/nl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/nn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/no_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/pl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/ps_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/pt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/ro_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/ru_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/sc_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/se_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/si_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/sk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/sl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/sq_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/sr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/sv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/sy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/ta_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/te_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/th_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/tn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/tr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/tt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/uk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/ur_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/vi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/zh-cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/zh-tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/zh_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/zu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/media.htm922
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/moxieplayer.swfbin0 -> 19980 bytes-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/nonbreaking/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/nonbreaking/editor_plugin_src.js54
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/noneditable/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/noneditable/editor_plugin_src.js537
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/pagebreak/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/pagebreak/editor_plugin_src.js74
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/editor_plugin_src.js885
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/js/pastetext.js36
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/js/pasteword.js51
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/ar_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/az_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/be_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/bg_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/bn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/br_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/bs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/ca_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/ch_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/cs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/cy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/da_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/de_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/dv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/el_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/en_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/eo_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/es_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/et_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/eu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/fa_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/fi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/fr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/gl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/gu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/he_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/hi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/hr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/hu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/hy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/ia_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/id_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/is_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/it_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/ja_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/ka_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/kl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/km_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/ko_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/kz_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/lb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/lt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/lv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/mk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/ml_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/mn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/ms_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/my_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/nb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/nl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/nn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/no_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/pl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/ps_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/pt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/ro_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/ru_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/sc_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/se_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/si_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/sk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/sl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/sq_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/sr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/sv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/sy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/ta_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/te_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/th_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/tn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/tr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/tt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/uk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/ur_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/vi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/zh-cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/zh-tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/zh_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/zu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/pastetext.htm27
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/pasteword.htm21
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/preview/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/preview/editor_plugin_src.js53
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/preview/example.html28
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/preview/jscripts/embed.js73
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/preview/preview.html17
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/print/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/print/editor_plugin_src.js34
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/save/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/save/editor_plugin_src.js101
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/css/searchreplace.css6
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/editor_plugin_src.js61
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/js/searchreplace.js142
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/ar_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/az_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/be_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/bg_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/bn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/br_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/bs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/ca_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/ch_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/cs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/cy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/da_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/de_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/dv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/el_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/en_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/eo_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/es_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/et_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/eu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/fa_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/fi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/fr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/gl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/gu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/he_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/hi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/hr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/hu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/hy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/ia_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/id_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/is_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/it_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/ja_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/ka_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/kl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/km_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/ko_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/kz_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/lb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/lt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/lv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/mk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/ml_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/mn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/ms_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/my_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/nb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/nl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/nn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/no_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/pl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/ps_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/pt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/ro_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/ru_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/sc_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/se_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/si_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/sk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/sl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/sq_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/sr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/sv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/sy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/ta_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/te_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/th_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/tn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/tr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/tt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/uk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/ur_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/vi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/zh-cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/zh-tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/zh_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/zu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/searchreplace.htm100
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/spellchecker/css/content.css1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/spellchecker/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/spellchecker/editor_plugin_src.js436
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/spellchecker/img/wline.gifbin0 -> 46 bytes-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/css/props.css14
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/editor_plugin_src.js71
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/js/props.js709
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/ar_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/az_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/be_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/bg_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/bn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/br_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/bs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/ca_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/ch_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/cs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/cy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/da_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/de_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/dv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/el_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/en_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/eo_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/es_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/et_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/eu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/fa_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/fi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/fr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/gl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/gu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/he_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/hi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/hr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/hu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/hy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/ia_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/id_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/is_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/it_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/ja_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/ka_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/kl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/km_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/ko_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/kz_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/lb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/lt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/lv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/mk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/ml_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/mn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/ms_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/my_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/nb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/nl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/nn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/no_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/pl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/ps_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/pt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/ro_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/ru_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/sc_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/se_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/si_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/sk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/sl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/sq_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/sr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/sv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/sy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/ta_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/te_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/th_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/tn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/tr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/tt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/uk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/ur_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/vi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/zh-cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/zh-tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/zh_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/zu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/props.htm845
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/readme.txt19
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/tabfocus/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/tabfocus/editor_plugin_src.js122
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/cell.htm180
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/css/cell.css17
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/css/row.css25
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/css/table.css13
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/editor_plugin_src.js1456
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/js/cell.js319
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/js/merge_cells.js27
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/js/row.js254
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/js/table.js501
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/ar_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/az_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/be_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/bg_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/bn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/br_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/bs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/ca_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/ch_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/cs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/cy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/da_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/de_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/dv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/el_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/en_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/eo_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/es_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/et_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/eu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/fa_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/fi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/fr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/gl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/gu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/he_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/hi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/hr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/hu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/hy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/ia_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/id_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/is_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/it_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/ja_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/ka_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/kl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/km_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/ko_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/kz_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/lb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/lt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/lv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/mk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/ml_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/mn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/ms_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/my_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/nb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/nl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/nn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/no_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/pl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/ps_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/pt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/ro_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/ru_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/sc_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/se_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/si_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/sk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/sl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/sq_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/sr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/sv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/sy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/ta_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/te_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/th_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/tn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/tr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/tt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/uk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/ur_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/vi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/zh-cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/zh-tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/zh_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/zu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/merge_cells.htm32
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/row.htm158
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/table.htm188
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/blank.htm12
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/css/template.css23
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/editor_plugin_src.js159
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/js/template.js106
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/ar_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/az_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/be_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/bg_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/bn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/br_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/bs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/ca_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/ch_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/cs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/cy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/da_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/de_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/dv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/el_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/en_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/eo_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/es_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/et_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/eu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/fa_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/fi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/fr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/gl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/gu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/he_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/hi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/hr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/hu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/hy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/ia_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/id_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/is_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/it_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/ja_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/ka_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/kl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/km_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/ko_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/kz_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/lb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/lt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/lv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/mk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/ml_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/mn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/ms_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/my_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/nb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/nl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/nn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/no_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/pl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/ps_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/pt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/ro_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/ru_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/sc_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/se_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/si_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/sk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/sl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/sq_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/sr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/sv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/sy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/ta_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/te_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/th_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/tn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/tr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/tt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/uk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/ur_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/vi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/zh-cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/zh-tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/zh_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/zu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/template.htm31
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/visualblocks/css/visualblocks.css21
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/visualblocks/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/visualblocks/editor_plugin_src.js63
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/visualchars/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/visualchars/editor_plugin_src.js83
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/wordcount/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/wordcount/editor_plugin_src.js122
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/abbr.htm142
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/acronym.htm142
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/attributes.htm149
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/cite.htm142
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/css/attributes.css11
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/css/popup.css9
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/del.htm162
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/editor_plugin_src.js132
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/ins.htm162
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/abbr.js28
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/acronym.js28
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/attributes.js111
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/cite.js28
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/del.js53
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/element_common.js229
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/ins.js53
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/ar_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/az_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/be_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/bg_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/bn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/br_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/bs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/ca_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/ch_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/cs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/cy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/da_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/de_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/dv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/el_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/en_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/eo_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/es_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/et_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/eu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/fa_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/fi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/fr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/gl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/gu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/he_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/hi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/hr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/hu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/hy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/ia_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/id_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/is_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/it_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/ja_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/ka_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/kl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/km_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/ko_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/kz_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/lb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/lt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/lv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/mk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/ml_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/mn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/ms_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/my_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/nb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/nl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/nn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/no_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/pl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/ps_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/pt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/ro_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/ru_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/sc_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/se_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/si_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/sk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/sl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/sq_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/sr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/sv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/sy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/ta_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/te_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/th_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/tn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/tr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/tt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/uk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/ur_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/vi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/zh-cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/zh-tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/zh_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/zu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/about.htm52
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/anchor.htm26
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/charmap.htm55
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/color_picker.htm70
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/editor_template.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/editor_template_src.js1490
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/image.htm80
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/img/colorpicker.jpgbin0 -> 2584 bytes-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/img/flash.gifbin0 -> 239 bytes-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/img/icons.gifbin0 -> 11982 bytes-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/img/iframe.gifbin0 -> 600 bytes-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/img/pagebreak.gifbin0 -> 325 bytes-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/img/quicktime.gifbin0 -> 301 bytes-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/img/realmedia.gifbin0 -> 439 bytes-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/img/shockwave.gifbin0 -> 384 bytes-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/img/trans.gifbin0 -> 43 bytes-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/img/video.gifbin0 -> 597 bytes-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/img/windowsmedia.gifbin0 -> 415 bytes-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/js/about.js73
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/js/anchor.js56
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/js/charmap.js363
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/js/color_picker.js345
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/js/image.js253
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/js/link.js159
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/js/source_editor.js78
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ar.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ar_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/az.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/az_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/be.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/be_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/bg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/bg_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/bn.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/bn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/br.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/br_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/bs.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/bs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ca.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ca_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ch.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ch_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/cn.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/cs.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/cs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/cy.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/cy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/da.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/da_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/de.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/de_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/dv.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/dv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/el.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/el_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/en.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/en_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/eo.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/eo_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/es.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/es_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/et.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/et_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/eu.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/eu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/fa.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/fa_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/fi.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/fi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/fr.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/fr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/gl.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/gl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/gu.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/gu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/he.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/he_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/hi.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/hi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/hr.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/hr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/hu.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/hu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/hy.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/hy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ia.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ia_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/id.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/id_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/is.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/is_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/it.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/it_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ja.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ja_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ka.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ka_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/kl.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/kl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/km.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/km_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ko.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ko_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/kz.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/kz_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/lb.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/lb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/lt.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/lt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/lv.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/lv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/mk.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/mk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ml.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ml_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/mn.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/mn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ms.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ms_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/my.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/my_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/nb.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/nb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/nl.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/nl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/nn.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/nn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/no.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/no_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/pl.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/pl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ps.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ps_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/pt.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/pt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ro.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ro_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ru.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ru_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/sc.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/sc_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/se.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/se_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/si.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/si_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/sk.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/sk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/sl.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/sl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/sq.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/sq_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/sr.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/sr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/sv.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/sv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/sy.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/sy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ta.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ta_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/te.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/te_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/th.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/th_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/tn.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/tn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/tr.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/tr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/tt.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/tt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/tw.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/uk.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/uk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ur.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ur_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/vi.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/vi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/zh-cn.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/zh-cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/zh-tw.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/zh-tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/zh.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/zh_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/zu.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/zu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/link.htm57
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/shortcuts.htm47
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/content.css50
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/dialog.css118
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/buttons.pngbin0 -> 3133 bytes-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/items.gifbin0 -> 64 bytes-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/menu_arrow.gifbin0 -> 68 bytes-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/menu_check.gifbin0 -> 70 bytes-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/progress.gifbin0 -> 1787 bytes-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/tabs.gifbin0 -> 1322 bytes-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/ui.css219
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/highcontrast/content.css24
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/highcontrast/dialog.css106
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/highcontrast/ui.css106
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/content.css48
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/dialog.css118
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg.pngbin0 -> 2766 bytes-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_black.pngbin0 -> 651 bytes-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_silver.pngbin0 -> 2084 bytes-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/ui.css222
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/ui_black.css8
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/ui_silver.css5
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/source_editor.htm25
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/editor_template.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/editor_template_src.js84
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/img/icons.gifbin0 -> 806 bytes-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/ar.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/az.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/be.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/bg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/bn.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/br.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/bs.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/ca.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/ch.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/cn.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/cs.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/cy.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/da.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/de.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/dv.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/el.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/en.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/eo.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/es.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/et.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/eu.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/fa.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/fi.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/fr.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/gl.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/gu.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/he.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/hi.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/hr.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/hu.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/hy.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/ia.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/id.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/is.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/it.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/ja.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/ka.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/kl.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/km.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/ko.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/kz.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/lb.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/lt.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/lv.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/mk.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/ml.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/mn.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/ms.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/my.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/nb.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/nl.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/nn.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/no.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/pl.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/ps.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/pt.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/ro.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/ru.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/sc.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/se.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/si.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/sk.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/sl.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/sq.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/sr.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/sv.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/sy.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/ta.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/te.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/th.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/tn.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/tr.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/tt.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/tw.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/uk.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/ur.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/vi.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/zh-cn.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/zh-tw.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/zh.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/zu.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/skins/default/content.css25
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/skins/default/ui.css32
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/skins/o2k7/content.css17
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/skins/o2k7/img/button_bg.pngbin0 -> 5102 bytes-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/skins/o2k7/ui.css35
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/tiny_mce.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/tiny_mce_popup.js5
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/tiny_mce_src.js19030
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/utils/editable_selects.js70
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/utils/form_utils.js210
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/utils/mctabs.js162
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/utils/validate.js252
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/ar.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/az.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/be.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/bg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/bn.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/br.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/bs.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/ca.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/ch.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/cn.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/cs.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/cy.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/da.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/de.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/dv.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/el.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/en.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/eo.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/es.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/et.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/eu.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/fa.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/fi.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/fr.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/gl.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/gu.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/he.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/hi.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/hr.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/hu.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/hy.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/ia.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/id.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/is.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/it.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/ja.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/ka.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/kl.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/km.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/ko.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/kz.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/lb.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/lt.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/lv.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/mk.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/ml.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/mn.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/ms.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/my.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/nb.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/nl.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/nn.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/no.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/pl.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/ps.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/pt.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/ro.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/ru.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/sc.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/se.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/si.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/sk.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/sl.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/sq.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/sr.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/sv.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/sy.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/ta.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/te.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/th.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/tn.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/tr.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/tt.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/tw.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/uk.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/ur.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/vi.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/zh-cn.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/zh-tw.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/zh.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/zu.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/ar_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/az_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/be_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/bg_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/bn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/br_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/bs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/ca_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/ch_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/cs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/cy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/da_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/de_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/dv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/el_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/en_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/eo_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/es_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/et_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/eu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/fa_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/fi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/fr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/gl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/gu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/he_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/hi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/hr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/hu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/hy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/ia_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/id_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/is_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/it_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/ja_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/ka_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/kl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/km_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/ko_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/kz_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/lb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/lt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/lv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/mk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/ml_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/mn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/ms_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/my_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/nb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/nl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/nn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/no_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/pl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/ps_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/pt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/ro_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/ru_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/sc_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/se_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/si_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/sk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/sl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/sq_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/sr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/sv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/sy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/ta_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/te_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/th_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/tn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/tr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/tt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/uk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/ur_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/vi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/zh-cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/zh-tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/zh_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/zu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/ar_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/az_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/be_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/bg_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/bn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/br_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/bs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/ca_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/ch_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/cs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/cy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/da_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/de_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/dv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/el_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/en_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/eo_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/es_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/et_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/eu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/fa_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/fi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/fr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/gl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/gu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/he_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/hi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/hr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/hu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/hy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/ia_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/id_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/is_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/it_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/ja_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/ka_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/kl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/km_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/ko_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/kz_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/lb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/lt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/lv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/mk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/ml_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/mn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/ms_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/my_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/nb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/nl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/nn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/no_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/pl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/ps_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/pt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/ro_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/ru_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/sc_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/se_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/si_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/sk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/sl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/sq_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/sr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/sv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/sy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/ta_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/te_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/th_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/tn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/tr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/tt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/uk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/ur_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/vi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/zh-cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/zh-tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/zh_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/zu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/ar_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/az_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/be_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/bg_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/bn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/br_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/bs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/ca_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/ch_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/cs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/cy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/da_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/de_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/dv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/el_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/en_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/eo_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/es_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/et_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/eu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/fa_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/fi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/fr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/gl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/gu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/he_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/hi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/hr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/hu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/hy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/ia_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/id_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/is_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/it_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/ja_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/ka_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/kl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/km_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/ko_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/kz_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/lb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/lt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/lv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/mk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/ml_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/mn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/ms_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/my_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/nb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/nl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/nn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/no_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/pl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/ps_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/pt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/ro_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/ru_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/sc_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/se_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/si_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/sk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/sl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/sq_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/sr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/sv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/sy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/ta_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/te_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/th_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/tn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/tr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/tt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/uk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/ur_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/vi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/zh-cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/zh-tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/zh_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/zu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/ar_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/az_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/be_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/bg_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/bn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/br_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/bs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/ca_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/ch_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/cs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/cy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/da_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/de_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/dv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/el_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/en_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/eo_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/es_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/et_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/eu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/fa_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/fi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/fr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/gl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/gu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/he_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/hi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/hr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/hu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/hy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/ia_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/id_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/is_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/it_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/ja_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/ka_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/kl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/km_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/ko_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/kz_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/lb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/lt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/lv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/mk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/ml_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/mn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/ms_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/my_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/nb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/nl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/nn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/no_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/pl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/ps_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/pt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/ro_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/ru_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/sc_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/se_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/si_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/sk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/sl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/sq_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/sr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/sv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/sy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/ta_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/te_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/th_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/tn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/tr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/tt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/uk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/ur_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/vi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/zh-cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/zh-tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/zh_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/zu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/ar_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/az_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/be_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/bg_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/bn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/br_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/bs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/ca_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/ch_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/cs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/cy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/da_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/de_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/dv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/el_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/en_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/eo_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/es_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/et_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/eu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/fa_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/fi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/fr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/gl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/gu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/he_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/hi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/hr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/hu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/hy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/ia_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/id_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/is_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/it_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/ja_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/ka_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/kl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/km_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/ko_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/kz_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/lb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/lt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/lv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/mk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/ml_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/mn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/ms_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/my_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/nb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/nl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/nn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/no_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/pl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/ps_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/pt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/ro_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/ru_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/sc_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/se_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/si_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/sk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/sl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/sq_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/sr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/sv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/sy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/ta_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/te_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/th_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/tn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/tr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/tt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/uk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/ur_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/vi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/zh-cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/zh-tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/zh_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/zu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/ar_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/az_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/be_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/bg_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/bn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/br_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/bs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/ca_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/ch_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/cs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/cy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/da_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/de_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/dv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/el_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/en_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/eo_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/es_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/et_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/eu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/fa_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/fi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/fr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/gl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/gu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/he_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/hi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/hr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/hu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/hy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/ia_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/id_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/is_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/it_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/ja_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/ka_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/kl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/km_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/ko_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/kz_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/lb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/lt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/lv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/mk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/ml_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/mn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/ms_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/my_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/nb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/nl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/nn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/no_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/pl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/ps_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/pt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/ro_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/ru_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/sc_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/se_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/si_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/sk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/sl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/sq_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/sr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/sv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/sy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/ta_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/te_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/th_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/tn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/tr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/tt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/uk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/ur_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/vi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/zh-cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/zh-tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/zh_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/zu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/ar_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/az_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/be_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/bg_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/bn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/br_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/bs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/ca_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/ch_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/cs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/cy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/da_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/de_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/dv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/el_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/en_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/eo_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/es_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/et_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/eu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/fa_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/fi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/fr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/gl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/gu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/he_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/hi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/hr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/hu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/hy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/ia_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/id_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/is_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/it_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/ja_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/ka_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/kl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/km_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/ko_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/kz_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/lb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/lt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/lv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/mk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/ml_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/mn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/ms_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/my_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/nb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/nl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/nn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/no_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/pl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/ps_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/pt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/ro_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/ru_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/sc_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/se_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/si_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/sk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/sl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/sq_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/sr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/sv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/sy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/ta_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/te_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/th_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/tn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/tr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/tt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/uk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/ur_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/vi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/zh-cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/zh-tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/zh_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/zu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/ar_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/az_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/be_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/bg_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/bn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/br_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/bs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/ca_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/ch_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/cs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/cy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/da_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/de_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/dv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/el_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/en_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/eo_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/es_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/et_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/eu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/fa_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/fi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/fr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/gl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/gu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/he_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/hi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/hr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/hu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/hy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/ia_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/id_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/is_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/it_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/ja_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/ka_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/kl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/km_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/ko_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/kz_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/lb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/lt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/lv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/mk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/ml_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/mn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/ms_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/my_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/nb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/nl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/nn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/no_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/pl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/ps_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/pt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/ro_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/ru_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/sc_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/se_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/si_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/sk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/sl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/sq_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/sr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/sv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/sy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/ta_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/te_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/th_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/tn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/tr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/tt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/uk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/ur_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/vi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/zh-cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/zh-tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/zh_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/zu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/ar_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/az_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/be_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/bg_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/bn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/br_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/bs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/ca_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/ch_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/cs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/cy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/da_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/de_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/dv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/el_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/en_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/eo_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/es_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/et_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/eu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/fa_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/fi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/fr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/gl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/gu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/he_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/hi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/hr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/hu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/hy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/ia_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/id_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/is_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/it_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/ja_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/ka_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/kl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/km_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/ko_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/kz_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/lb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/lt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/lv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/mk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/ml_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/mn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/ms_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/my_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/nb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/nl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/nn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/no_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/pl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/ps_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/pt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/ro_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/ru_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/sc_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/se_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/si_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/sk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/sl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/sq_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/sr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/sv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/sy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/ta_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/te_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/th_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/tn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/tr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/tt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/uk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/ur_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/vi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/zh-cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/zh-tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/zh_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/zu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/ar_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/az_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/be_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/bg_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/bn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/br_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/bs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/ca_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/ch_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/cs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/cy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/da_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/de_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/dv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/el_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/en_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/eo_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/es_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/et_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/eu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/fa_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/fi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/fr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/gl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/gu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/he_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/hi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/hr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/hu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/hy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/ia_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/id_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/is_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/it_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/ja_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/ka_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/kl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/km_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/ko_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/kz_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/lb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/lt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/lv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/mk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/ml_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/mn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/ms_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/my_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/nb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/nl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/nn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/no_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/pl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/ps_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/pt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/ro_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/ru_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/sc_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/se_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/si_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/sk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/sl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/sq_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/sr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/sv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/sy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/ta_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/te_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/th_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/tn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/tr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/tt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/uk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/ur_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/vi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/zh-cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/zh-tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/zh_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/zu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/ar_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/az_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/be_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/bg_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/bn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/br_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/bs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/ca_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/ch_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/cs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/cy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/da_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/de_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/dv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/el_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/en_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/eo_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/es_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/et_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/eu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/fa_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/fi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/fr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/gl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/gu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/he_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/hi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/hr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/hu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/hy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/ia_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/id_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/is_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/it_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/ja_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/ka_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/kl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/km_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/ko_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/kz_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/lb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/lt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/lv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/mk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/ml_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/mn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/ms_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/my_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/nb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/nl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/nn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/no_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/pl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/ps_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/pt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/ro_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/ru_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/sc_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/se_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/si_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/sk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/sl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/sq_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/sr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/sv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/sy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/ta_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/te_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/th_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/tn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/tr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/tt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/uk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/ur_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/vi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/zh-cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/zh-tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/zh_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/zu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/ar_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/az_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/be_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/bg_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/bn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/br_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/bs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/ca_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/ch_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/cs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/cy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/da_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/de_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/dv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/el_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/en_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/eo_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/es_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/et_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/eu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/fa_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/fi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/fr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/gl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/gu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/he_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/hi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/hr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/hu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/hy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/ia_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/id_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/is_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/it_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/ja_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/ka_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/kl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/km_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/ko_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/kz_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/lb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/lt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/lv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/mk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/ml_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/mn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/ms_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/my_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/nb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/nl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/nn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/no_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/pl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/ps_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/pt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/ro_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/ru_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/sc_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/se_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/si_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/sk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/sl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/sq_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/sr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/sv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/sy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/ta_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/te_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/th_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/tn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/tr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/tt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/uk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/ur_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/vi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/zh-cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/zh-tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/zh_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/zu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ar.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ar_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/az.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/az_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/be.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/be_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/bg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/bg_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/bn.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/bn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/br.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/br_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/bs.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/bs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ca.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ca_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ch.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ch_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/cn.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/cs.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/cs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/cy.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/cy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/da.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/da_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/de.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/de_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/dv.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/dv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/el.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/el_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/en.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/en_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/eo.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/eo_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/es.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/es_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/et.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/et_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/eu.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/eu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/fa.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/fa_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/fi.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/fi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/fr.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/fr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/gl.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/gl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/gu.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/gu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/he.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/he_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/hi.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/hi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/hr.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/hr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/hu.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/hu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/hy.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/hy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ia.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ia_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/id.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/id_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/is.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/is_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/it.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/it_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ja.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ja_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ka.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ka_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/kl.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/kl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/km.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/km_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ko.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ko_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/kz.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/kz_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/lb.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/lb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/lt.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/lt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/lv.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/lv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/mk.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/mk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ml.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ml_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/mn.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/mn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ms.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ms_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/my.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/my_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/nb.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/nb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/nl.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/nl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/nn.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/nn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/no.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/no_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/pl.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/pl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ps.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ps_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/pt.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/pt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ro.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ro_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ru.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ru_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/sc.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/sc_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/se.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/se_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/si.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/si_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/sk.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/sk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/sl.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/sl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/sq.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/sq_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/sr.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/sr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/sv.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/sv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/sy.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/sy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ta.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ta_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/te.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/te_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/th.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/th_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/tn.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/tn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/tr.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/tr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/tt.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/tt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/tw.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/uk.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/uk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ur.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ur_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/vi.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/vi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/zh-cn.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/zh-cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/zh-tw.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/zh-tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/zh.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/zh_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/zu.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/zu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/ar.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/az.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/be.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/bg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/bn.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/br.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/bs.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/ca.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/ch.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/cn.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/cs.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/cy.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/da.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/de.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/dv.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/el.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/en.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/eo.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/es.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/et.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/eu.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/fa.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/fi.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/fr.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/gl.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/gu.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/he.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/hi.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/hr.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/hu.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/hy.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/ia.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/id.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/is.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/it.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/ja.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/ka.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/kl.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/km.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/ko.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/kz.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/lb.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/lt.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/lv.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/mk.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/ml.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/mn.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/ms.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/my.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/nb.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/nl.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/nn.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/no.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/pl.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/ps.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/pt.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/ro.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/ru.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/sc.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/se.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/si.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/sk.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/sl.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/sq.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/sr.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/sv.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/sy.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/ta.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/te.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/th.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/tn.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/tr.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/tt.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/tw.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/uk.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/ur.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/vi.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/zh-cn.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/zh-tw.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/zh.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/zu.js1
-rw-r--r--mod/tinymce/views/default/js/tinymce.php102
-rw-r--r--mod/tinymce/views/default/tinymce/css.php31
-rw-r--r--mod/tinymce/views/default/tinymce/embed_custom_insert_js.php14
-rw-r--r--mod/tinymce/views/default/tinymce/init.php7
m---------mod/translation_editor0
-rw-r--r--mod/twitter_api/actions/twitter_api/interstitial_settings.php53
-rw-r--r--mod/twitter_api/graphics/sign-in-with-twitter-d.pngbin0 -> 3306 bytes-rw-r--r--mod/twitter_api/graphics/sign-in-with-twitter-l.pngbin0 -> 3062 bytes-rw-r--r--mod/twitter_api/graphics/sign_in_with_twitter.gifbin0 -> 3028 bytes-rw-r--r--mod/twitter_api/languages/en.php62
-rw-r--r--mod/twitter_api/lib/twitter_api.php383
-rw-r--r--mod/twitter_api/manifest.xml29
-rw-r--r--mod/twitter_api/pages/twitter_api/interstitial.php19
-rw-r--r--mod/twitter_api/start.php174
-rw-r--r--mod/twitter_api/vendors/twitteroauth/LICENSE22
-rw-r--r--mod/twitter_api/vendors/twitteroauth/OAuth.php872
-rw-r--r--mod/twitter_api/vendors/twitteroauth/README114
-rw-r--r--mod/twitter_api/vendors/twitteroauth/twitterOAuth.php241
-rw-r--r--mod/twitter_api/views/default/forms/twitter_api/interstitial_settings.php67
-rw-r--r--mod/twitter_api/views/default/plugins/twitter_api/settings.php65
-rw-r--r--mod/twitter_api/views/default/plugins/twitter_api/usersettings.php37
-rw-r--r--mod/twitter_api/views/default/twitter_api/css.php13
-rw-r--r--mod/twitter_api/views/default/twitter_api/js.php16
-rw-r--r--mod/twitter_api/views/default/twitter_api/login.php17
-rw-r--r--mod/twitter_api/views/default/twitter_api/metatags.php19
m---------mod/upgrade-tools0
-rw-r--r--mod/uservalidationbyemail/actions/bulk_action.php18
-rw-r--r--mod/uservalidationbyemail/actions/delete.php51
-rw-r--r--mod/uservalidationbyemail/actions/email/confirm.php46
-rw-r--r--mod/uservalidationbyemail/actions/resend_validation.php51
-rw-r--r--mod/uservalidationbyemail/actions/validate.php53
-rw-r--r--mod/uservalidationbyemail/languages/en.php85
-rw-r--r--mod/uservalidationbyemail/lib/functions.php108
-rw-r--r--mod/uservalidationbyemail/manifest.xml25
-rw-r--r--mod/uservalidationbyemail/start.php330
-rw-r--r--mod/uservalidationbyemail/views/default/admin/users/unvalidated.php9
-rw-r--r--mod/uservalidationbyemail/views/default/forms/uservalidationbyemail/bulk_action.php112
-rw-r--r--mod/uservalidationbyemail/views/default/uservalidationbyemail/css.php12
-rw-r--r--mod/uservalidationbyemail/views/default/uservalidationbyemail/js.php28
-rw-r--r--mod/uservalidationbyemail/views/default/uservalidationbyemail/unvalidated_user.php50
-rw-r--r--mod/videolist/.gitignore15
-rw-r--r--mod/videolist/CHANGES.txt14
-rw-r--r--mod/videolist/actions/videolist/delete.php39
-rw-r--r--mod/videolist/actions/videolist/edit.php107
-rw-r--r--mod/videolist/graphics/_videolist_icon_medium.pngbin0 -> 4391 bytes-rw-r--r--mod/videolist/graphics/videolist_icon_medium.pngbin0 -> 3840 bytes-rw-r--r--mod/videolist/graphics/videolist_icon_small.pngbin0 -> 1960 bytes-rw-r--r--mod/videolist/graphics/videolist_icon_tiny.pngbin0 -> 1295 bytes-rw-r--r--mod/videolist/languages/ca.php40
-rw-r--r--mod/videolist/languages/en.php78
-rw-r--r--mod/videolist/languages/es.php40
-rw-r--r--mod/videolist/languages/fr.php28
-rw-r--r--mod/videolist/languages/gl.php29
-rw-r--r--mod/videolist/languages/pt.php50
-rw-r--r--mod/videolist/lib/Videolist/Platform/Bliptv.php38
-rw-r--r--mod/videolist/lib/Videolist/Platform/Gisstv.php50
-rw-r--r--mod/videolist/lib/Videolist/Platform/Metacafe.php38
-rw-r--r--mod/videolist/lib/Videolist/Platform/Vimeo.php40
-rw-r--r--mod/videolist/lib/Videolist/Platform/Youtube.php49
-rw-r--r--mod/videolist/lib/Videolist/PlatformInterface.php23
-rw-r--r--mod/videolist/lib/videolist.php46
-rw-r--r--mod/videolist/manifest.xml18
-rw-r--r--mod/videolist/pages/videolist/add.php39
-rw-r--r--mod/videolist/pages/videolist/all.php34
-rw-r--r--mod/videolist/pages/videolist/edit.php49
-rw-r--r--mod/videolist/pages/videolist/friends.php33
-rw-r--r--mod/videolist/pages/videolist/owner.php54
-rw-r--r--mod/videolist/pages/videolist/watch.php42
-rw-r--r--mod/videolist/start.php328
-rw-r--r--mod/videolist/thumbnail.php64
-rw-r--r--mod/videolist/upgrades/2012022501.php82
-rw-r--r--mod/videolist/views/default/forms/videolist/edit.php55
-rw-r--r--mod/videolist/views/default/icon/object/videolist_item.php47
-rw-r--r--mod/videolist/views/default/object/videolist_item.php108
-rw-r--r--mod/videolist/views/default/page/elements/videolist_block.php36
-rw-r--r--mod/videolist/views/default/river/object/videolist_item/create.php15
-rw-r--r--mod/videolist/views/default/videolist/css.php23
-rw-r--r--mod/videolist/views/default/videolist/group_module.php43
-rw-r--r--mod/videolist/views/default/videolist/sidebar.php28
-rw-r--r--mod/videolist/views/default/videolist/watch.php8
-rw-r--r--mod/videolist/views/default/videolist/watch/bliptv.php6
-rw-r--r--mod/videolist/views/default/videolist/watch/gisstv.php7
-rw-r--r--mod/videolist/views/default/videolist/watch/metacafe.php6
-rw-r--r--mod/videolist/views/default/videolist/watch/vimeo.php5
-rw-r--r--mod/videolist/views/default/videolist/watch/youtube.php5
-rw-r--r--mod/videolist/views/default/widgets/videolist/content.php32
-rw-r--r--mod/videolist/views/default/widgets/videolist/edit.php24
-rw-r--r--mod/videolist/views/rss/object/videolist_item.php47
-rw-r--r--mod/zaudio/audioplayer/audio-player.js5
-rw-r--r--mod/zaudio/audioplayer/license.txt19
-rw-r--r--mod/zaudio/audioplayer/player.swfbin0 -> 10816 bytes-rw-r--r--mod/zaudio/manifest.xml18
-rw-r--r--mod/zaudio/readme.txt9
-rw-r--r--mod/zaudio/start.php18
-rw-r--r--mod/zaudio/views/default/file/specialcontent/audio/mp3.php7
-rw-r--r--mod/zaudio/views/default/file/specialcontent/audio/mpeg.php7
-rw-r--r--mod/zaudio/views/default/file/specialcontent/audio/mpg.php7
-rw-r--r--mod/zaudio/views/default/zaudio/audioplayer.php23
-rw-r--r--mod/zaudio/views/default/zaudio/css.php10
-rw-r--r--pages/account/forgotten_password.php27
-rw-r--r--pages/account/login.php28
-rw-r--r--pages/account/register.php58
-rw-r--r--pages/account/reset_password.php40
-rw-r--r--pages/avatar/edit.php32
-rw-r--r--pages/avatar/view.php54
-rw-r--r--pages/entities/index.php56
-rw-r--r--pages/friends/collections/add.php22
-rw-r--r--pages/friends/collections/pickercallback.php59
-rw-r--r--pages/friends/collections/view.php21
-rw-r--r--pages/friends/index.php35
-rw-r--r--pages/friends/of.php35
-rw-r--r--pages/profile/edit.php32
-rw-r--r--pages/river.php61
-rw-r--r--pages/settings/account.php28
-rw-r--r--pages/settings/statistics.php28
-rw-r--r--pages/settings/tools.php29
-rw-r--r--search/index.php74
-rw-r--r--search/users.php40
-rw-r--r--services/api/rest.php60
-rw-r--r--services/export/handler.php125
-rw-r--r--settings/index.php27
-rw-r--r--settings/plugins.php26
-rw-r--r--settings/statistics.php26
-rw-r--r--settings/user.php29
-rw-r--r--simplecache/view.php46
-rwxr-xr-xsubtree.sh20
-rw-r--r--upgrade.php91
-rw-r--r--vendors/calendarpopup/CalendarPopup.js2924
-rw-r--r--vendors/jquery/fancybox/blank.gifbin0 -> 43 bytes-rw-r--r--vendors/jquery/fancybox/fancy_close.pngbin0 -> 1517 bytes-rw-r--r--vendors/jquery/fancybox/fancy_loading.pngbin0 -> 10195 bytes-rw-r--r--vendors/jquery/fancybox/fancy_nav_left.pngbin0 -> 1446 bytes-rw-r--r--vendors/jquery/fancybox/fancy_nav_right.pngbin0 -> 1454 bytes-rw-r--r--vendors/jquery/fancybox/fancy_shadow_e.pngbin0 -> 107 bytes-rw-r--r--vendors/jquery/fancybox/fancy_shadow_n.pngbin0 -> 106 bytes-rw-r--r--vendors/jquery/fancybox/fancy_shadow_ne.pngbin0 -> 347 bytes-rw-r--r--vendors/jquery/fancybox/fancy_shadow_nw.pngbin0 -> 324 bytes-rw-r--r--vendors/jquery/fancybox/fancy_shadow_s.pngbin0 -> 111 bytes-rw-r--r--vendors/jquery/fancybox/fancy_shadow_se.pngbin0 -> 352 bytes-rw-r--r--vendors/jquery/fancybox/fancy_shadow_sw.pngbin0 -> 340 bytes-rw-r--r--vendors/jquery/fancybox/fancy_shadow_w.pngbin0 -> 103 bytes-rw-r--r--vendors/jquery/fancybox/fancy_title_left.pngbin0 -> 503 bytes-rw-r--r--vendors/jquery/fancybox/fancy_title_main.pngbin0 -> 96 bytes-rw-r--r--vendors/jquery/fancybox/fancy_title_over.pngbin0 -> 70 bytes-rw-r--r--vendors/jquery/fancybox/fancy_title_right.pngbin0 -> 506 bytes-rw-r--r--vendors/jquery/fancybox/fancybox-x.pngbin0 -> 203 bytes-rw-r--r--vendors/jquery/fancybox/fancybox-y.pngbin0 -> 176 bytes-rw-r--r--vendors/jquery/fancybox/fancybox.pngbin0 -> 15287 bytes-rw-r--r--vendors/jquery/fancybox/jquery.easing-1.3.pack.js72
-rw-r--r--vendors/jquery/fancybox/jquery.fancybox-1.3.4.css359
-rw-r--r--vendors/jquery/fancybox/jquery.fancybox-1.3.4.js1156
-rw-r--r--vendors/jquery/fancybox/jquery.fancybox-1.3.4.pack.js46
-rw-r--r--vendors/jquery/fancybox/jquery.mousewheel-3.0.4.pack.js14
-rw-r--r--vendors/jquery/i18n/jquery-ui-i18n.js1646
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-af.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-ar-DZ.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-ar.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-az.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-bg.js24
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-bs.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-ca.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-cs.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-cy-GB.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-da.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-de.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-el.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-en-AU.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-en-GB.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-en-NZ.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-eo.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-es.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-et.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-eu.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-fa.js59
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-fi.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-fo.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-fr-CH.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-fr.js25
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-gl.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-he.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-hi.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-hr.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-hu.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-hy.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-id.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-is.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-it.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-ja.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-ka.js21
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-kk.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-km.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-ko.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-lb.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-lt.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-lv.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-mk.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-ml.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-ms.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-nl-BE.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-nl.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-no.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-pl.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-pt-BR.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-pt.js22
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-rm.js21
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-ro.js26
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-ru.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-sk.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-sl.js24
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-sq.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-sr-SR.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-sr.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-sv.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-ta.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-th.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-tj.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-tr.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-uk.js24
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-vi.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-zh-CN.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-zh-HK.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-zh-TW.js23
-rw-r--r--vendors/jquery/jquery-1.2.6.pack.js11
-rw-r--r--vendors/jquery/jquery-1.6.4.min.js4
-rw-r--r--vendors/jquery/jquery-ui-1.8.16.min.js414
-rwxr-xr-xvendors/jquery/jquery-ui-personalized-1.5.3.packed.js1
-rw-r--r--vendors/jquery/jquery.autocomplete.min.js13
-rw-r--r--vendors/jquery/jquery.form.js825
-rw-r--r--vendors/jquery/jquery.imgareaselect-0.9.8/GPL-LICENSE.txt278
-rw-r--r--vendors/jquery/jquery.imgareaselect-0.9.8/MIT-LICENSE.txt20
-rw-r--r--vendors/jquery/jquery.imgareaselect-0.9.8/css/border-anim-h.gifbin0 -> 219 bytes-rw-r--r--vendors/jquery/jquery.imgareaselect-0.9.8/css/border-anim-v.gifbin0 -> 219 bytes-rw-r--r--vendors/jquery/jquery.imgareaselect-0.9.8/css/border-h.gifbin0 -> 72 bytes-rw-r--r--vendors/jquery/jquery.imgareaselect-0.9.8/css/border-v.gifbin0 -> 72 bytes-rw-r--r--vendors/jquery/jquery.imgareaselect-0.9.8/css/imgareaselect-animated.css41
-rw-r--r--vendors/jquery/jquery.imgareaselect-0.9.8/css/imgareaselect-default.css41
-rw-r--r--vendors/jquery/jquery.imgareaselect-0.9.8/css/imgareaselect-deprecated.css36
-rw-r--r--vendors/jquery/jquery.imgareaselect-0.9.8/scripts/jquery.imgareaselect.js724
-rw-r--r--vendors/jquery/jquery.imgareaselect-0.9.8/scripts/jquery.imgareaselect.min.js1
-rw-r--r--vendors/jquery/jquery.imgareaselect-0.9.8/scripts/jquery.imgareaselect.pack.js1
-rw-r--r--vendors/jquery/jquery.imgareaselect-0.9.8/scripts/jquery.min.js18
-rw-r--r--vendors/jquery/jquery.jeditable.mini.js38
-rw-r--r--vendors/jquery/jquery.ui.autocomplete.html.js40
-rw-r--r--vendors/kses/AUTHORS26
-rw-r--r--vendors/kses/ChangeLog168
-rw-r--r--vendors/kses/README206
-rw-r--r--vendors/kses/TODO40
-rw-r--r--vendors/kses/docs/attribute-value-checks68
-rw-r--r--vendors/kses/docs/hooks7
-rw-r--r--vendors/kses/docs/stripping-everything7
-rw-r--r--vendors/kses/docs/supported-formats6
-rw-r--r--vendors/kses/docs/whitelisted-url-protocols15
-rw-r--r--vendors/kses/examples/filter.php138
-rw-r--r--vendors/kses/examples/test.php224
-rw-r--r--vendors/kses/kses.php555
-rw-r--r--vendors/kses/oop/oop.kses.changelog.txt204
-rw-r--r--vendors/kses/oop/oop.simple.api.txt58
-rw-r--r--vendors/kses/oop/php4.class.kses.php1162
-rw-r--r--vendors/kses/oop/php5.class.kses.php1172
-rw-r--r--vendors/kses/oop/test.oop.kses.php507
-rw-r--r--vendors/markdown/License.text36
-rw-r--r--vendors/markdown/PHP Markdown Extra Readme.text786
-rw-r--r--vendors/markdown/UPSTREAM_WARNING5
-rw-r--r--vendors/markdown/markdown.php2933
-rw-r--r--vendors/simpletest/HELP_MY_TESTS_DONT_WORK_ANYMORE348
-rw-r--r--vendors/simpletest/LICENSE502
-rw-r--r--vendors/simpletest/README108
-rw-r--r--vendors/simpletest/VERSION1
-rw-r--r--vendors/simpletest/authentication.php238
-rw-r--r--vendors/simpletest/autorun.php87
-rw-r--r--vendors/simpletest/browser.php1098
-rw-r--r--vendors/simpletest/collector.php122
-rw-r--r--vendors/simpletest/compatibility.php166
-rw-r--r--vendors/simpletest/cookies.php380
-rw-r--r--vendors/simpletest/default_reporter.php133
-rw-r--r--vendors/simpletest/detached.php96
-rw-r--r--vendors/simpletest/docs/en/authentication_documentation.html355
-rw-r--r--vendors/simpletest/docs/en/browser_documentation.html447
-rw-r--r--vendors/simpletest/docs/en/docs.css121
-rw-r--r--vendors/simpletest/docs/en/expectation_documentation.html422
-rw-r--r--vendors/simpletest/docs/en/form_testing_documentation.html342
-rw-r--r--vendors/simpletest/docs/en/group_test_documentation.html386
-rw-r--r--vendors/simpletest/docs/en/index.html538
-rw-r--r--vendors/simpletest/docs/en/mock_objects_documentation.html757
-rw-r--r--vendors/simpletest/docs/en/overview.html486
-rw-r--r--vendors/simpletest/docs/en/partial_mocks_documentation.html445
-rw-r--r--vendors/simpletest/docs/en/reporter_documentation.html519
-rw-r--r--vendors/simpletest/docs/en/unit_test_documentation.html431
-rw-r--r--vendors/simpletest/docs/en/web_tester_documentation.html584
-rw-r--r--vendors/simpletest/docs/fr/authentication_documentation.html332
-rw-r--r--vendors/simpletest/docs/fr/browser_documentation.html446
-rw-r--r--vendors/simpletest/docs/fr/docs.css84
-rw-r--r--vendors/simpletest/docs/fr/expectation_documentation.html383
-rw-r--r--vendors/simpletest/docs/fr/form_testing_documentation.html349
-rw-r--r--vendors/simpletest/docs/fr/group_test_documentation.html398
-rw-r--r--vendors/simpletest/docs/fr/index.html572
-rw-r--r--vendors/simpletest/docs/fr/mock_objects_documentation.html778
-rw-r--r--vendors/simpletest/docs/fr/overview.html318
-rw-r--r--vendors/simpletest/docs/fr/partial_mocks_documentation.html460
-rw-r--r--vendors/simpletest/docs/fr/reporter_documentation.html534
-rw-r--r--vendors/simpletest/docs/fr/server_stubs_documentation.html0
-rw-r--r--vendors/simpletest/docs/fr/unit_test_documentation.html447
-rw-r--r--vendors/simpletest/docs/fr/web_tester_documentation.html566
-rw-r--r--vendors/simpletest/dumper.php360
-rw-r--r--vendors/simpletest/eclipse.php307
-rw-r--r--vendors/simpletest/encoding.php552
-rw-r--r--vendors/simpletest/errors.php288
-rw-r--r--vendors/simpletest/exceptions.php198
-rw-r--r--vendors/simpletest/expectation.php895
-rw-r--r--vendors/simpletest/extensions/pear_test_case.php198
-rw-r--r--vendors/simpletest/extensions/phpunit_test_case.php96
-rw-r--r--vendors/simpletest/extensions/testdox.php42
-rw-r--r--vendors/simpletest/extensions/testdox/test.php108
-rw-r--r--vendors/simpletest/form.php355
-rw-r--r--vendors/simpletest/frames.php596
-rw-r--r--vendors/simpletest/http.php624
-rw-r--r--vendors/simpletest/invoker.php139
-rw-r--r--vendors/simpletest/mock_objects.php1581
-rw-r--r--vendors/simpletest/page.php983
-rw-r--r--vendors/simpletest/parser.php764
-rw-r--r--vendors/simpletest/reflection_php4.php136
-rw-r--r--vendors/simpletest/reflection_php5.php380
-rw-r--r--vendors/simpletest/remote.php117
-rw-r--r--vendors/simpletest/reporter.php447
-rw-r--r--vendors/simpletest/scorer.php863
-rw-r--r--vendors/simpletest/selector.php137
-rw-r--r--vendors/simpletest/shell_tester.php333
-rw-r--r--vendors/simpletest/simpletest.php478
-rw-r--r--vendors/simpletest/socket.php216
-rw-r--r--vendors/simpletest/tag.php1418
-rw-r--r--vendors/simpletest/test/acceptance_test.php1633
-rw-r--r--vendors/simpletest/test/adapter_test.php77
-rw-r--r--vendors/simpletest/test/all_tests.php13
-rw-r--r--vendors/simpletest/test/authentication_test.php145
-rw-r--r--vendors/simpletest/test/autorun_test.php13
-rw-r--r--vendors/simpletest/test/bad_test_suite.php10
-rw-r--r--vendors/simpletest/test/browser_test.php779
-rw-r--r--vendors/simpletest/test/collector_test.php51
-rw-r--r--vendors/simpletest/test/command_line_test.php40
-rw-r--r--vendors/simpletest/test/compatibility_test.php97
-rw-r--r--vendors/simpletest/test/cookies_test.php227
-rw-r--r--vendors/simpletest/test/detached_test.php15
-rw-r--r--vendors/simpletest/test/dumper_test.php88
-rw-r--r--vendors/simpletest/test/eclipse_test.php32
-rw-r--r--vendors/simpletest/test/encoding_test.php213
-rw-r--r--vendors/simpletest/test/errors_test.php300
-rw-r--r--vendors/simpletest/test/exceptions_test.php153
-rw-r--r--vendors/simpletest/test/expectation_test.php245
-rw-r--r--vendors/simpletest/test/form_test.php323
-rw-r--r--vendors/simpletest/test/frames_test.php549
-rw-r--r--vendors/simpletest/test/http_test.php427
-rw-r--r--vendors/simpletest/test/interfaces_test.php137
-rw-r--r--vendors/simpletest/test/live_test.php47
-rw-r--r--vendors/simpletest/test/mock_objects_test.php994
-rw-r--r--vendors/simpletest/test/page_test.php903
-rw-r--r--vendors/simpletest/test/parse_error_test.php9
-rw-r--r--vendors/simpletest/test/parser_test.php551
-rw-r--r--vendors/simpletest/test/reflection_php4_test.php61
-rw-r--r--vendors/simpletest/test/reflection_php5_test.php271
-rw-r--r--vendors/simpletest/test/remote_test.php20
-rw-r--r--vendors/simpletest/test/shell_test.php38
-rw-r--r--vendors/simpletest/test/shell_tester_test.php42
-rw-r--r--vendors/simpletest/test/simpletest_test.php58
-rw-r--r--vendors/simpletest/test/socket_test.php25
-rw-r--r--vendors/simpletest/test/support/collector/collectable.10
-rw-r--r--vendors/simpletest/test/support/collector/collectable.20
-rw-r--r--vendors/simpletest/test/support/empty_test_file.php3
-rw-r--r--vendors/simpletest/test/support/latin1_sample1
-rw-r--r--vendors/simpletest/test/support/spl_examples.php15
-rw-r--r--vendors/simpletest/test/support/supplementary_upload_sample.txt1
-rw-r--r--vendors/simpletest/test/support/test1.php7
-rw-r--r--vendors/simpletest/test/support/upload_sample.txt1
-rw-r--r--vendors/simpletest/test/tag_test.php554
-rw-r--r--vendors/simpletest/test/test_with_parse_error.php8
-rw-r--r--vendors/simpletest/test/unit_tester_test.php55
-rw-r--r--vendors/simpletest/test/unit_tests.php55
-rw-r--r--vendors/simpletest/test/url_test.php443
-rw-r--r--vendors/simpletest/test/user_agent_test.php358
-rw-r--r--vendors/simpletest/test/visual_test.php495
-rw-r--r--vendors/simpletest/test/web_tester_test.php156
-rw-r--r--vendors/simpletest/test/xml_test.php187
-rw-r--r--vendors/simpletest/test_case.php708
-rw-r--r--vendors/simpletest/unit_tester.php420
-rw-r--r--vendors/simpletest/url.php528
-rw-r--r--vendors/simpletest/user_agent.php332
-rw-r--r--vendors/simpletest/web_tester.php1541
-rw-r--r--vendors/simpletest/xml.php647
-rw-r--r--vendors/sprintf.js183
-rw-r--r--version.php38
-rw-r--r--views/default/account/forms/forgotten_password.php19
-rw-r--r--views/default/account/forms/login.php37
-rw-r--r--views/default/account/forms/register.php42
-rw-r--r--views/default/account/forms/useradd.php34
-rw-r--r--views/default/admin/appearance/default_widgets.php82
-rw-r--r--views/default/admin/appearance/menu_items.php10
-rw-r--r--views/default/admin/appearance/profile_fields.php24
-rw-r--r--views/default/admin/appearance/profile_fields/list.php55
-rw-r--r--views/default/admin/dashboard.php12
-rw-r--r--views/default/admin/footer.php9
-rw-r--r--views/default/admin/header.php27
-rw-r--r--views/default/admin/main.php19
-rw-r--r--views/default/admin/main_opt/plugins.php19
-rw-r--r--views/default/admin/main_opt/site.php17
-rw-r--r--views/default/admin/main_opt/statistics.php17
-rw-r--r--views/default/admin/main_opt/user.php17
-rw-r--r--views/default/admin/plugin_settings.php26
-rw-r--r--views/default/admin/plugins.php240
-rw-r--r--views/default/admin/plugins_opt/plugin.php95
-rw-r--r--views/default/admin/settings/advanced.php9
-rw-r--r--views/default/admin/settings/advanced/site_secret.php11
-rw-r--r--views/default/admin/settings/basic.php9
-rw-r--r--views/default/admin/sidebar.php8
-rw-r--r--views/default/admin/site.php22
-rw-r--r--views/default/admin/statistics.php15
-rw-r--r--views/default/admin/statistics/overview.php13
-rw-r--r--views/default/admin/statistics/overview/basic.php19
-rw-r--r--views/default/admin/statistics/overview/numentities.php40
-rw-r--r--views/default/admin/statistics/server.php8
-rw-r--r--views/default/admin/statistics/server/php.php50
-rw-r--r--views/default/admin/statistics/server/web_server.php16
-rw-r--r--views/default/admin/statistics_opt/basic.php38
-rw-r--r--views/default/admin/statistics_opt/numentities.php55
-rw-r--r--views/default/admin/statistics_opt/online.php22
-rw-r--r--views/default/admin/user.php23
-rw-r--r--views/default/admin/user_opt/adduser.php20
-rw-r--r--views/default/admin/user_opt/search.php25
-rw-r--r--views/default/admin/users/add.php9
-rw-r--r--views/default/admin/users/admins.php12
-rw-r--r--views/default/admin/users/newest.php18
-rw-r--r--views/default/admin/users/online.php13
-rw-r--r--views/default/ajax/loader.php29
-rw-r--r--views/default/annotation/annotate.php14
-rw-r--r--views/default/annotation/default.php40
-rw-r--r--views/default/annotation/generic_comment.php130
-rw-r--r--views/default/api/output.php34
-rw-r--r--views/default/basic_elements/welcome.php19
-rw-r--r--views/default/canvas/default.php21
-rw-r--r--views/default/canvas/layouts/edit_layout.php20
-rw-r--r--views/default/canvas/layouts/one_column.php21
-rw-r--r--views/default/canvas/layouts/sidebar_boxes.php29
-rw-r--r--views/default/canvas/layouts/two_column_left_sidebar.php34
-rw-r--r--views/default/canvas/layouts/two_column_right_sidebar.php31
-rw-r--r--views/default/canvas/layouts/widgets.php324
-rw-r--r--views/default/canvas_header/submenu_group.php15
-rw-r--r--views/default/canvas_header/submenu_template.php16
-rw-r--r--views/default/comments/forms/edit.php25
-rw-r--r--views/default/core/account/login_box.php21
-rw-r--r--views/default/core/account/login_dropdown.php27
-rw-r--r--views/default/core/avatar/crop.php16
-rw-r--r--views/default/core/avatar/upload.php51
-rw-r--r--views/default/core/friends/collection.php64
-rw-r--r--views/default/core/friends/collections.php39
-rw-r--r--views/default/core/friends/collectiontabs.php62
-rw-r--r--views/default/core/friends/tablelist.php50
-rw-r--r--views/default/core/friends/tablelistcountupdate.php17
-rw-r--r--views/default/core/river/filter.php38
-rw-r--r--views/default/core/settings/account.php9
-rw-r--r--views/default/core/settings/account/default_access.php25
-rw-r--r--views/default/core/settings/account/email.php19
-rw-r--r--views/default/core/settings/account/language.php20
-rw-r--r--views/default/core/settings/account/name.php21
-rw-r--r--views/default/core/settings/account/notifications.php44
-rw-r--r--views/default/core/settings/account/password.php33
-rw-r--r--views/default/core/settings/statistics.php6
-rw-r--r--views/default/core/settings/statistics/numentities.php44
-rw-r--r--views/default/core/settings/statistics/online.php42
-rw-r--r--views/default/core/settings/tools.php34
-rw-r--r--views/default/core/walled_garden/login.php31
-rw-r--r--views/default/core/walled_garden/lost_password.php13
-rw-r--r--views/default/core/walled_garden/register.php17
-rw-r--r--views/default/css.php2197
-rw-r--r--views/default/css/admin.php1677
-rw-r--r--views/default/css/elements/OOCSS_LICENSE30
-rw-r--r--views/default/css/elements/buttons.php156
-rw-r--r--views/default/css/elements/components.php286
-rw-r--r--views/default/css/elements/core.php117
-rw-r--r--views/default/css/elements/forms.php375
-rw-r--r--views/default/css/elements/grid.php54
-rw-r--r--views/default/css/elements/helpers.php144
-rw-r--r--views/default/css/elements/icons.php348
-rw-r--r--views/default/css/elements/layout.php121
-rw-r--r--views/default/css/elements/misc.php62
-rw-r--r--views/default/css/elements/modules.php194
-rw-r--r--views/default/css/elements/navigation.php560
-rw-r--r--views/default/css/elements/reset.php79
-rw-r--r--views/default/css/elements/typography.php162
-rw-r--r--views/default/css/elgg.php68
-rw-r--r--views/default/css/ie.php16
-rw-r--r--views/default/css/ie6.php12
-rw-r--r--views/default/css/ie7.php75
-rw-r--r--views/default/css/lightbox.php371
-rw-r--r--views/default/css/walled_garden.php81
-rw-r--r--views/default/dashboard/blurb.php12
-rw-r--r--views/default/embed/addcontentjs.php4
-rw-r--r--views/default/embed/js.php7
-rw-r--r--views/default/errors/404.php8
-rw-r--r--views/default/errors/default.php8
-rw-r--r--views/default/export/entity.php94
-rw-r--r--views/default/export/metadata.php28
-rw-r--r--views/default/export/relationship.php42
-rw-r--r--views/default/forms/account/settings.php10
-rw-r--r--views/default/forms/admin/menu/save.php102
-rw-r--r--views/default/forms/admin/plugins/change_state.php22
-rw-r--r--views/default/forms/admin/plugins/filter.php26
-rw-r--r--views/default/forms/admin/plugins/sort.php26
-rw-r--r--views/default/forms/admin/site/regenerate_secret.php24
-rw-r--r--views/default/forms/admin/site/update_advanced.php101
-rw-r--r--views/default/forms/admin/site/update_basic.php31
-rw-r--r--views/default/forms/avatar/crop.php42
-rw-r--r--views/default/forms/avatar/upload.php16
-rw-r--r--views/default/forms/comments/add.php37
-rw-r--r--views/default/forms/friends/collections/add.php53
-rw-r--r--views/default/forms/login.php49
-rw-r--r--views/default/forms/members/name_search.php9
-rw-r--r--views/default/forms/members/tag_search.php12
-rw-r--r--views/default/forms/plugins/settings/save.php31
-rw-r--r--views/default/forms/plugins/usersettings/save.php14
-rw-r--r--views/default/forms/profile/edit.php81
-rw-r--r--views/default/forms/profile/fields/add.php29
-rw-r--r--views/default/forms/register.php80
-rw-r--r--views/default/forms/user/passwordreset.php20
-rw-r--r--views/default/forms/user/requestnewpassword.php24
-rw-r--r--views/default/forms/useradd.php78
-rw-r--r--views/default/forms/usersettings/save.php14
-rw-r--r--views/default/forms/widgets/save.php41
-rw-r--r--views/default/friends/collection.php56
-rw-r--r--views/default/friends/collections.php53
-rw-r--r--views/default/friends/collectiontabs.php48
-rw-r--r--views/default/friends/forms/collectionfields.php23
-rw-r--r--views/default/friends/forms/edit.php59
-rw-r--r--views/default/friends/list.php27
-rw-r--r--views/default/friends/picker.php291
-rw-r--r--views/default/friends/tablelist.php66
-rw-r--r--views/default/friends/tablelistcountupdate.php22
-rw-r--r--views/default/graphics/ajax_loader.php32
-rw-r--r--views/default/graphics/icon.php32
-rw-r--r--views/default/group/default.php19
-rw-r--r--views/default/group/elements/summary.php13
-rw-r--r--views/default/group/search/finishblurb.php18
-rw-r--r--views/default/group/search/startblurb.php14
-rw-r--r--views/default/icon/default.php80
-rw-r--r--views/default/icon/user/default.php103
-rw-r--r--views/default/input/access.php85
-rw-r--r--views/default/input/autocomplete.php49
-rw-r--r--views/default/input/button.php73
-rw-r--r--views/default/input/calendar.php50
-rw-r--r--views/default/input/captcha.php8
-rw-r--r--views/default/input/checkbox.php39
-rw-r--r--views/default/input/checkboxes.php141
-rw-r--r--views/default/input/date.php56
-rw-r--r--views/default/input/datepicker.php6
-rw-r--r--views/default/input/dropdown.php71
-rw-r--r--views/default/input/email.php48
-rw-r--r--views/default/input/file.php55
-rw-r--r--views/default/input/form.php83
-rw-r--r--views/default/input/friendspicker.php319
-rw-r--r--views/default/input/hidden.php28
-rw-r--r--views/default/input/location.php27
-rw-r--r--views/default/input/longtext.php65
-rw-r--r--views/default/input/password.php50
-rw-r--r--views/default/input/plaintext.php62
-rw-r--r--views/default/input/pulldown.php59
-rw-r--r--views/default/input/radio.php115
-rw-r--r--views/default/input/reset.php37
-rw-r--r--views/default/input/securitytoken.php15
-rw-r--r--views/default/input/submit.php37
-rw-r--r--views/default/input/tag.php25
-rw-r--r--views/default/input/tags.php90
-rw-r--r--views/default/input/text.php51
-rw-r--r--views/default/input/url.php49
-rw-r--r--views/default/input/urlshortener.php8
-rw-r--r--views/default/input/userpicker.php75
-rw-r--r--views/default/js/admin.php126
-rw-r--r--views/default/js/elgg.php77
-rw-r--r--views/default/js/friendsPickerv1.php93
-rw-r--r--views/default/js/initialise_elgg.php294
-rw-r--r--views/default/js/initialize_elgg.php52
-rw-r--r--views/default/js/languages.php33
-rw-r--r--views/default/js/languages/en.php2
-rw-r--r--views/default/js/lightbox.php36
-rw-r--r--views/default/js/walled_garden.php67
-rw-r--r--views/default/messages/errors/error.php20
-rw-r--r--views/default/messages/errors/list.php57
-rw-r--r--views/default/messages/exceptions/exception.php44
-rw-r--r--views/default/messages/list.php25
-rw-r--r--views/default/messages/messages/list.php58
-rw-r--r--views/default/messages/messages/message.php20
-rw-r--r--views/default/navigation/breadcrumbs.php41
-rw-r--r--views/default/navigation/menu/default.php31
-rw-r--r--views/default/navigation/menu/elements/item.php43
-rw-r--r--views/default/navigation/menu/elements/section.php30
-rw-r--r--views/default/navigation/menu/page.php36
-rw-r--r--views/default/navigation/menu/site.php30
-rw-r--r--views/default/navigation/menu/user_hover.php60
-rw-r--r--views/default/navigation/pagination.php248
-rw-r--r--views/default/navigation/tabs.php81
-rw-r--r--views/default/navigation/topbar_tools.php56
-rw-r--r--views/default/navigation/viewtype.php45
-rw-r--r--views/default/notifications/settings/usersettings.php46
-rw-r--r--views/default/object/admin_notice.php20
-rw-r--r--views/default/object/default.php105
-rw-r--r--views/default/object/elements/full.php37
-rw-r--r--views/default/object/elements/summary.php59
-rw-r--r--views/default/object/object.php20
-rw-r--r--views/default/object/plugin.php38
-rw-r--r--views/default/object/plugin/elements/dependencies.php49
-rw-r--r--views/default/object/plugin/full.php308
-rw-r--r--views/default/object/plugin/invalid.php42
-rw-r--r--views/default/object/widget.php91
-rw-r--r--views/default/object/widget/elements/controls.php14
-rw-r--r--views/default/object/widget/elements/settings.php25
-rw-r--r--views/default/output/access.php42
-rw-r--r--views/default/output/calendar.php35
-rw-r--r--views/default/output/checkboxes.php32
-rw-r--r--views/default/output/confirmlink.php71
-rw-r--r--views/default/output/date.php38
-rw-r--r--views/default/output/dropdown.php13
-rw-r--r--views/default/output/email.php38
-rw-r--r--views/default/output/friendlytime.php12
-rw-r--r--views/default/output/friendlytitle.php19
-rw-r--r--views/default/output/iframe.php22
-rw-r--r--views/default/output/img.php12
-rw-r--r--views/default/output/location.php19
-rw-r--r--views/default/output/longtext.php59
-rw-r--r--views/default/output/pulldown.php33
-rw-r--r--views/default/output/radio.php32
-rw-r--r--views/default/output/tag.php35
-rw-r--r--views/default/output/tagcloud.php118
-rw-r--r--views/default/output/tags.php137
-rw-r--r--views/default/output/text.php31
-rw-r--r--views/default/output/url.php82
-rw-r--r--views/default/page/admin.php66
-rw-r--r--views/default/page/components/gallery.php77
-rw-r--r--views/default/page/components/image_block.php52
-rw-r--r--views/default/page/components/list.php75
-rw-r--r--views/default/page/components/module.php48
-rw-r--r--views/default/page/components/summary.php4
-rw-r--r--views/default/page/default.php76
-rw-r--r--views/default/page/elements/body.php8
-rw-r--r--views/default/page/elements/comments.php42
-rw-r--r--views/default/page/elements/comments_block.php45
-rw-r--r--views/default/page/elements/foot.php11
-rw-r--r--views/default/page/elements/footer.php22
-rw-r--r--views/default/page/elements/head.php81
-rw-r--r--views/default/page/elements/header.php14
-rw-r--r--views/default/page/elements/header_logo.php15
-rw-r--r--views/default/page/elements/messages.php27
-rw-r--r--views/default/page/elements/owner_block.php31
-rw-r--r--views/default/page/elements/shortcut_icon.php6
-rw-r--r--views/default/page/elements/sidebar.php32
-rw-r--r--views/default/page/elements/sidebar_alt.php12
-rw-r--r--views/default/page/elements/tagcloud_block.php58
-rw-r--r--views/default/page/elements/title.php14
-rw-r--r--views/default/page/elements/topbar.php16
-rw-r--r--views/default/page/elements/wrapper.php22
-rw-r--r--views/default/page/error.php14
-rw-r--r--views/default/page/layouts/admin.php40
-rw-r--r--views/default/page/layouts/content.php53
-rw-r--r--views/default/page/layouts/content/filter.php52
-rw-r--r--views/default/page/layouts/content/footer.php8
-rw-r--r--views/default/page/layouts/content/header.php43
-rw-r--r--views/default/page/layouts/content/sidebar.php8
-rw-r--r--views/default/page/layouts/default.php18
-rw-r--r--views/default/page/layouts/error.php12
-rw-r--r--views/default/page/layouts/one_column.php38
-rw-r--r--views/default/page/layouts/one_sidebar.php48
-rw-r--r--views/default/page/layouts/two_column_left_sidebar.php26
-rw-r--r--views/default/page/layouts/two_sidebar.php43
-rw-r--r--views/default/page/layouts/walled_garden.php16
-rw-r--r--views/default/page/layouts/widgets.php62
-rw-r--r--views/default/page/layouts/widgets/add_button.php16
-rw-r--r--views/default/page/layouts/widgets/add_panel.php62
-rw-r--r--views/default/page/upgrade.php18
-rw-r--r--views/default/page/walled_garden.php40
-rw-r--r--views/default/page_elements/elgg_topbar.php85
-rw-r--r--views/default/page_elements/footer.php65
-rw-r--r--views/default/page_elements/header.php84
-rw-r--r--views/default/page_elements/header_contents.php25
-rw-r--r--views/default/page_elements/owner_block.php101
-rw-r--r--views/default/page_elements/spotlight.php64
-rw-r--r--views/default/page_elements/title.php48
-rw-r--r--views/default/pageshells/pageshell.php62
-rw-r--r--views/default/profile/icon.php17
-rw-r--r--views/default/river/annotation/generic_comment/create.php11
-rw-r--r--views/default/river/dashboard.php25
-rw-r--r--views/default/river/elements/body.php67
-rw-r--r--views/default/river/elements/image.php16
-rw-r--r--views/default/river/elements/layout.php14
-rw-r--r--views/default/river/elements/responses.php63
-rw-r--r--views/default/river/elements/summary.php54
-rw-r--r--views/default/river/item.php30
-rw-r--r--views/default/river/item/list.php51
-rw-r--r--views/default/river/item/wrapper.php40
-rw-r--r--views/default/river/relationship/friend/create.php57
-rw-r--r--views/default/river/user/default/profileiconupdate.php24
-rw-r--r--views/default/river/user/default/profileupdate.php20
-rw-r--r--views/default/river/wrapper.php51
-rw-r--r--views/default/search/entity_list.php61
-rw-r--r--views/default/search/gallery.php49
-rw-r--r--views/default/search/gallery_listing.php35
-rw-r--r--views/default/search/listing.php45
-rw-r--r--views/default/search/startblurb.php8
-rw-r--r--views/default/settings/install.php19
-rw-r--r--views/default/settings/system.php66
-rw-r--r--views/default/settings/upgrading.php19
-rw-r--r--views/default/site/default.php27
-rw-r--r--views/default/spotlight/default.php82
-rw-r--r--views/default/text/about.php17
-rw-r--r--views/default/text/privacy_view.php15
-rw-r--r--views/default/text/tos_view.php14
-rw-r--r--views/default/user/default.php80
-rw-r--r--views/default/user/elements/summary.php13
-rw-r--r--views/default/user/search/finishblurb.php33
-rw-r--r--views/default/user/search/startblurb.php18
-rw-r--r--views/default/user/settings/email.php27
-rw-r--r--views/default/user/settings/language.php33
-rw-r--r--views/default/user/settings/name.php27
-rw-r--r--views/default/user/settings/password.php28
-rw-r--r--views/default/usersettings/form.php7
-rw-r--r--views/default/usersettings/main.php16
-rw-r--r--views/default/usersettings/main_opt/plugins.php19
-rw-r--r--views/default/usersettings/main_opt/statistics.php17
-rw-r--r--views/default/usersettings/main_opt/user.php17
-rw-r--r--views/default/usersettings/plugins.php33
-rw-r--r--views/default/usersettings/plugins_opt/plugin.php35
-rw-r--r--views/default/usersettings/statistics.php13
-rw-r--r--views/default/usersettings/statistics_opt/numentities.php53
-rw-r--r--views/default/usersettings/statistics_opt/online.php31
-rw-r--r--views/default/usersettings/user.php3
-rw-r--r--views/default/welcome.php20
-rw-r--r--views/default/welcome/logged_in.php29
-rw-r--r--views/default/welcome/logged_out.php24
-rw-r--r--views/default/widgets/admin_welcome/content.php19
-rw-r--r--views/default/widgets/content_stats/content.php28
-rw-r--r--views/default/widgets/content_stats/edit.php23
-rw-r--r--views/default/widgets/control_panel/content.php38
-rw-r--r--views/default/widgets/editwrapper.php46
-rw-r--r--views/default/widgets/friends/content.php25
-rw-r--r--views/default/widgets/friends/edit.php52
-rw-r--r--views/default/widgets/new_users/content.php11
-rw-r--r--views/default/widgets/new_users/edit.php23
-rw-r--r--views/default/widgets/online_users/content.php15
-rw-r--r--views/default/widgets/online_users/edit.php22
-rw-r--r--views/default/widgets/river_widget/content.php27
-rw-r--r--views/default/widgets/river_widget/edit.php58
-rw-r--r--views/default/widgets/wrapper.php113
-rw-r--r--views/failsafe/canvas/default.php21
-rw-r--r--views/failsafe/input/button.php41
-rw-r--r--views/failsafe/input/checkboxes.php49
-rw-r--r--views/failsafe/input/form.php31
-rw-r--r--views/failsafe/input/hidden.php20
-rw-r--r--views/failsafe/input/longtext.php25
-rw-r--r--views/failsafe/input/pulldown.php52
-rw-r--r--views/failsafe/input/reset.php27
-rw-r--r--views/failsafe/input/submit.php27
-rw-r--r--views/failsafe/input/text.php27
-rw-r--r--views/failsafe/messages/errors/error.php20
-rw-r--r--views/failsafe/messages/errors/list.php48
-rw-r--r--views/failsafe/messages/exceptions/admin_exception.php30
-rw-r--r--views/failsafe/messages/exceptions/exception.php51
-rw-r--r--views/failsafe/messages/list.php25
-rw-r--r--views/failsafe/messages/messages/list.php51
-rw-r--r--views/failsafe/messages/messages/message.php20
-rw-r--r--views/failsafe/messages/sanitisation/htaccess.php17
-rw-r--r--views/failsafe/messages/sanitisation/settings.php43
-rw-r--r--views/failsafe/page/default.php60
-rw-r--r--views/failsafe/pageshells/pageshell.php153
-rw-r--r--views/failsafe/settings/install.php19
-rw-r--r--views/failsafe/settings/system.php64
-rw-r--r--views/foaf/canvas/default.php21
-rw-r--r--views/foaf/page/default.php47
-rw-r--r--views/foaf/pageshells/pageshell.php48
-rw-r--r--views/foaf/search/entity_list.php9
-rw-r--r--views/foaf/user/default.php49
-rw-r--r--views/ical/export/entity.php33
-rw-r--r--views/ical/object/default.php10
-rw-r--r--views/ical/page/default.php19
-rw-r--r--views/installation/forms/install/template.php30
-rw-r--r--views/installation/input/access.php38
-rw-r--r--views/installation/input/button.php40
-rw-r--r--views/installation/input/checkbox.php24
-rw-r--r--views/installation/input/combo.php19
-rw-r--r--views/installation/input/dropdown.php36
-rw-r--r--views/installation/input/form.php30
-rw-r--r--views/installation/input/password.php17
-rw-r--r--views/installation/input/submit.php11
-rw-r--r--views/installation/input/text.php20
-rw-r--r--views/installation/install/js_rewrite_check.php12
-rw-r--r--views/installation/install/nav.php35
-rw-r--r--views/installation/install/pages/admin.php17
-rw-r--r--views/installation/install/pages/complete.php16
-rw-r--r--views/installation/install/pages/database.php26
-rw-r--r--views/installation/install/pages/requirements.php39
-rw-r--r--views/installation/install/pages/settings.php14
-rw-r--r--views/installation/install/pages/welcome.php8
-rw-r--r--views/installation/page/default.php57
-rw-r--r--views/installation/page/elements/footer.php10
-rw-r--r--views/installation/page/elements/header.php8
-rw-r--r--views/installation/page/elements/messages.php21
-rw-r--r--views/installation/page/elements/sidebar.php26
-rw-r--r--views/js/object/default.php20
-rw-r--r--views/js/pageshells/pageshell.php27
-rw-r--r--views/js/user/default.php20
-rw-r--r--views/json/api/output.php35
-rw-r--r--views/json/canvas/default.php17
-rw-r--r--views/json/export/entity.php47
-rw-r--r--views/json/export/metadata.php42
-rw-r--r--views/json/export/relationship.php41
-rw-r--r--views/json/group/default.php21
-rw-r--r--views/json/messages/exceptions/exception.php30
-rw-r--r--views/json/object/default.php21
-rw-r--r--views/json/page/components/list.php14
-rw-r--r--views/json/page/default.php13
-rw-r--r--views/json/pageshells/pageshell.php23
-rw-r--r--views/json/river/item.php19
-rw-r--r--views/json/search/entity_list.php20
-rw-r--r--views/json/site/default.php21
-rw-r--r--views/json/user/default.php21
-rw-r--r--views/opendd/canvas/default.php21
-rw-r--r--views/opendd/export/entity.php29
-rw-r--r--views/opendd/export/metadata.php37
-rw-r--r--views/opendd/export/relationship.php35
-rw-r--r--views/opendd/group/default.php25
-rw-r--r--views/opendd/messages/exceptions/exception.php44
-rw-r--r--views/opendd/object/default.php25
-rw-r--r--views/opendd/page/default.php16
-rw-r--r--views/opendd/pageshells/pageshell.php22
-rw-r--r--views/opendd/search/entity_list.php20
-rw-r--r--views/opendd/site/default.php24
-rw-r--r--views/opendd/user/default.php25
-rw-r--r--views/php/api/output.php28
-rw-r--r--views/php/canvas/default.php21
-rw-r--r--views/php/export/entity.php38
-rw-r--r--views/php/export/metadata.php38
-rw-r--r--views/php/export/relationship.php38
-rw-r--r--views/php/group/default.php21
-rw-r--r--views/php/messages/exceptions/exception.php25
-rw-r--r--views/php/object/default.php21
-rw-r--r--views/php/page/default.php9
-rw-r--r--views/php/pageshells/pageshell.php15
-rw-r--r--views/php/search/entity_list.php20
-rw-r--r--views/php/site/default.php26
-rw-r--r--views/php/user/default.php21
-rw-r--r--views/rss/annotation/default.php29
-rw-r--r--views/rss/annotation/generic_comment.php33
-rw-r--r--views/rss/canvas/default.php21
-rw-r--r--views/rss/group/default.php59
-rw-r--r--views/rss/object/default.php65
-rw-r--r--views/rss/output/url.php6
-rw-r--r--views/rss/page/components/creator.php14
-rw-r--r--views/rss/page/components/gallery.php8
-rw-r--r--views/rss/page/components/georss.php15
-rw-r--r--views/rss/page/components/image_block.php7
-rw-r--r--views/rss/page/components/list.php14
-rw-r--r--views/rss/page/default.php46
-rw-r--r--views/rss/page/elements/comments.php13
-rw-r--r--views/rss/page/layouts/default.php5
-rw-r--r--views/rss/pageshells/pageshell.php45
-rw-r--r--views/rss/river/item.php35
-rw-r--r--views/rss/search/entity_list.php9
-rw-r--r--views/rss/user/default.php56
-rw-r--r--views/xml/api/output.php29
-rw-r--r--views/xml/messages/exceptions/exception.php42
-rw-r--r--views/xml/page/default.php14
-rw-r--r--views/xml/pageshells/pageshell.php17
-rw-r--r--views/xml/xml-rpc/output.php23
9650 files changed, 641537 insertions, 56624 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 000000000..2303faa0c
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,57 @@
+# ignore Elgg configuration
+/engine/settings.php
+/engine/handlers/views_simplecache/*
+/.htaccess
+/mod/*
+
+# don't ignore bundled plugins
+!/mod/blog/
+!/mod/bookmarks/
+!/mod/categories/
+!/mod/custom_index/
+!/mod/dashboard/
+!/mod/developers/
+!/mod/diagnostics/
+!/mod/embed/
+!/mod/externalpages/
+!/mod/file/
+!/mod/garbagecollector/
+!/mod/groups/
+!/mod/htmlawed/
+!/mod/invitefriends/
+!/mod/likes/
+!/mod/linkup/
+!/mod/logbrowser/
+!/mod/logrotate/
+!/mod/members/
+!/mod/messageboard/
+!/mod/messages/
+!/mod/notifications/
+!/mod/oauth_api/
+!/mod/pages/
+!/mod/profile/
+!/mod/reportedcontent/
+!/mod/search/
+!/mod/tagcloud/
+!/mod/thewire/
+!/mod/tinymce/
+!/mod/twitter/
+!/mod/twitter_api/
+!/mod/uservalidationbyemail/
+!/mod/zaudio/
+
+# ignore IDE/hidden/testing/OS cache files
+.*
+*~
+/nbproject
+/nb-configuration.xml
+Session.vim
+*.tmproj
+*.tmproject
+tmtags
+Thumbs.db
+Desktop.ini
+/JsTestDriver-*.jar
+
+# don't ignore travis config
+!/.travis.yml
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 000000000..5cc8f375a
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,10 @@
+language: php
+phps:
+ - 5.2
+ - 5.3
+
+script: phpunit --help
+
+branches:
+ only:
+ - master \ No newline at end of file
diff --git a/.tx/config b/.tx/config
new file mode 100644
index 000000000..b1600d70c
--- /dev/null
+++ b/.tx/config
@@ -0,0 +1,501 @@
+[main]
+host = https://www.transifex.com
+
+[lorea.engine]
+file_filter = languages/<lang>.php
+source_file = languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.blog]
+file_filter = mod/blog/languages/<lang>.php
+source_file = mod/blog/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.bookmarks]
+file_filter = mod/bookmarks/languages/<lang>.php
+source_file = mod/bookmarks/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.categories]
+file_filter = mod/categories/languages/<lang>.php
+source_file = mod/categories/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.ckeditor]
+file_filter = mod/ckeditor/languages/<lang>.php
+source_file = mod/ckeditor/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.custom_index]
+file_filter = mod/custom_index/languages/<lang>.php
+source_file = mod/custom_index/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.dashboard]
+file_filter = mod/dashboard/languages/<lang>.php
+source_file = mod/dashboard/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.developers]
+file_filter = mod/developers/languages/<lang>.php
+source_file = mod/developers/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.diagnostics]
+file_filter = mod/diagnostics/languages/<lang>.php
+source_file = mod/diagnostics/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.embed]
+file_filter = mod/embed/languages/<lang>.php
+source_file = mod/embed/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.externalpages]
+file_filter = mod/externalpages/languages/<lang>.php
+source_file = mod/externalpages/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.file]
+file_filter = mod/file/languages/<lang>.php
+source_file = mod/file/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.garbagecollector]
+file_filter = mod/garbagecollector/languages/<lang>.php
+source_file = mod/garbagecollector/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.groups]
+file_filter = mod/groups/languages/<lang>.php
+source_file = mod/groups/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.invitefriends]
+file_filter = mod/invitefriends/languages/<lang>.php
+source_file = mod/invitefriends/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.likes]
+file_filter = mod/likes/languages/<lang>.php
+source_file = mod/likes/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.logbrowser]
+file_filter = mod/logbrowser/languages/<lang>.php
+source_file = mod/logbrowser/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.logrotate]
+file_filter = mod/logrotate/languages/<lang>.php
+source_file = mod/logrotate/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.members]
+file_filter = mod/members/languages/<lang>.php
+source_file = mod/members/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.messageboard]
+file_filter = mod/messageboard/languages/<lang>.php
+source_file = mod/messageboard/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.messages]
+file_filter = mod/messages/languages/<lang>.php
+source_file = mod/messages/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.notifications]
+file_filter = mod/notifications/languages/<lang>.php
+source_file = mod/notifications/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.pages]
+file_filter = mod/pages/languages/<lang>.php
+source_file = mod/pages/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.profile]
+file_filter = mod/profile/languages/<lang>.php
+source_file = mod/profile/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.reportedcontent]
+file_filter = mod/reportedcontent/languages/<lang>.php
+source_file = mod/reportedcontent/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.search]
+file_filter = mod/search/languages/<lang>.php
+source_file = mod/search/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.tagcloud]
+file_filter = mod/tagcloud/languages/<lang>.php
+source_file = mod/tagcloud/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.thewire]
+file_filter = mod/thewire/languages/<lang>.php
+source_file = mod/thewire/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.twitter]
+file_filter = mod/twitter/languages/<lang>.php
+source_file = mod/twitter/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.twitter_api]
+file_filter = mod/twitter_api/languages/<lang>.php
+source_file = mod/twitter_api/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.uservalidationbyemail]
+file_filter = mod/uservalidationbyemail/languages/<lang>.php
+source_file = mod/uservalidationbyemail/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.install]
+file_filter = install/languages/<lang>.php
+source_file = install/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.admins]
+file_filter = mod/admins/languages/<lang>.php
+source_file = mod/admins/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.assemblies]
+file_filter = mod/assemblies/languages/<lang>.php
+source_file = mod/assemblies/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.elggman]
+file_filter = mod/elggman/languages/<lang>.php
+source_file = mod/elggman/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.autosubscribegroup]
+file_filter = mod/autosubscribegroup/languages/<lang>.php
+source_file = mod/autosubscribegroup/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.beechat]
+file_filter = mod/beechat/languages/<lang>.php
+source_file = mod/beechat/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.captcha]
+file_filter = mod/captcha/languages/<lang>.php
+source_file = mod/captcha/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.cic_theme]
+file_filter = mod/cic_theme/languages/<lang>.php
+source_file = mod/cic_theme/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.colorbox]
+file_filter = mod/colorbox/languages/<lang>.php
+source_file = mod/colorbox/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.crud]
+file_filter = mod/crud/languages/<lang>.php
+source_file = mod/crud/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.curatedgroups]
+file_filter = mod/curatedgroups/languages/<lang>.php
+source_file = mod/curatedgroups/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.custom_index_widgets]
+file_filter = mod/custom_index_widgets/languages/<lang>.php
+source_file = mod/custom_index_widgets/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.dokuwiki]
+file_filter = mod/dokuwiki/languages/<lang>.php
+source_file = mod/dokuwiki/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.elgg-activitystreams]
+file_filter = mod/elgg-activitystreams/languages/<lang>.php
+source_file = mod/elgg-activitystreams/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.elgg-ostatus]
+file_filter = mod/elgg-ostatus/languages/<lang>.php
+source_file = mod/elgg-ostatus/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.elggpg]
+file_filter = mod/elggpg/languages/<lang>.php
+source_file = mod/elggpg/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.elgg-push]
+file_filter = mod/elgg-push/languages/<lang>.php
+source_file = mod/elgg-push/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.email_revalidate]
+file_filter = mod/email_revalidate/languages/<lang>.php
+source_file = mod/email_revalidate/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.etherpad]
+file_filter = mod/etherpad/languages/<lang>.php
+source_file = mod/etherpad/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.favorites]
+file_filter = mod/favorites/languages/<lang>.php
+source_file = mod/favorites/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.federated-objects]
+file_filter = mod/federated-objects/languages/<lang>.php
+source_file = mod/federated-objects/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.friendrequest]
+file_filter = mod/friendrequest/languages/<lang>.php
+source_file = mod/friendrequest/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.gifts]
+file_filter = mod/gifts/languages/<lang>.php
+source_file = mod/gifts/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.group_alias]
+file_filter = mod/group_alias/languages/<lang>.php
+source_file = mod/group_alias/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.group_operators]
+file_filter = mod/group_operators/languages/<lang>.php
+source_file = mod/group_operators/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.identica]
+file_filter = mod/identica/languages/<lang>.php
+source_file = mod/identica/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.infinite_scroll]
+file_filter = mod/infinite_scroll/languages/<lang>.php
+source_file = mod/infinite_scroll/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.landing]
+file_filter = mod/landing/languages/<lang>.php
+source_file = mod/landing/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.lightpics]
+file_filter = mod/lightpics/languages/<lang>.php
+source_file = mod/lightpics/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.linkup]
+file_filter = mod/linkup/languages/<lang>.php
+source_file = mod/linkup/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.livestream]
+file_filter = mod/livestream/languages/<lang>.php
+source_file = mod/livestream/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.microthemes]
+file_filter = mod/microthemes/languages/<lang>.php
+source_file = mod/microthemes/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.n1_theme]
+file_filter = mod/n1_theme/languages/<lang>.php
+source_file = mod/n1_theme/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.openid_client]
+file_filter = mod/openid_client/languages/<lang>.php
+source_file = mod/openid_client/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.opensearch]
+file_filter = mod/opensearch/languages/<lang>.php
+source_file = mod/opensearch/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.profile_widgets]
+file_filter = mod/profile_widgets/languages/<lang>.php
+source_file = mod/profile_widgets/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.proposals]
+file_filter = mod/proposals/languages/<lang>.php
+source_file = mod/proposals/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.registrationterms]
+file_filter = mod/registrationterms/languages/<lang>.php
+source_file = mod/registrationterms/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.relatedgroups]
+file_filter = mod/relatedgroups/languages/<lang>.php
+source_file = mod/relatedgroups/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.river_privacy]
+file_filter = mod/river_privacy/languages/<lang>.php
+source_file = mod/river_privacy/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.simple_faq]
+file_filter = mod/simple_faq/languages/<lang>.php
+source_file = mod/simple_faq/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.simplepie]
+file_filter = mod/simplepie/languages/<lang>.php
+source_file = mod/simplepie/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.spotlight]
+file_filter = mod/spotlight/languages/<lang>.php
+source_file = mod/spotlight/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.subgroups]
+file_filter = mod/subgroups/languages/<lang>.php
+source_file = mod/subgroups/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.suicide]
+file_filter = mod/suicide/languages/<lang>.php
+source_file = mod/suicide/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.tasks]
+file_filter = mod/tasks/languages/<lang>.php
+source_file = mod/tasks/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.threads]
+file_filter = mod/threads/languages/<lang>.php
+source_file = mod/threads/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.tinymce]
+file_filter = mod/tinymce/languages/<lang>.php
+source_file = mod/tinymce/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.uservalidationbyadmin]
+file_filter = mod/uservalidationbyadmin/languages/<lang>.php
+source_file = mod/uservalidationbyadmin/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.videolist]
+file_filter = mod/videolist/languages/<lang>.php
+source_file = mod/videolist/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.openid_server]
+file_filter = mod/openid_server/languages/<lang>.php
+source_file = mod/openid_server/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.event_calendar]
+file_filter = mod/event_calendar/languages/<lang>.php
+source_file = mod/event_calendar/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
diff --git a/CHANGES.txt b/CHANGES.txt
new file mode 100644
index 000000000..f6974a3ae
--- /dev/null
+++ b/CHANGES.txt
@@ -0,0 +1,679 @@
+Version 1.8.18
+(January 11, 2014 from https://github.com/Elgg/Elgg/tree/1.8)
+ Contributing Developers:
+ * Juho Jaakkola
+ * Steve Clay
+
+ Bugfixes:
+ * Fixes notify_user() broken in 1.8.17
+
+
+Version 1.8.17
+(January 1, 2014 from https://github.com/Elgg/Elgg/tree/1.8)
+ Contributing Developers:
+ * Brett Profitt
+ * Cash Costello
+ * Ed Lyons
+ * Evan Winslow
+ * Jeroen Dalsem
+ * Jerome Bakker
+ * Juho Jaakkola
+ * Matt Beckett
+ * Paweł Sroka
+ * Sem
+ * Steve Clay
+
+ Security Fixes:
+ * Specially-crafted request could return the contents of sensitive files.
+ * Reflected XSS attack was possible against 1.8 systems.
+ * The cryptographic key used for various purposes may have been generated with weak entropy, particularly on Windows.
+
+ Bugfixes:
+ * URLs with non-ASCII usernames again work
+ * Floated images are now properly cleared in content areas
+ * The activity page title now matches the document title
+ * Search again supports multiple comments on the same entity
+ * Blog archive sidebar now reverse chronological
+ * URLs with matching parens can now be auto-linked
+ * Log browser links for users now work
+ * Disabling over 50 objects should no longer result in an infinite loop
+ * Radio/checkbox inputs no longer have border radius (for IE10)
+ * User picker: the Only Friends checkbox again works
+ * Group bookmarklet no longer shown to non-members
+ * Widget reordering fixed when moving across columns
+ * Refuse to deactivate plugins needed as dependencies
+
+ Enhancements:
+ * Group member listings are ordered by name
+ * The system_log table can now store IPv6 addresses
+ * Web services auth_gettoken() now accepts email address
+ * List functions: no need to specify pagination for unlimited queries
+ * Htmlawed was upgraded to 1.1.16
+
+
+Version 1.8.16
+(June 25, 2013 from https://github.com/Elgg/Elgg/tree/1.8)
+ Contributing Developers:
+ * Brett Profitt
+ * Cash Costello
+ * Jeff Tilson
+ * Jerome Bakker
+ * Paweł Sroka
+ * Steve Clay
+
+ Security Fixes:
+ * Fixed avatar removal bug (thanks to Jerome Bakker for the first report of this)
+
+ Bugfixes:
+ * Fixed infinite loop when deleting/disabling an entity with > 50 annotations
+ * Fixed deleting log tables in log rotate plugin
+ * Added full text index for groups if missing
+ * Added workaround for IE8 and jumping user avatar
+ * Fixed pagination for members pages
+ * Fixed several internal cache issues
+ * Plus many more bug fixes
+
+
+Version 1.8.15
+(April 23, 2013 from https://github.com/Elgg/Elgg/tree/1.8)
+ Contributing Developers:
+ * Cash Costello
+ * Ismayil Khayredinov
+ * Jeff Tilson
+ * Juho Jaakkola
+ * Matt Beckett
+ * Paweł Sroka
+ * Sem
+ * Steve Clay
+ * Tom Voorneveld
+
+ Bugfixes:
+ * Not displaying http:// on profiles when website isn't set
+ * Fixed pagination display issue for small screens
+ * Not hiding subpages of top level pages that have been deleted
+ * Stop corrupting JavaScript views with elgg deprecation messages
+ * Fixed out of memory error due to query cache
+ * Fixed bug preventing users authorizing Twitter account access
+ * Fixed friends access level for editing pages
+ * Fixed uploading files within the embed dialog
+
+ Enhancements:
+ * Added browser caching of language JS files
+ * Adding nofollow on user posted URLs for spam deterrence (thanks to Hellekin)
+ * Auto-registering views for simplecache when their URL is requested
+ * Display helpful message for those who have site URL configuration issues
+ * Can revert to a previous revision with pages plugin
+ * Site owners can turn off posting wire messages to Twitter
+ * Search results are sorted by relevance
+
+ Dropped Plugins:
+ * Twitter widget due to changes in Twitter API and terms of service
+ * OAuth API plugin due to conflicts with the Twitter API plugin
+
+
+Version 1.8.14
+(March 12, 2013 from https://github.com/Elgg/Elgg/tree/1.8)
+ Contributing Developers:
+ * Aday Talavera
+ * Brett Profitt
+ * Cash Costello
+ * Ed Lyons
+ * German Bortoli
+ * Hellekin Wolf
+ * iionly
+ * Jerome Bakker
+ * Luciano Lima
+ * Matt Beckett
+ * Paweł Sroka
+ * Sem
+ * Steve Clay
+
+ Security Fixes:
+ * Fixed a XSS vulnerability when accepting URLs on user profiles
+ * Fixed bug that exposed subject lines of messages in inbox
+ * Added requirement for CSRF token for login
+
+ Bugfixes:
+ * Strip html tags from tag input
+ * Fixed several display issues for IE7
+ * Fixed several issues with blog drafts
+ * Fixed repeated token timeout errors
+ * Fixed JavaScript localization for non-English languages
+
+ Enhancements:
+ * Web services fall back to json if the viewtype is invalid
+
+
+Version 1.8.13
+(January 29, 2013 from https://github.com/Elgg/Elgg/tree/1.8)
+ Contributing Developers:
+ * Cash Costello
+ * Juho Jaakkola
+ * Kevin Jardine
+ * Krzysztof Różalski
+ * Steve Clay
+
+ Security Fixes:
+ * Added validation of Twitter usernames in Twitter widget
+
+ Bugfixes:
+ * CLI usages with walled garden fixed
+ * Upgrading from < 1.8 to 1.8 fixed
+ * Default widgets fixed
+ * Quotes in object titles no longer result in "qout" in URLs
+ * List of my groups is ordered now
+ * Language string river:comment:object:default is defined now
+ * Added language string for comments: generic_comment:on
+
+ Enhancements:
+ * Added confirm dialog for resetting profile fields (adds language string profile:resetdefault:confirm)
+
+
+Version 1.8.12
+(January 4th, 2013 from https://github.com/Elgg/Elgg/tree/1.8)
+ Contributing Developers:
+ * Brett Profitt
+ * Cash Costello
+ * Jerome Bakker
+ * Matt Beckett
+ * Paweł Sroka
+ * Sem
+ * Steve Clay
+
+ Bugfixes:
+ * Added an AJAX workaround for the rewrite test.
+ * Code cleanup to prevent some notices and warnings.
+ * Removed "original_order" in menu item anchor tags.
+ * Site menu's selected item correctly persists through content pages.
+ * Static caches rewritten and improved to prevent stale data being returned.
+ * Installation: Invalid characters in admin username are handled correctly.
+ * Messages: Fixed inbox link in email notifications.
+ * The Wire: Fixed objects not displaying correctly when upgrading from 1.7.
+
+ Enhancements:
+ * Performance improvements and improved caching in entity loading.
+ * Added upgrade locking to prevent concurrent upgrade attempts.
+ * Replaced xml_to_object() and autop() with GPL / MIT-compatible code.
+ * Error messages (register_error()) only fade after being clicked.
+ * Groups: Added a sidebar entry to display membership status and a link to
+ group notification settings.
+ * Groups: Added pending membership and invitation requests to the sidebar.
+ * Groups: Better redirection for invisible and closed groups.
+ * Search: User profile fields are searched.
+ * Pages: Subpages can be reassigned to new parent pages.
+ * Twitter: Login with twitter supports persistent login and correctly forwards
+ after login.
+
+
+Version 1.8.11
+(December 5th, 2012 from https://github.com/Elgg/Elgg/tree/1.8)
+
+ Bugfix:
+ * Fixed fatal error in group creation form
+
+
+Version 1.8.10
+(December 4th, 2012 from https://github.com/Elgg/Elgg/tree/1.8)
+
+ Contributing Developers:
+ * Krzysztof Różalski
+ * Lars Hærvig
+ * Paweł Sroka
+ * RiverVanRain
+ * Sem
+ * Steve Clay
+
+ Security Enhancements:
+ * Cached metadata respects access restrictions to fix problems with profile
+ field display.
+ * Group RSS feeds are restricted to valid entities
+
+ Enhancements:
+ * UX: Added a list of Administrators in the admin area
+ * UX: Limiting message board activity stream entries to excerpts
+ * Performance: Prefetching river entries
+ * Performance: Plugin entities are cached
+
+ Bugfixes:
+ * Removed superfluous commas in JS files to fix IE compatibility.
+ * API: Fixed Twitter API.
+ * Performance: Outputting valid ETags and expires headers.
+
+
+Version 1.8.9
+(November 11, 2012 from https://github.com/Elgg/Elgg/tree/1.8)
+
+ Contributing Developers:
+ * Brett Profitt
+ * Cash Costello
+ * Evan Winslow
+ * Jeroen Dalsem
+ * Jerome Bakker
+ * Matt Beckett
+ * Paweł Sroka
+ * Sem
+ * Steve Clay
+
+ Security Enhancements:
+ * Sample CLI installer cannot break site
+ * Removed XSS vulnerabilities in titles and user profiles
+
+ Enhancements:
+ * UX: A group's owner can transfer ownership to another member
+ * UX: Search queries persist in the search box
+ * Several (X)HTML validation improvements
+ * Improved performance via more aggressive entity and metadata caching
+ * BC: 1.7 group profile URLs forward correctly
+
+ Bugfixes:
+ * UX: Titles containing HTML tokens are never mangled
+ * UX: Empty user profile values saved properly
+ * UX: Blog creator always mentioned in activity stream (not user who published it)
+ * UI: Fixed ordering of registered menu items in some cases
+ * UI: Embed dialog does not break file inputs
+ * UI: Datepicker now respects language
+ * UI: More reliable display of access input in widgets
+ * UI: Group edit form is sticky
+ * UI: Site categories are sticky in forms
+ * API: Language fallback works in Javascript
+ * API: Fallback to default viewtype if invalid one given
+ * API: Notices reported for missing language keys
+ * Memcache now safe to use; never bypasses access control
+ * BC: upgrade shows comments consistently in activity stream
+
+
+Version 1.8.8
+(July 11, 2012 from https://github.com/Elgg/Elgg/tree/1.8)
+
+ Contributing Developers:
+ * Cash Costello
+ * Miguel Rodriguez
+ * Sem
+
+ Enhancements:
+ * Added a delete button on river items for admins
+
+ Bugfixes:
+ * Fixed the significant bug with htmlawed plugin that caused duplicate tags
+
+
+Version 1.8.7
+(July 10, 2012 from https://github.com/Elgg/Elgg/tree/1.8)
+
+ Contributing Developers:
+ * Cash Costello
+ * Evan Winslow
+ * Ismayil Khayredinov
+ * Jeroen Dalsem
+ * Jerome Bakker
+ * Matt Beckett
+ * Miguel Rodriguez
+ * Paweł Sroka
+ * Sem
+ * Steve Clay
+
+ Enhancements:
+ * Better support for search engine friendly URLs
+ * Upgraded htmlawed (XSS filtering)
+ * Internationalization support for TinyMCE
+ * Public access not available for walled gardens
+ * Better forwarding and messages when they cannot view content because logged out
+
+ Bugfixes:
+ * Fatal errors due to type hints downgraded to warnings
+ * Group discussion reply notifications work again
+ * Sending user to inbox when deleting a message
+ * Fixed location profile information when it is an array
+ * Over 30 other bug fixes.
+
+
+Version 1.8.6
+(June 18, 2012 from https://github.com/Elgg/Elgg/tree/1.8)
+
+ Contributing Developers:
+ * Cash Costello
+ * Evan Winslow
+ * Ismayil Khayredinov
+ * Jeff Tilson
+ * Jerome Bakker
+ * Paweł Sroka
+ * Sem
+ * Steve Clay
+
+ Enhancements:
+ * New ajax spinner
+ * Detecting docx, xlsx, and pptx files in file plugin
+ * Showing ajax spinner when uploading file with embed plugin
+
+ Bugfixes:
+ * Fixed some language caching issues.
+ * Users can add sub-pages to another user's page in a group.
+ * Over 30 other bug fixes.
+
+
+Version 1.8.5
+(May 17, 2012 from https://github.com/Elgg/Elgg/tree/1.8)
+
+ Contributing Developers:
+ * Brett Profitt
+ * Evan Winslow
+ * Sem
+ * Steve Clay
+ * Jeroen Dalsem
+ * Jerome Bakker
+
+ Security Enhancements:
+ * Fixed possible XSS vulnerability if using a crafted URL.
+ * Fixed exploit to bypass new user validation if using a crafted form.
+ * Fixed incorrect caching of access lists that could allow plugins
+ to show private entities to non-admin and non-owning users. (Non-exploitable)
+
+ Bugfixes:
+ * Twitter API: New users are forwarded to the correct page after creating
+ an account with Twitter.
+ * Files: PDF files are downloaded as "inline" to display in the browser.
+ * Fixed possible duplication errors when writing metadata with multiple values.
+ * Fixed possible upgrade issue if using a plugin uses the system_log hooks.
+ * Fixed problems when enabling more than 50 metadata or annotations.
+
+ API:
+ * River entries' timestamps use elgg_view_friendly_time() and can be
+ overridden with the friendly time output view.
+
+
+Version 1.8.4
+(April 24, 2012 from https://github.com/Elgg/Elgg/tree/1.8)
+
+ Contributing Developers:
+ * Adayth Talavera
+ * Brett Profitt
+ * Cash Costello
+ * Evan Winslow
+ * Ismayil Khayredinov
+ * Janek Lasocki-Biczysko
+ * Jerome Baker
+ * Sem
+ * Steve Clay
+ * Webgalli
+
+ Security Enhancements:
+ * Fixed an issue in the web services auth.get_token endpoint that
+ would give valid auth tokens to invalid credentials. Thanks to
+ Christian for reporting this!
+ * Fixed an that could show which plugins are loaded on a site.
+
+ Enhancements:
+ * UI: All bundled plugins' list pages display a no content message if there is nothing to list.
+ * UI: Site default access is limited to core access levels.
+ * UI: Showing a system message to the admin if plugins are disabled with the "disabled"
+ magic file.
+ * UI: Added transparent backgrounds for files and pages icons.
+ * External (Site) Pages: If in Wall Garden mode, Site Pages use the Walled Garden
+ theme when logged out.
+ * UI: Database errors only show the query to admin users.
+ * UI: Cannot set the data path to a relative path in installation or site settings.
+ * UI: Cleaned up notifications for bundled plugins.
+ * UI: Hiding crop button if no avatar is uploaded.
+ * UI: Bundled plugins are displayed with a gold border in the plugin admin area.
+ * UI: Can see all the categories a plugin belongs to.
+ * Web Services: Multiple tokens allowed for users.
+ * API: More efficient entity loading.
+ * API: Added IP address to system log.
+ * API: Languages are cached.
+ * API: ElggBatch supports disabling offsets for callbacks that delete entities.
+ * API: Cleaned up the boot process.
+ * API: Fixed situation in which the cache isn't properly cleared if a file can't be unlinked.
+
+ Bugfixes:
+ * UI: Tags display in the case they were saved.
+ * UI: Friendly titles keep -s.
+ * UI: Removed pagination in friends widget.
+ * UI: Profile settings actions correctly displays error messages as errors.
+ * UI: Tag search works for tags with spaces.
+ * UI: Fixed river display for friending that happens during registration.
+ * Groups: Link for managing join requests is restored in the sidebar.
+ * Walled Garden: Cron and web services endpoints are exposed as public sites.
+ * The Wire: UTF usernames are correctly linked with @ syntax.
+ * The Wire: No longer selecting the "Mine" tab for users who aren't you.
+ * Blogs: Notifications restored.
+ * Message Board: Fixed delete.
+ * Groups: Forwarding to correct page if trying to access closed group.
+ * API: entities loaded via elgg_get_entities_from_relationship() have the correct time_created.
+ * API: Deleting entities recursively works when code is logged out.
+ * API: Fixed multiple uses of deprecated functions.
+
+
+Version 1.8.3
+(January 12, 2012 from https://github.com/Elgg/Elgg/tree/1.8)
+
+ Enhancements:
+ * Adds a white list for ajax views
+ * Improved navigation tab options
+ * Added group specific search
+ * Added button for reverting avatar
+ * Improved documentation for core class attributes
+ * Adds a server info page under administer -> statistics
+ * Improving caching of icons and js/css
+ * Deprecation notices not displayed to non-admin users
+
+ Bugfixes:
+ * Fixed upgrade scripts for blog posts and groups forum posts
+ * Can now delete invitations to invisible groups
+ * Fixed several widget bugs
+ * Fixed access level on add to group river item
+ * Fixed recursive entity enabling
+ * Fixed limit on pages in sidebar navigation
+ * Fixed deletion of large numbers of annotations
+
+
+Version 1.8.2
+(December 21, 2011 from https://github.com/Elgg/Elgg/tree/1.8)
+
+ Enhancements:
+ * Added a 404 page
+ * Widgets controls now using the menu system
+ * Admins can edit users' account information
+ * Embed uploader supports uploading into groups
+ * Add a control panel widget for easy access to cache flushing and upgrading
+ * Comments now have a unqiue URL with fragment identifier
+ * JavaScript language files are cacheable
+ * jQuery form script only loaded when required
+
+ Bugfixes:
+ * Fixed default widgets
+ * Fixed activity filtering
+ * Embedding an image now inserts a medium sized image
+ * Search plugin only uses mbstring extension if enabled
+ * Site pages links returned to footer
+ * Fixed URL creation for users with non-ASCII characters in username
+ * The wire username parsing supports periods in usernames
+ * Returned the posting area to the main wire page
+ * Fixed layout issue on pages with a fragment identifier in URL
+ * Added support for call elgg_load_js() in header and footer
+ * Fixed user picker
+ * Fixed uservalidationbyemail plugin ignoring the actions of other plugins
+ * Fixed bug preventing the creation of admin users
+ * Fixed deleting a widget with JavaScript disabled
+ * Fixed many bugs in the unit/integration tests
+
+
+Version 1.8.1
+(November 16, 2011 from https://github.com/Elgg/Elgg/tree/1.8)
+
+ Enhancements:
+ * Completed styling of user validation admin page
+ * Adding rel=nofollow for non-trusted links
+ * Added direct icon loading for profile avatars in profile plugin
+ * Improved the structure of content views to make styling easier
+ * Updated version of jQuery to 1.6.4
+ * Added basic support for icon size customization
+ * Added a toggle for gallery/list view in file plugin
+ * Added support for passing CSS classes to icon views
+ * Added support for non http URLs to Elgg's normalize functions
+ * Added better support for the 404 forward if a page handler does handle a request
+
+ Bugfixes:
+ * Fixed autocomplete and userpicker
+ * Fixed RSS and web service-related view types
+ * Fixed walled garden display issues
+ * Added work around for IE/TinyMCE/embed insert problem
+ * Implemented ElggUser.isAdmin() JavaScript method
+ * Fixed the date views and JavaScript datepicker
+ * Fixed horizontal radio buttons styling
+ * Modules only display header if there is content for it
+
+
+Version 1.8.1b
+(October 11, 2011 from git://github.com/Elgg/Elgg.git)
+
+ Enhancements:
+ * New group activity widget for user dashboard.
+ * Added more sprites.
+ * version.php information cached instead of loaded 100s of times.
+ * Added class elgg-autofocus to add focus on inputs when the page loads.
+ * Admins can edit user avatars again.
+ * Added a filter for non-bundled plugins in plugin admin.
+ * Improvements to admin area theme.
+
+ Bugfixes:
+ * Fixed site dropdown menu for IE.
+ * ElggEntity->deleteMetadata() no longer deletes all metadata ever if
+ called on an unsaved entity.
+ * Fixed Embed plugin.
+ * Fixed activate and deactivate all plugins.
+ * Fixed URL for group membership request in notification email.
+ * Fixed log browser plugin's admin area display.
+ * Fixed RSS icon not showing up on some pages.
+ * Fixed river entries for forum posts that were lost if upgrading from 1.7.
+ * Better displaying of errors when activating, deactivating, or
+ reordering plugins.
+ * Fixed Developer Plugin's inspection tool.
+ * Fixed avatar cropping on IE 7.
+ * Bookmarks plugin accepts URLs with dashes.
+ * "More" menu item on site menu hidden if items are manually specified.
+ * Fixed hover menu floating if unrestrained.
+ * JS init, system fired when DOM and languages are read.
+ * Fixed the date picker input view.
+ * Fixed stack overflow when calling elgg_view() from a pagesetup
+ event.
+ * Menu links no longer have empty titles and confirm attributes.
+ * Fixed crash when attempting to change password to an invalid value.
+ * Fixed "More groups" link for groups widget.
+ * Fixed output/confirmlink to use a default question if not specified.
+ * Added missing language strings. Also added "new", "add", and "create".
+ * Registered security token refresh page as external to avoid token refresh
+ problems on Walled Garden sites.
+ * Displaying more accurate message if uploading an avatar fails.
+ * "Leave group" button doesn't display for group owners.
+ * Request group membership button displays only when logged in.
+ * Fixed the number of displayed items for Bookmarks widget.
+ * Fixed fallback to deprecated views for widgets.
+
+ API changes:
+ * Menus names must be unique to the entire menu, not just section.
+ * Input views that encode text use the option 'encode_text'.
+ * Added ElggPlugin->getFriendlyName().
+ * elgg_view_icon() accepts a class.
+ * Added hook output:before, page.
+ * Added hook output:before, layout.
+ * elgg_get_entities() and related functions return false if passed
+ valid options with invalid values.
+ * Can disable the user hover menu by passing hover => false to
+ elgg_view_icon(). Previously it was override => true.
+ * Embed plugin uses menu system. See readme for embed plugin.
+ * Manifest attributes are no longer translated via elgg_echo().
+ * Fixed livesearch ajax endpoint.
+ * Fixed site unit test.
+ * Unit tests tidy up after themselves better.
+ * forward() throws an exception if headers are already sent.
+ * Better errors if adding a user through admin area fails.
+ * Localized profile fields.
+ * Added 'is_trusted' parameter output/url to avoid escaping and filtering.
+ Defaults to false.
+ * Added elgg_unregister_action()
+ * Fixed ElggPriorityList::rewind().
+ * Fixed forwarding after login for login-protected pages.
+ * get_site_by_url() respects class inheritance for subclassing ElggSite.
+
+ Internal changes:
+ * Updated deprecated uses of internalname/id.
+ * Using wwwroot instead of www_root because of inconsistencies.
+
+
+Version 1.8.0 (Jackie)
+(September 5th, 2011 from git://github.com/Elgg/Elgg.git)
+
+ Notes:
+ Elgg 1.8 contains the most changes in Elgg since the transition from Elgg
+ 0.9 to Elgg 1.0. The core team tried to make the transition as smooth as
+ possible, but in the interest of following standards and simplifying the
+ development process for core and third party developers, we have made
+ changes that will require updating plugins. We believe these changes
+ will help Elgg development be easier for everyone.
+
+ It is unreasonable and unhelpful to list the full details of all changes in
+ this file. Instead, we will list the high level, overarching changes to
+ systems. If you are interested in the specifics, Elgg 1.8's source code is
+ highly documented and serves as a good guide and the git commit log can
+ provide excruciating details of what has changed between 1.7 and 1.8.
+
+ Please post your feedback, questions, and comments to the community site
+ at http://community.elgg.org. As always, thank you for using Elgg!
+
+ --The Elgg Core Development Team
+
+ A tip about updating plugins:
+ It's not difficult to update 1.7 plugins for 1.8. There is a detailed
+ document outlining this process on the wiki:
+ http://docs.elgg.org/wiki/Updating_plugins_for_Elgg_1.8
+
+ The basic process is:
+ 1. Clean up the plugin to make sure it conforms to coding standards,
+ official structure, and best practices.
+ 2. Update any uses of deprecated functions. Functions deprecated in 1.7 will
+ produce visible notices in 1.8!
+ 3. Use the new manifest format.
+ 4. Use the new menu functions.
+ 5. Use the new JS features.
+ 6. Update the views to use core CSS helper functions and classes instead of
+ writing your own.
+
+ The documentation directory and the wiki has more information.
+
+ User-visible changes:
+ * New default theme.
+ * New installation.
+ * Separate and updated admin interface.
+ * Updated plugin themes.
+
+ Generic API changes:
+ * Improved the markup and CSS.
+ * Restructured and simplified the views layouts.
+ * Added a new menu system.
+ * Added new CSS and JS file registration functions.
+ * Added a JS engine.
+ * Added a breadcrumb system.
+ * Added a sticky forms system.
+
+ New plugins:
+ * Dashboard - The activity stream is now the default index page. A 1.7-style
+ dashboard is provided through the dashboard plugin.
+ * Developers Plugins - Developer tools.
+ * Likes - Allows users to "like" other users' content.
+ * oAuth API - A generic, reusable oAuth library.
+ * Tag Cloud - A widget-based tag cloud generator.
+ * Twitter API - A generic Twitter library that allows signin with Twitter
+ and pushing content to tweets. Replaces twitter_service.
+
+ Deprecated plugins:
+ * captcha - Captchas have long since stopped being useful as a deterrent
+ against spam.
+ * crontrigger - Real cron should be used.
+ * default_widgets - This functionality is now part of core.
+ * friends - This functionality is now part of core.
+ * riverdashboard - Displaying the river (activity stream) is default in
+ core. The original dashboard can be restored by the new Dashboard plugin.
+ * twitter_service - Replaced by Twitter API.
+
+ Elgg 1.8.0.1 was released immediately after 1.8.0 to correct a problem in
+ installation.
diff --git a/CODING.txt b/CODING.txt
new file mode 100644
index 000000000..1cfd58dba
--- /dev/null
+++ b/CODING.txt
@@ -0,0 +1 @@
+See documentation/coding_standards/
diff --git a/CONTRIBUTORS.txt b/CONTRIBUTORS.txt
index e658ae682..a8e74d3a4 100644
--- a/CONTRIBUTORS.txt
+++ b/CONTRIBUTORS.txt
@@ -1,30 +1,30 @@
-
-CONTRIBUTORS
-
-The core Elgg team is:
-
-Ben Werdmuller <ben@elgg.com>
-http://benwerd.com/
-http://twitter.com/benwerd
-
-David Tosh <dave@elgg.com>
-http://davetosh.com/
-http://twitter.com/davetosh
-
-Marcus Povey <marcus@elgg.com>
-http://marcuspovey.co.uk/
-http://twitter.com/mapkyca
-
-Pete Harris <pete@elgg.com>
-
-
-Thanks to the following developers for contributing patches for the core Elgg engine.
-
-Diego Andrés Ramírez Aragón <diego@somosmas.org>
-Corporación Somos Más
-
-Cash Costello <cash.costello@gmail.com>
-
-Jon Kemp
-
-Brett Profitt \ No newline at end of file
+The following have made notable contributions to the Elgg Project.
+(List in alphabetical order.)
+
+Steve Clay - http://www.mrclay.org/, https://twitter.com/mrclay_org
+
+Cash Costello - cash@elgg.org, http://cashcostello.com/
+
+Pete Harris - http://www.peteharris.co.uk/
+
+Kevin Jardine - http://radagast.biz/
+
+Jon Maul - MITRE http://www.mitre.org/
+
+Marcus Povey - http://marcuspovey.co.uk/
+
+Brett Profitt - brett@elgg.org, http://twitter.com/brettprofitt
+
+Nathan Rackliffe - MITRE http://mitre.org/
+
+Tom Read - MITRE http://mitre.org/
+
+Justin Richer - MITRE http://mitre.org/
+
+Dave Tosh - davidgtosh@gmail.com, http://twitter.com/davetosh
+
+Ben Werdmuller - http://benwerd.com/
+
+Nicholas Whitt - nick.whitt@gmail.com, http://twitter.com/nogoodnick
+
+Evan Winslow - evan@elgg.org, http://evanwinslow.com/
diff --git a/COPYRIGHT.txt b/COPYRIGHT.txt
new file mode 100644
index 000000000..262515386
--- /dev/null
+++ b/COPYRIGHT.txt
@@ -0,0 +1,14 @@
+The follow individuals, companies, or entities have contributed significant
+code to the Elgg project and share the copyright. (In alphabetical order.)
+
+Organizations:
+The MITRE Corportation (jricher@mitre.org)
+Curverider Ltd (info@elgg.com)
+
+Individuals:
+Steve Clay (steve@mrclay.org)
+Cash Costello (cash.costello@gmail.com)
+Brett Profitt (brett.profitt@gmail.com)
+Dave Tosh (davidgtosh@gmail.com)
+Ben Werdmuller (ben@benwerd.com)
+Evan Winslow (evan.b.winslow@gmail.com)
diff --git a/ChangeLog b/ChangeLog
new file mode 100644
index 000000000..6fae5746c
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,39510 @@
+2012-04-24 Brett Profitt <brett.profitt@gmail.com>
+
+ * CHANGES.txt, version.php: Version bump. Updated changes.
+
+ * mod/groups/views/default/group/default.php: Fixed group entity display in
+ full_view.
+
+ * views/default/river/elements/summary.php: Fixes #4339. Checking for
+ river:$action:$type in addition to river:$action:$type:$subtype.
+
+ * engine/lib/sessions.php, engine/lib/web_services.php: Fixed problem in web
+ services where users with incorrect passwords could gain an access token.
+
+ * actions/admin/site/update_advanced.php, languages/en.php: Fixes #4324. Not
+ allowing relative paths for dataroot in advance settings.
+
+ * engine/lib/relationships.php: Fixes #4409. Selecting distinct across
+ entities.* and entity_relationships.id instead of r.* so entities loaded via
+ elgg_get_entities_from_relationship() have the correct time_created.
+
+2012-04-22 Brett Profitt <brett.profitt@gmail.com>
+
+ * mod/thewire/pages/thewire/owner.php: Fixes #4452. Passing the correct
+ filter context in the wire's owner page.
+
+ * views/default/object/plugin.php: Fixes #4439. Redirecting if trying to
+ view a plugin object outside of admin.
+
+2012-04-18 Brett Profitt <brett.profitt@gmail.com>
+
+ * ...1.8.3-multiple_user_tokens-852225f7fd89f6c5.php, version.php: Fixes
+ #4291. Removing the unique index on user and site guids in the
+ users_apisessions table.
+
+ * actions/login.php, actions/register.php, actions/useradd.php,
+ ....8.3-dont_filter_passwords-c0ca4a18b38ae2bc.php,
+ engine/lib/user_settings.php,
+ .../actions/twitter_api/interstitial_settings.php, version.php: Fixes #1301.
+ Not filtering passwords.
+
+2012-04-16 Steve Clay <steve@mrclay.org>
+
+ * engine/lib/users.php: Fixes #4414: Corrected name of river friend create
+ view
+
+ * mod/thewire/start.php: Fixes #4413: Removes deprecated call to
+ get_loggedin_user
+
+2012-04-15 Evan Winslow <evan@elgg.org>
+
+ * mod/likes/views/default/likes/button.php: Removes superfluous array
+ declaration
+
+2012-03-25 Evan Winslow <evan@elgg.org>
+
+ * mod/pages/start.php: Fixes #4419: Pages icons now work with all sizes
+
+ * views/default/icon/default.php: Refs #1279: Specifying image dimensions in
+ icon/default view.
+
+2012-03-15 Brett Profitt <brett.profitt@gmail.com>
+
+ * engine/classes/ElggSite.php: Fixes #4394. Added cron and services URLs to
+ the default public pages list for walled garden.
+
+2012-03-02 Evan Winslow <evan@elgg.org>
+
+ * views/default/css/admin.php: Adds fixed-width font for pre + code in admin
+ area
+
+2012-02-22 Evan Winslow <evan@elgg.org>
+
+ * .travis.yml: The travis-ci build should only run against master now.
+
+2012-02-13 Evan Winslow <evan@elgg.org>
+
+ * .travis.yml: Adds trivial .travis.yml config so we can get started
+ building.
+
+2012-02-25 Brett Profitt <brett.profitt@gmail.com>
+
+ * engine/lib/output.php, engine/tests/regression/trac_bugs.php: Fixes #3210.
+ Keeping -s in URL friendly titles.
+
+ * engine/classes/ElggPluginManifest.php, views/default/admin/plugins.php,
+ views/default/css/admin.php, views/default/object/plugin/full.php: Fixes
+ #3312, #3632. Added class elgg-plugin-category-<category> to the plugin div.
+ Exposed plugin categories under more. Changed border color and size for
+ bundled categories.
+
+ * mod/search/pages/search/index.php, mod/search/search_hooks.php,
+ mod/search/start.php: Fixes #3550. Merged slightly modified pull request 166
+ from sembrestels.
+
+2012-02-21 Brett Profitt <brett.profitt@gmail.com>
+
+ * mod/groups/languages/en.php, mod/groups/start.php: Refs #4335. Updated
+ discussion notifications.
+
+ * mod/blog/languages/en.php, mod/blog/start.php,
+ mod/bookmarks/languages/en.php, mod/bookmarks/start.php,
+ mod/file/languages/en.php, mod/file/start.php, mod/pages/languages/en.php,
+ mod/pages/start.php: Fixes #4335. Cleaned up the notifications for new
+ content.
+
+2012-02-11 Cash Costello <cash.costello@gmail.com>
+
+ * mod/externalpages/start.php, .../views/default/expages/wrapper.php,
+ views/default/css/walled_garden.php: external pages plugin uses walled garden
+ layout when appropriate
+
+2012-02-10 Ismayil Khayredinov <ismayil.khayredinov@hypejunction.com>
+
+ * views/default/forms/login.php, views/default/forms/register.php: passing
+ to extending views
+
+2012-02-10 Cash Costello <cash.costello@gmail.com>
+
+ * engine/lib/elgglib.php, views/default/js/walled_garden.php,
+ views/default/page/layouts/walled_garden.php: updated the walled garden js to
+ use new js lib
+
+ * engine/classes/ElggSite.php, engine/lib/elgglib.php,
+ views/default/core/walled_garden/body.php,
+ views/default/core/walled_garden/login.php,
+ views/default/core/walled_garden/lost_password.php,
+ views/default/core/walled_garden/register.php,
+ views/default/js/walled_garden.php,
+ views/default/page/layouts/walled_garden.php: new layout and ajax loading for
+ walled garden
+
+2012-02-09 Cash Costello <cash.costello@gmail.com>
+
+ * engine/classes/ElggWidget.php: Fixes #4283 moving widgets from inactive
+ plugins to the bottom of columns
+
+ * engine/lib/views.php: Fixes #2625 removed old hack from
+ elgg_view_annotation()
+
+ * engine/lib/group.php: Fixes #4361 corrects forwarding logic for closed
+ groups
+
+ * mod/groups/lib/groups.php: Fixes #4362 extra context was breaking group
+ sidebar menu logic
+
+ * languages/en.php, pages/friends/index.php, pages/friends/of.php,
+ pages/river.php: Fixes #2942 all list pages should have messages when no
+ content now
+
+2012-02-08 Cash Costello <cash.costello@gmail.com>
+
+ * mod/pages/manifest.xml: Fixes #3678 adds better description of pages
+ plugin
+
+ * actions/friends/add.php, languages/en.php: Fixes #4348 adds check for
+ missing user when friending
+
+ * .../views/default/theme_preview/components.php,
+ .../default/theme_preview/components/table.php,
+ views/default/css/elements/components.php: Fixes #4357, #4358 updates
+ .elgg-table-alt
+
+2012-02-03 Janek Lasocki-Biczysko <j.lasocki-biczysko@intrallect.com>
+
+ * actions/avatar/crop.php, pages/avatar/edit.php: Fixes #4350 (Edit Avatar -
+ Crop button is misleading, should be hidden if avatar hasn't been created
+ yet)
+
+2012-02-07 Cash Costello <cash.costello@gmail.com>
+
+ * engine/lib/plugins.php, languages/en.php: Fixes #3613 added system message
+ for admins when plugins are disabled
+
+ * engine/lib/metadata.php: Fixes #1043 tags retain their case
+
+2012-02-04 cash <cash.costello@gmail.com>
+
+ * mod/messageboard/actions/delete.php,
+ mod/messageboard/views/default/messageboard/js.php: Fixes #4354 fixes
+ messageboard delete
+
+ * mod/thewire/start.php: removed some old code from thewire
+
+ * engine/classes/ElggEntity.php, engine/classes/ElggGroup.php,
+ engine/classes/ElggObject.php, engine/classes/ElggSite.php,
+ engine/classes/ElggUser.php: Fixes #2112 not loading data from entities table
+ twice
+
+ * mod/thewire/start.php, mod/thewire/tests/regex.php: Fixes #1853 matching
+ UTF8 characters in usernames
+
+ * mod/blog/languages/en.php, mod/blog/start.php: Fixes #4310 adds missing
+ blog notification function
+
+2012-01-27 Janek Lasocki-Biczysko <j.lasocki-biczysko@intrallect.com>
+
+ * engine/lib/cache.php: lazy boolean expression evaluation leaves function
+ expressions unevaluated (!)
+
+ * engine/lib/configuration.php: response from insert_data needs to be
+ checked for !== FALSE
+
+2012-01-27 Team Webgalli <webgalli@gmail.com>
+
+ * views/default/widgets/friends/content.php: Removed pagination from friends
+ widget
+
+2012-02-03 Cash Costello <cash.costello@gmail.com>
+
+ * engine/lib/users.php: improved documentation for get_user_by_email()
+
+2012-02-01 cash <cash.costello@gmail.com>
+
+ * engine/lib/languages.php, engine/lib/plugins.php: fixed logic that caused
+ plugin language files to not be loaded
+
+2012-01-30 cash <cash.costello@gmail.com>
+
+ * install/ElggInstaller.php, install/languages/en.php: Refs #4324 installer
+ checks for absolute path
+
+ * install/ElggInstaller.php: Fixes #4342 updated the installer based on boot
+ reorg - no longer need caching code in installer
+
+ * engine/lib/plugins.php: fixed typo in plugin code
+
+ * install/languages/en.php, views/installation/install/nav.php: added
+ language strings to installer for refresh and next
+
+2012-01-28 Cash Costello <cash.costello@gmail.com>
+
+ * engine/lib/cache.php: Refs #4180 was caching extensions which was causing
+ double extensions
+
+ * mod/thewire/actions/add.php: replaced deprecated function call in the wire
+ plugin
+
+ * engine/lib/views.php: fixed typo in docs
+
+ * engine/lib/entities.php: Fixes #4329 removed old recursive delete
+ permissions override
+
+ * engine/lib/entities.php: Fixes #2646 mention ELGG_ENTITIES_NO_VALUE in
+ elgg_get_entities() documentation
+
+2012-01-27 Cash Costello <cash.costello@gmail.com>
+
+ * mod/pages/languages/en.php: Fixes #4309 added language string
+
+ * engine/settings.example.php: Fixes #3651 fixed documentation of disable db
+ cache setting and updated wiki
+
+ * engine/lib/navigation.php: Fixes #3509 added documentation to menu system
+ about confirm links
+
+ * actions/avatar/crop.php, actions/profile/fields/add.php,
+ actions/profile/fields/delete.php, actions/profile/fields/reorder.php: Fixes
+ #1808 using correct message function in profile actions
+
+2012-01-25 Brett Profitt <brett.profitt@gmail.com>
+
+ * engine/lib/entities.php: Refs #4081. Correctly calling
+ setIncrementOffset(false) for deleting entities using ElggBatch.
+
+ * engine/lib/entities.php, engine/tests/api/helpers.php,
+ engine/tests/objects/objects.php: Fixes #4081. Using ElggBatch to delete
+ recursive.
+
+2012-01-25 cash <cash.costello@gmail.com>
+
+ * engine/lib/languages.php: not loading language files a second time when
+ session initialized
+
+ * engine/lib/cache.php, engine/lib/plugins.php: plugins use language cache
+ and cache is cleared properly
+
+ * engine/classes/ElggFileCache.php: implemented the clear method of the file
+ cache
+
+ * engine/lib/cache.php, engine/lib/configuration.php,
+ engine/lib/elgglib.php, engine/lib/languages.php: caching language data
+
+2012-01-25 Brett Profitt <brett.profitt@gmail.com>
+
+ * engine/lib/metastrings.php: Refs #4269. Using ElggBatch to delete
+ annotations / metadata again.
+
+ * engine/classes/ElggBatch.php, engine/tests/api/helpers.php: Fixes #4288.
+ Added setIncrementOffset() to ElggBatch.
+
+2012-01-24 Cash Costello <cash.costello@gmail.com>
+
+ * engine/lib/configuration.php, engine/lib/entities.php,
+ engine/lib/views.php: Fixes #4272 where an array of entity types can be used,
+ use array in config object
+
+2012-01-24 Brett Profitt <brett.profitt@gmail.com>
+
+ * upgrade.php: Fixes #4326. Disabling system log for upgrades.
+
+2012-01-23 Brett Profitt <brett.profitt@gmail.com>
+
+ * engine/lib/configuration.php, install/ElggInstaller.php: Refs #4147.
+ Changed default site name to "My New Community."
+
+ * languages/en.php: Fixed typo in language string.
+
+ * engine/lib/entities.php, engine/tests/objects/objects.php: Fixes #1196.
+ Added elgg_set_ignore_access() calls to disable_entity() when called with
+ recursive = true.
+
+2012-01-22 Brett Profitt <brett.profitt@gmail.com>
+
+ * views/default/object/plugin/full.php,
+ views/default/object/plugin/invalid.php: Fixes #4311. Rewriting all invalid
+ CSS characters to - for plugin id in plugin admin area.
+
+ * engine/schema/mysql.sql: Refs #2222. Added schema update for system log ip
+ address column.
+
+2012-01-22 cash <cash.costello@gmail.com>
+
+ * engine/lib/access.php: Fixes #4295 using on duplicate key to not fail when
+ adding the same user more than once to an access collection
+
+2012-01-22 Brett Profitt <brett.profitt@gmail.com>
+
+ * engine/lib/annotations.php, engine/lib/elgglib.php,
+ engine/lib/metadata.php, engine/tests/api/metastrings.php: Fixes #4321. Limit
+ alone is no longer valid for batch delete operations for metadata or
+ annotations.
+
+ * engine/lib/metadata.php: Refs #4325. Restored the null vs bool return in
+ elgg_delete_metadata().
+
+2012-01-22 Cash Costello <cash.costello@gmail.com>
+
+ * mod/search/views/default/search/list.php,
+ .../forms/uservalidationbyemail/bulk_action.php,
+ views/default/navigation/pagination.php,
+ views/default/page/components/list.php: Fixes #4320 updated documentation for
+ base_url in pagination and added backward compatible code
+
+ * engine/lib/metadata.php: Fixes #4318 added guid to the list of parameters
+ for elgg_delete_metadata()
+
+2012-01-22 Team Webgalli <webgalli@gmail.com>
+
+ * mod/bookmarks/actions/bookmarks/save.php: Removed unnecessary gatekeeper
+ from bookmark actions.
+
+2012-01-21 Ismayil Khayredinov <ismayil.khayredinov@hypejunction.com>
+
+ * engine/classes/ElggUser.php: fix for deprecated use of elgg_get_objects
+
+2012-01-21 Cash Costello <cash.costello@gmail.com>
+
+ * engine/lib/cache.php, engine/lib/elgglib.php, engine/lib/plugins.php:
+ moved cache loading out of plugin code
+
+ * engine/lib/cache.php, engine/lib/plugins.php: better location for system
+ cache in data directory
+
+ * documentation/info/config.php, engine/lib/cache.php,
+ engine/lib/configuration.php,
+ ...2012100-1.8.3-system_cache-93100e7d55a24a11.php,
+ install/ElggInstaller.php, .../views/default/admin/developers/settings.php,
+ version.php, views/default/forms/admin/site/update_advanced.php: Fixes #4180
+ finished conversion to system cache by converting datalist/CONFIG var name
+
+ * actions/admin/site/update_advanced.php, languages/en.php,
+ mod/developers/actions/developers/settings.php,
+ mod/developers/languages/en.php,
+ .../views/default/admin/developers/settings.php,
+ views/default/forms/admin/site/update_advanced.php: updated the display to
+ show system cache language
+
+ * actions/admin/plugins/activate.php,
+ actions/admin/plugins/activate_all.php, actions/admin/plugins/deactivate.php,
+ actions/admin/plugins/deactivate_all.php,
+ actions/admin/plugins/set_priority.php, actions/admin/site/flush_cache.php,
+ actions/admin/site/update_advanced.php, engine/lib/cache.php,
+ engine/lib/deprecated-1.8.php, engine/lib/plugins.php,
+ engine/lib/upgrades/2011010101.php,
+ mod/developers/actions/developers/settings.php, upgrade.php: switched the
+ function names to system cache
+
+ * engine/lib/cache.php, engine/lib/configuration.php,
+ engine/lib/database.php, engine/lib/elgglib.php, engine/lib/languages.php,
+ engine/lib/sessions.php, engine/lib/sites.php, engine/lib/views.php,
+ engine/start.php: cleans up the boot process
+
+ * engine/lib/languages.php, engine/start.php: single for loop for loading
+ libraries
+
+ * engine/lib/configuration.php: updated documentation of configuration lib
+
+ * engine/start.php: improved documentation in bootstrap script
+
+2012-01-20 Brett Profitt <brett.profitt@gmail.com>
+
+ * engine/lib/system_log.php,
+ ...2012000-1.8.3-ip_in_syslog-87fe0f068cf62428.php,
+ mod/logbrowser/languages/en.php,
+ .../admin/administer_utilities/logbrowser.php,
+ .../views/default/forms/logbrowser/refine.php,
+ mod/logbrowser/views/default/logbrowser/table.php, version.php: Fixes #2222.
+ Added IP address to system log table and log browser. Fixed problem in log
+ browser that would only show entries without an owner_guid.
+
+2012-01-20 Cash Costello <cash.costello@gmail.com>
+
+ * engine/classes/ElggUser.php, engine/lib/statistics.php,
+ mod/bookmarks/pages/bookmarks/all.php,
+ mod/bookmarks/pages/bookmarks/owner.php,
+ views/default/core/settings/tools.php: Refs #4293 removed unnecessary
+ get_input('offset') calls since elgg_list_entities() calls that
+
+ * engine/lib/entities.php, engine/lib/users.php,
+ mod/members/pages/members/search.php: Fixes #4303 passing arguments to
+ elgg_view_entity_list in options array
+
+2012-01-16 Sem <sembrestels@riseup.net>
+
+ * views/default/forms/admin/site/update_advanced.php: Fixed #3155. Limited
+ site default access to core access levels.
+
+2012-01-13 Sem <sembrestels@riseup.net>
+
+ * mod/file/graphics/icons/application.gif,
+ mod/file/graphics/icons/application_lrg.gif,
+ mod/file/graphics/icons/archive.gif, mod/file/graphics/icons/archive_lrg.gif,
+ mod/file/graphics/icons/excel.gif, mod/file/graphics/icons/excel_lrg.gif,
+ mod/file/graphics/icons/general.gif, mod/file/graphics/icons/general_lrg.gif,
+ mod/file/graphics/icons/music.gif, mod/file/graphics/icons/music_lrg.gif,
+ mod/file/graphics/icons/openoffice.gif,
+ mod/file/graphics/icons/openoffice_lrg.gif,
+ mod/file/graphics/icons/pages.gif, mod/file/graphics/icons/pages_lrg.gif,
+ mod/file/graphics/icons/pdf.gif, mod/file/graphics/icons/pdf_lrg.gif,
+ mod/file/graphics/icons/ppt.gif, mod/file/graphics/icons/ppt_lrg.gif,
+ mod/file/graphics/icons/text.gif, mod/file/graphics/icons/text_lrg.gif,
+ mod/file/graphics/icons/vcard.gif, mod/file/graphics/icons/vcard_lrg.gif,
+ mod/file/graphics/icons/video.gif, mod/file/graphics/icons/video_lrg.gif,
+ mod/file/graphics/icons/word.gif, mod/file/graphics/icons/word_lrg.gif,
+ mod/pages/images/pages.gif, mod/pages/images/pages_lrg.gif: Fixes #3911. File
+ and page icons with transparent backgrounds since now.
+
+2012-01-18 Jerome Bakker <jeabakker@coldtrick.com>
+
+ * actions/admin/site/update_advanced.php: solves part of #4307
+
+ * actions/admin/site/update_basic.php: solves part of #4307
+
+2012-01-17 adayth <aday.talavera@gmail.com>
+
+ * mod/file/start.php: Fixes #4305 added backward compatibility for file read
+ url
+
+2012-01-16 Brett Profitt <brett.profitt@gmail.com>
+
+ * .../messages/exceptions/admin_exception.php: Refs #4036. Forgot to add a
+ new view.
+
+2012-01-15 Brett Profitt <brett.profitt@gmail.com>
+
+ * engine/lib/elgglib.php, languages/en.php,
+ views/failsafe/messages/exceptions/exception.php: Fixes #4036. Hiding
+ exceptions except for admin users.
+
+2012-01-12 Cash Costello <cash.costello@gmail.com>
+
+ * views/default/object/widget.php: added clearfix to increase the size of
+ the area for the drag handle
+
+2012-01-11 cash <cash.costello@gmail.com>
+
+ * CHANGES.txt, version.php: updated version and changes.txt
+
+ * engine/lib/elgglib.php, engine/lib/views.php, mod/thewire/start.php: Fixes
+ #4292 added a white list for ajax views
+
+2012-01-11 Ismayil Khayredinov <ismayil.khayredinov@hypejunction.com>
+
+ * views/default/css/elements/components.php, views/default/output/tags.php:
+ class namespacing
+
+2012-01-10 Brett Profitt <brett.profitt@gmail.com>
+
+ * engine/lib/annotations.php, engine/lib/metadata.php,
+ engine/lib/metastrings.php, engine/tests/api/annotations.php,
+ engine/tests/api/metadata.php: Fixes #4269. Not using ElggBatch to delete
+ metadata / annotations. Added unit tests for deleting annotations/md. Fixed
+ an annoying inconsistency with "metastring/s" option in private functions.
+
+2012-01-09 Brett Profitt <brett.profitt@gmail.com>
+
+ * engine/lib/annotations.php, engine/lib/metadata.php,
+ engine/lib/metastrings.php: Fixes #4243. Added docs for metadata_calculation
+ option to elgg_get_metadata().
+
+2012-01-09 Jeroen Dalsem <jdalsem@coldtrick.com>
+
+ * engine/classes/ElggWidget.php: Fixes #4285 move only fetches 10 items
+
+2012-01-09 Cash Costello <cash.costello@gmail.com>
+
+ * engine/classes/ElggBatch.php, engine/classes/ElggEntity.php,
+ engine/classes/ElggMemcache.php, engine/classes/ElggWidget.php,
+ engine/classes/XMLRPCCall.php, engine/handlers/export_handler.php,
+ engine/lib/actions.php, engine/lib/configuration.php,
+ engine/lib/filestore.php, engine/lib/metadata.php, engine/lib/navigation.php,
+ engine/lib/output.php, engine/lib/private_settings.php, engine/lib/users.php,
+ engine/lib/views.php: coding standard fixes to engine
+
+2012-01-09 Ismayil Khayredinov <ismayil.khayredinov@hypejunction.com>
+
+ * views/default/css/elements/components.php: tags css
+
+ * views/default/output/tags.php: fixes tags html markup issues
+
+2012-01-08 Cash Costello <cash.costello@gmail.com>
+
+ * engine/classes/ElggExtender.php, engine/classes/ElggMenuBuilder.php,
+ engine/classes/ElggMenuItem.php, engine/classes/ElggMetadata.php,
+ engine/classes/ElggUser.php, engine/classes/SuccessResult.php,
+ engine/lib/annotations.php, engine/lib/cache.php, engine/lib/metadata.php,
+ engine/lib/output.php, engine/lib/pagehandler.php, engine/lib/pageowner.php,
+ engine/lib/plugins.php, engine/lib/users.php: most of the comments in the
+ engine now past the sniffer
+
+ * engine/classes/ElggCache.php, engine/classes/ElggMenuBuilder.php,
+ engine/classes/ElggMenuItem.php, engine/classes/ElggPlugin.php,
+ engine/classes/ElggPluginPackage.php, engine/classes/ElggSite.php,
+ engine/lib/access.php, engine/lib/admin.php, engine/lib/database.php,
+ engine/lib/extender.php, engine/lib/input.php, engine/lib/relationships.php,
+ engine/lib/river.php: coding standards fixes - comments
+
+ * mod/groups/actions/discussion/reply/save.php,
+ mod/groups/actions/discussion/save.php, mod/groups/lib/discussion.php: Fixes
+ #3216 passing type/subtype for group discussions
+
+ * mod/search/pages/search/index.php: Fixes #2199 can now pass entity
+ type/subtype to tag search
+
+ * mod/file/actions/file/upload.php, mod/file/start.php,
+ .../default/file/specialcontent/image/default.php: Fixes #2421 added icontime
+ to files with thumbnails
+
+ * mod/search/pages/search/index.php: Fixes #2404 not using full set of query
+ parameters for custom search types
+
+ * engine/lib/entities.php: Fixes #4234 forcing limit to be nonnegative
+
+ * mod/messages/views/default/messages/js.php: updated the messages plugin to
+ use 1.8's JS hook system
+
+ * mod/groups/views/default/groups/js.php: updated groups js to use new JS
+ hook system
+
+ * js/lib/ui.widgets.js, mod/profile/views/default/profile/js.php: Fixes
+ #4192 making the bottom of widget columns equal rather than height
+
+ * actions/login.php: Fixes #4171 login success message is now i18n friendly
+
+ * engine/handlers/cache_handler.php: Fixes #2002 adds ETag support to simple
+ cache handler
+
+ * engine/classes/ODDDocument.php: Refs #4271 integrates fix to 1.8 branch
+ for ODDDocument
+
+ * engine/lib/elgglib.php: Fixes #4278 deprecation notices ignore debug level
+ but do respect whether the admin is logged in
+
+ * engine/lib/elgglib.php: fixed some formatting
+
+2012-01-07 Cash Costello <cash.costello@gmail.com>
+
+ * mod/groups/icon.php, mod/profile/icondirect.php: added check for existance
+ of IF-NONE-MATCH header in request
+
+2012-01-03 Sem <sembrestels@riseup.net>
+
+ * mod/groups/icon.php: Refs #4142. Also added ETag in group icon.
+
+ * mod/profile/icondirect.php: Refs #4142. Added ETag header support for user
+ avatars.
+
+2012-01-07 Cash Costello <cash.costello@gmail.com>
+
+ * engine/classes/ElggRiverItem.php, mod/thewire/classes/ElggWire.php: Refs
+ #3209 fixed spacing and added options for wire method
+
+ * engine/classes/ODDEntity.php, engine/classes/ODDMetaData.php,
+ engine/classes/ODDRelationship.php: pulled ODD classes out of ODDEntity
+
+2012-01-05 Brett Profitt <brett.profitt@gmail.com>
+
+ * engine/lib/annotations.php: Fixes #4243. Added docs to explain the
+ difference between annotation_calculation and calculation.
+
+2012-01-04 cash <cash.costello@gmail.com>
+
+ * engine/lib/web_services.php: Fixes #4270 removed use of deprecated method
+
+ * mod/pages/lib/pages.php, mod/pages/pages/pages/owner.php: Fixes #4266
+ fixed limit bugs with pages plugin
+
+ * mod/embed/views/default/navigation/menu/embed.php,
+ views/default/navigation/tabs.php: updated options on navigation/tabs
+
+ * engine/lib/entities.php: fixed enabling bug, added flag for recursion,
+ removed unnecessary code in disable function
+
+ * engine/tests/objects/entities.php: added a unit test for recursive
+ enabling/disabling
+
+2012-01-03 Sem <sembrestels@riseup.net>
+
+ * engine/lib/entities.php: Refs #2051. Fixed: ElggEntity's enable does not
+ recurse.
+
+2012-01-04 Brett Profitt <brett.profitt@gmail.com>
+
+ * engine/lib/objects.php: Fixes #3710. Returning false from update, <type>
+ event no longer deletes entity. Returning false from create, <type> still
+ deletes the entity because of the "return false to halt events" approach.
+ This will be reviewed for #3784.
+
+2012-01-02 Cash Costello <cash.costello@gmail.com>
+
+ * engine/lib/admin.php, languages/en.php,
+ views/default/admin/statistics/basic.php,
+ views/default/admin/statistics/numentities.php,
+ views/default/admin/statistics/overview.php,
+ views/default/admin/statistics/overview/basic.php,
+ .../admin/statistics/overview/numentities.php,
+ views/default/admin/statistics/server.php,
+ views/default/admin/statistics/server/php.php,
+ .../default/admin/statistics/server/web_server.php: Fixes #4164 adds a server
+ statistics page to admin area
+
+2012-01-01 cash <cash.costello@gmail.com>
+
+ * mod/diagnostics/languages/en.php, mod/diagnostics/start.php,
+ .../admin/administer_utilities/diagnostics.php,
+ .../admin/develop_utilities/diagnostics.php: moved diagnostics to administer
+ utilities menu area rather than developers
+
+ * mod/groups/languages/en.php, mod/groups/start.php: Fixes #2230 group acl
+ names are not i18n friendly
+
+ * engine/lib/access.php, languages/en.php, views/default/output/access.php:
+ Fixes #3939 if user does not have permissions to see the name of the access
+ collection, it is shown as "Limited"
+
+2012-01-01 Cash Costello <cash.costello@gmail.com>
+
+ * engine/classes/ElggExtender.php, engine/classes/ElggObject.php,
+ engine/classes/ElggRelationship.php, engine/classes/ElggRiverItem.php,
+ mod/blog/classes/ElggBlog.php, mod/thewire/classes/ElggWire.php: Fixes #3209
+ finished adding class properties documentation
+
+ * engine/classes/ElggCache.php: fixed copy and paste error in documentation
+ of ElggCache
+
+ * engine/classes/ElggDiskFilestore.php: Refs #2290 removes check for
+ username
+
+ * documentation/examples/plugins/start.php: Fixes #3225 added what was
+ missing from the basic init function example
+
+ * engine/lib/users.php: Fixes #690 admin editing a user no longer makes them
+ appear active
+
+ * engine/lib/admin.php: Fixes #4168 ignoring access when saving an admin
+ notice
+
+ * views/default/css/admin.php: Fixes #3981 adds a better pre and code style
+ to admin theme
+
+ * engine/lib/plugins.php: Fixes #3992 fixed notice when loading plugins for
+ first time
+
+ * mod/developers/languages/en.php, mod/developers/start.php,
+ .../default/admin/develop_tools/unit_tests.php,
+ mod/diagnostics/languages/en.php,
+ .../admin/develop_utilities/diagnostics.php: Fixes #4137 moves test UI to
+ developers plugin
+
+2011-12-31 cash <cash.costello@gmail.com>
+
+ * engine/lib/users.php: Fixes #4260 get_user_sites() now works
+
+ * engine/lib/notification.php: Fixes #4208 notifications do not use site
+ guid
+
+ * engine/classes/ElggSite.php: Fixes #4204 using only the relationship for
+ getting members of a site
+
+ * engine/classes/ElggWidget.php: Fixes #4255 new widget ordering code
+
+2011-12-31 Evan Winslow <evan@elgg.org>
+
+ * engine/classes/ElggGroup.php, engine/classes/ElggObject.php,
+ engine/classes/ElggSite.php, engine/classes/ElggUser.php: Refs #3209: Adds
+ property docs for the four main entity classes
+
+2011-12-31 cash <cash.costello@gmail.com>
+
+ * engine/classes/ElggWidget.php: Fixes #4259 using container guid for
+ widgets when moving
+
+2011-12-29 Jeroen Dalsem <jdalsem@coldtrick.com>
+
+ * engine/classes/ElggWidget.php: Small typo. Seems to work, but i prefer it
+ nice and tidy :)
+
+2011-12-31 cash <cash.costello@gmail.com>
+
+ * engine/lib/widgets.php: Fixes #4254 not registering the default widgets
+ callback more than once per event
+
+ * mod/groups/actions/groups/edit.php: Fixes #4152 setting access on group
+ creation river item
+
+ * engine/lib/river.php: Fixes #4258 fixes add_to_river escaping
+
+ * .../views/default/groups/group_sort_menu.php: Fixes #4228 group sort menu
+ view accepts selected menu item from page handler
+
+ * views/default/css/admin.php: Fixes #4257 updates admin theme for widget
+ menu changes
+
+ * mod/groups/upgrades/2011030101.php: Fixes #4256 reruns the forum topic
+ upgrade by checking the 5 oldest topics
+
+ * ...3101-1.8.2-fix_blog_status-b14c2a0e7b9e7d55.php, version.php: Fixes
+ #4239 rerun corrected blog status upgrade
+
+2011-12-31 Cash Costello <cash.costello@gmail.com>
+
+ * ...100-1.8.2-fix_friend_river-b17e7ff8345c2269.php, version.php: Fixes
+ #4248 fixed friend river text
+
+ * mod/blog/start.php: Fixes #4253 added backward compatibility for blog read
+ url
+
+2011-12-24 Cash Costello <cash.costello@gmail.com>
+
+ * actions/avatar/revert.php, engine/lib/users.php, languages/en.php,
+ views/default/core/avatar/upload.php: Fixes #3272 added button to revert
+ avatar
+
+ * engine/lib/elgglib.php: Refs #4009 registering the walled garden css and
+ js on every request
+
+2011-12-23 Cash Costello <cash.costello@gmail.com>
+
+ * mod/blog/lib/blog.php, mod/blog/start.php,
+ mod/blog/views/default/blog/sidebar.php,
+ mod/blog/views/default/blog/sidebar/archives.php: Fixes #3751 adds a group
+ blog archive page
+
+ * js/lib/ui.widgets.js, views/default/css/admin.php,
+ views/default/css/elements/modules.php, views/default/object/widget.php:
+ Fixes #4186 restricting the drag handle for widgets
+
+ * mod/groups/languages/en.php, mod/groups/lib/groups.php,
+ mod/groups/views/default/forms/groups/find.php,
+ mod/groups/views/default/forms/groups/search.php,
+ mod/groups/views/default/groups/sidebar/find.php,
+ mod/groups/views/default/groups/sidebar/search.php: Fixes #2074 adds group
+ search
+
+ * .../actions/groups/membership/delete_invite.php: Fixes #1922 can now
+ delete invites to invisible groups
+
+ * mod/externalpages/actions/edit.php,
+ mod/externalpages/views/default/expages/menu.php,
+ .../views/default/forms/expages/edit.php: Fixes #4069 reusing the previous
+ ElggObject for external pages
+
+ * engine/lib/annotations.php: Fixes #683 not deleting annotation when event
+ handlers return false on an update
+
+ * engine/lib/metadata.php: Fixes #682 not deleting metadata when update,
+ metadata event handlers return false
+
+ * engine/lib/users.php: Fixes #3716 setting the language when registering
+ new users
+
+2011-12-23 Ismayil Khayredinov <ismayil.khayredinov@hypejunction.com>
+
+ * views/default/navigation/tabs.php: fixes spacing. add a note on text/title
+
+2011-12-23 cash <cash.costello@gmail.com>
+
+ * mod/groups/upgrades/2011030101.php: added access override to the forum
+ upgrade
+
+ * mod/blog/actions/blog/save.php, mod/blog/start.php,
+ mod/blog/views/default/object/blog.php: Fixes #4179 not setting excerpt if
+ none set
+
+ * ...8_svn-blog_status_metadata-4645225d7b440876.php,
+ ...8b1-sites_need_a_site_guid-6d9dcbf46c0826cc.php, mod/blog/start.php,
+ mod/groups/upgrades/2011030101.php: Refs #4239 fixed upgrade scripts with bad
+ limits
+
+ * engine/classes/ElggBatch.php: Refs #4239 improved the documentation on
+ ElggBatch for the limit option
+
+ * mod/blog/views/default/blog/group_module.php: Fixes #4240 not showing
+ draft blog posts in group module
+
+2011-12-23 Ismayil Khayredinov <ismayil.khayredinov@hypejunction.com>
+
+ * views/default/navigation/tabs.php: fixes for tab rendering
+
+2011-12-19 Steve Clay <steve@mrclay.org>
+
+ * mod/tinymce/views/default/js/tinymce.php: Solves issue 4222: incorrectly
+ nested lists in Firefox
+
+2011-12-21 Cash Costello <cash.costello@gmail.com>
+
+ * CHANGES.txt, version.php: Set version to 1.8.2 and updated the changes
+ list
+
+2011-12-19 cash <cash.costello@gmail.com>
+
+ * engine/lib/widgets.php: Fixes #4184 dashboard default widgets should work
+ and widgets should be created regardless of access
+
+ * mod/oauth_api/manifest.xml: Refs #4221 added a conflict statement to
+ manifest for PECL extension
+
+ * engine/lib/pagehandler.php, views/default/css/elements/layout.php,
+ views/default/page/layouts/error.php: added more spacing to error layout
+
+2011-12-18 cash <cash.costello@gmail.com>
+
+ * js/lib/ui.widgets.js: Refs #4192 adds proper 'px' to minHeight but does
+ not solve the issue
+
+2011-12-15 Ismayil Khayredinov <ismayil.khayredinov@hypejunction.com>
+
+ * engine/lib/navigation.php, js/lib/ui.widgets.js,
+ views/default/css/elements/modules.php,
+ views/default/css/elements/navigation.php,
+ views/default/object/widget/elements/controls.php: Fix #4200: Converting
+ widgets controls into an elgg menu
+
+ * engine/lib/views.php, mod/developers/start.php, mod/embed/start.php: Fixes
+ 4209: jquery.form.js library loading
+
+2011-12-17 cash <cash.costello@gmail.com>
+
+ * engine/lib/user_settings.php, engine/lib/users.php: moved user settings
+ extensions to user_settings library
+
+2011-12-17 Cash Costello <cash.costello@gmail.com>
+
+ * mod/embed/start.php, mod/embed/views/default/embed/layout.php,
+ mod/embed/views/default/js/embed/embed.php,
+ .../views/default/embed/file_upload/content.php: Fixes #4086 handling
+ containers for embed uploading
+
+ * engine/lib/output.php: Fixes #4190 accepting full urls with non-ascii
+ characters
+
+ * mod/embed/views/default/js/embed/embed.php: Refs #3971 inserting medium
+ size thumbnails rather than small
+
+ * mod/embed/manifest.xml: embed can now be activated without the file plugin
+ as other plugins can provide content
+
+ * mod/uservalidationbyemail/start.php: Fixes #4217 user validation by email
+ now respects decisions by other plugins
+
+2011-12-15 Cash Costello <cash.costello@gmail.com>
+
+ * js/lib/ui.userpicker.js, views/default/input/userpicker.php: Fixes #4214
+ added missing dependency for userpicker
+
+2011-12-12 zcho <zcho05@gmail.com>
+
+ * engine/lib/users.php: fixes elgg_get_user_validation_status() always
+ returning null
+
+2011-12-15 Cash Costello <cash.costello@gmail.com>
+
+ * mod/uservalidationbyemail/lib/functions.php: Refs #4196 integrates fix
+ into 1.8 branch
+
+2011-12-12 hypeJunction <ismayil.khayredinov@hypejunction.com>
+
+ * mod/uservalidationbyemail/start.php: Fixed #4198 uservalidationbyemail
+ respects the return value of the register,user hook
+
+2011-12-08 cash <cash.costello@gmail.com>
+
+ * engine/lib/languages.php, js/lib/languages.js: Fixes #3181 caching
+ language js on server side with proper headers
+
+ * views/default/navigation/pagination.php: Fixes #4189 correctly getting the
+ base url in pagination view
+
+ * engine/lib/annotations.php: Fixes #4025 added a url handler for comments
+
+ * actions/admin/site/flush_cache.php, engine/lib/admin.php,
+ languages/en.php, views/default/widgets/control_panel/content.php: Fixes
+ #4185, #2111 adds control panel widget
+
+ * views/default/navigation/menu/default.php,
+ views/default/navigation/menu/elements/item.php,
+ views/default/navigation/menu/elements/section.php: added the ability to pass
+ a class to be applied to all menu item <li> elements
+
+ * engine/classes/ElggSite.php: Fixes #4182 if simplecache is empty, the
+ cache requests go through the engine and need to be white listed for the
+ walled garden
+
+2011-12-07 Cash Costello <cash.costello@gmail.com>
+
+ * mod/profile/start.php: fixed profile editing routing for profile plugin
+
+2011-12-06 Janek Lasocki-Biczysko <j.lasocki-biczysko@intrallect.com>
+
+ * engine/lib/entities.php: #4187 (get_entity optimization)
+
+2011-12-07 Cash Costello <cash.costello@gmail.com>
+
+ * js/lib/ui.widgets.js: simplified the JavaScript for deleteing a widget
+
+2011-12-06 Jeroen Dalsem <jdalsem@coldtrick.com>
+
+ * views/default/object/widget/elements/controls.php: delete action expects
+ widget_guid instead of guid
+
+2011-12-06 cash <cash.costello@gmail.com>
+
+ * engine/lib/output.php: Fixes #4173 removed use of \w since it is locale
+ sensitive
+
+2011-12-05 cash <cash.costello@gmail.com>
+
+ * engine/lib/pagehandler.php, languages/en.php,
+ views/default/errors/404.php, views/default/errors/default.php,
+ views/default/page/error.php, views/default/page/layouts/error.php: first
+ version of a 404 page
+
+2011-12-04 Cash Costello <cash.costello@gmail.com>
+
+ * views/default/page/admin.php, views/default/page/default.php: Fixes #4032
+ rendering page elements before head/foot
+
+ * engine/tests/regression/trac_bugs.php,
+ mod/blog/actions/blog/auto_save_revision.php, mod/blog/actions/blog/save.php:
+ removed some usage of deprecated methods
+
+2011-12-03 cash <cash.costello@gmail.com>
+
+ * mod/search/start.php: Fixes #4046 checking offset compared to string
+ length
+
+ * engine/lib/entities.php: Refs #4176 added elgg_list_registered_entities()
+ fix to 1.8 branch
+
+2011-12-01 Ash Ward <ash@netality.com>
+
+ * mod/messages/languages/en.php, mod/messages/start.php: Fixes #4170:
+ Messages icon on top bar doesn't have a title attribute (tooltip)
+
+2011-12-01 cash <cash.costello@gmail.com>
+
+ * views/default/graphics/ajax_loader.php: added support for passing classes
+ to ajax loader
+
+2011-11-22 Janek Lasocki-Biczysko <j.lasocki-biczysko@intrallect.com>
+
+ * engine/classes/ElggMemcache.php: Fixes #1995 (memcache: incorrect check
+ for get() return value)
+
+2011-11-25 Jeff Tilson <jrtilson@gmail.com>
+
+ * engine/lib/views.php: Need to call
+ elgg_register_simplecache_view('css/lightbox') to register the lightbox CSS
+ with simplecache
+
+2011-11-28 cash <cash.costello@gmail.com>
+
+ * engine/lib/river.php, engine/tests/api/river.php: Fixes #3496 finished up
+ this ticket by updating unit test and using more parantheses to make it clear
+ how the OR/AND gets applied
+
+2011-11-28 Cash Costello <cash.costello@gmail.com>
+
+ * mod/search/pages/search/index.php,
+ mod/search/views/default/search/search_box.php: Fixes #4139 if no mbstring
+ extension we strip characters for display with search
+
+ * mod/likes/start.php: Fixes #4116 not liking users now since people think
+ they are liking the activity entry
+
+ * .../views/default/forms/messages/process.php: Fixes #3986 not showing
+ message buttons if no messages
+
+ * views/default/css/elements/forms.php: Fixes #4052 removed the :focus
+ styling on every input element
+
+2011-11-27 Cash Costello <cash.costello@gmail.com>
+
+ * views/default/js/lightbox.php: Fixes #3773 added documentation hint for
+ using advanced features of fancybox
+
+ * actions/profile/edit.php, views/default/core/settings/account/name.php:
+ Fixes #3953 adds back the ability to change display name from settings page
+
+ * views/default/css/admin.php, views/default/css/elements/components.php,
+ views/default/css/elements/core.php: Fixes #3982 fixing scrolling issue with
+ elgg-body
+
+ * views/default/admin/plugins.php, views/default/js/admin.php,
+ views/default/object/plugin/full.php: Fixes #3954 using lightbox for plugin
+ screenshots
+
+ * engine/lib/entities.php: fixed some documentation related to subtypes
+
+ * views/rss/page/components/gallery.php: rss view type needed a gallery view
+
+2011-11-24 András Szepesházi <szepeshazi@gmail.com>
+
+ * actions/useradd.php: Fixed typo that prevented creating an admin user via
+ the Admin panel (user was created, but not elevated to admin).
+
+2011-11-25 Cash Costello <cash.costello@gmail.com>
+
+ * engine/lib/elgglib.php, languages/en.php: added a better message for php
+ libraries that don't exist on disk
+
+ * views/default/page/components/gallery.php: returning from gallery view if
+ no items in the gallery
+
+ * .../views/default/groups/membershiprequests.php: Fixes #4151 removed
+ unnecessary $user definition
+
+2011-11-17 Danny Navarro <j@dannynavarro.net>
+
+ * engine/lib/river.php: Refs #3496 improving type/subtype handling for the
+ river
+
+2011-11-23 cash <cash.costello@gmail.com>
+
+ * engine/lib/river.php, pages/river.php: Refs #4143 adds a unit test for
+ type/subtype where sql generation
+
+ * views/default/css/elements/navigation.php: Fixes #4145 using margin rather
+ than padding for topbar menu items
+
+2011-11-22 cash <cash.costello@gmail.com>
+
+ * mod/logbrowser/start.php, .../admin/administer_utilities/logbrowser.php,
+ mod/logbrowser/views/default/logbrowser/refine.php: Fixes #3775 updates the
+ log browser link and keeps the refine area open if the page is loaded with a
+ user selected
+
+2011-11-20 Cash Costello <cash.costello@gmail.com>
+
+ * mod/groups/start.php: added check in case something goes wrong with the
+ container entity of a discussion
+
+2011-11-20 cash <cash.costello@gmail.com>
+
+ * install/languages/en.php: Fixes #4140 fixed spelling mistake
+
+ * views/default/css/elements/typography.php: fixed error in css for
+ .elgg-output ordered lists
+
+2011-11-19 cash <cash.costello@gmail.com>
+
+ * views/default/object/elements/summary.php: don't display <h3> if no title
+
+2011-11-19 Cash Costello <cash.costello@gmail.com>
+
+ * views/default/navigation/menu/site.php: Fixes #4102 handling no menu items
+ for site menu
+
+ * actions/login.php, actions/user/requestnewpassword.php, languages/en.php,
+ views/default/forms/user/requestnewpassword.php: Fixes #641 users can submit
+ email address to reset password
+
+2011-11-18 cash <cash.costello@gmail.com>
+
+ * engine/lib/user_settings.php, engine/lib/users.php, languages/en.php:
+ Fixes #3792 admin can edit settings again
+
+ * languages/en.php: made status message a little more grammatical
+
+ * js/lib/pageowner.js: Fixes #4093 making sure elgg.page_owner is defined
+
+ * mod/profile/views/default/profile/owner_block.php: don't want hover menu
+ or link on owner block icon in profile
+
+ * views/default/forms/admin/site/update_advanced.php,
+ views/default/forms/admin/site/update_basic.php: line between settings and
+ save button not needed
+
+ * actions/admin/site/update_basic.php: Fixes #3996 displaying message when
+ basic site settings are saved
+
+ * views/default/css/elements/navigation.php: Fixes #3929 used a combination
+ of min-width/max-width and overflow hidden to provide better support for long
+ names
+
+ * engine/classes/ElggEntity.php, engine/classes/ElggGroup.php,
+ engine/classes/ElggObject.php, engine/classes/ElggSite.php,
+ engine/classes/ElggUser.php: Fixes #4111 guid is now an int
+
+ * mod/thewire/start.php: Fixes #4085 accepting . in usernames for the wire
+
+ * engine/tests/api/helpers.php: Fixes #4128 better test of null passed to
+ registering external files
+
+ * engine/tests/api/plugins.php,
+ engine/tests/test_files/plugin_18/manifest.xml: Fixes #4134 improved plugin
+ manifest tests by using assertIdentical more
+
+ * engine/classes/ElggPluginManifest.php, engine/tests/api/plugins.php: Fixes
+ #4133 updated type in plugin manifest test
+
+ * engine/tests/api/metastrings.php: Fixes #4132 fixed metastring delete by
+ id test
+
+ * engine/lib/metastrings.php, engine/tests/api/metastrings.php: Fixes #4131
+ elgg_delete_metastring_based_object_by_id() should return a bool
+
+ * engine/tests/api/helpers.php: Fixes #4129 fixed priority list tests
+
+ * engine/tests/api/entity_getter_functions.php: Fixes #4126 fixed test for
+ checking relationship existence
+
+ * engine/classes/ElggGroup.php, engine/lib/relationships.php: Fixes #4118
+ returning bool from leave group functions
+
+ * engine/lib/access.php, engine/tests/api/access_collections.php: Fixes
+ #4115 returning bool from remove_user_from_access_collection()
+
+ * engine/lib/access.php: Fixes #4113 returning a bool from
+ delete_access_collection()
+
+ * engine/tests/api/entity_getter_functions.php: Fixes #4125 checking count
+ correctly
+
+ * engine/tests/api/entity_getter_functions.php: Fixes #4122, #4123, #4124
+ testing for empty arrays and added some documentation for the sanity of
+ future developers
+
+ * engine/lib/users.php: Fixes #4112 get_user_by_username() returns false if
+ no user
+
+2011-11-18 Cash Costello <cash.costello@gmail.com>
+
+ * engine/tests/api/metastrings.php, engine/tests/objects/sites.php,
+ engine/tests/objects/users.php, engine/tests/test_skeleton.php: Fixes #4109
+ remove inaccurate comment due to copy & paste
+
+ * engine/lib/entities.php, engine/tests/objects/entities.php,
+ engine/tests/objects/sites.php, engine/tests/objects/users.php: Fixes #4108
+ delete() returns bool now and updated unit tests
+
+ * engine/tests/objects/entities.php: Fixes #4104, #4105 fixed casting in
+ testElggEntityMetadata()
+
+ * engine/tests/api/access_collections.php: Fixes #4114 checking type for acl
+ test
+
+2011-11-17 Cash Costello <cash.costello@gmail.com>
+
+ * engine/tests/api/metadata.php: Fixes #4120 metadata tests now check for
+ the correct types
+
+ * engine/tests/objects/entities.php: Fixes #4094, #4095 fixes casting issues
+ in unit tests - thanks to andres.fortier
+
+ * mod/externalpages/start.php: Fixes #4101 added footer links back
+
+ * mod/thewire/pages/thewire/everyone.php: Fixes #4100 adds the wire post
+ form back to all page
+
+2011-11-16 cash <cash.costello@gmail.com>
+
+ * mod/thewire/pages/thewire/friends.php,
+ mod/thewire/pages/thewire/owner.php: removed two deprecated function calls
+ from thewire
+
+2011-11-15 Cash Costello <cash.costello@gmail.com>
+
+ * CHANGES.txt: updated release date
+
+ * documentation/examples/plugins/README.txt,
+ documentation/examples/plugins/start.php: updated the plugin skeleton with
+ some instructions
+
+ * actions/avatar/crop.php, actions/avatar/upload.php: fixed bugs in avatar
+ cropping with remembering old crop coordinates and resizing the master
+
+ * engine/lib/elgglib.php, js/lib/autocomplete.js, js/lib/avatar_cropper.js,
+ js/lib/friends_picker.js, js/lib/ui.autocomplete.js,
+ js/lib/ui.avatar_cropper.js, js/lib/ui.friends_picker.js,
+ js/lib/ui.userpicker.js, js/lib/userpicker.js: atleast renaming the ui js
+ libs
+
+ * engine/classes/ElggRelationship.php: Fixes #4089 corrects documentation of
+ ElggRelationship constructor
+
+ * engine/lib/relationships.php: Fixes #4090 removes double assignment -
+ thanks to andres.fortier
+
+2011-11-14 Cash Costello <cash.costello@gmail.com>
+
+ * mod/messages/pages/messages/send.php,
+ mod/messages/views/default/forms/messages/send.php: Refs #4083 increased
+ number of friends to 50
+
+2011-11-13 cash <cash.costello@gmail.com>
+
+ * engine/classes/ElggMenuItem.php: added the missing set/get priority
+ methods to ElggMenuItem
+
+2011-11-13 Cash Costello <cash.costello@gmail.com>
+
+ * engine/lib/users.php, .../views/default/bookmarks/bookmarklet.php,
+ views/default/core/avatar/upload.php, views/default/forms/avatar/crop.php,
+ views/default/icon/default.php, views/default/icon/user/default.php,
+ views/default/output/img.php: Fixes #4082 adds output/img
+
+ * .../views/default/groups/profile/widgets.php: should be a ul rather than a
+ div
+
+ * views/default/output/confirmlink.php: need to unset the trusted link key
+
+2011-11-12 cash <cash.costello@gmail.com>
+
+ * documentation/examples/hooks/advanced.php,
+ documentation/examples/hooks/all.php, documentation/examples/hooks/basic.php,
+ documentation/examples/hooks/register/advanced.php,
+ documentation/examples/hooks/register/all.php,
+ documentation/examples/hooks/register/basic.php,
+ documentation/examples/hooks/register/emit.php,
+ documentation/examples/hooks/trigger.php,
+ documentation/examples/hooks/trigger/advanced.php,
+ documentation/examples/hooks/trigger/basic.php: cleaned up the plugin hooks
+ documentation
+
+ * documentation/examples/actions/basic.php,
+ documentation/examples/actions/manual_tokens.php,
+ documentation/examples/events/advanced.php,
+ documentation/examples/events/all.php,
+ documentation/examples/events/basic.php,
+ documentation/examples/events/emit.php,
+ documentation/examples/events/trigger.php,
+ documentation/examples/plugins/README.txt,
+ documentation/examples/plugins/languages/en.php,
+ documentation/examples/plugins/manifest.xml,
+ .../examples/plugins/manifest_options/manifest.xml,
+ .../examples/plugins/skeleton/manifest.xml, documentation/info/config.php,
+ documentation/info/manifest.xml, documentation/stubs/config.php: added better
+ plugin skeleton and added documentation to some of the examples
+
+2011-11-12 Cash Costello <cash.costello@gmail.com>
+
+ * views/default/css/admin.php: added bottom margin to info modules for
+ plugin settings
+
+ * engine/lib/users.php, mod/groups/actions/groups/edit.php,
+ mod/groups/actions/groups/membership/leave.php, mod/invitefriends/start.php,
+ pages/entities/index.php, pages/settings/account.php,
+ pages/settings/statistics.php: removed uses of deprecated function for
+ setting page owner guid
+
+ * mod/invitefriends/actions/invite.php: fixed exception being thrown when no
+ site email address has been set
+
+ * views/default/css/admin.php: added a input class for text boxes so that
+ they aren't super long
+
+ * mod/messages/pages/messages/send.php: removed deprecated function from
+ messages plugin
+
+2011-11-10 cash <cash.costello@gmail.com>
+
+ * languages/en.php, mod/pages/pages/pages/edit.php: fixed WSOD when trying
+ to edit a private page
+
+ * engine/lib/database.php: Fixes #4071 hellekin was right - it was a bad
+ idea to format queries
+
+ * js/lib/ajax.js, js/lib/elgglib.js, js/lib/security.js,
+ js/tests/ElggLibTest.js, js/tests/ElggSecurityTest.js: Fixes #4010 not
+ sending naked query strings into add ajax tokens and also fixed a few related
+ bugs in JavaScript
+
+2011-11-08 Cash Costello <cash.costello@gmail.com>
+
+ * mod/likes/languages/en.php: exclamation marks are annoying in
+ notifications
+
+ * CONTRIBUTORS.txt, COPYRIGHT.txt: we rewrote default widgets from scratch
+ so updated copyright/contributors to reflect that
+
+ * .../examples/plugins/manifest_options/manifest.xml,
+ .../examples/plugins/skeleton/manifest.xml, engine/tests/api/plugins.php,
+ engine/tests/test_files/plugin_17/manifest.xml,
+ engine/tests/test_files/plugin_18/manifest.xml, mod/blog/manifest.xml,
+ mod/bookmarks/manifest.xml, mod/categories/manifest.xml,
+ mod/custom_index/manifest.xml, mod/dashboard/manifest.xml,
+ mod/developers/manifest.xml, mod/diagnostics/manifest.xml,
+ mod/embed/manifest.xml, mod/externalpages/manifest.xml,
+ mod/file/manifest.xml, mod/garbagecollector/manifest.xml,
+ mod/groups/manifest.xml, mod/htmlawed/manifest.xml,
+ mod/invitefriends/manifest.xml, mod/likes/manifest.xml,
+ mod/logbrowser/manifest.xml, mod/logrotate/manifest.xml,
+ mod/members/manifest.xml, mod/messageboard/manifest.xml,
+ mod/messages/manifest.xml, mod/notifications/manifest.xml,
+ mod/oauth_api/manifest.xml, mod/pages/manifest.xml, mod/profile/manifest.xml,
+ mod/reportedcontent/manifest.xml, mod/search/manifest.xml,
+ mod/tagcloud/manifest.xml, mod/thewire/manifest.xml,
+ mod/tinymce/manifest.xml, mod/twitter/manifest.xml,
+ mod/twitter_api/manifest.xml, mod/uservalidationbyemail/manifest.xml,
+ mod/zaudio/manifest.xml: it is GPL General Public License not GPL Public
+ License
+
+ * views/rss/page/default.php: Refs #3150 can pass description to RSS page
+ shell
+
+2011-11-07 Cash Costello <cash.costello@gmail.com>
+
+ * engine/classes/ElggUser.php, views/default/js/initialize_elgg.php: Refs
+ #4007 previous solution to admin population in ElggUser was throwing warnings
+
+ * README.txt: fixed date on copyright and name of GPL
+
+ * mod/custom_index/start.php: removing deprecated functions from
+ custom_index plugin
+
+ * CHANGES.txt: Updated change log
+
+ * version.php: incremented version number
+
+ * INSTALL.txt: updated install instructions
+
+ * UPGRADE.txt: fixed wording in upgrade instructions
+
+2011-11-07 Evan Winslow <evan.b.winslow@gmail.com>
+
+ * documentation/coding_standards/best_practices.txt: Fixes #3397: Adds
+ 'positive' variable name standard to best practices file.
+
+2011-11-06 Cash Costello <cash.costello@gmail.com>
+
+ * mod/tinymce/views/default/js/tinymce.php,
+ .../default/tinymce/embed_custom_insert_js.php: Fixes #3853 caching a
+ bookmark for insert carot when embedding content into TinyMCE editor
+
+ * mod/tinymce/vendor/tinymce/changelog.txt,
+ .../tiny_mce/plugins/emotions/emotions.htm,
+ .../tiny_mce/plugins/emotions/js/emotions.js,
+ .../tiny_mce/plugins/emotions/langs/en_dlg.js,
+ .../tiny_mce/plugins/lists/editor_plugin.js,
+ .../tiny_mce/plugins/lists/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/media/js/media.js,
+ .../tiny_mce/plugins/media/langs/en_dlg.js,
+ .../tiny_mce/plugins/media/moxieplayer.swf,
+ .../tiny_mce/plugins/table/editor_plugin.js,
+ .../tiny_mce/plugins/table/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/table/js/table.js,
+ .../jscripts/tiny_mce/plugins/table/table.htm,
+ .../jscripts/tiny_mce/themes/advanced/charmap.htm,
+ .../tiny_mce/themes/advanced/editor_template.js,
+ .../themes/advanced/editor_template_src.js,
+ .../tiny_mce/themes/advanced/js/charmap.js,
+ .../tiny_mce/themes/advanced/js/color_picker.js,
+ .../tiny_mce/themes/advanced/langs/en_dlg.js,
+ .../vendor/tinymce/jscripts/tiny_mce/tiny_mce.js,
+ .../tinymce/jscripts/tiny_mce/tiny_mce_src.js: upgraded TinyMCE to 3.4.7
+
+ * mod/embed/views/default/js/embed/embed.php,
+ mod/likes/views/default/annotation/likes.php,
+ mod/messages/views/default/object/messages.php,
+ .../views/default/thewire/profile_status.php,
+ .../forms/twitter_api/interstitial_settings.php: removed uses of CSS class
+ .right from plugins
+
+ * views/default/annotation/default.php,
+ views/default/annotation/generic_comment.php,
+ views/default/page/elements/footer.php: remove uses of the CSS class right
+ from core
+
+ * engine/lib/entities.php, mod/blog/activate.php, mod/thewire/activate.php:
+ Fixes #4068 not forcing update on adds when the subtype exists Refs #4058
+
+ * engine/lib/cron.php: $CONFIG->input is never initialized by page handling
+ so this code never did anything
+
+ * mod/blog/activate.php, mod/blog/deactivate.php, mod/search/README.txt,
+ mod/thewire/activate.php, mod/thewire/deactivate.php, mod/thewire/start.php:
+ Fixes #4067 adds activate/deactivate scripts
+
+ * views/default/icon/user/default.php: added a href override to the user
+ icon view
+
+2011-11-05 cash <cash.costello@gmail.com>
+
+ * engine/classes/ElggMenuItem.php, engine/lib/elgglib.php,
+ engine/lib/navigation.php, engine/lib/views.php, mod/blog/start.php,
+ mod/file/start.php, mod/groups/lib/discussion.php, mod/groups/lib/groups.php,
+ .../views/default/object/groupforumtopic.php, mod/notifications/groups.php,
+ mod/notifications/index.php, mod/profile/start.php,
+ mod/thewire/pages/thewire/everyone.php, pages/settings/account.php,
+ views/default/forms/login.php, views/default/input/button.php,
+ views/default/output/access.php, views/default/page/components/gallery.php,
+ views/default/page/components/list.php,
+ views/default/page/components/module.php,
+ views/default/page/layouts/one_column.php,
+ views/default/page/layouts/widgets.php: Fixes #4024 fixed a lot of notices -
+ enough for this release - found a few bugs
+
+ * .../views/default/admin/users/unvalidated.php,
+ .../forms/uservalidationbyemail/bulk_action.php,
+ .../views/default/uservalidationbyemail/css.php,
+ .../views/default/uservalidationbyemail/js.php,
+ .../uservalidationbyemail/unvalidated_user.php: Fixes #3867 finished up
+ uservalidationbyemail styling after a great start by Sem
+
+ * views/default/css/admin.php, views/default/css/elements/core.php,
+ views/default/css/elements/helpers.php,
+ views/default/forms/admin/menu/save.php: cleaned up some CSS in admin theme
+
+ * mod/file/languages/en.php, mod/file/start.php,
+ views/default/navigation/listtype.php, views/default/navigation/viewtype.php,
+ views/default/page/elements/sidebar.php: Fixes #1253 added toggle for list
+ types to file plugin. It's not pretty so we may want to style/rethink in
+ future version
+
+ * engine/lib/input.php, engine/lib/views.php,
+ .../views/default/theme_preview/icons/avatars.php,
+ mod/file/views/default/icon/object/file.php,
+ .../views/default/groups/invitationrequests.php,
+ .../views/default/groups/membershiprequests.php,
+ .../notifications/subscriptions/forminternals.php,
+ mod/profile/views/default/profile/owner_block.php,
+ views/default/icon/default.php, views/default/icon/user/default.php,
+ views/default/input/friendspicker.php, views/default/input/userpicker.php,
+ views/default/profile/icon.php, .../river/user/default/profileiconupdate.php:
+ Fixes #3567 standardized classes for icons
+
+ * mod/file/views/default/icon/object/file.php,
+ views/default/icon/default.php, views/default/icon/user/default.php: Fixes
+ #4023 escaping alt and title attributes in icon views
+
+ * mod/groups/start.php: Refs #4059 group icon handler needs to return true
+
+ * views/default/input/date.php, views/default/output/date.php: Fixes #4050
+ using ISO 8601 standard for dates
+
+ * engine/lib/entities.php: Fixes #4018 Refs #3722 merged up to 1.7.14 into
+ master
+
+ * engine/lib/entities.php: fixed spacing on two uses of unset()
+
+ * engine/lib/views.php, js/tests/jsTestDriver.conf,
+ vendors/jquery/jquery-1.6.1.min.js, vendors/jquery/jquery-1.6.2.min.js,
+ vendors/jquery/jquery-1.6.4.min.js, vendors/jquery/jquery-ui-1.8.14.min.js,
+ views/installation/page/default.php: Fixes #4057 updates jQuery version to
+ 1.6.4
+
+ * mod/file/download.php, mod/file/pages/file/download.php,
+ mod/file/pages/file/view.php, mod/file/start.php,
+ mod/file/views/rss/file/enclosure.php: Fixes #4048 using page handler for
+ file downloads
+
+ * engine/lib/database.php: Fixes #4049 casting bool to int so it doesn't
+ disappear in the cache key
+
+ * js/lib/elgglib.js, js/tests/ElggLibTest.js: Fixes #3976 fixed unit tests
+ for normalizing urls and standardized the code from the previous merge
+
+ * js/tests/README, js/tests/jsTestDriver.conf: Changed default port to a
+ common one found in tutorials. Let me know if this is an issue. Also added
+ intructions for running the unit tests.
+
+2011-11-05 Cash Costello <cash.costello@gmail.com>
+
+ * engine/lib/pagehandler.php: Refs #4053 improved documentation of
+ page_handler()
+
+ * actions/avatar/upload.php: Refs #4011 forgot upload action
+
+ * mod/twitter_api/lib/twitter_api.php: Fixes #4061 getting icon sizes from
+ config for twitter plugin
+
+ * engine/lib/users.php, pages/account/login.php: Fixes #4060 combined some
+ page handlers for users lib
+
+2011-11-04 cash <cash.costello@gmail.com>
+
+ * engine/lib/admin.php, engine/lib/cron.php, engine/lib/elgglib.php,
+ engine/lib/entities.php, engine/lib/pagehandler.php, engine/lib/river.php,
+ engine/lib/tags.php, engine/lib/user_settings.php, engine/lib/users.php,
+ mod/blog/start.php, mod/bookmarks/start.php, mod/categories/start.php,
+ mod/dashboard/start.php, mod/developers/start.php,
+ mod/externalpages/start.php, mod/file/start.php, mod/groups/start.php,
+ mod/invitefriends/start.php, mod/members/start.php,
+ mod/messageboard/start.php, mod/messages/start.php,
+ mod/notifications/start.php, mod/pages/start.php, mod/profile/start.php,
+ mod/reportedcontent/start.php, mod/search/start.php, mod/thewire/start.php,
+ mod/twitter_api/start.php, mod/uservalidationbyemail/start.php: Fixes #4059
+ returning true when handling a page
+
+ * engine/lib/admin.php, engine/lib/deprecated-1.8.php,
+ engine/lib/elgglib.php, engine/lib/pagehandler.php, engine/lib/river.php,
+ engine/lib/tags.php, engine/lib/user_settings.php, engine/lib/users.php,
+ mod/blog/start.php, mod/bookmarks/start.php, mod/categories/start.php,
+ mod/dashboard/start.php, mod/developers/start.php, mod/diagnostics/start.php,
+ mod/externalpages/start.php, mod/file/start.php, mod/groups/start.php,
+ mod/invitefriends/start.php, mod/members/start.php,
+ mod/messageboard/start.php, mod/messages/start.php,
+ mod/notifications/start.php, mod/pages/start.php, mod/profile/start.php,
+ mod/reportedcontent/start.php, mod/search/start.php, mod/thewire/start.php,
+ mod/twitter_api/start.php, mod/uservalidationbyemail/start.php: Fixes #4059
+ page handlers all return nothing
+
+ * mod/blog/start.php: fixed typo in comment for blog page handler
+
+2011-11-04 Cash Costello <cash.costello@gmail.com>
+
+ * engine/lib/entities.php: Fixes #4058 updating a subtype if it already
+ exists
+
+ * mod/groups/languages/en.php,
+ .../views/rss/annotation/group_topic_post.php,
+ mod/groups/views/rss/discussion/replies.php,
+ mod/groups/views/rss/forum/topicposts.php,
+ mod/groups/views/rss/forum/topics.php,
+ mod/groups/views/rss/forum/viewposts.php,
+ mod/groups/views/rss/groups/contentwrapper.php,
+ mod/groups/views/rss/groups/profile/layout.php,
+ mod/groups/views/rss/groups/profileitems.php,
+ mod/groups/views/rss/object/groupforumtopic.php: Fixes #4027 updated groups
+ RSS feeds for 1.8
+
+ * .../views/default/custom_index/css.php,
+ .../views/default/page/layouts/custom_index.php: Refs #2937 featured is
+ primary module class and highlight is extension
+
+ * views/default/core/walled_garden/login.php,
+ views/default/core/walled_garden/lost_password.php,
+ views/default/core/walled_garden/register.php,
+ views/default/page/components/module.php: Fixes #4047 header and footer
+ optional for the module view
+
+2011-11-03 Cash Costello <cash.costello@gmail.com>
+
+ * views/default/css/ie7.php: updated CSS for walled garden and IE7
+
+ * views/default/forms/login.php: Fixes #3882 Remember me needed to be
+ floated before the button was added
+
+ * js/tests/jsTestDriver.conf: updated jsTest configuration for new jQuery
+ and hooks library
+
+ * js/tests/ElggLanguagesTest.js, js/tests/ElggSecurityTest.js: Fixes #4051 -
+ fixes security token unit test and language unit tests
+
+ * js/lib/elgglib.js: Fixes #4034 now using approach that exists in IE to
+ find elements in an Array
+
+ * js/lib/hooks.js: Refs #4051 hooks trigger function was returning undefined
+ when it should have been returning true
+
+ * js/classes/ElggPriorityList.js: Refs #4051 insert also needed to check for
+ undefined priorities
+
+ * js/classes/ElggPriorityList.js: Refs #4051 fixed insert for case when
+ priority is set to 0
+
+ * js/tests/ElggPriorityListTest.js: Refs #4051 fixed bad unit test for
+ ElggPriorityList.insert
+
+2011-11-03 Sem <sembrestels@riseup.net>
+
+ * .../forms/uservalidationbyemail/bulk_action.php,
+ .../views/default/uservalidationbyemail/css.php,
+ .../views/default/uservalidationbyemail/js.php,
+ .../uservalidationbyemail/unvalidated_user.php, views/default/css/admin.php:
+ Refs #3867. Unvalidated users is an unordered list now. Added right class and
+ other css helpers to admin css. Standarized css namespaces and dashes in
+ classes. Acomplishing code standards.
+
+2011-11-03 Janek Lasocki-Biczysko <j.lasocki-biczysko@intrallect.com>
+
+ * engine/lib/entities.php: Fixes 4041 (Deleted entities remain in memcache)
+
+2011-11-03 Cash Costello <cash.costello@gmail.com>
+
+ * mod/bookmarks/languages/en.php,
+ mod/bookmarks/views/rss/object/bookmarks.php, mod/file/start.php,
+ mod/file/views/rss/file/enclosure.php, mod/file/views/rss/object/file.php,
+ mod/search/views/rss/search/list.php,
+ mod/search/views/rss/search/listing.php, mod/thewire/languages/en.php,
+ mod/thewire/views/rss/object/thewire.php,
+ views/rss/annotation/generic_comment.php, views/rss/group/default.php,
+ views/rss/object/default.php, views/rss/user/default.php: Refs #4027 updated
+ all rss views except for groups
+
+ * mod/bookmarks/pages/bookmarks/all.php,
+ mod/bookmarks/pages/bookmarks/friends.php, mod/file/languages/en.php,
+ mod/file/pages/file/world.php, mod/groups/languages/en.php,
+ mod/groups/lib/discussion.php, mod/groups/lib/groups.php,
+ .../views/default/discussion/group_module.php: Fixes #4042 made sure empty
+ content pages had a message about no content
+
+2011-11-03 Sem <sembrestels@riseup.net>
+
+ * js/lib/elgglib.js, js/tests/ElggLibTest.js: Fixes #3976.
+ elgg.normalize_url() js function has the fix in #3747.
+
+2011-11-02 Cash Costello <cash.costello@gmail.com>
+
+ * engine/start.php, install/ElggInstaller.php: input lib depends on
+ pageowner lib now
+
+ * .../views/default/theme_preview/forms.php: Refs #4039 updated the theming
+ sandbox for radio button classes
+
+2011-11-02 Sem <sembrestels@riseup.net>
+
+ * .../forms/uservalidationbyemail/bulk_action.php,
+ .../views/default/uservalidationbyemail/css.php,
+ .../uservalidationbyemail/unvalidated_user.php: Refs #3867.
+ elgg_view_image_block used for list users. Bulk operations as a list.
+
+ * mod/uservalidationbyemail/start.php,
+ .../views/default/admin/users/unvalidated.php,
+ .../forms/uservalidationbyemail/bulk_action.php,
+ .../views/default/uservalidationbyemail/css.php,
+ .../views/default/uservalidationbyemail/js.php,
+ .../uservalidationbyemail/unvalidated_user.php: Fixes #3867. Rewrite and
+ style unvalidated users administration area.
+
+2011-11-02 Janek Lasocki-Biczysko <j.lasocki-biczysko@intrallect.com>
+
+ * views/default/css/elements/forms.php: #4039 (Incorrect CSS class set in
+ input/radio)
+
+2011-11-01 cash <cash.costello@gmail.com>
+
+ * .../views/default/admin/developers/settings.php,
+ .../admin/develop_utilities/diagnostics.php,
+ .../views/default/admin/appearance/expages.php,
+ mod/externalpages/views/default/expages/menu.php,
+ views/default/admin/appearance/menu_items.php,
+ views/default/admin/appearance/profile_fields.php,
+ views/default/admin/plugin_settings.php,
+ views/default/admin/settings/advanced.php,
+ views/default/admin/settings/basic.php, views/default/css/admin.php: Fixes
+ #3672 added class for settings forms in admin area
+
+ * engine/lib/access.php, engine/lib/annotations.php,
+ engine/lib/entities.php, engine/lib/location.php, engine/lib/metadata.php,
+ engine/lib/plugins.php, engine/lib/private_settings.php,
+ engine/lib/relationships.php: standardized the elgg_get_entities* function
+ @return documentation
+
+ * mod/blog/lib/blog.php, mod/blog/views/default/object/blog.php,
+ mod/bookmarks/pages/bookmarks/view.php,
+ mod/bookmarks/views/default/object/bookmarks.php,
+ mod/file/views/default/object/file.php,
+ .../views/default/object/groupforumtopic.php,
+ mod/pages/views/default/object/page_top.php,
+ views/default/object/elements/full.php: Fixes #4035 made the entity view
+ pages consistent for blog, bookmarks, file, pages, and forum posts
+
+ * js/lib/ui.js: Fixes #4022 made JS lib a little more consistent
+
+ * .../javascript_coding_standards.txt, js/lib/avatar_cropper.js,
+ js/lib/configuration.js, js/lib/elgglib.js, js/lib/hooks.js, js/lib/ui.js,
+ js/lib/ui.widgets.js, js/lib/userpicker.js,
+ mod/blog/views/default/js/blog/save_draft.php,
+ mod/bookmarks/views/default/bookmarks/js.php,
+ .../views/default/js/developers/developers.php,
+ mod/embed/views/default/js/embed/embed.php,
+ mod/messageboard/views/default/messageboard/js.php,
+ mod/thewire/views/default/js/thewire.php,
+ mod/tinymce/views/default/js/tinymce.php,
+ .../views/default/uservalidationbyemail/js.php: added semi-colons after
+ function expressions
+
+ * engine/classes/ElggUser.php, js/classes/ElggUser.js: Fixes #4007 merged in
+ sembrestels fix for ElggUser.isAdmin but used prototype instead of extending
+ object in constructor
+
+ * views/default/output/text.php: Fixes #4038 corrects comment for view
+ output/text
+
+2011-10-30 cash <cash.costello@gmail.com>
+
+ * engine/lib/elgglib.php,
+ views/default/core/account/login_walled_garden.php,
+ views/default/core/walled_garden/body.php,
+ views/default/core/walled_garden/login.php,
+ views/default/core/walled_garden/lost_password.php,
+ views/default/core/walled_garden/register.php,
+ views/default/css/walled_garden.php, views/default/forms/login.php,
+ views/default/js/walled_garden.php, views/default/page/walled_garden.php:
+ added back support for registration and forgotten passwords to walled garden
+ index
+
+ * _graphics/walled_garden/one_column_bottom.png,
+ _graphics/walled_garden/one_column_middle.png,
+ _graphics/walled_garden/one_column_top.png,
+ _graphics/walled_garden/two_column_bottom.png,
+ _graphics/walled_garden/two_column_middle.png,
+ _graphics/walled_garden/two_column_top.png,
+ _graphics/walled_garden_background_bottom.gif,
+ _graphics/walled_garden_background_extend.gif,
+ _graphics/walled_garden_background_top.gif,
+ _graphics/walled_garden_backgroundfull_bottom.gif,
+ _graphics/walled_garden_backgroundfull_top.gif, engine/lib/elgglib.php,
+ views/default/core/walled_garden/body.php,
+ views/default/css/walled_garden.php, views/default/page/walled_garden.php:
+ basic walled garden implementation for logging in
+
+ * views/default/core/account/login_box.php: added support for specifying the
+ module type to login box
+
+2011-10-30 Brett Profitt <brett.profitt@gmail.com>
+
+ * engine/lib/plugins.php, languages/en.php, views/default/admin/plugins.php:
+ Fixes #2821. Plugins that are active and cannot be started emit an admin
+ notice.
+
+2011-10-30 Cash Costello <cash.costello@gmail.com>
+
+ * engine/lib/input.php, mod/htmlawed/start.php,
+ views/default/output/longtext.php: Fixes #3370 running the anti-spam option
+ of htmlawed when filtering for output
+
+ * engine/lib/output.php: removed non-overridable insertion of inline style
+ to links
+
+ * engine/lib/configuration.php, engine/lib/pageowner.php: setting
+ $CONFIG->context earlier to avoid using the context functions before it is
+ initialized
+
+2011-10-29 Brett Profitt <brett.profitt@gmail.com>
+
+ * actions/widgets/save.php, views/default/widgets/river_widget/content.php,
+ views/default/widgets/river_widget/edit.php: Fixes #4001. Activity widget
+ passes a context so correct output is displayed upon save.
+
+ * js/lib/elgglib.js, js/lib/security.js: Fixes #4010, refs #3927. Fixed
+ elgg.security.addToken() to work with query strings, relative URLs, and full
+ URLs.
+
+ * mod/blog/lib/blog.php, mod/blog/start.php, mod/notifications/index.php,
+ mod/thewire/start.php, mod/tinymce/start.php: Refs #3859. Added
+ elgg_register_simplecache_view() to core plugins' js.
+
+ * engine/lib/cache.php: Fixes #4029, refs #3859.
+ elgg_invalidate_simplecache() resets the lastcached and lastupdate datasets.
+ Added documentation about how to use simple cache views.
+
+2011-10-29 cash <cash.costello@gmail.com>
+
+ * .../examples/plugins/full_manifest/manifest.xml,
+ .../examples/plugins/manifest_options/manifest.xml,
+ .../examples/plugins/simple_manifest/manifest.xml,
+ .../examples/plugins/skeleton/manifest.xml: better organization for the
+ manifests and plugin skeleton
+
+ * .../examples/plugins/full_manifest/manifest.xml,
+ documentation/examples/plugins/manifest.xml,
+ .../examples/plugins/simple_manifest/manifest.xml: creates a simple manifest
+ for people to copy and use
+
+ * .../vendors/oauth/library/OAuthRequestLogger.php,
+ .../vendors/oauth/library/OAuthRequestSigner.php,
+ .../vendors/oauth/library/OAuthRequestVerifier.php,
+ .../vendors/oauth/library/OAuthRequester.php,
+ .../vendors/oauth/library/OAuthServer.php: Refs #4028 reset the oAuth lib to
+ version r64 of oauth-php
+
+ * engine/classes/ElggEntity.php, engine/classes/Locatable.php,
+ languages/en.php, views/default/annotation/generic_comment.php,
+ views/rss/annotation/default.php, views/rss/annotation/generic_comment.php,
+ views/rss/group/default.php, views/rss/object/creator.php,
+ views/rss/object/default.php, views/rss/object/georss.php,
+ views/rss/output/url.php, views/rss/page/components/creator.php,
+ views/rss/page/components/georss.php, views/rss/page/default.php,
+ views/rss/page/elements/comments.php, views/rss/river/item.php,
+ views/rss/search/entity_list.php, views/rss/user/default.php: Fixes #3201
+ updates rss view type for core Elgg
+
+ * views/php/api/output.php, views/php/group/default.php,
+ views/php/object/default.php, views/php/page/default.php,
+ views/php/site/default.php, views/php/user/default.php: Refs #3201 updates
+ the php view type
+
+ * views/json/api/output.php, views/json/entities/entity_list.php,
+ views/json/group/default.php, views/json/object/default.php,
+ views/json/site/default.php, views/json/user/default.php,
+ views/php/search/entity_list.php: Refs #3201 this finishes the updates on the
+ JSON view
+
+ * engine/classes/ElggRiverItem.php, views/json/page/components/list.php,
+ views/json/page/default.php, views/json/river/item.php,
+ views/json/river/item/list.php, views/json/search/entity_list.php: Refs #3201
+ updates json river views and removed old search view
+
+ * engine/lib/views.php, .../views/default/river/object/blog/create.php,
+ .../default/river/object/bookmarks/create.php,
+ .../views/default/river/object/file/create.php,
+ .../river/annotation/group_topic_post/reply.php,
+ mod/groups/views/default/river/group/create.php,
+ .../river/object/groupforumtopic/create.php,
+ .../default/river/relationship/member/create.php,
+ .../default/river/object/messageboard/create.php,
+ .../views/default/river/object/page/create.php,
+ .../views/default/river/object/thewire/create.php,
+ .../river/annotation/generic_comment/create.php,
+ views/default/river/elements/layout.php, views/default/river/item.php,
+ views/default/river/relationship/friend/create.php,
+ .../river/user/default/profileiconupdate.php,
+ views/default/river/user/default/profileupdate.php: adds a river layout view
+ that all river views should use
+
+ * mod/search/search_hooks.php: Refs #3983 merged fix into master
+
+ * pages/avatar/view.php: Refs #3396 fixed the integration of this 1.7 fix
+ into 1.8 and also added better expires header
+
+2011-10-29 Cash Costello <cash.costello@gmail.com>
+
+ * engine/classes/ElggEntity.php, mod/profile/icon.php,
+ mod/profile/icondirect.php, mod/profile/start.php: Fixes #3920 profile plugin
+ adds a fast loading of user avatars
+
+ * mod/messages/pages/messages/read.php, mod/messages/start.php,
+ mod/messages/views/default/object/messages.php: Fixes #4015 decrementing the
+ count before adding to the topbar
+
+2011-10-28 Cash Costello <cash.costello@gmail.com>
+
+ * js/lib/ui.js, views/default/input/date.php: Fixes #4012 when using a
+ timestamp with input/date, return UTC time rather than local time
+
+ * .../views/default/theme_preview/forms.php: using correct date string now
+ in developers form sandbox
+
+2011-10-27 cash <cash.costello@gmail.com>
+
+ * actions/avatar/crop.php, engine/lib/views.php,
+ mod/groups/actions/groups/edit.php: Fixes #4011 icon sizes are configurable
+ now
+
+ * mod/externalpages/start.php, views/default/css/elements/navigation.php,
+ views/default/css/ie7.php, views/default/forms/login.php,
+ views/default/page/walled_garden.php: Fixes #3863 introduced
+ elgg-menu-general so that elgg-menu-footer can be specific to site footer
+
+ * views/default/object/plugin.php, views/default/object/plugin/advanced.php,
+ views/default/object/plugin/full.php, views/default/object/plugin/simple.php:
+ Refs #3917 removed more code from simple plugin interface
+
+ * mod/search/start.php, mod/search/views/default/search/css.php,
+ mod/search/views/default/search/header.php,
+ mod/search/views/default/search/search_box.php: Fixes #3687 added
+ .elgg-search-header for css specific to header search box
+
+ * js/lib/avatar_cropper.js: Fixes #3832 initialize avatar crop area
+
+ * mod/groups/lib/groups.php,
+ .../views/default/groups/membershiprequests.php: Refs #3296 displaying all
+ group membership requests on one page
+
+ * views/rss/page/default.php: Fixes #3150 added a blank description field so
+ RSS is valid - any better ideas?
+
+ * engine/lib/views.php, .../views/default/custom_index/css.php,
+ .../views/default/page/layouts/custom_index.php: Fixes #2937 added
+ .elgg-module-front
+
+2011-10-27 Cash Costello <cash.costello@gmail.com>
+
+ * pages/account/register.php, views/default/css/admin.php,
+ views/default/css/elements/forms.php: Refs #3672 updated account forms for
+ max width
+
+ * engine/lib/users.php: login page should not be displayed to logged in
+ users
+
+2011-10-26 Brett Profitt <brett.profitt@gmail.com>
+
+ * UPGRADE.txt: Made instructions for removing mod/profile clearer.
+
+2011-10-26 Cash Costello <cash.costello@gmail.com>
+
+ * mod/likes/start.php: Fixes #3958 added special catch for liking groups
+
+ * languages/en.php, .../admin/appearance/profile_fields/list.php,
+ views/default/forms/profile/fields/add.php: Fixes #3926 updated spacing for
+ edit profile field forms
+
+2011-10-26 Sem <sembrestels@riseup.net>
+
+ * mod/externalpages/start.php, views/default/css/walled_garden.php,
+ views/default/page/walled_garden.php: Closes #3947. External pages are now
+ viewable by visitors in walled-garden sites. Footer menu is also added into
+ walled-garden logging page.
+
+2011-10-25 cash <cash.costello@gmail.com>
+
+ * views/default/object/elements/summary.php: Fixes #2292 added
+ object/summary/extend view
+
+ * mod/blog/views/default/object/blog.php,
+ mod/bookmarks/views/default/object/bookmarks.php,
+ mod/file/views/default/object/file.php,
+ mod/pages/views/default/object/page_top.php,
+ views/default/object/elements/full.php: added new view for the full display
+ of objects
+
+2011-10-25 Cash Costello <cash.costello@gmail.com>
+
+ * views/ical/export/entity.php, views/ical/object/default.php,
+ views/ical/page/default.php, views/ical/search/entity_list.php: Refs #3201 a
+ working ical view type
+
+2011-10-24 cash <cash.costello@gmail.com>
+
+ * mod/profile/views/default/profile/metatags.php,
+ views/foaf/page/default.php, views/foaf/search/entity_list.php,
+ views/foaf/user/default.php: Refs #3201 updated foaf link to only be added to
+ user's pages
+
+ * views/failsafe/messages/exceptions/exception.php,
+ views/failsafe/page/default.php: Refs #3201 updating failsafe viewtype to
+ Elgg standards for CSS
+
+ * .../admin/develop_utilities/diagnostics.php,
+ .../views/default/forms/diagnostics/download.php: Fixes #3868 removed
+ unnecessary form for downloading the diagnostics report
+
+ * mod/blog/views/default/forms/blog/save.php,
+ mod/blog/views/default/object/blog.php,
+ mod/bookmarks/views/default/object/bookmarks.php,
+ mod/file/views/default/object/file.php,
+ mod/pages/views/default/forms/pages/edit.php,
+ mod/pages/views/default/object/page_top.php: Fixes #3974 blog, bookmarks,
+ file, and pages plugins consistent in integration with categories plugin
+
+2011-10-23 germanazo <germanazo@phpdev>
+
+ * engine/lib/users.php: Cleanned the login failures on passwords resets,
+ this have more sense
+
+2011-10-23 Cash Costello <cash.costello@gmail.com>
+
+ * views/default/page/components/module.php: Fixes #4003 footer in modules is
+ included by default
+
+ * views/default/input/reset.php, views/default/input/submit.php: Refs #3810
+ standardizes the button views
+
+2011-10-23 Brett Profitt <brett.profitt@gmail.com>
+
+ * .../admin/appearance/profile_fields/list.php, views/default/js/admin.php:
+ Fixes #3864. Removed old code from profile fields sorting. Name spaced IDs
+ and classes.
+
+ * engine/lib/elgglib.php, js/lib/avatar_cropper.js, js/lib/ui.js,
+ views/default/forms/avatar/crop.php: Fixes #3914. Pulled avatar code out into
+ its own library.
+
+ * js/lib/ui.js, views/default/css/elements/misc.php,
+ views/default/forms/avatar/crop.php: Fixes #3914. Moved avatar cropping to
+ ui.js.
+
+ * engine/lib/plugins.php: Fixes #3991. Populating provided_by in
+ elgg_get_plugins_provides().
+
+ * UPGRADE.txt: Fixes #3975. Added mod/profile to the list of dirs to remove
+ for an upgrade.
+
+ * mod/blog/manifest.xml, mod/bookmarks/manifest.xml,
+ mod/categories/manifest.xml, mod/custom_index/manifest.xml,
+ mod/dashboard/manifest.xml, mod/developers/manifest.xml,
+ mod/diagnostics/manifest.xml, mod/embed/manifest.xml,
+ mod/externalpages/manifest.xml, mod/file/manifest.xml,
+ mod/garbagecollector/manifest.xml, mod/groups/manifest.xml,
+ mod/htmlawed/manifest.xml, mod/invitefriends/manifest.xml,
+ mod/likes/manifest.xml, mod/logbrowser/manifest.xml,
+ mod/logrotate/manifest.xml, mod/members/manifest.xml,
+ mod/messageboard/manifest.xml, mod/messages/manifest.xml,
+ mod/notifications/manifest.xml, mod/oauth_api/manifest.xml,
+ mod/pages/manifest.xml, mod/profile/manifest.xml,
+ mod/reportedcontent/manifest.xml, mod/search/manifest.xml,
+ mod/tagcloud/manifest.xml, mod/thewire/manifest.xml,
+ mod/tinymce/manifest.xml, mod/twitter/manifest.xml,
+ mod/twitter_api/manifest.xml, mod/uservalidationbyemail/manifest.xml,
+ mod/zaudio/manifest.xml: Fixes #3959. Using elgg_release in core plugins.
+
+2011-10-21 Cash Costello <cash.costello@gmail.com>
+
+ * install/ElggInstaller.php, install/cli/sample_installer.php: Fixes #3995
+ the batch installer now skips the settings file creation step if settings.php
+ already exists
+
+ * install/ElggInstaller.php: Fixes #3994 cleaned up session handling for the
+ installer
+
+ * engine/lib/filestore.php: don't set default filestore if we don't have a
+ dataroot
+
+ * engine/classes/ElggSite.php: updated ElggSite::disable() to conform to
+ ElggEntity::disable()
+
+ * engine/classes/ElggMetadata.php, engine/lib/entities.php: Fixes #3988
+ correctly passing user_guid through canEdit for metadata
+
+ * engine/lib/entities.php: fixed access of non-object property in entities
+ lib
+
+ * engine/lib/access.php: Fixes #3989 fixed access of non-object property in
+ access lib
+
+ * views/installation/input/access.php, views/installation/input/button.php,
+ views/installation/input/checkbox.php, views/installation/input/dropdown.php,
+ views/installation/input/form.php, views/installation/input/password.php,
+ views/installation/input/text.php: cleaned up input views for installation so
+ that no notices are thrown
+
+2011-10-21 Janek Lasocki-Biczysko <j.lasocki-biczysko@intrallect.com>
+
+ * views/default/input/reset.php: #3810 (No class in input/reset view)
+
+2011-10-20 Brett Profitt <brett.profitt@gmail.com>
+
+ * views/default/admin/plugins.php: Fixes #3990 Using
+ ElggPlugin->getFriendlyName() for sorting alphabetically to avoid WSODs with
+ invalid plugins.
+
+ * engine/start.php: Fixes #3680. Explicitly connecting to db in start.php.
+
+ * languages/en.php: Fixes #3968. Added 'on' and 'off' to core language.
+
+ * views/default/forms/widgets/save.php: Fixes #3951. Added label for access
+ dropdown in widget edit view.
+
+2011-10-19 Cash Costello <cash.costello@gmail.com>
+
+ * engine/lib/filestore.php, engine/lib/plugins.php: fixed minor errors in
+ the documentation in plugins and filestore lib
+
+2011-10-18 Cash Costello <cash.costello@gmail.com>
+
+ * engine/lib/users.php: fixed typo in setting the default profile fields
+
+2011-10-17 cash <cash.costello@gmail.com>
+
+ * actions/useradd.php: added another check to useradd action
+
+2011-10-17 Cash Costello <cash.costello@gmail.com>
+
+ * engine/classes/ElggPluginPackage.php: added additional readme names for
+ display on plugin page
+
+2011-10-15 Brett Profitt <brett.profitt@gmail.com>
+
+ * js/lib/elgglib.js, js/lib/hooks.js: Fixes #3540. Added "instant hooks" to
+ JS hooks engine. elgg.register_instant_hook(name, type) will cause any
+ handler registering to that hook to be immediately executed if the hook has
+ been previously triggered. Open for better suggestions about the name.
+
+2011-10-14 Brett Profitt <brett.profitt@gmail.com>
+
+ * js/lib/security.js: Fixes #3927. elgg.security.addToken() works for URLs
+ without query strings.
+
+ * js/lib/elgglib.js: Refs #3927, #3976. Added elgg.parse_url() and
+ elgg.parse_str().
+
+2011-10-14 Janek Lasocki-Biczysko <j.lasocki-biczysko@intrallect.com>
+
+ * engine/classes/ElggMemcache.php: Ticket #3928 updated
+ ElggMemecache->save() to take 3rd optional parameter
+
+2011-10-14 Cash Costello <cash.costello@gmail.com>
+
+ * .../river/user/default/profileiconupdate.php: Fixes #3977 not showing
+ hover menu on avatar update in river
+
+2011-10-13 Brett Profitt <brett.profitt@gmail.com>
+
+ * engine/lib/annotations.php: Fixes #3901. Corrected typo for maxtime
+ sorting.
+
+ * actions/admin/plugins/simple_update_states.php,
+ documentation/examples/plugins/manifest.xml,
+ engine/classes/ElggPluginManifest.php,
+ engine/classes/ElggPluginManifestParser18.php, engine/lib/admin.php,
+ engine/tests/api/plugins.php, engine/tests/test_files/plugin_18/manifest.xml,
+ languages/en.php, mod/blog/manifest.xml, mod/bookmarks/manifest.xml,
+ mod/categories/manifest.xml, mod/custom_index/manifest.xml,
+ mod/dashboard/manifest.xml, mod/developers/manifest.xml,
+ mod/diagnostics/manifest.xml, mod/embed/manifest.xml,
+ mod/externalpages/manifest.xml, mod/file/manifest.xml,
+ mod/garbagecollector/manifest.xml, mod/groups/manifest.xml,
+ mod/htmlawed/manifest.xml, mod/invitefriends/manifest.xml,
+ mod/likes/manifest.xml, mod/logbrowser/manifest.xml,
+ mod/logrotate/manifest.xml, mod/members/manifest.xml,
+ mod/messageboard/manifest.xml, mod/messages/manifest.xml,
+ mod/notifications/manifest.xml, mod/pages/manifest.xml,
+ mod/profile/manifest.xml, mod/reportedcontent/manifest.xml,
+ mod/search/manifest.xml, mod/tagcloud/manifest.xml, mod/thewire/manifest.xml,
+ mod/tinymce/manifest.xml, mod/twitter/manifest.xml,
+ mod/uservalidationbyemail/manifest.xml, mod/zaudio/manifest.xml: Fixes #3917.
+ Removed uses of admin interface in manifests. Removed related code.
+
+2011-10-13 cash <cash.costello@gmail.com>
+
+ * js/lib/userpicker.js, views/default/input/userpicker.php: added
+ documentation for the userpicker
+
+2011-10-13 Brett Profitt <brett.profitt@gmail.com>
+
+ * mod/categories/listing.php, mod/categories/pages/categories/listing.php,
+ mod/categories/start.php: Fixes #3746. Moved the categories page handler
+ script. Updated the layout call.
+
+ * views/default/css/admin.php: Fixes #3880. Removed the too greedy CSS rule
+ for elgg-admin-notice a so only the close icon is float right.
+
+2011-10-13 cash <cash.costello@gmail.com>
+
+ * js/lib/userpicker.js: fixed bug where a removed user could not be added
+ again in userpicker
+
+2011-10-13 Brett Profitt <brett.profitt@gmail.com>
+
+ * languages/en.php: Fixes #3734. Changed "Tested value" to "Expected value"
+ in the plugin deps matrix.
+
+2011-10-13 cash <cash.costello@gmail.com>
+
+ * engine/lib/input.php, js/lib/userpicker.js,
+ views/default/css/elements/forms.php, views/default/input/userpicker.php:
+ displaying users that have been selected and added remove capability
+
+2011-10-13 Brett Profitt <brett.profitt@gmail.com>
+
+ * mod/twitter_api/languages/en.php,
+ .../default/plugins/twitter_api/usersettings.php: Fixes #3177. Don't show the
+ authorize twitter plugin setting if the admin hasn't set up the plugin.
+
+2011-10-13 cash <cash.costello@gmail.com>
+
+ * js/lib/userpicker.js, views/default/input/userpicker.php: got the friends
+ option working for user picker
+
+2011-10-12 Brett Profitt <brett.profitt@gmail.com>
+
+ * engine/lib/output.php, engine/tests/api/helpers.php: Fixes #3747. Using
+ filter_var to check for any valid URI.
+
+2011-10-12 cash <cash.costello@gmail.com>
+
+ * engine/lib/input.php, mod/groups/views/default/group/default.php,
+ views/default/css/elements/forms.php, views/default/object/default.php,
+ views/default/user/default.php: Simple theme for autocomplete
+
+2011-10-11 Brett Profitt <brett.profitt@gmail.com>
+
+ * version.php: Setting version to 1.8.1b1 instead of 1.8.1b.
+
+ * CHANGES.txt: Fixed extra space in changes.
+
+2011-10-10 Brett Profitt <brett.profitt@gmail.com>
+
+ * CHANGES.txt: Ordered the bugfixes in a for relevance.
+
+ * CHANGES.txt: Fixed stray * in changes.
+
+ * CHANGES.txt, version.php: Version bump. Updated changes.
+
+2011-10-10 cash <cash.costello@gmail.com>
+
+ * engine/lib/user_settings.php, languages/en.php: Fixes #3952 handling
+ exceptions when password checks fail when changing password
+
+ * mod/blog/lib/blog.php, mod/bookmarks/pages/bookmarks/friends.php,
+ mod/bookmarks/pages/bookmarks/owner.php, mod/file/pages/file/friends.php,
+ mod/file/pages/file/owner.php, mod/pages/pages/pages/friends.php,
+ mod/pages/pages/pages/owner.php, mod/thewire/pages/thewire/friends.php,
+ mod/thewire/pages/thewire/owner.php: Refs #3916 added checks to all content
+ plugins in master for page owner in mine and friends pages
+
+ * mod/file/actions/file/upload.php, mod/file/languages/en.php: Refs #3919
+ merged file upload failure check to master
+
+2011-10-10 Cash Costello <cash.costello@gmail.com>
+
+ * actions/widgets/save.php: Fixes #3950 falling back to deprecated view when
+ saving a widget
+
+ * .../views/default/widgets/bookmarks/edit.php: Fixes #3949 bookmarks widget
+ fix
+
+2011-10-09 Cash Costello <cash.costello@gmail.com>
+
+ * languages/en.php, mod/messages/languages/en.php,
+ mod/notifications/languages/en.php,
+ .../core/settings/account/notifications.php: Fixes #595 separating email
+ address from email notification in language strings
+
+ * js/lib/ui.js, views/default/core/account/login_box.php,
+ views/default/forms/login.php, views/default/forms/register.php,
+ views/default/forms/user/requestnewpassword.php: Fixes #3673 added autofocus
+ class
+
+ * engine/lib/sites.php: Fixes #3796 get_site_by_url() now respects class
+ inheritance
+
+ * engine/classes/ElggSite.php: Fixes #3729 handling forwarding to page when
+ logging into a walled garden
+
+ * engine/tests/api/access_collections.php,
+ engine/tests/api/entity_getter_functions.php, engine/tests/api/helpers.php,
+ engine/tests/api/metadata.php, engine/tests/objects/entities.php: Fixes #3948
+ cleaning up stuff left behind by unit tests
+
+ * engine/classes/ElggSite.php: Fixes #3878 registering the security token
+ action as an external page
+
+2011-10-08 Cash Costello <cash.costello@gmail.com>
+
+ * engine/tests/objects/entities.php: Fixes #3946 deleting the temporary
+ entities created in entity unit tests
+
+ * engine/lib/entities.php, engine/tests/objects/sites.php: Fixes #3897 fixed
+ source of infinite regression loop in delete_entity()
+
+ * engine/classes/ElggAnnotation.php, engine/lib/access.php,
+ engine/lib/annotations.php, engine/tests/api/access_collections.php,
+ engine/tests/api/helpers.php, engine/tests/api/metadata.php,
+ engine/tests/objects/entities.php, engine/tests/objects/users.php,
+ engine/tests/regression/trac_bugs.php, mod/groups/start.php: Fixes #3942
+ fixed all the warnings and notices in the unit tests
+
+ * engine/classes/ElggPriorityList.php: Fixes #3945 using reset on the array
+
+ * engine/lib/widgets.php: Fixes #3944 fixing the default widgets
+ implementation
+
+ * engine/lib/entities.php: Fixes #3943 returning false in
+ can_write_to_container() if container does not exist
+
+ * engine/lib/elgglib.php: need to check if something exists before checking
+ its type
+
+ * engine/tests/ui/submenu.php: removed unused unit tests for old submenu
+ code
+
+ * engine/classes/ElggPlugin.php, engine/lib/plugins.php,
+ engine/lib/private_settings.php: Fixes #3743 returning bool instead of int
+ when setting a private setting
+
+ * .../views/default/plugins/logrotate/settings.php: fixed bug with variable
+ name in log rotation
+
+ * engine/lib/access.php, engine/lib/actions.php, engine/lib/admin.php,
+ engine/lib/annotations.php, engine/lib/cache.php, engine/lib/calendar.php,
+ engine/lib/configuration.php, engine/lib/cron.php, engine/lib/database.php,
+ engine/lib/elgglib.php, engine/lib/entities.php, engine/lib/export.php,
+ engine/lib/extender.php, engine/lib/filestore.php, engine/lib/group.php,
+ engine/lib/input.php, engine/lib/metadata.php, engine/lib/metastrings.php,
+ engine/lib/navigation.php, engine/lib/notification.php,
+ engine/lib/objects.php, engine/lib/opendd.php, engine/lib/output.php,
+ engine/lib/pagehandler.php, engine/lib/pageowner.php, engine/lib/pam.php,
+ engine/lib/plugins.php, engine/lib/private_settings.php,
+ engine/lib/relationships.php, engine/lib/river.php, engine/lib/sessions.php,
+ engine/lib/sites.php, engine/lib/statistics.php, engine/lib/system_log.php,
+ engine/lib/tags.php, engine/lib/upgrade.php, engine/lib/user_settings.php,
+ engine/lib/users.php, engine/lib/views.php, engine/lib/web_services.php,
+ engine/lib/widgets.php, engine/lib/xml-rpc.php: Fixes #3936 added @access
+ private to internal functions
+
+ * engine/lib/actions.php: Fixes #3941 Refs #3936 added @access private in
+ action lib and added elgg_unregister_action()
+
+ * engine/lib/access.php, engine/lib/views.php: Fixes #3937 updated the
+ documentation for the access lib and a few minor code clean-ups
+
+ * engine/classes/ElggMenuItem.php,
+ mod/blog/views/default/blog/group_module.php,
+ mod/blog/views/default/blog/sidebar/revisions.php,
+ mod/blog/views/default/object/blog.php,
+ mod/blog/views/default/widgets/blog/content.php,
+ .../views/default/bookmarks/group_module.php,
+ mod/bookmarks/views/default/object/bookmarks.php,
+ .../views/default/widgets/bookmarks/content.php,
+ .../views/default/theme_preview/general.php,
+ .../admin/develop_utilities/diagnostics.php,
+ mod/file/views/default/file/group_module.php,
+ mod/file/views/default/icon/object/file.php,
+ mod/file/views/default/object/file.php,
+ .../views/default/widgets/filerepo/content.php,
+ .../views/default/discussion/group_module.php,
+ .../views/default/groups/invitationrequests.php,
+ .../views/default/groups/membershiprequests.php,
+ .../default/groups/profile/activity_module.php,
+ .../views/default/groups/profile/summary.php,
+ .../views/default/groups/sidebar/members.php,
+ .../views/default/object/groupforumtopic.php,
+ .../default/widgets/a_users_groups/content.php,
+ mod/likes/views/default/annotation/likes.php,
+ mod/likes/views/default/likes/button.php,
+ mod/logbrowser/views/default/logbrowser/table.php,
+ .../views/default/widgets/messageboard/content.php,
+ mod/messages/views/default/object/messages.php,
+ mod/pages/views/default/annotation/page.php,
+ mod/pages/views/default/object/page_top.php,
+ mod/pages/views/default/pages/group_module.php,
+ mod/pages/views/default/widgets/pages/content.php,
+ .../views/default/object/reported_content.php,
+ mod/thewire/views/default/object/thewire.php,
+ .../views/default/river/object/thewire/create.php,
+ .../views/default/thewire/profile_status.php,
+ .../views/default/widgets/thewire/content.php,
+ .../forms/twitter_api/interstitial_settings.php,
+ .../forms/uservalidationbyemail/bulk_action.php,
+ views/default/admin/appearance/default_widgets.php,
+ .../admin/appearance/profile_fields/list.php, views/default/admin/header.php,
+ views/default/icon/default.php, views/default/icon/user/default.php,
+ views/default/navigation/breadcrumbs.php,
+ views/default/navigation/menu/user_hover.php,
+ views/default/navigation/pagination.php, views/default/navigation/tabs.php,
+ views/default/object/admin_notice.php, views/default/object/default.php,
+ views/default/object/elements/summary.php,
+ views/default/object/plugin/advanced.php,
+ views/default/object/plugin/simple.php,
+ views/default/object/widget/elements/controls.php,
+ views/default/output/tag.php, views/default/output/url.php,
+ views/default/page/elements/footer.php,
+ views/default/page/elements/tagcloud_block.php,
+ views/default/page/layouts/widgets/add_button.php,
+ views/default/river/elements/body.php,
+ views/default/river/elements/responses.php,
+ views/default/river/elements/summary.php,
+ .../river/user/default/profileiconupdate.php,
+ views/default/river/user/default/profileupdate.php,
+ views/default/widgets/content_stats/content.php: Fixes #3411 output/url now
+ has a is_trusted parameter - defaults to false
+
+2011-10-07 Cash Costello <cash.costello@gmail.com>
+
+ * languages/en.php, .../admin/appearance/profile_fields/list.php,
+ views/default/forms/profile/fields/add.php: Fixes #3644 localized profile
+ field names
+
+2011-10-06 cash <cash.costello@gmail.com>
+
+ * engine/lib/elgglib.php, engine/lib/input.php, js/lib/autocomplete.js,
+ vendors/jquery/jquery.ui.autocomplete.html.js,
+ views/default/input/autocomplete.php, views/default/user/default.php: using
+ html extension to jquery.ui autocomplete
+
+ * engine/lib/input.php: Fixes #3932 Refs #3931 improved the livesearch
+ endpoint
+
+2011-10-05 cash <cash.costello@gmail.com>
+
+ * actions/useradd.php, engine/lib/users.php, languages/en.php: Fixes #3704
+ displaying error messages when adding users through admin interface
+
+2011-10-04 Brett Profitt <brett.profitt@gmail.com>
+
+ * mod/tinymce/vendor/tinymce/changelog.txt,
+ mod/tinymce/vendor/tinymce/examples/full.html,
+ .../vendor/tinymce/jscripts/tiny_mce/langs/en.js,
+ .../tiny_mce/plugins/advhr/langs/en_dlg.js,
+ .../tiny_mce/plugins/advimage/editor_plugin.js,
+ .../tiny_mce/plugins/advimage/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/advimage/js/image.js,
+ .../tiny_mce/plugins/advimage/langs/en_dlg.js,
+ .../tiny_mce/plugins/advlink/langs/en_dlg.js,
+ .../tiny_mce/plugins/advlist/editor_plugin.js,
+ .../tiny_mce/plugins/advlist/editor_plugin_src.js,
+ .../tiny_mce/plugins/autolink/editor_plugin.js,
+ .../tiny_mce/plugins/autolink/editor_plugin_src.js,
+ .../tiny_mce/plugins/autoresize/editor_plugin.js,
+ .../plugins/autoresize/editor_plugin_src.js,
+ .../tiny_mce/plugins/autosave/editor_plugin.js,
+ .../tiny_mce/plugins/autosave/editor_plugin_src.js,
+ .../tiny_mce/plugins/contextmenu/editor_plugin.js,
+ .../plugins/contextmenu/editor_plugin_src.js,
+ .../plugins/emotions/img/smiley-foot-in-mouth.gif,
+ .../plugins/emotions/img/smiley-laughing.gif,
+ .../plugins/emotions/img/smiley-sealed.gif,
+ .../tiny_mce/plugins/emotions/img/smiley-smile.gif,
+ .../plugins/emotions/img/smiley-surprised.gif,
+ .../tiny_mce/plugins/emotions/img/smiley-wink.gif,
+ .../tiny_mce/plugins/emotions/langs/en_dlg.js,
+ .../plugins/example_dependency/editor_plugin.js,
+ .../example_dependency/editor_plugin_src.js,
+ .../tiny_mce/plugins/fullpage/editor_plugin.js,
+ .../tiny_mce/plugins/fullpage/editor_plugin_src.js,
+ .../tiny_mce/plugins/fullpage/langs/en_dlg.js,
+ .../tiny_mce/plugins/fullscreen/editor_plugin.js,
+ .../plugins/fullscreen/editor_plugin_src.js,
+ .../tiny_mce/plugins/fullscreen/fullscreen.htm,
+ .../tiny_mce/plugins/inlinepopups/editor_plugin.js,
+ .../plugins/inlinepopups/editor_plugin_src.js,
+ .../inlinepopups/skins/clearlooks2/img/alert.gif,
+ .../inlinepopups/skins/clearlooks2/img/button.gif,
+ .../inlinepopups/skins/clearlooks2/img/confirm.gif,
+ .../inlinepopups/skins/clearlooks2/img/corners.gif,
+ .../skins/clearlooks2/img/vertical.gif,
+ .../tiny_mce/plugins/layer/editor_plugin.js,
+ .../tiny_mce/plugins/layer/editor_plugin_src.js,
+ .../tiny_mce/plugins/lists/editor_plugin.js,
+ .../tiny_mce/plugins/lists/editor_plugin_src.js,
+ .../tiny_mce/plugins/media/editor_plugin.js,
+ .../tiny_mce/plugins/media/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/media/js/media.js,
+ .../tiny_mce/plugins/media/langs/en_dlg.js,
+ .../jscripts/tiny_mce/plugins/media/media.htm,
+ .../tiny_mce/plugins/nonbreaking/editor_plugin.js,
+ .../plugins/nonbreaking/editor_plugin_src.js,
+ .../tiny_mce/plugins/noneditable/editor_plugin.js,
+ .../plugins/noneditable/editor_plugin_src.js,
+ .../tiny_mce/plugins/paste/editor_plugin.js,
+ .../tiny_mce/plugins/paste/editor_plugin_src.js,
+ .../tiny_mce/plugins/paste/langs/en_dlg.js,
+ .../tiny_mce/plugins/searchreplace/langs/en_dlg.js,
+ .../tiny_mce/plugins/spellchecker/editor_plugin.js,
+ .../plugins/spellchecker/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/style/js/props.js,
+ .../tiny_mce/plugins/style/langs/en_dlg.js,
+ .../jscripts/tiny_mce/plugins/style/props.htm,
+ .../tiny_mce/plugins/tabfocus/editor_plugin.js,
+ .../tiny_mce/plugins/tabfocus/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/table/cell.htm,
+ .../tiny_mce/plugins/table/editor_plugin.js,
+ .../tiny_mce/plugins/table/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/table/js/cell.js,
+ .../jscripts/tiny_mce/plugins/table/js/row.js,
+ .../tiny_mce/plugins/table/langs/en_dlg.js,
+ .../jscripts/tiny_mce/plugins/table/row.htm,
+ .../jscripts/tiny_mce/plugins/table/table.htm,
+ .../tiny_mce/plugins/template/langs/en_dlg.js,
+ .../tiny_mce/plugins/wordcount/editor_plugin.js,
+ .../plugins/wordcount/editor_plugin_src.js,
+ .../tiny_mce/plugins/xhtmlxtras/langs/en_dlg.js,
+ .../tiny_mce/themes/advanced/editor_template.js,
+ .../themes/advanced/editor_template_src.js,
+ .../tiny_mce/themes/advanced/img/colorpicker.jpg,
+ .../tiny_mce/themes/advanced/img/flash.gif,
+ .../tiny_mce/themes/advanced/img/icons.gif,
+ .../tiny_mce/themes/advanced/img/quicktime.gif,
+ .../tiny_mce/themes/advanced/img/shockwave.gif,
+ .../jscripts/tiny_mce/themes/advanced/js/anchor.js,
+ .../jscripts/tiny_mce/themes/advanced/js/image.js,
+ .../jscripts/tiny_mce/themes/advanced/langs/en.js,
+ .../tiny_mce/themes/advanced/langs/en_dlg.js,
+ .../themes/advanced/skins/default/content.css,
+ .../themes/advanced/skins/default/img/buttons.png,
+ .../themes/advanced/skins/default/img/items.gif,
+ .../themes/advanced/skins/default/img/tabs.gif,
+ .../tiny_mce/themes/advanced/skins/default/ui.css,
+ .../themes/advanced/skins/highcontrast/content.css,
+ .../themes/advanced/skins/highcontrast/ui.css,
+ .../themes/advanced/skins/o2k7/content.css,
+ .../themes/advanced/skins/o2k7/img/button_bg.png,
+ .../advanced/skins/o2k7/img/button_bg_black.png,
+ .../advanced/skins/o2k7/img/button_bg_silver.png,
+ .../tiny_mce/themes/advanced/skins/o2k7/ui.css,
+ .../jscripts/tiny_mce/themes/simple/img/icons.gif,
+ .../jscripts/tiny_mce/themes/simple/langs/en.js,
+ .../vendor/tinymce/jscripts/tiny_mce/tiny_mce.js,
+ .../tinymce/jscripts/tiny_mce/tiny_mce_src.js,
+ .../jscripts/tiny_mce/utils/editable_selects.js: Refs #3853. Upgraded TinyMCE
+ to 3.4.6. Embed still inserts the content in the wrong place for IE 8.
+
+ * pages/avatar/view.php: Refs #3396. Added try / catch for avatar icon.
+
+2011-10-04 cash <cash.costello@gmail.com>
+
+ * mod/blog/lib/blog.php: Fixes #3793 blogs respect closed groups for main
+ index page
+
+ * .../views/default/object/reported_content.php,
+ views/default/css/admin.php: Refs #3809 implemented Evan's suggestion for
+ button spacing
+
+ * engine/lib/users.php: Fixes #3700 using different names for add friend and
+ remove friend user hover menu items
+
+ * mod/groups/lib/groups.php: Fixes #3841 not displaying leave group button
+ to group owners
+
+ * mod/groups/lib/groups.php: Fixes #3898 checking whether the viewer is
+ logged in before adding join/requet buttons
+
+ * engine/lib/entities.php: Fixes #3753 removed deprecated functions from
+ delete_entity()
+
+2011-10-03 cash <cash.costello@gmail.com>
+
+ * views/default/css/admin.php: Fixes #3866 added CSS for entity menu in
+ admin theme
+
+ * mod/embed/README.txt, mod/embed/views/default/embed/item.php,
+ mod/embed/views/default/js/embed/embed.php,
+ mod/file/views/default/icon/object/file.php, views/default/icon/default.php:
+ using better insert class
+
+ * mod/embed/README.txt, mod/embed/views/default/embed/css.php,
+ mod/embed/views/default/embed/layout.php,
+ mod/embed/views/default/js/embed/embed.php,
+ mod/embed/views/default/navigation/menu/embed.php, mod/file/start.php,
+ .../views/default/embed/file_upload/content.php: removed the sections from
+ the menu to provide more flexibility in tab ordering
+
+2011-10-02 Brett Profitt <brett.profitt@gmail.com>
+
+ * pages/avatar/view.php: Fixed avatar handling for default icons if the
+ uploaded file is missing.
+
+ * engine/lib/access.php, engine/lib/annotations.php,
+ engine/lib/entities.php, engine/lib/metadata.php,
+ engine/lib/relationships.php: Merged docs update for getters from 1.7.
+
+ * engine/classes/ElggFile.php, mod/file/actions/file/upload.php: Merged file
+ mime type detection from 1.7.
+
+ * engine/lib/database.php: Merged fixes for delayed queries from 1.7.
+
+ * engine/tests/regression/trac_bugs.php: Merged test for
+ can_write_to_container().
+
+2011-09-10 Brett Profitt <brett.profitt@gmail.com>
+
+ * engine/tests/suite.php: Fixes #3675. Added admin gate keeper to unit
+ tests.
+
+2011-10-02 Brett Profitt <brett.profitt@gmail.com>
+
+ * mod/categories/deactivate.php: Removing admin notice for unpopulated
+ categories when disabling categories plugin.
+
+ * actions/admin/plugins/activate.php,
+ actions/admin/plugins/activate_all.php, actions/admin/plugins/deactivate.php,
+ actions/admin/plugins/deactivate_all.php,
+ actions/admin/plugins/set_priority.php, engine/classes/ElggPlugin.php,
+ engine/classes/ElggPluginPackage.php, languages/en.php: Fixes #3915. Added
+ ElggPlugin->getFriendlyName() to check for manifest->getName() first, then
+ for plugin ID. Added better descriptions for plugin activation errors.
+
+2011-10-01 cash <cash.costello@gmail.com>
+
+ * engine/lib/navigation.php, engine/lib/views.php: Fixes #3860 changed
+ context-sensitive to dynamic to describe menus
+
+ * mod/bookmarks/actions/bookmarks/save.php, mod/bookmarks/languages/en.php:
+ Fixes #3686 added work around for PHP bug when validating URLs with dashes
+
+2011-10-01 Cash Costello <cash.costello@gmail.com>
+
+ * views/default/forms/avatar/crop.php: Fixes #3888 correcting initialization
+ of avatar cropping library
+
+ * engine/lib/elgglib.php, views/default/forms/avatar/crop.php: Fixes #3913
+ registering jquery.imgareaselect
+
+ * actions/avatar/upload.php: Fixes #3912 checking that the upload succeeded
+ before resizing
+
+ * languages/en.php: more was defined twice in the core language file
+
+2011-10-01 cash <cash.costello@gmail.com>
+
+ * mod/embed/README.txt, mod/embed/views/default/js/embed/embed.php: Updated
+ the instructions
+
+ * mod/embed/views/default/js/embed/embed.php,
+ mod/file/views/default/embed/file/content.php,
+ .../views/default/embed/file_upload/content.php: fixed the forwarding of an
+ embed upload form
+
+ * mod/embed/start.php, mod/embed/views/default/embed/css.php,
+ mod/embed/views/default/embed/item.php,
+ mod/embed/views/default/js/embed/embed.php: cleaned up the embed item view
+ and removed the inline js
+
+ * mod/embed/views/default/embed/css.php,
+ mod/embed/views/default/embed/embed.php,
+ mod/embed/views/default/embed/item.php,
+ mod/embed/views/default/embed/list.php,
+ mod/embed/views/default/embed/tabs.php,
+ mod/embed/views/default/group/default/embed.php,
+ mod/embed/views/default/js/embed/embed.php,
+ mod/embed/views/default/object/default/embed.php,
+ mod/embed/views/default/object/file/embed.php,
+ mod/embed/views/default/object/file/embedlist.php,
+ mod/embed/views/default/site/default/embed.php,
+ mod/embed/views/default/user/default/embed.php: removed unnecessary code
+
+ * mod/embed/languages/en.php, mod/embed/start.php,
+ mod/embed/views/default/embed/item.php,
+ mod/embed/views/default/embed/layout.php,
+ mod/embed/views/default/embed/list.php,
+ mod/embed/views/default/js/embed/embed.php,
+ mod/embed/views/default/navigation/menu/embed.php, mod/file/start.php: using
+ the menu system for the embed tabs and adding a reusable select list view
+
+ * engine/lib/configuration.php: Fixes #3826 using wwwroot in 1.8.x releases
+
+2011-09-30 cash <cash.costello@gmail.com>
+
+ * views/default/forms/useradd.php: Fixes #3890 removed admin check in
+ useradd form since it is only used by admins
+
+ * engine/lib/navigation.php, mod/groups/start.php,
+ mod/likes/views/default/annotation/likes.php, mod/messageboard/start.php,
+ mod/messages/views/default/object/messages.php,
+ views/default/core/friends/collection.php,
+ views/default/output/confirmlink.php: Fixes #3904 action word should come
+ first for encode_text parameter
+
+2011-09-29 cash <cash.costello@gmail.com>
+
+ * views/default/css/elements/forms.php: Fixes #3894 ui-datepicker should
+ start out hidden
+
+ * views/default/css/elements/forms.php: Fixes #3666, #3748 distinct CSS for
+ inline vs popup date picker and fixed position bug for prev/next links in
+ header
+
+ * engine/lib/access.php, engine/lib/annotations.php,
+ engine/lib/metadata.php, engine/lib/plugins.php,
+ engine/lib/private_settings.php, engine/lib/relationships.php: Fixes #3827
+ updated documentation on @return for elgg_get_entities* functions
+
+2011-09-28 Brett Profitt <brett.profitt@gmail.com>
+
+ * engine/lib/elgglib.php, engine/lib/views.php,
+ engine/tests/api/helpers.php: Fixes #3891. elgg_register_external_file()
+ defaults priority to 500. Elgg's default CSS now at 500 instead of 1.
+
+ * .../views/default/groups/invitationrequests.php,
+ .../views/default/groups/membershiprequests.php,
+ mod/profile/views/default/profile/owner_block.php,
+ views/default/core/avatar/upload.php, views/default/forms/avatar/crop.php,
+ views/default/icon/user/default.php: Fixes #3879. Removed some instances of
+ deprecated views / functions.
+
+ * mod/file/pages/file/search.php: Fixes #3823. More carefully casting to int
+ for file's search.
+
+ * engine/tests/api/plugins.php: Refs #3808. Removed failing tests for
+ manifest translations.
+
+ * engine/lib/entities.php, engine/lib/metastrings.php, engine/lib/river.php,
+ engine/lib/tags.php, engine/tests/api/entity_getter_functions.php: Fixes
+ #3713. elgg_get_entities() and friends return false if passed invalid
+ options.
+
+2011-09-26 cash <cash.costello@gmail.com>
+
+ * engine/lib/output.php, views/default/input/checkboxes.php,
+ views/default/input/date.php, views/default/input/dropdown.php,
+ views/default/input/radio.php, views/default/input/userpicker.php: Fixes
+ #2921 clearing new ignore internal variables
+
+2011-09-25 cash <cash.costello@gmail.com>
+
+ * engine/lib/navigation.php, views/default/navigation/menu/site.php: Fixes
+ #3876 fixed dangling more site menu when items are manually selected - thanks
+ to JEBailey
+
+ * ...0.1-forum_reply_river_view-5758ce8d86ac56ce.php, version.php: Fixes
+ #3877 updates river db table for replying to forum topics
+
+ * languages/en.php, views/default/river/user/default/profileupdate.php: Refs
+ #3842 adding river view back so that those upgrading from earlier Elgg views
+ don't have empty river messages
+
+2011-09-24 Cash Costello <cash.costello@gmail.com>
+
+ * views/default/css/admin.php, views/default/css/elements/icons.php,
+ views/default/css/ie.php, views/default/css/ie7.php: Fixes #3653 shrink
+ wrapping .elgg-avatar so that hover menu arrow is constrained to the avatar
+ image
+
+ * engine/lib/views.php, mod/embed/views/default/embed/css.php,
+ views/default/css/elements/core.php,
+ views/default/css/elements/navigation.php, views/default/css/ie.php,
+ views/default/css/ie6.php, views/default/css/ie7.php,
+ views/default/page/elements/head.php: Fixes #3845 added ie7 css view and
+ tested all current hacks for ie7
+
+2011-09-24 cash <cash.costello@gmail.com>
+
+ * mod/file/languages/en.php: Fixes #3858 added file notification string
+ translation - thanks to slyhne
+
+ * .../views/default/forms/logbrowser/refine.php,
+ .../views/default/object/reported_content.php,
+ .../views/default/reportedcontent/admin_css.php, views/default/css/admin.php,
+ views/default/forms/admin/plugins/change_state.php,
+ views/default/forms/admin/plugins/filter.php,
+ views/default/forms/admin/plugins/sort.php: Fixes #3809 updated admin buttons
+ css
+
+ * engine/lib/deprecated-1.8.php, engine/lib/river.php, engine/lib/views.php,
+ mod/likes/views/default/likes/count.php,
+ mod/likes/views/default/likes/css.php, mod/likes/views/default/likes/js.php,
+ mod/messageboard/views/default/messageboard/js.php,
+ views/default/css/elements/components.php: Fixes #3828 correct list classes
+
+ * .../admin/administer_utilities/logbrowser.php,
+ mod/logbrowser/views/default/logbrowser/form.php,
+ mod/logbrowser/views/default/logbrowser/refine.php: Fixes #3865 updated
+ logbrowser refine form
+
+ * views/default/css/admin.php: Fixes #3788 pagination highlighting updated
+ for admin theme
+
+ * views/default/admin/appearance/profile_fields.php,
+ views/default/forms/profile/fields/add.php,
+ views/default/forms/profile/fields/reset.php: Refs #3864 updated the two form
+ bodies for edit profile fields
+
+ * views/default/forms/account/settings.php, views/default/forms/login.php,
+ views/default/forms/plugins/settings/save.php,
+ views/default/forms/plugins/usersettings/save.php,
+ views/default/forms/register.php, views/default/forms/usersettings/save.php:
+ Fixes #3856 adds elgg-foot to forms missing it in /views/default/forms and
+ updated documentation
+
+2011-09-23 Brett Profitt <brett.profitt@gmail.com>
+
+ * engine/handlers/cache_handler.php: Refs #3859. Using PHP internal
+ functions to expire cache in +6 months instead of doing math manually to
+ avoid int overflow.
+
+2011-09-22 cash <cash.costello@gmail.com>
+
+ * mod/embed/views/default/embed/css.php,
+ mod/file/views/default/embed/file/content.php: Fixes #3795 not inserting the
+ file title when embeding a file and tweaked css - thanks to slyhne
+
+ * engine/classes/ElggPluginManifest.php, languages/en.php,
+ views/default/admin/plugins.php: Fixes #3808 not translating manifest fields
+ through elgg_echo()
+
+2011-09-22 Cash Costello <cash.costello@gmail.com>
+
+ * engine/lib/upgrade.php: Fixes #3834 not loading version.php hundreds of
+ times - thanks to srokap
+
+2011-09-21 cash <cash.costello@gmail.com>
+
+ * js/lib/ui.js, views/default/css/elements/navigation.php,
+ views/default/css/ie.php, views/default/navigation/menu/site.php: Fixes #3770
+ CSS only site menu that works in IE7
+
+2011-09-19 Steve Clay <steve@mrclay.org>
+
+ * engine/lib/elgglib.php, engine/lib/group.php, engine/lib/sessions.php,
+ languages/en.php: forward throws Exception if headers sent. fix for
+ http://trac.elgg.org/ticket/3765
+
+ * engine/lib/views.php: don't generate false internalid deprecation notices:
+ http://trac.elgg.org/ticket/2921#comment:3
+
+2011-09-18 Cash Costello <cash.costello@gmail.com>
+
+ * engine/classes/ElggMenuItem.php: Fixes #3786 menu code was corrupting link
+ class if an additional class was passed through getContent()
+
+ * mod/developers/languages/en.php, mod/developers/start.php,
+ .../views/default/admin/develop_tools/inspect.php,
+ .../views/default/admin/develop_tools/preview.php,
+ .../views/default/admin/developers/inspect.php,
+ .../views/default/admin/developers/preview.php: Fixes #3721 reorganized the
+ developer tools menu items in the admin area
+
+ * .../views/default/js/developers/developers.php: Fixes #3825 need to
+ specify the data type as json
+
+2011-09-17 cash <cash.costello@gmail.com>
+
+ * languages/en.php: Fixes #3819 added the request action words to the
+ language file
+
+ * mod/logrotate/languages/en.php, mod/logrotate/start.php,
+ .../views/default/plugins/logrotate/settings.php,
+ .../default/plugins/twitter_api/usersettings.php: Fixes #3824 fixed
+ deprecation warnings for plugin settings and usersettings
+
+ * views/default/object/plugin/advanced.php: Refs #3236 using .float-alt for
+ plugin activate button
+
+ * .../default/plugins/garbagecollector/settings.php,
+ .../default/settings/garbagecollector/edit.php,
+ .../views/default/plugins/groups/settings.php,
+ mod/groups/views/default/settings/groups/edit.php,
+ .../views/default/plugins/logrotate/settings.php,
+ .../views/default/settings/logrotate/edit.php,
+ .../views/default/plugins/twitter_api/settings.php,
+ .../default/plugins/twitter_api/usersettings.php,
+ .../views/default/settings/twitter_api/edit.php,
+ .../default/usersettings/twitter_api/edit.php: Fixes #2990 updated the
+ bundled plugins to use the new plugin/user settings structure
+
+2011-09-17 Cash Costello <cash.costello@gmail.com>
+
+ * .../views/default/settings/twitter_api/edit.php,
+ views/default/css/admin.php, views/default/object/plugin/advanced.php,
+ .../object/plugin/elements/dependencies.php,
+ views/default/object/plugin/invalid.php,
+ views/default/object/plugin/simple.php, views/default/page/admin.php: Fixes
+ #3236 finishes admin theme - open new tickets for new issues
+
+2011-09-15 cash <cash.costello@gmail.com>
+
+ * engine/lib/views.php: Fixes #3178 updated elgg_view_icon() to take an
+ optional class
+
+ * _graphics/elgg_sprites.png, mod/search/views/default/search/css.php,
+ views/default/css/elements/icons.php: Fixes #3400, #3820 added additional
+ icons to Elgg's sprite
+
+2011-09-15 Cash Costello <cash.costello@gmail.com>
+
+ * views/default/css/lightbox.php: Fixes #3818 fixed short tag and extra
+ slash in URL for lightbox
+
+2011-09-14 Cash Costello <cash.costello@gmail.com>
+
+ * .../notifications/subscriptions/forminternals.php,
+ views/default/icon/user/default.php, views/default/input/friendspicker.php:
+ Fixes #3742 not including the hover menu on the personal notifications page
+
+ * engine/lib/navigation.php, languages/en.php,
+ mod/diagnostics/languages/en.php, mod/diagnostics/start.php,
+ .../admin/develop_utilities/diagnostics.php,
+ .../views/default/admin/utilities/diagnostics.php,
+ mod/logbrowser/languages/en.php, mod/logbrowser/start.php,
+ .../admin/administer_utilities/logbrowser.php,
+ .../views/default/admin/utilities/logbrowser.php,
+ mod/reportedcontent/languages/en.php, mod/reportedcontent/start.php,
+ .../admin/administer_utilities/reportedcontent.php,
+ .../default/admin/utilities/reportedcontent.php: Fixes #3681 fixed Utilities
+ menu collisions in admin section and added documentation about registering
+ more than one menu item with the same name to a menu
+
+ * views/default/forms/admin/site/update_advanced.php: Fixes #3783 using an
+ associative array for advanced settings checkboxes
+
+2011-09-13 Cash Costello <cash.costello@gmail.com>
+
+ * js/lib/elgglib.js, js/lib/languages.js, views/default/js/elgg.php: Fixes
+ #3539 two conditions for triggering init,system now - dom is ready and
+ languages loaded
+
+ * views/default/output/confirmlink.php: Fixes #3811 defaulting title to
+ confirm text if passed to output/confirmlink
+
+ * languages/en.php, views/default/admin/plugins.php: Fixes #3623 added
+ non-bundled filter option for plugins
+
+ * .../default/widgets/a_users_groups/content.php: Fixes #3803 fixed groups
+ more link in widget
+
+2011-09-12 Cash Costello <cash.costello@gmail.com>
+
+ * engine/lib/admin.php, views/default/js/admin.php: Refs #3800 including
+ jeditable on more admin pages
+
+ * engine/lib/deprecated-1.8.php: Fixes #3801 fixed documentation for
+ page_owner_entity()
+
+ * mod/externalpages/manifest.xml: Fixes #3804 using Site Pages for the
+ plugin name
+
+2011-09-12 Brett Profitt <brett.profitt@gmail.com>
+
+ * .gitignore: Refs #3573. Using more specific rules in .gitignore.
+
+ * mod/embed/manifest.xml: Refs #3771. Fixed incorrect requires plugin name.
+
+2011-09-11 Brett Profitt <brett.profitt@gmail.com>
+
+ * .gitignore: Fixse #3573. Ignoring all files in /mod/ that aren't part of
+ core.
+
+ * mod/embed/manifest.xml, mod/file/views/default/embed/file/content.php,
+ .../views/default/embed/file_upload/content.php: Fixes #3771. Added missing
+ files for embed support. Added requirement for file in embed's manifest.
+
+2011-09-11 Cash Costello <cash.costello@gmail.com>
+
+ * mod/dashboard/languages/en.php, mod/dashboard/start.php,
+ .../default/widgets/group_activity/content.php,
+ .../views/default/widgets/group_activity/edit.php: Fixes #3340 adds group
+ activity widget for the user dashboard
+
+2011-09-11 Ravindra Nath Kakarla <ravindhranath@gmail.com>
+
+ * engine/lib/input.php: Livesearch handler returns proper JSON string now
+
+2011-09-11 Cash Costello <cash.costello@gmail.com>
+
+ * engine/lib/users.php: Fixes #3794 fixes menu links so that admins can edit
+ avatars
+
+2011-09-10 Cash Costello <cash.costello@gmail.com>
+
+ * engine/classes/ElggMenuItem.php: Fixes #3741 fixed menu code so that all
+ links do not get empty title and confirm attributes
+
+ * engine/lib/views.php: Fixes #3665, #3660 added plugin hooks for page and
+ layouts so that rss icon for page meta menu can be registered consistently
+
+ * engine/lib/views.php: Fixes #3688 setting the page setup variable in
+ $CONFIG before trigger the event to prevent a stack overflow
+
+ * actions/admin/plugins/activate.php: Fixes #3714 also forwarding to the top
+ of the page when a plugin activation fails
+
+ * mod/groups/actions/groups/membership/join.php: Fixes #3752 corrected URL
+ for group membership requests
+
+ * engine/lib/plugins.php: made the documentation of the plugin settings code
+ a little clearer
+
+ * engine/classes/ElggEntity.php: Fixes #3782 only deleting metadata if the
+ entity has been saved
+
+ * mod/logbrowser/start.php,
+ mod/logbrowser/views/default/logbrowser/form.php: Fixes #3775 updated admin
+ area for logbrowser to utilities
+
+2011-09-05 Brett Profitt <brett.profitt@gmail.com>
+
+ * CHANGES.txt, engine/lib/access.php, version.php: Fixed a stupid problem I
+ introduced in the installation and only just caught >:O
+
+ * version.php: Version bump to 1.8.0. *whew*
+
+ * README.txt: Updated README to mention the Elgg Foundation.
+
+ * js/lib/ui.js, views/default/css/ie.php: Refs #3449, #3770. Using JS to fix
+ submenu dropdown in IE7.
+
+ * engine/lib/deprecated-1.8.php: Improved documentation for deprecated
+ functions.
+
+ * UPGRADE.txt: Added instructions to delete deprecated plugins during
+ upgrade.
+
+ * CHANGES.txt: Updated changes for 1.8.0.
+
+ * CONTRIBUTORS.txt: Updated contributors file with @elgg.org email
+ addresses.
+
+ * UPGRADE.txt: Added more explicit upgrade instructions for 1.7 -> 1.8.
+
+ * views/default/css/ie.php: Refs #3449. Some IE7 CSS fixes. I need to shower
+ now.
+
+2011-09-04 Brett Profitt <brett.profitt@gmail.com>
+
+ * engine/lib/entities.php: Fixes #3661. Pulled in recursive delete fixes to
+ master.
+
+ * engine/classes/ElggEntity.php: Refs #3661. Merged lat/long metadata fixes
+ to master.
+
+ * engine/lib/entities.php, mod/search/search_hooks.php: Refs #3661. Merged
+ XSS fixes in search to master.
+
+ * mod/pages/pages/pages/edit.php: Refs #3661. Better filtering for
+ container_guid in pages.
+
+ * mod/file/pages/file/search.php: Refs #3661. Pulled in XSS fixes for file
+ search.
+
+ * mod/groups/lib/groups.php: Fixes #3720. Using correctly filters for tabs
+ on group landing page.
+
+ * engine/start.php: Refs #3661. Merged $CONFIG->lastcache fix to master.
+ Fixes #3530. $CONFIG->lastcache has correct value on page load when cache is
+ regenerated. Conflicts: engine/start.php
+
+2011-09-03 Brett Profitt <brett.profitt@gmail.com>
+
+ * engine/lib/access.php: Fixed typo in call to function.
+
+2011-08-30 Brett Profitt <brett.profitt@gmail.com>
+
+ * actions/friends/collections/add.php,
+ actions/friends/collections/delete.php, actions/friends/collections/edit.php,
+ engine/lib/access.php, engine/tests/api/access_collections.php,
+ languages/en.php: Fixes #3543. Ported access collections fix to master.
+
+2011-08-29 Brett Profitt <brett.profitt@gmail.com>
+
+ * engine/lib/views.php, views/default/css/lightbox.php: Fixes #3461: Using
+ absolute URLs for lightbox CSS.
+
+ * mod/embed/views/default/js/embed/embed.php: Removing debug string.
+
+2011-08-27 Brett Profitt <brett.profitt@gmail.com>
+
+ * mod/profile/views/default/profile/js.php: Fixes #3561. Only adding the
+ static profile block height to the widget canvas if on the profile page.
+
+ * mod/embed/languages/en.php, mod/embed/start.php,
+ mod/embed/views/default/embed/embed.php,
+ mod/embed/views/default/embed/item/gallery.php,
+ mod/embed/views/default/embed/item/list.php,
+ mod/embed/views/default/embed/layouts/gallery.php,
+ mod/embed/views/default/embed/layouts/list.php,
+ mod/embed/views/default/embed/upload/content.php,
+ mod/embed/views/default/js/embed/embed.php,
+ mod/embed/views/default/js/embed/inline.php, mod/file/start.php: Fixes #2911.
+ Embed plugins works again. Added menu for embed sections. This plugin is
+ painfully messy.
+
+ * engine/classes/ElggPluginPackage.php, engine/lib/plugins.php,
+ languages/en.php, views/default/admin/plugins.php: Fixes #3434. Manifests are
+ checked more carefully on anything that checks deps. Disabling plugins with
+ invalid manifests from admin page.
+
+2011-08-25 Brett Profitt <brett.profitt@gmail.com>
+
+ * engine/lib/views.php: Fixes #3535. elgg_view_form() automatically adds
+ elgg-form-action-name.
+
+ * mod/likes/start.php: Removed unused code for likes notification.
+
+ * mod/likes/actions/likes/add.php, mod/likes/languages/en.php,
+ mod/likes/start.php: Fixes #3131. Added generic liking notification text.
+
+ * mod/blog/start.php: Fixes #3558. Added upgrade for excerpt in blogs.
+
+ * mod/blog/start.php: Removed silly check for elgg version.
+
+ * mod/blog/start.php: Fixing blog upgrades for excerpt.
+
+ * CODING.txt: Fixes #3657. There's not a good way to ensure redirects for
+ CODING.txt because most of the code is off our servers now, so just putting a
+ placeholder.
+
+ * views/default/page/elements/head.php,
+ views/default/page/elements/shortcut_icon.php: Fixes #3662. Pulled out
+ shortcut_icon to its own view for easier overriding.
+
+2011-08-24 Brett Profitt <brett.profitt@gmail.com>
+
+ * engine/classes/ElggPriorityList.php: Checking for === false when moving
+ elements in ElggPriorityList instead of just !$priority. Fixes problems when
+ moving elements to / from 0.
+
+ * .../forms/uservalidationbyemail/bulk_action.php: Fixes #3621. Corrected
+ the URL for the unvalidated users pagination.
+
+ * mod/groups/actions/discussion/reply/save.php, mod/groups/start.php,
+ .../views/default/annotation/group_topic_post.php,
+ .../views/default/forms/discussion/reply/save.php,
+ .../views/default/annotation/messageboard.php: Fixes #3612, #3750. Added edit
+ replies back to group plugin with the annotation menu.
+
+ * mod/messageboard/start.php: Refs #3750. Messageboard using annotations
+ menu.
+
+ * engine/lib/navigation.php, views/default/annotation/default.php,
+ views/default/annotation/generic_comment.php,
+ views/default/css/elements/navigation.php: Refs #3750. Added annotation menu
+ for generic comments (delete) and default annotations (empty).
+
+ * js/lib/hooks.js: Fixes #3589. JS "all" hook handlers called only once.
+
+ * actions/avatar/upload.php: Refs #3557: Upscaling small icons to 200x200.
+ This doesn't fix the problem if someone uploads a 100x200 image.
+
+ * mod/categories/actions/save.php, mod/categories/activate.php,
+ mod/categories/languages/en.php, mod/categories/start.php,
+ mod/categories/views/default/input/categories.php,
+ .../views/default/plugins/categories/settings.php,
+ .../views/default/settings/categories/edit.php: Refs #3746. Updated
+ categories for 1.8. Still some deprecation notices, but functional.
+
+2011-08-23 Brett Profitt <brett.profitt@gmail.com>
+
+ * .../actions/twitter_api/interstitial_settings.php,
+ mod/twitter_api/languages/en.php, mod/twitter_api/lib/twitter_api.php,
+ mod/twitter_api/pages/twitter_api/interstitial.php,
+ mod/twitter_api/start.php, .../forms/twitter_api/interstitial_settings.php,
+ .../default/usersettings/twitter_api/edit.php: Fixes #3117. Added an
+ interstitial page for twitter new users.
+
+ * views/default/navigation/menu/default.php: Rewriting more chars to - in
+ the default menu view.
+
+ * engine/classes/ElggPriorityList.php, engine/lib/elgglib.php,
+ engine/lib/views.php, engine/tests/api/helpers.php: Fixes #3355. Added
+ ElggPriorityList. Adapted the externals system to use it.
+
+2011-08-22 Brett Profitt <brett.profitt@gmail.com>
+
+ * engine/lib/views.php, vendors/jquery/jquery-1.6.2.min.js,
+ vendors/jquery/jquery-ui-1.8.16.min.js, views/installation/page/default.php:
+ Closes #3015. jQuery updated to 1.6.2. jQuery-UI updated to 1.8.16.
+
+2011-08-21 Brett Profitt <brett.profitt@gmail.com>
+
+ * mod/groups/lib/groups.php: Fixes #3701. Removed early call to elgg_echo()
+ for group action button menu.
+
+ * engine/classes/ElggSite.php: Fixes #3606. Reset password page added to
+ public pages for walled garden mode.
+
+ * engine/lib/river.php: Fixes #3496. Using OR to concatenate unpaired type
+ and subtype clauses in elgg_get_river_type_subtype_where_sql().
+
+2011-08-18 Brett Profitt <brett.profitt@gmail.com>
+
+ * engine/lib/views.php: Fixing priorities for jquery.
+
+2011-08-17 Brett Profitt <brett.profitt@gmail.com>
+
+ * engine/classes/ElggPriorityList.php, engine/lib/elgglib.php,
+ engine/tests/api/helpers.php: Finished ElggPriorityList. Migrated external
+ files to use it.
+
+2011-08-17 tvld <tom@lorinthe.com>
+
+ * htaccess_dist: My very first attempt to contribute...
+ http://trac.elgg.org/ticket/3601 For optimal speed, Firebug's Yslow
+ complained that the js and ico files did not have an Etag.
+
+2011-08-15 Brett Profitt <brett.profitt@gmail.com>
+
+ * engine/classes/ElggPriorityList.php, engine/tests/api/helpers.php: Refs
+ #3355. Added ElggPriorityList.
+
+ * pages/friends/collections/add.php,
+ pages/friends/collections/pickercallback.php,
+ pages/friends/collections/view.php, pages/friends/index.php,
+ pages/friends/of.php: Fixes #3715. Added the new collection button back.
+
+ * mod/search/views/default/search/list.php: Fixed pagination for search.
+
+ * mod/search/views/default/search/list.php: Fixes #3254. Removing limit for
+ "+X more Y" in search results.
+
+2011-07-27 Brett Profitt <brett.profitt@gmail.com>
+
+ * engine/classes/ElggBatch.php: Fixed some documentation.
+
+2011-07-27 Richard Loxley <richard.loxley@surevine.com>
+
+ * engine/lib/actions.php: Fixes Ticket #3709 "Embed plugin: uploading a file
+ in Firefox tries to save a JSON file in the user's browser"
+
+2011-07-10 Cash Costello <cash.costello@gmail.com>
+
+ * engine/lib/views.php: Fixes #3336 functions that used elgg_view_exists()
+ were not falling back to the default views
+
+2011-07-09 cash <cash.costello@gmail.com>
+
+ * mod/file/pages/file/search.php: Refs #3685 need null for no container
+
+ * engine/lib/users.php, pages/avatar/view.php: fixed redirect for user
+ avatars if we cannot get the user
+
+2011-07-07 Brett Profitt <brett.profitt@gmail.com>
+
+ * mod/dashboard/start.php,
+ views/default/admin/appearance/default_widgets.php: Fixes #3669. Dashboard
+ now registers for default widgets.
+
+ * version.php: Version bump to 1.8.0b2
+
+2011-07-07 Cash Costello <cash.costello@gmail.com>
+
+ * views/default/css/elements/components.php,
+ views/default/river/elements/body.php,
+ views/default/river/relationship/friend/create.php: fixed the float issue
+ with the friends river view
+
+ * views/default/icon/user/default.php: Refs #3567 added class extending to
+ icon/user/default
+
+2011-07-06 cash <cash.costello@gmail.com>
+
+ * views/default/input/radio.php: Refs #3624 fixed radio button value
+ detection
+
+2011-07-06 Cash Costello <cash.costello@gmail.com>
+
+ * actions/plugins/settings/save.php, actions/plugins/usersettings/save.php,
+ engine/classes/ElggPlugin.php: Fixes #2204 standardized the hooks/overrides
+ for plugin settings and usersettings
+
+ * engine/lib/river.php: $joins was not declared in elgg_get_river()
+
+ * vendors/jquery/jquery.imgareaselect-0.8.min.js,
+ .../jquery.imgareaselect-0.9.8/GPL-LICENSE.txt,
+ .../jquery.imgareaselect-0.9.8/MIT-LICENSE.txt, .../css/border-anim-h.gif,
+ .../css/border-anim-v.gif, .../jquery.imgareaselect-0.9.8/css/border-h.gif,
+ .../jquery.imgareaselect-0.9.8/css/border-v.gif,
+ .../css/imgareaselect-animated.css, .../css/imgareaselect-default.css,
+ .../css/imgareaselect-deprecated.css, .../scripts/jquery.imgareaselect.js,
+ .../scripts/jquery.imgareaselect.min.js,
+ .../scripts/jquery.imgareaselect.pack.js, .../scripts/jquery.min.js,
+ views/default/forms/avatar/crop.php: Fixes #3663 upgrades imgareaselect
+ library
+
+ * mod/likes/actions/likes/add.php,
+ .../default/river/annotation/likes/create.php: Fixes #3642 removing likes
+ river code
+
+ * engine/lib/navigation.php, mod/blog/lib/blog.php,
+ mod/bookmarks/pages/bookmarks/all.php,
+ mod/bookmarks/pages/bookmarks/friends.php,
+ mod/bookmarks/pages/bookmarks/owner.php, mod/file/pages/file/friends.php,
+ mod/file/pages/file/owner.php, mod/file/pages/file/world.php,
+ mod/groups/lib/discussion.php, mod/groups/lib/groups.php,
+ mod/messages/pages/messages/inbox.php, mod/messages/pages/messages/sent.php,
+ mod/pages/pages/pages/friends.php, mod/pages/pages/pages/owner.php,
+ mod/pages/pages/pages/world.php: changed new convenience function from
+ elgg_register_add_button() to elgg_register_title_button()
+
+ * mod/embed/views/default/embed/css.php,
+ mod/embed/views/default/js/embed/embed.php: updated the embed plugin for new
+ css class elgg-item rather than elgg-list-item
+
+2011-07-04 cash <cash.costello@gmail.com>
+
+ * views/default/css/elements/forms.php: styled the date picker for the main
+ theme
+
+ * views/default/css/admin.php: theming the date picker for the admin theme
+
+ * js/lib/ui.js, views/default/input/date.php, views/default/output/date.php:
+ Fixes #3560 input/date and output/date support ISO 8601 (YYYY-MM-DD) and Unix
+ timestamps. Need to think about how to handle alternate text formats.
+
+2011-07-03 Brett Profitt <brett.profitt@gmail.com>
+
+ * actions/friends/collections/add.php,
+ actions/friends/collections/delete.php, actions/friends/collections/edit.php,
+ engine/lib/access.php, engine/tests/api/access_collections.php,
+ languages/en.php: Merged ACL fixes from 1.7 branch.
+
+ * engine/lib/access.php, engine/tests/api/access_collections.php: Merged
+ d423aee393458d6827db from 1.7 to master. Fixes #3552. Addess ACL unit tests.
+ These currently fail because of #3522. Conflicts: engine/lib/access.php
+
+2011-07-03 cash <cash.costello@gmail.com>
+
+ * .../views/default/page/layouts/custom_index.php: removed deprecated
+ function from custom_index plugin
+
+ * views/default/page/elements/header_logo.php: reformatted the code in
+ page/elements/header_logo view due to line length
+
+ * .../views/default/page/layouts/custom_index.php: removed deprecated
+ function from custom_index plugin
+
+ * views/default/page/elements/header_logo.php: reformatted the code in
+ page/elements/header_logo view due to line length
+
+ * mod/blog/languages/en.php: Fixes #3593 defining the blog post notification
+ string
+
+ * languages/en.php: Fixes #3640 added 'none' as a language string
+
+ * engine/classes/ElggUser.php: Fixes #3650 deprecated
+ ElggUser::getCollections()
+
+ * documentation/coding_standards/best_practices.txt,
+ documentation/coding_standards/deprecation.txt: pulled deprecation guidelines
+ out of general best practices
+
+ * CODING.txt, documentation/coding_standards/best_practices.txt,
+ .../coding_standards/css_coding_standards.txt,
+ .../coding_standards/html_best_practices.txt,
+ .../coding_standards/javascript_best_practices.txt,
+ .../javascript_coding_standards.txt,
+ .../coding_standards/php_best_practices.txt,
+ .../coding_standards/php_coding_standards.txt: separate out coding standards
+
+2011-07-03 Cash Costello <cash.costello@gmail.com>
+
+ * engine/classes/ElggCache.php: Fixes #3656 updates the AccessArray
+ interface methods for ElggCache
+
+ * mod/notifications/start.php, mod/tinymce/start.php: these plugins should
+ not need special loading order
+
+ * views/default/css/admin.php: updated the admin theme for the new css
+ classes on input elements
+
+2011-07-02 cash <cash.costello@gmail.com>
+
+ * mod/developers/actions/developers/settings.php,
+ mod/developers/languages/en.php, mod/developers/start.php,
+ .../views/default/admin/developers/settings.php: added logging of events and
+ plugin hooks
+
+ * mod/developers/actions/developers/settings.php,
+ mod/developers/languages/en.php, mod/developers/start.php,
+ .../views/default/admin/developers/settings.php: Fixes #3152 adds wrapping of
+ views with comments
+
+ * mod/developers/classes/ElggLogCache.php: returning false to stop
+ elgg_dump() from also displaying the debugging information to the screen
+
+ * mod/developers/actions/developers/settings.php,
+ mod/developers/languages/en.php, mod/developers/start.php,
+ .../views/default/admin/developers/settings.php: Fixes #3500 added setting
+ for raw string display
+
+ * mod/developers/views/default/developers/log.php: removed warning if no
+ messages in the cache
+
+ * engine/classes/ElggPlugin.php,
+ mod/developers/actions/developers/settings.php,
+ mod/developers/classes/ElggLogCache.php, mod/developers/languages/en.php,
+ mod/developers/start.php, .../views/default/admin/developers/settings.php,
+ mod/developers/views/default/developers/css.php,
+ mod/developers/views/default/developers/log.php: added logging to the web
+ page footer
+
+ * mod/developers/actions/developers/inspect.php,
+ mod/developers/classes/ElggInspector.php, mod/developers/languages/en.php,
+ mod/developers/start.php, mod/developers/vendors/jsTree/jquery.jstree.js,
+ mod/developers/vendors/jsTree/themes/apple/bg.jpg,
+ mod/developers/vendors/jsTree/themes/apple/d.png,
+ .../vendors/jsTree/themes/apple/dot_for_ie.gif,
+ .../vendors/jsTree/themes/apple/style.css,
+ .../vendors/jsTree/themes/apple/throbber.gif,
+ mod/developers/vendors/jsTree/themes/classic/d.gif,
+ mod/developers/vendors/jsTree/themes/classic/d.png,
+ .../vendors/jsTree/themes/classic/dot_for_ie.gif,
+ .../vendors/jsTree/themes/classic/style.css,
+ .../vendors/jsTree/themes/classic/throbber.gif,
+ .../vendors/jsTree/themes/default-rtl/d.gif,
+ .../vendors/jsTree/themes/default-rtl/d.png,
+ .../vendors/jsTree/themes/default-rtl/dots.gif,
+ .../vendors/jsTree/themes/default-rtl/style.css,
+ .../vendors/jsTree/themes/default-rtl/throbber.gif,
+ mod/developers/vendors/jsTree/themes/default/d.gif,
+ mod/developers/vendors/jsTree/themes/default/d.png,
+ .../vendors/jsTree/themes/default/style.css,
+ .../vendors/jsTree/themes/default/throbber.gif,
+ .../views/default/admin/developers/inspect.php,
+ mod/developers/views/default/developers/css.php,
+ mod/developers/views/default/developers/tree.php,
+ .../views/default/forms/developers/inspect.php,
+ .../views/default/js/developers/developers.php: added the inspect tool to
+ developers tool plugin
+
+ * engine/lib/river.php, pages/river.php: fixed river for #3544
+
+ * mod/embed/start.php, mod/embed/views/default/embed/embed.php,
+ mod/embed/views/default/embed/upload/content.php: fixed embed plugin for
+ #3544
+
+ * mod/file/pages/file/search.php, mod/messages/pages/messages/send.php:
+ fixed messages and file plugins for #3544
+
+ * engine/lib/input.php: added note about preventing reflected XSS
+ vulnerabilities.
+
+2011-07-02 Cash Costello <cash.costello@gmail.com>
+
+ * views/default/input/access.php, views/default/input/autocomplete.php,
+ views/default/input/button.php, views/default/input/calendar.php,
+ views/default/input/captcha.php, views/default/input/checkbox.php,
+ views/default/input/checkboxes.php, views/default/input/date.php,
+ views/default/input/dropdown.php, views/default/input/email.php,
+ views/default/input/file.php, views/default/input/location.php,
+ views/default/input/longtext.php, views/default/input/password.php,
+ views/default/input/plaintext.php, views/default/input/radio.php,
+ views/default/input/tag.php, views/default/input/tags.php,
+ views/default/input/text.php, views/default/input/url.php: Fixes #3624 input
+ views use class extending rather than overriding
+
+ * mod/blog/views/default/forms/blog/save.php: fixed the blog categories code
+ as the entity was not being passed
+
+2011-07-01 Cash Costello <cash.costello@gmail.com>
+
+ * mod/bookmarks/pages/bookmarks/bookmarklet.php: removed the add bookmark
+ button from get bookmarklet page
+
+2011-06-30 Cash Costello <cash.costello@gmail.com>
+
+ * engine/lib/elgglib.php: Adds exception handling to shutdown hook from pull
+ request 50
+
+ * engine/lib/views.php, vendors/jquery/jquery-1.5.min.js,
+ vendors/jquery/jquery-1.6.1.min.js, vendors/jquery/jquery-ui-1.8.14.min.js,
+ vendors/jquery/jquery-ui-1.8.9.min.js: Refs #3015 updated jquery and
+ jquery-ui to their latest releases
+
+ * languages/en.php, views/default/object/plugin/advanced.php: Fixes #3635
+ added strings for activate and deactivate
+
+ * languages/en.php: Fixes #3636 added general language strings for sort and
+ filter
+
+2011-06-29 cash <cash.costello@gmail.com>
+
+ * .../views/default/groups/profile/widgets.php: made group widget columns
+ backward compatible so that content at least does not disappear
+
+ * engine/classes/ElggMenuItem.php: handling spaces and uppercase characters
+ when creating menu item classes
+
+ * engine/lib/views.php, views/default/page/elements/wrapper.php: added
+ backward compatibility for the view page_elements/content_wrapper
+
+ * engine/lib/group.php: added @since dates on two functions in group library
+
+2011-06-29 Cash Costello <cash.costello@gmail.com>
+
+ * mod/tinymce/views/default/js/tinymce.php,
+ mod/tinymce/views/default/tinymce/css.php: Fixes #3537 using elgg.echo() for
+ i18n of word count
+
+ * mod/tinymce/css/elgg_tinymce.css, mod/tinymce/tinymce_content.css,
+ mod/tinymce/views/default/js/tinymce.php: moved tinymce content css into its
+ own directory
+
+ * views/default/css/admin.php, views/default/css/elements/modules.php: Fixes
+ #3629 added overflow hidden to .elgg-module for both default and admin themes
+
+ * mod/thewire/pages/thewire/everyone.php,
+ mod/thewire/pages/thewire/friends.php, mod/thewire/pages/thewire/owner.php,
+ mod/thewire/pages/thewire/reply.php: Fixes #3578 added a css class to thewire
+ add form
+
+ * actions/admin/plugins/activate.php, actions/admin/plugins/deactivate.php,
+ actions/admin/plugins/set_priority.php,
+ views/default/object/plugin/advanced.php: Fixes #3630 using the plugin id for
+ the css id
+
+2011-06-28 Cash Costello <cash.costello@gmail.com>
+
+ * mod/thewire/views/default/forms/thewire/add.php: Fixes #3579 using
+ input/plaintext in the wire form
+
+ * views/default/css/admin.php, views/default/page/layouts/admin.php: Fixes
+ #3519 admin area now has title buttons
+
+ * engine/lib/views.php, views/default/page/layouts/content/header.php: using
+ elgg_view_title() in content layout header
+
+ * languages/en.php, views/default/widgets/content_stats/content.php: Fixes
+ #3597 defined a language string for 'more'
+
+ * languages/en.php: Fixes #3505 define language string for
+ menu:page:header:default
+
+ * .../views/default/forms/bookmarks/save.php,
+ .../views/default/forms/developers/settings.php,
+ .../views/default/forms/expages/edit.php,
+ mod/file/views/default/forms/file/upload.php,
+ .../views/default/forms/discussion/reply/save.php,
+ mod/groups/views/default/forms/discussion/save.php,
+ .../views/default/forms/invitefriends/invite.php,
+ .../views/default/forms/messages/process.php,
+ .../views/default/forms/messages/reply.php,
+ mod/messages/views/default/forms/messages/send.php,
+ .../forms/notificationsettings/groupsave.php,
+ mod/pages/views/default/forms/pages/edit.php,
+ .../views/default/forms/reportedcontent/add.php,
+ mod/thewire/views/default/forms/thewire/add.php: Fixes #3407 added elgg-foot
+ to plugin forms
+
+ * views/default/navigation/menu/elements/item.php: updated the menu item
+ view to work with the new setLinkClass/addLinkClass methods
+
+2011-06-27 Cash Costello <cash.costello@gmail.com>
+
+ * mod/blog/lib/blog.php, mod/blog/views/default/forms/blog/save.php,
+ mod/groups/lib/groups.php, mod/groups/views/default/forms/groups/edit.php,
+ mod/groups/views/default/forms/groups/invite.php,
+ mod/groups/views/default/groups/edit.php,
+ .../default/forms/notificationsettings/save.php,
+ .../default/notifications/subscriptions/form.php,
+ .../notifications/subscriptions/forminternals.php,
+ views/default/core/settings/account.php,
+ views/default/css/elements/forms.php, views/default/forms/avatar/crop.php,
+ views/default/forms/avatar/upload.php, views/default/forms/comments/add.php,
+ views/default/forms/friends/collections/add.php,
+ views/default/forms/plugins/settings/save.php,
+ views/default/forms/profile/edit.php,
+ views/default/forms/user/requestnewpassword.php,
+ views/default/forms/useradd.php, views/default/forms/usersettings/save.php,
+ views/default/forms/widgets/save.php, views/default/input/form.php: Refs
+ #3407 using elgg-form and elgg-foot in core forms. Plugins next
+
+2011-06-26 cash <cash.costello@gmail.com>
+
+ * mod/bookmarks/pages/bookmarks/add.php,
+ mod/bookmarks/pages/bookmarks/all.php,
+ mod/bookmarks/pages/bookmarks/bookmarklet.php,
+ mod/bookmarks/pages/bookmarks/edit.php,
+ mod/bookmarks/pages/bookmarks/friends.php,
+ mod/bookmarks/pages/bookmarks/owner.php, mod/file/pages/file/edit.php,
+ mod/file/pages/file/friends.php, mod/file/pages/file/owner.php,
+ mod/file/pages/file/search.php, mod/file/pages/file/upload.php,
+ mod/file/pages/file/view.php, mod/file/pages/file/world.php,
+ mod/groups/lib/discussion.php, mod/groups/lib/groups.php,
+ .../views/default/groups/profile/buttons.php,
+ mod/members/pages/members/index.php,
+ mod/messageboard/pages/messageboard/owner.php,
+ mod/messages/pages/messages/inbox.php, mod/messages/pages/messages/read.php,
+ mod/messages/pages/messages/send.php, mod/messages/pages/messages/sent.php,
+ mod/messages/views/default/messages/js.php, mod/pages/pages/pages/edit.php,
+ mod/pages/pages/pages/friends.php, mod/pages/pages/pages/history.php,
+ mod/pages/pages/pages/new.php, mod/pages/pages/pages/owner.php,
+ mod/pages/pages/pages/revision.php, mod/pages/pages/pages/view.php,
+ mod/pages/pages/pages/world.php, mod/thewire/pages/thewire/everyone.php,
+ mod/thewire/pages/thewire/friends.php, mod/thewire/pages/thewire/owner.php,
+ mod/thewire/pages/thewire/previous.php, mod/thewire/pages/thewire/reply.php,
+ mod/thewire/pages/thewire/tag.php, mod/thewire/pages/thewire/thread.php,
+ pages/river.php: this should update all the core pages and plugins using
+ 'buttons'
+
+ * engine/lib/navigation.php, mod/blog/lib/blog.php,
+ views/default/page/layouts/content.php,
+ views/default/page/layouts/content/header.php: removed buttons logic from
+ content header view, created convenience function rather than copying and
+ pasting, and updated the blog plugin
+
+ * engine/classes/ElggMenuItem.php, engine/lib/navigation.php,
+ mod/groups/start.php: added a data array to ElggMenuItem. Now by default
+ options end up being passed to output/url.
+
+ * mod/embed/images/close_button.gif, mod/embed/js/embed.js,
+ mod/embed/views/default/embed/js.php,
+ mod/embed/views/default/js/embed/embed.php: updated based on Brett's comments
+ and removed old stuff related to facebox lightbox
+
+2011-06-26 Cash Costello <cash.costello@gmail.com>
+
+ * engine/lib/relationships.php: Fixes #3585 do not need to check parameters
+ because was registered for only one event
+
+ * engine/classes/ElggMenuItem.php, engine/lib/navigation.php, js/lib/ui.js,
+ mod/groups/start.php, mod/logbrowser/views/default/logbrowser/form.php,
+ mod/profile/views/default/profile/owner_block.php,
+ .../views/default/object/reported_content.php,
+ views/default/object/plugin/advanced.php,
+ views/default/object/plugin/invalid.php,
+ views/default/object/widget/elements/controls.php,
+ views/default/page/layouts/widgets/add_button.php: Fixes #3470 using
+ rel=toggle now
+
+ * mod/thewire/languages/en.php,
+ .../views/default/river/object/thewire/create.php: provided a way to get to
+ the wire from activity page
+
+ * mod/blog/languages/en.php, mod/blog/lib/blog.php,
+ mod/bookmarks/pages/bookmarks/all.php, mod/bookmarks/start.php,
+ mod/file/languages/en.php, mod/file/pages/file/friends.php,
+ mod/file/pages/file/owner.php: made breadcrumbs consistent in content plugins
+
+ * mod/groups/start.php: not displaying the reply button for discussion
+ topics in widgets
+
+ * mod/blog/views/default/object/blog.php,
+ mod/bookmarks/views/default/object/bookmarks.php,
+ mod/file/views/default/object/file.php,
+ mod/groups/views/default/group/default.php,
+ .../views/default/object/groupforumtopic.php,
+ mod/pages/views/default/object/page_top.php,
+ mod/thewire/views/default/object/thewire.php,
+ views/default/object/default.php, views/default/object/elements/summary.php:
+ Fixes #3368 combining $vars with parameters for object/elements/summary view
+
+ * .../views/default/settings/logrotate/edit.php: removed use of deprecated
+ internalname key in log rotation
+
+ * engine/classes/ElggEntity.php, mod/blog/lib/blog.php,
+ mod/bookmarks/pages/bookmarks/view.php, mod/file/pages/file/view.php,
+ mod/groups/lib/discussion.php, .../views/default/groups/sidebar/featured.php,
+ mod/messages/pages/messages/read.php, mod/pages/pages/pages/view.php,
+ mod/search/views/default/search/entity.php, pages/entities/index.php,
+ views/default/page/elements/owner_block.php,
+ views/json/entities/entity_list.php: Fixes #3614 updated use of
+ elgg_view_entity() throughout core
+
+ * mod/messageboard/pages/messageboard/owner.php: better way of sorting
+ messageboard annotations
+
+2011-06-25 Brett Profitt <brett.profitt@gmail.com>
+
+ * engine/lib/deprecated-1.8.php: Don't say the db was upgradeded when it
+ wasn't.
+
+ * engine/lib/upgrade.php, engine/lib/upgrades/2011010101.php: Fixes #3554.
+ Pulled 1.7->1.8 upgrade bootstrapping into a separate function. Made the
+ plugin upgrade that forwards (2011010101) set itself in the processed
+ upgrades.
+
+2011-06-25 cash <cash.costello@gmail.com>
+
+ * views/default/css/elements/layout.php,
+ views/default/page/layouts/one_column.php: one_column layout was not showing
+ title and nav
+
+ * mod/messageboard/pages/messageboard/owner.php: fixed ordering of
+ messageboard posts
+
+2011-06-25 Brett Profitt <brett.profitt@gmail.com>
+
+ * engine/lib/configuration.php: datalist_get() was incorrectly setting
+ escaped values in the cache.
+
+2011-06-25 cash <cash.costello@gmail.com>
+
+ * engine/lib/admin.php: fixed spacing in
+ elgg_admin_add_plugin_settings_menu()
+
+ * languages/en.php, .../river/user/default/profileiconupdate.php: actually
+ read Evan's comment on pull request #48 and fixed previous
+
+ * languages/en.php, .../river/user/default/profileiconupdate.php: updates
+ the avatar update river view and closes pull request #48
+
+ * views/default/river/elements/body.php,
+ views/default/river/elements/responses.php,
+ views/default/river/elements/summary.php: added documentation to new river
+ views and improved handling of responses
+
+ * engine/classes/ElggEntity.php: Fixes #3609 removed use of deprecated
+ trigger_plugin_hook()
+
+ * mod/groups/views/default/groups/css.php,
+ mod/groups/views/default/groups/js.php,
+ mod/groups/views/default/groups/profile/module.php,
+ .../views/default/groups/profile/widgets.php: Fixes #3395 using a fluid
+ gallery for the groups profile page
+
+ * js/lib/ui.js, mod/likes/start.php,
+ mod/likes/views/default/likes/count.php,
+ mod/likes/views/default/likes/js.php: Fixes #3610 $guid was not defined
+
+2011-06-25 Cash Costello <cash.costello@gmail.com>
+
+ * views/default/css/elements/navigation.php: Fixes #3388 put vertical-align:
+ middle back on topbar icons
+
+ * mod/likes/start.php, mod/likes/views/default/likes/button.php,
+ mod/likes/views/default/likes/count.php,
+ mod/likes/views/default/likes/css.php, views/default/river/elements/body.php:
+ Fixes #3566 separate out likes button from likes count
+
+ * mod/likes/views/default/likes/button.php,
+ mod/likes/views/default/likes/display.php,
+ views/default/css/elements/core.php,
+ views/default/css/elements/navigation.php: Refs #3388 entity menu has better
+ vertical alignment
+
+2011-06-24 cash <cash.costello@gmail.com>
+
+ * mod/groups/lib/groups.php: fixed breadcrumb on groups members page
+
+ * .../views/default/forms/messageboard/add.php: added spacing between
+ messageboard textarea and submit button
+
+ * mod/messages/pages/messages/read.php: adding some spacing between the
+ messages and the reply form
+
+ * mod/blog/views/default/blog/group_module.php,
+ .../views/default/bookmarks/group_module.php,
+ mod/file/views/default/file/group_module.php,
+ .../views/default/discussion/group_module.php,
+ .../default/groups/profile/activity_module.php,
+ mod/groups/views/default/groups/profile/module.php,
+ mod/pages/views/default/pages/group_module.php: Fixes #3139 DRYs up group
+ modules
+
+ * mod/custom_index/index.php, .../views/default/groups/sidebar/members.php,
+ views/default/css/elements/components.php: Fixes #3559 adds
+ .elgg-gallery-users
+
+ * engine/lib/entities.php, engine/lib/views.php, mod/custom_index/index.php,
+ mod/file/views/default/file/typecloud.php,
+ .../views/default/groups/sidebar/members.php,
+ views/default/widgets/friends/content.php: Refs #1253 using 'list_type'
+ string instead of boolean 'gallery' for entity listing
+
+ * engine/lib/views.php, mod/search/views/default/search/list.php,
+ views/default/css/admin.php, views/default/css/elements/components.php,
+ views/default/object/elements/summary.php,
+ views/default/page/components/gallery.php,
+ views/default/page/components/list.php: cleaned up the list/gallery css
+ classes to use standard class naming - minor modifications only
+
+ * .../graphics/sign-in-with-twitter-d.png,
+ .../graphics/sign-in-with-twitter-l.png, mod/twitter_api/lib/twitter_api.php,
+ .../views/default/twitter_api/login.php: Fixes #2958 cleaned up user login
+ for twitter
+
+ * mod/thewire/start.php: Fixes #3204 adds hook trigger so that wire sends
+ out status updates
+
+ * mod/twitter_api/lib/twitter_api.php, mod/twitter_api/start.php: fixed the
+ post to twitter capability - was not loading the twitter oauth class
+
+ * mod/twitter_api/lib/twitter_api.php,
+ .../default/usersettings/twitter_api/edit.php: fixes the authorization to
+ post so that it does not include login
+
+ * mod/twitter_api/start.php: twitter @anywhere was causing problems - pages
+ were not loading and js errors
+
+2011-06-20 benbro <ben.browitt@gmail.com>
+
+ * engine/lib/statistics.php, engine/lib/users.php: added find_active_users
+ hook
+
+2011-06-24 Cash Costello <cash.costello@gmail.com>
+
+ * .../river/object/groupforumtopic/create.php,
+ views/default/river/elements/body.php: fixed group forum discussion inline
+ replies for activity page
+
+2011-06-23 cash <cash.costello@gmail.com>
+
+ * mod/twitter_api/languages/en.php, mod/twitter_api/start.php,
+ .../views/default/settings/twitter_api/edit.php,
+ mod/twitter_api/views/default/twitter_api/css.php: cleaned up the twitter api
+ plugin settings so instructions are correct. Need to verify that login works.
+
+ * .../views/default/settings/twitter_api/edit.php: added instructions back
+ to twitter api plugin settings
+
+ * views/default/css/admin.php: added a css class so that we can limit the
+ width of text instruction areas in admin area
+
+2011-06-23 Cash Costello <cash.costello@gmail.com>
+
+ * mod/groups/actions/groups/membership/remove.php,
+ mod/groups/languages/en.php: Refs #1867 let group owner know what user they
+ just removed
+
+ * mod/dashboard/start.php, mod/dashboard/views/default/dashboard/blurb.php,
+ mod/dashboard/views/default/dashboard/css.php: Fixes #3599 spacing of
+ dashboard blurb fixed
+
+ * views/default/css/elgg.php: Fixes #3471 moved helpers to end of css/elgg
+
+ * mod/twitter/views/default/twitter/css.php: Fixes #3603 fixes display of
+ @username in twitter widget - thanks to ManUtopiK
+
+2011-06-22 cash <cash.costello@gmail.com>
+
+ * views/default/page/default.php: backward compatibility of the admin page
+ shell was broken when we reorganized the page view directory
+
+ * mod/thewire/languages/en.php, mod/thewire/views/default/thewire/reply.php:
+ added @username in the reply text for a wire post
+
+2011-06-22 Cash Costello <cash.costello@gmail.com>
+
+ * mod/members/pages/members/search.php: Fixes #3598 sanitizing the $name
+ variable
+
+2011-06-21 Franz Liedke <franz@develophp.org>
+
+ * engine/classes/ElggMenuItem.php: Add param description to PHPDoc comments
+ of setText() function.
+
+2011-06-20 cash <cash.costello@gmail.com>
+
+ * engine/lib/actions.php: removed debug code
+
+2011-06-20 Franz Liedke <franz@develophp.org>
+
+ * engine/classes/ElggMenuItem.php: Add setText() method to ElggMenuItem
+ class. Fixes #3546.
+
+ * engine/classes/ElggMenuItem.php: Add setHref() method to ElggMenuItem
+ class. Fixes #3486.
+
+2011-06-19 cash <cash.costello@gmail.com>
+
+ * mod/thewire/start.php: fixed the wire's previous ajax - the link class for
+ the menu was lost in the conversion from plain class to link_class
+
+ * languages/en.php: fixed typo in edit profile fields instructions
+
+ * mod/file/views/default/forms/file/upload.php: we "upload" new files and
+ "save" old ones
+
+ * mod/file/pages/file/view.php, mod/file/views/default/object/file.php:
+ moved the download button for files to the action menu (which probably needs
+ to be a menu)
+
+ * mod/embed/views/default/embed/upload/content.php,
+ mod/embed/views/default/js/embed/embed.php: File uploads working now. It is
+ hard coded to only work with file plugin.
+
+ * engine/lib/actions.php: added another way for an action to be detected as
+ an Ajax action: set the request variable X-Requested-With = XMLHttpRequest.
+ This is because files cannot be uploaded with XMLHttpRequest
+
+ * mod/file/actions/file/upload.php,
+ mod/file/views/default/file/embed_upload.php,
+ mod/file/views/default/forms/file/upload.php: removed the special ajax/embed
+ code from the file plugin
+
+ * views/default/css/elements/layout.php: need the system messages to be
+ above the lightbox overlay at 1000 z-index
+
+ * mod/file/views/default/forms/file/upload.php: need a default container for
+ files if form included from outside file plugin (like the embed plugin)
+
+2011-06-19 Cash Costello <cash.costello@gmail.com>
+
+ * views/default/widgets/friends/content.php: Fixes #3581 checks that the
+ owner of a friends widget is a user
+
+2011-06-18 cash <cash.costello@gmail.com>
+
+ * mod/embed/start.php: fixed issue with embedding a file in an embedded file
+
+ * mod/embed/start.php, mod/embed/views/default/embed/tabs.php,
+ mod/embed/views/default/js/embed/embed.php: added back tab switching
+
+ * mod/embed/views/default/embed/addcontentjs.php,
+ mod/embed/views/default/embed/embed.php,
+ mod/embed/views/default/js/embed/embed.php: rewrote pagination for embed file
+ listing
+
+ * mod/embed/start.php, mod/embed/views/default/embed/css.php,
+ mod/embed/views/default/embed/embed.php,
+ mod/embed/views/default/js/embed/embed.php,
+ mod/embed/views/default/js/embed/inline.php: rewrote the insert javascript as
+ an intermediate step. I'm sure I completely broke ECML integration and
+ uploading files.
+
+ * mod/embed/start.php, mod/embed/views/default/embed/css.php,
+ mod/embed/views/default/embed/embed.php,
+ mod/embed/views/default/embed/tabs.php,
+ views/default/css/elements/navigation.php: using the new lightbox and hacking
+ away at the complicated embed/embed view
+
+ * mod/blog/actions/blog/save.php,
+ mod/blog/views/default/forms/blog/save.php: Fixes #3580 adding blog preview
+ button that uses save action
+
+ * languages/en.php: added "Preview" as a general term defined in language
+ file
+
+ * mod/blog/actions/blog/save.php: using elgg_delete_river() rather than
+ custom SQL in blog save action
+
+ * mod/blog/views/default/forms/blog/save.php: moving the delete button in
+ blog form to right side
+
+ * mod/twitter_api/languages/en.php: Calling normal user registration
+ "manual" was confusing admin manual registration with user initiated
+ registration
+
+2011-06-18 Cash Costello <cash.costello@gmail.com>
+
+ * LICENCE.txt, LICENSE.txt: moved LICENCE.txt to LICENSE.txt to be
+ consistent with readme
+
+2011-06-13 Evan Winslow <evan@elgg.org>
+
+ * views/default/css/elements/components.php: Using tabs, not spaces for
+ indentation
+
+ * mod/groups/start.php, .../river/object/groupforumtopic/create.php,
+ views/default/river/elements/body.php,
+ views/default/river/elements/footer.php,
+ views/default/river/elements/responses.php: Renamed river footer to a more
+ semantic "responses". Fixed discussion to work inline again with this new
+ layout.
+
+ * views/default/css/elements/components.php: elgg-river-message and
+ elgg-river-attachments now get the old elgg-river-content styling
+
+2011-06-13 Jeff Tilson <jrtilson@gmail.com>
+
+ * mod/groups/actions/groups/membership/remove.php,
+ mod/groups/languages/en.php, mod/groups/start.php: Added 'remove from group'
+ link to the user hover menu (only appears when the page owner is a group)
+
+2011-06-13 Ravindra Nath Kakarla <ravindhranath@gmail.com>
+
+ * mod/thewire/views/default/js/thewire.php: textarea has to be jQuery object
+
+2011-06-13 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggMenuItem.php,
+ views/default/navigation/menu/elements/item.php: Fixes #3282 always using a
+ menu item's name in its class
+
+ * mod/tinymce/views/default/js/tinymce.php: Fixes #3175 toggled tinymce
+ takes full width now - thanks tomv
+
+ * languages/en.php: made some language clearer on default widgets
+ instructions
+
+ * .../views/default/forms/expages/edit.php: fixed formatting of site pages
+ creation form - longtext menu was overlapping tinymce
+
+ * views/default/css/admin.php: added the css for longtext control menu to
+ admin theme
+
+2011-06-12 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/reportedcontent/languages/en.php,
+ .../views/default/object/reported_content.php,
+ .../views/default/reportedcontent/admin_css.php: fixing some display issues
+ with reported content - code use a little cleanup
+
+ * mod/thewire/languages/en.php: pulling in blacktooth's wire language typo
+ fix : pull request #32
+
+ * mod/likes/start.php: Fixes #3521 removed unecessary anchor tags - thanks
+ to blacktooth
+
+ * engine/classes/ElggSite.php,
+ ...8b1-sites_need_a_site_guid-6d9dcbf46c0826cc.php, version.php: Fixes #2910
+ set the site_guid of site entities
+
+ * engine/lib/elgglib.php: Fixes #3480 not requiring a timestamp when using
+ the js/css page handler
+
+ * views/default/css/elements/layout.php: Fixes #3409 fixed small viewport
+ issue with default theme
+
+ * views/default/core/settings/tools.php: adjusted the spacing between the
+ settings tools text and the surrounding elements
+
+ * mod/groups/views/default/groups/css.php,
+ mod/groups/views/default/groups/profile/fields.php: using divs for group
+ profile fields to work around html validation issues with the out/tags view
+ using a div
+
+2011-06-11 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/details.php: convert profile details to
+ use divs so that we don't have invalid html due to output/tags
+
+ * views/default/page/layouts/widgets/add_panel.php: need to maintain key
+ associations with widget types
+
+ * views/default/page/layouts/widgets/add_panel.php: sort widgets for add
+ widgets panel
+
+ * views/default/css/elements/navigation.php: moved the elgg logo to the left
+ by 10 pixels
+
+ * engine/lib/elgglib.php, engine/lib/users.php,
+ views/default/css/elements/navigation.php: topbar icons were pushing the site
+ title. Forced the elgg logo and avatar to behave. Adding overflow hidden to
+ the topbar div would prevent future problems but cause issues for those
+ adding drop down menus
+
+ * actions/avatar/crop.php, actions/avatar/upload.php, languages/en.php:
+ added user avatar river messages back
+
+ * engine/lib/deprecated-1.8.php, engine/lib/river.php: Fixes #3039 added
+ elgg_delete_river()
+
+ * views/default/css/elements/modules.php: made the widget edit area slightly
+ darker to provide contrast with content area
+
+ * mod/profile/views/default/profile/owner_block.php: added some spacing
+ around the profile action menu
+
+ * pages/account/forgotten_password.php, pages/account/register.php,
+ pages/account/reset_password.php, views/default/css/elements/forms.php,
+ views/default/forms/user/requestnewpassword.php: Fixes #3556 limiting width
+ of account text boxes
+
+ * index.php, mod/custom_index/index.php: Fixes #3376 added RSS feed to
+ default index page and suppressing on custom index front page
+
+ * engine/classes/ElggSite.php, engine/lib/users.php,
+ pages/account/forgotten_password.php, pages/account/reset_password.php,
+ views/default/core/account/login_walled_garden.php,
+ views/default/forms/login.php: Fixes #3515 created a unified page handler for
+ account pages
+
+ * mod/blog/views/default/object/blog.php,
+ mod/bookmarks/views/default/object/bookmarks.php,
+ mod/embed/views/default/embed/item/list.php,
+ mod/file/views/default/object/file.php,
+ mod/groups/views/default/group/default.php,
+ .../views/default/object/groupforumtopic.php,
+ mod/pages/views/default/object/page_top.php,
+ mod/thewire/views/default/object/thewire.php,
+ views/default/group/elements/summary.php, views/default/object/default.php,
+ views/default/user/default.php, views/default/user/elements/summary.php:
+ Fixes #3096 added user and group summery views an updated plugins to use the
+ new view locations
+
+ * views/default/object/elements/summary.php,
+ views/default/page/components/summary.php: Refs #3096 Moved
+ page/components/summary to object/elements/summary. Left
+ page/components/summary for backwards compatibility. Plugins will eventually
+ need to be updated to use $type/elements/summary
+
+ * mod/pages/views/default/object/page_top.php: Fixes #3523 setting public
+ write access to logged in for pages
+
+ * mod/pages/start.php, mod/pages/views/default/input/write_access.php: Refs
+ #3523 added a view for write access in pages plugin
+
+ * mod/pages/pages/pages/view.php, mod/pages/start.php: Fixes #2672 limiting
+ deleting pages and creating sub pages
+
+ * engine/classes/ElggMenuItem.php, engine/lib/admin.php: sorting plugin
+ settings menu items by text
+
+ * .../views/default/settings/categories/edit.php,
+ .../default/settings/garbagecollector/edit.php,
+ .../views/default/settings/logrotate/edit.php: Refs #2032 changed <p> to
+ <div> for plugin settings
+
+ * mod/blog/views/default/forms/blog/save.php,
+ mod/groups/actions/groups/delete.php,
+ mod/groups/views/default/forms/groups/delete.php,
+ mod/groups/views/default/forms/groups/edit.php,
+ mod/groups/views/default/forms/groups/invite.php,
+ mod/groups/views/default/groups/edit.php,
+ .../views/default/forms/invitefriends/invite.php,
+ .../notifications/subscriptions/forminternals.php,
+ views/default/css/elements/forms.php, views/default/forms/avatar/crop.php,
+ views/default/forms/avatar/upload.php, views/default/forms/comments/add.php,
+ views/default/forms/usersettings/save.php: Refs #3407 adds a footer for forms
+
+
+ * install/css/install.css, views/installation/install/nav.php,
+ views/installation/install/pages/complete.php: fixed disabled button in
+ installer - css class had changed
+
+2011-06-09 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/developers/languages/en.php,
+ .../views/default/theme_preview/general.php: Fixes #3394 added a landing page
+ to theme preview and break out of iframe link
+
+ * engine/lib/users.php, views/default/input/location.php,
+ views/default/input/tag.php, views/default/output/location.php,
+ views/default/output/tag.php, views/default/output/tags.php: Fixes #3489
+ added input/output views for tag and location
+
+ * mod/invitefriends/manifest.xml: added invite friends to default activated
+ plugins
+
+ * actions/admin/plugins/activate.php, actions/admin/plugins/deactivate.php:
+ Refs #2871 Forgot to update the forwarding for activate/deactivate actions
+
+ * languages/en.php, mod/diagnostics/languages/en.php,
+ mod/externalpages/languages/en.php: Refs #3410 all admin menu items have
+ consistent capitalization
+
+ * engine/lib/admin.php: Fixes #3548 the check for an admin menu's parent
+ wasn't working
+
+ * actions/admin/plugins/activate_all.php,
+ actions/admin/plugins/deactivate_all.php, views/default/admin/plugins.php,
+ views/default/css/admin.php,
+ views/default/forms/admin/plugins/change_state.php: Fixes #2871 activate
+ all/deactivate all now sensitive to filtering
+
+ * views/default/admin/plugins/simple.php,
+ .../forms/admin/plugins/simple_update_states.php: Refs #2871 removed the
+ simple plugins page
+
+ * engine/lib/admin.php, views/default/admin/plugins.php,
+ views/default/admin/plugins/advanced.php: Refs #2871 promoted advanced
+ plugins up to be a primary menu
+
+ * views/default/object/plugin/advanced.php: Refs #2871 also turning off
+ dragging when not in priority order
+
+ * views/default/admin/plugins/advanced.php,
+ views/default/object/plugin/advanced.php,
+ .../object/plugin/elements/dependencies.php: Refs #2871 only showing links
+ for changing priority when all plugins are shown in priority order
+
+ * languages/en.php, views/default/admin/plugins/advanced.php,
+ views/default/forms/admin/plugins/filter.php,
+ views/default/forms/admin/plugins/sort.php: Refs #2871 adding sorting to
+ advanced plugin page
+
+ * languages/en.php, views/default/admin/plugins/advanced.php: Refs #2871
+ filter plugins by active/inactive state
+
+ * mod/diagnostics/manifest.xml: setting correct category for diagnostics
+ plugin
+
+2011-06-09 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * CHANGES.txt: Closes #3510. Merged CHANGES.txt for 1.7.9 to trunk.
+
+ * engine/lib/deprecated-1.8.php: Refs #3510, #3366. Added warning about
+ count vs sum in egef_annotation_count() to trunk.
+
+ * mod/profile/start.php: Refs #3510, #3316. Merged
+ register_metadata_as_independent() fix in profile.
+
+2011-06-08 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/upgrades/2011052801.php, version.php: Refs #3510, #3416. Merged
+ update for making sure users have relationship member_of on site object.
+
+ * mod/messages/languages/en.php,
+ mod/messages/views/default/object/messages.php: Refs #3510, #3264. Ported fix
+ for icons of messages from deleted users to trunk.
+
+2011-06-08 Evan Winslow <evan@elgg.org>
+
+ * engine/lib/views.php, languages/en.php, mod/blog/languages/en.php,
+ .../views/default/river/object/blog/create.php,
+ mod/bookmarks/languages/en.php,
+ .../default/river/object/bookmarks/create.php, mod/file/languages/en.php,
+ .../views/default/river/object/file/create.php, mod/groups/languages/en.php,
+ .../river/annotation/group_topic_post/reply.php,
+ mod/groups/views/default/river/group/create.php,
+ .../river/object/groupforumtopic/create.php,
+ .../default/river/relationship/member/create.php,
+ .../default/river/annotation/likes/create.php,
+ mod/messageboard/languages/en.php,
+ .../default/river/object/messageboard/create.php, mod/pages/languages/en.php,
+ .../views/default/river/object/page/create.php, mod/thewire/languages/en.php,
+ .../views/default/river/object/thewire/create.php,
+ .../river/annotation/generic_comment/create.php,
+ views/default/river/elements/body.php,
+ views/default/river/elements/summary.php, views/default/river/item.php,
+ views/default/river/relationship/friend/create.php: River revamp for 1.8
+
+2011-06-07 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/core/account/login_dropdown.php,
+ views/default/core/account/login_walled_garden.php: Refs #3510, #3414, #3536.
+ Ported https login fixes to trunk. Will need to backport changes to 1.7 for
+ #3536.
+
+ * engine/lib/group.php, engine/lib/sessions.php, languages/en.php: Refs
+ #3510, #3418. Merged fix for forwarding after output to trunk.
+
+ * mod/tinymce/vendor/tinymce/changelog.txt,
+ .../vendor/tinymce/examples/accessibility.html,
+ .../vendor/tinymce/examples/css/content.css,
+ mod/tinymce/vendor/tinymce/examples/css/word.css,
+ .../vendor/tinymce/examples/custom_formats.html,
+ mod/tinymce/vendor/tinymce/examples/full.html,
+ mod/tinymce/vendor/tinymce/examples/index.html,
+ .../vendor/tinymce/examples/lists/image_list.js,
+ .../vendor/tinymce/examples/lists/link_list.js,
+ .../vendor/tinymce/examples/lists/media_list.js,
+ .../vendor/tinymce/examples/lists/template_list.js,
+ mod/tinymce/vendor/tinymce/examples/media/logo.jpg,
+ .../vendor/tinymce/examples/media/logo_over.jpg,
+ .../vendor/tinymce/examples/media/sample.avi,
+ .../vendor/tinymce/examples/media/sample.dcr,
+ .../vendor/tinymce/examples/media/sample.flv,
+ .../vendor/tinymce/examples/media/sample.mov,
+ .../vendor/tinymce/examples/media/sample.ram,
+ .../vendor/tinymce/examples/media/sample.rm,
+ .../vendor/tinymce/examples/media/sample.swf,
+ mod/tinymce/vendor/tinymce/examples/menu.html,
+ mod/tinymce/vendor/tinymce/examples/simple.html,
+ mod/tinymce/vendor/tinymce/examples/skins.html,
+ .../vendor/tinymce/examples/templates/layout1.htm,
+ .../vendor/tinymce/examples/templates/snippet1.htm,
+ mod/tinymce/vendor/tinymce/examples/word.html,
+ .../vendor/tinymce/jscripts/tiny_mce/langs/en.js,
+ .../tiny_mce/plugins/advhr/langs/en_dlg.js,
+ .../jscripts/tiny_mce/plugins/advhr/rule.htm,
+ .../jscripts/tiny_mce/plugins/advimage/image.htm,
+ .../jscripts/tiny_mce/plugins/advimage/js/image.js,
+ .../tiny_mce/plugins/advimage/langs/en_dlg.js,
+ .../tiny_mce/plugins/advlink/js/advlink.js,
+ .../tiny_mce/plugins/advlink/langs/en_dlg.js,
+ .../jscripts/tiny_mce/plugins/advlink/link.htm,
+ .../tiny_mce/plugins/advlist/editor_plugin.js,
+ .../tiny_mce/plugins/advlist/editor_plugin_src.js,
+ .../tiny_mce/plugins/autolink/editor_plugin.js,
+ .../tiny_mce/plugins/autolink/editor_plugin_src.js,
+ .../tiny_mce/plugins/autoresize/editor_plugin.js,
+ .../plugins/autoresize/editor_plugin_src.js,
+ .../tiny_mce/plugins/autosave/editor_plugin.js,
+ .../tiny_mce/plugins/autosave/editor_plugin_src.js,
+ .../tiny_mce/plugins/bbcode/editor_plugin.js,
+ .../tiny_mce/plugins/bbcode/editor_plugin_src.js,
+ .../tiny_mce/plugins/contextmenu/editor_plugin.js,
+ .../plugins/contextmenu/editor_plugin_src.js,
+ .../tiny_mce/plugins/emotions/emotions.htm,
+ .../tiny_mce/plugins/fullpage/css/fullpage.css,
+ .../tiny_mce/plugins/fullpage/editor_plugin.js,
+ .../tiny_mce/plugins/fullpage/editor_plugin_src.js,
+ .../tiny_mce/plugins/fullpage/fullpage.htm,
+ .../tiny_mce/plugins/fullpage/js/fullpage.js,
+ .../tiny_mce/plugins/fullscreen/editor_plugin.js,
+ .../plugins/fullscreen/editor_plugin_src.js,
+ .../tiny_mce/plugins/inlinepopups/editor_plugin.js,
+ .../plugins/inlinepopups/editor_plugin_src.js,
+ .../inlinepopups/skins/clearlooks2/window.css,
+ .../tiny_mce/plugins/layer/editor_plugin.js,
+ .../tiny_mce/plugins/layer/editor_plugin_src.js,
+ .../tiny_mce/plugins/legacyoutput/editor_plugin.js,
+ .../plugins/legacyoutput/editor_plugin_src.js,
+ .../tiny_mce/plugins/lists/editor_plugin.js,
+ .../tiny_mce/plugins/lists/editor_plugin_src.js,
+ .../tiny_mce/plugins/media/css/content.css,
+ .../jscripts/tiny_mce/plugins/media/css/media.css,
+ .../tiny_mce/plugins/media/editor_plugin.js,
+ .../tiny_mce/plugins/media/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/media/img/flash.gif,
+ .../tiny_mce/plugins/media/img/flv_player.swf,
+ .../tiny_mce/plugins/media/img/quicktime.gif,
+ .../tiny_mce/plugins/media/img/realmedia.gif,
+ .../tiny_mce/plugins/media/img/shockwave.gif,
+ .../jscripts/tiny_mce/plugins/media/img/trans.gif,
+ .../tiny_mce/plugins/media/img/windowsmedia.gif,
+ .../jscripts/tiny_mce/plugins/media/js/media.js,
+ .../tiny_mce/plugins/media/langs/en_dlg.js,
+ .../jscripts/tiny_mce/plugins/media/media.htm,
+ .../tiny_mce/plugins/media/moxieplayer.swf,
+ .../tiny_mce/plugins/nonbreaking/editor_plugin.js,
+ .../plugins/nonbreaking/editor_plugin_src.js,
+ .../tiny_mce/plugins/noneditable/editor_plugin.js,
+ .../plugins/noneditable/editor_plugin_src.js,
+ .../tiny_mce/plugins/pagebreak/css/content.css,
+ .../tiny_mce/plugins/pagebreak/editor_plugin.js,
+ .../plugins/pagebreak/editor_plugin_src.js,
+ .../tiny_mce/plugins/pagebreak/img/pagebreak.gif,
+ .../tiny_mce/plugins/pagebreak/img/trans.gif,
+ .../tiny_mce/plugins/paste/editor_plugin.js,
+ .../tiny_mce/plugins/paste/editor_plugin_src.js,
+ .../plugins/searchreplace/editor_plugin.js,
+ .../plugins/searchreplace/editor_plugin_src.js,
+ .../plugins/searchreplace/js/searchreplace.js,
+ .../plugins/searchreplace/searchreplace.htm,
+ .../tiny_mce/plugins/spellchecker/editor_plugin.js,
+ .../plugins/spellchecker/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/style/js/props.js,
+ .../tiny_mce/plugins/style/langs/en_dlg.js,
+ .../jscripts/tiny_mce/plugins/style/props.htm,
+ .../tiny_mce/plugins/tabfocus/editor_plugin.js,
+ .../tiny_mce/plugins/tabfocus/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/table/cell.htm,
+ .../tiny_mce/plugins/table/editor_plugin.js,
+ .../tiny_mce/plugins/table/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/table/js/cell.js,
+ .../jscripts/tiny_mce/plugins/table/js/row.js,
+ .../jscripts/tiny_mce/plugins/table/js/table.js,
+ .../tiny_mce/plugins/table/langs/en_dlg.js,
+ .../tiny_mce/plugins/table/merge_cells.htm,
+ .../jscripts/tiny_mce/plugins/table/row.htm,
+ .../jscripts/tiny_mce/plugins/table/table.htm,
+ .../tiny_mce/plugins/template/js/template.js,
+ .../tiny_mce/plugins/visualchars/editor_plugin.js,
+ .../plugins/visualchars/editor_plugin_src.js,
+ .../tiny_mce/plugins/wordcount/editor_plugin.js,
+ .../plugins/wordcount/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/xhtmlxtras/abbr.htm,
+ .../tiny_mce/plugins/xhtmlxtras/acronym.htm,
+ .../tiny_mce/plugins/xhtmlxtras/attributes.htm,
+ .../jscripts/tiny_mce/plugins/xhtmlxtras/cite.htm,
+ .../jscripts/tiny_mce/plugins/xhtmlxtras/del.htm,
+ .../tiny_mce/plugins/xhtmlxtras/editor_plugin.js,
+ .../plugins/xhtmlxtras/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/xhtmlxtras/ins.htm,
+ .../tiny_mce/plugins/xhtmlxtras/js/attributes.js,
+ .../jscripts/tiny_mce/plugins/xhtmlxtras/js/del.js,
+ .../plugins/xhtmlxtras/js/element_common.js,
+ .../jscripts/tiny_mce/plugins/xhtmlxtras/js/ins.js,
+ .../jscripts/tiny_mce/themes/advanced/about.htm,
+ .../jscripts/tiny_mce/themes/advanced/anchor.htm,
+ .../jscripts/tiny_mce/themes/advanced/charmap.htm,
+ .../tiny_mce/themes/advanced/color_picker.htm,
+ .../tiny_mce/themes/advanced/editor_template.js,
+ .../themes/advanced/editor_template_src.js,
+ .../jscripts/tiny_mce/themes/advanced/image.htm,
+ .../tiny_mce/themes/advanced/img/flash.gif,
+ .../tiny_mce/themes/advanced/img/iframe.gif,
+ .../tiny_mce/themes/advanced/img/pagebreak.gif,
+ .../tiny_mce/themes/advanced/img/quicktime.gif,
+ .../tiny_mce/themes/advanced/img/realmedia.gif,
+ .../tiny_mce/themes/advanced/img/shockwave.gif,
+ .../tiny_mce/themes/advanced/img/trans.gif,
+ .../tiny_mce/themes/advanced/img/video.gif,
+ .../tiny_mce/themes/advanced/img/windowsmedia.gif,
+ .../jscripts/tiny_mce/themes/advanced/js/about.js,
+ .../jscripts/tiny_mce/themes/advanced/js/anchor.js,
+ .../tiny_mce/themes/advanced/js/charmap.js,
+ .../tiny_mce/themes/advanced/js/color_picker.js,
+ .../jscripts/tiny_mce/themes/advanced/js/image.js,
+ .../jscripts/tiny_mce/themes/advanced/js/link.js,
+ .../tiny_mce/themes/advanced/js/source_editor.js,
+ .../jscripts/tiny_mce/themes/advanced/langs/en.js,
+ .../tiny_mce/themes/advanced/langs/en_dlg.js,
+ .../jscripts/tiny_mce/themes/advanced/link.htm,
+ .../tiny_mce/themes/advanced/shortcuts.htm,
+ .../themes/advanced/skins/default/content.css,
+ .../tiny_mce/themes/advanced/skins/default/ui.css,
+ .../themes/advanced/skins/highcontrast/content.css,
+ .../themes/advanced/skins/highcontrast/dialog.css,
+ .../themes/advanced/skins/highcontrast/ui.css,
+ .../themes/advanced/skins/o2k7/content.css,
+ .../tiny_mce/themes/advanced/skins/o2k7/dialog.css,
+ .../tiny_mce/themes/advanced/skins/o2k7/ui.css,
+ .../themes/advanced/skins/o2k7/ui_black.css,
+ .../themes/advanced/skins/o2k7/ui_silver.css,
+ .../tiny_mce/themes/advanced/source_editor.htm,
+ .../tiny_mce/themes/simple/editor_template.js,
+ .../tiny_mce/themes/simple/editor_template_src.js,
+ .../vendor/tinymce/jscripts/tiny_mce/tiny_mce.js,
+ .../tinymce/jscripts/tiny_mce/tiny_mce_popup.js,
+ .../tinymce/jscripts/tiny_mce/tiny_mce_src.js,
+ .../tinymce/jscripts/tiny_mce/utils/form_utils.js,
+ .../tinymce/jscripts/tiny_mce/utils/mctabs.js,
+ .../tinymce/jscripts/tiny_mce/utils/validate.js: Refs #3510, #9113. Updated
+ tinyMCE version in trunk.
+
+ * engine/classes/ElggEntity.php: Refs #3510, #3433. Ported r9062 to trunk.
+ Fix for comment hook returning 0 comments.
+
+ * CHANGES.txt: Refs #3510: Merged r8938 to trunk. Removed exec props.
+
+ * README.txt: Merged README.txt version removal to trunk.
+
+2011-06-03 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * install/ElggInstaller.php: Fixes #3520 fix check for subdirectory in
+ installer
+
+ * mod/embed/README.txt, mod/embed/start.php,
+ mod/embed/views/default/embed/css.php,
+ mod/embed/views/default/embed/embed.php,
+ mod/embed/views/default/embed/item/list.php,
+ mod/embed/views/default/embed/js.php,
+ .../default/tinymce/embed_custom_insert_js.php: Refs #3360 #2911 applying
+ ashleyward's patch for embed plugin - thanks!
+
+ * vendors/jquery/jquery.form.js: Refs #3360 updating the jquery form plugin
+
+ * mod/blog/actions/blog/delete.php, mod/blog/lib/blog.php,
+ mod/blog/start.php, mod/blog/views/default/blog/group_module.php,
+ mod/bookmarks/actions/bookmarks/delete.php,
+ mod/bookmarks/pages/bookmarks/view.php, mod/bookmarks/start.php,
+ .../views/default/bookmarks/group_module.php,
+ mod/file/actions/file/delete.php, mod/file/actions/file/upload.php,
+ mod/file/pages/file/search.php, mod/file/pages/file/upload.php,
+ mod/file/pages/file/view.php, mod/file/start.php,
+ mod/file/views/default/file/group_module.php,
+ mod/messageboard/pages/messageboard/owner.php, mod/messageboard/start.php,
+ .../views/default/widgets/messageboard/content.php,
+ mod/pages/actions/pages/delete.php, mod/pages/pages/pages/history.php,
+ mod/pages/pages/pages/revision.php, mod/pages/pages/pages/view.php,
+ mod/pages/start.php, mod/pages/views/default/pages/group_module.php: Fixes
+ #3138 using 'all' for group listing urls
+
+ * mod/likes/actions/likes/add.php, mod/likes/actions/likes/delete.php,
+ mod/likes/views/default/likes/display.php: Fixes #3497 users can unlike other
+ users content
+
+2011-06-02 Russell McLoughlin <mcloughlin3@llnl.gov>
+
+ * mod/file/actions/file/upload.php: fixed embarrassing spelling mistake.
+
+2011-06-01 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/likes/start.php: Fixes #3499 using consistent menu name for likes
+ plugin
+
+2011-06-01 Russell McLoughlin <mcloughlin3@llnl.gov>
+
+ * mod/file/actions/file/upload.php, mod/file/download.php: Modified upload
+ script to guarentee that the directory under elgg data is created or exists.
+ Removed strange chunking code with builtin php function
+
+ * mod/file/actions/file/upload.php: Modified upload code so that it uses
+ php's built in file copy function rather than reading the entire uploaded
+ file into memory from the temporary upload directory and then saving it to
+ elgg's data dir.
+
+2011-06-01 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/deprecated-1.8.php: Fixes #3455 added documentation back to
+ deprecated functions
+
+2011-05-24 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggPluginPackage.php, languages/en.php,
+ views/default/css/admin.php, views/default/object/plugin/advanced.php: Fixes
+ #3467. Fixed bugs in priority deps. Can now disable active plugins with unmet
+ dependencies.
+
+2011-05-20 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css/admin.php: Refs #3236 added some margin to the bottom of
+ the admin footer
+
+ * engine/lib/users.php, mod/dashboard/manifest.xml, mod/dashboard/start.php,
+ mod/dashboard/views/default/dashboard/blurb.php, pages/dashboard.php,
+ views/default/core/dashboard/blurb.php, views/default/css/elements/misc.php:
+ Refs #3340 pulls dashboard out as plugin
+
+ * views/default/annotation/generic_comment.php,
+ views/default/page/elements/comments_block.php: Fixes #3457 showing a snippet
+ of a comment in sidebar instead of entire comment
+
+ * views/default/input/access.php, views/default/input/tags.php,
+ views/default/output/tags.php: Fixes #3189 adds entity support to tags and
+ access views
+
+ * languages/en.php, mod/blog/manifest.xml, mod/bookmarks/manifest.xml,
+ mod/categories/manifest.xml, mod/diagnostics/manifest.xml,
+ mod/embed/manifest.xml, mod/file/manifest.xml,
+ mod/garbagecollector/manifest.xml, mod/groups/manifest.xml,
+ mod/htmlawed/manifest.xml, mod/invitefriends/manifest.xml,
+ mod/logrotate/manifest.xml, mod/messageboard/manifest.xml,
+ mod/pages/manifest.xml, mod/tagcloud/manifest.xml, mod/tinymce/manifest.xml,
+ mod/twitter/manifest.xml, mod/uservalidationbyemail/manifest.xml,
+ mod/zaudio/manifest.xml: Refs #2104 changed extension to enhancement and
+ added security, widget, and theme categories
+
+ * engine/lib/river.php: Fixes #3300 adds a created,river event
+
+2011-05-19 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/river.php: 'creating', 'river' is the plugin hook for
+ preventing or catching a river addition before it happens
+
+ * engine/lib/output.php: Fixes #3454 not stripping empty attributes
+
+ * engine/lib/admin.php, views/default/object/plugin/advanced.php: Fixes
+ #3163 plugin/<plugin id>/settings.php is now the preferred way to add
+ settings plugins
+
+ * engine/classes/ElggPlugin.php, engine/lib/elgglib.php, languages/en.php:
+ Fixes #3462 empty classes directory is no longer treated as an error
+
+2011-05-18 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * js/lib/ui.js, views/default/output/confirmlink.php,
+ views/default/page/elements/header.php: Fixes #3385 rel now used for the
+ confirm text so that title can be used separately
+
+ * engine/lib/pagehandler.php: Fixes #3132 added 'route', $handler plugin
+ hook
+
+ * views/default/forms/register.php: Fixes #3419 removed code about admin
+ option from registration form
+
+ * mod/groups/start.php: Fixes #3464 group discussion replies work on
+ activity page
+
+2011-05-15 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * install/languages/en.php: Fixes #3453 added link to wiki about the data
+ directory
+
+ * install/css/install.css,
+ views/installation/install/pages/requirements.php: fixed display issue in
+ installation where navigation was overlapping requirements
+
+ * install/ElggInstaller.php: fixed issue introduced with the session changes
+ in the installer
+
+ * install/ElggInstaller.php: do not need to initialize globals in installer
+ because they are now declared that way in Elgg core libs
+
+ * install/ElggInstaller.php: fixed regenerating cache when installing Elgg -
+ wasn't picking up the plugins before
+
+ * views/installation/page/elements/footer.php: helpful links in installer
+ open up in new page now
+
+ * install/ElggInstaller.php: Refs #3453 added $CONFIG->data_dir_override so
+ that people can put the data directory in Elgg's root if they want to. Will
+ add instructions to the wiki on using this and protecting the directory
+
+ * install/ElggInstaller.php, install/ElggRewriteTester.php,
+ install/css/install.css, install/js/install.js, install/languages/en.php,
+ views/installation/forms/install/template.php,
+ views/installation/input/checkbox.php,
+ views/installation/input/checkboxes.php, views/installation/input/combo.php,
+ views/installation/input/form.php, views/installation/input/hidden.php,
+ views/installation/input/text.php: Refs #3453 an implementation of creating
+ the data directory. This capability is turned off due to security concerns.
+
+2011-05-14 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/installation/input/access.php, views/installation/input/button.php,
+ views/installation/input/checkboxes.php,
+ views/installation/input/dropdown.php, views/installation/input/form.php,
+ views/installation/input/hidden.php, views/installation/input/longtext.php,
+ views/installation/input/password.php, views/installation/input/reset.php,
+ views/installation/input/securitytoken.php,
+ views/installation/input/submit.php, views/installation/input/text.php: clean
+ up installation input views
+
+ * install/css/install.css: fixed the width of text boxes for the installer
+
+ * actions/logout.php: on logout send the user to the main page
+
+ * install/ElggInstaller.php: Fixes #3446 password is not required anymore
+ for installer
+
+ * install/js/install.js, views/installation/forms/install/template.php,
+ views/installation/page/default.php: fixed the double form submission code
+ for the installer
+
+ * engine/lib/users.php, views/default/user/default.php: Fixes #3456
+ user/default now works much like the object/<subtype> views regarding the
+ menu
+
+ * engine/lib/extender.php: not using deprecated get_annotation/get_metadata
+ functions in can_edit_extender()
+
+ * views/default/navigation/topbar_tools.php,
+ views/default/page/elements/topbar.php: only display deprecation message if
+ someone extends/overrides the deprecated tools view
+
+ * mod/developers/languages/en.php: defined
+ elgg_dev_tools:settings:explanation
+
+ * views/default/input/dropdown.php: fixes a php warning if no options are
+ passed to input/dropdown view
+
+ * engine/lib/users.php: removed a deprecated function use in users lib
+
+ * .../views/default/theme_preview/forms.php,
+ views/default/input/userpicker.php: fixed passing wrong parameters to
+ input/userpicker (which is not currently functional)
+
+ * mod/externalpages/start.php, mod/thewire/start.php, mod/twitter/start.php:
+ removed deprecated functions from these 3 plugins
+
+ * engine/lib/actions.php: improved documentation of elgg_register_action()
+
+ * mod/pages/start.php: fixed page revisions url override
+
+ * engine/lib/extender.php: improved documentation of
+ elgg_register_extender_url_handler()
+
+ * views/default/forms/admin/menu/save.php: fixed php warning when no custom
+ menu items
+
+ * languages/en.php: fixed typo in the admin welcome widget
+
+ * views/default/admin/plugins/advanced.php: sorting plugin categories before
+ display
+
+ * languages/en.php, mod/groups/manifest.xml, mod/likes/manifest.xml,
+ mod/oauth_api/manifest.xml, mod/twitter_api/manifest.xml,
+ mod/zaudio/manifest.xml: Refs #2104 more category work for bundled plugins
+
+ * engine/lib/database.php: made database query logging explicitly set to
+ NOTICE level
+
+2011-05-13 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/lib/blog.php: Fixes #3439 forcing months to have leading zero
+
+2011-05-11 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * version.php: Version bump
+
+2011-05-09 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * js/lib/userpicker.js: Pulled in Jeff's patch to fix the user picker.
+
+ * engine/classes/ElggPluginPackage.php: Fixes 3426. Not using a horrible
+ variable name and fixing the bug created by it.
+
+2011-05-06 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/deprecated-1.8.php: Fixed wrapper for annotation calculations.
+
+2011-04-29 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php, views/default/css/admin.php,
+ views/default/widgets/admin_welcome/content.php: Made admin welcome widget a
+ bit more semantic
+
+ * upgrade.php: comment typo
+
+ * engine/.htaccess: Bah, can't do that
+
+ * engine/.htaccess: Deny all HTTP access to the engine directory
+
+2011-04-28 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/twitter/views/default/twitter/css.php: hacking the 1.7 css for current
+ twitter widget so it looks decent for screenshots
+
+ * mod/embed/start.php: Refs #3358 fixed another instance where link_class
+ should be used now due to changes in menu code
+
+2011-04-28 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * js/lib/security.js, js/lib/ui.js: Fixes #3408. During token refresh, only
+ touching hrefs that contain __elgg_ts and __elgg_token to avoid changing
+ selector-only hrefs since fragment-only hrefs are normalized by the browser.
+ Not sure how this didn't show up until now.
+
+2011-04-28 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php, views/default/widgets/admin_welcome/content.php: Trying
+ to increase probability that people will read the welcome widget by making
+ the text shorter
+
+ * languages/en.php, views/default/css/admin.php,
+ views/default/forms/profile/fields/reset.php: Refs #3236 updated the button
+ css so that disable plugin button looks like a button
+
+ * mod/messages/manifest.xml: activate messages plugin on install
+
+ * views/default/css/admin.php, .../object/plugin/elements/dependencies.php:
+ Refs #3236 removed elgg-states-* from admin css since it was overaggressive
+
+ * views/default/css/admin.php: Refs #3236 cleaned up the widget css in admin
+ area
+
+2011-04-28 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/tinymce/start.php: Refs #3358. Missed Tinymce's use of class for its
+ menu.
+
+ * views/default/css/admin.php: Fixes #3326. Added CSS for inputs in admin
+ area. No more tiny text fields!
+
+ * mod/messageboard/views/default/messageboard/js.php: Fixed a problem with
+ the ajax for deleting message board posts.
+
+ * engine/lib/actions.php: Removed unneeded else.
+
+ * engine/lib/actions.php: Fixes #3127. Normalizing the json returned by the
+ ajax action handler. Doing this in PHP.
+
+2011-04-27 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css/admin.php: Added very basic CSS for elgg-markdown in
+ admin area.
+
+ * engine/lib/admin.php: Fixed possible WSOD for plugin text file page
+ handler.
+
+ * mod/search/README.txt: Fixed typo in search's readme.
+
+ * vendors/markdown/UPSTREAM_WARNING, vendors/markdown/markdown.php: Updated
+ markdown to add support for === instead of just ### for headers. Added
+ upstream warning.
+
+ * mod/search/README.txt: Updated search's readme to markdown.
+
+ * mod/logrotate/languages/en.php, mod/logrotate/start.php,
+ .../views/default/settings/logrotate/edit.php: Fixes #3253. Merged in
+ Shashank's patch.
+
+ * engine/lib/plugins.php: Removed stray test code.
+
+ * engine/lib/plugins.php, views/default/admin/plugins/advanced.php: Refs
+ #3362. Removed use of $show_bad in elgg_get_plugins().
+
+ * actions/admin/plugins/activate.php,
+ actions/admin/plugins/activate_all.php, actions/admin/plugins/deactivate.php,
+ actions/admin/plugins/deactivate_all.php,
+ actions/admin/plugins/set_priority.php,
+ actions/admin/plugins/simple_update_states.php,
+ actions/plugins/settings/save.php, actions/plugins/usersettings/save.php,
+ engine/classes/ElggPlugin.php, engine/classes/ElggPluginPackage.php,
+ engine/lib/admin.php, engine/lib/deprecated-1.8.php, engine/lib/plugins.php,
+ install/ElggInstaller.php, views/default/admin/plugin_settings.php,
+ views/default/admin/plugins/advanced.php,
+ views/default/core/settings/tools.php,
+ .../forms/admin/plugins/simple_update_states.php,
+ views/default/object/plugin/advanced.php,
+ .../object/plugin/elements/dependencies.php,
+ views/default/object/plugin/simple.php: Refs #3362. Plugins don't check deps
+ upon boot. Made package and manifest private properties of ElggPlugin and
+ added ->getPackage() and ->getManifest().
+
+2011-04-26 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css/elements/icons.php: Fixes #3380: .elgg-icon-user states
+ are now consistent with other elgg-icons
+
+ * views/default/css/elements/core.php,
+ views/default/css/elements/navigation.php: Fixes #3388: .elgg-icon is now
+ middle-aligned by default
+
+ * views/default/page/components/gallery.php: Fixes #3290: Fluid gallery w/o
+ tables -- working great for fixed-width content
+
+ * views/default/css/elements/typography.php: Fixes #3389: Sandbox base
+ styles for dl, dt, dd
+
+ * engine/lib/input.php, views/default/input/autocomplete.php: Fixes #2922:
+ pg/livesearch now works with "term" parameter
+
+ * engine/lib/elgglib.php: Fixes some coding standard issues in elgglib.php
+
+2011-04-25 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/messages/readme.txt: Removed inaccurate readme.txt file.
+
+ * engine/classes/ElggPlugin.php, engine/classes/ElggPluginPackage.php,
+ engine/lib/admin.php, engine/lib/plugins.php, languages/en.php,
+ vendors/markdown/License.text, vendors/markdown/PHP Markdown Extra
+ Readme.text, vendors/markdown/markdown.php,
+ views/default/object/plugin/advanced.php,
+ views/default/object/plugin/simple.php: Fixes #2899, #2870. Added README.txt,
+ CHANGES.txt, COPYRIGHT.txt, LICENSE.txt, and INSTALL.txt as markdown files
+ for plugins. Added page handler to parse and serve them. Added links in
+ plugin admin. Refs #3236. Problems with displaying parsed markdown because of
+ missing parts of the admin theme's CSS.
+
+ * engine/classes/ElggPlugin.php: Renamed ElggPlugin->canIncludeFile() to
+ ->canReadFile() and am using is_readable() instead of file_exists().
+
+2011-04-24 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css/elements/forms.php: Fixes #2196. Pulled in Francisco's
+ patch for datepicker CSS.
+
+2011-04-23 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/developers/languages/en.php, mod/developers/start.php,
+ .../views/default/page/theme_preview.php,
+ .../views/default/theme_preview/buttons.php,
+ .../views/default/theme_preview/components.php,
+ .../theme_preview/components/image_block.php,
+ .../default/theme_preview/components/list.php,
+ .../default/theme_preview/components/messages.php,
+ .../default/theme_preview/components/table.php,
+ .../views/default/theme_preview/forms.php,
+ .../views/default/theme_preview/general.php,
+ .../views/default/theme_preview/grid.php,
+ .../views/default/theme_preview/icons.php,
+ .../views/default/theme_preview/icons/avatars.php,
+ .../views/default/theme_preview/icons/loader.php,
+ .../views/default/theme_preview/icons/sprites.php,
+ .../views/default/theme_preview/modules.php,
+ .../default/theme_preview/modules/modules.php,
+ .../default/theme_preview/modules/widgets.php,
+ .../views/default/theme_preview/navigation.php,
+ .../theme_preview/navigation/breadcrumbs.php,
+ .../default/theme_preview/navigation/default.php,
+ .../default/theme_preview/navigation/extras.php,
+ .../default/theme_preview/navigation/filter.php,
+ .../theme_preview/navigation/horizontal.php,
+ .../theme_preview/navigation/owner_block.php,
+ .../default/theme_preview/navigation/page.php,
+ .../theme_preview/navigation/pagination.php,
+ .../default/theme_preview/navigation/site.php,
+ .../default/theme_preview/navigation/tabs.php,
+ .../views/default/theme_preview/objects.php,
+ .../views/default/theme_preview/typography.php,
+ .../default/theme_preview/typography/headings.php,
+ .../default/theme_preview/typography/misc.php,
+ .../default/theme_preview/typography/paragraph.php,
+ .../views/default/theme_preview/widgets.php: Fixes #3042: Theme preview navs
+ now match css/elements/*. Also did a major cleanup of the presentation.
+
+2011-04-22 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/forms/developers/settings.php: Fixes #3374: echo
+ developers settings explanation
+
+ * views/default/navigation/menu/elements/item.php: Fixes #3282: Added a
+ class to menu items which includes menu item name (just like ul contains a
+ class with the menu name)
+
+2011-04-22 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/views.php: Fixed rewriting for internalid and internalname to
+ not cause false deprecation notices if passed among views.
+
+ * views/default/forms/profile/fields/add.php: Fixed deprecated call to
+ input/pulldown.
+
+ * engine/lib/elgglib.php: Added 3rd param to elgg_deprecated_notice() to
+ control how much of the stack to show.
+
+ * engine/lib/statistics.php: Fixes some deprecated notices in admin online
+ user widget.
+
+ * engine/lib/views.php: Fixed erroneous notices about full_view when passing
+ $vars directly to another view within a view.
+
+2011-04-21 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php, engine/lib/metastrings.php: Refs #3195.
+ Selectively joining certain tables for performance with annotation
+ calculations.
+
+ * engine/lib/annotations.php, engine/lib/metastrings.php: Reverting the
+ annotation changes because they're not ready yet.
+
+ * engine/lib/annotations.php, engine/lib/elgglib.php,
+ engine/lib/metastrings.php, engine/tests/api/metastrings.php: Fixed a problem
+ with the annotation batch operation test.
+
+ * engine/tests/api/plugins.php,
+ engine/tests/test_files/plugin_18/manifest.xml: Fixes #3310. Removed old
+ on_activate unit tests.
+
+2011-04-20 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/bookmarks/views/default/object/bookmarks.php: Fixes #3369: Bookmarks
+ now have rel=nofollow
+
+2011-04-20 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/actions/groups/featured.php, mod/groups/languages/en.php,
+ mod/groups/start.php: Fixes #3364: Added action tokens and fixed guids for
+ featuring/unfeaturing groups. Cleaned up language for result messages.
+
+2011-04-18 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggMenuItem.php, engine/lib/navigation.php,
+ views/default/page/layouts/content/header.php: Fixes #3358. Renamed menu's
+ class to link_class and documented possible problems with passing <a> tags in
+ the text option.
+
+ * engine/lib/database.php, engine/lib/entities.php,
+ engine/lib/metastrings.php, engine/lib/river.php: Fixes #2046. Applied Franz'
+ patch for sanitize_int().
+
+ * engine/lib/cache.php: Fixes #3365. Pulled in blacktooth's patch.
+
+2011-04-16 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggPlugin.php, engine/classes/ElggPluginManifest.php,
+ engine/classes/ElggPluginManifestParser18.php, languages/en.php,
+ mod/blog/manifest.xml, mod/blog/start.php, mod/categories/manifest.xml,
+ mod/categories/start.php: Fixes #3310. Applied lie2815's patch to use
+ activate.php and deactivate.php instead of manifest on_de/activate fields in
+ plugins.
+
+2011-04-16 Brett Profitt <brett.profitt@gmail.com>
+
+ * engine/lib/metastrings.php, engine/tests/api/entity_getter_functions.php:
+ Removed debug calls.
+
+ * .gitignore, engine/classes/ElggFile.php, engine/lib/annotations.php,
+ engine/lib/metadata.php, engine/lib/metastrings.php,
+ engine/tests/api/entity_getter_functions.php, engine/tests/suite.php:
+ Denormalizing annotation names for calculation functions.
+
+2011-04-14 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/deprecated-1.8.php: Fixed problem with
+ list_entities_from_metadata() wrapper.
+
+ * engine/lib/annotations.php, engine/lib/deprecated-1.8.php,
+ engine/lib/metastrings.php: Refs #3195. Changed the way annotation
+ calculations are performed. Seems to be working better, but will want to test
+ more before closing.
+
+ * engine/classes/ElggMenuItem.php: Refs #3023. Exposed item_class option in
+ the menu item factory. Should we change 'class' to 'link_class' to avoid
+ confusion?
+
+2011-04-14 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, engine/tests/api/helpers.php: fixed filtering of
+ external files array and suppressed warning in external files unit test
+
+2011-04-14 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css/elements/core.php: Fixes #2972: Following elements have
+ default clearfix: elgg-inner elgg-page-header elgg-page-footer elgg-foot
+ elgg-head elgg-col elgg-image-block
+
+ * views/default/page/admin.php, views/default/page/default.php,
+ views/default/page/elements/foot.php, views/default/page/walled_garden.php:
+ Fixes #3329: Added page/elements/foot and refactored page shells to use it
+
+2011-04-14 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/actions.php: Fixes #3268 forwarding to referrer (fixed by
+ ashwanthkumar)
+
+ * engine/lib/metastrings.php: handles empty array in get_metastring_id()
+ (hellekin)
+
+ * engine/lib/sessions.php: preventing warnings with the user password
+ authorization pam (hellekin)
+
+ * engine/classes/ElggEntity.php: fixes warnings in ElggEntity::getMetadata()
+ (hellekin)
+
+ * engine/classes/ElggEntity.php: making sure ElggEntity::getAnnotations()
+ returns an array, check if temporary annotation exists before returning, and
+ added a warning about annotating unsaved entities
+
+ * engine/tests/services/api.php: suppressing warnings in web services unit
+ tests (hellekin)
+
+ * engine/classes/ElggPAM.php: checking that PAM handlers have been
+ registered for the policy being tested (hellekin)
+
+ * engine/classes/ElggUser.php: Checking that get_user_by_username() returned
+ something in ElggUser constructor to prevent notice (hellekin)
+
+2011-04-13 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/handlers/cache_handler.php, engine/lib/cache.php,
+ engine/lib/elgglib.php: Fixes #3331. Changed cache schema to allow for JS/CSS
+ views with slashes and dots.
+
+ * engine/lib/elgglib.php: Consolidated the css and js pagehandlers with
+ elgg_cachable_view_pagehandler() and fixed for URLs with multiple dots after
+ the last / (like /js/calendars/fullcalendar.min.123456789.js)
+
+2011-04-12 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Fixes #3347 fixes comment typo for ege
+
+2011-04-12 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/js/initialize_elgg.php: Fixing JS problems when simple cache
+ is disabled.
+
+2011-04-11 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/output.php: Fixes #3327 fixed typo
+
+ * views/default/css/elgg.php: Fixes #3333 removed include of chrome css
+
+ * views/default/css/admin.php: Fixes #3325 added cursor: pointer to system
+ messages in admin area
+
+ * mod/file/start.php: Fixes #3322 file link removed from owner_block if
+ disabled for a group
+
+2011-04-10 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/start.php, views/default/page/elements/head.php: Fixed #3313:
+ Removed the superfluous html_head/extend view from core. Anyone following
+ trunk should extend page/elements/head instead
+
+ * js/lib/languages.js: Fixes #3182: No attempt to go through simplecache at
+ all, but any language can be exported to js now without any extra effort on
+ the part of language pack authors
+
+ * js/lib/elgglib.js, js/lib/languages.js, views/default/js/elgg.php,
+ views/default/js/initialize_elgg.php: Refs #3182: Feeding language loading
+ through /ajax/view to keep thing simpler for now. Reorganized boot process
+ so that we can ajax load the languages asap
+
+ * views/default/css/elements/buttons.php,
+ views/default/css/elements/components.php,
+ views/default/css/elements/core.php, views/default/css/elements/grid.php,
+ views/default/css/elements/helpers.php, views/default/css/elements/icons.php,
+ views/default/css/elements/layout.php,
+ views/default/css/elements/navigation.php, views/default/css/elgg.php: Refs
+ #3281: css/elements/core.php for the cross-browser/hacky/non-trivial things
+ that themes should rarely, if ever, override.
+
+2011-04-09 Brett Profitt <brett.profitt@gmail.com>
+
+ * engine/lib/annotations.php, engine/lib/metastrings.php: Running
+ egef_annotation_calculation() through elgg_get_annotations() instead of
+ elgg_get_entities().
+
+2011-04-09 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * ....8_svn-admins_like_widgets-7f19d2783c1680d3.php: Reopens #3224 not as
+ clever as I thought - user experiences error before seeing reminder
+
+ * mod/bookmarks/languages/en.php, mod/bookmarks/start.php: registered
+ bookmarks widget
+
+ * views/default/css/admin.php: fixed delete icon in admin css
+
+ * actions/widgets/upgrade.php,
+ ...svn-update_default_widgets-7daf5a459720d06d.php, engine/lib/widgets.php,
+ languages/en.php, views/default/admin/appearance/default_widgets.php: Fixes
+ #3193 moves default widgets upgrade to an action
+
+ * engine/lib/upgrades/2011010101.php,
+ ....8_svn-admins_like_widgets-7f19d2783c1680d3.php: Fixes #3224 Fixes #3241
+ stopping upgrade after plugin upgrade and restarting
+
+2011-04-09 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/tests/api/entity_getter_functions.php: Fixes #2600. Applied
+ Hellekin's patch. Props to him for understanding what was going on because
+ whoa.
+
+ * mod/twitter_api/lib/twitter_api.php: Removing odd ? after docblock in
+ twitter_api.
+
+2011-04-09 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/upgrade.php: Refs #3241 sorting upgrades so that upgrades from
+ old upgrade system are ordered in datalist array
+
+ * ..._svn-goodbye_walled_garden-083121a656d06894.php: Refs #3241 deleting
+ old config value in registration upgrade
+
+ * engine/lib/upgrade.php, engine/lib/upgrades/2010050701.php,
+ ..._svn-goodbye_walled_garden-083121a656d06894.php: Refs #3241 cleaned up
+ upgrade sequence so that we don't need special catch for that one upgrade
+ created during 1.7 development. It doesn't hurt running it twice so sites
+ currently using svn trunk will not be negatively affected.
+
+ * engine/lib/upgrades/2010123101.php, engine/lib/upgrades/2011010401.php:
+ Refs #3241 moved the default site access check upgrade script to before the
+ plugin upgrade so plugin upgrade is last upgrade in old upgrade system. The
+ site access script can be run multiple times without causing problems.
+
+ * engine/lib/deprecated-1.8.php, engine/lib/upgrade.php,
+ engine/lib/version.php, engine/start.php, install/ElggInstaller.php: Refs
+ #3241 upgrade.php is a much better name for the upgrade library
+
+ * engine/lib/upgrades/2008100701.php, engine/lib/upgrades/2009022701.php,
+ engine/lib/upgrades/2009041701.php, engine/lib/upgrades/2009070101.php,
+ engine/lib/upgrades/2009102801.php, engine/lib/upgrades/2010033101.php,
+ engine/lib/upgrades/2010040201.php, engine/lib/upgrades/2010061501.php: Refs
+ #3241 cleaned up comments on upgrades and removed the turning off of time
+ limit in individual upgrades since this is now handled by the upgrade
+ function
+
+ * ...11031400-1.8_svn-oauth_api-8f33ee79c3e66222.php: Refs #3241 we never
+ distributed an oauth_lib plugin so we don't need an upgrade (those following
+ svn trunk have already upgraded or can manually update this)
+
+ * engine/lib/upgrades/2010100500.php: Refs #3241 we never distributed a
+ plugin called oauth and Justin Richer has so let's not disable his plugin
+
+ * ....8_svn-admins_like_widgets-7f19d2783c1680d3.php: added a comment to
+ explain why the call to elgg_add_admin_widgets() in the upgrade script has
+ parameters like it does
+
+2011-04-09 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css/elements/chrome.php,
+ views/default/css/elements/components.php,
+ views/default/css/elements/helpers.php,
+ views/default/css/elements/typography.php, views/default/css/elgg.php: Refs
+ #3286: Removed css/elements/chrome.php, putting all the style rules into
+ sensible locations
+
+2011-04-08 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page/elements/sidebar_alt.php,
+ views/default/page/layouts/two_sidebar.php: Fixes #3319 alternate sidebar
+ should work now
+
+ * _graphics/admin_sprites.png, views/default/css/admin.php: Refs #3108
+ forgot the user hover menu for the admin area
+
+ * engine/lib/upgrades/2010121401.php: Fixes #3320 no longer require the
+ upgrade to disable the members plugin
+
+2011-04-07 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/metastrings.php: Fixes #3232 removed unnecessary distinct plus
+ variable in select for metastrings calculation
+
+2011-04-07 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * js/lib/ui.js: Refs #3278. No more likes in login popup handler.
+
+2011-04-07 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/admin_sprites.png, .../admin/appearance/profile_fields/list.php,
+ views/default/css/admin.php: Fixes #3108 added admin sprites (enough for beta
+ release)
+
+2011-04-07 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * js/lib/ui.js: Fixes #3278 Login popup aligned to right side of button.
+
+2011-04-07 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/SPRITES_LICENSE.TXT, _graphics/elgg_sprites.png,
+ mod/messages/views/default/messages/css.php,
+ mod/search/views/default/search/css.php,
+ views/default/css/elements/icons.php: Refs #3108 added more sprites and a
+ license file - no visible changes
+
+2011-04-06 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/elgg_sprites.png, engine/lib/views.php, mod/bookmarks/start.php,
+ mod/bookmarks/views/default/object/bookmarks.php, mod/messages/start.php,
+ views/default/css/elements/helpers.php, views/default/css/elements/icons.php,
+ views/default/river/relationship/friend/create.php: Refs #3108 frontend
+ should be done and ready for review - admin area is next
+
+ * engine/lib/deprecated-1.7.php, engine/lib/objects.php,
+ engine/lib/users.php: moved two more deprecated functions out of the main
+ libs
+
+2011-04-05 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css/admin.php, views/default/css/elements/buttons.php: Fixes
+ #3289 added inline-block to buttons
+
+ * mod/groups/languages/en.php, mod/groups/start.php,
+ .../river/object/groupforumtopic/create.php,
+ views/default/css/elements/components.php,
+ views/default/river/elements/footer.php: Fixes #3275 forms in a river item
+ are not forced to be hidden
+
+2011-04-04 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/favicon.ico, mod/reportedcontent/graphics/icon_reportthis.gif:
+ Refs #3307 removed executable prop from core files
+
+ * engine/lib/navigation.php, languages/en.php, mod/likes/start.php,
+ views/default/css/elements/navigation.php,
+ views/default/river/elements/body.php,
+ views/default/river/elements/controls.php, views/default/river/item.php: Refs
+ #3073 first version of horizontal river menu. css still needs work for likes
+ and the comment text bubble needs to be darkened
+
+ * mod/externalpages/start.php, mod/reportedcontent/start.php,
+ views/default/css/elements/navigation.php: Fixes #3305 switched default and
+ alt sections for footer menu
+
+ * _graphics/elgg_sprites.png, engine/lib/users.php,
+ .../admin/appearance/profile_fields/list.php,
+ views/default/css/elements/chrome.php, views/default/css/elements/icons.php,
+ views/default/css/elements/modules.php,
+ views/default/css/elements/navigation.php,
+ views/default/object/widget/elements/controls.php: Refs #3108 fixed widgets
+ for main site (not admin) and tweaked topbar
+
+2011-04-03 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/file/pages/file/world.php: removed unnecessary context setting
+
+ * .../views/default/groups/group_sort_menu.php: Fixes #3105 group sort menu
+ uses filter menu
+
+ * engine/lib/navigation.php, languages/en.php: better title attributes for
+ entity menu edit/delete links
+
+ * views/default/output/confirmlink.php: output/confirmlink now supports
+ title attribute
+
+ * views/default/output/access.php: cleaned up css for output/access
+
+ * mod/blog/start.php: Refs #3184 added span so that blog post status would
+ be vertically aligned
+
+ * _graphics/elgg_sprites.png, engine/lib/users.php,
+ views/default/css/elements/icons.php,
+ views/default/css/elements/navigation.php: Refs #3108 partial implementation
+ of new sprites (widgets, hover menu, search are all broken)
+
+ * mod/likes/languages/en.php, mod/likes/views/default/likes/display.php:
+ cleans up likes display which was causing issues in entity menu - less markup
+
+
+ * views/default/css/elements/navigation.php: Refs #3184 needed to set height
+ for the icons
+
+ * views/default/css/elements/navigation.php: Fixes #3184 fixed alignment
+ issues for entity menu
+
+ * views/default/css/elements/navigation.php: added spaces to standardize the
+ css statements
+
+2011-04-02 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/search/pages/search/index.php,
+ mod/search/views/default/search/search_box.php: Refs #3179 pulled fix for
+ search query encoding into trunk from 1.7 branch
+
+ * engine/lib/elgglib.php: Refs #3149 reimplemented fix for calling a handler
+ more than once in trunk
+
+ * .../views/default/uservalidationbyemail/js.php: Refs #3001 made comment
+ change in trunk from 1.7 fix
+
+ * mod/search/search_hooks.php: Refs #2994 added group search fix from 1.7
+ branch to trunk
+
+ * engine/classes/ElggRelationship.php: Refs #2988 corrected typo in trunk
+
+ * mod/invitefriends/start.php: Refs #2968 invite friends link should not be
+ available for non-logged in users
+
+ * engine/lib/extender.php: Refs #2878 fixes detect_extender_valuetype() in
+ trunk
+
+ * documentation/examples/crontab.example: updated crontab example
+ documentation
+
+ * engine/lib/entities.php: Refs #3277 merged fix for recursive delete and
+ disabled entities into trunk
+
+ * mod/groups/start.php, mod/groups/views/default/groups/side_menu.php: Fixes
+ #3104 updated groups plugin to use new menu system for sidebar
+
+ * mod/groups/lib/groups.php,
+ mod/groups/views/default/groups/profile/layout.php: moved group profile
+ layout out of page handler so that plugins can override it
+
+ * engine/classes/ElggEntity.php, engine/lib/entities.php,
+ mod/blog/actions/blog/save.php: Fixes #3208 setting time_created on update
+
+ * actions/admin/plugins/activate.php: Refs #3229 at least we can forward so
+ that user sees error message immediately
+
+ * actions/register.php, views/default/forms/register.php: Refs #3233
+ registration form should be sticky too
+
+ * actions/useradd.php, views/default/forms/useradd.php: Fixes #3233 useradd
+ form is now sticky
+
+ * engine/classes/ElggPluginManifest.php: Fixes #3244 fixed variable name in
+ ElggPluginManifest
+
+ * .../views/default/theme_preview/widgets.php: fixed typo in theme preview -
+ widgets
+
+2011-04-01 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * js/lib/hooks.js: Returning false in JS hooks is now sent through to the
+ calling trigger. Null still returns the original value.
+
+ * js/lib/elgglib.js, js/lib/ui.js: Refs #3098. Changed elgg.getUrlFragment
+ to elgg.getSelectorFromUrlFragment to allow for better selectors.
+
+2011-04-01 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php, languages/en.php, mod/members/languages/en.php,
+ mod/members/manifest.xml, mod/members/pages/members/index.php,
+ mod/members/pages/members/search.php, mod/members/start.php,
+ mod/members/views/default/members/nav.php,
+ mod/members/views/default/members/sidebar.php, pages/members/index.php,
+ pages/members/search.php, views/default/core/members/nav.php,
+ views/default/core/members/sidebar.php: Fixes #3231 welcome back, members
+ plugin
+
+ * engine/classes/ElggMenuItem.php: Refs #3287 setting null for menu href
+ means you want an empty <a></a> tag with no href
+
+ * engine/classes/ElggMenuItem.php, engine/lib/navigation.php: Fixes #3287
+ added documentation on non-link menu items
+
+ * engine/lib/metastrings.php: Refs #3245 pulling in
+ https://github.com/Elgg/Elgg/pull/11 and thanks also to gprasanth
+
+ * views/default/user/default.php: fixed hardcoded string in user/default
+ view
+
+ * mod/thewire/views/default/object/thewire.php: Refs #3200 any time a wire
+ post is displayed, we may need the 'previous' javascript
+
+ * mod/thewire/languages/en.php: added notification messages to the wire
+
+ * mod/bookmarks/start.php: Fixes #3044 removed bookmark link from user hover
+ menu
+
+ * engine/lib/users.php, views/default/forms/user/passwordreset.php: Fixes
+ #3207 passing code variable to form for password reset
+
+2011-03-31 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * htaccess_dist: Refs #2940 added php settings comments into trunk
+
+2011-03-30 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/actions.php: Fixed ajax status for elgg.action().
+
+2011-03-30 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/thewire/js/thewire.js, mod/thewire/languages/en.php,
+ mod/thewire/start.php, mod/thewire/views/default/js/thewire.php,
+ mod/thewire/views/default/object/thewire.php,
+ mod/thewire/views/default/thewire/css.php,
+ mod/thewire/views/default/thewire/previous.php: Fixes #3200 ajax-based view
+ previous link works for the wire
+
+ * mod/thewire/pages/thewire/previous.php: Refs #3200 pulling in
+ e1d75071737b2ed35cf9 from anirupdutta's pull request
+
+2011-03-29 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, js/lib/ajax.js: Fixed auto-display of system
+ errors in ajax actions. Fixed docs for system_messages(). Blech...that needs
+ cleaned up.
+
+2011-03-29 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/user_settings.php, mod/notifications/groups.php,
+ mod/notifications/index.php, .../forms/notificationsettings/groupsave.php,
+ .../notifications/subscriptions/forminternals.php: Fixes #3266 let the
+ settings pages have breadcrumbs
+
+ * views/default/page/layouts/content.php,
+ views/default/page/layouts/one_sidebar.php: one_sidebar layout wants
+ breadcrumbs, too!
+
+ * views/default/css/elements/chrome.php: fixed some typos in css chrome
+
+2011-03-29 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * js/lib/ui.js: Fixes #3234: Adding explicit collision param for popups.
+
+2011-03-29 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/languages/en.php, mod/groups/lib/groups.php,
+ mod/groups/start.php, mod/groups/views/default/groups/sidebar/find.php: Fixes
+ #3243 pulled in anirupdutta's patch with some modifications (moved tag search
+ to its own page handler function)
+
+2011-03-28 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/search/views/default/search/css.php: made search box span sidebar in
+ default theme
+
+2011-03-28 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/start.php: Fixing css/elgg instead of css/screen.
+
+2011-03-27 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/database.php, languages/en.php: Fixes #2591 removing newlines
+ in queries - thanks to Tachyon
+
+ * engine/lib/views.php: Refs #3085 updated elgg_view_annotation() to use
+ $vars array
+
+ * engine/lib/views.php: Refs #3085 added $vars array to
+ elgg_view_river_item()
+
+ * engine/lib/users.php, engine/lib/views.php,
+ mod/blog/views/default/object/blog.php,
+ mod/bookmarks/views/default/object/bookmarks.php,
+ .../default/file/specialcontent/image/default.php,
+ mod/file/views/default/object/file.php, mod/groups/lib/groups.php,
+ mod/groups/views/default/group/default.php,
+ .../views/default/object/groupforumtopic.php,
+ .../views/default/annotation/messageboard.php,
+ mod/messages/views/default/object/messages.php,
+ mod/pages/pages/pages/revision.php,
+ mod/pages/views/default/object/page_top.php,
+ mod/thewire/views/default/object/thewire.php,
+ views/default/annotation/generic_comment.php,
+ views/default/object/plugin.php, views/default/page/components/gallery.php,
+ views/default/page/components/list.php, views/json/entities/entity_list.php:
+ Fixes #3086 using full_view instead of full
+
+ * engine/lib/views.php: Refs #3086 adds backward compatibility code in
+ elgg_view() for full_view vs full
+
+ * mod/blog/views/default/blog/sidebar.php: Fixes #2969 turned off group blog
+ archives
+
+2011-03-26 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/admin.php, engine/lib/configuration.php,
+ mod/diagnostics/start.php, mod/profile/start.php: Fixes #3250
+ elgg_get_root_path() to be consistent
+
+ * actions/plugins/settings/save.php, actions/plugins/usersettings/save.php,
+ engine/lib/actions.php: Fixes #3249 fixed name of actions exists function
+
+ * mod/messages/languages/en.php,
+ .../views/default/forms/messages/process.php,
+ mod/messages/views/default/messages/css.php: forcing a min-height on inbox
+ list in messages plugin
+
+ * views/default/css/admin.php, views/default/css/elements/layout.php: Fixes
+ #3084 added clearfix to elgg-layout
+
+ * views/default/css/elements/chrome.php: Fixes #3183 limiting size of user
+ inserted images in content
+
+ * mod/externalpages/languages/en.php, mod/externalpages/start.php,
+ .../views/default/admin/appearance/expages.php,
+ .../views/default/admin/site/expages.php,
+ mod/externalpages/views/default/expages/menu.php: Fixes #3106 putting
+ external pages under appearance - no better place
+
+ * engine/classes/ElggMenuBuilder.php, engine/lib/navigation.php,
+ engine/lib/views.php: Fixes #3026 documentation for menu system
+
+ * engine/lib/admin.php: Fixes #2233 added documentation on admin menus and
+ pages
+
+ * engine/lib/deprecated-1.8.php: Refs #3248 deprecates remove_submenu_item()
+
+
+ * engine/classes/ElggAnnotation.php, engine/classes/ElggMetadata.php,
+ engine/lib/annotations.php: Refs #3238 #3246 anootations needed the same
+ fixes as metadata
+
+ * engine/lib/metadata.php: Refs #3238 fix for updating name of metadata for
+ trunk
+
+ * engine/classes/ElggMetadata.php: Fixes #3246 fixed ElggMetadata()
+ constructor
+
+ * engine/lib/pageowner.php: fixed notice in get_context() when no context is
+ set
+
+ * engine/lib/output.php, engine/lib/users.php, engine/lib/views.php,
+ engine/lib/widgets.php: some light standardization of the core libraries
+
+2011-03-26 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * js/lib/ui.js: Fixes #3234, refs #3094. Added the inTarget code back to the
+ popup closing function.
+
+2011-03-26 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/thewire/actions/add.php, mod/thewire/actions/delete.php,
+ mod/thewire/classes/ElggWire.php, mod/thewire/languages/en.php,
+ mod/thewire/pages/thewire/everyone.php,
+ mod/thewire/pages/thewire/friends.php, mod/thewire/pages/thewire/owner.php,
+ mod/thewire/pages/thewire/reply.php, mod/thewire/pages/thewire/thread.php,
+ mod/thewire/start.php, mod/thewire/tests/regex.php,
+ mod/thewire/views/default/object/thewire.php,
+ .../views/default/thewire/profile_status.php,
+ mod/thewire/views/rss/object/thewire.php: standardized thewire plugin
+
+ * engine/lib/annotations.php, engine/lib/metadata.php,
+ engine/tests/api/annotations.php, engine/tests/api/metadata.php,
+ engine/tests/objects/metadata.php: Closes #3202 'count' already supported,
+ added unit tests
+
+ * mod/bookmarks/lib/bookmarks.php,
+ .../views/default/forms/bookmarks/save.php, mod/file/lib/file.php,
+ mod/groups/lib/discussion.php, mod/pages/lib/pages.php: Fixes #3239 entities
+ aren't blown away in form prepare functions any more
+
+ * mod/pages/languages/en.php: fixed language strings in pages plugin
+
+ * mod/file/actions/file/upload.php: don't allow a user to remove a title on
+ a file, must replace with another title
+
+ * engine/lib/input.php, mod/blog/lib/blog.php: Refs #3239 added a new sticky
+ forms function to grab all variables and integrated into blog plugin
+
+2011-03-25 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css/admin.php, views/default/css/elements/reset.php: Refs
+ #2979 forces vertical scrollbar without breaking widget dragging
+
+ * engine/lib/navigation.php: Refs #3119 if only one item left, move it off
+ more menu (but only when nothing selected)
+
+ * actions/admin/menu/save.php, views/default/forms/admin/menu/save.php:
+ Fixes #3206 using space so that echo('none') is not passed as value
+
+ * views/default/css/admin.php: Refs #3236 removed some unused css from admin
+ theme and did some reorganizing
+
+2011-03-24 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/file/languages/en.php: added missing language string for comments on
+ file in river
+
+ * engine/lib/views.php: Fixes #3166 registering css/elgg for simplecache
+
+2011-03-23 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * version.php: Refs #3193 rollback version number
+
+ * upgrade.php: display_errors is on for upgrades
+
+ * ...svn-update_default_widgets-7daf5a459720d06d.php, version.php: Fixes
+ #3193 converts the default widgets for 1.8 - leaves behind the default
+ widgets object
+
+ * engine/lib/admin.php, views/default/css/admin.php: Refs #3165 floating
+ admin widgets in same direction as profile widgets
+
+ * ....8_svn-admins_like_widgets-7f19d2783c1680d3.php, version.php: Fixes
+ #3165 admins get widgets on upgrade - new upgrade creation process super
+ smooth #thanksBrett
+
+ * engine/lib/admin.php, engine/lib/users.php, install/ElggInstaller.php:
+ Refs #3165 new admin users all get admin widgets
+
+ * engine/classes/ElggFile.php: Fixes #3160 just needed a small variation off
+ of [8762] to handle getting filestore before metadata is set but after the
+ guid is set
+
+ * engine/classes/ElggFile.php: Fixes #3205 reverting [8762]
+
+ * engine/lib/elgglib.php: Fixes #3180 adds ajax page handler
+
+ * mod/bookmarks/start.php, mod/thewire/start.php: added an owner block link
+ for the wire plugin
+
+ * languages/en.php, mod/blog/languages/en.php, mod/blog/lib/blog.php,
+ mod/bookmarks/pages/bookmarks/all.php, mod/bookmarks/start.php,
+ mod/file/pages/file/owner.php, mod/groups/languages/en.php,
+ mod/pages/languages/en.php, views/default/page/layouts/content/header.php:
+ Fixes #3218 group content pages now use container method to determine who can
+ add content
+
+2011-03-22 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/pages/views/default/forms/pages/edit.php: fixed position of longtext
+ menu when editing pages
+
+ * mod/bookmarks/languages/en.php: better names for a bookmark - got rid of
+ 'bookmark item'
+
+ * mod/bookmarks/views/default/bookmarks/sidebar.php,
+ mod/file/views/default/file/sidebar.php,
+ mod/pages/views/default/pages/sidebar.php,
+ mod/thewire/pages/thewire/everyone.php, mod/thewire/pages/thewire/owner.php,
+ mod/thewire/views/default/thewire/sidebar.php: Fixes #2091 completes sidebar
+ tagcloud for major content plugins
+
+ * engine/lib/tags.php, mod/blog/views/default/blog/sidebar.php,
+ mod/blog/views/default/blog/sidebar/tagcloud.php,
+ views/default/output/tagcloud.php,
+ views/default/page/elements/tagcloud_block.php: Refs #2091 added a tagcloud
+ block that accepts subtype
+
+ * views/default/page/elements/comments_block.php: Fixes #2090 context
+ sensitive sidebar box is added - groups off
+
+ * mod/bookmarks/views/default/bookmarks/js.php,
+ mod/groups/views/default/groups/js.php,
+ mod/messageboard/views/default/messageboard/js.php,
+ mod/messages/views/default/messages/js.php,
+ .../views/default/uservalidationbyemail/js.php: Refs #3016 making the final
+ elgg.js more readable
+
+ * .../views/default/uservalidationbyemail/js.php: another example of an
+ extra ; in js due to lazy copy/paste jobs
+
+ * mod/file/pages/file/owner.php, mod/file/pages/file/world.php,
+ mod/file/views/default/file/sidebar.php, mod/pages/pages/pages/owner.php,
+ mod/pages/pages/pages/world.php, mod/pages/views/default/pages/sidebar.php,
+ views/default/page/elements/comments_block.php: Refs #2090 added sidebar
+ comment block to file and pages plugins
+
+ * mod/file/start.php, mod/pages/start.php: Refs #3176 missed group owner
+ page in script renaming
+
+2011-03-21 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/views.php, vendors/jquery/fancybox/blank.gif,
+ vendors/jquery/fancybox/fancy_close.png,
+ vendors/jquery/fancybox/fancy_loading.png,
+ vendors/jquery/fancybox/fancy_nav_left.png,
+ vendors/jquery/fancybox/fancy_nav_right.png,
+ vendors/jquery/fancybox/fancy_shadow_e.png,
+ vendors/jquery/fancybox/fancy_shadow_n.png,
+ vendors/jquery/fancybox/fancy_shadow_ne.png,
+ vendors/jquery/fancybox/fancy_shadow_nw.png,
+ vendors/jquery/fancybox/fancy_shadow_s.png,
+ vendors/jquery/fancybox/fancy_shadow_se.png,
+ vendors/jquery/fancybox/fancy_shadow_sw.png,
+ vendors/jquery/fancybox/fancy_shadow_w.png,
+ vendors/jquery/fancybox/fancy_title_left.png,
+ vendors/jquery/fancybox/fancy_title_main.png,
+ vendors/jquery/fancybox/fancy_title_over.png,
+ vendors/jquery/fancybox/fancy_title_right.png,
+ vendors/jquery/fancybox/fancybox-x.png,
+ vendors/jquery/fancybox/fancybox-y.png, vendors/jquery/fancybox/fancybox.png,
+ vendors/jquery/fancybox/jquery.easing-1.3.pack.js,
+ vendors/jquery/fancybox/jquery.fancybox-1.3.4.css,
+ vendors/jquery/fancybox/jquery.fancybox-1.3.4.js,
+ .../jquery/fancybox/jquery.fancybox-1.3.4.pack.js,
+ .../fancybox/jquery.mousewheel-3.0.4.pack.js, views/default/js/lightbox.php:
+ Refs #2882 basic lightbox
+
+2011-03-21 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/sessions.php: No need to document NULL as possible return value
+ here
+
+ * engine/classes/ElggEntity.php: oof -- how did that happen?
+
+ * engine/classes/ElggEntity.php: Added documentation of magic properties to
+ ElggEntity
+
+2011-03-21 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/logbrowser/views/default/logbrowser/table.php: using - in log browser
+ css class names
+
+ * mod/bookmarks/languages/en.php: added missing language string
+
+ * mod/bookmarks/pages/bookmarks/all.php,
+ mod/bookmarks/pages/bookmarks/owner.php,
+ mod/bookmarks/views/default/bookmarks/sidebar.php: Refs #2090 added latest
+ comments to bookmarks sidebar
+
+ * engine/lib/views.php, languages/en.php,
+ mod/blog/views/default/blog/sidebar.php,
+ views/default/page/elements/comments.php,
+ views/default/page/elements/comments_block.php: Refs #2090 removed
+ elgg_view_latest_comments() and replaced it with a page elements view
+
+ * mod/groups/lib/groups.php,
+ mod/groups/views/default/groups/profile/fields.php,
+ .../views/default/groups/profile/profile_block.php,
+ .../views/default/groups/profile/summary.php: Fixes #3113 pulled group
+ profile fields out of top profile area
+
+ * views/default/admin/appearance/profile_fields.php: Fixes #3099 corrected
+ view name
+
+ * mod/logbrowser/views/default/logbrowser/form.php: Fixes #3082 fixed
+ toggler in log browser
+
+ * views/default/navigation/menu/user_hover.php: Fixes #3203 not calling the
+ view menu section code once per item
+
+ * views/default/page/layouts/widgets.php: Fixes #3168 not displaying a
+ widget when handler is not available
+
+2011-03-20 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggObject.php, mod/blog/lib/blog.php,
+ mod/groups/actions/discussion/reply/save.php,
+ mod/groups/actions/discussion/save.php, mod/groups/languages/en.php,
+ mod/groups/lib/discussion.php, mod/groups/start.php,
+ .../river/object/groupforumtopic/create.php: Fixes #2974 using
+ canWriteToContainer() to control access to creating group content
+
+ * install/ElggInstaller.php: Fixes #3101 removed language setting from
+ installer until we provide language files besides English
+
+ * .../forms/admin/plugins/simple_update_states.php: Fixes #3102 removed
+ plugin reset button
+
+ * views/default/forms/admin/site/update_advanced.php: Fixes #3100 removed
+ viewtype from advanced settings
+
+ * install/ElggInstaller.php, install/languages/en.php: Fixes #3062 checks if
+ data directory exists
+
+2011-03-20 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * js/lib/ui.js: Fixes #3094. Removed event blocking code for popups.
+
+ * ..._svn-widgets_arent_plugins-61836261fa280a5c.php, version.php: Fixes
+ #3161. Added upgrade to update object, widget to ElggWidget.
+
+2011-03-20 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/river.php, mod/twitter/start.php: Refs #3171 Using correct
+ widget registration method
+
+2011-03-20 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/version.php: Fixes #3188. We no longer store the version as the
+ key, so a standard sort will do.
+
+2011-03-20 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/river.php, pages/river.php, views/rss/core/river/body.php,
+ views/rss/river/item.php, views/rss/river/item/list.php: Fixes #3197 fixed
+ the RSS feed for activity (river)
+
+ * views/rss/layout/objects/image_block.php,
+ views/rss/layout/objects/list.php, views/rss/layout/shells/default.php,
+ views/rss/page/components/image_block.php,
+ views/rss/page/components/list.php, views/rss/page/layouts/default.php: Refs
+ #3197 fixed layout views for RSS viewtype
+
+ * engine/lib/entities.php, engine/lib/group.php, engine/lib/sites.php,
+ engine/lib/users.php, engine/lib/views.php,
+ views/default/page/elements/sidebar.php: Fixes #3114 added the rss link back
+ to pages
+
+ * engine/lib/admin.php: Refs #2892 added elgg_get_admins() function - this
+ could eventually be a wrapper around elgg_get_users()
+
+ * mod/thewire/start.php: Fixes #3025 added back thewire's entity menu items
+
+ * engine/lib/elgglib.php: Fixes #3198 handling exceptions thrown in
+ exception handler by pointing to the error log
+
+2011-03-20 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggEntity.php: Fixes #3192, refs #650.
+ ElggEntity->getMetaData() sets the limit to 0 for array-based metadata.
+
+ * engine/lib/deprecated-1.8.php: Fixes #3190. Added elgg_count_comments() to
+ deprecated-1.8.php.
+
+ * upgrade.php: Fixes #3064. Can't use the pretty new views to display the
+ can't upgrade messages. Using the failsafe view type.
+
+2011-03-20 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * ...031300-1.8_svn-twitter_api-12b832a5a7a3e1bd.php: Refs #3188 removed
+ empty call for guid
+
+ * languages/en.php: Fixes #3162
+
+2011-03-19 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/widgets/friends/content.php,
+ views/default/widgets/new_users/content.php,
+ views/default/widgets/online_users/content.php: added documentation headers
+ to the core widgets
+
+ * engine/lib/river.php, languages/en.php,
+ views/default/widgets/river_widget/content.php,
+ views/default/widgets/river_widget/edit.php: Fixes #3171 added river widget
+ using same name as 1.7 riverdashboard plugin
+
+ * actions/friends/add.php: Fixes #3167 friending now shows up in river
+
+ * mod/twitter/manifest.xml: added "widget" to this plugin's name to
+ descrease confusion with the api plugin
+
+ * languages/en.php, mod/profile/views/default/profile/owner_block.php: Fixes
+ #3173 quote was missing from conversion to new toggler pattern
+
+ * mod/file/pages/file/index.php, mod/file/pages/file/owner.php,
+ mod/file/start.php, mod/pages/pages/pages/index.php,
+ mod/pages/pages/pages/owner.php, mod/pages/start.php,
+ mod/thewire/pages/thewire/owner.php, mod/thewire/pages/thewire/user.php,
+ mod/thewire/start.php: Fixes #3176 replaced usage of index.php where
+ appropriate
+
+ * mod/pages/edit.php, mod/pages/friends.php, mod/pages/history.php,
+ mod/pages/index.php, mod/pages/new.php, mod/pages/pages/pages/edit.php,
+ mod/pages/pages/pages/friends.php, mod/pages/pages/pages/history.php,
+ mod/pages/pages/pages/index.php, mod/pages/pages/pages/new.php,
+ mod/pages/pages/pages/revision.php, mod/pages/pages/pages/view.php,
+ mod/pages/pages/pages/world.php, mod/pages/revision.php, mod/pages/start.php,
+ mod/pages/view.php, mod/pages/world.php, mod/search/index.php,
+ mod/search/pages/search/index.php, mod/search/start.php: Fixes #3158 updated
+ search and pages plugins for page handler scripts
+
+ * mod/messages/inbox.php, mod/messages/pages/messages/inbox.php,
+ mod/messages/pages/messages/read.php, mod/messages/pages/messages/send.php,
+ mod/messages/pages/messages/sent.php, mod/messages/read.php,
+ mod/messages/send.php, mod/messages/sent.php, mod/messages/start.php: Refs
+ #3158 update messages plugin
+
+ * mod/messageboard/pages/messageboard/owner.php,
+ mod/messageboard/pages/owner.php, mod/messageboard/start.php: Refs #3158
+ Fixes #3170 namespaces messageboard plugin page scripts
+
+ * mod/file/edit.php, mod/file/friends.php, mod/file/index.php,
+ mod/file/pages/file/edit.php, mod/file/pages/file/friends.php,
+ mod/file/pages/file/index.php, mod/file/pages/file/search.php,
+ mod/file/pages/file/upload.php, mod/file/pages/file/view.php,
+ mod/file/pages/file/world.php, mod/file/search.php, mod/file/start.php,
+ mod/file/upload.php, mod/file/view.php,
+ mod/file/views/default/file/typecloud.php, mod/file/world.php: Refs #3158
+ namespace file plugin's page scripts
+
+2011-03-19 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/forms/register.php: using shorthand for document ready
+ callback
+
+2011-03-19 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/messages/start.php: Fixes #3164. Denormalized unread message counting
+ query because it was making things so slow I couldn't test.
+
+ * engine/classes/ElggFile.php: Fixes #3160. ElggFile->getFilehandler() is
+ less horrible.
+
+ * engine/lib/metastrings.php: Fixing pluralization of singular options for
+ elgg_get_metadata() and elgg_get_annotations().
+
+2011-03-18 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/bookmarks/pages/add.php, mod/bookmarks/pages/all.php,
+ mod/bookmarks/pages/bookmarklet.php, mod/bookmarks/pages/bookmarks/add.php,
+ mod/bookmarks/pages/bookmarks/all.php,
+ mod/bookmarks/pages/bookmarks/bookmarklet.php,
+ mod/bookmarks/pages/bookmarks/edit.php,
+ mod/bookmarks/pages/bookmarks/friends.php,
+ mod/bookmarks/pages/bookmarks/owner.php,
+ mod/bookmarks/pages/bookmarks/view.php, mod/bookmarks/pages/edit.php,
+ mod/bookmarks/pages/friends.php, mod/bookmarks/pages/owner.php,
+ mod/bookmarks/pages/view.php, mod/bookmarks/start.php,
+ mod/thewire/pages/everyone.php, mod/thewire/pages/friends.php,
+ mod/thewire/pages/previous.php, mod/thewire/pages/reply.php,
+ mod/thewire/pages/tag.php, mod/thewire/pages/thewire/everyone.php,
+ mod/thewire/pages/thewire/friends.php,
+ mod/thewire/pages/thewire/previous.php, mod/thewire/pages/thewire/reply.php,
+ mod/thewire/pages/thewire/tag.php, mod/thewire/pages/thewire/thread.php,
+ mod/thewire/pages/thewire/user.php, mod/thewire/pages/thread.php,
+ mod/thewire/pages/user.php, mod/thewire/start.php: Refs #3158 namespaced
+ pages for bookmarks and thewire
+
+2011-03-17 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../notifications/subscriptions/forminternals.php: Using shorthand
+ document ready initialization
+
+ * mod/embed/views/default/embed/embed.php: Switching click handler to "live"
+
+2011-03-17 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php: fixed typo in welcome widget text
+
+ * engine/lib/system_log.php: Refs #3154 adding system log cache bug fix to
+ trunk
+
+ * engine/lib/system_log.php: Fixes #3098 catching exceptions when loading an
+ object in system log
+
+2011-03-17 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * js/lib/ui.js: Fixes #3094, Refs #3111. Clicking outside a popup closes the
+ visible popups.
+
+ * views/default/css/admin.php: elgg-head is no longer the direct child of
+ elgg-state-draggable. Restoring dragger icon for plugins.
+
+ * mod/blog/languages/en.php: Added missing language string.
+
+ * install/ElggInstaller.php: Changed order of the default admin widgets.
+
+ * engine/lib/cache.php, engine/lib/configuration.php,
+ ...-1.8_svn-datalist_grows_up-0b8aec5a55cc1e1c.php, engine/schema/mysql.sql,
+ version.php: Fixes #3123. Datalists and config names can now be up to 255
+ chars long. Debug mode is disabled when caching views to avoid saving bad
+ stuff.
+
+ * mod/likes/start.php: Fixes #3153. Fixed incorrect options.
+
+ * views/default/forms/comments/add.php,
+ views/default/river/elements/body.php: Fixes #3130. Fixed river/item/footer
+ -> river/elements/footer for comments.
+
+ * mod/twitter_api/lib/twitter_api.php: Fixes #2416. Twitter API pulls in
+ avatars from twitter for new users.
+
+ * ...031300-1.8_svn-twitter_api-12b832a5a7a3e1bd.php,
+ ...11031400-1.8_svn-oauth_api-8f33ee79c3e66222.php, languages/en.php,
+ mod/oauth_api/manifest.xml, mod/twitter_api/manifest.xml: Fixes #3141.
+ Disabling twitter_api and oauth_api upon upgrade because we can't check
+ previous states. Adding an admin notice. twitter_api conflicts with
+ twitterservice and oauth_api conflicts with oauth_lib.
+
+ * views/default/object/admin_notice.php: Refs #2242: Better placement for
+ the delete button for admin notices.
+
+ * engine/lib/plugins.php: Fixed a typo that broke ignore access. That was
+ fun to track down >:O
+
+ * views/default/object/admin_notice.php: Refs #2242. Removed incorrect
+ option passed to url view.
+
+ * actions/admin/delete_admin_notice.php, engine/lib/admin.php,
+ languages/en.php, views/default/css/admin.php, views/default/js/admin.php,
+ views/default/object/admin_notice.php, views/default/page/admin.php: Fixes
+ #2242. Can now delete admin notices manually.
+
+2011-03-16 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/start.php: Fixes #3066 moves setting of lastcache value up in boot
+ sequence
+
+ * engine/classes/ElggMenuBuilder.php: Fixes #3145 adds a default for menu
+ sort_by
+
+ * index.php: Fixes #3144 not using undefined $options variable
+
+2011-03-16 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * ...031300-1.8_svn-twitter_api-12b832a5a7a3e1bd.php,
+ ...11031400-1.8_svn-oauth_api-8f33ee79c3e66222.php: Fixes #3141. Fixed
+ twitter_api and oauth_api upgrades. Only worked on localhost because of code
+ gnomes.
+
+2011-03-15 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * ...11031400-1.8_svn-oauth_api-8f33ee79c3e66222.php: Fixes #3129. Fixed
+ faulty logic that broke upgrades.
+
+2011-03-15 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Refs #2814 can now check if an entity exists
+ indepedent of access permissions
+
+2011-03-15 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * js/lib/ajax.js, js/lib/configuration.js, js/lib/security.js,
+ languages/en.php, views/default/js/elgg.php: Refs #2538. Loading
+ js/configuration.js again. Only updating tokens on success and showing a
+ basic warning if refresh fails.
+
+ * js/lib/languages.js: JS elgg.echo() returns the key if the string isn't
+ found. This is consistent with the PHP version.
+
+ * js/classes/ElggPriorityList.js, js/lib/elgglib.js, js/lib/hooks.js,
+ js/lib/languages.js, js/lib/prototypes.js, js/lib/security.js,
+ js/lib/session.js, js/lib/ui.js, js/lib/userpicker.js: Refs #2538: Added
+ documentation to most of the JS methods missing it.
+
+ * mod/oauth_api/manifest.xml, mod/oauth_api/start.php,
+ mod/oauth_api/vendors/oauth/LICENSE,
+ mod/oauth_api/vendors/oauth/example/server/INSTALL,
+ .../vendors/oauth/example/server/core/init.php,
+ .../example/server/core/templates/inc/footer.tpl,
+ .../example/server/core/templates/inc/header.tpl,
+ .../oauth/example/server/core/templates/index.tpl,
+ .../oauth/example/server/core/templates/logon.tpl,
+ .../example/server/core/templates/register.tpl,
+ .../vendors/oauth/example/server/www/hello.php,
+ .../vendors/oauth/example/server/www/index.php,
+ .../vendors/oauth/example/server/www/logon.php,
+ .../vendors/oauth/example/server/www/oauth.php,
+ .../vendors/oauth/example/server/www/register.php,
+ .../oauth/example/server/www/services.xrds.php,
+ .../vendors/oauth/library/OAuthDiscovery.php,
+ .../vendors/oauth/library/OAuthException.php,
+ .../vendors/oauth/library/OAuthRequest.php,
+ .../vendors/oauth/library/OAuthRequestLogger.php,
+ .../vendors/oauth/library/OAuthRequestSigner.php,
+ .../vendors/oauth/library/OAuthRequestVerifier.php,
+ .../vendors/oauth/library/OAuthRequester.php,
+ .../vendors/oauth/library/OAuthServer.php,
+ mod/oauth_api/vendors/oauth/library/OAuthStore.php,
+ .../library/body/OAuthBodyContentDisposition.php,
+ .../library/body/OAuthBodyMultipartFormdata.php,
+ .../vendors/oauth/library/discovery/xrds_parse.php,
+ .../vendors/oauth/library/discovery/xrds_parse.txt,
+ .../OAuthSignatureMethod.class.php, .../OAuthSignatureMethod_HMAC_SHA1.php,
+ .../signature_method/OAuthSignatureMethod_MD5.php,
+ .../OAuthSignatureMethod_PLAINTEXT.php,
+ .../OAuthSignatureMethod_RSA_SHA1.php,
+ .../library/store/OAuthStoreAbstract.class.php,
+ .../oauth/library/store/OAuthStoreAnyMeta.php,
+ .../oauth/library/store/OAuthStoreMySQL.php,
+ .../vendors/oauth/library/store/mysql/install.php,
+ .../vendors/oauth/library/store/mysql/mysql.sql,
+ .../oauth/test/discovery/xrds-fireeagle.xrds,
+ .../oauth/test/discovery/xrds-getsatisfaction.xrds,
+ .../oauth/test/discovery/xrds-magnolia.xrds,
+ mod/oauth_api/vendors/oauth/test/oauth_test.php, mod/oauth_lib/manifest.xml,
+ mod/oauth_lib/start.php, mod/oauth_lib/vendors/oauth/LICENSE,
+ mod/oauth_lib/vendors/oauth/example/server/INSTALL,
+ .../vendors/oauth/example/server/core/init.php,
+ .../example/server/core/templates/inc/footer.tpl,
+ .../example/server/core/templates/inc/header.tpl,
+ .../oauth/example/server/core/templates/index.tpl,
+ .../oauth/example/server/core/templates/logon.tpl,
+ .../example/server/core/templates/register.tpl,
+ .../vendors/oauth/example/server/www/hello.php,
+ .../vendors/oauth/example/server/www/index.php,
+ .../vendors/oauth/example/server/www/logon.php,
+ .../vendors/oauth/example/server/www/oauth.php,
+ .../vendors/oauth/example/server/www/register.php,
+ .../oauth/example/server/www/services.xrds.php,
+ .../vendors/oauth/library/OAuthDiscovery.php,
+ .../vendors/oauth/library/OAuthException.php,
+ .../vendors/oauth/library/OAuthRequest.php,
+ .../vendors/oauth/library/OAuthRequestLogger.php,
+ .../vendors/oauth/library/OAuthRequestSigner.php,
+ .../vendors/oauth/library/OAuthRequestVerifier.php,
+ .../vendors/oauth/library/OAuthRequester.php,
+ .../vendors/oauth/library/OAuthServer.php,
+ mod/oauth_lib/vendors/oauth/library/OAuthStore.php,
+ .../library/body/OAuthBodyContentDisposition.php,
+ .../library/body/OAuthBodyMultipartFormdata.php,
+ .../vendors/oauth/library/discovery/xrds_parse.php,
+ .../vendors/oauth/library/discovery/xrds_parse.txt,
+ .../OAuthSignatureMethod.class.php, .../OAuthSignatureMethod_HMAC_SHA1.php,
+ .../signature_method/OAuthSignatureMethod_MD5.php,
+ .../OAuthSignatureMethod_PLAINTEXT.php,
+ .../OAuthSignatureMethod_RSA_SHA1.php,
+ .../library/store/OAuthStoreAbstract.class.php,
+ .../oauth/library/store/OAuthStoreAnyMeta.php,
+ .../oauth/library/store/OAuthStoreMySQL.php,
+ .../vendors/oauth/library/store/mysql/install.php,
+ .../vendors/oauth/library/store/mysql/mysql.sql,
+ .../oauth/test/discovery/xrds-fireeagle.xrds,
+ .../oauth/test/discovery/xrds-getsatisfaction.xrds,
+ .../oauth/test/discovery/xrds-magnolia.xrds,
+ mod/oauth_lib/vendors/oauth/test/oauth_test.php,
+ mod/twitter_api/manifest.xml: Refs #3115. Moved oauth_lib to oauth_api.
+
+ * engine/lib/version.php: Refs #1433. Restored db_upgrade() call during
+ upgrades to fix issues for people upgrading from earlier versions of 1.7 than
+ 2010062401. This is why we should follow deprecation policies, Brett........
+
+2011-03-15 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/developers/actions/developers/settings.php,
+ mod/developers/languages/en.php, mod/developers/manifest.xml,
+ mod/developers/start.php, .../views/default/admin/developers/settings.php,
+ .../views/default/forms/developers/settings.php: Fixes #3009 a bare bones
+ developer tools settings
+
+2011-03-14 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/embed/js/embed.js, mod/embed/start.php,
+ mod/embed/views/default/embed/embed.php,
+ mod/embed/views/default/embed/js.php,
+ mod/embed/views/default/embed/lightbox_init.php,
+ mod/embed/views/default/embed/upload/content.php,
+ mod/file/views/default/file/embed_upload.php, mod/groups/start.php,
+ mod/groups/views/default/groups/js.php,
+ .../views/default/groups/profile/widgets.php, mod/messages/start.php,
+ .../views/default/forms/messages/process.php,
+ .../views/default/forms/messages/reply.php,
+ mod/messages/views/default/messages/js.php, mod/profile/start.php,
+ mod/profile/views/default/profile/js.php,
+ mod/profile/views/default/profile/wrapper.php, mod/thewire/start.php,
+ mod/thewire/views/default/forms/thewire/add.php,
+ views/default/css/elements/buttons.php: Refs #3016: Removes inline javascript
+ from embed, file, groups, messages, profile, thewire
+
+ * views/default/css/admin.php, views/default/css/elements/icons.php,
+ views/default/css/elements/modules.php,
+ views/default/object/widget/elements/controls.php: Refs #3112: Pulled out
+ widget gear icon into elgg-icon-gear, which widgets now use
+
+2011-03-14 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggPlugin.php, engine/classes/ElggPluginPackage.php,
+ languages/en.php, views/default/admin/plugins/advanced.php,
+ views/default/object/plugin/invalid.php: Fixes #2928: Invalid plugins are
+ shown on the advance page with details about the problem and a link to the
+ docs.
+
+2011-03-14 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css/admin.php, views/default/css/elements/layout.php: Refs
+ #3109: Fixes 3 more instances of background-color being used when background
+ should be
+
+ * .../views/default/theme_preview/navigation.php,
+ mod/embed/views/default/embed/css.php,
+ mod/search/views/default/search/css.php,
+ mod/thewire/views/default/thewire/css.php, views/default/css/admin.php,
+ views/default/css/elements/buttons.php,
+ views/default/css/elements/components.php,
+ views/default/css/elements/forms.php, views/default/css/elements/icons.php,
+ views/default/css/elements/layout.php, views/default/css/elements/misc.php,
+ views/default/css/elements/modules.php,
+ views/default/css/elements/navigation.php: Refs #3109: More CSS cleanup.
+ Fixes bugs introduced by last cleanup where background-color: was being used
+ instead of background:
+
+2011-03-14 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggPlugin.php, engine/lib/plugins.php: Refs #3079: Making
+ sure elgg_get_max_plugin_priority() returns 1 instead. Fixed problems when
+ bootstrapping elgg plugins. Will perform tests against MySQL 5.5 when I have
+ a real internet connection.
+
+2011-03-14 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * CODING.txt: Using tabs instead of spaces to indent lines in CODING.txt
+
+ * install/css/install.css, .../views/default/custom_index/css.php,
+ mod/embed/views/default/embed/css.php,
+ mod/groups/views/default/groups/css.php,
+ mod/messages/views/default/messages/css.php,
+ mod/profile/views/default/profile/css.php,
+ .../views/default/reportedcontent/admin_css.php,
+ mod/search/views/default/search/css.php,
+ mod/tinymce/views/default/tinymce/css.php,
+ mod/twitter/views/default/twitter/css.php, views/default/css/admin.php,
+ views/default/css/elements/buttons.php,
+ views/default/css/elements/chrome.php,
+ views/default/css/elements/components.php,
+ views/default/css/elements/forms.php, views/default/css/elements/icons.php,
+ views/default/css/elements/misc.php, views/default/css/elements/modules.php,
+ views/default/css/elements/navigation.php: Fixes #3109: added
+ non-vendor-prefixed css property declarations where applicable. Cleaned up
+ various other aspects of the css
+
+ * engine/handlers/page_handler.php: Fixes #3080: Move redirect code to
+ before engine inclusion
+
+2011-03-14 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Fixes #3121 array_filter() passes array elements
+ to callback
+
+2011-03-14 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/navigation/menu/page.php: Fixes #3103. Re-added code
+ accidentally removed in r8611 that broke page menu selected items.
+
+ * ...031300-1.8_svn-twitter_api-12b832a5a7a3e1bd.php,
+ mod/twitter_api/graphics/sign_in_with_twitter.gif,
+ mod/twitter_api/languages/en.php, mod/twitter_api/lib/twitter_api.php,
+ mod/twitter_api/manifest.xml, mod/twitter_api/start.php,
+ mod/twitter_api/vendors/twitteroauth/LICENSE,
+ mod/twitter_api/vendors/twitteroauth/OAuth.php,
+ mod/twitter_api/vendors/twitteroauth/README,
+ .../vendors/twitteroauth/twitterOAuth.php,
+ .../views/default/settings/twitter_api/edit.php,
+ mod/twitter_api/views/default/twitter_api/css.php,
+ .../views/default/twitter_api/login.php,
+ .../views/default/twitter_api/metatags.php,
+ .../default/usersettings/twitter_api/edit.php,
+ .../graphics/sign_in_with_twitter.gif, mod/twitterservice/languages/en.php,
+ mod/twitterservice/manifest.xml, mod/twitterservice/start.php,
+ mod/twitterservice/twitterservice_lib.php,
+ mod/twitterservice/vendors/twitteroauth/LICENSE,
+ mod/twitterservice/vendors/twitteroauth/OAuth.php,
+ mod/twitterservice/vendors/twitteroauth/README,
+ .../vendors/twitteroauth/twitterOAuth.php,
+ .../views/default/settings/twitterservice/edit.php,
+ .../views/default/twitterservice/css.php,
+ .../views/default/twitterservice/login.php,
+ .../views/default/twitterservice/metatags.php,
+ .../default/usersettings/twitterservice/edit.php, version.php: Refs #3115.
+ Migrated twitterservice to twitter_api. Added upgrade to migrate plugin and
+ user settings.
+
+2011-03-13 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/messages/start.php: fixed WSOD because of function name change when
+ using some 1.7 themes
+
+ * engine/lib/views.php: Refs #3059 should only fallback to 1.7 pageshell
+ when asking for default page shell - otherwise breaks admin area
+
+ * engine/lib/deprecated-1.8.php: Fixes #3116 old method of getting site menu
+ works again
+
+ * engine/handlers/page_handler.php: Refs #2228 reverting [8654] so
+ forwarding works
+
+ * languages/en.php: Reverted changes made for elgg.com on Tools menu
+
+2011-03-13 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggPlugin.php: Refs #3079: Better checks in
+ ElggPlugin::setPriority() to avoid priorities of 0. Still requires testing
+ for MySQL 5.5.
+
+ * languages/en.php: Refs #3009. Fixed a few typos and inaccuracies in the
+ welcome widget.
+
+2011-03-13 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/likes/views/default/likes/display.php: tweaked an id so that the likes
+ html would be valid
+
+ * views/default/page/elements/footer.php: how did that get there - removing
+ some test code
+
+ * js/lib/ui.js: Fixes #3110 - checking selector before running date picker
+ js
+
+ * .../views/default/admin/utilities/diagnostics.php,
+ .../views/default/diagnostics/forms/download.php: wrapped the submit button
+ in diagnostics plugin with a <p> so the bottom doesn't get cut off
+
+ * languages/en.php: Refs #2991 restored plugin settings language string
+ needed for page title
+
+ * languages/en.php: fixed typo in site settings
+
+ * .../views/default/groups/sidebar/members.php: Fixes #3072 using
+ elgg_list_entities*() in group members sidebar view
+
+ * mod/groups/languages/en.php, mod/groups/lib/groups.php: displaying a no
+ activity message on the activity page for new groups
+
+ * mod/pages/world.php: added text to pages plugin for case where no pages
+ have been created on site
+
+ * mod/file/index.php: fixed typo in file index.php
+
+ * mod/blog/views/default/object/blog.php,
+ mod/bookmarks/views/default/object/bookmarks.php,
+ mod/file/views/default/object/file.php,
+ mod/groups/views/default/group/default.php,
+ .../views/default/object/groupforumtopic.php,
+ mod/pages/views/default/object/page_top.php,
+ mod/thewire/views/default/object/thewire.php,
+ views/default/object/default.php,
+ views/default/page/components/list/body.php,
+ views/default/page/components/summary.php, views/default/user/default.php:
+ Refs #3096 using 'summary' instead of list/body
+
+2011-03-12 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/river/elements/body.php,
+ views/default/river/elements/controls.php,
+ views/default/river/elements/footer.php,
+ views/default/river/elements/image.php, views/default/river/item.php,
+ views/default/river/item/body.php, views/default/river/item/controls.php,
+ views/default/river/item/footer.php, views/default/river/item/image.php:
+ somehow we forgot to use 'elements' in river views
+
+2011-03-12 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php, upgrade.php, views/default/page/upgrade.php: Fixes
+ #3064. Checking for views/default/welcome.php and aborting upgrade if found.
+ Need to add documention for how to replace views directory to wiki. Also
+ fixed ajax loader during upgrade.
+
+2011-03-12 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggUser.php, mod/custom_index/index.php,
+ views/default/widgets/friends/content.php: Fixes #3045 custom index and the
+ friends widget now use the gallery view for user icons
+
+ * engine/lib/views.php, views/default/page/components/gallery.php,
+ views/default/page/components/list.php, views/default/user/default.php: Refs
+ #3045 adds a gallery context based view for users
+
+ * engine/lib/admin.php, engine/lib/elgglib.php, engine/lib/views.php,
+ engine/tests/api/helpers.php, mod/blog/lib/blog.php, mod/blog/start.php,
+ .../views/default/page/theme_preview.php, mod/notifications/index.php,
+ .../notifications/subscriptions/forminternals.php, mod/pages/start.php,
+ mod/tinymce/start.php, mod/tinymce/views/default/tinymce/init.php,
+ mod/zaudio/start.php, mod/zaudio/views/default/zaudio/audioplayer.php,
+ views/default/input/autocomplete.php, views/default/input/friendspicker.php,
+ views/default/input/userpicker.php, views/default/page/elements/head.php:
+ Fixes #3091 adds load functions for js and css
+
+2011-03-12 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/admin.php: Fixed #3093: Admin link shows only for admin users.
+
+ * languages/en.php: Fixes #3004: Updated admin widget text to reflect menu
+ changes.
+
+ * mod/blog/views/default/blog/sidebar/revisions.php: Fixed blog revision
+ links.
+
+ * js/lib/autocomplete.js, js/lib/elgglib.js, js/lib/events.js,
+ js/lib/hooks.js, js/lib/languages.js, js/lib/security.js, js/lib/ui.js,
+ js/lib/ui.widgets.js, js/lib/userpicker.js, js/tests/ElggEventsTest.js,
+ js/tests/ElggHooksTest.js, mod/blog/views/default/js/blog/save_draft.php,
+ mod/bookmarks/views/default/bookmarks/js.php,
+ mod/messageboard/views/default/messageboard/js.php,
+ mod/tinymce/views/default/js/tinymce.php,
+ .../views/default/uservalidationbyemail/js.php,
+ views/default/core/account/login_box.php,
+ views/default/core/account/login_dropdown.php,
+ views/default/core/river/filter.php, views/default/js/admin.php,
+ views/default/js/elgg.php: Fixes #3065, #3089. Merged JS events and hooks to
+ a single system. Updated plugins and core to use it. Added
+ elgg.getURLFragment() and using it elgg.ui.popsUp().
+
+2011-03-12 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page/admin.php, views/default/page/default.php: forgot to
+ include js registered for the footer in page shells
+
+ * engine/lib/elgglib.php, engine/tests/api/helpers.php: Refs #3091
+ registering js and css support priority though does not maintain registration
+ order if items have equal priority
+
+ * engine/lib/admin.php, engine/lib/elgglib.php, engine/lib/views.php,
+ engine/tests/api/helpers.php, mod/blog/lib/blog.php,
+ mod/notifications/index.php,
+ .../notifications/subscriptions/forminternals.php, mod/pages/start.php,
+ mod/tinymce/views/default/tinymce/init.php,
+ mod/zaudio/views/default/zaudio/audioplayer.php,
+ views/default/admin/plugins/advanced.php,
+ views/default/input/autocomplete.php, views/default/input/friendspicker.php,
+ views/default/input/userpicker.php, views/default/page/components/list.php:
+ Refs #3091 rewrote the js and css register functions to require a name
+
+ * mod/blog/views/default/blog/group_module.php,
+ .../views/default/bookmarks/group_module.php,
+ mod/file/views/default/file/group_module.php,
+ .../views/default/discussion/group_module.php,
+ mod/pages/views/default/pages/group_module.php: Fixes #3071 group "widgets"
+ check permissions now
+
+2011-03-12 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/admin.php, engine/lib/widgets.php,
+ views/default/admin/appearance/default_widgets.php,
+ views/default/admin/appearance/menu_items.php,
+ views/default/admin/appearance/profile_fields.php,
+ .../admin/appearance/profile_fields/list.php,
+ views/default/admin/settings/default_widgets.php,
+ views/default/admin/settings/menu_items.php,
+ views/default/admin/settings/profile_fields.php,
+ .../default/admin/settings/profile_fields/list.php,
+ views/default/css/admin.php, views/default/js/admin.php: Refs #2991: Readded
+ the appearance menu under configure. Moved plugin settings under
+ configure/settings.
+
+ * engine/lib/admin.php, languages/en.php, views/default/admin/sidebar.php,
+ views/default/css/admin.php: Refs #2991. Using section for admin menu.
+
+ * views/default/navigation/menu/elements/section.php: Refs #3088. Wrapping
+ section headers in <h2>s.
+
+ * engine/lib/views.php: Refs #3088. Added docs for section headers to
+ elgg_view_menu().
+
+ * views/default/navigation/menu/default.php,
+ views/default/navigation/menu/elements/section.php,
+ views/default/navigation/menu/page.php: Fixes #3088: Added section header
+ support to page and default menus.
+
+2011-03-12 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/views.php: Refs #3085 finished support for passing $vars to
+ elgg_view_entity()
+
+ * engine/lib/views.php, views/default/page/components/gallery.php,
+ views/default/page/components/list.php, views/rss/layout/objects/list.php:
+ Refs #3085 moved full_view out of elgg_view_list_item() into $vars to be
+ consistent with other elgg_view* functions
+
+ * engine/lib/views.php, views/default/page/elements/comments.php: Refs #3085
+ added $vars to elgg_view_comments()
+
+ * engine/lib/views.php: Refs #3085 improved documentation of
+ elgg_view_entity_list() which already supported $vars array
+
+ * engine/classes/ElggEntity.php, engine/lib/entities.php: improved
+ documentation of can write to container method/function
+
+2011-03-11 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/js/elgg.php: Fixes #3081: Adding a new line between
+ javascript includes.
+
+ * engine/handlers/page_handler.php, engine/lib/admin.php,
+ engine/lib/widgets.php, languages/en.php, mod/developers/languages/en.php,
+ mod/developers/start.php, mod/diagnostics/start.php,
+ mod/externalpages/start.php, mod/logbrowser/start.php,
+ mod/reportedcontent/start.php, mod/uservalidationbyemail/start.php,
+ views/default/admin/appearance/default_widgets.php,
+ views/default/admin/appearance/menu_items.php,
+ views/default/admin/appearance/profile_fields.php,
+ .../admin/appearance/profile_fields/list.php,
+ views/default/admin/settings/advanced.php,
+ views/default/admin/settings/basic.php,
+ views/default/admin/settings/default_widgets.php,
+ views/default/admin/settings/menu_items.php,
+ views/default/admin/settings/profile_fields.php,
+ .../default/admin/settings/profile_fields/list.php,
+ views/default/admin/sidebar.php, views/default/admin/site/advanced.php,
+ views/default/admin/site/basic.php, views/default/css/admin.php,
+ views/default/js/admin.php: Refs #2991. First round at rearranging and
+ grouping admin menu based upon tasks.
+
+2011-03-10 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/plugins/activate.php, actions/admin/plugins/deactivate.php,
+ actions/admin/user/delete.php, actions/friends/collections/add.php,
+ actions/friends/collections/delete.php, engine/classes/ElggSite.php,
+ engine/lib/admin.php, engine/lib/cache.php, engine/lib/cron.php,
+ engine/lib/elgglib.php, engine/lib/entities.php, engine/lib/input.php,
+ engine/lib/navigation.php, engine/lib/output.php, engine/lib/pagehandler.php,
+ engine/lib/pageowner.php, engine/lib/plugins.php, engine/lib/river.php,
+ engine/lib/user_settings.php, engine/lib/users.php,
+ engine/tests/api/helpers.php, index.php, install/ElggInstaller.php,
+ js/lib/elgglib.js, js/lib/languages.js, js/lib/userpicker.js,
+ js/tests/ElggLibTest.js, mod/blog/actions/blog/delete.php,
+ mod/blog/actions/blog/save.php, mod/blog/lib/blog.php, mod/blog/start.php,
+ mod/blog/views/default/blog/group_module.php,
+ mod/blog/views/default/blog/sidebar/archives.php,
+ mod/blog/views/default/blog/sidebar/revisions.php,
+ mod/blog/views/default/object/blog.php,
+ mod/blog/views/default/widgets/blog/content.php,
+ mod/bookmarks/actions/bookmarks/delete.php,
+ mod/bookmarks/actions/bookmarks/save.php, mod/bookmarks/pages/friends.php,
+ mod/bookmarks/pages/view.php, mod/bookmarks/start.php,
+ .../views/default/bookmarks/bookmarklet.php,
+ .../views/default/bookmarks/group_module.php,
+ mod/bookmarks/views/default/object/bookmarks.php,
+ .../views/default/widgets/bookmarks/content.php, mod/categories/start.php,
+ mod/categories/views/default/output/categories.php, mod/developers/start.php,
+ .../views/default/admin/developers/preview.php, mod/embed/start.php,
+ mod/embed/views/default/embed/embed.php,
+ mod/embed/views/default/embed/upload/content.php,
+ mod/externalpages/start.php,
+ mod/externalpages/views/default/expages/menu.php,
+ mod/file/actions/file/delete.php, mod/file/actions/file/upload.php,
+ mod/file/edit.php, mod/file/friends.php, mod/file/index.php,
+ mod/file/search.php, mod/file/start.php, mod/file/upload.php,
+ mod/file/view.php, mod/file/views/default/file/embed_upload.php,
+ mod/file/views/default/file/group_module.php,
+ mod/file/views/default/object/file.php,
+ .../views/default/widgets/filerepo/content.php,
+ mod/groups/actions/discussion/delete.php,
+ mod/groups/actions/groups/delete.php,
+ mod/groups/actions/groups/membership/invite.php,
+ mod/groups/lib/discussion.php, mod/groups/lib/groups.php,
+ mod/groups/start.php, .../views/default/discussion/group_module.php,
+ .../views/default/groups/group_sort_menu.php,
+ .../default/groups/profile/activity_module.php,
+ .../views/default/groups/profile/buttons.php,
+ mod/groups/views/default/groups/side_menu.php,
+ mod/groups/views/default/groups/sidebar/find.php,
+ .../views/default/groups/sidebar/members.php,
+ .../default/widgets/a_users_groups/content.php,
+ mod/invitefriends/actions/invite.php, mod/invitefriends/start.php,
+ mod/logbrowser/start.php, mod/logbrowser/views/default/logbrowser/form.php,
+ mod/logbrowser/views/default/logbrowser/table.php,
+ mod/messageboard/pages/owner.php, mod/messageboard/start.php,
+ .../views/default/widgets/messageboard/content.php,
+ mod/messages/actions/messages/send.php, mod/messages/read.php,
+ mod/messages/start.php, mod/messages/views/default/object/messages.php,
+ mod/notifications/start.php, mod/pages/actions/pages/delete.php,
+ mod/pages/friends.php, mod/pages/history.php, mod/pages/revision.php,
+ mod/pages/start.php, mod/pages/view.php,
+ mod/pages/views/default/object/page_top.php,
+ mod/pages/views/default/pages/group_module.php,
+ mod/pages/views/default/widgets/pages/content.php, mod/profile/start.php,
+ mod/reportedcontent/start.php, mod/search/index.php,
+ mod/search/views/default/search/list.php,
+ mod/search/views/default/search/search_box.php, mod/thewire/actions/add.php,
+ mod/thewire/actions/delete.php, mod/thewire/pages/friends.php,
+ mod/thewire/pages/reply.php, mod/thewire/pages/tag.php,
+ mod/thewire/pages/thread.php, mod/thewire/pages/user.php,
+ mod/thewire/start.php, mod/thewire/tests/regex.php,
+ mod/thewire/views/default/object/thewire.php,
+ .../views/default/thewire/profile_status.php,
+ .../views/default/widgets/thewire/content.php, mod/twitterservice/start.php,
+ mod/twitterservice/twitterservice_lib.php,
+ .../views/default/twitterservice/login.php,
+ .../default/usersettings/twitterservice/edit.php,
+ mod/uservalidationbyemail/lib/functions.php,
+ mod/uservalidationbyemail/start.php,
+ .../forms/uservalidationbyemail/bulk_action.php,
+ views/default/admin/appearance/default_widgets.php,
+ views/default/admin/header.php, views/default/admin/plugins/advanced.php,
+ views/default/core/account/login_dropdown.php,
+ views/default/core/account/login_walled_garden.php,
+ views/default/core/members/nav.php, views/default/core/members/sidebar.php,
+ views/default/forms/login.php, views/default/group/search/finishblurb.php,
+ views/default/input/autocomplete.php,
+ views/default/object/plugin/advanced.php,
+ views/default/object/plugin/simple.php, views/default/output/tagcloud.php,
+ views/default/output/tags.php, views/default/page/default.php,
+ views/default/page/layouts/content/filter.php,
+ views/default/page/layouts/content/header.php,
+ .../page/layouts/two_column_left_sidebar.php,
+ views/default/user/search/finishblurb.php,
+ views/default/widgets/content_stats/content.php, views/foaf/page/default.php,
+ views/installation/page/elements/footer.php, views/rss/core/river/body.php:
+ Fixes #2228: Major cleanup of urls -- remove leading pg/ and trailing / from
+ most urls in core and plugins
+
+ * .gitignore: Ignoring some standard eclipse files
+
+ * engine/handlers/page_handler.php, htaccess_dist: Refs #2228: Deprecated
+ use of pg/ in page handlers. Now we get to have nice clean urls like
+ "example.com/bookmarks"
+
+2011-03-10 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/twitterservice/manifest.xml: Added curl requirement to twitterservice.
+
+
+ * .../views/default/groups/sidebar/members.php: Fixes #3072: Fixed group
+ member list in sidebar. Thoughts about using the elgg-menu-hz class for this?
+ It's not exactly a menu, but that CSS does exactly what's needed.
+
+ * mod/groups/lib/groups.php: Fixes #3069. Added group activity content.
+
+ * languages/en.php, views/default/widgets/admin_welcome/content.php: Refs
+ #3004. First draft of welcome widget text.
+
+ * views/default/css/admin.php: Fixes #2948: Put specific rules in for
+ .elgg-plugin.elgg-state-active to get white backgrounds in plugins, but not
+ break the action button. The admin CSS still needs a bit of work.
+
+2011-03-10 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/pageowner.php: fixed page owner setting for sites in a
+ subdirectory
+
+ * views/default/css/admin.php, views/default/page/admin.php: Fixes #3057
+ page wrapper now sets the margin so messages don't end up in far left
+
+2011-03-09 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * js/lib/ui.js, mod/likes/views/default/likes/display.php: Refs #3027: Using
+ the event popup, ui for advanced placement in elgg.ui.popsUp()
+
+ * engine/lib/views.php: Fixes #3059. elgg_view_layout() checks for
+ deprecated layouts in canvas/layouts/ and elgg_view_page() checks for
+ deprecated pageshells in pageshells/pageshell.
+
+ * engine/classes/ElggBatch.php: Fixed some typos in documentation of
+ ElggBatch.
+
+2011-03-09 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/upgrades/2011030101.php: Fixes #2679 added a script to upgrade
+ forum topics from 1.7 and earlier
+
+ * actions/likes/add.php, actions/likes/delete.php,
+ engine/classes/ElggEntity.php, engine/lib/elgglib.php,
+ engine/lib/navigation.php, engine/lib/upgrades/2010121702.php,
+ engine/lib/views.php, languages/en.php,
+ .../views/default/theme_preview/icons.php, mod/likes/actions/likes/add.php,
+ mod/likes/actions/likes/delete.php, mod/likes/languages/en.php,
+ mod/likes/manifest.xml, mod/likes/start.php,
+ mod/likes/views/default/annotation/likes.php,
+ mod/likes/views/default/likes/css.php,
+ mod/likes/views/default/likes/display.php,
+ .../default/river/annotation/likes/create.php,
+ views/default/annotation/likes.php, views/default/core/likes/display.php,
+ views/default/css/admin.php, views/default/css/elements/components.php,
+ views/default/css/elements/icons.php, views/default/css/ie.php,
+ views/default/river/annotation/likes/create.php: Fixes #3058 pulls likes out
+ as a plugin
+
+ * views/default/navigation/menu/metadata.php: removed metadata menu which
+ has been replaced by the entity menu
+
+2011-03-08 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/categories/manifest.xml, mod/custom_index/manifest.xml,
+ mod/developers/manifest.xml, mod/diagnostics/manifest.xml,
+ mod/embed/manifest.xml, mod/externalpages/manifest.xml,
+ mod/garbagecollector/manifest.xml, mod/groups/manifest.xml,
+ mod/htmlawed/manifest.xml, mod/invitefriends/manifest.xml,
+ mod/logbrowser/manifest.xml, mod/logrotate/manifest.xml,
+ mod/messageboard/manifest.xml, mod/messages/manifest.xml,
+ mod/notifications/manifest.xml, mod/oauth_lib/manifest.xml,
+ mod/twitter/manifest.xml: Refs #2104 added bundled category to all core
+ plugins
+
+ * .../views/default/theme_preview/forms.php: added padding to the display of
+ buttons in developer preview
+
+ * languages/en.php, views/default/admin/plugins/advanced.php: Refs #2871
+ advanced plugin filtering works - sorting still does odd things
+
+2011-03-08 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/admin.php, languages/en.php, views/default/admin/footer.php,
+ views/default/css/admin.php: Fixes #3005. Added links to admin faq, admin
+ manual, blog, and community forums in the admin footer.
+
+ * mod/thewire/start.php, mod/thewire/views/default/object/thewire.php,
+ mod/thewire/views/default/thewire/metadata.php: Fixes #3025: The wire uses
+ core's metadata view.
+
+ * engine/lib/views.php: Added a bit more docs to elgg_view_menu().
+
+ * engine/lib/upgrades/2010050701.php: Fixes #2310. Only conditionally
+ setting the allow_registration field for users who used
+ $CONFIG->disable_registration.
+
+ * js/lib/ui.js, views/default/core/likes/display.php: Fixes #3027. Likes
+ popup uses rel='popup' and elgg.ui.popsUp() to position absolute.
+
+ * mod/blog/views/default/blog/sidebar/revisions.php: Fixes #3054: Fixed URL
+ for editing a blog revision.
+
+2011-03-08 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/tinymce/start.php, mod/tinymce/views/default/js/tinymce.php,
+ mod/tinymce/views/default/tinymce/init.php, views/default/input/longtext.php:
+ fixed tinymce toggle
+
+2011-03-08 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/views/default/js/blog/save_draft.php: Fixes #3053: Fixed JS for
+ blog draft autosave.
+
+ * ...8_svn-blog_status_metadata-4645225d7b440876.php,
+ mod/blog/actions/blog/auto_save_revision.php, mod/blog/actions/blog/save.php,
+ mod/blog/classes/ElggBlog.php, mod/blog/languages/en.php,
+ mod/blog/views/default/blog/sidebar/revisions.php,
+ mod/blog/views/default/forms/blog/save.php,
+ mod/blog/views/default/input/datetime.php,
+ mod/blog/views/default/js/blog/save_draft.php,
+ mod/blog/views/default/object/blog.php, version.php: Fixes #2229. Removed
+ published data metadata in blog. Added upgrade to set all status metadata for
+ old blog posts.
+
+ * engine/classes/ElggBatch.php: Added a bit more docs to ElggBatch.
+
+ * mod/blog/lib/blog.php, mod/blog/views/default/blog/sidebar/archives.php:
+ Refs #2229: Using time_created instead of publish_date metadata to sort.
+
+2011-03-08 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/input/longtext.php: fixed longtext menu display
+
+2011-03-07 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/navigation.php, engine/lib/river.php, mod/blog/start.php,
+ mod/blog/views/default/object/blog.php,
+ mod/bookmarks/views/default/object/bookmarks.php,
+ mod/file/views/default/object/file.php, mod/groups/start.php,
+ mod/groups/views/default/group/default.php,
+ .../views/default/object/groupforumtopic.php, mod/pages/start.php,
+ mod/pages/views/default/object/page_top.php,
+ views/default/css/elements/navigation.php: Refs #2895 entity menu uses new
+ menu system
+
+ * engine/classes/ElggMenuItem.php: added support for confirm text to
+ ElggMenuItem
+
+ * views/default/output/confirmlink.php: made encoding text default to false
+ in confirm link
+
+ * mod/blog/views/default/blog/group_module.php,
+ .../views/default/bookmarks/group_module.php,
+ mod/file/views/default/file/group_module.php,
+ .../views/default/discussion/group_module.php,
+ mod/groups/views/default/forms/groups/delete.php,
+ mod/groups/views/default/groups/css.php,
+ .../views/default/groups/group_sort_menu.php,
+ .../default/groups/profile/activity_module.php,
+ .../views/default/groups/profile/profile_block.php,
+ .../views/default/groups/profile/widgets.php,
+ mod/pages/views/default/pages/group_module.php: cleaned up the groups plugin
+ css
+
+ * views/default/css/elements/navigation.php: owner block menu items appear
+ like normal page menu items in default theme
+
+ * engine/lib/river.php: not showing river buttons when displaying in widgets
+
+
+2011-03-06 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php: Elgg's web services API is not RESTful
+
+ * mod/custom_index/start.php: custom index plugin checks return value on
+ hook now
+
+ * _graphics/walled_garden_background_top.gif, engine/lib/elgglib.php,
+ views/default/core/account/login_walled_garden.php,
+ views/default/css/walled_garden.php, views/default/page/elements/footer.php,
+ views/default/page/walled_garden.php: Refs #2693 walled garden code is
+ functional. Push back a thorough clean up until Elgg 1.9
+
+ * engine/lib/elgglib.php, languages/en.php,
+ views/default/css/walled_garden.php, views/default/page/walled_garden.php:
+ Refs #2693 pulled walled garden css out as separate view
+
+ * documentation/examples/plugins/manifest.xml, mod/blog/manifest.xml,
+ mod/bookmarks/manifest.xml, mod/developers/manifest.xml,
+ mod/file/manifest.xml, mod/pages/manifest.xml, mod/profile/manifest.xml,
+ mod/reportedcontent/manifest.xml, mod/search/manifest.xml,
+ mod/tagcloud/manifest.xml, mod/thewire/manifest.xml,
+ mod/tinymce/manifest.xml, mod/twitterservice/manifest.xml,
+ mod/uservalidationbyemail/manifest.xml, mod/zaudio/manifest.xml,
+ views/default/admin/plugins/advanced.php: Refs #2104 added some categories to
+ core (bundled) plugins
+
+ * mod/thewire/languages/en.php,
+ .../views/default/thewire/profile_status.php: Fixes #3024 thewire view for
+ the profile page is finished
+
+ * engine/lib/river.php, mod/groups/start.php,
+ .../views/default/forms/discussion/reply/save.php,
+ .../river/object/groupforumtopic/create.php,
+ views/default/river/item/controls.php: Refs #2679 can comment on discussion
+ forums in river now
+
+ * mod/groups/start.php: Refs #2413 registered the subtype for discussion
+ topics so search works
+
+ * mod/groups/start.php: Refs #2679 added a function for processing groups
+ plugin upgrades
+
+ * engine/lib/river.php, views/default/river/item/controls.php: Fixes #2895
+ river menu reimplemented using plugin hook
+
+ * upgrade.php: Fixes #3029 added an upgrade, system event that always fires
+
+2011-03-05 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggMenuBuilder.php: added a catch to menu builder for bad
+ menu items
+
+ * views/default/css/elements/navigation.php: added background to li hover
+ for filter menu to work around sliver of white showing through - probably a
+ better way to do this
+
+ * mod/messages/start.php, mod/messages/views/default/messages/css.php: fixed
+ new message indicator
+
+ * views/default/navigation/menu/default.php: forcing dashes in elgg menu
+ classes
+
+ * mod/messages/read.php, mod/pages/view.php: changed rest of title buttons
+ to an elgg-menu
+
+ * mod/groups/languages/en.php, mod/groups/lib/groups.php: fixed some group
+ page titles
+
+ * mod/thewire/languages/en.php: thewire was missing object:<subtype> string
+
+ * views/default/css/elements/navigation.php: tweaked spacing of sidebar
+ menus
+
+ * languages/en.php: adjust language on like link title
+
+ * views/default/css/elements/layout.php,
+ views/default/css/elements/navigation.php: added a amrgin to elgg-menu-title
+ so that buttons have some space
+
+ * .../views/default/groups/profile/buttons.php: groups profile buttons now
+ elgg-menu-title - still need to be registered
+
+ * .../views/default/forms/messages/process.php,
+ mod/messages/views/default/object/messages.php,
+ views/default/annotation/default.php,
+ views/default/annotation/generic_comment.php,
+ views/default/annotation/likes.php, views/default/css/elements/buttons.php,
+ views/default/input/submit.php: cleared up confusion over elgg-icon-delete
+ and elgg-button-delete
+
+ * .../views/default/groups/invitationrequests.php,
+ .../views/default/groups/membershiprequests.php: cleaned up the group
+ invitations and membership request pages
+
+ * mod/groups/actions/groups/edit.php,
+ mod/groups/views/default/forms/groups/edit.php: fixed a bug with invisible
+ groups - saving and display both had a problem
+
+ * mod/groups/views/default/forms/groups/search.php,
+ mod/groups/views/default/groups/edit.php,
+ .../views/default/groups/group_sort_menu.php,
+ .../default/groups/profile/activity_module.php,
+ mod/groups/views/default/groups/side_menu.php,
+ .../views/default/groups/sidebar/members.php,
+ .../river/annotation/group_topic_post/reply.php,
+ .../default/river/relationship/member/create.php,
+ mod/groups/views/default/settings/groups/edit.php: reviewed groups plugin and
+ added todo's
+
+ * mod/bookmarks/views/default/object/bookmarks.php: added owner icons to
+ bookmarks
+
+ * views/default/css/elements/misc.php: drop down button did not need to have
+ such a large z-index
+
+ * views/default/css/elements/buttons.php: removed shadow from
+ elgg-button-dropdown inherited from elgg-button
+
+ * views/default/page/elements/footer.php: make sure powered by icon does not
+ sneak up in the menu area
+
+ * .../default/file/specialcontent/image/default.php,
+ mod/file/views/default/icon/object/file.php: fixed two validation issues with
+ ampersands in file plugin
+
+ * views/default/page/elements/footer.php: forgot to close div tag
+
+ * .../views/default/custom_index/css.php,
+ .../views/default/page/layouts/custom_index.php: updated custom index spacing
+ so it spans the width of the central area
+
+ * engine/lib/elgglib.php, mod/externalpages/start.php,
+ mod/reportedcontent/start.php, views/default/css/elements/navigation.php,
+ views/default/page/elements/footer.php: pulled power by icon out of menu in
+ footer as it serves a different purpose than other menu items
+
+2011-03-05 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * js/lib/ui.js, views/default/input/date.php,
+ views/default/input/datepicker.php, views/default/output/calendar.php,
+ views/default/output/date.php: Fixes #2321: Deprecated input/datepicker and
+ output/calendar in favor of input/date and output/date
+
+2011-03-04 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/actions/groups/membership/join.php, mod/groups/start.php: Fixes
+ #1926 flushing access list when adding a user to a group
+
+ * mod/groups/lib/groups.php, .../default/groups/profile/activity_module.php:
+ preventing crashes when user does not have access to the group on group
+ profile page
+
+ * engine/lib/access.php: Refs #1926 should not be ignoring the flush
+ variable
+
+ * engine/lib/access.php: updated comment on why we may want to keep access
+ cache
+
+ * mod/groups/start.php: Refs #1926 user is now being added to access
+ collection of invisible group
+
+ * engine/lib/access.php: Refs #1926 made 'access:collections:add_user',
+ 'collection' plugin hook more useful
+
+ * mod/groups/actions/groups/edit.php, mod/groups/languages/en.php,
+ mod/groups/views/default/forms/groups/edit.php: trying to make support for
+ invisible groups a little saner
+
+ * mod/groups/actions/groups/membership/join.php: fixed bug in accepting
+ invitations to closed groups
+
+ * mod/groups/actions/addtogroup.php, mod/groups/actions/delete.php,
+ mod/groups/actions/edit.php, mod/groups/actions/featured.php,
+ mod/groups/actions/groups/delete.php, mod/groups/actions/groups/edit.php,
+ mod/groups/actions/groups/featured.php,
+ mod/groups/actions/groups/membership/add.php,
+ .../actions/groups/membership/delete_invite.php,
+ .../actions/groups/membership/delete_request.php,
+ mod/groups/actions/groups/membership/invite.php,
+ mod/groups/actions/groups/membership/join.php,
+ mod/groups/actions/groups/membership/leave.php,
+ mod/groups/actions/groupskillinvitation.php,
+ mod/groups/actions/groupskillrequest.php, mod/groups/actions/invite.php,
+ mod/groups/actions/join.php, mod/groups/actions/joinrequest.php,
+ mod/groups/actions/leave.php, mod/groups/start.php,
+ .../views/default/groups/invitationrequests.php,
+ .../views/default/groups/profile/buttons.php: updated the group actions -
+ edit group needs more work
+
+ * engine/lib/entities.php: added a hint about 0 meaning no limit for ege
+
+2011-03-03 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/start.php: Refs #2679 preventing people from commenting on a
+ discussion topic in the river
+
+ * mod/groups/actions/discussion/reply/delete.php,
+ mod/groups/actions/discussion/reply/save.php, mod/groups/languages/en.php,
+ mod/groups/lib/discussion.php, mod/groups/lib/groups.php,
+ mod/groups/start.php, .../views/default/annotation/group_topic_post.php,
+ mod/groups/views/default/discussion/replies.php,
+ .../views/default/forms/discussion/reply/save.php,
+ mod/groups/views/default/groups/css.php,
+ .../views/default/object/groupforumtopic.php,
+ .../river/annotation/group_topic_post/reply.php: Refs #2679 - returning to a
+ separate annotation for discussion forum replies. For those using the latest
+ out of svn you can update with this script: https://gist.github.com/852092
+
+2011-03-02 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php, mod/blog/views/default/forms/blog/save.php,
+ mod/groups/views/default/forms/groups/edit.php,
+ .../notifications/subscriptions/forminternals.php,
+ views/default/css/elements/chrome.php,
+ views/default/forms/admin/site/update_advanced.php,
+ views/default/forms/admin/site/update_basic.php,
+ views/default/forms/usersettings/save.php: Fixes #3006 restores previous
+ dividers
+
+ * mod/categories/views/default/output/categories.php: not showing categories
+ label if not categories chosen
+
+ * actions/login.php: Fixes #3036 moved setting of forward url to before
+ login in case session variables are being lost
+
+ * views/default/river/item/controls.php: Refs #2895 reverting [8532] as code
+ is not working as intended. Can comment and like everything because menu
+ items are being registered. Perhaps questionable benefit of using the menu
+ system here.
+
+ * mod/groups/actions/discussion/save.php: fixed the view name for discussion
+ topic river
+
+ * .../views/default/object/groupforumtopic.php: showing the text of a forum
+ topic post
+
+2011-03-02 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/tinymce/views/default/tinymce/css.php,
+ views/default/core/friends/collection.php,
+ views/default/core/friends/collections.php,
+ views/default/core/friends/collectiontabs.php,
+ views/default/css/elements/components.php,
+ views/default/css/elements/modules.php,
+ views/default/css/elements/navigation.php,
+ views/default/page/elements/owner_block.php,
+ views/default/page/elements/topbar.php: Addressed several miscellaneous
+ todo's
+
+ * views/default/object/widget.php,
+ views/default/object/widget/elements/controls.php: Widget collapse button
+ uses elgg-toggler pattern
+
+ * views/default/page/layouts/widgets/add_button.php: Fixed widgets add
+ button
+
+ * views/default/object/plugin/advanced.php,
+ .../object/plugin/elements/dependencies.php: Plugin admin displays
+ dependencies again
+
+ * mod/twitterservice/start.php: Removed redundant requirements checking code
+
+ * views/default/admin/statistics/basic.php,
+ views/default/admin/statistics/numentities.php,
+ views/default/admin/statistics/overview.php: Refactored admin statistics
+ views -- no longer manually building elgg-module
+
+ * engine/lib/output.php: Added comment explaining purpose of regex
+
+ * engine/lib/output.php: elgg_normalize_url leaves #target and ?query urls
+ alone
+
+2011-03-01 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page/elements/messages.php: Fixes #3012 added hidden li
+
+ * js/lib/elgglib.js: cleaned up appending system messages since <ul> will
+ always be there
+
+ * install/ElggInstaller.php: Fixes #2929 Installer handles private default
+ access now
+
+2011-03-01 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page/layouts/content/filter.php: Filter tabs ordered
+ correctly
+
+2011-03-01 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * install/ElggInstaller.php: fixed bug where dataroot wasn't being set when
+ regenerating cache during the install
+
+2011-03-01 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css/elements/modules.php,
+ views/default/css/elements/navigation.php,
+ views/default/navigation/menu/site.php: Some fixes for site menu
+
+2011-03-01 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/actions/blog/save.php: because river entry is deleted we do not
+ need to do an update
+
+ * views/default/forms/comments/add.php: put margin back between longtext and
+ submit button for comment form
+
+ * mod/blog/actions/blog/save.php: fixes saving a new blog post - was trying
+ to do an update to without a guid
+
+ * engine/lib/views.php: Fixes #3033 removed use of set_view_location() from
+ core
+
+ * engine/classes/ElggMenuBuilder.php, engine/classes/ElggMenuItem.php,
+ engine/lib/admin.php, engine/lib/elgglib.php, engine/lib/users.php,
+ mod/embed/start.php, mod/messages/start.php, mod/reportedcontent/start.php,
+ views/default/admin/footer.php, views/default/admin/sidebar.php,
+ views/default/css/admin.php, views/default/css/elements/navigation.php,
+ views/default/input/longtext.php, views/default/page/elements/footer.php,
+ views/default/page/elements/topbar.php,
+ views/default/page/layouts/content/filter.php,
+ views/default/page/layouts/content/header.php,
+ views/default/river/item/controls.php: Fixes #3031 using 'priority' now
+
+ * engine/lib/users.php: Fixes #3010 moved topbar menu registration to page
+ setup so that the url override is registered
+
+ * mod/tinymce/views/default/js/tinymce.php: fixed tinymce js code so that at
+ least it doesn't have syntax errors and runtime exceptions
+
+ * mod/tinymce/start.php: tinymce longtext menu item also needed the longtext
+ class
+
+ * mod/tinymce/start.php: fixes tinymce longtext registration
+
+ * mod/embed/start.php: fixed embed longtext menu registration
+
+ * views/default/input/button.php, views/default/input/submit.php: added
+ better support for classes to buttons
+
+2011-03-01 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggMenuItem.php, js/lib/ui.js,
+ mod/profile/views/default/profile/owner_block.php,
+ .../views/default/object/reported_content.php,
+ views/default/core/account/login_dropdown.php,
+ views/default/object/plugin/advanced.php,
+ views/default/object/widget/elements/controls.php,
+ views/default/page/layouts/widgets/add_button.php,
+ views/default/river/item/controls.php: Fixes #3032: toggler pattern is now <a
+ href="#target" class="elgg-toggler">...</a> Wow, so much nicer.
+
+ * engine/classes/ElggMenuItem.php: Added support for "rel" to ElggMenuItem
+
+ * engine/classes/ElggMenuItem.php: Fixes #3023: added support for 'class'
+ argument in elgg_register_menu_item
+
+ * views/default/css/admin.php, views/default/css/elements/navigation.php,
+ views/default/navigation/menu/default.php,
+ views/default/navigation/menu/elements/group.php,
+ views/default/navigation/menu/elements/item.php,
+ views/default/navigation/menu/elements/section.php,
+ views/default/navigation/menu/metadata.php,
+ views/default/navigation/menu/page.php,
+ views/default/navigation/menu/site.php,
+ views/default/navigation/menu/user_hover.php,
+ views/default/page/elements/footer.php,
+ views/default/page/elements/topbar.php,
+ views/default/page/layouts/content/filter.php,
+ views/default/page/layouts/content/header.php: Refs #3021:
+ elgg-section-$section => elgg-menu-$menu-$section Added elgg-menu-hz for
+ horizontal menus
+
+ * mod/embed/start.php, mod/embed/views/default/embed/link.php: Fixes #2895:
+ Embed uses longtext menu -- I believe that covers *all* the menus we had
+ brought up!
+
+ * mod/tinymce/start.php, mod/tinymce/views/default/input/longtext.php,
+ mod/tinymce/views/default/js/tinymce.php,
+ mod/tinymce/views/default/tinymce/init.php, views/default/input/longtext.php:
+ Refs #2538: Cleaned up custom tinymce code into elgg.tinymce.*. Refs #2895:
+ TinyMCE makes use of longtext menu
+
+ * views/default/river/item/controls.php: Refs #2895: River items now emit a
+ "river" menu. Not confident on the name, just trying to keep things short
+ and sweet.
+
+ * mod/search/start.php, views/default/page/elements/header.php: Removed
+ header/extend in favor of just extending page/elements/header
+
+ * views/default/css/elements/navigation.php,
+ views/default/page/layouts/content/header.php: Refs #2895: Content header now
+ emits a "title" menu
+
+2011-03-01 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/actions/blog/save.php: Fixes #2425, #2427. Blog status for
+ published and draft correctly set the river items.
+
+2011-03-01 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/core/likes/display.php,
+ views/default/css/elements/navigation.php: core/likes/display uses
+ image-block component. ensures that the like icon is even with the "x users
+ liked this" text. Wondering if we should split the two up entirely.
+
+ * views/default/css/elements/navigation.php,
+ views/default/page/layouts/content/filter.php: Refs #2895: Converted content
+ filter to a menu, duplicated styles to mimic tabs... ick.
+
+2011-03-01 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/manifest.xml, mod/blog/start.php: blog plugin uses on_activate to
+ set its class or the upgrade event
+
+ * mod/groups/views/default/forms/groups/search.php,
+ mod/thewire/views/default/forms/thewire/add.php,
+ views/default/css/elements/buttons.php,
+ views/default/forms/members/name_search.php,
+ views/default/forms/members/tag_search.php,
+ views/default/forms/widgets/save.php, views/default/input/submit.php: brought
+ back the blue submit button
+
+ * views/default/css/elements/buttons.php: yuck - have to reset all the
+ styling from elgg-button for elgg-button-delete
+
+ * actions/admin/plugins/activate.php, actions/admin/plugins/deactivate.php:
+ Fixes #3013 activating/deactivating a plugin forwards to plugin page with
+ changed plugin given focus
+
+2011-03-01 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/bookmarks/pages/all.php: No need for ".=" here
+
+ * mod/groups/start.php: pg/groups/world => pg/groups/all
+
+2011-03-01 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/admin.php, engine/lib/widgets.php, mod/developers/start.php,
+ mod/diagnostics/start.php, mod/externalpages/start.php,
+ mod/logbrowser/start.php, mod/reportedcontent/start.php,
+ mod/uservalidationbyemail/start.php: Fixes #3014 using more standard
+ "register" in admin convenience function
+
+2011-03-01 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css/elements/navigation.php: Fixes for breadcrumbs and
+ metadata menus. Added basic styles for title menu
+
+ * views/default/core/likes/display.php: false is default for encode text in
+ output/url -- no need to specify
+
+2011-03-01 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/messageboard/start.php, .../views/default/forms/messageboard/add.php,
+ .../views/default/messageboard/css.php: cleaned up the css for messageboard
+
+ * mod/messageboard/languages/en.php,
+ .../views/default/annotation/messageboard.php,
+ .../views/default/forms/messageboard/add.php,
+ .../views/default/messageboard/messageboard.php,
+ .../default/river/object/messageboard/create.php,
+ .../views/default/widgets/messageboard/content.php,
+ .../views/default/widgets/messageboard/edit.php: cleaned up the messageboard
+ plugin further
+
+ * views/default/annotation/default.php,
+ views/default/annotation/generic_comment.php: finished making the "default"
+ view the default view for annotation rather than generic_comment
+
+2011-03-01 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/core/river/filter.php: Convert river filter javascript to
+ new style
+
+2011-03-01 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/annotation/default.php: improved the default annotation view
+
+
+2011-02-28 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page/elements/topbar.php: No more reason to explicitly add
+ elgg-menu-topbar class
+
+ * views/default/css/elements/navigation.php,
+ views/default/navigation/menu/site.php: Fixes for several menu issues
+
+ * views/default/page/elements/footer.php: No more need to explicitly include
+ elgg-menu-footer class
+
+ * views/default/navigation/menu/default.php: Always include name of menu in
+ menu classes
+
+ * mod/bookmarks/start.php, views/default/page/elements/sidebar.php: Refs
+ #2895: Renamed "page_links" to "extras" -- feels more semantic (facebook's
+ menu has actions such as unfriend, share, block)
+
+2011-02-27 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggPlugin.php, mod/categories/manifest.xml,
+ mod/categories/start.php: Fixes #3011. on_activate and on_deactivate work for
+ plugins now. Updated the categories plugin to use it.
+
+2011-02-27 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/views/default/object/blog.php,
+ mod/categories/views/default/output/categories.php,
+ views/default/css/elements/icons.php,
+ views/default/page/components/list/body.php: pushing categories to the next
+ line when viewing an entity
+
+ * views/default/js/admin.php: slide up system messages in admin area
+
+ * views/default/page/admin.php: fixed the AWHOL state of system messages on
+ admin pages
+
+ * .../views/default/admin/users/unvalidated.php,
+ .../forms/uservalidationbyemail/bulk_action.php: fixed bad return value in
+ unvalidated users bulk action form
+
+2011-02-26 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/forms/useradd.php: fixed useradd form
+
+ * engine/lib/admin.php, engine/lib/navigation.php: Fixes #2951 not
+ registering utilities menu item by default but added code to automatically
+ register a parent menu if not registered in admin menu registration function.
+ We lose the ability to set a weight on utilities.
+
+ * engine/lib/admin.php, engine/lib/widgets.php, mod/developers/start.php,
+ mod/diagnostics/start.php, mod/externalpages/start.php,
+ mod/logbrowser/start.php, mod/reportedcontent/start.php,
+ mod/uservalidationbyemail/start.php: simplified admin menu registration
+ function in preparation for adding sections
+
+ * install/ElggInstaller.php, install/languages/en.php: Fixes #2799 added
+ check for session.auto_start
+
+ * engine/lib/admin.php, views/default/css/admin.php,
+ views/default/page/admin.php: moved admin messages into admin page shell
+
+ * engine/lib/admin.php, install/ElggInstaller.php, languages/en.php,
+ views/default/css/admin.php, views/default/widgets/admin_welcome/content.php:
+ Fixes #2913 - directs the user to admin dashboard when installer finishes
+
+ * .../views/default/bookmarks/bookmarklet.php: Fixes #2977 changed title to
+ alt
+
+ * _graphics/friendspicker.png, actions/friends/collections/edit.php,
+ languages/en.php, pages/friends/collections/add.php,
+ pages/friends/collections/pickercallback.php,
+ views/default/core/friends/collections.php,
+ views/default/css/elements/forms.php, views/default/css/elements/misc.php,
+ views/default/forms/friends/collections/add.php,
+ views/default/forms/friends/collections/edit.php,
+ views/default/input/friendspicker.php: Fixes #2982 friends collections work
+ even if the code is convoluted and poorly written.
+
+ * .../notifications/subscriptions/forminternals.php: fixed notifications
+ plugin's hacked up friends picker...shudder
+
+ * mod/groups/lib/groups.php,
+ mod/groups/views/default/forms/groups/invite.php: fixed group invite form
+
+ * engine/lib/elgglib.php: fixed image size attributes added to "power by"
+ image
+
+2011-02-26 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggSite.php: Refs #2693 - Added pg/css and pg/js to the
+ list of public pages for walled garden.
+
+2011-02-26 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/friends/addcollection.php, actions/friends/collections/add.php,
+ actions/friends/collections/delete.php, actions/friends/collections/edit.php,
+ actions/friends/deletecollection.php, actions/friends/editcollection.php,
+ engine/lib/users.php, pages/friends/add.php, pages/friends/collections.php,
+ pages/friends/collections/add.php,
+ pages/friends/collections/pickercallback.php,
+ pages/friends/collections/view.php, pages/friends/edit.php,
+ pages/friends/pickercallback.php, views/default/core/friends/collection.php,
+ views/default/core/friends/collections.php,
+ views/default/core/friends/collectiontabs.php,
+ views/default/forms/friends/collectionfields.php,
+ views/default/forms/friends/collections/edit.php,
+ views/default/forms/friends/edit.php: Refs #2982 adding and deleting friend
+ collections works - editing does not
+
+ * engine/lib/views.php, mod/groups/views/default/forms/groups/invite.php,
+ pages/friends/pickercallback.php, views/default/core/friends/collection.php,
+ views/default/core/friends/picker.php, views/default/forms/friends/edit.php,
+ views/default/input/friendspicker.php: fixed friends picker js include
+
+2011-02-26 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css/elements/navigation.php: Switching elgg-menu-metadata to
+ inline-block method of declaring a horizontal menu
+
+ * mod/groups/views/default/group/default.php,
+ mod/thewire/views/default/thewire/metadata.php, views/default/css/admin.php,
+ views/default/css/elements/components.php,
+ views/default/css/elements/navigation.php,
+ views/default/navigation/menu/metadata.php,
+ views/default/object/plugin/advanced.php,
+ views/default/page/components/list/body.php, views/default/user/default.php:
+ Refs #2895: .elgg-list-metadata => .elgg-menu-metadata. Still not using menu
+ system yet, though
+
+ * views/default/css/elements/navigation.php: .elgg-menu enhancement for
+ horizontal menus
+
+ * views/default/css/elements/layout.php,
+ views/default/css/elements/navigation.php,
+ views/default/navigation/breadcrumbs.php: .elgg-menu is no longer trivial
+
+ * engine/lib/elgglib.php: Added explicit height and width to powered_by_elgg
+ icon
+
+ * views/default/css/elements/icons.php: Fixes #2691: Switching elgg-icon to
+ display:inline-block -- matches behavior of <img> tag
+
+2011-02-25 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/reportedcontent/start.php, .../views/default/reportedcontent/css.php:
+ Converted report-this icon to be compatible with elgg_view_icon
+
+ * engine/lib/elgglib.php, mod/reportedcontent/start.php,
+ .../views/default/reportedcontent/css.php,
+ .../views/default/reportedcontent/footer_link.php,
+ views/default/page/elements/footer.php: Refs #2895: Removed footer/links
+ view. Moved report-this link into alternate footer menu
+
+ * engine/lib/elgglib.php, views/default/css/elements/layout.php,
+ views/default/css/elements/navigation.php,
+ views/default/page/elements/footer.php: Refs #2895: Added support for an
+ "alt" section in the footer menu. Put "powered by Elgg" badge in here
+
+ * js/lib/elgglib.js, js/lib/session.js: Refs #2538: Functions don't need
+ double-namespacing
+
+ * views/default/css/elements/components.php,
+ views/default/css/elements/misc.php,
+ views/default/css/elements/navigation.php: Using shorthand in css to scrunch
+ it a bit
+
+ * views/default/css/elements/layout.php,
+ views/default/css/elements/page_layout.php, views/default/css/elgg.php:
+ Converted css/elements/page_layout to layout. Now we have a bunch of nice,
+ terse, 1-word names :)
+
+ * engine/lib/admin.php, engine/lib/elgglib.php, engine/lib/users.php,
+ views/default/css/elements/navigation.php,
+ views/default/css/elements/page_layout.php,
+ views/default/page/elements/topbar.php: Refs #2895: Converted topbar to one
+ menu (felt dirty using two). Fixed styles.
+
+ * engine/lib/users.php, mod/messages/start.php,
+ mod/messages/views/default/messages/topbar.php: Refs #2895: Messages now uses
+ new topbar menu
+
+ * mod/bookmarks/start.php, .../views/default/bookmarks/page_links.php,
+ views/default/page/elements/page_links.php,
+ views/default/page/elements/sidebar.php: Refs #2895: Converted page_links
+ into a menu. Bookmarks now uses it
+
+ * engine/lib/admin.php, engine/lib/users.php,
+ views/default/page/elements/topbar.php: Refs #2895: Made topbar into 2 menus.
+ CSS will have to be fixed
+
+ * engine/lib/navigation.php: Corrects bug that occurred when ElggMenuItem is
+ passed
+
+ * mod/blog/views/default/object/blog.php, mod/groups/start.php,
+ .../views/default/groups/invitationrequests.php,
+ .../views/default/groups/membershiprequests.php,
+ .../views/default/object/groupforumtopic.php,
+ mod/messages/views/default/object/messages.php,
+ .../notifications/subscriptions/forminternals.php,
+ mod/profile/views/default/profile/owner_block.php,
+ views/default/annotation/default.php,
+ views/default/annotation/generic_comment.php,
+ views/default/annotation/likes.php, views/default/core/friends/picker.php,
+ views/default/core/friends/tablelist.php,
+ views/default/forms/friends/edit.php, views/default/river/item/image.php,
+ views/default/river/relationship/friend/create.php,
+ views/default/user/default.php, views/default/widgets/friends/content.php:
+ Converted all uses of profile/icon in core + plugins to elgg_view_entity_icon
+
+ * engine/lib/navigation.php: Emit a warning + debug info when an attempt to
+ register a menu item fails
+
+ * engine/classes/ElggMenuItem.php: Supporting is_action in ElggMenuItem
+
+ * views/installation/forms/install/template.php,
+ views/installation/install/pages/admin.php,
+ views/installation/install/pages/database.php,
+ views/installation/install/pages/settings.php: Cleaned up some js in the
+ installer
+
+ * views/installation/input/checkbox.php,
+ views/installation/input/checkboxes.php: Updated input/checkboxes code in
+ installation viewtype
+
+ * views/installation/install/forms/admin.php,
+ views/installation/install/forms/database.php,
+ views/installation/install/forms/settings.php,
+ views/installation/install/forms/template.php,
+ views/installation/install/pages/admin.php,
+ views/installation/install/pages/database.php,
+ views/installation/install/pages/settings.php: Converted installation forms
+ to use elgg_view_form and the /forms/ directory
+
+2011-02-24 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/js/admin.php: Fixes #2998. Updated admin JS for dnd plugin
+ reordering with new plugin layout.
+
+2011-02-24 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggAnnotation.php: Fixes #2960 removing river entry for
+ deleted annotation
+
+ * views/default/css/admin.php, views/default/css/elements/reset.php: fixed
+ dragging/scrolling issue caused by overflow-y on body
+
+ * engine/classes/ElggMenuItem.php: fixed typo in elgg menu updates from last
+ night
+
+ * engine/lib/users.php, languages/en.php, pages/friends/collections.php,
+ views/default/css/elements/misc.php: fixing friends collections for backward
+ compatibility
+
+ * engine/classes/ElggMenuItem.php,
+ views/default/navigation/menu/elements/item.php: finished the implementation
+ of non-links in menu system
+
+ * engine/classes/ElggMenuItem.php,
+ mod/profile/views/default/profile/owner_block.php,
+ views/default/navigation/menu/elements/item.php: using getContent() in menu
+ system in preparation for supporting non-links
+
+ * engine/classes/ElggMenuBuilder.php, engine/classes/ElggMenuItem.php,
+ engine/lib/admin.php, engine/lib/deprecated-1.8.php,
+ engine/lib/navigation.php, engine/lib/user_settings.php,
+ engine/lib/users.php, engine/lib/views.php, mod/bookmarks/start.php,
+ mod/developers/start.php, mod/file/views/default/file/typecloud.php,
+ mod/invitefriends/start.php, mod/messages/start.php,
+ mod/notifications/start.php, mod/pages/lib/pages.php: Fixes #2997 - href used
+ instead of url in menu system
+
+ * engine/classes/ElggMenuBuilder.php, engine/classes/ElggMenuItem.php,
+ engine/lib/admin.php, engine/lib/deprecated-1.8.php,
+ engine/lib/user_settings.php, engine/lib/users.php, engine/lib/views.php,
+ mod/bookmarks/start.php, mod/developers/start.php,
+ mod/file/views/default/file/typecloud.php, mod/invitefriends/start.php,
+ mod/messages/start.php, mod/notifications/start.php, mod/pages/lib/pages.php,
+ views/default/forms/admin/menu/save.php: Refs #2997 switching from title to
+ text for menu items
+
+ * views/default/core/friends/tablelist.php,
+ views/default/css/elements/forms.php, views/default/css/elements/misc.php:
+ moved another friends picker css section to forms css view
+
+ * views/default/core/avatar/crop.php, views/default/core/avatar/upload.php,
+ views/default/css/elements/misc.php, views/default/forms/avatar/crop.php:
+ cutting down the amount of css required for the avatar page
+
+ * views/default/core/river/body.php, views/default/core/river/controls.php,
+ views/default/core/river/footer.php, views/default/core/river/image.php,
+ views/default/river/item.php, views/default/river/item/body.php,
+ views/default/river/item/controls.php, views/default/river/item/footer.php,
+ views/default/river/item/image.php: organized the river views according to
+ the subview pattern
+
+2011-02-23 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css/elements/modules.php: Adjusting offset for dropdown
+ module
+
+ * engine/lib/admin.php: Simplify registration of jeditable library
+
+ * views/default/css/elements/components.php,
+ views/default/css/elements/layout_objects.php, views/default/css/elgg.php:
+ Refs #2993: Changed css layout_objects to components
+
+ * views/default/css/elgg.php: Refs #2995: Including css/elements/buttons in
+ css/elgg
+
+ * views/default/css/elements/buttons.php,
+ views/default/css/elements/forms.php, views/default/css/elements/misc.php:
+ Fixes #2995: buttons get their own css file
+
+ * mod/blog/views/default/object/blog.php,
+ mod/bookmarks/views/default/object/bookmarks.php,
+ mod/file/views/default/object/file.php,
+ mod/groups/views/default/group/default.php,
+ .../views/default/object/groupforumtopic.php,
+ mod/pages/views/default/object/page_top.php,
+ mod/thewire/views/default/object/thewire.php,
+ views/default/object/default.php,
+ views/default/object/elements/list_body.php,
+ views/default/page/components/list/body.php, views/default/user/default.php:
+ Fixes #2992: moved object/elements/list_body to page/components/list/body
+
+ * js/lib/ui.js: Fixes #2976: Removed second toggler implementation
+
+ * mod/blog/lib/blog.php, mod/file/index.php,
+ mod/file/views/default/object/file.php,
+ .../views/default/groups/invitationrequests.php,
+ .../views/default/groups/membershiprequests.php, mod/messages/read.php,
+ .../views/default/forms/messages/process.php,
+ mod/messages/views/default/object/messages.php, mod/pages/view.php,
+ mod/profile/views/default/profile/owner_block.php,
+ .../views/default/object/reported_content.php,
+ .../views/default/thewire/profile_status.php,
+ views/default/admin/plugins/advanced.php,
+ views/default/annotation/generic_comment.php,
+ views/default/annotation/likes.php,
+ views/default/core/account/login_dropdown.php,
+ views/default/core/friends/picker.php,
+ views/default/forms/profile/fields/reset.php, views/default/input/button.php,
+ views/default/object/plugin/advanced.php,
+ views/default/page/layouts/content/header.php,
+ views/default/page/layouts/widgets/add_button.php: Every occurrence of
+ elgg-button-$type needs an elgg-button base class declaration -- or should we
+ remove that requirement?
+
+ * mod/profile/views/default/profile/owner_block.php,
+ .../views/default/object/reported_content.php,
+ views/default/core/river/controls.php, views/default/core/river/footer.php,
+ views/default/object/widget/elements/controls.php,
+ views/default/object/widget/elements/settings.php,
+ views/default/page/layouts/widgets/add_button.php,
+ views/default/page/layouts/widgets/add_panel.php: Refs #2976: Converted most
+ markup to use elgg-toggler elgg-toggles-* pattern
+
+ * views/default/css/elements/page_layout.php,
+ views/default/page/default.php: Fixes #2957: elgg-page-classic =>
+ elgg-page-default
+
+ * views/default/page/admin.php, views/default/page/layouts/one_column.php,
+ views/default/page/layouts/one_sidebar.php: Moved elgg-inner out of layouts
+ and into the page shell
+
+ * mod/messageboard/views/default/messageboard/js.php,
+ mod/messages/views/default/object/messages.php,
+ mod/thewire/views/default/thewire/css.php,
+ mod/tinymce/views/default/tinymce/css.php,
+ views/default/annotation/generic_comment.php,
+ views/default/annotation/likes.php, views/default/css/ie.php,
+ views/default/css/ie6.php, views/default/page/upgrade.php: Converted
+ delete-button to elgg-button-delete throughout plugins
+
+ * views/default/css/elements/forms.php, views/default/css/elements/misc.php:
+ Moved elgg-button-dropdown to forms
+
+ * views/default/css/elements/chrome.php: Cleanup of css/elements/chrome.php
+
+ * views/default/css/elements/forms.php: Converted delete-button to
+ elgg-button-delete. This breaks some things because the semantics of the two
+ are not equivalent. .delete-button just really needed to die
+
+ * views/failsafe/canvas/default.php, views/foaf/canvas/default.php,
+ views/ical/canvas/default.php, views/json/canvas/default.php,
+ views/opendd/canvas/default.php, views/php/canvas/default.php: Deleting
+ deprecated canvas/ directory from all viewtypes
+
+ * views/default/navigation/menu/default.php: DRY'ed up default menu a bit
+
+2011-02-22 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/page/shells/theme_preview.php,
+ .../views/default/page/theme_preview.php: Moved theme_preview page shell out
+ into page/
+
+ * views/default/css/elements/page_layout.php,
+ views/default/page/elements/sidebar_alt.php,
+ views/default/page/layouts/one_column.php,
+ views/default/page/layouts/one_sidebar.php,
+ views/default/page/layouts/two_sidebar.php: Trying to simplify layout css:
+ nixed elgg-aside .elgg-sidebar.elgg-alt => .elgg-sidebar-alt (similar to
+ .elgg-image-alt)
+
+ * views/default/admin/footer.php, views/default/admin/header.php,
+ views/default/page/admin.php, views/default/page/layouts/admin.php: extracted
+ admin header, footer to admin/*. Moved pageshell code from admin layout to
+ admin pageshell.
+
+ * install/css/install.css, views/installation/install/footer.php,
+ views/installation/install/header.php,
+ views/installation/install/sidebar.php, views/installation/page/default.php,
+ views/installation/page/elements/footer.php,
+ views/installation/page/elements/header.php,
+ views/installation/page/elements/sidebar.php: Move install
+ footer/header/sidebar into page/elements. Converted CSS to use more standard
+ Elgg framework objects
+
+ * views/default/page/elements/content_header.php,
+ .../page/elements/content_header_member.php: Removing holdovers from elgg.com
+
+ * views/failsafe/page/default.php, views/failsafe/page/shells/default.php,
+ views/foaf/page/default.php, views/foaf/page/shells/default.php,
+ views/ical/page/default.php, views/ical/page/shells/default.php,
+ views/installation/page/default.php,
+ views/installation/page/shells/default.php, views/json/page/default.php,
+ views/json/page/shells/default.php, views/opendd/page/default.php,
+ views/opendd/page/shells/default.php, views/php/page/default.php,
+ views/php/page/shells/default.php, views/rss/page/default.php,
+ views/rss/page/shells/default.php, views/xml/page/default.php,
+ views/xml/page/shells/default.php: Moved page/shells/* to page/*
+
+ * mod/embed/views/default/embed/css.php, views/default/css/ie.php,
+ views/default/export/entity.php: entity-listing => elgg-image-block,
+ margin-top => mtm
+
+ * mod/groups/lib/groups.php,
+ mod/groups/views/default/forms/groups/delete.php,
+ mod/groups/views/default/forms/groups/invite.php,
+ mod/groups/views/default/forms/groups/search.php,
+ mod/groups/views/default/groups/css.php,
+ .../views/default/groups/group_sort_menu.php,
+ .../views/default/groups/invitationrequests.php,
+ .../views/default/groups/membershiprequests.php,
+ .../default/groups/profile/activity_module.php,
+ .../views/default/groups/profile/buttons.php,
+ .../views/default/groups/profile/profile_block.php,
+ .../views/default/groups/profile/widgets.php,
+ .../views/default/groups/sidebar/members.php: Touch ups of groups plugin
+
+ * mod/embed/views/default/embed/embed.php,
+ mod/embed/views/default/embed/js.php,
+ mod/embed/views/default/embed/layouts/gallery.php,
+ mod/embed/views/default/embed/layouts/list.php,
+ mod/embed/views/default/embed/lightbox_init.php,
+ mod/embed/views/default/embed/link.php,
+ mod/embed/views/default/embed/upload/content.php,
+ mod/embed/views/default/group/default/embed.php,
+ mod/embed/views/default/object/file/embedlist.php: Touch ups for the embed
+ plugin -- this one needs some serious work still, though...
+
+ * views/default/output/url.php: Utilizing elgg_extract in output/url
+
+ * js/lib/configuration.js: Added elgg.get_site_url(), so people don't have
+ to deal with the config object.
+
+ * mod/diagnostics/actions/download.php,
+ .../views/default/admin/utilities/diagnostics.php,
+ .../views/default/diagnostics/forms/download.php: Touch ups for diagnostics
+ plugin
+
+ * views/default/admin/plugin_settings.php,
+ views/default/core/settings/tools.php,
+ views/default/forms/plugins/settings/save.php: Deprecated
+ (user)settings/$plugin_id/edit in favor of plugins/$plugin_id/(user)settings
+
+ * mod/bookmarks/start.php: Default permissions for new actions is logged_in,
+ so no need to make that explicit
+
+ * mod/blog/lib/blog.php, mod/blog/views/default/forms/blog/save.php,
+ mod/blog/views/default/input/datetime.php,
+ mod/blog/views/default/js/blog/save_draft.php: Cleaned up blog js
+
+2011-02-22 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * index.php: Fixes #2952 less silliness in Elgg now
+
+ * engine/lib/pageowner.php: Refs #2790 - fixes it for real this time
+
+ * engine/lib/pageowner.php: Fixes #2790 adds fix from 1.7 branch into trunk
+
+2011-02-22 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * crontab.example, documentation/examples/crontab.example: Moved
+ crontab.example into documentation directory
+
+2011-02-22 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/developers/actions/developers/settings.php,
+ mod/developers/languages/en.php, mod/developers/manifest.xml,
+ .../views/default/admin/developers/settings.php,
+ mod/developers/views/default/developers/css.php,
+ .../views/default/forms/developers/settings.php: started adding a settings
+ page
+
+2011-02-22 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * : hmmm... how did those get there?
+
+ * mod/blog/views/default/object/blog.php,
+ mod/bookmarks/views/default/object/bookmarks.php,
+ mod/file/views/default/object/file.php,
+ mod/groups/views/default/group/default.php,
+ .../views/default/object/groupforumtopic.php,
+ mod/pages/views/default/object/page_top.php,
+ mod/thewire/views/default/object/thewire.php,
+ views/default/object/default.php, views/default/page/layouts/content.php,
+ views/default/user/default.php: Fixes #2950: All files that were calling into
+ layout/* now use the up-to-date locations
+
+ * .../views/default/bookmarks/page_links.php,
+ mod/bookmarks/views/default/object/bookmarks.php,
+ .../views/default/theme_preview/icons.php,
+ mod/thewire/views/default/thewire/metadata.php,
+ .../admin/appearance/profile_fields/list.php,
+ views/default/core/likes/display.php, views/default/icon/user/default.php,
+ views/default/navigation/menu/metadata.php,
+ views/default/navigation/menu/site.php, views/default/output/tagcloud.php,
+ views/default/output/tags.php, views/default/page/elements/page_links.php,
+ views/default/page/elements/topbar.php,
+ views/default/river/relationship/friend/create.php: Fixes #2980: DRY'ed up
+ all plugins to use elgg_view_icon instead of generating their own html
+
+ * views/default/forms/comments/inline.php: Deprecated forms/comments/inline
+ in favor of passing inline => TRUE to forms/comments/add
+
+ * views/default/core/river/footer.php: core river footer taking advantage of
+ new DRY comment form
+
+ * engine/lib/views.php: Refs #2980: Added an elgg_view_icon function
+
+ * views/default/graphics/ajax_loader.php: Typo in ajax_loader
+
+ * views/default/navigation/listtype.php,
+ views/default/navigation/topbar_tools.php: Cleaned up some nav views
+
+ * views/default/navigation/menu/metadata.php: Refs #2950:
+ layout/objects/list/metadata => navigation/menu/metadata
+
+ * views/default/object/elements/list_body.php,
+ views/default/page/components/list/body.php,
+ views/default/page/layouts/content.php,
+ views/default/page/layouts/widgets.php: Refs #2950: update locations of
+ layout elements + moved page/components/list/body into
+ object/elements/list_body -- not sure if this will be the final location
+
+ * views/default/navigation/viewtype.php: Added appropraite @deprecated tag
+ to navigation/viewtype
+
+ * views/default/profile/icon.php: Included proper deprecation notice with
+ deprecated view
+
+ * views/default/layout/objects/list/body.php,
+ views/default/layout/objects/list/metadata.php,
+ views/default/layout/shells/content/filter.php,
+ views/default/layout/shells/content/footer.php,
+ views/default/layout/shells/content/header.php,
+ views/default/layout/shells/content/sidebar.php,
+ views/default/layout/shells/widgets/add_button.php,
+ views/default/layout/shells/widgets/add_panel.php,
+ views/default/page/components/list/body.php,
+ views/default/page/layouts/content/filter.php,
+ views/default/page/layouts/content/footer.php,
+ views/default/page/layouts/content/header.php,
+ views/default/page/layouts/content/sidebar.php,
+ views/default/page/layouts/widgets/add_button.php,
+ views/default/page/layouts/widgets/add_panel.php: Refs #2950: Moved /layout/
+ views into /page/ dir -- still not satisfied with page/components/list/body,
+ page/layouts/content/* and page/layouts/widgets/add_button
+
+ * views/default/forms/comments/add.php: Dry'ed up forms/comments/add a bit
+
+ * views/default/forms/comments/add.php: merged comments/inline and
+ comments/add forms
+
+ * views/default/forms/friends/edit.php: Deleted completed @todo
+
+ * pages/friends/add.php, pages/friends/edit.php,
+ views/default/forms/friends/edit.php: forms/friends/edit no longer contains
+ input/form logic
+
+ * views/default/admin/users/add.php, views/default/forms/useradd.php:
+ Extracted input/form login from forms/useradd
+
+ * engine/lib/admin.php, views/default/admin/components/invalid_plugin.php,
+ views/default/admin/components/plugin.php,
+ .../admin/components/plugin_dependencies.php,
+ views/default/admin/components/plugin_settings.php,
+ views/default/admin/plugin_settings.php,
+ views/default/admin/plugins/advanced.php,
+ views/default/core/settings/tools.php,
+ views/default/core/settings/tools/plugin.php,
+ .../forms/admin/plugins/simple_update_states.php,
+ views/default/forms/plugins/usersettings/save.php,
+ views/default/js/admin.php, views/default/object/plugin.php,
+ views/default/object/plugin/advanced.php,
+ .../object/plugin/elements/dependencies.php,
+ views/default/object/plugin/invalid.php,
+ views/default/object/plugin/simple.php: Refs #2950: Cleanup of plugin-related
+ view structure
+
+ * views/default/output/longtext.php: output/longtext can now apply arbitrary
+ html attributes to the wrapper div
+
+ * views/default/core/dashboard/blurb.php: Cleaned up core/dashboard/blurb to
+ take advantage of the new <div> wrapper around output/longtext
+
+2011-02-21 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * pages/settings/tools.php: Removed use of deprecated set_page_owner
+
+ * views/default/admin/sidebar.php, views/default/admin/sidebar/menu.php,
+ views/default/page/layouts/admin.php: Refs #2950: Cleaned up admin sidebar
+ code
+
+ * engine/lib/deprecated-1.8.php,
+ views/default/css/elements/layout_objects.php,
+ views/default/page/elements/owner_block.php: elgg-owner-block-menu =>
+ elgg-menu-owner-block
+
+ * views/default/admin/sidebar/menu.php,
+ views/default/layout/shells/admin/menu.php,
+ views/default/page/layouts/admin.php: Refs #2950: layout/shells/admin/menu =>
+ admin/sidebar/menu
+
+ * engine/lib/views.php, views/default/page/admin.php,
+ views/default/page/default.php, views/default/page/shells/admin.php,
+ views/default/page/shells/default.php, views/default/page/shells/upgrade.php,
+ views/default/page/shells/walled_garden.php, views/default/page/upgrade.php,
+ views/default/page/walled_garden.php: Refs #2950: Move page/shells/ directly
+ under /page/ since nowhere else in views do we use a shells directory.
+
+ * views/default/layout/objects/widget/controls.php,
+ views/default/layout/objects/widget/settings.php,
+ views/default/object/widget.php,
+ views/default/object/widget/elements/controls.php,
+ views/default/object/widget/elements/settings.php,
+ views/default/page/components/widget.php: Refs #2950: Moved widget code to
+ object/widget/*
+
+2011-02-21 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/pageowner.php: Default page owner code now ignores the query.
+ Works for pages like pg/bookmarks/add/34?address=http://google.com
+
+2011-02-21 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php: fixed caching of user avatars
+
+ * engine/lib/admin.php, engine/lib/views.php, mod/bookmarks/start.php,
+ mod/categories/start.php, mod/custom_index/start.php,
+ .../views/default/page/shells/theme_preview.php, mod/embed/start.php,
+ mod/file/start.php, mod/groups/start.php, mod/messages/start.php,
+ mod/notifications/start.php, mod/pages/start.php, mod/profile/start.php,
+ mod/reportedcontent/start.php, mod/search/start.php, mod/tinymce/start.php,
+ mod/twitter/start.php, mod/zaudio/start.php, views/default/css.php,
+ views/default/css/elements/layout_objects.php, views/default/css/elgg.php,
+ views/default/css/screen.php, views/default/page/shells/default.php: Fixes
+ #2934 switching to css/elgg for css view since using a print viewtype is a
+ good idea and screen would become a confusing idea
+
+ * actions/likes/add.php, engine/classes/ElggEntity.php, languages/en.php,
+ views/default/core/likes/display.php, views/default/core/river/controls.php:
+ fixes #2885 #2569 likes controlled by canAnnotate() with plugin hook
+
+ * engine/classes/ElggEntity.php, engine/classes/ElggGroup.php,
+ engine/classes/ElggObject.php, engine/classes/ElggUser.php,
+ mod/blog/classes/ElggBlog.php, mod/thewire/classes/ElggWire.php,
+ mod/thewire/start.php, views/default/core/river/controls.php: Fixes #2971
+ added canComment() method and implemented it for ElggBlog
+
+2011-02-21 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/plugins/activate.php,
+ actions/admin/plugins/activate_all.php, actions/admin/plugins/deactivate.php,
+ actions/admin/plugins/deactivate_all.php,
+ actions/admin/plugins/set_priority.php,
+ actions/admin/plugins/simple_update_states.php, install/ElggInstaller.php,
+ languages/en.php: Fixes #2452. Removed the first admin installation notice.
+ It was just a reminder to his "save" on the simple plugins screen. This is
+ pretty obvious.
+
+ * engine/lib/upgrades/2010050701.php: Fixes #2310. Rewriting
+ disable_registration to allow_registration in walled garden upgrade.
+
+ * mod/bookmarks/actions/bookmarks/save.php,
+ mod/messageboard/actions/add.php,
+ mod/messageboard/views/default/messageboard/js.php: Fixes #2719. Removing
+ hack from bookmarks add. Now appends http:// to www.example.com and validates
+ that.
+
+2011-02-20 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/actions/blog/save.php, mod/blog/lib/blog.php: fixed blog sticky
+ forms
+
+ * mod/file/index.php, mod/file/start.php, mod/file/upload.php,
+ mod/file/view.php, mod/groups/lib/discussion.php, mod/groups/start.php,
+ mod/pages/friends.php, mod/pages/index.php, mod/pages/start.php,
+ mod/thewire/start.php: Fixes #2970 updated groups, file, pages, and wire
+ plugins for automatic page owner setting
+
+ * mod/bookmarks/actions/bookmarks/save.php: fixed sticky forms for bookmarks
+
+
+ * mod/bookmarks/views/default/object/bookmarks.php: fixed copy and paste
+ error in bookmarks
+
+ * mod/blog/lib/blog.php, mod/bookmarks/pages/add.php,
+ mod/bookmarks/pages/all.php, mod/bookmarks/pages/edit.php,
+ mod/bookmarks/pages/friends.php, mod/bookmarks/pages/owner.php,
+ mod/bookmarks/pages/view.php, mod/bookmarks/start.php: Refs #2970 updated
+ blog and bookmarks plugins
+
+2011-02-20 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/upgrades/create_upgrade.php: Fixed a few bugs with
+ create_upgrade.php. It now also automatically increments version.php.
+
+ * version.php: Refs #2049: Missed version.php.
+
+2011-02-20 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/pageowner.php: added code to figure out page owner rather than
+ explicitly setting in all the plugin page handlers
+
+2011-02-20 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * ..._svn-custom_profile_fields-390ac967b0bb5665.php: Fixes #2049. Created
+ migration for 1.7 custom profile fields to 1.8.
+
+ * mod/groups/actions/delete.php: Refs #2787, #2956: Merged fix for deleting
+ group icon files on group delete to trunk.
+
+ * views/default/core/river/filter.php: Refs #2697, #2956. Ported fix to show
+ users and groups in river filter to trunk.
+
+ * engine/lib/actions.php: Refs #2833, #2956. Merged 1.7's action timeout
+ changes to 1.8.
+
+ * engine/tests/regression/trac_bugs.php: Refs #2956. Merged left out merges
+ from r2799 to trunk.
+
+ * engine/lib/elgglib.php: Refs #2749, #2956. Merged elgg_depracated_notice()
+ fixes to trunk.
+
+ * engine/lib/configuration.php: Refs #2793, #2956. Ported
+ run_function_once() and datalist_get/set() changes for values > 32 chars to
+ trunk.
+
+ * engine/lib/configuration.php: Refs #2813, #2956. Ported get_config()
+ returns null to 1.8's get_config() and elgg_get_config().
+
+ * engine/lib/notification.php: Refs #2617, #2956: Merged email notification
+ exception message fix in r7926 to trunk.
+
+ * mod/file/start.php: Refs #2765, #2956. Merged r7830 fix for group files to
+ trunk.
+
+ * engine/classes/ElggEntity.php, engine/tests/objects/entities.php: Fixes
+ #2963: Rewrote ElggEntity->setMetadata() because yikes. Wrote unit tests for
+ setting metadata on saved / unsaved entities.
+
+2011-02-20 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page/layouts/admin.php: only include footer/analytics view
+ once on admin pages
+
+2011-02-20 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../actions/resend_validation.php,
+ mod/uservalidationbyemail/languages/en.php,
+ mod/uservalidationbyemail/lib/functions.php,
+ mod/uservalidationbyemail/start.php,
+ .../views/default/admin/users/unvalidated.php,
+ .../forms/uservalidationbyemail/bulk_action.php,
+ .../views/default/uservalidationbyemail/js.php,
+ .../uservalidationbyemail/unvalidated_user.php: Fixes #2658. Merged
+ uservalidationbyemail changes from 1.7 to 1.8. This plugin needs cleanup.
+
+ * engine/lib/widgets.php: Fixed problems with user-self registration if
+ default widgets are set.
+
+ * js/lib/ui.js: Removing more debug code.
+
+ * js/lib/ui.js: Removing debug code from previous.
+
+ * js/lib/ui.js: Fixes #2947: User hover menu attached to body and shows
+ regardless of overflow.
+
+ * mod/bookmarks/actions/bookmarks/save.php: Fixes #2719: Addresses are
+ checked and normalized (and checked again) for bookmarks.
+
+2011-02-19 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/messages/views/default/forms/messages/send.php: Can send messages to
+ non-friends.
+
+ * languages/en.php, views/default/admin/appearance/default_widgets.php:
+ Added instructions for default widgets.
+
+ * actions/widgets/add.php: No need to say the widget was added because we
+ can see it happen.
+
+ * views/default/css/admin.php: Copied all the icons into the admin theme.
+
+ * install/ElggInstaller.php: Installation loads 3 default widgets for the
+ admin dashboard.
+
+ * views/default/css/elements/icons.php: Refs #2961: Restoring old icon CSS
+ for sprites and hover menu.
+
+ * mod/messageboard/views/default/messageboard/js.php: Fixes #2962. I hate
+ ie.
+
+ * mod/messageboard/actions/add.php, mod/messageboard/actions/delete.php,
+ mod/messageboard/ajax_endpoint/load.php, mod/messageboard/history.php,
+ mod/messageboard/index.php, mod/messageboard/languages/en.php,
+ mod/messageboard/manifest.xml, mod/messageboard/pages/owner.php,
+ mod/messageboard/start.php, .../views/default/annotation/messageboard.php,
+ mod/messageboard/views/default/messageboard/js.php,
+ .../default/messageboard/messageboard_content.php,
+ .../views/default/widgets/messageboard/content.php,
+ .../views/default/widgets/messageboard/edit.php: Refs #2916. More cleanup of
+ the messageboard widget.
+
+ * views/default/admin/appearance/default_widgets.php: Refs #2753. Missed
+ this one.
+
+ * js/lib/ajax.js: elgg.action() now supports full URLs.
+
+2011-02-19 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/tinymce/views/default/input/longtext.php: fixed tinymce "remove
+ editor" javascript
+
+ * languages/en.php: updated language string for comments
+
+2011-02-19 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * js/lib/elgglib.js: elgg.normalize_url() JS does the same as
+ elgg_normalize_url() PHP.
+
+2011-02-19 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/layout/shells/custom_index.php,
+ .../views/default/page/layouts/custom_index.php: updated the custom index for
+ new views layout structure
+
+ * mod/notifications/start.php: fixed the call to unextend the user settings
+ for notifications
+
+ * views/default/page/elements/messages.php: system messages use autop() for
+ formatting rather than output/longtext
+
+ * views/default/css/elements/chrome.php,
+ views/default/forms/comments/add.php,
+ views/default/page/elements/comments.php: improved the styling of the comment
+ area
+
+ * languages/en.php, mod/blog/languages/en.php, mod/blog/lib/blog.php,
+ mod/blog/views/default/object/blog.php,
+ mod/bookmarks/views/default/object/bookmarks.php,
+ mod/file/views/default/object/file.php,
+ mod/thewire/views/default/object/thewire.php: Fixes #2824 moved byline text
+ in core language file
+
+2011-02-19 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * js/lib/ui.js: Avatar menus use live() so they'll work with content
+ inserted into the dom.
+
+2011-02-19 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css/elements/chrome.php,
+ views/default/css/elements/typography.php, views/default/output/longtext.php:
+ added elgg-output class for displaying user input with typical styling for
+ lists and tables
+
+ * engine/lib/views.php: fixed typo
+
+ * views/default/page/elements/comments.php: another work around to suppress
+ incorrect warnings from elgg_view()
+
+ * views/default/input/longtext.php: added a work around for injecting
+ internal* variables to handle deprecation code - this prevents warnings from
+ being emitted for no reason
+
+ * mod/bookmarks/views/default/object/bookmarks.php,
+ views/default/css/elements/icons.php,
+ views/default/css/elements/layout_objects.php,
+ views/default/css/elements/navigation.php,
+ views/default/css/elements/page_layout.php,
+ views/default/layout/objects/list/body.php,
+ views/default/output/tagcloud.php, views/default/output/tags.php: improved
+ icon css so that they do not require having display: block
+
+ * views/default/css/screen.php: removed a $CONFIG usage in css/screen view
+
+2011-02-19 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/annotation/generic_comment.php: Genericked up
+ annotation/generic_comment view to allow reuse in plugins.
+
+ * install/ElggInstaller.php: Fixes #2959: Removed engine/lib/install.php
+ from ElggInstaller since it's no longer required.
+
+2011-02-19 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/core/likes/display.php: fixed typo on function name
+
+2011-02-19 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css/elements/page_layout.php,
+ views/default/css/elements/typography.php: Moving elgg-heading-main into
+ typography
+
+ * views/default/css/elements/page_layout.php: That wasn't supposed to be
+ there...
+
+ * views/default/css/elements/page_layout.php,
+ views/default/css/elements/typography.php: Moved elgg-heading-site into
+ typography
+
+2011-02-19 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/messageboard/actions/add.php, mod/messageboard/start.php,
+ .../views/default/forms/messageboard/add.php,
+ .../views/default/messageboard/forms/add.php,
+ mod/messageboard/views/default/messageboard/js.php,
+ .../views/default/widgets/messageboard/content.php: Refs #2916: Moved
+ messageboard js into elgg.messageboard object. Moved forms into
+ forms/messageboard. Can post now, but wow this plugin needs cleaned up.
+
+2011-02-19 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/messages/views/default/messages/topbar.php: More consistent way of
+ building topbar item for messages plugin
+
+2011-02-19 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/bookmarks/actions/bookmarks/save.php: sticky form wasn't being cleared
+ in bookmarks - that's fixed now
+
+ * mod/bookmarks/views/default/object/bookmarks.php: fixed display issue when
+ a bookmark has no description text
+
+2011-02-19 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/theme_preview/forms.php: elgg-state-selected doesn't
+ make sense for non-default buttons
+
+2011-02-19 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/bookmarks/actions/bookmarks/delete.php: fixed forward url when
+ deleting a bookmark
+
+2011-02-19 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php: Fixes #2905: Admin action links on user hover menu
+ asks for confirmation.
+
+ * engine/classes/ElggMenuItem.php,
+ views/default/navigation/menu/elements/item.php: Added 4 methods to
+ ElggMenuItem: get/setLinkClass() and get/setItemClass(). This allows you to
+ put classes on the a and li tags it generates.
+
+2011-02-19 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/input.php: added documentation for the livesearch page handler
+
+2011-02-19 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/page/shells/theme_preview.php,
+ .../views/default/theme_preview/forms.php: More buttons in forms theme
+ preview
+
+2011-02-19 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * js/lib/ui.js, views/default/output/confirmlink.php: Pulled the confirm
+ link output view's JS into elgg.us. Any links with elgg-requires-confirmation
+ will get a confirm box with the title of the anchor tag as the question, or
+ the default "Are you sure?" if that doesn't exist.
+
+ * views/default/input/plaintext.php: Fixed the tab that was showing up in
+ every text area.
+
+2011-02-19 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/search/search_hooks.php: removed $CONFIG usage in search hooks
+
+ * mod/pages/views/default/pages/sidebar/history.php: Fixes #2955 fixed typo
+
+ * mod/blog/lib/blog.php, mod/thewire/tests/regex.php,
+ views/default/admin/plugins/advanced.php,
+ views/default/forms/admin/menu/save.php: Fixes #2428 last of the $CONFIG
+ removals. Anything missed can be individual tickets
+
+2011-02-19 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/wrapper.php: Fixes #2768. min-height
+ needed a little bit more for the profile widgets.
+
+ * mod/groups/start.php: Removing test group default widget code.
+
+ * actions/widgets/add.php, actions/widgets/delete.php,
+ actions/widgets/move.php, actions/widgets/save.php, engine/lib/views.php,
+ engine/lib/widgets.php, js/lib/ui.widgets.js, languages/en.php,
+ mod/defaultwidgets/actions/update.php, mod/defaultwidgets/languages/en.php,
+ mod/defaultwidgets/manifest.xml, mod/defaultwidgets/start.php,
+ .../admin/appearance/default_dashboard_widgets.php,
+ .../admin/appearance/default_profile_widgets.php,
+ .../views/default/defaultwidgets/editor.php, mod/groups/start.php,
+ mod/profile/start.php, views/default/object/plugin.php,
+ views/default/page/components/widget.php,
+ views/default/page/layouts/widgets.php: Fixes #2753: Default widgets merged
+ into core as extensible admin section and updated to work with new widgets.
+ Will need an upgrade for users running the old default widgets in 1.7.
+
+2011-02-19 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/layout/shells/widgets/add_panel.php: clearfix > clearfloat
+
+ * mod/developers/languages/en.php, mod/developers/start.php,
+ .../views/default/page/shells/theme_preview.php,
+ .../views/default/theme_preview/header.php,
+ .../views/default/theme_preview/index.php,
+ mod/developers/views/default/theme_preview/nav.php,
+ .../views/default/theme_preview/navigation.php: theme_preview is using more
+ familiar/correct page handling practices
+
+2011-02-18 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * js/lib/pageowner.js, views/default/js/elgg.php: Added stub for page owners
+ in elgg.js
+
+ * views/default/core/likes/display.php: Fixes #2953: Like button doesn't
+ show up for logged out users.
+
+ * engine/lib/entities.php: Fixing list_registered_entities() from displaying
+ things it should. You now must explicitly register object subtypes to get
+ them to display.
+
+ * views/default/forms/plugins/settings/save.php: Fixed plugin settings save
+ form.
+
+ * .../views/default/thewire/scripts/counter.js,
+ mod/twitterservice/start.php, mod/twitterservice/twitterservice_lib.php,
+ .../views/default/twitterservice/metatags.php: Removing unneeded @copyright
+ and @license tags.
+
+2011-02-18 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css/admin.php: Added some color to the selected state for
+ admin page menu so we can tell what page we're on
+
+ * views/default/css/admin.php, views/default/css/elements/reset.php: Added
+ overflow-y: scroll by default so that the page doesn't get jerky when an
+ animation breaks the fold
+
+ * views/default/css/admin.php: Improved the admin menu a bit
+
+2011-02-18 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/manifest.xml, mod/bookmarks/manifest.xml,
+ mod/categories/manifest.xml, mod/custom_index/manifest.xml,
+ mod/defaultwidgets/manifest.xml, mod/developers/manifest.xml,
+ mod/diagnostics/manifest.xml, mod/embed/manifest.xml,
+ mod/externalpages/manifest.xml, mod/file/manifest.xml,
+ mod/garbagecollector/manifest.xml, mod/groups/manifest.xml,
+ mod/htmlawed/manifest.xml, mod/invitefriends/manifest.xml,
+ mod/logbrowser/manifest.xml, mod/logrotate/manifest.xml,
+ mod/messageboard/manifest.xml, mod/messages/manifest.xml,
+ mod/notifications/manifest.xml, mod/oauth_lib/manifest.xml,
+ mod/pages/manifest.xml, mod/profile/manifest.xml,
+ mod/reportedcontent/manifest.xml, mod/search/manifest.xml,
+ mod/tagcloud/manifest.xml, mod/thewire/manifest.xml,
+ mod/tinymce/manifest.xml, mod/twitter/manifest.xml,
+ mod/twitterservice/manifest.xml, mod/uservalidationbyemail/manifest.xml,
+ mod/zaudio/manifest.xml: Updated copyright and author information in plugin
+ manifests.
+
+2011-02-18 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/install.php, engine/start.php: Fixes #2943: Removed
+ engine/lib/install.php
+
+2011-02-18 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/twitterservice/twitterservice_lib.php: Adding plugin hooks for
+ authorization and login events.
+
+2011-02-18 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/deprecated-1.8.php, engine/lib/river.php, engine/lib/views.php,
+ .../views/default/theme_preview/objects.php,
+ views/default/core/river/body.php, views/default/layout/objects/gallery.php,
+ views/default/layout/objects/image_block.php,
+ views/default/layout/objects/list.php,
+ views/default/layout/objects/module.php,
+ views/default/layout/objects/widget.php, views/default/object/widget.php,
+ views/default/page/components/gallery.php,
+ views/default/page/components/image_block.php,
+ views/default/page/components/list.php,
+ views/default/page/components/module.php,
+ views/default/page/components/widget.php,
+ views/default/page/elements/owner_block.php, views/default/river/item.php:
+ Refs #2950: layout/objects => page/components
+
+2011-02-18 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page/layouts/widgets.php: Removed unused var in widgets
+ layout.
+
+2011-02-18 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/views.php, views/default/layout/shells/admin.php,
+ views/default/layout/shells/content.php,
+ views/default/layout/shells/default.php,
+ views/default/layout/shells/one_column.php,
+ views/default/layout/shells/one_sidebar.php,
+ .../layout/shells/two_column_left_sidebar.php,
+ views/default/layout/shells/two_sidebar.php,
+ views/default/layout/shells/widgets.php,
+ views/default/page/layouts/admin.php, views/default/page/layouts/content.php,
+ views/default/page/layouts/default.php,
+ views/default/page/layouts/one_column.php,
+ views/default/page/layouts/one_sidebar.php,
+ .../page/layouts/two_column_left_sidebar.php,
+ views/default/page/layouts/two_sidebar.php,
+ views/default/page/layouts/widgets.php: Refs #2950: layout/shells =>
+ page/layouts
+
+ * engine/lib/views.php, mod/search/views/default/search/list.php,
+ views/default/layout/elements/comments.php,
+ views/default/layout/elements/owner_block.php,
+ views/default/layout/elements/page_links.php,
+ views/default/layout/elements/sidebar.php,
+ views/default/layout/elements/title.php,
+ views/default/layout/shells/one_sidebar.php,
+ views/default/layout/shells/two_sidebar.php,
+ views/default/page/elements/comments.php,
+ views/default/page/elements/owner_block.php,
+ views/default/page/elements/page_links.php,
+ views/default/page/elements/sidebar.php,
+ views/default/page/elements/title.php: Refs #2950: layout/elements =>
+ page/elements
+
+ * views/default/admin/statistics/overview.php: @todos for refactoring admin
+ statistics
+
+2011-02-18 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggPluginPackage.php, languages/en.php: Fixes #2945, Refs
+ #2946. Plugins that require priority on an uninstalled plugin don't crash the
+ plugins admin.
+
+ * .../views/default/bookmarks/page_links.php: Don't show the bookmark this
+ link if you're not logged in.
+
+2011-02-18 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/file/views/default/file/css.php,
+ .../default/file/specialcontent/image/default.php,
+ mod/file/views/default/icon/object/file.php,
+ views/default/css/elements/chrome.php,
+ views/default/css/elements/layout_objects.php: improved .elgg-gallery and
+ added .elgg-photo
+
+2011-02-18 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * install/ElggInstaller.php: Refs #2847. Install now sets the
+ viewspath_cache_enabled.
+
+ * engine/lib/cache.php, install/ElggInstaller.php: Refs #2847. Fixed
+ simplecache settings and functionality for initial installation.
+
+ * engine/lib/database.php, engine/lib/deprecated-1.8.php,
+ engine/lib/upgrades/create_upgrade.php, engine/lib/version.php,
+ install/ElggInstaller.php, upgrade.php: Fixes #1433, #2183. Upgrades are now
+ tracked and will be run if needed regardless of version.
+
+2011-02-17 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/twitterservice/twitterservice_lib.php: Fixes faulty logic in twitter
+ services that allowed new users to register via twitter when site
+ registration was off.
+
+ * views/default/admin/components/plugin_settings.php: Fixes #2938: Restored
+ the $vars['entity'] in plugin settings for backward compatibility with
+ plugins.
+
+2011-02-17 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/admin/components/plugin_settings.php: Cleaned up a manual
+ implementation of elgg-module
+
+2011-02-17 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/elgg_bookmarklet.gif, mod/bookmarks/graphics/bookmark.gif,
+ mod/bookmarks/graphics/bookmarklet.gif, mod/bookmarks/start.php,
+ .../views/default/bookmarks/bookmarklet.php,
+ mod/bookmarks/views/default/bookmarks/css.php,
+ mod/bookmarks/views/default/bookmarks/js.php,
+ .../views/default/bookmarks/page_links.php: Further cleanup of bookmarks.
+ Moved bookmarklet to plugin. Pulled in the 1.7 bookmark pin and made the
+ "Bookmark this page" less ugly. Added js to append the title.
+
+ * mod/bookmarks/actions/bookmarks/edit.php, mod/bookmarks/start.php,
+ .../views/default/bookmarks/group_module.php,
+ .../default/bookmarks/groupprofile_bookmarks.php,
+ .../views/default/forms/bookmarks/save.php: Fixes #2680. Added group profile
+ bookmark widget. Fixed a problem editing bookmarks.
+
+ * mod/bookmarks/pages/owner.php: Hiding the filter tabs for bookmarks when
+ not in a filter context.
+
+ * views/default/layout/shells/content/filter.php: Fixed typo in filter nav
+ view.
+
+ * mod/bookmarks/lib/bookmarks.php, mod/bookmarks/pages/add.php,
+ mod/bookmarks/pages/edit.php, mod/bookmarks/pages/owner.php,
+ mod/bookmarks/start.php: Fixes #2680: Added group support to bookmarks
+ plugin.
+
+ * mod/bookmarks/bookmarklet.php, mod/bookmarks/languages/en.php,
+ mod/bookmarks/lib/bookmarks.php, mod/bookmarks/pages/add.php,
+ mod/bookmarks/pages/all.php, mod/bookmarks/pages/bookmarklet.php,
+ mod/bookmarks/pages/friends.php, mod/bookmarks/pages/owner.php,
+ mod/bookmarks/start.php, .../views/default/bookmarks/bookmarklet.php,
+ mod/bookmarks/views/default/bookmarks/form.php,
+ .../views/default/bookmarks/owner_block.php,
+ mod/bookmarks/views/default/bookmarks/sharing.php,
+ .../default/river/object/bookmarks/annotate.php,
+ .../default/river/object/bookmarks/create.php,
+ .../views/default/widgets/bookmarks/edit.php: Refs #2680: Bookmarks revamp,
+ part 3: menus and bookmarklet.
+
+2011-02-17 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/views/default/object/blog.php,
+ mod/bookmarks/views/default/object/bookmarks.php,
+ mod/file/views/default/object/file.php: calling the new category output view
+ in the plugins - looks like the pages plugin is missing the categories code
+
+ * mod/tinymce/start.php: added tinymce to admin css
+
+2011-02-16 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/layout/objects/widget/settings.php: Fixes #2915. Can edit
+ widget settings again.
+
+ * mod/bookmarks/actions/bookmarks/add.php,
+ mod/bookmarks/actions/bookmarks/delete.php,
+ mod/bookmarks/actions/bookmarks/save.php, mod/bookmarks/lib/bookmarks.php,
+ mod/bookmarks/pages/add.php, mod/bookmarks/pages/edit.php,
+ mod/bookmarks/pages/inbox.php, mod/bookmarks/pages/view.php,
+ mod/bookmarks/start.php, .../views/default/forms/bookmarks/save.php,
+ mod/bookmarks/views/default/object/bookmarks.php,
+ .../views/default/widgets/bookmarks/content.php,
+ .../views/default/widgets/bookmarks/edit.php,
+ .../views/default/widgets/bookmarks/view.php: Refs #2680. Bookmarks revamp,
+ part 2.
+
+2011-02-16 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/start.php, mod/bookmarks/start.php, mod/file/start.php,
+ mod/groups/start.php, mod/messages/start.php, mod/pages/start.php,
+ mod/profile/start.php, mod/thewire/start.php: Updated
+ register_entity_url_handler => elgg_* in plugins. Used this regex:
+ ([^_a-z])register_entity_url_handler\((.*),(.*,.*)\);
+
+2011-02-15 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/deprecated-1.7.php, engine/lib/deprecated-1.8.php,
+ engine/lib/elgglib.php, engine/lib/install.php, engine/lib/pam.php,
+ engine/lib/views.php, engine/lib/widgets.php: Moved all deprecated core
+ functions into the appropriate deprecation fine
+
+ * engine/lib/entities.php, engine/lib/users.php, mod/blog/start.php,
+ mod/bookmarks/start.php, mod/file/start.php, mod/groups/start.php,
+ mod/pages/start.php, mod/thewire/start.php: Removed all calls to deprecated
+ register_entity_type
+
+ * actions/admin/site/update_advanced.php, engine/handlers/cache_handler.php,
+ engine/lib/actions.php, engine/lib/admin.php, engine/lib/cache.php,
+ engine/lib/deprecated-1.8.php, engine/lib/upgrades/2010060101.php,
+ engine/lib/views.php, engine/start.php,
+ .../views/default/page/shells/theme_preview.php, mod/notifications/index.php,
+ mod/profile/start.php, views/default/core/friends/picker.php,
+ views/default/page/elements/head.php: Fixes #2923: Removed "view" prefix from
+ simplecache function names
+
+ * engine/lib/elgglib.php: Fixes #2695: Return false on autoload fail, rather
+ than throwing exception
+
+ * engine/lib/entities.php: Fixes #2777: delete_entity is now recursive
+
+ * engine/lib/annotations.php, engine/lib/deprecated-1.8.php,
+ engine/lib/entities.php, engine/lib/extender.php, engine/lib/metadata.php,
+ engine/lib/relationships.php: Fixes #2860: Deprecated several registration
+ functions that were using the 'callback-first' ordering
+
+ * views/default/css/elements/grid.php: Fixes #2924: elgg-grid clearfixes
+
+ * engine/lib/entities.php: Fixes #2476: update_entity_last_action()
+ sanitizes posted time.
+
+2011-02-15 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/plugins.php: Updated egef_plugin_user_settings() to accept
+ plugin_id instead of plugin_name.
+
+ * engine/lib/upgrades/2011010101.php: Fixes #2926: Fixed upgrade for plugin
+ user settings.
+
+2011-02-15 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/developers/languages/en.php: added language strings for theme preview
+
+2011-02-15 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page/shells/walled_garden.php: Refs #2693: Walledgarden code
+ cleanup -- Too much custom code
+
+2011-02-15 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/developers/start.php,
+ mod/developers/views/default/developers/ipsum.php,
+ .../views/default/theme_preview/forms.php,
+ .../views/default/theme_preview/general.php,
+ .../views/default/theme_preview/objects.php,
+ .../views/default/theme_preview/widgets.php: moved lorem ipsum into a view
+
+2011-02-15 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/lib/blog.php, mod/blog/views/default/forms/blog/save.php,
+ mod/blog/views/default/input/datetime.php,
+ mod/blog/views/default/widgets/blog/edit.php,
+ mod/bookmarks/views/default/bookmarks/form.php,
+ mod/bookmarks/views/default/bookmarks/sharing.php,
+ mod/categories/views/default/input/categories.php,
+ .../views/default/settings/categories/edit.php,
+ .../views/default/defaultwidgets/editor.php,
+ .../views/default/theme_preview/forms.php,
+ mod/embed/views/default/embed/link.php,
+ mod/embed/views/default/embed/upload/content.php,
+ .../views/default/forms/expages/edit.php,
+ mod/file/views/default/file/embed_upload.php,
+ mod/file/views/default/forms/file/upload.php,
+ mod/file/views/default/widgets/filerepo/edit.php,
+ .../default/settings/garbagecollector/edit.php,
+ mod/groups/views/default/forms/discussion/save.php,
+ mod/groups/views/default/forms/groups/delete.php,
+ mod/groups/views/default/forms/groups/edit.php,
+ mod/groups/views/default/forms/groups/invite.php,
+ mod/groups/views/default/forms/groups/search.php,
+ mod/groups/views/default/settings/groups/edit.php,
+ .../views/default/widgets/a_users_groups/edit.php,
+ mod/logbrowser/views/default/logbrowser/form.php,
+ .../views/default/settings/logrotate/edit.php, mod/messages/read.php,
+ .../views/default/forms/messages/process.php,
+ .../views/default/forms/messages/reply.php,
+ mod/messages/views/default/forms/messages/send.php,
+ .../notifications/subscriptions/forminternals.php,
+ mod/pages/views/default/forms/pages/edit.php,
+ mod/pages/views/default/widgets/pages/edit.php,
+ .../views/default/forms/reportedcontent/add.php,
+ .../views/default/object/reported_content.php,
+ .../views/default/widgets/reportedcontent/edit.php,
+ .../views/default/widgets/tagcloud/edit.php,
+ mod/thewire/views/default/forms/thewire/add.php,
+ mod/thewire/views/default/widgets/thewire/edit.php,
+ mod/tinymce/views/default/input/longtext.php,
+ .../views/default/settings/twitterservice/edit.php,
+ .../forms/uservalidationbyemail/bulk_action.php,
+ .../uservalidationbyemail/unvalidated_user.php,
+ views/default/admin/components/plugin_settings.php,
+ views/default/admin/plugins/advanced.php,
+ views/default/core/account/login_walled_garden.php,
+ views/default/core/friends/picker.php, views/default/core/river/controls.php,
+ views/default/core/river/filter.php, views/default/core/river/footer.php,
+ .../core/settings/account/default_access.php,
+ views/default/core/settings/account/email.php,
+ views/default/core/settings/account/language.php,
+ views/default/core/settings/account/name.php,
+ .../core/settings/account/notifications.php,
+ views/default/core/settings/account/password.php,
+ views/default/forms/admin/menu/save.php,
+ views/default/forms/admin/site/update_advanced.php,
+ views/default/forms/admin/site/update_basic.php,
+ views/default/forms/avatar/crop.php, views/default/forms/avatar/upload.php,
+ views/default/forms/comments/add.php,
+ views/default/forms/comments/inline.php,
+ views/default/forms/friends/edit.php, views/default/forms/login.php,
+ views/default/forms/members/name_search.php,
+ views/default/forms/members/tag_search.php,
+ views/default/forms/plugins/settings/save.php,
+ views/default/forms/profile/edit.php,
+ views/default/forms/profile/fields/add.php, views/default/forms/register.php,
+ views/default/forms/user/passwordreset.php,
+ views/default/forms/user/requestnewpassword.php,
+ views/default/forms/useradd.php, views/default/forms/widgets/save.php,
+ views/default/graphics/ajax_loader.php, views/default/input/access.php,
+ views/default/input/checkboxes.php, views/default/input/datepicker.php,
+ views/default/input/password.php, views/default/input/plaintext.php,
+ views/default/input/radio.php, views/default/input/securitytoken.php,
+ views/default/input/userpicker.php,
+ views/default/layout/objects/widget/controls.php,
+ views/default/layout/shells/widgets.php,
+ views/default/layout/shells/widgets/add_panel.php,
+ views/default/navigation/tabs.php,
+ views/default/widgets/content_stats/edit.php,
+ views/default/widgets/friends/edit.php,
+ views/default/widgets/new_users/edit.php,
+ views/default/widgets/online_users/edit.php,
+ views/installation/input/access.php, views/installation/input/button.php,
+ views/installation/input/checkboxes.php,
+ views/installation/input/dropdown.php, views/installation/input/form.php,
+ views/installation/input/hidden.php, views/installation/input/longtext.php,
+ views/installation/input/password.php,
+ views/installation/input/securitytoken.php,
+ views/installation/input/text.php,
+ views/installation/install/forms/template.php: Fixes #2921: converted
+ internalname => name and internalid => id
+
+ * engine/lib/cache.php, engine/lib/views.php: Fixes #2920: Moved simplecache
+ functions into cache.php
+
+ * engine/classes/ElggBatch.php, engine/classes/ElggPluginManifest.php,
+ engine/lib/admin.php, engine/lib/annotations.php, engine/lib/elgglib.php,
+ engine/lib/metastrings.php, engine/lib/plugins.php, engine/lib/river.php,
+ engine/lib/views.php, engine/lib/xml.php,
+ mod/blog/views/default/blog/sidebar/revisions.php,
+ mod/blog/views/default/object/blog.php,
+ mod/bookmarks/views/default/object/bookmarks.php,
+ mod/embed/views/default/embed/embed.php,
+ mod/embed/views/default/embed/layouts/gallery.php,
+ mod/embed/views/default/embed/layouts/list.php,
+ mod/embed/views/default/embed/upload/content.php,
+ mod/file/views/default/file/typecloud.php,
+ mod/file/views/default/forms/file/upload.php,
+ mod/file/views/default/object/file.php,
+ mod/groups/views/default/forms/discussion/save.php,
+ mod/groups/views/default/groups/edit.php,
+ .../views/default/groups/group_sort_menu.php,
+ .../views/default/object/groupforumtopic.php,
+ mod/messages/views/default/forms/messages/send.php,
+ mod/messages/views/default/object/messages.php,
+ mod/pages/views/default/object/page_top.php,
+ .../views/default/pages/sidebar/navigation.php,
+ mod/profile/views/default/profile/owner_block.php,
+ mod/thewire/views/default/forms/thewire/add.php,
+ mod/thewire/views/default/object/thewire.php,
+ mod/thewire/views/default/thewire/metadata.php,
+ mod/uservalidationbyemail/start.php,
+ .../uservalidationbyemail/unvalidated_user.php,
+ views/default/admin/components/invalid_plugin.php,
+ .../admin/components/plugin_dependencies.php,
+ views/default/annotation/generic_comment.php,
+ views/default/forms/plugins/settings/save.php,
+ views/default/forms/widgets/save.php, views/default/icon/user/default.php,
+ views/default/input/checkboxes.php, views/default/input/radio.php,
+ views/default/layout/elements/comments.php,
+ views/default/layout/objects/gallery.php,
+ views/default/layout/objects/image_block.php,
+ views/default/layout/objects/list.php,
+ views/default/layout/objects/list/body.php,
+ views/default/layout/objects/list/metadata.php,
+ views/default/layout/objects/module.php,
+ views/default/layout/objects/widget.php,
+ views/default/layout/objects/widget/controls.php,
+ views/default/layout/shells/content.php,
+ views/default/layout/shells/content/filter.php,
+ views/default/layout/shells/content/header.php,
+ views/default/layout/shells/widgets.php,
+ views/default/layout/shells/widgets/add_panel.php,
+ views/default/navigation/breadcrumbs.php,
+ views/default/navigation/menu/elements/group.php,
+ views/default/navigation/menu/user_hover.php,
+ views/default/navigation/pagination.php, views/default/navigation/tabs.php,
+ views/default/object/plugin.php, views/default/output/confirmlink.php,
+ views/default/output/longtext.php, views/default/output/url.php,
+ views/default/page/elements/body.php, views/default/profile/icon.php,
+ views/rss/layout/objects/list.php: Fixes #2808: elgg_get_array_value =>
+ elgg_extract
+
+ * js/lib/userpicker.js, views/default/input/autocomplete.php,
+ views/default/input/userpicker.php: Refs #2102: addressing more
+ userpicker/autocomplete bugs
+
+ * views/default/input/autocomplete.php: Refs #2102: Some input/autocomplete
+ fixes
+
+ * documentation/stubs/config.php, engine/handlers/page_handler.php,
+ engine/lib/admin.php, engine/lib/cron.php, engine/lib/elgglib.php,
+ engine/lib/entities.php, engine/lib/input.php, engine/lib/pagehandler.php,
+ engine/lib/river.php, engine/lib/tags.php, engine/lib/user_settings.php,
+ engine/lib/users.php, js/lib/friends_picker.js, mod/blog/start.php,
+ mod/bookmarks/start.php, mod/categories/start.php, mod/developers/start.php,
+ mod/diagnostics/start.php, mod/embed/start.php, mod/externalpages/start.php,
+ mod/file/start.php, mod/groups/start.php, mod/invitefriends/start.php,
+ mod/messageboard/start.php, mod/messages/start.php,
+ mod/notifications/start.php, mod/pages/start.php, mod/profile/start.php,
+ mod/reportedcontent/start.php, mod/search/start.php, mod/thewire/start.php,
+ mod/twitterservice/start.php, mod/uservalidationbyemail/start.php: Replaced
+ all occurrences of register_page_handler in core with
+ elgg_register_page_handler
+
+ * views/default/js/friendsPickerv1.php: Friendspicker was moved to
+ js/lib/friends_picker.js
+
+ * js/lib/userpicker.js, views/default/input/userpicker.php: Refs #2102:
+ Replace input/userpicker with jQuery UI autocomplete
+
+ * htaccess_dist: Combining two rewrite rules into one
+
+2011-02-14 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * js/lib/autocomplete.js, views/default/input/autocomplete.php: Refs #2102:
+ Replaced input/autocomplete with jQuery UI autocomplete (untested)
+
+ * engine/lib/deprecated-1.8.php, engine/lib/pagehandler.php: Prepended elgg_
+ to (un)register_page_handler() functions. Deprecated old ones
+
+ * views/default/js/initialize_elgg.php,
+ views/default/page/elements/head.php: Views in the js/ directory should not
+ contain <script> tags
+
+2011-02-14 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/twitterservice/twitterservice_lib.php: Saving avatar filename with
+ user GUID instead of old-style username.
+
+2011-02-14 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/js/elgg.php: Removed unnecessary deprecated javascript
+ function
+
+ * js/lib/languages.js, js/lib/session.js, js/lib/ui.widgets.js: No need for
+ double-namespacing of javascript functions
+
+ * mod/developers/views/default/developers/css.php: Give the css preview a
+ little more vertical breathing room
+
+ * engine/lib/views.php: Refs #2610: Custom template handler for views now
+ sent through call_user_func
+
+ * engine/lib/views.php: Refs #2124: Adding backwards compatibility
+ conversions for internalname/internalid
+
+ * views/default/page/elements/body.php,
+ views/default/page/elements/footer.php,
+ views/default/page/elements/header.php,
+ views/default/page/elements/messages.php,
+ views/default/page/elements/topbar.php, views/default/page/shells/admin.php,
+ views/default/page/shells/default.php: Cleaned up views/default/page/
+ directory
+
+ * engine/lib/views.php, vendors/jquery/jquery-1.4.2.min.js,
+ vendors/jquery/jquery-1.5.min.js, vendors/jquery/jquery-ui-1.7.2.min.js,
+ vendors/jquery/jquery-ui-1.8.9.min.js: Refs #2525: jQuery => 1.5, jQuery UI
+ => 1.8.9
+
+ * views/default/core/account/login_box.php,
+ views/default/core/account/login_dropdown.php,
+ views/default/css/elements/forms.php, views/default/css/elements/misc.php,
+ views/default/css/elements/modules.php: More cleanup of login/forms css --
+ converted login_dropdown to use elgg-toggler pattern
+
+ * js/lib/ui.js: Fixes #2902: Added elgg-toggler pattern.
+
+2011-02-14 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css/admin.php: remove some unused css from admin theme
+
+2011-02-14 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggBatch.php: Clearing caches in ElggBatch.
+
+ * engine/handlers/cache_handler.php: Cache handler won't serve up cached
+ pages if caching is disabled. Refs #2758: Added call to
+ elgg_view_regenerate_simplecache() on cache misses if cache is enabled.
+ Leaving #2758 open in case Cash has a better idea since he's more familiar
+ with the simple cache changes.
+
+ * engine/classes/ElggEntity.php, engine/lib/metadata.php: Removed last of
+ deprecated metadata calls in trunk.
+
+ * actions/comments/delete.php, actions/likes/delete.php,
+ actions/profile/edit.php, engine/classes/ElggAnnotation.php,
+ engine/classes/ElggEntity.php, engine/classes/ElggRiverItem.php,
+ engine/handlers/export_handler.php, engine/lib/annotations.php,
+ engine/lib/metadata.php, engine/lib/metastrings.php,
+ engine/tests/api/entity_getter_functions.php,
+ engine/tests/api/metastrings.php, engine/tests/regression/trac_bugs.php,
+ mod/blog/lib/blog.php, mod/messageboard/actions/delete.php,
+ mod/pages/revision.php: Updated trunk to use new annotation functions. Added
+ checks for annotations_* options vs annotation_* options because it's so easy
+ to confuse.
+
+ * engine/classes/ElggEntity.php, engine/classes/ElggUser.php,
+ engine/lib/entities.php: Fixes #2918. Moved annotation/metadata delete
+ functions from ElggUser to ElggEntity. When deleted, entities now correctly
+ delete metadata they own as well as metadata on them. Removed uses of
+ deprecated functions.
+
+ * engine/lib/annotations.php, engine/lib/metadata.php,
+ engine/lib/metastrings.php: More fixes to annotations/metadata changes. Now
+ all function support getting via a metastring id.
+
+ * engine/lib/relationships.php: Fixes #2914. Merged fix for r.time_created
+ sorting to trunk.
+
+2011-02-14 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/developers/start.php, .../views/default/theme_preview/forms.php,
+ .../views/default/theme_preview/header.php, views/default/icon/default.php:
+ getting rid of some warnings in theme preview
+
+ * mod/developers/start.php, .../views/default/admin/developers/preview.php,
+ .../views/default/theme_preview/forms.php,
+ .../views/default/theme_preview/general.php,
+ .../views/default/theme_preview/grid.php,
+ .../views/default/theme_preview/header.php,
+ .../views/default/theme_preview/icons.php,
+ mod/developers/views/default/theme_preview/nav.php,
+ .../views/default/theme_preview/objects.php,
+ .../views/default/theme_preview/widgets.php: Refs #2903 navigation updated
+ for theme preview
+
+2011-02-14 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php, engine/lib/deprecated-1.8.php,
+ engine/lib/elgglib.php, engine/lib/metadata.php,
+ engine/tests/api/metastrings.php,
+ mod/pages/views/default/object/page_top.php: Refs #2912. Added checks for
+ constraints in dangerous functions. Unit tests no longer remove all
+ metadata/annotations.
+
+2011-02-14 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * documentation/theming/preview/forms.php,
+ documentation/theming/preview/general.php,
+ documentation/theming/preview/grid.php,
+ documentation/theming/preview/head.php,
+ documentation/theming/preview/icons.php,
+ documentation/theming/preview/index.php,
+ documentation/theming/preview/nav.php,
+ documentation/theming/preview/objects.php,
+ documentation/theming/preview/widgets.php, mod/developers/start.php,
+ .../views/default/page/shells/theme_preview.php,
+ .../views/default/theme_preview/forms.php,
+ .../views/default/theme_preview/general.php,
+ .../views/default/theme_preview/grid.php,
+ .../views/default/theme_preview/icons.php,
+ .../views/default/theme_preview/index.php,
+ mod/developers/views/default/theme_preview/nav.php,
+ .../views/default/theme_preview/objects.php,
+ .../views/default/theme_preview/widgets.php: Refs #2903 moving theme preview
+ into developers plugin - navigation and titles are broken
+
+2011-02-13 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggEntity.php, engine/lib/entities.php,
+ engine/tests/objects/entities.php: Deprecated ElggEntity->clearMetadata() by
+ ElggEntity->deleteMetadata(). Disabling entities now disables their
+ annotations and metadata. Enabling entities enables annotations and metadata.
+ Fixes #1115.
+
+ * engine/classes/ElggBatch.php: If using a callback in ElggBatch, make sure
+ there's an initial value to return.
+
+ * engine/lib/metastrings.php: Allowing metastrings_type for metastring-based
+ object functions.
+
+2011-02-13 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css/admin.php: added tabs to admin theme
+
+ * mod/externalpages/actions/add.php, mod/externalpages/actions/addfront.php,
+ mod/externalpages/actions/edit.php, mod/externalpages/index.php,
+ mod/externalpages/languages/en.php, mod/externalpages/manifest.xml,
+ mod/externalpages/read.php, mod/externalpages/start.php,
+ .../views/default/expages/analytics.php,
+ mod/externalpages/views/default/expages/css.php,
+ .../views/default/expages/footer_menu.php,
+ .../views/default/expages/forms/edit.php,
+ .../views/default/expages/forms/editfront.php,
+ .../views/default/expages/front_left.php,
+ .../views/default/expages/front_right.php,
+ mod/externalpages/views/default/expages/menu.php,
+ .../views/default/forms/expages/edit.php,
+ mod/externalpages/views/default/object/expages.php: updates externalpages to
+ 1.8
+
+2011-02-13 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggAnnotation.php, engine/classes/ElggEntity.php,
+ engine/classes/ElggMetadata.php, engine/lib/annotations.php,
+ engine/lib/deprecated-1.8.php, engine/lib/elgglib.php,
+ engine/lib/entities.php, engine/lib/metadata.php, engine/lib/metastrings.php,
+ engine/tests/api/metastrings.php: Refs #2907. DRY'd up and abstracted out a
+ lot of metadata / annotation functions so I can implement #1115 with a clean
+ conscious.
+
+2011-02-13 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/externalpages/actions/add.php, mod/externalpages/actions/addfront.php,
+ mod/externalpages/index.php, mod/externalpages/languages/en.php,
+ mod/externalpages/manifest.xml, mod/externalpages/read.php,
+ mod/externalpages/start.php, .../views/default/expages/analytics.php,
+ mod/externalpages/views/default/expages/css.php,
+ .../views/default/expages/footer_menu.php,
+ .../views/default/expages/forms/edit.php,
+ .../views/default/expages/forms/editfront.php,
+ .../views/default/expages/front_left.php,
+ .../views/default/expages/front_right.php,
+ mod/externalpages/views/default/expages/menu.php,
+ mod/externalpages/views/default/object/expages.php, mod/sitepages/README.txt,
+ mod/sitepages/actions/edit_settings.php, mod/sitepages/index.php,
+ mod/sitepages/languages/en.php, mod/sitepages/manifest.xml,
+ mod/sitepages/sitepages_functions.php, mod/sitepages/start.php,
+ .../views/default/admin/site/sitepages.php,
+ .../views/default/canvas/layouts/frontpage.php,
+ mod/sitepages/views/default/sitepages/css.php,
+ .../views/default/sitepages/custom_frontpage.php,
+ .../views/default/sitepages/forms/edit.php,
+ .../default/sitepages/forms/editfrontsimple.php,
+ .../views/default/sitepages/forms/editmeta.php,
+ .../views/default/sitepages/keywords/sitestats.php,
+ .../views/default/sitepages/keywords/userlist.php,
+ mod/sitepages/views/default/sitepages/members.php,
+ mod/sitepages/views/default/sitepages/menu.php,
+ mod/sitepages/views/default/sitepages/metatags.php,
+ mod/sitepages/views/default/sitepages/sidebar.php,
+ mod/sitepages/views/default/sitepages/welcome.php: swapping sitepages for
+ externalpages since the external pages is easier to integrate into 1.8 .
+ sitepages needs more work before it is ready for release (plus we would need
+ an upgrade script)
+
+ * engine/lib/entities.php: Refs #2301 demoting type:subtype warnings to
+ notices
+
+ * actions/email/save.php, actions/user/default_access.php,
+ actions/user/language.php, actions/user/name.php, actions/user/password.php,
+ engine/lib/user_settings.php, engine/lib/users.php,
+ views/default/core/settings/account/language.php,
+ views/default/forms/account/settings.php: Fixes #2848 pulls user settings
+ code out of actions into functions. We should investigate putting them in a
+ library that is only loaded on demand
+
+ * engine/lib/user_settings.php, engine/lib/usersettings.php,
+ engine/start.php, install/ElggInstaller.php: user settings library is now
+ user_settings.php
+
+ * engine/lib/admin.php: documentation update for admin functions
+
+ * engine/classes/ElggMenuBuilder.php, engine/classes/ElggMenuItem.php,
+ engine/lib/admin.php, languages/en.php,
+ views/default/layout/shells/admin/menu.php: admin menu uses weights for
+ ordering
+
+2011-02-13 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggBatch.php: Additional checking in ElggBatch for valid
+ key.
+
+2011-02-13 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/output/confirmlink.php, views/default/output/dropdown.php,
+ views/default/output/email.php, views/default/output/pulldown.php,
+ views/default/output/radio.php, views/default/output/text.php,
+ views/default/output/url.php: Fixed #2218 finished up the encoding issues by
+ turning of double encoding
+
+ * mod/categories/views/default/categories/css.php,
+ mod/categories/views/default/input/categories.php: categories are listed
+ horizontally
+
+2011-02-13 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggBatch.php: Added ability to get results of callback
+ function in ElggBatch.
+
+ * engine/classes/ElggBatch.php: Fixed ElggBatch problems when specifying a
+ limit of 0. Fixed a shoot yourself in the foot situation if passing a dumb
+ number to chunk size.
+
+ * engine/classes/ElggBatch.php: Added ElggBatch class for more efficient
+ batch operations on large sets of Elgg* objects.
+
+2011-02-13 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/layout/shells/admin.php: added the footer analytics view for
+ js
+
+ * mod/custom_index/index.php, mod/custom_index/languages/en.php,
+ mod/custom_index/manifest.xml, mod/custom_index/start.php,
+ .../views/default/canvas/layouts/new_index.php,
+ .../views/default/custom_index/css.php,
+ .../views/default/layout/shells/custom_index.php: updated custom index for
+ 1.8
+
+2011-02-13 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/core/account/login_dropdown.php,
+ views/default/css/elements/misc.php: Renamed signin to elgg-button-dropdown
+
+ * views/default/core/account/login_box.php,
+ views/default/core/account/login_dropdown.php,
+ views/default/css/elements/layout_objects.php,
+ views/default/css/elements/misc.php, views/default/css/elements/modules.php,
+ views/default/forms/login.php: Progress refactoring the login dropdown and
+ login forms -- not quite there yet, though Added another module: dropdown.
+
+2011-02-13 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/custom_index/index.php, mod/custom_index/languages/en.php,
+ mod/custom_index/manifest.xml, mod/custom_index/start.php,
+ .../views/default/canvas/layouts/new_index.php,
+ .../views/default/custom_index/css.php: moved custom_index back into core
+
+2011-02-12 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css/elements/layout_objects.php: Updated docs for
+ layout_objects
+
+2011-02-12 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggEntity.php, views/default/core/river/footer.php: Refs
+ #650. Replaced count_annotations().
+
+ * mod/pages/views/default/pages/sidebar/history.php,
+ views/default/core/likes/display.php, views/default/core/river/controls.php,
+ views/default/layout/elements/comments.php: Refs #650. Replaced
+ list_annotations() by elgg_list_annotations().
+
+ * engine/classes/ElggEntity.php, engine/lib/views.php,
+ mod/messageboard/history.php: Updated a few recent calls to
+ elgg_get_annotations() to use 'reverse_order_by' => true.
+
+ * engine/lib/metastrings.php: Refs #2906. Missed a file.
+
+ * engine/lib/elgglib.php, engine/lib/entities.php: Fixes #2906. Added
+ elgg_sql_reverse_order_by() and wired it up to ege() and ega(). Pass
+ 'reverse_order_by' => true in option arrays.
+
+2011-02-12 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/thewire/actions/add.php, mod/thewire/actions/delete.php,
+ mod/thewire/add.php, mod/thewire/everyone.php, mod/thewire/index.php,
+ mod/thewire/languages/en.php, mod/thewire/manifest.xml,
+ mod/thewire/pages/everyone.php, mod/thewire/pages/friends.php,
+ mod/thewire/pages/previous.php, mod/thewire/pages/reply.php,
+ mod/thewire/pages/tag.php, mod/thewire/pages/thread.php,
+ mod/thewire/pages/user.php, mod/thewire/readme.txt, mod/thewire/start.php,
+ mod/thewire/tests/regex.php, mod/thewire/views/default/forms/thewire/add.php,
+ mod/thewire/views/default/object/thewire.php,
+ .../views/default/river/object/thewire/create.php,
+ mod/thewire/views/default/thewire/css.php,
+ mod/thewire/views/default/thewire/forms/add.php,
+ mod/thewire/views/default/thewire/metadata.php,
+ mod/thewire/views/default/thewire/notfound.php,
+ .../views/default/thewire/profile_status.php,
+ mod/thewire/views/default/thewire/reply.php,
+ mod/thewire/views/default/thewire/view.php,
+ .../views/default/widgets/thewire/content.php,
+ mod/thewire/views/default/widgets/thewire/edit.php: a mostly completed port
+ of JHU/APL wire plugin to 1.8
+
+2011-02-12 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggEntity.php, engine/lib/annotations.php,
+ engine/lib/views.php, engine/tests/objects/entities.php,
+ mod/messageboard/history.php, views/default/core/likes/display.php,
+ views/default/core/river/controls.php, views/default/core/river/footer.php:
+ Refs #650. Replaced calls to get_annotations() by elgg_get_annotations().
+
+2011-02-12 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/details.php: added the status view into
+ details on profile page
+
+2011-02-12 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggEntity.php, engine/lib/users.php,
+ views/default/forms/profile/edit.php: Refs #650. Replaced uses for
+ get_metadata_byname() by elgg_get_metadata()
+
+ * engine/classes/ElggMetadata.php, engine/handlers/export_handler.php,
+ engine/lib/deprecated-1.8.php, engine/lib/metadata.php: Refs #650. Changed
+ elgg_get_metadata_by_id() to elgg_get_metadata_from_id() to be consistent
+ with other functions.
+
+ * engine/classes/ElggMetadata.php, engine/handlers/export_handler.php,
+ engine/lib/metadata.php: Refs #650. Replaced get_metadata() by
+ elgg_get_metadata_by_id()
+
+ * engine/classes/ElggEntity.php, engine/classes/ElggFile.php,
+ engine/lib/metadata.php, engine/lib/notification.php,
+ views/default/export/entity.php: Refs #650: Replaced uses of
+ get_metadata_for_entity() by elgg_get_metadata().
+
+2011-02-12 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/layout/objects/list/body.php: allow plugins to decline the
+ addition of tags to their entity list view
+
+2011-02-12 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/deprecated-1.8.php, engine/lib/metadata.php: Deprecated
+ get_metadata() by elgg_get_metadata_by_id() to avoid confusion with
+ elgg_get_metadata(). Not in love with the name...had considered
+ elgg_get_metadatum(). Open to suggestions.
+
+ * engine/lib/annotations.php, engine/lib/deprecated-1.8.php,
+ engine/lib/metadata.php, engine/lib/metastrings.php: Refs #650: Deprecated
+ find_metadata() with elgg_get_metadata(). Deprecated
+ get_metadata_for_entity() and get_metadata_byname() <twitch>. Added
+ elgg_get_metastrings_based_objects() to deal with the commonalities between
+ the metadata and annotation getter functions.
+
+2011-02-12 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/input/checkboxes.php: Label wraps checkbox for usability
+
+ * mod/minify/lib/min/.htaccess, mod/minify/lib/min/README.txt,
+ mod/minify/lib/min/builder/_index.js, mod/minify/lib/min/builder/bm.js,
+ mod/minify/lib/min/builder/index.php, mod/minify/lib/min/builder/ocCheck.php,
+ mod/minify/lib/min/builder/rewriteTest.js, mod/minify/lib/min/config.php,
+ mod/minify/lib/min/groupsConfig.php, mod/minify/lib/min/index.php,
+ mod/minify/lib/min/lib/CSS.php, mod/minify/lib/min/lib/FirePHP.php,
+ mod/minify/lib/min/lib/HTTP/ConditionalGet.php,
+ mod/minify/lib/min/lib/HTTP/Encoder.php, mod/minify/lib/min/lib/JSMin.php,
+ mod/minify/lib/min/lib/JSMinPlus.php, mod/minify/lib/min/lib/Minify.php,
+ mod/minify/lib/min/lib/Minify/Build.php,
+ mod/minify/lib/min/lib/Minify/CSS/Compressor.php,
+ mod/minify/lib/min/lib/Minify/CSS/UriRewriter.php,
+ mod/minify/lib/min/lib/Minify/Cache/APC.php,
+ mod/minify/lib/min/lib/Minify/Cache/File.php,
+ mod/minify/lib/min/lib/Minify/Cache/Memcache.php,
+ mod/minify/lib/min/lib/Minify/CommentPreserver.php,
+ mod/minify/lib/min/lib/Minify/Controller/Base.php,
+ mod/minify/lib/min/lib/Minify/Controller/Files.php,
+ .../lib/min/lib/Minify/Controller/Groups.php,
+ .../lib/min/lib/Minify/Controller/MinApp.php,
+ mod/minify/lib/min/lib/Minify/Controller/Page.php,
+ .../lib/min/lib/Minify/Controller/Version1.php,
+ mod/minify/lib/min/lib/Minify/HTML.php,
+ mod/minify/lib/min/lib/Minify/ImportProcessor.php,
+ mod/minify/lib/min/lib/Minify/Lines.php,
+ mod/minify/lib/min/lib/Minify/Logger.php,
+ mod/minify/lib/min/lib/Minify/Packer.php,
+ mod/minify/lib/min/lib/Minify/Source.php,
+ mod/minify/lib/min/lib/Minify/YUICompressor.php,
+ mod/minify/lib/min/lib/Solar/Dir.php, mod/minify/lib/min/utils.php,
+ mod/minify/manifest.xml, mod/minify/start.php: Doh, how did this get here?
+
+2011-02-12 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * documentation/examples/plugins/manifest.xml,
+ engine/tests/test_files/plugin_18/manifest.xml: Refs #2898: Updated docs and
+ test manifest for the xmlns changes.
+
+ * engine/classes/ElggPluginManifest.php, mod/blog/manifest.xml,
+ mod/bookmarks/manifest.xml, mod/categories/manifest.xml,
+ mod/defaultwidgets/manifest.xml, mod/developers/manifest.xml,
+ mod/diagnostics/manifest.xml, mod/embed/manifest.xml, mod/file/manifest.xml,
+ mod/garbagecollector/manifest.xml, mod/groups/manifest.xml,
+ mod/htmlawed/manifest.xml, mod/invitefriends/manifest.xml,
+ mod/logbrowser/manifest.xml, mod/logrotate/manifest.xml,
+ mod/messageboard/manifest.xml, mod/messages/manifest.xml,
+ mod/minify/manifest.xml, mod/notifications/manifest.xml,
+ mod/oauth_lib/manifest.xml, mod/pages/manifest.xml, mod/profile/manifest.xml,
+ mod/reportedcontent/manifest.xml, mod/search/manifest.xml,
+ mod/sitepages/manifest.xml, mod/tagcloud/manifest.xml,
+ mod/thewire/manifest.xml, mod/tinymce/manifest.xml, mod/twitter/manifest.xml,
+ mod/twitterservice/manifest.xml, mod/uservalidationbyemail/manifest.xml,
+ mod/zaudio/manifest.xml: Refs #2898: Using an XML namespace instead of
+ version attribute on plugin manifests.
+
+ * mod/twitterservice/languages/en.php,
+ mod/twitterservice/twitterservice_lib.php,
+ .../views/default/settings/twitterservice/edit.php: Cleaned up more
+ twitterservice code. Twitter usernames now have random digits appended upon
+ name collision. Added the option for admins to allow twitter sign up even if
+ site registration is disabled.
+
+ * actions/admin/user/delete.php: Deleting a user from his profile forwards
+ to the right page.
+
+2011-02-12 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/actions/blog/delete.php, mod/file/actions/file/upload.php,
+ mod/pages/actions/pages/delete.php: Fixed #2887 redirects on blog, file, and
+ pages works now - bookmarks plugin still needs plenty of work
+
+ * mod/reportedcontent/actions/add.php,
+ mod/reportedcontent/actions/archive.php,
+ mod/reportedcontent/actions/delete.php, .../actions/reportedcontent/add.php,
+ .../actions/reportedcontent/archive.php,
+ .../actions/reportedcontent/delete.php, mod/reportedcontent/start.php,
+ .../views/default/forms/reportedcontent/add.php,
+ .../views/default/reportedcontent/form.php: updated reported content to use
+ elgg_view_form
+
+ * views/default/css/admin.php,
+ views/default/forms/admin/site/update_advanced.php,
+ views/default/forms/admin/site/update_basic.php,
+ views/default/forms/avatar/crop.php, views/default/forms/avatar/upload.php,
+ views/default/forms/comments/add.php, views/default/forms/friends/edit.php,
+ views/default/forms/login.php, views/default/forms/plugins/settings/save.php,
+ views/default/forms/profile/edit.php, views/default/forms/register.php,
+ views/default/forms/user/requestnewpassword.php,
+ views/default/forms/useradd.php, views/default/forms/usersettings/save.php,
+ views/default/forms/widgets/save.php, views/default/group/default.php: Refs
+ #2032 core forms use divs
+
+ * mod/blog/views/default/forms/blog/save.php,
+ mod/blog/views/default/widgets/blog/edit.php,
+ mod/categories/views/default/input/categories.php,
+ .../views/default/forms/diagnostics/download.php,
+ mod/file/views/default/forms/file/upload.php,
+ mod/file/views/default/widgets/filerepo/edit.php,
+ .../views/default/widgets/a_users_groups/edit.php,
+ .../views/default/forms/invitefriends/invite.php,
+ .../views/default/forms/messages/reply.php,
+ mod/messages/views/default/forms/messages/send.php,
+ .../forms/notificationsettings/groupsave.php,
+ .../default/forms/notificationsettings/save.php,
+ .../notifications/subscriptions/collections.php,
+ .../notifications/subscriptions/personal.php,
+ mod/pages/views/default/forms/pages/edit.php,
+ mod/pages/views/default/widgets/pages/edit.php,
+ .../views/default/reportedcontent/form.php,
+ .../views/default/widgets/reportedcontent/edit.php,
+ .../default/usersettings/twitterservice/edit.php: updated the plugins that
+ have already been updated to 1.8 html/css to use divs rather than p tags in
+ forms
+
+ * mod/groups/views/default/forms/groups/delete.php,
+ mod/groups/views/default/forms/groups/edit.php,
+ mod/groups/views/default/groups/edit.php: pulled delete form out of edit view
+ for groups
+
+ * mod/groups/views/default/forms/discussion/save.php,
+ mod/groups/views/default/forms/groups/edit.php,
+ views/default/css/elements/forms.php: recommended to use <div> in forms for
+ wrapping content - added css to support that and updated all group forms
+
+ * views/default/input/form.php: moved security tokens to top of form so we
+ can use :last-child
+
+ * views/default/input/access.php: fixed another bug from last night
+
+ * views/default/input/plaintext.php, views/default/input/radio.php: fixing a
+ few bugs introduced last night in the input views
+
+ * mod/bookmarks/languages/en.php: fixed enable group bookmarks language
+ string
+
+ * views/default/input/checkboxes.php, views/default/input/radio.php: Refs
+ #1393 added work around note to checkboxes and radio inputs for integer
+ labels
+
+ * views/default/css/elements/forms.php, views/default/input/checkboxes.php,
+ views/default/input/radio.php: Fixes #972 checkboxes and radio input fields
+ support horizontal and vertical alignments
+
+ * mod/blog/lib/blog.php: blog object wasn't being passed to the form view
+
+ * engine/lib/output.php: fixed bug in elgg_format_attributes() that caused
+ none string values to be ignored
+
+ * views/default/input/form.php: reverted part of [8148] that broke all forms
+
+
+ * views/default/admin/components/plugin_settings.php,
+ views/default/forms/plugins/settings/save.php: continued cleaning up admin
+ plugin settings
+
+2011-02-12 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/input/radio.php: Fixes #2143: DRYed up input/radio -- other
+ views still should be addressed, but not because they aren't DRY, therefore
+ I'm calling this ticket closed
+
+ * views/default/input/checkbox.php, views/default/input/form.php,
+ views/default/input/password.php, views/default/input/pulldown.php: Refs
+ #2143: General cleanup of input views
+
+ * views/default/input/access.php: Refs #2143: DRYed up input/access -- wow,
+ that feels good
+
+ * views/default/input/longtext.php: Refs #2143: DRYed up input/longtext --
+ maybe I missed it, but was there a difference b/w plaintext and longtext?
+
+ * views/default/input/plaintext.php: Refs #2143: DRYed up input/plaintext
+
+ * views/default/input/dropdown.php: Refs #2143: DRYed up input/dropdown --
+ probably could be better still
+
+ * views/default/input/hidden.php: Refs #2143: DRY up input/hidden
+
+ * views/default/input/password.php: Refs #2143: DRYed up input/password
+
+ * views/default/input/file.php: Refs #2143: DRYed up input/file
+
+ * engine/lib/deprecated-1.8.php, engine/lib/entities.php:
+ register_entity_url_handler => elgg_register_entity_url_handler (because
+ every other reigstration function asks for the callback last)
+
+ * engine/lib/entities.php, engine/lib/extender.php,
+ engine/lib/relationships.php: Refs #2610: Using call_user_func in url hooks
+
+ * engine/lib/pagehandler.php: Page handler uses call_user_func (so methods
+ of classes can be used as page handlers)
+
+2011-02-12 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/twitterservice/start.php, mod/twitterservice/twitterservice_lib.php:
+ Twitter services now allows login with twitter properly for a single user.
+
+ * engine/lib/elgglib.php, engine/lib/plugins.php,
+ engine/lib/private_settings.php: Added
+ elgg_get_entities_from_plugin_user_settings(). Added a name_prefix option to
+ elgg_get_entities_from_private_settings().
+
+2011-02-12 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * documentation/theming/preview/objects.php, engine/lib/views.php,
+ mod/blog/views/default/blog/group_module.php,
+ mod/blog/views/default/blog/sidebar/archives.php,
+ mod/blog/views/default/blog/sidebar/revisions.php,
+ mod/file/views/default/file/group_module.php,
+ .../views/default/discussion/group_module.php,
+ .../default/groups/profile/activity_module.php,
+ .../views/default/groups/sidebar/featured.php,
+ mod/groups/views/default/groups/sidebar/find.php,
+ .../views/default/groups/sidebar/members.php,
+ mod/pages/views/default/pages/group_module.php,
+ mod/pages/views/default/pages/sidebar/history.php,
+ .../views/default/pages/sidebar/navigation.php,
+ views/default/core/members/sidebar.php, views/default/core/river/body.php,
+ views/default/layout/elements/owner_block.php,
+ views/default/layout/shells/admin/menu.php,
+ views/default/layout/shells/two_sidebar.php,
+ views/default/output/tagcloud.php: Fixes #2904: Converted most
+ elgg_view('layout/objects/module') instances to elgg_view_module()
+
+2011-02-12 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page/elements/head.php, views/default/page/shells/admin.php,
+ views/default/page/shells/default.php,
+ views/default/page/shells/walled_garden.php: pulled <head> out into page
+ shell also
+
+2011-02-12 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/views.php: Added an elgg_view_module shortcut function -- now
+ to try it out!
+
+2011-02-12 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page/elements/topbar.php: fixed topbar html
+
+2011-02-12 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/deprecated-1.8.php: Added missing @deprecated tags to a couple
+ functions
+
+ * engine/lib/deprecated-1.8.php, engine/lib/views.php: set_view_location =>
+ elgg_set_view_location (to match elgg_get_view_location)
+
+ * views/default/spotlight/default.php: Bye bye spotlight
+
+ * engine/lib/users.php: One more conversion to elgg_view_form
+
+ * .../views/default/diagnostics/forms/download.php,
+ .../views/default/forms/diagnostics/download.php,
+ mod/file/views/default/file/embed_upload.php,
+ mod/file/views/default/forms/file/upload.php,
+ .../views/default/forms/invitefriends/invite.php,
+ .../views/default/invitefriends/form.php,
+ .../views/default/invitefriends/formitems.php,
+ mod/logbrowser/views/default/logbrowser/form.php,
+ mod/minify/lib/min/.htaccess, mod/minify/lib/min/README.txt,
+ mod/minify/lib/min/builder/_index.js, mod/minify/lib/min/builder/bm.js,
+ mod/minify/lib/min/builder/index.php, mod/minify/lib/min/builder/ocCheck.php,
+ mod/minify/lib/min/builder/rewriteTest.js, mod/minify/lib/min/config.php,
+ mod/minify/lib/min/groupsConfig.php, mod/minify/lib/min/index.php,
+ mod/minify/lib/min/lib/CSS.php, mod/minify/lib/min/lib/FirePHP.php,
+ mod/minify/lib/min/lib/HTTP/ConditionalGet.php,
+ mod/minify/lib/min/lib/HTTP/Encoder.php, mod/minify/lib/min/lib/JSMin.php,
+ mod/minify/lib/min/lib/JSMinPlus.php, mod/minify/lib/min/lib/Minify.php,
+ mod/minify/lib/min/lib/Minify/Build.php,
+ mod/minify/lib/min/lib/Minify/CSS/Compressor.php,
+ mod/minify/lib/min/lib/Minify/CSS/UriRewriter.php,
+ mod/minify/lib/min/lib/Minify/Cache/APC.php,
+ mod/minify/lib/min/lib/Minify/Cache/File.php,
+ mod/minify/lib/min/lib/Minify/Cache/Memcache.php,
+ mod/minify/lib/min/lib/Minify/CommentPreserver.php,
+ mod/minify/lib/min/lib/Minify/Controller/Base.php,
+ mod/minify/lib/min/lib/Minify/Controller/Files.php,
+ .../lib/min/lib/Minify/Controller/Groups.php,
+ .../lib/min/lib/Minify/Controller/MinApp.php,
+ mod/minify/lib/min/lib/Minify/Controller/Page.php,
+ .../lib/min/lib/Minify/Controller/Version1.php,
+ mod/minify/lib/min/lib/Minify/HTML.php,
+ mod/minify/lib/min/lib/Minify/ImportProcessor.php,
+ mod/minify/lib/min/lib/Minify/Lines.php,
+ mod/minify/lib/min/lib/Minify/Logger.php,
+ mod/minify/lib/min/lib/Minify/Packer.php,
+ mod/minify/lib/min/lib/Minify/Source.php,
+ mod/minify/lib/min/lib/Minify/YUICompressor.php,
+ mod/minify/lib/min/lib/Solar/Dir.php, mod/minify/lib/min/utils.php,
+ mod/minify/manifest.xml, mod/minify/start.php, mod/notifications/groups.php,
+ .../forms/notificationsettings/groupsave.php,
+ .../default/forms/notificationsettings/save.php,
+ .../default/notifications/subscriptions/form.php,
+ .../notifications/subscriptions/groupsform.php,
+ .../views/default/admin/users/unvalidated.php,
+ .../forms/uservalidationbyemail/bulk_action.php,
+ views/default/admin/site/advanced.php, views/default/admin/site/basic.php,
+ views/default/core/account/login_box.php,
+ views/default/core/account/login_dropdown.php,
+ views/default/core/account/login_walled_garden.php,
+ views/default/core/river/footer.php, views/default/core/settings/account.php,
+ views/default/forms/admin/site/update_advanced.php,
+ views/default/forms/admin/site/update_basic.php,
+ views/default/forms/friends/edit.php,
+ views/default/forms/user/passwordreset.php, views/default/forms/useradd.php,
+ views/default/forms/usersettings/save.php,
+ views/default/forms/widgets/save.php,
+ views/default/layout/objects/widget/settings.php,
+ views/installation/install/forms/admin.php,
+ views/installation/install/forms/database.php,
+ views/installation/install/forms/settings.php: Converted most forms to use
+ elgg_view_form (therefore also moved the views to forms/*). Some views are
+ left that _only_ do elgg_view_form, so I wonder if those should even be kept
+ around.
+
+2011-02-12 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/twitterservice/twitterservice_lib.php: Registering forward() calls to
+ a plugin-specific reason for use in plugin hooks.
+
+2011-02-12 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/embed/languages/en.php, mod/embed/start.php,
+ mod/embed/views/default/embed/addcontentjs.php,
+ mod/embed/views/default/embed/lightbox_init.php,
+ mod/embed/views/default/embed/link.php,
+ mod/embed/views/default/embed/metatags.php: light clean up on the embed
+ plugin which doesn't appear to work at present
+
+2011-02-11 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/deprecated-1.8.php: Typo correction: @deprecate => @deprecated
+
+ * mod/blog/views/default/js/blog/save_draft.php,
+ .../views/default/widgets/bookmarks/view.php,
+ .../views/default/defaultwidgets/editor.php,
+ mod/embed/views/default/embed/embed.php,
+ mod/embed/views/default/embed/item/gallery.php,
+ mod/embed/views/default/embed/item/list.php,
+ mod/embed/views/default/embed/metatags.php,
+ mod/embed/views/default/embed/upload/content.php,
+ mod/file/views/default/file/embed_upload.php,
+ .../views/default/groups/profile/widgets.php,
+ .../views/default/widgets/messageboard/content.php,
+ .../views/default/forms/messages/process.php,
+ .../notifications/subscriptions/collections.php,
+ .../notifications/subscriptions/forminternals.php,
+ .../notifications/subscriptions/jsfuncs.php,
+ .../views/default/pages/sidebar/navigation.php,
+ mod/profile/views/default/profile/wrapper.php,
+ mod/thewire/views/default/thewire/forms/add.php,
+ mod/tinymce/views/default/tinymce/init.php,
+ mod/zaudio/views/default/zaudio/audioplayer.php,
+ views/default/core/account/login_box.php,
+ views/default/core/account/login_dropdown.php,
+ views/default/core/account/login_walled_garden.php,
+ views/default/core/friends/collection.php,
+ views/default/core/friends/collections.php,
+ views/default/core/friends/collectiontabs.php,
+ views/default/core/friends/picker.php,
+ .../default/core/friends/tablelistcountupdate.php,
+ views/default/core/river/filter.php, views/default/forms/avatar/crop.php,
+ views/default/forms/register.php,
+ views/default/forms/user/requestnewpassword.php,
+ views/default/input/autocomplete.php, views/default/input/datepicker.php,
+ views/default/input/userpicker.php,
+ views/installation/install/forms/template.php: Added disapproving @todo's
+ wherever I could find javascript not conforming to 1.8 conventions
+
+2011-02-11 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/categories/actions/save.php, mod/categories/languages/en.php,
+ mod/categories/listing.php, mod/categories/readme.txt,
+ mod/categories/start.php, mod/categories/views/default/categories.php,
+ mod/categories/views/default/categories/list.php,
+ mod/categories/views/default/categories/view.php,
+ mod/categories/views/default/input/categories.php,
+ mod/categories/views/default/output/categories.php,
+ .../views/default/settings/categories/edit.php: some clean up of the
+ categories plugin - html/css polish needed
+
+2011-02-11 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/plugins.php: Fixes #2888: Plugins are checked for validity in
+ elgg_get_plugins(). It won't return broken plugins unless specifically
+ requested.
+
+ * engine/lib/annotations.php, engine/lib/deprecated-1.8.php: Moved
+ list_entities_from_annotation_count_by_metadata() to deprecated-18.php.
+
+ * engine/lib/annotations.php, engine/lib/deprecated-1.8.php: Refs #650.
+ Added 'annotation_calculation' to elgg_get_annotations(). Deprecated
+ list_annotations() by elgg_list_annotations(). Deprecated get_annotations_*()
+ by elgg_get_annotations() and passing annotation_calculation.
+
+ * engine/lib/entities.php: Added $viewer callback option for
+ elgg_list_entities().
+
+ * engine/lib/views.php: Fixed doc spacing that was throwing errors in PHP
+ Code Sniffer.
+
+2011-02-11 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css/admin.php, views/default/css/elements/page_layout.php,
+ views/default/page/shells/admin.php, views/default/page/shells/default.php:
+ elgg-classic => elgg-page-classic, elgg-admin => elgg-page-admin
+
+ * views/default/css/elements/layout_objects.php,
+ views/default/css/elements/modules.php, views/default/css/screen.php: Added
+ css/elements/modules.php. Modules and widgets deserve their own space.
+
+ * views/default/admin/components/plugin.php, views/default/css/admin.php,
+ views/default/page/shells/default.php: Cleaned up admin advanced plugins view
+ a bit
+
+ * views/default/page/elements/head.php,
+ views/default/page/elements/html_begin.php,
+ views/default/page/elements/html_end.php,
+ views/default/page/shells/admin.php, views/default/page/shells/default.php,
+ views/default/page/shells/walled_garden.php: Fixes #1303: Pulled
+ html_begin/end into page shells. extracted <head> element into
+ page/elements/head
+
+ * mod/blog/manifest.xml, mod/bookmarks/manifest.xml,
+ mod/categories/manifest.xml, mod/defaultwidgets/manifest.xml,
+ mod/diagnostics/manifest.xml, mod/embed/manifest.xml, mod/file/manifest.xml,
+ mod/garbagecollector/manifest.xml, mod/groups/manifest.xml,
+ mod/htmlawed/manifest.xml, mod/invitefriends/manifest.xml,
+ mod/logbrowser/manifest.xml, mod/logrotate/manifest.xml,
+ mod/messageboard/manifest.xml, mod/messages/manifest.xml,
+ mod/notifications/manifest.xml, mod/oauth_lib/manifest.xml,
+ mod/pages/manifest.xml, mod/reportedcontent/manifest.xml,
+ mod/search/manifest.xml, mod/sitepages/manifest.xml,
+ mod/tagcloud/manifest.xml, mod/thewire/manifest.xml,
+ mod/tinymce/manifest.xml, mod/twitter/manifest.xml,
+ mod/twitterservice/manifest.xml, mod/uservalidationbyemail/manifest.xml,
+ mod/zaudio/manifest.xml: Converted all manifest files to 1.8 style
+
+2011-02-11 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php, engine/lib/deprecated-1.8.php: Moved
+ get_annotations() to deprecated-1.8.
+
+ * engine/lib/annotations.php, engine/lib/metadata.php,
+ engine/tests/api/entity_getter_functions.php: Refs #650. Deprecated
+ get_annotations() for elgg_get_annotations().
+
+2011-02-11 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/diagnostics/start.php: not outputing all the plugin information in
+ diagnostics plugin due to new plugin system structure
+
+ * engine/lib/admin.php: Fixes #2872 - returned plugin settings menu to
+ working order
+
+2011-02-11 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css/admin.php,
+ .../forms/admin/plugins/simple_update_states.php: Cleanup of basic plugins
+ area
+
+ * views/default/admin/components/invalid_plugin.php,
+ views/default/admin/components/plugin.php, views/default/css/admin.php,
+ .../forms/admin/plugins/simple_update_states.php, views/default/js/admin.php:
+ More cleanup of admin/plugins css
+
+ * views/default/admin/components/plugin.php,
+ .../admin/components/plugin_dependencies.php, views/default/css/admin.php:
+ elgg-$state-dependency => elgg-state-(error|success)
+
+ * views/default/output/rss_view.php: Removed unused view: output/rss_view
+
+ * .../uservalidationbyemail/unvalidated_user.php: Converted hardcoded styles
+ to css primitives
+
+2011-02-10 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/input/reset.php, views/default/input/submit.php: Removed
+ nonsensical comments
+
+ * mod/blog/views/default/forms/blog/save.php,
+ mod/groups/views/default/forms/groups/edit.php,
+ .../notifications/subscriptions/forminternals.php,
+ views/default/admin/site/advanced.php, views/default/admin/site/basic.php,
+ views/default/core/settings/account.php,
+ views/default/css/elements/chrome.php,
+ views/default/page/elements/topbar.php: Added border primitives
+ "b<loc><type>" where type is "a" or "b" -- anyone want to choose better
+ names? :)
+
+ * mod/blog/views/default/forms/blog/save.php:
+
+ * mod/blog/views/default/forms/blog/save.php,
+ mod/groups/views/default/groups/edit.php,
+ .../views/default/groups/invitationrequests.php,
+ .../views/default/groups/membershiprequests.php: disabled =>
+ elgg-state-disabled in plugins (only found in blog and groups)
+
+ * views/default/admin/plugins/simple.php,
+ .../forms/admin/plugins/simple_update_states.php: Moved the simple plugins
+ admin form to the forms/ dir
+
+ * views/default/admin/components/plugin.php,
+ views/default/core/account/login_walled_garden.php,
+ views/default/css/admin.php, views/default/css/elements/forms.php,
+ views/default/forms/profile/fields/reset.php,
+ views/default/page/shells/walled_garden.php,
+ views/installation/install/nav.php: .disabled => .elgg-state-disabled (core
+ only)
+
+ * views/default/admin/plugins/advanced.php: Using spacing primitives rather
+ than <br/>
+
+ * views/default/css/admin.php: Corrected minor problem with admin tables
+
+ * views/default/forms/plugins/settings/save.php,
+ views/default/forms/plugins/usersettings/save.php,
+ views/default/object/plugin.php: Plugin settings forms now use the forms/
+ directory
+
+2011-02-10 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/navigation.php: fixed access issue on menu name
+
+2011-02-10 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * documentation/theming/preview/forms.php, mod/blog/lib/blog.php,
+ mod/blog/views/default/forms/blog/save.php,
+ .../views/default/admin/utilities/diagnostics.php, mod/file/index.php,
+ mod/file/views/default/object/file.php,
+ mod/groups/views/default/groups/css.php,
+ mod/groups/views/default/groups/edit.php,
+ .../views/default/groups/invitationrequests.php,
+ .../views/default/groups/membershiprequests.php,
+ .../views/default/groups/profile/buttons.php, mod/messages/read.php,
+ .../views/default/forms/messages/process.php, mod/pages/view.php,
+ mod/profile/views/default/profile/css.php,
+ mod/profile/views/default/profile/owner_block.php,
+ .../views/default/object/reported_content.php,
+ mod/thewire/views/default/object/thewire.php,
+ mod/thewire/views/default/thewire/css.php,
+ mod/thewire/views/default/thewire/forms/add.php,
+ .../views/default/thewire/profile_status.php,
+ views/default/admin/components/plugin.php,
+ views/default/admin/plugins/advanced.php,
+ views/default/admin/plugins/simple.php,
+ views/default/core/account/login_walled_garden.php,
+ views/default/core/friends/picker.php, views/default/css/admin.php,
+ views/default/css/elements/forms.php, views/default/css/elements/misc.php,
+ views/default/forms/profile/fields/reset.php, views/default/input/button.php,
+ views/default/layout/shells/content/header.php,
+ views/default/layout/shells/widgets/add_button.php,
+ views/default/page/elements/content_header.php,
+ views/installation/input/button.php: Converted buttons to elgg-object-type
+ naming convention. Added table of buttons to forms theming preview meant for
+ previewing all button types and states (still have to implement those...)
+
+2011-02-09 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/deprecated-1.8.php, mod/garbagecollector/start.php,
+ mod/groups/actions/edit.php, mod/groups/views/default/forms/groups/edit.php,
+ mod/logrotate/start.php, mod/sitepages/start.php,
+ mod/twitterservice/start.php, mod/twitterservice/twitterservice_lib.php,
+ .../views/default/twitterservice/metatags.php,
+ views/default/core/settings/tools/plugin.php: Refs #2874. Finished removing
+ calls to deprecated plugin mgmt functions in core and core plugins.
+
+ * actions/plugins/settings/save.php, actions/plugins/usersettings/save.php,
+ engine/lib/admin.php, engine/lib/deprecated-1.8.php, engine/lib/plugins.php,
+ views/default/admin/components/plugin_settings.php,
+ views/default/core/settings/tools.php,
+ views/default/core/settings/tools/plugin.php,
+ views/default/object/plugin.php: Refs #2874: More removal of deprecated
+ function user in plugins systems.
+
+ * engine/classes/ElggPlugin.php, engine/lib/deprecated-1.8.php,
+ engine/lib/plugins.php: Refs #2869, #2874. Renamed ElggPlugin::remove*
+ functions to unset*. Added ElggPlugin::getAllUserSettings() and
+ getAllSettings(). Deprecated all plugin settings and user setting functions
+ with correctly named functions.
+
+2011-02-09 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css/elements/helpers.php: Slightly more efficient way of
+ declaring spacing helpers
+
+2011-02-09 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/file/manifest.xml, mod/messages/manifest.xml, mod/pages/manifest.xml,
+ mod/search/manifest.xml: updated version number
+
+2011-02-09 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggPlugin.php, engine/lib/plugins.php: Refs #2869: Fixed
+ problems when deleting user settings using wrapper function.
+
+ * engine/classes/ElggPluginPackage.php, engine/lib/admin.php,
+ mod/diagnostics/start.php, pages/settings/tools.php,
+ views/default/core/settings/tools.php,
+ views/default/core/settings/tools/plugin.php,
+ views/default/object/plugin.php: Refs #2874: Using elgg_get_plugins() instead
+ of get_installed_plugins().
+
+ * engine/classes/ElggPlugin.php: Fixed typo that break
+ ElggPlugin::isActive().
+
+ * engine/lib/input.php, engine/lib/upgrades/2010050701.php,
+ engine/lib/upgrades/2010100500.php, mod/embed/views/default/embed/embed.php,
+ mod/embed/views/default/embed/link.php, mod/notifications/start.php,
+ mod/sitepages/index.php, mod/thewire/start.php, mod/twitterservice/start.php,
+ views/default/core/settings/tools.php: Refs #2874: Using
+ elgg_is_active_plugin() in core and bundled plugins.
+
+2011-02-08 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggPlugin.php, engine/lib/deprecated-1.8.php,
+ engine/lib/plugins.php: Fixes #2858: is_plugin_enabled() is deprecated by
+ elgg_is_active_plugin() instead of ElggPlugin::isActive().
+
+ * engine/classes/ElggPlugin.php, engine/lib/plugins.php: Fixes #2869: User
+ settings for plugins work again.
+
+2011-02-08 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/tagcloud/languages/de.php, mod/tagcloud/languages/en.php,
+ mod/tagcloud/manifest.xml, mod/tagcloud/start.php, mod/tagcloud/tagcloud.php,
+ mod/tagcloud/views/default/tagcloud/css.php,
+ .../views/default/widgets/tagcloud/content.php,
+ .../views/default/widgets/tagcloud/edit.php: cleaned up tagcloud plugin
+
+ * mod/search/start.php, .../views/default/search/comments/entity.php,
+ mod/search/views/default/search/css.php,
+ mod/search/views/default/search/entity.php,
+ mod/search/views/default/search/list.php: updated search plugin for new
+ html/css
+
+ * .../views/default/admin/utilities/diagnostics.php: ahhh...missed this one
+ too
+
+ * mod/logbrowser/views/default/logbrowser/form.php: missed this file in the
+ admin backend update last night
+
+ * engine/lib/views.php, views/default/layout/elements/title.php: added a
+ class variable to title view
+
+2011-02-08 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggPluginManifest.php,
+ engine/classes/ElggPluginPackage.php: Fixes #2863: Can now use all 6 dep
+ types with conflicts.
+
+ * engine/classes/ElggPluginManifest.php,
+ engine/classes/ElggPluginManifestParser18.php,
+ engine/classes/ElggPluginPackage.php, engine/lib/plugins.php,
+ engine/tests/api/plugins.php, engine/tests/test_files/plugin_18/manifest.xml,
+ languages/en.php, views/default/admin/components/plugin.php,
+ .../admin/components/plugin_dependencies.php, views/default/css/admin.php:
+ Added suggests to the plugins deps system. It parallels the requires system,
+ but doesn't affect if the plugin can be enabled and only shows up in the deps
+ table on the advanced view.
+
+ * engine/classes/ElggPluginManifest.php: Running plugins' blurb,
+ description, name, and screenshot->description through elgg_echo().
+
+2011-02-08 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css/admin.php, views/default/layout/shells/admin.php,
+ views/default/page/shells/admin.php: rough system messages implementation for
+ admin backend
+
+ * js/lib/ui.js, views/default/admin/components/plugin_settings.php,
+ views/default/admin/statistics/overview.php,
+ views/default/admin/users/newest.php, views/default/admin/users/online.php,
+ views/default/css/admin.php, views/default/forms/admin/menu/save.php,
+ views/default/forms/useradd.php, views/default/layout/shells/admin.php,
+ views/default/layout/shells/admin/menu.php: updates for the admin css based
+ on the reworking I did to the html
+
+ * .../views/default/reportedcontent/footer_link.php,
+ views/default/annotation/generic_comment.php,
+ views/default/css/elements/forms.php,
+ views/default/css/elements/navigation.php,
+ views/default/css/elements/typography.php, views/default/icon/default.php,
+ views/default/input/form.php, views/default/navigation/menu/user_hover.php,
+ views/default/output/tagcloud.php: bringing us a little closer to validating
+
+ * mod/blog/views/default/forms/blog/save.php,
+ mod/groups/views/default/forms/groups/edit.php,
+ .../notifications/subscriptions/forminternals.php,
+ views/default/admin/site/advanced.php, views/default/admin/site/basic.php,
+ views/default/core/settings/account.php,
+ views/default/css/elements/chrome.php: a tiny amount of progress on the css
+ chrome element view
+
+ * js/lib/ui.js, views/default/css/elements/chrome.php,
+ views/default/css/elements/forms.php, views/default/css/elements/grid.php,
+ views/default/css/elements/helpers.php, views/default/css/elements/icons.php,
+ views/default/css/elements/layout_objects.php,
+ views/default/css/elements/navigation.php,
+ views/default/css/elements/page_layout.php,
+ views/default/css/elements/typography.php,
+ views/default/layout/elements/page_links.php,
+ views/default/layout/objects/image_block.php,
+ views/default/navigation/menu/page.php,
+ views/default/navigation/menu/site.php,
+ views/default/navigation/menu/user_hover.php,
+ views/default/page/elements/footer.php: more tweaking of css - menu and
+ general clean up
+
+ * views/default/css/elements/navigation.php,
+ views/default/css/elements/page_layout.php,
+ views/default/layout/shells/content/header.php,
+ views/default/page/elements/header_logo.php: starting to standardize on
+ elgg-<type>-<subtype> for css such as elgg-heading-site
+
+2011-02-07 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css/admin.php, views/default/css/elements/chrome.php,
+ views/default/css/elements/forms.php,
+ views/default/css/elements/page_layout.php,
+ views/default/css/elements/reset.php,
+ views/default/css/elements/typography.php: removed some old css no longer
+ supported by modern browsers
+
+2011-02-07 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/profile/fields/add.php, actions/profile/fields/edit.php,
+ engine/lib/admin.php, .../admin/appearance/profile_fields/list.php,
+ views/default/css/admin.php, views/default/js/admin.php: Pulled elgg-icon and
+ elgg-icon-* into the admin css. Pulled out profile field JS into elgg.admin
+ obj. Fixed editing profile field names.
+
+ * _graphics/elgg_sprites.png, documentation/theming/preview/icons.php,
+ views/default/css/elements/icons.php: Added dragger icon.
+
+2011-02-07 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/plugins.php: fixed typo in plugin library
+
+ * languages/en.php, mod/search/index.php, mod/search/start.php,
+ mod/search/views/default/search/list.php,
+ mod/search/views/default/search/listing.php: Fixes 2354 Using list instead of
+ listing for search now
+
+ * mod/search/index.php, mod/search/start.php,
+ .../views/default/search/comments/entity.php,
+ mod/search/views/default/search/entity.php,
+ mod/search/views/default/search/entity_list.php,
+ mod/search/views/default/search/gallery.php,
+ .../views/default/search/gallery_listing.php,
+ mod/search/views/default/search/layout.php,
+ mod/search/views/default/search/listing.php,
+ mod/search/views/default/search/search_box.php,
+ mod/search/views/default/search/startblurb.php,
+ mod/search/views/rss/search/comments/entity.php,
+ mod/search/views/rss/search/entity.php,
+ mod/search/views/rss/search/layout.php,
+ mod/search/views/rss/search/listing.php: Fixes #2335 #2336 clean up and minor
+ standardization of search plugin - needs html/css clean up
+
+2011-02-07 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/admin.php, views/default/admin/components/plugin.php,
+ views/default/admin/plugins/advanced.php, views/default/js/admin.php: Added
+ drag and drop reordering of plugins. Started pulling out admin area's js into
+ elgg.admin JS object.
+
+2011-02-07 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, engine/lib/input.php: moved sticky forms into the
+ input library
+
+2011-02-06 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/search/views/default/search/entity.php,
+ views/default/entities/entity_list.php,
+ views/default/entities/entity_listing.php,
+ views/default/entities/gallery.php,
+ views/default/entities/gallery_listing.php, views/default/entities/list.php,
+ views/default/entities/list_item.php, views/default/graphics/icon.php,
+ views/default/object/default.php: removing old entities views that are no
+ longer needed and did the last changes for the icon system
+
+ * mod/groups/icon.php, mod/groups/start.php,
+ mod/groups/views/default/group/default.php,
+ .../views/default/groups/profile/profile_block.php: updated the groups plugin
+ to use the new icon structure
+
+ * engine/lib/views.php, mod/file/start.php,
+ mod/file/views/default/file/icon.php,
+ .../default/file/icon/application/default.php,
+ .../views/default/file/icon/application/excel.php,
+ .../views/default/file/icon/application/msword.php,
+ .../views/default/file/icon/application/pdf.php,
+ .../default/file/icon/application/powerpoint.php,
+ .../default/file/icon/application/vnd.ms-excel.php,
+ .../file/icon/application/vnd.ms-powerpoint.php,
+ .../application/vnd.oasis.opendocument.text.php,
+ .../views/default/file/icon/application/x-gzip.php,
+ .../file/icon/application/x-rar-compressed.php,
+ .../default/file/icon/application/x-stuffit.php,
+ .../views/default/file/icon/application/zip.php,
+ mod/file/views/default/file/icon/archive.php,
+ mod/file/views/default/file/icon/audio.php,
+ mod/file/views/default/file/icon/audio/default.php,
+ mod/file/views/default/file/icon/default.php,
+ mod/file/views/default/file/icon/document.php,
+ mod/file/views/default/file/icon/text/default.php,
+ .../views/default/file/icon/text/directory.php,
+ mod/file/views/default/file/icon/text/v-card.php,
+ mod/file/views/default/file/icon/video.php,
+ mod/file/views/default/file/icon/video/default.php,
+ mod/file/views/default/object/file.php, views/default/icon/default.php:
+ updated the file plugin to use the new icon structure
+
+ * engine/classes/ElggUser.php, engine/lib/actions.php,
+ engine/lib/database.php, engine/lib/deprecated-1.7.php,
+ engine/lib/elgglib.php, engine/lib/entities.php,
+ engine/lib/relationships.php, engine/lib/widgets.php: fixed some minor
+ documentation issues
+
+ * mod/bookmarks/views/default/object/bookmarks.php: missed this use of
+ elgg_count_comments() in change to ->countComments()
+
+2011-02-06 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggPlugin.php: Fixed bug when trying to set a plugin's
+ priority to 1 without using "first."
+
+2011-02-06 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggEntity.php, engine/lib/elgglib.php,
+ engine/lib/views.php, mod/blog/views/default/object/blog.php,
+ mod/file/views/default/object/file.php,
+ .../views/default/object/groupforumtopic.php,
+ mod/pages/views/default/object/page_top.php,
+ views/default/core/likes/display.php: moved the count comments and likes
+ functions into the ElggEntity class
+
+ * engine/lib/views.php, mod/file/edit.php, mod/messages/read.php: Fixes
+ #2854 removing my bad idea of auto-appending action in elgg_view_form()
+
+ * mod/pages/actions/pages/delete.php, mod/pages/start.php,
+ .../views/default/icon/object/page/medium.php,
+ mod/pages/views/default/icon/object/page/small.php,
+ .../views/default/icon/object/page_top/medium.php,
+ .../views/default/icon/object/page_top/small.php,
+ mod/pages/views/default/pages/icon.php: Fixes #2853 pages plugin uses the
+ icon url plugin hook and fixes delete action
+
+ * documentation/theming/preview/objects.php, js/lib/elgglib.js,
+ .../core/settings/statistics/numentities.php,
+ views/default/core/settings/statistics/online.php,
+ views/default/css/elements/chrome.php,
+ views/default/css/elements/layout_objects.php,
+ views/default/css/elements/page_layout.php,
+ views/default/page/elements/messages.php: more css/html improvements - added
+ .elgg-table and a featured module
+
+ * views/default/input/access.php, views/default/input/checkboxes.php,
+ views/default/input/datepicker.php, views/default/input/dropdown.php,
+ views/default/input/email.php, views/default/input/hidden.php,
+ views/default/input/longtext.php, views/default/input/plaintext.php,
+ views/default/input/radio.php, views/default/input/tags.php,
+ views/default/input/text.php, views/default/input/url.php,
+ views/default/input/userpicker.php: Fixes #2510 sticky forms is finish - Elgg
+ 1.9 could have a ElggForm class that makes it even easier to use a sticky
+ form
+
+2011-02-05 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * documentation/theming/preview/objects.php, engine/lib/views.php,
+ mod/blog/views/default/blog/group_module.php,
+ mod/blog/views/default/blog/sidebar/archives.php,
+ mod/blog/views/default/blog/sidebar/revisions.php,
+ mod/file/views/default/file/group_module.php,
+ .../views/default/discussion/group_module.php,
+ .../default/groups/profile/activity_module.php,
+ .../views/default/groups/sidebar/featured.php,
+ mod/groups/views/default/groups/sidebar/find.php,
+ .../views/default/groups/sidebar/members.php,
+ .../notifications/subscriptions/collections.php,
+ .../notifications/subscriptions/forminternals.php,
+ .../notifications/subscriptions/groupsform.php,
+ .../notifications/subscriptions/personal.php,
+ mod/pages/views/default/pages/group_module.php,
+ mod/pages/views/default/pages/sidebar/history.php,
+ .../views/default/pages/sidebar/navigation.php,
+ views/default/core/likes/display.php, views/default/core/members/sidebar.php,
+ .../core/settings/account/default_access.php,
+ views/default/core/settings/account/email.php,
+ views/default/core/settings/account/language.php,
+ .../core/settings/account/notifications.php,
+ views/default/core/settings/account/password.php,
+ .../core/settings/statistics/numentities.php,
+ views/default/core/settings/statistics/online.php,
+ views/default/core/settings/tools/plugin.php,
+ views/default/css/elements/chrome.php, views/default/css/elements/grid.php,
+ views/default/css/elements/layout_objects.php,
+ views/default/css/elements/page_layout.php,
+ views/default/css/elements/reset.php, views/default/output/tagcloud.php:
+ using elgg-module-<type>
+
+ * views/default/icon/user/default/large.php,
+ views/default/icon/user/default/master.php,
+ views/default/icon/user/default/medium.php,
+ views/default/icon/user/default/small.php,
+ views/default/icon/user/default/tiny.php,
+ views/default/icon/user/default/topbar.php, views/default/profile/hover.php:
+ a little clean up of unnecessary views
+
+ * documentation/theming/preview/icons.php, engine/classes/ElggEntity.php,
+ engine/lib/deprecated-1.8.php, engine/lib/entities.php, engine/lib/input.php,
+ engine/lib/users.php, engine/lib/views.php, js/lib/ui.js,
+ mod/pages/views/default/pages/icon.php, views/default/css/elements/icons.php,
+ views/default/input/userpicker.php, views/default/page/elements/topbar.php,
+ views/default/profile/icon.php, views/foaf/page/shells/default.php: Fixes
+ #2559 refs #2475 added ElggEntity:getIconURL() and elgg_view_entity_icon()
+
+2011-02-05 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/admin/components/plugin.php,
+ views/default/admin/plugins/advanced.php, views/default/css/admin.php: The
+ screenshot desc is now used. Small css changes.
+
+ * views/default/admin/components/plugin.php,
+ views/default/admin/plugins/advanced.php, views/default/css/admin.php: Better
+ displaying of full screenshots in plugins admin.
+
+ * engine/classes/ElggPluginPackage.php, engine/lib/plugins.php: Fixes #2852:
+ Checking other plugins' conflicts to see if plugin is able to be activated in
+ ElggPluginPackage->checkDependencies(). Some language clarification in admin
+ panel.
+
+2011-02-05 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * documentation/theming/preview/widgets.php: fixed widgets theming preview
+ by overriding some javascript
+
+ * engine/classes/ElggEntity.php: supporting private settings before an
+ entity is saved
+
+ * engine/classes/ElggPlugin.php, engine/classes/ElggWidget.php,
+ engine/lib/users.php: using setPrivateSetting() and getPrivateSetting()
+ instead of procedural functions
+
+ * views/default/css/elements/icons.php,
+ views/default/graphics/ajax_loader.php: fixed ajax loader css and html
+
+ * documentation/css/preview/forms.php,
+ documentation/css/preview/general.php, documentation/css/preview/grid.php,
+ documentation/css/preview/head.php, documentation/css/preview/icons.php,
+ documentation/css/preview/index.php, documentation/css/preview/nav.php,
+ documentation/css/preview/objects.php, documentation/css/preview/widgets.php,
+ documentation/theming/preview/forms.php,
+ documentation/theming/preview/general.php,
+ documentation/theming/preview/grid.php,
+ documentation/theming/preview/head.php,
+ documentation/theming/preview/icons.php,
+ documentation/theming/preview/index.php,
+ documentation/theming/preview/nav.php,
+ documentation/theming/preview/objects.php,
+ documentation/theming/preview/widgets.php, mod/developers/languages/en.php,
+ .../views/default/admin/developers/preview.php: changed named from css
+ preview to theming preview
+
+ * documentation/css/preview/forms.php,
+ documentation/css/preview/general.php, documentation/css/preview/grid.php,
+ documentation/css/preview/icons.php, documentation/css/preview/nav.php,
+ documentation/css/preview/objects.php, documentation/css/preview/widgets.php:
+ better navigation for theming previews
+
+ * documentation/css/preview/grid.php, documentation/css/preview/icons.php,
+ js/lib/ui.js, views/default/css/elements/grid.php,
+ views/default/css/elements/icons.php,
+ views/default/css/elements/layout_objects.php,
+ views/default/css/elements/navigation.php, views/default/js/elgg.php,
+ views/default/profile/hover.php: cleaned up hover menu
+
+ * mod/blog/views/default/forms/blog/save.php,
+ views/default/css/elements/base.php, views/default/css/elements/chrome.php,
+ views/default/css/elements/core.php, views/default/css/elements/forms.php,
+ views/default/css/elements/helpers.php,
+ views/default/css/elements/layout.php,
+ views/default/css/elements/layout_objects.php,
+ views/default/css/elements/misc.php,
+ views/default/css/elements/page_layout.php,
+ views/default/css/elements/spacing.php,
+ views/default/css/elements/typography.php, views/default/css/screen.php,
+ views/default/page/elements/header_logo.php: getting back to the css - making
+ changes based on Evan's comments
+
+ * documentation/css/preview/forms.php,
+ documentation/css/preview/general.php, documentation/css/preview/grid.php,
+ documentation/css/preview/icons.php, documentation/css/preview/images.php,
+ documentation/css/preview/index.php, documentation/css/preview/nav.php,
+ documentation/css/preview/objects.php, documentation/css/preview/widgets.php:
+ cleaned up navigation of the css preview documentation
+
+ * mod/developers/start.php, .../views/default/admin/developers/preview.php,
+ mod/developers/views/default/developers/css.php: setting size for iframe for
+ css preview
+
+ * views/default/css/admin.php, views/default/layout/shells/admin.php:
+ removed unecessary inner div for .elgg-main because of switch back to
+ overflow: hidden
+
+2011-02-05 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/plugins.php: Fixed a problem with detecting conflicting plugin
+ versions. Not showing a stray = when versions aren't specified in conflicts
+ and requires.
+
+2011-02-04 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/admin.php, views/default/admin/components/plugin.php,
+ views/default/css/admin.php: Added support for screenshots in the advanced
+ plugin admin.
+
+ * engine/classes/ElggPlugin.php: Fixed typo that caused ElggPlugin->path not
+ to be correctly set when loading from a plugin id.
+
+ * documentation/examples/plugins/manifest.xml,
+ engine/classes/ElggPluginManifest.php, engine/classes/ElggPluginPackage.php,
+ engine/lib/plugins.php, engine/tests/api/plugins.php,
+ engine/tests/test_files/plugin_18/manifest.xml: Renamed 'name' to 'plugin'
+ for priority req. Updated unit tests and docs.
+
+ * documentation/examples/plugins/manifest.xml: Added priority requires to
+ example manifest.
+
+ * engine/lib/plugins.php, languages/en.php,
+ views/default/admin/components/plugin.php: Fixed problems showing detected
+ values for plugin conflicts. Clarified language for what the first value
+ column means.
+
+ * engine/classes/ElggMenuItem.php, engine/classes/ElggPlugin.php,
+ engine/classes/ElggPluginManifest.php, engine/classes/ElggPluginPackage.php,
+ engine/lib/plugins.php, languages/en.php,
+ .../admin/components/plugin_dependencies.php, views/default/css/admin.php:
+ Added new priority 'requires' for plugin dep system. You can now say that a
+ plugin is required to be after / before another plugin in the system.
+
+2011-02-04 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggData.php: I'm a dummy -- getType and getSubtype are
+ taken care of by Loggable...
+
+ * engine/classes/ElggData.php: Added type and subtype abstract functions to
+ ElggData
+
+2011-02-04 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php: Fixes #2822: Added missing language string.
+
+ * engine/classes/ElggPluginPackage.php, engine/lib/deprecated-1.8.php,
+ engine/lib/plugins.php: Fixes #2820, Fixes #2823. Using elgg_get_plugins() in
+ elgg_get_plugins_provides(). Fixed plugin conflicts system. Removed cruft
+ from ElggPluginPackage. Fixed deprecated get_installed_plugins() to honor the
+ type requested.
+
+2011-02-03 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/deprecated-1.8.php: Updated elgg_get_plugin_path in
+ load_plugin_manifest to elgg_get_plugins_path
+
+ * mod/profile/start.php, mod/sitepages/views/default/sitepages/css.php,
+ pages/dashboard.php, views/default/layout/shells/widgets.php: Changed widgets
+ layout "box" parameter to "content" just like the other layouts
+
+2011-02-03 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * documentation/css/preview/forms.php, install/ElggInstaller.php,
+ mod/blog/views/default/forms/blog/save.php,
+ mod/blog/views/default/input/datetime.php,
+ mod/blog/views/default/widgets/blog/edit.php,
+ mod/embed/views/default/embed/upload/content.php,
+ mod/file/views/default/widgets/filerepo/edit.php,
+ .../default/settings/garbagecollector/edit.php,
+ mod/groups/views/default/forms/discussion/save.php,
+ mod/groups/views/default/settings/groups/edit.php,
+ .../views/default/widgets/a_users_groups/edit.php,
+ .../views/default/settings/logrotate/edit.php,
+ mod/messages/views/default/forms/messages/send.php,
+ mod/pages/views/default/widgets/pages/edit.php,
+ .../views/default/widgets/reportedcontent/edit.php,
+ .../default/sitepages/forms/editfrontsimple.php,
+ .../views/default/widgets/tagcloud/edit.php,
+ .../views/default/settings/twitterservice/edit.php,
+ .../views/default/admin/users/unvalidated.php,
+ views/default/admin/plugins/advanced.php,
+ views/default/admin/site/advanced.php, views/default/admin/site/basic.php,
+ views/default/core/river/filter.php,
+ views/default/core/settings/account/language.php,
+ views/default/css/admin.php, views/default/forms/admin/menu/save.php,
+ views/default/input/access.php, views/default/input/dropdown.php,
+ views/default/input/pulldown.php, views/default/output/dropdown.php,
+ views/default/output/pulldown.php,
+ views/default/widgets/content_stats/edit.php,
+ views/default/widgets/friends/edit.php,
+ views/default/widgets/new_users/edit.php,
+ views/default/widgets/online_users/edit.php,
+ views/installation/input/access.php, views/installation/input/dropdown.php,
+ views/installation/input/pulldown.php: changed input/pulldown to
+ input/dropdown
+
+ * engine/lib/tags.php, engine/lib/views.php, engine/tests/ui/submenu.php,
+ mod/bookmarks/bookmarklet.php, mod/thewire/add.php, mod/thewire/everyone.php,
+ mod/thewire/index.php, pages/friends/edit.php,
+ .../layout/shells/one_column_with_sidebar.php: removed
+ one_column_with_sidebar layout - use one_sidebar instead
+
+ * engine/lib/views.php, mod/categories/views/default/categories.php,
+ mod/categories/views/default/categories/list.php,
+ .../views/default/sitepages/keywords/userlist.php: removed uses of
+ $vars[config] in views
+
+ * engine/lib/output.php, .../views/default/twitterservice/login.php,
+ .../views/default/admin/users/unvalidated.php: removes uses of $vars[url]
+ from core and plugins
+
+ * engine/lib/views.php: Fixes #2124 only setting $vars[user], $vars[url],
+ and $vars[config] in elgg_view() if not already set
+
+ * engine/classes/ElggPlugin.php, engine/classes/ElggPluginPackage.php,
+ engine/lib/configuration.php, engine/lib/plugins.php, mod/blog/start.php,
+ mod/categories/start.php, mod/defaultwidgets/start.php,
+ mod/developers/start.php, mod/diagnostics/start.php,
+ mod/file/actions/file/download.php, mod/file/start.php, mod/groups/icon.php,
+ mod/groups/start.php, mod/invitefriends/start.php,
+ mod/messageboard/start.php, mod/messages/start.php,
+ mod/notifications/start.php, mod/pages/start.php,
+ mod/reportedcontent/start.php, mod/sitepages/start.php,
+ mod/thewire/start.php, mod/twitterservice/start.php,
+ views/default/admin/components/plugin.php: changed elgg_get_plugin_path() to
+ elgg_get_plugins_path()
+
+ * engine/lib/configuration.php, mod/categories/start.php,
+ mod/defaultwidgets/start.php, mod/diagnostics/start.php,
+ mod/groups/start.php, mod/pages/start.php, mod/profile/start.php,
+ mod/search/start.php, mod/twitterservice/languages/en.php,
+ mod/twitterservice/twitterservice_lib.php,
+ .../default/usersettings/twitterservice/edit.php: Refs #2428 just a few more
+ CONFIG uses left to be replaced
+
+ * mod/categories/actions/save.php,
+ .../views/default/settings/categories/edit.php, mod/file/start.php,
+ mod/groups/actions/addtogroup.php, mod/groups/actions/delete.php,
+ mod/groups/actions/featured.php, mod/groups/actions/groupskillinvitation.php,
+ mod/groups/actions/groupskillrequest.php, mod/groups/actions/invite.php,
+ mod/groups/actions/join.php, mod/groups/actions/joinrequest.php,
+ mod/groups/actions/leave.php, mod/groups/icon.php,
+ mod/invitefriends/actions/invite.php,
+ .../views/default/invitefriends/formitems.php, mod/notifications/start.php,
+ mod/pages/start.php, mod/profile/icon.php, mod/profile/start.php,
+ mod/sitepages/sitepages_functions.php, mod/twitterservice/start.php,
+ mod/twitterservice/twitterservice_lib.php,
+ .../default/usersettings/twitterservice/edit.php,
+ mod/uservalidationbyemail/lib/functions.php: Refs #2428 almost done removing
+ CONFIG access - mostly plugin start.php left
+
+2011-02-03 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/bookmarks/actions/add.php, mod/bookmarks/actions/bookmarks/add.php,
+ mod/bookmarks/actions/bookmarks/delete.php,
+ mod/bookmarks/actions/bookmarks/edit.php, mod/bookmarks/actions/delete.php,
+ mod/bookmarks/actions/edit.php, mod/bookmarks/actions/reference.php,
+ mod/bookmarks/actions/remove.php, mod/bookmarks/bookmarklet.php,
+ mod/bookmarks/languages/en.php, mod/bookmarks/pages/add.php,
+ mod/bookmarks/pages/all.php, mod/bookmarks/pages/friends.php,
+ mod/bookmarks/pages/inbox.php, mod/bookmarks/pages/owner.php,
+ mod/bookmarks/pages/view.php, mod/bookmarks/start.php,
+ .../views/default/bookmarks/bookmarklet.php,
+ mod/bookmarks/views/default/bookmarks/css.php,
+ mod/bookmarks/views/default/bookmarks/form.php,
+ .../views/default/bookmarks/group_bookmarks.php,
+ .../default/bookmarks/groupprofile_bookmarks.php,
+ .../views/default/bookmarks/owner_block.php,
+ mod/bookmarks/views/default/bookmarks/sharing.php,
+ mod/bookmarks/views/default/bookmarks/stats.php,
+ mod/bookmarks/views/default/object/bookmarks.php,
+ .../default/river/object/bookmarks/annotate.php,
+ .../default/river/object/bookmarks/create.php,
+ .../views/default/widgets/bookmarks/view.php,
+ mod/bookmarks/views/rss/object/bookmarks.php: Refs #2680: First pass at
+ porting the 1.7 bookmarks to 1.8. Functional, but code is still messy.
+
+ * engine/lib/actions.php: Added more info to the @params documentation for
+ elgg_register_action.
+
+2011-02-03 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/admin/site/advanced.php, views/default/admin/site/basic.php,
+ views/default/core/account/login_box.php,
+ views/default/core/account/login_dropdown.php,
+ views/default/core/account/login_walled_garden.php,
+ .../core/settings/account/default_access.php,
+ views/default/core/settings/account/language.php,
+ views/default/forms/login.php, views/default/input/button.php,
+ views/default/js/initialize_elgg.php,
+ views/default/page/elements/html_begin.php,
+ views/default/page/elements/html_end.php,
+ views/failsafe/messages/exceptions/exception.php,
+ views/opendd/messages/exceptions/exception.php,
+ views/rss/page/shells/default.php,
+ views/xml/messages/exceptions/exception.php: Refs #2428 removed some uses of
+ CONFIG in the views
+
+ * views/default/css/elements/navigation.php,
+ views/default/navigation/pagination.php: Fixes #2802 put state class on list
+ element rather than span
+
+ * install/ElggInstaller.php: fixes #2784 for real this time
+
+ * install/ElggInstaller.php: Fixes #2784 #2842 installer uses new plugin
+ system now
+
+2011-02-02 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/manifest.xml, mod/bookmarks/manifest.xml,
+ mod/defaultwidgets/manifest.xml, mod/embed/manifest.xml,
+ mod/garbagecollector/manifest.xml, mod/groups/manifest.xml,
+ mod/htmlawed/manifest.xml, mod/logbrowser/manifest.xml,
+ mod/logrotate/manifest.xml, mod/messageboard/manifest.xml,
+ mod/messages/manifest.xml, mod/notifications/manifest.xml,
+ mod/reportedcontent/manifest.xml, mod/search/manifest.xml,
+ mod/tinymce/manifest.xml, mod/uservalidationbyemail/manifest.xml,
+ mod/zaudio/manifest.xml: updated the plugin manifest files to use the new
+ variable name for activation on installation
+
+2011-02-02 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/views.php, views/default/river/item.php: Fixes #2846:
+ elgg_view_river_item calls river/item view first.
+
+ * views/default/core/river/body.php: Adding quotes to "constant" item
+
+2011-02-02 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/river.php: Fixes #2844 setting table for access_id to fix fatal
+ error
+
+ * mod/groups/actions/edit.php, mod/groups/start.php,
+ mod/groups/views/default/forms/groups/edit.php: moved name out of
+ configurable fields for a group
+
+ * mod/groups/views/default/forms/groups/edit.php,
+ mod/groups/views/default/groups/edit.php: more clean up of the group edit
+ form
+
+ * mod/groups/lib/groups.php, mod/groups/start.php,
+ mod/groups/views/default/forms/groups/edit.php,
+ mod/groups/views/default/groups/edit.php: a little clean up of the groups
+ edit form
+
+ * .../layout/shells/two_column_left_sidebar.php,
+ views/default/page/shells/default.php: backward compatibility code for
+ plugins that add admin pages
+
+ * languages/en.php: added a string from 1.7 profile plugin into core for
+ backward compatibility
+
+2011-02-01 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page/elements/html_begin.php: Puts css before js in the
+ head, per website performance best practices
+
+ * engine/lib/views.php: Initialize global $CURRENT_SYSTEM_VIEWTYPE correctly
+
+ * engine/lib/deprecated-1.7.php, engine/lib/deprecated-1.8.php,
+ engine/lib/sessions.php, engine/lib/sites.php, engine/lib/tags.php,
+ engine/lib/users.php, engine/lib/usersettings.php, engine/lib/views.php:
+ Moved deprecated files from sessions.php - xml.php into deprecation files for
+ 1.7 and 1.8
+
+ * engine/lib/deprecated-1.7.php, engine/lib/deprecated-1.8.php,
+ engine/lib/group.php, engine/lib/location.php, engine/lib/metadata.php,
+ engine/lib/navigation.php, engine/lib/objects.php, engine/lib/output.php,
+ engine/lib/pageowner.php, engine/lib/plugins.php,
+ engine/lib/private_settings.php, engine/lib/relationships.php,
+ engine/lib/river.php: Moved functions from export.php - river.php into
+ deprecated files
+
+ * engine/lib/access.php, engine/lib/actions.php, engine/lib/admin.php,
+ engine/lib/annotations.php, engine/lib/deprecated-1.7.php,
+ engine/lib/deprecated-1.8.php, engine/lib/elgglib.php,
+ engine/lib/entities.php, engine/start.php: Moving deprecated functions out of
+ files access.php - entities.php. This time into two files based on version
+ deprecated and maintaining documentation
+
+ * engine/lib/access.php, engine/lib/actions.php, engine/lib/admin.php,
+ engine/lib/annotations.php, engine/lib/deprecated.php,
+ engine/lib/elgglib.php, engine/lib/entities.php, engine/lib/group.php,
+ engine/lib/install.php, engine/lib/location.php, engine/lib/mb_wrapper.php,
+ engine/lib/metadata.php, engine/lib/metastrings.php,
+ engine/lib/navigation.php, engine/lib/objects.php, engine/lib/output.php,
+ engine/lib/pageowner.php, engine/lib/plugins.php,
+ engine/lib/private_settings.php: Reversing 7975
+
+ * engine/lib/access.php, engine/lib/actions.php, engine/lib/admin.php,
+ engine/lib/annotations.php, engine/lib/deprecated.php,
+ engine/lib/elgglib.php, engine/lib/entities.php, engine/lib/group.php,
+ engine/lib/install.php, engine/lib/location.php, engine/lib/mb_wrapper.php,
+ engine/lib/metadata.php, engine/lib/metastrings.php,
+ engine/lib/navigation.php, engine/lib/objects.php, engine/lib/output.php,
+ engine/lib/pageowner.php, engine/lib/plugins.php,
+ engine/lib/private_settings.php, engine/start.php: Refs #2839: moved
+ deprecated functions from access.php - private_settings.php to
+ deprecated.php. Still have to do relationships.php - xml.php. Deleted
+ documentation for these functions since 1) it was using up precious bytes,
+ and 2) documentation should not be needed since people should not be trying
+ to use these if they are using 1.8, and 3) I assume the documentation will
+ exist as archived 1.7 docs.
+
+2011-01-29 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/views/default/blog/group_module.php,
+ mod/file/views/default/file/group_module.php,
+ .../views/default/discussion/group_module.php,
+ mod/groups/views/default/groups/css.php,
+ .../default/groups/profile/activity_module.php,
+ mod/pages/views/default/pages/group_module.php,
+ views/default/css/elements/core.php: fixed css for group module headers
+
+ * engine/lib/output.php: supporting 'javascript:' when normalizing urls
+
+ * engine/lib/pageowner.php: fixed typo in deprecation notice
+
+ * .../layout/shells/two_column_left_sidebar.php: made
+ two_column_left_sidebar layout also handle $vars['content']
+
+ * engine/lib/navigation.php: accidently removed the site menu set up
+ function
+
+2011-01-27 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/views/default/blog/sidebar/revisions.php,
+ mod/blog/views/default/forms/blog/save.php,
+ mod/pages/views/default/annotation/page.php,
+ views/default/annotation/default.php,
+ views/default/annotation/generic_comment.php,
+ views/default/annotation/likes.php, views/default/css/admin.php,
+ views/default/css/elements/core.php,
+ views/default/layout/objects/list/body.php: introducing elgg-subtext as
+ replacement for elgg-list-subtitle and elgg-subtitle
+
+ * engine/lib/elgglib.php, engine/lib/navigation.php,
+ engine/tests/ui/submenu.php, views/default/layout/elements/sidebar.php,
+ views/default/layout/elements/title.php,
+ views/default/navigation/sidebar_menu.php,
+ views/default/navigation/submenu_group.php,
+ views/default/navigation/submenu_item.php,
+ views/default/navigation/submenu_js.php: removed menu code introduced for
+ elgg.com that did not make it into 1.8
+
+ * views/default/annotation/default.php: using the new image block rather
+ than deprecated listing view
+
+ * views/default/navigation/tabs.php: supporting adding a class to navigation
+ tabs
+
+2011-01-26 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/admin/statistics/overview.php: updated the overview
+ statistics page
+
+ * engine/lib/group.php, engine/lib/pageowner.php, engine/lib/users.php,
+ engine/lib/widgets.php, mod/blog/views/default/blog/group_module.php,
+ mod/blog/views/default/blog/sidebar/archives.php,
+ mod/blog/views/default/blog/sidebar/tagcloud.php,
+ mod/blog/views/default/widgets/blog/content.php,
+ mod/bookmarks/bookmarklet.php, mod/bookmarks/start.php,
+ .../views/default/bookmarks/bookmarklet.php,
+ mod/bookmarks/views/default/bookmarks/form.php,
+ .../views/default/bookmarks/group_bookmarks.php,
+ .../views/default/widgets/bookmarks/view.php,
+ .../views/default/defaultwidgets/editor.php, mod/file/friends.php,
+ mod/file/index.php, mod/file/search.php, mod/file/upload.php,
+ mod/file/view.php, mod/file/views/default/file/group_module.php,
+ .../views/default/widgets/filerepo/content.php, mod/groups/lib/groups.php,
+ .../default/widgets/a_users_groups/content.php, mod/messageboard/index.php,
+ .../views/default/widgets/messageboard/content.php, mod/messages/inbox.php,
+ mod/messages/read.php, mod/messages/sent.php, mod/pages/friends.php,
+ mod/pages/index.php, mod/pages/revision.php, mod/pages/view.php,
+ mod/pages/views/default/pages/group_module.php,
+ .../views/default/pages/sidebar/navigation.php,
+ mod/pages/views/default/widgets/pages/content.php, mod/profile/icon.php,
+ mod/profile/views/default/profile/details.php,
+ mod/profile/views/default/profile/metatags.php,
+ mod/profile/views/default/profile/owner_block.php, mod/thewire/index.php,
+ .../views/default/widgets/thewire/content.php, pages/avatar/edit.php,
+ pages/avatar/view.php, pages/friends/index.php, pages/friends/of.php,
+ pages/friends/pickercallback.php, pages/profile/edit.php,
+ pages/settings/account.php, pages/settings/statistics.php,
+ pages/settings/tools.php, .../core/settings/account/default_access.php,
+ views/default/core/settings/account/email.php,
+ views/default/core/settings/account/language.php,
+ views/default/core/settings/account/name.php,
+ views/default/core/settings/account/password.php,
+ views/default/js/initialize_elgg.php,
+ views/default/layout/elements/owner_block.php,
+ views/default/layout/shells/content/header.php,
+ views/default/layout/shells/widgets.php,
+ views/default/page/elements/content_header.php,
+ .../page/elements/content_header_member.php,
+ views/foaf/page/shells/default.php: changed elgg_get_page_owner() to
+ elgg_get_page_owner_entity() to be more consistent
+
+ * mod/file/languages/en.php: updated language file for file plugin due to
+ change in groups
+
+ * mod/groups/languages/en.php, mod/groups/start.php,
+ mod/groups/views/default/groups/css.php,
+ .../default/groups/profile/activity_module.php,
+ .../default/groups/profile/activity_widget.php,
+ .../views/default/groups/profile/widgets.php: adding activity module to
+ groups
+
+ * views/default/css/admin.php: going back to overflow:hidden on elgg-body -
+ too many issues with display: table-cell
+
+ * languages/en.php, views/default/css/admin.php,
+ views/default/widgets/content_stats/content.php,
+ views/default/widgets/content_stats/edit.php,
+ views/default/widgets/friends/edit.php,
+ views/default/widgets/new_users/edit.php,
+ views/default/widgets/online_users/edit.php: added edit views for admin
+ widgets
+
+ * mod/ecml/README.txt, mod/ecml/actions/save_permissions.php,
+ mod/ecml/ecml_functions.php, mod/ecml/graphics/dailymotion.png,
+ mod/ecml/graphics/ecml.png, mod/ecml/graphics/googlemaps.png,
+ mod/ecml/graphics/logo_bliptv.gif, mod/ecml/graphics/logo_dailymotion.gif,
+ mod/ecml/graphics/logo_googlemaps.gif, mod/ecml/graphics/logo_livevideo.gif,
+ mod/ecml/graphics/logo_redlasso.gif, mod/ecml/graphics/logo_slideshare.gif,
+ mod/ecml/graphics/logo_vimeo.gif, mod/ecml/graphics/logo_youtube.gif,
+ mod/ecml/graphics/redlasso_1.png, mod/ecml/graphics/redlasso_2.png,
+ mod/ecml/graphics/slideshare.png, mod/ecml/graphics/url_status.png,
+ mod/ecml/graphics/vimeo.png, mod/ecml/graphics/youtube.png,
+ mod/ecml/languages/en.php, mod/ecml/manifest.xml, mod/ecml/start.php,
+ mod/ecml/views/default/ecml/admin/css.php,
+ mod/ecml/views/default/ecml/help.php,
+ mod/ecml/views/default/ecml/help/blip.tv.php,
+ mod/ecml/views/default/ecml/help/dailymotion.php,
+ mod/ecml/views/default/ecml/help/googlemaps.php,
+ mod/ecml/views/default/ecml/help/livevideo.php,
+ mod/ecml/views/default/ecml/help/redlasso.php,
+ mod/ecml/views/default/ecml/help/slideshare.php,
+ mod/ecml/views/default/ecml/help/vimeo.php,
+ mod/ecml/views/default/ecml/help/youtube.php,
+ mod/ecml/views/default/ecml/input_ext.php,
+ mod/ecml/views/default/ecml/keyword_help.php,
+ mod/ecml/views/default/ecml/keywords/blip.tv.php,
+ .../views/default/ecml/keywords/dailymotion.php,
+ mod/ecml/views/default/ecml/keywords/entity.php,
+ .../views/default/ecml/keywords/googlemaps.php,
+ mod/ecml/views/default/ecml/keywords/livevideo.php,
+ mod/ecml/views/default/ecml/keywords/redlasso.php,
+ .../views/default/ecml/keywords/slideshare.php,
+ mod/ecml/views/default/ecml/keywords/user_list.php,
+ mod/ecml/views/default/ecml/keywords/vimeo.php,
+ mod/ecml/views/default/ecml/keywords/youtube.php,
+ .../views/default/embed/web_services/content.php,
+ mod/ecml/views/default/settings/ecml/edit.php: moving ecml to plugins
+ repository as it won't be a part of 1.8.0. It will be back though...
+
+ * views/default/css/admin.php, views/default/css/elements/navigation.php,
+ views/default/css/elements/reset.php,
+ views/default/navigation/menu/elements/item.php,
+ views/default/navigation/pagination.php, views/default/navigation/tabs.php:
+ adding elgg-state-* css elements
+
+ * engine/lib/views.php: fixed bug where a null passed as 2nd parameter to
+ elgg_view_layout() prevented backward compatibility
+
+ * js/lib/ui.widgets.js: one too many parents in the widget collapse code
+
+ * mod/ecml/views/default/ecml/input_ext.php,
+ mod/embed/views/default/embed/link.php, views/default/css/admin.php,
+ views/default/css/elements/forms.php: namespaced longtext-control
+
+ * mod/tinymce/graphics/ed-bg.gif, mod/tinymce/graphics/example.gif,
+ mod/tinymce/graphics/more.gif, mod/tinymce/views/default/input/longtext.php,
+ mod/tinymce/views/default/tinymce/css.php,
+ mod/tinymce/views/default/tinymce/init.php: cleaned up tinymce plugin
+
+ * mod/reportedcontent/start.php, .../views/default/reportedcontent/form.php,
+ .../views/default/reportedcontent/user_report.php,
+ .../default/widgets/reportedcontent/content.php,
+ .../views/default/widgets/reportedcontent/edit.php: added reported content
+ widget
+
+ * mod/reportedcontent/languages/en.php, mod/reportedcontent/start.php,
+ .../default/admin/utilities/reportedcontent.php,
+ .../views/default/object/reported_content.php,
+ .../views/default/reportedcontent/admin_css.php, views/default/css/admin.php:
+ adding margin to admin buttons
+
+ * .../graphics/sign_in_with_twitter.gif,
+ mod/twitterservice/languages/en.php, mod/twitterservice/manifest.xml,
+ mod/twitterservice/start.php, mod/twitterservice/twitterservice_lib.php,
+ mod/twitterservice/vendors/twitteroauth/LICENSE,
+ mod/twitterservice/vendors/twitteroauth/OAuth.php,
+ mod/twitterservice/vendors/twitteroauth/README,
+ .../vendors/twitteroauth/twitterOAuth.php,
+ .../views/default/settings/twitterservice/edit.php,
+ .../views/default/twitterservice/css.php,
+ .../views/default/twitterservice/login.php,
+ .../views/default/twitterservice/metatags.php,
+ .../default/usersettings/twitterservice/edit.php: moved twitterservice into
+ core
+
+2011-01-25 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css/elements/chrome.php,
+ views/default/css/elements/core.php, views/default/css/elements/icons.php,
+ views/default/css/elements/navigation.php,
+ views/default/layout/objects/gallery.php,
+ views/default/layout/objects/list.php: light clean-up of the css
+
+ * js/lib/ui.widgets.js, pages/dashboard.php,
+ views/default/admin/dashboard.php, views/default/css/admin.php,
+ views/default/css/elements/core.php, views/default/layout/objects/widget.php,
+ views/default/layout/objects/widget/controls.php,
+ views/default/layout/objects/widget/settings.php,
+ views/default/layout/shells/widgets.php,
+ views/default/layout/shells/widgets/add_button.php,
+ views/default/layout/shells/widgets/add_panel.php: converted widgets to
+ modules
+
+ * engine/lib/views.php: added support for $vars to elgg_view_entity() - need
+ to clean up documentation and deprecate old usage
+
+2011-01-24 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/admin.php, engine/lib/widgets.php, languages/en.php,
+ mod/developers/languages/en.php, mod/developers/start.php,
+ mod/thewire/start.php, views/default/admin/dashboard.php,
+ views/default/admin/overview/statistics.php,
+ views/default/admin/statistics/overview.php, views/default/css/admin.php,
+ views/default/layout/shells/widgets.php,
+ views/default/layout/shells/widgets/add_panel.php,
+ views/default/navigation/menu/elements/item.php,
+ views/default/widgets/content_stats/content.php,
+ views/default/widgets/new_users/content.php,
+ views/default/widgets/online_users/content.php: welcome to the admin
+ dashboard
+
+2011-01-23 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php, mod/logbrowser/start.php,
+ .../views/default/admin/utilities/logbrowser.php,
+ mod/logbrowser/views/default/logbrowser/css.php,
+ mod/logbrowser/views/default/logbrowser/form.php,
+ mod/logbrowser/views/default/logbrowser/table.php,
+ views/default/admin/appearance/menu_items.php,
+ views/default/admin/appearance/profile_fields.php,
+ views/default/admin/components/plugin_settings.php,
+ views/default/admin/overview/statistics.php,
+ views/default/admin/users/newest.php, views/default/admin/users/online.php,
+ views/default/css/admin.php, views/default/forms/admin/menu/save.php,
+ views/default/forms/profile/fields/add.php, views/default/forms/useradd.php,
+ views/default/layout/shells/admin.php,
+ views/default/layout/shells/admin/menu.php: updated more of the admin backend
+ to use new CSS/HTML
+
+ * views/default/admin/overview/statistics.php, views/default/css/admin.php:
+ starting to remove the old HTML/CSS in the admin backend
+
+ * views/default/css/admin.php, views/default/layout/shells/admin.php,
+ views/default/layout/shells/admin/menu.php: take two of the admin header and
+ sidebar menu - sidebar menu still needs plenty of work
+
+ * views/default/layout/objects/module.php: default elgg-inner to false in
+ module
+
+ * engine/lib/group.php, mod/groups/start.php: Refs #2557 merged fix into
+ trunk from 1.7 branch
+
+ * engine/lib/database.php, engine/lib/entities.php,
+ engine/lib/metastrings.php, engine/lib/notification.php, engine/lib/pam.php,
+ engine/lib/users.php, engine/lib/web_services.php, engine/lib/xml-rpc.php:
+ Refs #2804 #2805 pulling changes in trunk from 1.7 branch
+
+ * languages/en.php: forgot these language strings in the admin theme update
+
+ * views/default/css/admin.php, views/default/layout/shells/admin.php:
+ playing around a little with the admin theme
+
+2011-01-22 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ErrorResult.php: Fixes #2586 ErrorResult has PHP5
+ constructor now
+
+ * engine/lib/web_services.php: missed check for null parameters in web
+ services parameter code
+
+ * engine/lib/web_services.php: Fixes #2548 do not need include_post_data()
+ because of changes to rewrite rules
+
+ * engine/lib/sessions.php, engine/lib/web_services.php,
+ mod/uservalidationbyemail/start.php: testing for the existence of username in
+ pam credentials before using
+
+ * mod/groups/languages/en.php, mod/groups/lib/groups.php,
+ mod/groups/start.php, .../views/default/groups/sidebar/members.php: Fixes
+ #2295 added a group member list page
+
+ * views/default/css/elements/base.php,
+ .../layout/shells/one_column_with_sidebar.php: css now provides center for
+ text and centered for divs
+
+ * mod/pages/history.php, mod/pages/images/application.png,
+ mod/pages/images/code.png, mod/pages/images/css.png, mod/pages/images/db.png,
+ mod/pages/images/directory.png, mod/pages/images/doc.png,
+ mod/pages/images/file.gif, mod/pages/images/file.png,
+ mod/pages/images/film.png, mod/pages/images/flash.png,
+ mod/pages/images/folder-closed.gif, mod/pages/images/folder.gif,
+ mod/pages/images/folder_open.png, mod/pages/images/html.png,
+ mod/pages/images/java.png, mod/pages/images/linux.png,
+ mod/pages/images/minus.gif, mod/pages/images/music.png,
+ mod/pages/images/pdf.png, mod/pages/images/php.png,
+ mod/pages/images/picture.png, mod/pages/images/plus.gif,
+ mod/pages/images/ppt.png, mod/pages/images/psd.png,
+ mod/pages/images/ruby.png, mod/pages/images/script.png,
+ mod/pages/images/spinner.gif, mod/pages/images/treeview-black-line.gif,
+ mod/pages/images/treeview-black.gif,
+ mod/pages/images/treeview-default-line.gif,
+ mod/pages/images/treeview-default.gif,
+ mod/pages/images/treeview-famfamfam-line.gif,
+ mod/pages/images/treeview-famfamfam.gif,
+ mod/pages/images/treeview-gray-line.gif, mod/pages/images/treeview-gray.gif,
+ mod/pages/images/treeview-red-line.gif, mod/pages/images/treeview-red.gif,
+ mod/pages/images/txt.png, mod/pages/images/xls.png, mod/pages/images/zip.png,
+ mod/pages/index.php, mod/pages/javascript/jquery.treeview.async.js,
+ mod/pages/javascript/jquery.treeview.js, mod/pages/lib/pages.php,
+ mod/pages/new.php, mod/pages/pagesTree.php, mod/pages/revision.php,
+ mod/pages/start.php, mod/pages/vendors/jquery-treeview/.gitignore,
+ mod/pages/vendors/jquery-treeview/README.md,
+ mod/pages/vendors/jquery-treeview/changelog.txt,
+ mod/pages/vendors/jquery-treeview/demo/async.html,
+ mod/pages/vendors/jquery-treeview/demo/bg.gif,
+ mod/pages/vendors/jquery-treeview/demo/demo.js,
+ mod/pages/vendors/jquery-treeview/demo/edit.html,
+ mod/pages/vendors/jquery-treeview/demo/images.html,
+ mod/pages/vendors/jquery-treeview/demo/index.html,
+ mod/pages/vendors/jquery-treeview/demo/large.html,
+ .../vendors/jquery-treeview/demo/prerendered.html,
+ mod/pages/vendors/jquery-treeview/demo/screen.css,
+ mod/pages/vendors/jquery-treeview/demo/simple.html,
+ .../vendors/jquery-treeview/demo/sortable.html,
+ mod/pages/vendors/jquery-treeview/demo/source.php,
+ mod/pages/vendors/jquery-treeview/demo/source.phps,
+ .../vendors/jquery-treeview/images/ajax-loader.gif,
+ mod/pages/vendors/jquery-treeview/images/file.gif,
+ .../jquery-treeview/images/folder-closed.gif,
+ .../vendors/jquery-treeview/images/folder.gif,
+ mod/pages/vendors/jquery-treeview/images/minus.gif,
+ mod/pages/vendors/jquery-treeview/images/plus.gif,
+ .../jquery-treeview/images/treeview-black-line.gif,
+ .../jquery-treeview/images/treeview-black.gif,
+ .../images/treeview-default-line.gif,
+ .../jquery-treeview/images/treeview-default.gif,
+ .../images/treeview-famfamfam-line.gif,
+ .../jquery-treeview/images/treeview-famfamfam.gif,
+ .../jquery-treeview/images/treeview-gray-line.gif,
+ .../jquery-treeview/images/treeview-gray.gif,
+ .../jquery-treeview/images/treeview-red-line.gif,
+ .../jquery-treeview/images/treeview-red.gif,
+ .../jquery-treeview/jquery.treeview.async.js,
+ .../vendors/jquery-treeview/jquery.treeview.css,
+ .../jquery-treeview/jquery.treeview.edit.js,
+ .../vendors/jquery-treeview/jquery.treeview.js,
+ .../vendors/jquery-treeview/jquery.treeview.min.js,
+ .../jquery-treeview/jquery.treeview.sortable.js,
+ .../vendors/jquery-treeview/lib/jquery.cookie.js,
+ mod/pages/vendors/jquery-treeview/lib/jquery.js,
+ mod/pages/vendors/jquery-treeview/todo, mod/pages/view.php,
+ mod/pages/views/default/pages/css.php,
+ mod/pages/views/default/pages/metatags.php,
+ mod/pages/views/default/pages/sidebar/history.php,
+ .../views/default/pages/sidebar/navigation.php,
+ .../views/default/pages/sidebar/sidebarthis.php,
+ mod/pages/views/default/pages/sidebar/starter.php,
+ mod/pages/views/default/pages/sidebar/tree.php,
+ mod/pages/views/default/pages/sidebar/wrapper.php: finished the first pass on
+ the pages plugin for using the new HTML/CSS
+
+ * views/default/layout/shells/content/header.php: this time got the guid
+ correct for the add button
+
+ * views/default/css/elements/navigation.php: limiting the +/- additions to
+ page menus
+
+ * js/lib/ui.js: limit the collapsible menus to page menus
+
+ * actions/widgets/add.php: making sure context is set correctly when adding
+ a widget
+
+ * views/default/layout/shells/content/header.php: fixed add link for all
+ site content pages
+
+ * mod/pages/actions/pages/edit.php, mod/pages/edit.php,
+ mod/pages/friends.php, mod/pages/history.php, mod/pages/index.php,
+ mod/pages/languages/en.php, mod/pages/lib/pages.php, mod/pages/new.php,
+ mod/pages/revision.php, mod/pages/start.php,
+ mod/pages/views/default/annotation/icon.php,
+ mod/pages/views/default/annotation/page.php,
+ mod/pages/views/default/forms/pages/edit.php,
+ mod/pages/views/default/object/page.php,
+ mod/pages/views/default/object/page_top.php,
+ mod/pages/views/default/pages/css.php,
+ mod/pages/views/default/pages/group_module.php,
+ .../views/default/pages/groupprofile_pages.php,
+ mod/pages/views/default/pages/icon.php,
+ mod/pages/views/default/pages/pagegallery.php,
+ mod/pages/views/default/pages/pagelisting.php,
+ mod/pages/views/default/pages/pageprofile.php,
+ .../views/default/pages/sidebar/navigation.php,
+ mod/pages/views/default/widgets/pages/content.php,
+ mod/pages/views/default/widgets/pages/edit.php, mod/pages/world.php: more
+ clean up of the pages plugin to use new HTML/CSS
+
+ * mod/blog/views/default/object/blog.php: using list metadata view rather
+ than custom code
+
+ * engine/classes/ElggPlugin.php: fixed bug with plugin settings because of
+ assignment operator confusion
+
+ * engine/lib/private_settings.php: do not need {} around quoted variables
+ surrounded by quotes
+
+ * engine/classes/ElggPlugin.php: Fixes #2812 - correct check for guid now
+
+ * engine/classes/ElggPlugin.php: fixed backward compatibility issue with
+ $CONFIG in plugins' start.php
+
+ * engine/lib/navigation.php: deprecated add_menu() and made it compatible
+ with 1.8
+
+ * .../layout/shells/two_column_left_sidebar.php: added the
+ two_column_left_sidebar layout back so that plugins from 1.7 work with 1.8
+
+2011-01-21 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css/admin.php, views/default/css/elements/base.php,
+ views/default/css/elements/chrome.php, views/default/css/elements/core.php,
+ views/default/css/elements/forms.php, views/default/css/elements/grid.php,
+ views/default/css/elements/icons.php, views/default/css/elements/layout.php,
+ views/default/css/elements/misc.php,
+ views/default/css/elements/navigation.php,
+ views/default/css/elements/reset.php, views/default/css/elements/spacing.php,
+ views/default/css/elements/typography.php: Made a thorough pass over the css.
+ Included todo's throughout to track what still needs to be done.
+
+2011-01-20 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/layout/objects/list/metadata.php: moved likes to end of
+ metadata and added a links parameter
+
+ * views/default/layout/shells/content/header.php: using page owner rather
+ than owner for better support for groups
+
+ * engine/lib/views.php: adding 'action' to url when overriding the form
+ action
+
+2011-01-15 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/messages/actions/delete.php, mod/messages/actions/messages/delete.php,
+ mod/messages/actions/messages/process.php,
+ mod/messages/actions/messages/send.php, mod/messages/actions/send.php,
+ mod/messages/inbox.php, mod/messages/index.php,
+ mod/messages/languages/en.php, mod/messages/lib/messages.php,
+ mod/messages/read.php, mod/messages/readme.txt, mod/messages/send.php,
+ mod/messages/sent.php, mod/messages/start.php,
+ .../views/default/forms/messages/process.php,
+ .../views/default/forms/messages/reply.php,
+ mod/messages/views/default/forms/messages/send.php,
+ mod/messages/views/default/messages/css.php,
+ .../views/default/messages/forms/reply.php,
+ mod/messages/views/default/messages/forms/send.php,
+ mod/messages/views/default/messages/forms/view.php,
+ mod/messages/views/default/messages/menu.php,
+ mod/messages/views/default/messages/messages.php,
+ mod/messages/views/default/messages/topbar.php,
+ mod/messages/views/default/messages/view.php,
+ mod/messages/views/default/object/messages.php: Updated the messages plugin
+ to use the new CSS/HTML
+
+ * mod/pages/actions/pages/editwelcome.php, mod/pages/edit.php,
+ mod/pages/friends.php, mod/pages/history.php, mod/pages/index.php,
+ mod/pages/languages/en.php, mod/pages/lib/pages.php, mod/pages/new.php,
+ mod/pages/start.php, mod/pages/view.php,
+ .../views/default/forms/pages/editwelcome.php,
+ mod/pages/views/default/object/page_top.php,
+ mod/pages/views/default/pages/breadcrumbs.php,
+ mod/pages/views/default/pages/welcome.php, mod/pages/welcome.php,
+ mod/pages/world.php: pages plugin using new layout - still need to get
+ subpages working and navigation
+
+2011-01-14 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/handlers/export_handler.php, index.php,
+ mod/reportedcontent/start.php, mod/sitepages/sitepages_functions.php,
+ mod/tagcloud/tagcloud.php, pages/friends/add.php,
+ pages/friends/collections.php: changed layout on pages to one_sidebar
+
+ * mod/search/index.php, mod/search/views/default/search/layout.php,
+ mod/search/views/default/search/no_results.php: using new menu system and
+ page layouts in search
+
+ * mod/groups/graphics/icon.php, mod/groups/icon.php,
+ mod/groups/languages/en.php, mod/groups/lib/discussion.php,
+ mod/groups/start.php, .../views/default/discussion/group_module.php,
+ mod/groups/views/default/forum/maintopic.php,
+ mod/groups/views/default/forum/topics.php,
+ mod/groups/views/default/forum/viewposts.php,
+ .../views/default/groups/profile/forum_widget.php,
+ .../views/default/groups/profile/widgets.php,
+ .../views/default/object/groupforumtopic.php: finished discussion rewrite to
+ use new html/css
+
+2011-01-13 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/actions/discussion/delete.php,
+ mod/groups/actions/discussion/save.php,
+ mod/groups/actions/forums/addtopic.php,
+ mod/groups/actions/forums/deletetopic.php,
+ mod/groups/actions/forums/edittopic.php, mod/groups/addtopic.php,
+ mod/groups/edittopic.php, mod/groups/forum.php, mod/groups/languages/en.php,
+ mod/groups/lib/discussion.php, mod/groups/start.php,
+ mod/groups/topicposts.php,
+ mod/groups/views/default/forms/discussion/save.php,
+ mod/groups/views/default/forms/forums/addtopic.php,
+ .../views/default/forms/forums/edittopic.php,
+ mod/groups/views/default/forum/maintopic.php,
+ mod/groups/views/default/forum/viewposts.php,
+ .../views/default/groups/group_sort_menu.php,
+ .../views/default/groups/profile/forum_widget.php,
+ .../views/default/object/groupforumtopic.php: discussion topics using new
+ page handler
+
+ * mod/developers/languages/en.php, mod/developers/manifest.xml,
+ mod/developers/start.php, .../views/default/admin/developers/preview.php:
+ added the beginnings of a core developers tool plugin
+
+ * documentation/css/preview/general.php, documentation/css/preview/grid.php,
+ documentation/css/preview/images.php, documentation/css/preview/index.php,
+ documentation/css/preview/nav.php, documentation/css/preview/objects.php,
+ documentation/css/preview/widgets.php: Added images to css preview and
+ removed the page centering
+
+ * engine/lib/river.php: Fixes #2402 adds 'add' 'river' plugin hook
+
+ * actions/profile/edit.php: Fixes #2372 fixed the entity included in profile
+ update event
+
+ * engine/tests/suite.php: Refs #2757 merged fix into trunk
+
+ * mod/twitter/languages/en.php, mod/twitter/start.php: Refs #2791 merged fix
+ into trunk
+
+2011-01-10 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/layout/objects/list/body.php: Small typo in comment
+
+2011-01-10 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/invite.php, mod/groups/lib/groups.php,
+ mod/groups/membershipreq.php, mod/groups/start.php,
+ .../views/default/groups/profile/buttons.php: finished moving the group pages
+ to library - forum pages next
+
+ * mod/groups/activity.php, mod/groups/all.php, mod/groups/edit.php,
+ mod/groups/groupprofile.php, mod/groups/index.php,
+ mod/groups/invitations.php, mod/groups/languages/en.php,
+ mod/groups/lib/groups.php, mod/groups/membership.php, mod/groups/new.php,
+ mod/groups/start.php, .../views/default/groups/group_sort_menu.php,
+ .../views/default/groups/profile/buttons.php: moved most of the groups pages
+ into its library
+
+2011-01-08 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/admin.php, mod/diagnostics/languages/en.php,
+ mod/logbrowser/languages/en.php,
+ .../views/default/admin/utilities/logbrowser.php: finished the admin title
+ modifications
+
+ * engine/lib/system_log.php: Fixed problem where system log code would crash
+ due to new plugin code
+
+ * engine/lib/admin.php, languages/en.php, mod/defaultwidgets/start.php,
+ .../views/default/admin/utilities/diagnostics.php,
+ mod/uservalidationbyemail/languages/en.php,
+ views/default/admin/appearance/menu_items.php,
+ views/default/admin/appearance/profile_fields.php,
+ views/default/admin/overview/numentities.php,
+ views/default/admin/overview/online.php,
+ views/default/admin/overview/statistics.php,
+ views/default/admin/plugins/advanced.php,
+ views/default/admin/plugins/simple.php,
+ views/default/admin/site/advanced.php, views/default/admin/site/basic.php,
+ views/default/admin/users/add.php, views/default/admin/users/newest.php,
+ views/default/admin/users/online.php, views/default/layout/shells/admin.php,
+ views/default/layout/shells/administration.php: drying up the title creation
+ in the admin backend
+
+ * mod/groups/all.php, mod/groups/languages/en.php,
+ mod/groups/views/default/group/default.php,
+ mod/groups/views/default/groups/css.php,
+ mod/groups/views/default/groups/featured.php,
+ mod/groups/views/default/groups/find.php,
+ mod/groups/views/default/groups/grouplisting.php,
+ .../views/default/groups/sidebar/featured.php,
+ mod/groups/views/default/groups/sidebar/find.php,
+ .../views/default/icon/group/default/large.php,
+ .../views/default/icon/group/default/medium.php,
+ .../views/default/icon/group/default/small.php,
+ .../views/default/icon/group/default/tiny.php,
+ .../views/default/object/groupforumtopic.php,
+ mod/groups/views/default/settings/groups/edit.php: cleanup of the groups
+ plugin views
+
+2011-01-07 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/installation/canvas/default.php: elgg_view_layout is not used in
+ installation so removing old view
+
+ * install/css/install.css, views/installation/messages/errors/error.php,
+ views/installation/messages/errors/list.php,
+ views/installation/messages/list.php,
+ views/installation/messages/messages/list.php,
+ views/installation/messages/messages/message.php,
+ views/installation/page/elements/messages.php,
+ views/installation/page/shells/default.php: Fixes #2783 - updated
+ installation message code to mirror default views
+
+2011-01-07 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggPluginPackage.php: Refs #2781: Checking if a dir was
+ passed as a plugin package. Need to do this to allow packages to be loaded
+ outside of plugin_dir.
+
+ * engine/classes/ElggPlugin.php: Refs #2781: Using same technique to check
+ for full plugin path in ElggPlugin.
+
+ * views/default/admin/plugins/simple.php: Refs #2782: Fixed WSOD for simple
+ plugin admin.
+
+ * languages/en.php, views/default/admin/components/invalid_plugin.php,
+ views/default/admin/components/plugin.php,
+ views/default/admin/plugins/advanced.php: Refs #2782: Fixed WSOD for invalid
+ plugins on admin screen. Needs better CSS, but holding off until admin area
+ CSS revamp.
+
+ * engine/lib/entities.php: Changed callback function option from
+ 'row_callback' to 'callback' for elgg_get_entities().
+
+2011-01-07 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggPluginPackage.php: Refs #2781 path checking in
+ ElggPluginPackage constructor should work for both *nix and Windows now
+
+ * mod/groups/groupprofile.php, .../views/default/groups/activity_latest.php,
+ .../views/default/groups/closedmembership.php,
+ mod/groups/views/default/groups/forum_latest.php,
+ mod/groups/views/default/groups/groupprofile.php,
+ mod/groups/views/default/groups/members.php,
+ .../default/groups/profile/activity_widget.php,
+ .../views/default/groups/profile/buttons.php,
+ .../default/groups/profile/closed_membership.php,
+ .../views/default/groups/profile/forum_widget.php,
+ .../views/default/groups/profile/profile_block.php,
+ .../views/default/groups/profile/widgets.php,
+ mod/groups/views/default/groups/profileitems.php,
+ .../views/default/groups/sidebar/members.php: cleaned up the group profile
+
+2011-01-06 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/views/default/object/blog.php,
+ mod/file/views/default/object/file.php,
+ views/default/css/elements/chrome.php, views/default/output/tags.php: changed
+ tag display to <ul>
+
+2011-01-06 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Fixes #1242: elgg_get_data() correctly returns an
+ empty array on no results. It still returns false on error, but I consider
+ that the correct behavior. Please reopen if it needs discussion.
+
+ * engine/lib/database.php, engine/tests/objects/entities.php: Refs #1242,
+ Fixes #2775. Pulled common code between get_data() and get_data_row() into
+ elgg_query_runner(). Caching is now done in the query runner instead of
+ spread across execute_query() and get_data*(). Namespacing cache for callback
+ and single row request. I'm open to better names for that function. Not
+ closing #1242 because the elgg_get_entities*() functions can still return
+ false.
+
+2011-01-06 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/notifications/start.php: moved action registration into init
+
+ * mod/sitepages/sitepages_functions.php: updating the site pages class to
+ use initializeAttributes
+
+ * mod/blog/languages/en.php, mod/blog/lib/blog.php, mod/blog/start.php,
+ mod/blog/views/default/blog/group_module.php, mod/file/index.php,
+ mod/file/languages/en.php, mod/file/start.php, mod/file/upload.php,
+ mod/file/views/default/file/group_module.php,
+ views/default/layout/shells/content/header.php: switched from new to add
+
+ * engine/lib/relationships.php: Fixes test for $relationship_guid in sql
+ generating function
+
+ * engine/classes/ElggPluginPackage.php, engine/lib/elgglib.php,
+ engine/lib/metadata.php, engine/lib/views.php, engine/lib/xml.php: Fixes
+ #2774 - fixes several E_NOTICE issues - mostly due to accessign array indexes
+
+
+ * engine/start.php: replaced deprecated load_plugins() - thanks to hellekin
+
+2011-01-05 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * js/lib/ajax.js: Refs #2770 - success messages are stoted is success array
+ now in json
+
+ * js/lib/ui.js, views/default/js/elgg.php: Refs #2676 removes old
+ elgg_system_messages() function
+
+2011-01-05 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * js/lib/elgglib.js: Fixes #2770: Corrected markup in JS to create system
+ messages.
+
+ * mod/profile/manifest.xml: Refs #2761. Removed test dep from profile
+ manifest. Profile no longer requires a version of Elgg from the year 3009.
+
+ * actions/admin/plugins/activate.php,
+ actions/admin/plugins/activate_all.php, actions/admin/plugins/deactivate.php,
+ actions/admin/plugins/deactivate_all.php, actions/admin/plugins/disable.php,
+ actions/admin/plugins/disableall.php, actions/admin/plugins/enable.php,
+ actions/admin/plugins/enableall.php, actions/admin/plugins/reorder.php,
+ actions/admin/plugins/set_priority.php,
+ actions/admin/plugins/simple_update_states.php,
+ engine/classes/ElggPlugin.php, engine/classes/ElggPluginManifest.php,
+ engine/classes/ElggPluginPackage.php, engine/lib/plugins.php,
+ languages/en.php, mod/profile/manifest.xml,
+ views/default/admin/components/plugin.php,
+ .../admin/components/plugin_dependencies.php,
+ views/default/admin/plugins/advanced.php,
+ views/default/admin/plugins/simple.php: Fixes #2760. Refs #2759. Updated
+ plugin admin actions to use the new system. Added plugin dependency views in
+ admin. ElggPluginPackage->checkDependencies() now returns the detected value.
+
+
+ * engine/classes/ElggPluginManifestParser17.php: Refs #2759: Added
+ elgg_version to 1.7 manifest parser.
+
+ * mod/oauth_lib/start.php: Fixes #2764. Corrected plugin path for oauth
+ vendor libs.
+
+2011-01-05 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * js/lib/ui.js, views/default/js/elgg.php: Fixes #2676 system messages fade
+ out again
+
+ * engine/lib/upgrades/2011010401.php, version.php: Fixes #2458 adds upgrade
+ to set default_access on old installs
+
+2011-01-04 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../page/elements/content_header_member.php,
+ views/default/page/shells/admin.php: Refs #7221: Removed CRLFs.
+
+ * views/default/js/languages.php, views/default/js/languages/en.php: Refs
+ #2771: Removed CRLFs.
+
+ * engine/lib/filestore.php: Refs #2771: Removed CRLF.
+
+ * js/lib/ajax.js, js/lib/elgglib.js, js/lib/languages.js,
+ js/lib/security.js, js/lib/session.js, js/lib/ui.js, js/lib/ui.widgets.js,
+ js/tests/ElggAjaxOptionsTest.js, js/tests/ElggAjaxTest.js,
+ js/tests/ElggLanguagesTest.js, js/tests/ElggLibTest.js,
+ js/tests/ElggSecurityTest.js, js/tests/ElggSessionTest.js,
+ js/tests/jsTestDriver.conf: Refs #2771: Removing CRLFs from javascript files.
+
+
+ * engine/lib/plugins.php: Fixed problem removing plugin entities if physical
+ files were deleted.
+
+2011-01-04 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/sitepages/start.php: Refs #2732 added link to site pages but tab menu
+ still does not work
+
+ * mod/captcha/backgrounds/bg1.jpg, mod/captcha/backgrounds/bg2.jpg,
+ mod/captcha/backgrounds/bg3.jpg, mod/captcha/backgrounds/bg4.jpg,
+ mod/captcha/backgrounds/bg5.jpg, mod/captcha/captcha.php,
+ mod/captcha/fonts/1.ttf, mod/captcha/fonts/Liberation_serif_License.txt,
+ mod/captcha/languages/en.php, mod/captcha/manifest.xml,
+ mod/captcha/start.php, mod/captcha/views/default/captcha/css.php,
+ mod/captcha/views/default/input/captcha.php, mod/crontrigger/manifest.xml,
+ mod/crontrigger/start.php: moving captcha and crontrigger plugins out of core
+
+
+2011-01-03 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggPluginPackage.php: Removed experimental duplicate code
+ from ElggPlugin.
+
+ * engine/classes/ElggPlugin.php: Added ElggPlugin::getPath().
+
+ * engine/lib/plugins.php: Reindexing plugin priorities after regenerating
+ entities.
+
+ * engine/classes/ElggPlugin.php, engine/classes/ElggPluginManifest.php,
+ engine/lib/plugins.php: Fixes #2763. Better normalizing for unused 1.7
+ manifest options. Added logging when ElggPluginPackage can't be loaded.
+ Better disabling of deleted physical plugins.
+
+ * mod/oauth_lib/manifest.xml: Removing unsupported requires in 1.7 manifest
+ for oauth lib.
+
+2011-01-02 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * documentation/examples/plugins/manifest.xml,
+ engine/classes/ElggPlugin.php, engine/classes/ElggPluginManifest.php,
+ engine/classes/ElggPluginManifestParser18.php,
+ engine/classes/ElggPluginPackage.php, engine/lib/plugins.php,
+ engine/lib/upgrades/2011010101.php, engine/tests/api/plugins.php,
+ engine/tests/test_files/plugin_18/manifest.xml, languages/en.php,
+ version.php: Fixes #1986, #2170, #2225, #2759. Integrated ElggPluginPackage
+ and ElggPluginManifest with ElggPlugin. System now uses ElggPlugin objects to
+ determin plugins. Order is stored in private settings. This absolutely
+ requires running upgrade.php.
+
+ * engine/lib/elgglib.php: Refs #7552, #2547. Autoloading functions return
+ bool.
+
+ * engine/classes/ElggEntity.php, engine/classes/ElggExtender.php,
+ engine/classes/ElggRelationship.php, engine/classes/ElggWidget.php: Refs
+ #2490. Using array_key_exists() instead of isset() in get() overrides to
+ prevent a check for (invalid) metadata with the name of an attribute if that
+ attribute evaluates to !isset().
+
+ * engine/lib/private_settings.php: Added checking for real entities to other
+ private setting functions.
+
+ * engine/lib/private_settings.php: set_private_setting() checks if the guid
+ is a real entity.
+
+ * upgrade.php: Upgrade invalidates simplecache instead of regenerating it.
+
+2011-01-02 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/widgets/save.php, mod/groups/languages/en.php,
+ mod/groups/views/default/groups/featured.php,
+ .../default/widgets/a_users_groups/content.php,
+ .../views/default/widgets/a_users_groups/edit.php: updated group widget
+
+ * engine/lib/admin.php, views/default/admin/plugins/advanced.php,
+ views/default/admin/plugins/plugins_advanced.php,
+ views/default/admin/plugins/plugins_simple.php,
+ views/default/admin/plugins/simple.php,
+ views/default/admin/site/advanced.php, views/default/admin/site/basic.php,
+ views/default/admin/site/site_advanced.php,
+ views/default/admin/site/site_basic.php: revert structure of admin views and
+ fixed uniqueness of admin page menu items
+
+2011-01-01 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/views.php, mod/blog/views/default/blog/sidebar/archives.php,
+ mod/blog/views/default/blog/sidebar/revisions.php,
+ mod/blog/views/default/forms/blog/save.php,
+ mod/embed/views/default/object/file/embedlist.php,
+ mod/groups/views/default/forms/groups/search.php,
+ mod/groups/views/default/groups/featured.php,
+ mod/groups/views/default/groups/find.php,
+ mod/groups/views/default/groups/members.php,
+ views/default/annotation/generic_comment.php,
+ views/default/core/likes/display.php, views/default/core/members/sidebar.php,
+ views/default/css/admin.php, views/default/css/elements/core.php,
+ views/default/css/elements/misc.php, views/default/output/tagcloud.php:
+ updating the sidebar boxes to use the new module classes
+
+ * engine/lib/languages.php, .../notifications/subscriptions/collections.php,
+ .../default/notifications/subscriptions/form.php,
+ .../notifications/subscriptions/forminternals.php,
+ .../notifications/subscriptions/groupsform.php,
+ .../notifications/subscriptions/personal.php,
+ views/default/core/dashboard/blurb.php,
+ .../core/settings/account/default_access.php,
+ views/default/core/settings/account/email.php,
+ views/default/core/settings/account/language.php,
+ .../core/settings/account/notifications.php,
+ views/default/core/settings/account/password.php,
+ .../core/settings/statistics/numentities.php,
+ views/default/core/settings/statistics/online.php,
+ views/default/core/settings/tools/plugin.php,
+ views/default/css/elements/forms.php, views/default/css/elements/misc.php,
+ views/default/css/screen.php: using the info module for user settings
+
+ * views/default/css/admin.php, views/default/css/elements/base.php,
+ views/default/css/elements/chrome.php, views/default/css/elements/core.php,
+ views/default/css/elements/icons.php, views/default/css/elements/layout.php,
+ views/default/css/elements/misc.php,
+ views/default/css/elements/navigation.php,
+ views/default/css/elements/skin.php, views/default/css/elements/spacing.php,
+ views/default/css/elements/typography.php, views/default/css/screen.php,
+ .../layout/shells/one_column_with_sidebar.php: Refs #2317 dividing css
+ element views into skin views and base views. The expectation is that the
+ base views would not be overridden in a theme so the admin css can depend on
+ them.
+
+ * mod/blog/views/default/object/blog.php,
+ views/default/css/elements/core.php, views/default/navigation/menu/site.php,
+ views/default/output/longtext.php: starting adding a .elgg-text class -
+ plugins need to use output/longtext when displaying text
+
+ * .../views/default/bookmarks/bookmarklet.php,
+ views/default/css/elements/core.php: added discoverable pattern to css
+
+ * mod/blog/views/default/widgets/blog/edit.php,
+ mod/file/actions/file/delete.php, mod/file/actions/file/download.php,
+ mod/file/actions/file/save.php, mod/file/actions/file/upload.php,
+ mod/file/classes/FilePluginFile.php, mod/file/edit.php, mod/file/friends.php,
+ mod/file/index.php, mod/file/languages/en.php, mod/file/lib/file.php,
+ mod/file/search.php, mod/file/start.php, mod/file/upload.php,
+ mod/file/views/default/file/css.php,
+ mod/file/views/default/file/group_module.php,
+ mod/file/views/default/file/groupprofile_files.php,
+ mod/file/views/default/file/icon.php,
+ mod/file/views/default/file/typecloud.php,
+ mod/file/views/default/file/upload.php,
+ mod/file/views/default/forms/file/upload.php,
+ .../views/default/widgets/filerepo/content.php,
+ mod/file/views/default/widgets/filerepo/edit.php, mod/file/world.php,
+ mod/groups/views/default/groups/css.php,
+ views/default/output/confirmlink.php: almost finished updating the file
+ plugin to work with new html/css
+
+ * engine/lib/elgglib.php: removed unnecessary variable from stick forms code
+
+
+ * engine/lib/views.php: fixed the function for viewing latest comments
+
+ * engine/lib/output.php: stop double encoding attributes in output/input
+ elements
+
+ * engine/lib/users.php, languages/en.php: Fixes #2740 - exception messages
+ using the value for minimum username and password length
+
+ * engine/lib/group.php: Fixes #2561 only triggering join, group event if the
+ add relationship succeeded
+
+ * engine/lib/metadata.php: Fixes #2698 not sanitizing strings to prevent
+ double encoding
+
+2010-12-31 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Refs #2684, #2754: Merged r7701 to trunk.
+
+2010-12-31 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: not caching js and css when not served through
+ simple cache right now
+
+2010-12-31 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/relationships.php: Refs #2583, #2754: Merged r7445-7446 to
+ trunk.
+
+2010-12-31 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * documentation/css/preview/grid.php: added borders to the css grid preview
+
+2010-12-31 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/cache.php, engine/lib/views.php: Refs #2752, #2635. Merged
+ r7299 to trunk.
+
+ * engine/lib/metadata.php: Merged r7272 from 1.7 to trunk.
+
+2010-12-31 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/lib/blog.php, mod/file/download.php, mod/file/index.php,
+ mod/file/start.php, mod/file/thumbnail.php, mod/file/upload.php,
+ mod/file/views/default/file/groupprofile_files.php: file index page now
+ working for both users and groups
+
+ * mod/file/download.php, mod/file/index.php, mod/file/search.php,
+ mod/file/thumbnail.php, mod/file/views/default/file/upload.php,
+ .../views/default/widgets/filerepo/content.php,
+ mod/file/views/rss/object/file.php: a little standardization of the file
+ plugin code
+
+ * mod/embed/views/default/embed/embed.php,
+ views/default/navigation/tabs.php: Fixes #2703 - added support for url ids in
+ navigation tabs
+
+ * mod/embed/views/default/embed/css.php,
+ .../views/default/groups/group_sort_menu.php,
+ mod/sitepages/views/default/sitepages/menu.php,
+ views/default/core/friends/collectiontabs.php, views/default/css/admin.php,
+ views/default/css/elements/navigation.php, views/default/css/ie.php,
+ views/default/navigation/tabs.php: switching to a better name for tabs in css
+
+
+ * views/default/css/admin.php, views/default/css/elements/heading.php,
+ views/default/css/screen.php: removed heading css elements view
+
+ * views/default/navigation/menu/site.php: site menu needs a clearfix
+
+ * engine/lib/elgglib.php, engine/lib/entities.php, engine/lib/views.php,
+ mod/file/search.php, mod/file/views/default/file/css.php,
+ views/default/layout/objects/gallery.php: added a proper gallery view - still
+ need to wire up the elgg_view_list_item functions and remove the use of
+ context
+
+ * mod/blog/views/default/object/blog.php: updated blog plugin due to change
+ in output/confirmlink
+
+2010-12-30 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/file/search.php, mod/file/views/default/file/css.php,
+ mod/file/views/default/object/file.php, views/default/css/elements/core.php,
+ views/default/layout/objects/list.php,
+ views/default/layout/objects/list/metadata.php: added gallery css for the
+ file plugin
+
+ * documentation/css/preview/forms.php,
+ documentation/css/preview/general.php, documentation/css/preview/grid.php,
+ documentation/css/preview/head.php, documentation/css/preview/index.php,
+ documentation/css/preview/nav.php, documentation/css/preview/objects.php,
+ documentation/css/preview/widgets.php: major addition - adding preview of CSS
+ for developers and themers
+
+ * views/default/css/elements/skin.php: added some base css for 4 different
+ modules
+
+ * views/default/layout/objects/widget.php,
+ views/default/layout/objects/widget/controls.php: allow anyone to minimize a
+ widget
+
+ * views/default/widgets/friends/content.php: put a catch in for a bad owner
+ in the friends widget
+
+ * engine/lib/entities.php: adding ability to override access regardless of
+ whether the entity is saved in the database yet
+
+ * views/default/graphics/icon.php, views/default/output/confirmlink.php,
+ views/default/profile/hover.php: more html validation cleanup
+
+ * mod/tinymce/views/default/input/longtext.php: supporting an id in tinycme
+ longtext and not using the invalid language attribute
+
+ * views/default/input/autocomplete.php, views/default/input/checkboxes.php,
+ views/default/input/datepicker.php, views/default/input/userpicker.php: fixed
+ a few minor issues in input views for validation
+
+ * views/default/layout/objects/list/metadata.php,
+ views/default/object/default.php, views/default/object/object.php,
+ views/default/output/access.php: updated the default object entity view
+
+ * views/default/layout/objects/list/metadata.php: let likes code handle
+ whether the user is logged in or not
+
+ * views/default/input/autocomplete.php: fixes documentation and url of
+ endpoint
+
+ * mod/file/view.php, mod/file/views/default/file/css.php,
+ mod/file/views/default/file/icon.php,
+ .../default/file/icon/application/default.php,
+ .../views/default/file/icon/application/excel.php,
+ .../views/default/file/icon/application/msword.php,
+ .../views/default/file/icon/application/pdf.php,
+ .../default/file/icon/application/powerpoint.php,
+ .../default/file/icon/application/vnd.ms-excel.php,
+ .../file/icon/application/vnd.ms-powerpoint.php,
+ .../application/vnd.oasis.opendocument.text.php,
+ .../views/default/file/icon/application/x-gzip.php,
+ .../file/icon/application/x-rar-compressed.php,
+ .../default/file/icon/application/x-stuffit.php,
+ .../views/default/file/icon/application/zip.php,
+ mod/file/views/default/file/icon/archive.php,
+ mod/file/views/default/file/icon/audio.php,
+ mod/file/views/default/file/icon/audio/default.php,
+ mod/file/views/default/file/icon/default.php,
+ mod/file/views/default/file/icon/document.php,
+ mod/file/views/default/file/icon/text/default.php,
+ .../views/default/file/icon/text/directory.php,
+ mod/file/views/default/file/icon/text/v-card.php,
+ mod/file/views/default/file/icon/video.php,
+ mod/file/views/default/file/icon/video/default.php,
+ .../default/file/specialcontent/audio/mid.php,
+ .../default/file/specialcontent/audio/mp3.php,
+ .../default/file/specialcontent/audio/mpeg.php,
+ .../default/file/specialcontent/audio/x-wav.php,
+ .../default/file/specialcontent/image/default.php,
+ mod/file/views/default/object/file.php: updated the object/file view
+
+ * actions/admin/user/resetpassword.php, actions/register.php,
+ actions/user/default_access.php, actions/useradd.php,
+ pages/account/register.php, pages/avatar/view.php,
+ views/default/admin/overview/statistics.php, views/default/profile/hover.php,
+ views/installation/input/button.php: Refs #2428 removed more CONFIG uses
+
+ * mod/groups/all.php, mod/groups/views/default/group/default.php: fixed new
+ groups listing
+
+ * engine/lib/views.php: required for river rss to work
+
+ * views/rss/canvas/default.php, views/rss/core/river/body.php,
+ views/rss/layout/objects/image_block.php, views/rss/output/url.php:
+ supporting river rss
+
+ * views/rss/entities/entity_list.php, views/rss/layout/objects/list.php,
+ views/rss/layout/shells/default.php: Fixes #2113 - updated rss view type to
+ use new view structure for lists
+
+ * engine/lib/plugins.php, views/default/admin/plugins/plugins_simple.php,
+ views/default/admin/plugins/simple.php,
+ views/default/admin/site/advanced.php, views/default/admin/site/basic.php,
+ views/default/admin/site/site_advanced.php,
+ views/default/admin/site/site_basic.php: fixed a few issues with the admin
+ backend - need to look into better ways to structure admin sub views
+
+2010-12-29 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/categories/views/default/categories/css.php,
+ mod/embed/views/default/embed/css.php,
+ .../views/default/invitefriends/formitems.php,
+ .../views/default/messageboard/forms/add.php,
+ .../views/default/widgets/messageboard/content.php,
+ .../views/default/messages/forms/reply.php,
+ mod/messages/views/default/messages/forms/send.php,
+ mod/messages/views/default/messages/messages.php,
+ .../default/sitepages/forms/editfrontsimple.php,
+ mod/tinymce/views/default/input/longtext.php,
+ .../uservalidationbyemail/unvalidated_user.php,
+ views/default/admin/components/plugin.php,
+ views/default/admin/plugins/advanced.php,
+ views/default/admin/plugins/plugins_advanced.php,
+ views/default/css/admin.php, views/default/css/elements/forms.php,
+ views/default/css/screen.php, views/default/input/access.php,
+ views/default/input/checkbox.php, views/default/input/checkboxes.php,
+ views/default/input/email.php, views/default/input/file.php,
+ views/default/input/longtext.php, views/default/input/password.php,
+ views/default/input/plaintext.php, views/default/input/pulldown.php,
+ views/default/input/radio.php, views/default/input/tags.php,
+ views/default/input/text.php, views/default/input/url.php,
+ views/default/page/shells/walled_garden.php,
+ views/installation/input/access.php, views/installation/input/checkboxes.php,
+ views/installation/input/longtext.php, views/installation/input/pulldown.php:
+ stage 1 in moving the forms markup to elgg- namespaced css - buttons still
+ need work
+
+ * mod/diagnostics/index.php, mod/diagnostics/start.php,
+ .../views/default/admin/utilities/diagnostics.php,
+ .../views/default/diagnostics/forms/download.php,
+ .../views/default/diagnostics/runalltests.php: updated the diagnostics plugin
+ to use the new admin backend
+
+ * engine/lib/admin.php, languages/en.php, mod/logbrowser/start.php,
+ mod/reportedcontent/start.php: added admin utilities menu item
+
+ * mod/diagnostics/index.php, mod/search/index.php,
+ mod/sitepages/sitepages_functions.php,
+ views/default/page/elements/content.php: Fixes #2241 - removed direct calls
+ to the content wrapper view and removed the view as it is been replaced by a
+ body view
+
+ * mod/blog/lib/blog.php: Refs #2077 added new blog post button to group blog
+ - can be used as module for remianing group tools
+
+ * mod/blog/lib/blog.php: Fixes #2169 - setting the blog edit page owner to
+ container
+
+ * mod/messages/views/default/messages/forms/send.php,
+ mod/messages/views/default/messages/messages.php,
+ views/foaf/user/default.php: Refs #1553 - removed all hard coded profile urls
+ from core
+
+ * engine/lib/river.php, engine/lib/views.php: Fixes #2221 - rewrite of rover
+ functions has been completed with moving elgg_view_river_item() into the
+ views library. The ugly C&P functions were moved into the riverdashboard
+ plugin and new 1.7 style get/list functions were introduced
+
+ * actions/profile/edit.php, actions/profile/fields/add.php,
+ actions/profile/fields/delete.php, actions/profile/fields/reorder.php,
+ actions/profile/fields/reset.php, engine/lib/users.php,
+ mod/profile/views/default/profile/details.php,
+ .../admin/appearance/profile_fields/list.php,
+ views/default/forms/profile/edit.php: Fixes #2751 profile custom fields uses
+ the config table now
+
+ * engine/lib/configuration.php: added a catch for configuration names longer
+ than 32 characters
+
+ * engine/lib/configuration.php: fixed bug where get_config was returning 0
+ because there is not not auto id on the config table
+
+ * mod/tabbed_profile/actions/addcomment.php,
+ mod/tabbed_profile/actions/deletecomment.php,
+ mod/tabbed_profile/graphics/defaultlarge.gif,
+ mod/tabbed_profile/graphics/defaultmaster.gif,
+ mod/tabbed_profile/graphics/defaultmedium.gif,
+ mod/tabbed_profile/graphics/defaultsmall.gif,
+ mod/tabbed_profile/graphics/defaulttiny.gif,
+ mod/tabbed_profile/graphics/defaulttopbar.gif,
+ mod/tabbed_profile/graphics/drag_handle.png,
+ mod/tabbed_profile/graphics/speech_bubble_tail.gif,
+ mod/tabbed_profile/graphics/twitter16px.png, mod/tabbed_profile/icon.php,
+ mod/tabbed_profile/icondirect.php, mod/tabbed_profile/languages/en.php,
+ mod/tabbed_profile/manifest.xml, mod/tabbed_profile/start.php,
+ .../views/default/icon/user/default/large.php,
+ .../views/default/icon/user/default/master.php,
+ .../views/default/icon/user/default/medium.php,
+ .../views/default/icon/user/default/small.php,
+ .../views/default/icon/user/default/tiny.php,
+ .../views/default/icon/user/default/topbar.php,
+ .../default/profile/commentwall/commentwall.php,
+ .../profile/commentwall/commentwall_content.php,
+ .../default/profile/commentwall/commentwalladd.php,
+ .../views/default/profile/content_wrapper.php,
+ mod/tabbed_profile/views/default/profile/css.php,
+ .../views/default/profile/listing.php,
+ .../views/default/profile/menu/adminlinks.php,
+ .../views/default/profile/menu/friendlinks.php,
+ .../views/default/profile/menu/links.php,
+ .../views/default/profile/metatags.php,
+ .../views/default/profile/ownerblock.php,
+ .../views/default/profile/sidebar.php,
+ .../views/default/profile/tab_navigation.php,
+ .../views/default/profile/tabs/activity.php,
+ .../views/default/profile/tabs/commentwall.php,
+ .../views/default/profile/tabs/details.php,
+ .../views/default/profile/tabs/friends.php,
+ .../views/default/profile/tabs/groups.php,
+ .../views/default/profile/tabs/twitter.php: Fixes #2481 - moving
+ tabbed_profile plugin into the plugins repo from core - it needs some updates
+ to reflect changes to the core profile plugin
+
+ * mod/riverdashboard/actions/add.php, mod/riverdashboard/actions/delete.php,
+ mod/riverdashboard/endpoint/get_comments.php,
+ mod/riverdashboard/endpoint/get_likes.php,
+ mod/riverdashboard/endpoint/ping.php,
+ mod/riverdashboard/graphics/follow_icon.png,
+ mod/riverdashboard/graphics/refresh.png, mod/riverdashboard/index.php,
+ mod/riverdashboard/languages/en.php, mod/riverdashboard/manifest.xml,
+ mod/riverdashboard/start.php, .../views/default/river/dashboard.php,
+ .../views/default/river/item/list.php,
+ .../views/default/river/item/wrapper.php,
+ .../views/default/river/item/wrapper_classic.php,
+ .../views/default/riverdashboard/container.php,
+ .../views/default/riverdashboard/css.php,
+ .../views/default/riverdashboard/ecml/activity.php,
+ .../views/default/riverdashboard/js.php,
+ .../views/default/riverdashboard/menu.php,
+ .../views/default/riverdashboard/nav.php,
+ .../views/default/riverdashboard/river/body.php,
+ .../views/default/riverdashboard/river/footer.php,
+ .../views/default/riverdashboard/rivercomment.php,
+ .../views/default/riverdashboard/sitemessage.php,
+ .../views/default/riverdashboard/welcome.php,
+ .../views/json/riverdashboard/container.php,
+ .../views/rss/riverdashboard/container.php: Fixes #2226 moves riverdashboard
+ into secondary plugins from core plugins - most of riverdashboard
+ functionality is now in core (except for displaying who has liked stuff and
+ ajax refreshes)
+
+ * views/default/css/screen.php, views/default/forms/likes/display.php,
+ views/default/forms/likes/link.php: cleaned up left over views and css from
+ likes
+
+ * actions/likes/add.php, actions/likes/delete.php, engine/lib/elgglib.php,
+ js/lib/ui.js, languages/en.php, views/default/annotation/likes.php,
+ views/default/core/likes/display.php, views/default/core/river/controls.php,
+ views/default/css/screen.php, views/default/forms/likes/edit.php,
+ views/default/js/elgg.php: rewrote the display of likes
+
+ * engine/lib/annotations.php: updated documentation on new
+ elgg_annotation_exists() function
+
+ * mod/blog/views/default/object/blog.php: let likes code handle logged in
+ user status
+
+ * views/default/css/elements/navigation.php: forgot to remove commented css
+ statement
+
+ * views/default/css/elements/navigation.php,
+ views/default/page/elements/footer.php: styled the footer menu
+
+ * views/default/css/elements/core.php, views/default/css/elements/skin.php,
+ views/default/layout/elements/page_links.php,
+ views/default/layout/elements/sidebar.php: created a new layout element -
+ page links - holds stuff like the rss link
+
+ * mod/file/classes/FilePluginFile.php, mod/file/start.php: moved the file
+ class into a class file
+
+ * mod/blog/lib/blog.php, mod/blog/start.php: more clean up of the blog
+ plugin - removed unused functions and moved the url forwarder into library
+
+ * mod/defaultwidgets/start.php, mod/diagnostics/start.php,
+ mod/logbrowser/start.php, mod/messages/start.php,
+ mod/reportedcontent/start.php, mod/uservalidationbyemail/start.php: updating
+ plugins to use new page menu
+
+ * mod/file/view.php: forgot to add this file for the fie plugin
+
+ * engine/classes/ElggMenuBuilder.php, engine/classes/ElggMenuItem.php,
+ engine/lib/admin.php, engine/lib/navigation.php, engine/lib/users.php,
+ js/lib/ui.js, views/default/admin/overview.php,
+ views/default/admin/overview/statistics.php, views/default/css/admin.php,
+ views/default/css/elements/navigation.php,
+ views/default/layout/elements/sidebar.php,
+ views/default/navigation/menu/elements/group.php,
+ views/default/navigation/menu/elements/item.php,
+ views/default/navigation/menu/page.php: page menu using the new menu system -
+ admin menu updated
+
+ * mod/file/actions/delete.php, mod/file/actions/download.php,
+ mod/file/actions/file/delete.php, mod/file/actions/file/download.php,
+ mod/file/actions/file/save.php, mod/file/actions/file/upload.php,
+ mod/file/actions/save.php, mod/file/actions/upload.php, mod/file/edit.php,
+ mod/file/friends.php, mod/file/index.php, mod/file/languages/en.php,
+ mod/file/start.php, mod/file/upload.php,
+ mod/file/views/default/object/file.php, mod/file/world.php: starting to
+ update the file plugin to use the new html/css
+
+ * mod/blog/languages/en.php, mod/blog/lib/blog.php, mod/blog/start.php,
+ mod/blog/views/default/blog/group_module.php,
+ views/default/layout/shells/content/header.php: new content link uses guid to
+ make supporting groups and users easier
+
+ * views/default/output/url.php: supporting anchors with a href in output/url
+
+
+ * views/default/layout/objects/list/metadata.php: added a general metadata
+ view for lists
+
+2010-12-29 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/languages.php: Cleaned up register_translations().
+
+2010-12-28 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/views.php: Added elgg_register_viewtype().
+
+2010-12-27 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php: merged the admin profile edit fields language strings
+ into core
+
+ * engine/lib/plugins.php: fixing merge of plugin code [7727] - it blew away
+ the plugin class loading code
+
+ * languages/en.php, mod/profile/views/default/profile/css.php,
+ mod/profile/views/default/profile/details.php: moved profile fields language
+ strings into core and update profile plugin details view
+
+ * engine/lib/users.php, views/default/navigation/menu/user_admin.php:
+ removed early version of admin context menu and fixed missing edit profile
+ button
+
+2010-12-27 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/plugins.php: Refs #2635, #2643. Merged cache changes into
+ trunk.
+
+2010-12-27 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/graphics/drag_handle.png,
+ mod/profile/graphics/twitter16px.png, mod/profile/languages/en.php,
+ mod/profile/start.php, mod/profile/views/default/profile/box.php,
+ mod/profile/views/default/profile/css.php,
+ mod/profile/views/default/profile/details.php,
+ mod/profile/views/default/profile/listing.php,
+ .../views/default/profile/menu/adminlinks.php,
+ .../views/default/profile/menu/friendlinks.php,
+ mod/profile/views/default/profile/menu/links.php,
+ mod/profile/views/default/profile/owner_block.php,
+ mod/profile/views/default/profile/ownerblock.php,
+ mod/profile/views/default/profile/sidebar.php,
+ mod/profile/views/default/profile/wrapper.php: more clean up of the basic
+ profile plugin - reorged views and removed a lot of cruft
+
+2010-12-27 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/configuration.php: Refs #2543: set_default_config() uses better
+ names. get_config() rewrites old names to new, but have to double up
+ assignments in $CONFIG for ppl not using get_config().
+
+2010-12-27 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggMenuBuilder.php, engine/classes/ElggMenuItem.php,
+ engine/lib/users.php, engine/lib/views.php, mod/blog/start.php,
+ mod/bookmarks/start.php, mod/file/start.php, mod/logbrowser/start.php,
+ mod/messages/start.php, mod/pages/start.php,
+ mod/profile/views/default/profile/css.php,
+ mod/profile/views/default/profile/ownerblock.php,
+ views/default/navigation/menu/user_hover.php: improved menu creation for on
+ demand menus and integrated hover menu items into profile owner block
+
+ * engine/classes/ElggUser.php, engine/lib/elgglib.php, engine/lib/users.php,
+ mod/logbrowser/start.php, mod/messages/start.php,
+ views/default/css/elements/navigation.php, views/default/js/elgg.php,
+ views/default/navigation/menu/user_hover.php,
+ views/default/profile/hover.php: moved most of the code for the user hover
+ menu into the new menu system
+
+2010-12-25 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/icons/user/defaultlarge.gif,
+ _graphics/icons/user/defaultmaster.gif,
+ _graphics/icons/user/defaultmedium.gif,
+ _graphics/icons/user/defaultsmall.gif, _graphics/icons/user/defaulttiny.gif,
+ _graphics/icons/user/defaulttopbar.gif,
+ mod/profile/graphics/defaultlarge.gif,
+ mod/profile/graphics/defaultmaster.gif,
+ mod/profile/graphics/defaultmedium.gif,
+ mod/profile/graphics/defaultsmall.gif, mod/profile/graphics/defaulttiny.gif,
+ mod/profile/graphics/defaulttopbar.gif,
+ mod/profile/graphics/speech_bubble_tail.gif,
+ .../views/default/icon/user/default/large.php,
+ .../views/default/icon/user/default/master.php,
+ .../views/default/icon/user/default/medium.php,
+ .../views/default/icon/user/default/small.php,
+ .../views/default/icon/user/default/tiny.php,
+ .../views/default/icon/user/default/topbar.php,
+ views/default/icon/user/default/large.php,
+ views/default/icon/user/default/master.php,
+ views/default/icon/user/default/medium.php,
+ views/default/icon/user/default/small.php,
+ views/default/icon/user/default/tiny.php,
+ views/default/icon/user/default/topbar.php: moved default profile icons into
+ core
+
+ * mod/blog/start.php, mod/blog/views/default/blog/group_module.php,
+ mod/bookmarks/languages/en.php, mod/bookmarks/start.php, mod/file/start.php,
+ mod/groups/views/default/group/default.php, mod/pages/start.php,
+ mod/profile/views/default/profile/ownerblock.php,
+ views/default/css/elements/navigation.php,
+ views/default/css/elements/skin.php,
+ views/default/layout/elements/owner_block.php,
+ views/default/layout/elements/sidebar.php,
+ views/default/layout/objects/list/body.php,
+ views/default/navigation/menu/default.php, views/default/user/default.php:
+ updated owner blocks for users and groups
+
+2010-12-24 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/views.php, mod/blog/views/default/object/blog.php,
+ views/default/layout/elements/comments.php: supporting id for comments for in
+ page links
+
+ * mod/blog/views/default/object/blog.php,
+ views/default/layout/objects/list/body.php: fixing a few display issues in
+ the object/blog view
+
+ * mod/blog/views/default/object/blog.php,
+ views/default/css/elements/core.php,
+ views/default/layout/objects/list/body.php: creating standard list body for
+ plugins
+
+2010-12-23 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/profile/tabs/friends.php,
+ .../views/default/profile/tabs/groups.php: using new list methods in tabbed
+ profile plugin
+
+ * engine/classes/ElggUser.php: Added list groups and list friends class
+ methods - will be handy for federation
+
+ * engine/classes/ElggUser.php: added a class math to get a user's groups and
+ cleaned up some documentation
+
+ * engine/lib/users.php: Refs #2283 using entity_row_to_elggstar() when
+ loading user from username or code so that ElggUser can be subclassed
+
+ * views/default/layout/objects/list.php: Fixes #2730 - passing the vars
+ array into elgg_view_list_item so that eventually plugins can pass additional
+ parameters into list views
+
+ * engine/lib/elgglib.php: Fixes #2741 skipping :// when replacing // in file
+ paths so that we support URIs
+
+ * mod/tabbed_profile/manifest.xml: do not enable tabbed profile by default -
+ also need to set a conflict key in its manifest for the profile plugin
+
+2010-12-22 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/defaultwidgets/editor.php,
+ .../views/default/embed/web_services/content.php,
+ mod/groups/views/default/forms/forums/addtopic.php,
+ .../views/default/forms/forums/edittopic.php,
+ mod/groups/views/default/forms/groups/edit.php,
+ mod/groups/views/default/groups/css.php,
+ .../views/default/groups/invitationrequests.php,
+ .../views/default/groups/membershiprequests.php,
+ .../views/default/messages/forms/reply.php,
+ mod/messages/views/default/messages/forms/send.php,
+ mod/messages/views/default/messages/forms/view.php,
+ mod/messages/views/default/messages/messages.php,
+ mod/pages/views/default/forms/pages/edit.php,
+ .../views/default/forms/pages/editwelcome.php,
+ .../views/default/riverdashboard/css.php,
+ views/default/admin/components/plugin.php,
+ views/default/core/account/login_walled_garden.php,
+ views/default/core/friends/picker.php, views/default/css/admin.php,
+ views/default/css/elements/forms.php, views/default/css/screen.php,
+ views/default/input/button.php, views/installation/input/button.php: adding
+ elgg namespace to button css classes
+
+2010-12-21 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/access.php: merged the fix to get access collection
+ documentation into trunk from 1.7 branch
+
+2010-12-20 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/views/default/object/blog.php, pages/entities/index.php,
+ views/default/css/elements/skin.php, views/default/css/screen.php,
+ views/default/forms/likes/edit.php, views/default/output/confirmlink.php:
+ added elgg-icon-delete and elgg-icon-likes
+
+ * engine/lib/views.php, mod/groups/views/default/groups/grouplisting.php,
+ .../views/default/profile/listing.php,
+ .../views/default/profile/tabs/activity.php,
+ .../views/default/profile/tabs/friends.php,
+ .../views/default/profile/tabs/groups.php: added the core river to the tabbed
+ profile plugin and fixed some deprecated function warnings
+
+2010-12-19 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css/admin.php: fixed a bug I introduced in the admin css
+
+ * mod/profile/views/default/profile/box.php,
+ mod/profile/views/default/profile/css.php,
+ mod/profile/views/default/profile/details.php,
+ mod/profile/views/default/profile/listing.php,
+ mod/profile/views/default/profile/ownerblock.php,
+ mod/profile/views/default/profile/sidebar.php,
+ views/default/css/elements/skin.php: an almost done widget-based profile
+ plugin
+
+ * actions/widgets/save.php, engine/classes/ElggDiskFilestore.php,
+ js/lib/ui.js, js/lib/ui.widgets.js,
+ mod/pages/views/default/pages/pagelisting.php,
+ mod/pages/views/default/pages/pageprofile.php, pages/dashboard.php,
+ views/default/css/screen.php, views/default/graphics/ajax_loader.php,
+ views/default/layout/objects/widget/controls.php,
+ views/default/layout/objects/widget/settings.php,
+ views/default/layout/shells/widgets.php: fixed a few bugs and updated the
+ widget code
+
+ * js/lib/ui.widgets.js, views/default/css/screen.php,
+ views/default/layout/objects/widget.php,
+ views/default/layout/objects/widget/controls.php,
+ views/default/layout/objects/widget/settings.php,
+ views/default/layout/shells/widgets.php,
+ views/default/layout/shells/widgets/add_button.php,
+ views/default/layout/shells/widgets/add_panel.php: namespaced the widget code
+
+
+ * js/lib/ui.widgets.js, pages/dashboard.php,
+ views/default/core/dashboard/blurb.php, views/default/css/screen.php,
+ views/default/layout/shells/widgets.php: starting to use the grid in the
+ widget code
+
+ * engine/lib/river.php: fixed missed variable name change in river's use of
+ image block pattern
+
+ * mod/profile/views/default/profile/javascript.php,
+ .../views/default/profile/javascript.php: moved avatar drop down javascript
+ into core
+
+ * mod/file/views/default/file/css.php,
+ mod/groups/views/default/groups/css.php,
+ mod/groups/views/default/groups/icon.php, mod/profile/start.php,
+ mod/profile/views/default/profile/css.php,
+ mod/profile/views/default/profile/javascript.php,
+ mod/tabbed_profile/start.php,
+ mod/tabbed_profile/views/default/profile/css.php,
+ .../views/default/profile/javascript.php, views/default/css/screen.php,
+ views/default/js/elgg.php, views/default/profile/icon.php: using
+ elgg-user-icon instead of usericon and moving the css into core
+
+ * mod/blog/views/default/forms/blog/save.php,
+ mod/file/views/default/object/file.php,
+ mod/groups/views/default/forms/groups/edit.php,
+ mod/groups/views/default/forum/topics.php,
+ mod/groups/views/default/groups/css.php,
+ mod/groups/views/default/groups/groupprofile.php,
+ .../views/default/groups/invitationrequests.php,
+ .../views/default/groups/membershiprequests.php, mod/messages/index.php,
+ mod/messages/sent.php, mod/messages/views/default/messages/messages.php,
+ mod/profile/views/default/profile/css.php,
+ mod/profile/views/default/profile/ownerblock.php,
+ .../views/default/object/reported_content.php,
+ mod/tabbed_profile/views/default/profile/css.php,
+ .../views/default/profile/ownerblock.php,
+ mod/thewire/views/default/object/thewire.php,
+ mod/thewire/views/default/thewire/css.php,
+ mod/thewire/views/default/thewire/forms/add.php,
+ .../views/default/thewire/profile_status.php,
+ views/default/admin/components/plugin_settings.php,
+ views/default/admin/plugins/advanced.php,
+ views/default/admin/plugins/simple.php,
+ views/default/core/account/login_walled_garden.php,
+ views/default/css/admin.php, views/default/css/elements/forms.php,
+ views/default/css/elements/skin.php, views/default/css/screen.php,
+ views/default/forms/profile/fields/reset.php,
+ views/default/layout/shells/content/header.php,
+ views/default/layout/shells/widgets/add_button.php,
+ views/default/page/elements/content_header.php: replacing action-button with
+ elgg-action-button
+
+ * views/default/css/elements/skin.php,
+ views/default/layout/shells/content/header.php: using more generic markup for
+ main header
+
+ * mod/search/views/default/search/css.php,
+ mod/search/views/default/search/search_box.php: updated search box css
+
+ * .../views/default/reportedcontent/css.php,
+ .../views/default/reportedcontent/footer_link.php, mod/sitepages/start.php,
+ .../views/default/sitepages/footer_menu.php,
+ views/default/css/elements/skin.php, views/default/page/elements/footer.php:
+ cleaning up the page footer - still need to add css for footer menu
+
+ * views/default/css/elements/skin.php,
+ views/default/layout/shells/two_sidebar.php,
+ views/default/page/elements/topbar.php: refining the elgg-alt pattern
+
+ * views/default/css/admin.php, views/default/css/elements/core.php,
+ views/default/css/elements/layout.php, views/default/css/screen.php,
+ views/default/layout/objects/image_block.php: completed the media to image
+ block switch
+
+ * engine/lib/river.php, engine/lib/views.php,
+ mod/blog/views/default/object/blog.php, mod/riverdashboard/start.php,
+ views/default/annotation/generic_comment.php,
+ views/default/css/elements/layout.php,
+ views/default/layout/objects/image_block.php,
+ views/default/layout/objects/media.php: changed name from media block to
+ image block
+
+ * views/default/css/admin.php,
+ views/default/layout/shells/administration.php,
+ views/default/page/shells/admin.php: started cleaning up the admin css
+
+ * engine/lib/admin.php, engine/lib/views.php, engine/start.php: added a
+ ready,system event so that plugins can do things after the init has finished
+ but before pages are created
+
+ * views/default/navigation/menu/user_admin.php,
+ views/default/profile/hover.php, views/default/profile/icon.php: cleaned up
+ profile hover menu
+
+ * engine/lib/users.php, mod/logbrowser/start.php,
+ .../views/default/logbrowser/adminlinks.php,
+ mod/profile/views/default/profile/admin_menu.php,
+ mod/profile/views/default/profile/hoverover.php,
+ mod/profile/views/default/profile/icon.php,
+ mod/profile/views/default/profile/ownerblock.php,
+ .../views/default/profile/admin_menu.php,
+ .../views/default/profile/hoverover.php,
+ mod/tabbed_profile/views/default/profile/icon.php,
+ .../views/default/profile/ownerblock.php,
+ views/default/navigation/menu/user_admin.php, views/default/profile/icon.php:
+ added a user admin menu that plugins can add menu items to
+
+ * mod/blog/start.php, mod/bookmarks/start.php, mod/file/start.php,
+ mod/pages/start.php, mod/profile/views/default/profile/ownerblock.php: pulled
+ user owner block menu out of profile plugin with new menu code
+
+ * mod/profile/actions/addcomment.php, mod/profile/actions/deletecomment.php,
+ mod/profile/start.php, mod/profile/views/default/profile/box.php,
+ .../default/profile/commentwall/commentwall.php,
+ .../profile/commentwall/commentwall_content.php,
+ .../default/profile/commentwall/commentwalladd.php,
+ .../views/default/profile/content_wrapper.php,
+ mod/profile/views/default/profile/css.php,
+ mod/profile/views/default/profile/details.php,
+ .../views/default/profile/tab_navigation.php,
+ .../views/default/profile/tabs/activity.php,
+ .../views/default/profile/tabs/commentwall.php,
+ mod/profile/views/default/profile/tabs/details.php,
+ mod/profile/views/default/profile/tabs/friends.php,
+ mod/profile/views/default/profile/tabs/groups.php,
+ mod/profile/views/default/profile/tabs/twitter.php,
+ mod/tabbed_profile/actions/addcomment.php,
+ mod/tabbed_profile/actions/deletecomment.php,
+ mod/tabbed_profile/graphics/defaultlarge.gif,
+ mod/tabbed_profile/graphics/defaultmaster.gif,
+ mod/tabbed_profile/graphics/defaultmedium.gif,
+ mod/tabbed_profile/graphics/defaultsmall.gif,
+ mod/tabbed_profile/graphics/defaulttiny.gif,
+ mod/tabbed_profile/graphics/defaulttopbar.gif,
+ mod/tabbed_profile/graphics/drag_handle.png,
+ mod/tabbed_profile/graphics/speech_bubble_tail.gif,
+ mod/tabbed_profile/graphics/twitter16px.png, mod/tabbed_profile/icon.php,
+ mod/tabbed_profile/icondirect.php, mod/tabbed_profile/languages/en.php,
+ mod/tabbed_profile/manifest.xml, mod/tabbed_profile/start.php,
+ .../views/default/icon/user/default/large.php,
+ .../views/default/icon/user/default/master.php,
+ .../views/default/icon/user/default/medium.php,
+ .../views/default/icon/user/default/small.php,
+ .../views/default/icon/user/default/tiny.php,
+ .../views/default/icon/user/default/topbar.php,
+ .../views/default/profile/admin_menu.php,
+ .../default/profile/commentwall/commentwall.php,
+ .../profile/commentwall/commentwall_content.php,
+ .../default/profile/commentwall/commentwalladd.php,
+ .../views/default/profile/content_wrapper.php,
+ mod/tabbed_profile/views/default/profile/css.php,
+ .../views/default/profile/hoverover.php,
+ mod/tabbed_profile/views/default/profile/icon.php,
+ .../views/default/profile/javascript.php,
+ .../views/default/profile/listing.php,
+ .../views/default/profile/menu/adminlinks.php,
+ .../views/default/profile/menu/friendlinks.php,
+ .../views/default/profile/menu/links.php,
+ .../views/default/profile/metatags.php,
+ .../views/default/profile/ownerblock.php,
+ .../views/default/profile/sidebar.php,
+ .../views/default/profile/tab_navigation.php,
+ .../views/default/profile/tabs/activity.php,
+ .../views/default/profile/tabs/commentwall.php,
+ .../views/default/profile/tabs/details.php,
+ .../views/default/profile/tabs/friends.php,
+ .../views/default/profile/tabs/groups.php,
+ .../views/default/profile/tabs/twitter.php: rough widget profile plugin
+
+ * mod/profile/javascript.php, mod/profile/start.php,
+ .../views/default/profile/content_wrapper.php,
+ mod/profile/views/default/profile/metatags.php,
+ mod/profile/views/default/profile/ownerblock.php,
+ .../views/default/profile/profile_content.php,
+ .../default/profile/profile_contents/activity.php,
+ .../profile/profile_contents/commentwall.php,
+ .../default/profile/profile_contents/details.php,
+ .../default/profile/profile_contents/friends.php,
+ .../default/profile/profile_contents/groups.php,
+ .../default/profile/profile_contents/twitter.php,
+ .../views/default/profile/profile_navigation.php,
+ .../views/default/profile/profile_ownerblock.php,
+ mod/profile/views/default/profile/sidebar.php,
+ .../views/default/profile/tab_navigation.php,
+ .../views/default/profile/tabs/activity.php,
+ .../views/default/profile/tabs/commentwall.php,
+ mod/profile/views/default/profile/tabs/details.php,
+ mod/profile/views/default/profile/tabs/friends.php,
+ mod/profile/views/default/profile/tabs/groups.php,
+ mod/profile/views/default/profile/tabs/twitter.php: more profile clean up
+
+ * mod/profile/edit.php, mod/profile/index.php, mod/profile/profile_lib.php,
+ mod/profile/start.php: more cleanup of the profile plugin from the
+ reorganization
+
+2010-12-18 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/profile/fields/add.php, actions/profile/fields/delete.php,
+ actions/profile/fields/reorder.php, actions/profile/fields/reset.php,
+ engine/lib/admin.php, mod/profile/actions/deletedefaultprofileitem.php,
+ mod/profile/actions/editdefault.php, mod/profile/actions/editfield.php,
+ mod/profile/actions/reorder.php, mod/profile/actions/resetdefaultprofile.php,
+ mod/profile/start.php, mod/profile/vendor/jquery.jeditable.mini.js,
+ .../default/admin/appearance/defaultprofile.php,
+ mod/profile/views/default/profile/edit.php,
+ .../views/default/profile/editdefaultprofile.php,
+ .../default/profile/editdefaultprofileitems.php,
+ vendors/jquery/jquery.jeditable.mini.js,
+ views/default/admin/appearance/profile_fields.php,
+ .../admin/appearance/profile_fields/list.php,
+ views/default/forms/profile/fields/add.php,
+ views/default/forms/profile/fields/reset.php: continuing to slash and burn
+ the profile plugin - moving the admin profile fields into core - last major
+ change
+
+ * actions/profile/edit.php, engine/lib/users.php, languages/en.php,
+ mod/profile/actions/edit.php, mod/profile/start.php, pages/avatar/edit.php,
+ pages/profile/edit.php, views/default/forms/profile/edit.php: moved profile
+ edit form into core
+
+ * engine/lib/users.php, languages/en.php, mod/profile/editicon.php,
+ .../views/default/js/jquery.imgareaselect-0.8.js,
+ .../default/js/jquery.imgareaselect-0.8.min.js,
+ mod/profile/views/default/profile/css.php,
+ mod/profile/views/default/profile/editicon.php,
+ .../views/default/profile/profile_ownerblock.php, pages/avatar/edit.php,
+ pages/avatar/view.php, vendors/jquery/jquery.imgareaselect-0.8.min.js,
+ views/default/core/avatar/crop.php, views/default/core/avatar/upload.php,
+ views/default/css/screen.php, views/default/forms/avatar/crop.php,
+ views/default/forms/avatar/upload.php: pulling the avatar code out of the
+ profile plugin - just some minor icon related code left
+
+ * actions/avatar/crop.php, actions/avatar/upload.php, engine/lib/users.php,
+ languages/en.php, mod/groups/start.php, mod/profile/actions/cropicon.php,
+ mod/profile/actions/iconupload.php,
+ mod/profile/views/default/profile/editicon.php,
+ views/default/forms/avatar/crop.php, views/default/forms/avatar/upload.php:
+ moved the avatar forms and actions into core from profile plugin
+
+ * engine/classes/ElggMenuItem.php, engine/lib/users.php,
+ engine/lib/usersettings.php, mod/invitefriends/index.php,
+ mod/invitefriends/start.php, .../views/default/invitefriends/formitems.php,
+ mod/notifications/groups.php, mod/notifications/index.php,
+ mod/notifications/start.php,
+ .../default/notifications/subscriptions/form.php,
+ .../notifications/subscriptions/groupsform.php,
+ views/default/css/elements/navigation.php,
+ views/default/layout/elements/sidebar.php,
+ views/default/navigation/menu/default.php: half way through converting
+ submenu to new menu code - pages and groups are the two major users left
+
+ * actions/admin/menu/save.php, actions/admin/menu_items.php,
+ engine/classes/ElggMenuItem.php, engine/lib/admin.php,
+ engine/lib/navigation.php, engine/lib/river.php, engine/lib/users.php,
+ mod/blog/start.php, mod/bookmarks/start.php, mod/file/start.php,
+ mod/groups/start.php, mod/pages/start.php, mod/riverdashboard/start.php,
+ mod/thewire/start.php, views/default/admin/appearance/menu_items.php,
+ views/default/navigation/menu/elements/item.php,
+ views/default/navigation/menu/site.php,
+ views/default/navigation/site_nav.php,
+ views/default/page/elements/header.php: site nav menu now uses new menu code
+ (and finished the implementation of custom menu items while I was at it - not
+ backward compatible with the previous half finished version)
+
+2010-12-17 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * pages/account/forgotten_password.php, pages/account/register.php,
+ pages/entities/list.php, pages/friends/index.php, pages/friends/of.php,
+ pages/settings/statistics.php: updated some of the core pages based on new
+ CSS and layouts
+
+ * mod/notifications/start.php: fixed another underline to dash conversion
+ issue
+
+ * engine/lib/upgrades/2010121702.php, languages/en.php, version.php,
+ views/default/annotation/annotatelike.php,
+ views/default/river/annotation/likes/create.php: last of the river updates I
+ hope - fixes the likes river view
+
+ * engine/lib/notification.php, engine/lib/statistics.php,
+ engine/lib/users.php, engine/lib/usersettings.php,
+ mod/notifications/start.php, pages/settings/account.php,
+ pages/settings/index.php, pages/settings/plugins.php,
+ pages/settings/statistics.php, pages/settings/tools.php,
+ pages/settings/user.php, views/default/core/settings/account.php,
+ .../core/settings/account/default_access.php,
+ views/default/core/settings/account/email.php,
+ views/default/core/settings/account/language.php,
+ views/default/core/settings/account/name.php,
+ .../core/settings/account/notifications.php,
+ views/default/core/settings/account/password.php,
+ views/default/core/settings/statistics.php,
+ .../core/settings/statistics/numentities.php,
+ views/default/core/settings/statistics/online.php,
+ views/default/core/settings/tools.php,
+ views/default/core/settings/tools/plugin.php,
+ views/default/forms/account/settings.php,
+ views/default/page/elements/topbar.php,
+ views/default/user/settings/default_access.php,
+ views/default/user/settings/email.php,
+ views/default/user/settings/language.php,
+ views/default/user/settings/name.php,
+ views/default/user/settings/password.php,
+ views/default/usersettings/form.php, views/default/usersettings/main.php,
+ views/default/usersettings/main_opt/plugins.php,
+ views/default/usersettings/main_opt/statistics.php,
+ views/default/usersettings/main_opt/user.php,
+ views/default/usersettings/notifications.php,
+ views/default/usersettings/plugins.php,
+ views/default/usersettings/plugins_opt/plugin.php,
+ views/default/usersettings/statistics.php,
+ .../usersettings/statistics_opt/numentities.php,
+ .../default/usersettings/statistics_opt/online.php,
+ views/default/usersettings/user.php: reorganized the settings views and
+ updated the pages to use new layout
+
+ * .../river/user/default/profileiconupdate.php,
+ .../default/river/user/default/profileupdate.php: removed old river code from
+ the profile plugin - profile updates no longer go to the river
+
+ * engine/lib/upgrades/2010121701.php, mod/groups/languages/en.php,
+ mod/groups/views/default/river/forum/create.php,
+ .../views/default/river/forum/topic/create.php,
+ .../river/object/groupforumtopic/annotate.php,
+ .../river/object/groupforumtopic/create.php,
+ .../river/object/groupforumtopic/update.php,
+ .../default/river/relationship/member/create.php, version.php: updated group
+ member and group forum topics to new river
+
+ * mod/pages/actions/pages/edit.php,
+ .../views/default/river/object/page/update.php,
+ .../views/default/river/object/page_top/update.php: removed pages update
+ river code
+
+ * mod/pages/languages/en.php,
+ .../views/default/river/object/page/create.php,
+ .../views/default/river/object/page_top/create.php,
+ mod/thewire/languages/en.php,
+ .../views/default/river/object/thewire/create.php: added pages and thewire
+ river entries
+
+ * languages/en.php, .../views/default/river/object/blog/create.php,
+ .../default/river/object/bookmarks/create.php, mod/file/languages/en.php,
+ .../views/default/river/object/file/create.php, mod/groups/languages/en.php,
+ mod/groups/views/default/river/group/create.php: supporting putting content
+ in groups in for river views and added file river code
+
+ * .../views/default/river/object/blog/create.php,
+ mod/bookmarks/languages/en.php,
+ .../default/river/object/bookmarks/create.php, views/default/css/screen.php,
+ .../river/annotation/generic_comment/create.php,
+ views/default/river/relationship/friend/create.php: updated river views for
+ content display and added new bookmarks river view code
+
+ * mod/bookmarks/start.php: bookmarks plugin needs to be rewritten - hacked
+ it to get the add functionality working
+
+ * engine/classes/ElggMenuBuilder.php, engine/classes/ElggMenuItem.php,
+ engine/lib/navigation.php, engine/lib/views.php: Refs #2320 added new menu
+ functions and classes
+
+ * mod/riverdashboard/start.php, .../views/default/riverdashboard/js.php,
+ .../views/default/riverdashboard/river/footer.php: fixed remaining javascript
+ for riverdashboard - it's ready to be moved out to plugins
+
+ * .../views/default/riverdashboard/css.php: fixed comment form toggle in
+ riverdashboard plugin
+
+ * mod/riverdashboard/index.php, mod/riverdashboard/start.php,
+ .../views/default/riverdashboard/css.php,
+ .../views/default/riverdashboard/js.php,
+ .../views/default/riverdashboard/river/body.php,
+ .../views/default/riverdashboard/river/footer.php,
+ .../views/default/riverdashboard/rivercomment.php,
+ views/default/forms/likes/display.php: updated riverdashboard plugin to use
+ new river display code - javascript code currently broken for comments and
+ likes
+
+ * .../views/default/river/object/blog/create.php,
+ mod/riverdashboard/endpoint/ping.php, mod/riverdashboard/index.php,
+ mod/riverdashboard/start.php, .../views/default/river/item/list.php: updated
+ riverdashboard to load the river item class
+
+ * actions/comments/add.php, engine/lib/upgrades/2010121602.php,
+ mod/blog/languages/en.php, mod/file/languages/en.php,
+ mod/pages/languages/en.php, .../views/default/river/object/page/annotate.php,
+ .../default/river/object/page_top/annotate.php, version.php,
+ views/default/annotation/annotate.php,
+ .../river/annotation/generic_comment/create.php: updated the river
+ generic_comment view for the new river code
+
+ * _graphics/elgg_sprites.png, engine/lib/upgrades/2010121601.php,
+ languages/en.php, .../default/river/relationship/friend/create.php,
+ version.php, views/default/core/river/controls.php,
+ views/default/css/elements/skin.php, views/default/css/screen.php,
+ views/default/friends/river/create.php, views/default/river/item/list.php,
+ views/default/river/item/wrapper.php,
+ views/default/river/relationship/friend/create.php: updated the river friend
+ view for the new river code
+
+2010-12-16 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/js/upload_js.php: Fixes #2313, #1106 removed the last of the
+ aborted multiple file uploading code
+
+ * engine/lib/elgglib.php, js/lib/languages.js: Fixes #2725 - js page handler
+ now handles javascript views with slashes in their names
+
+ * engine/lib/elgglib.php: fixed a lot of notices being generated by the new
+ plugin hook code
+
+ * pages/members/search.php: replaced deprecated function in members search
+ page
+
+ * views/default/css/elements/skin.php,
+ views/default/layout/shells/one_column.php,
+ views/default/layout/shells/one_sidebar.php,
+ views/default/layout/shells/two_sidebar.php: adjusted page body css to use
+ top level class to determine width and centering
+
+ * pages/members/search.php, views/default/layout/shells/one_sidebar.php:
+ added title parameter to one_sidebar layout
+
+ * pages/members/search.php, views/default/layout/shells/content.php,
+ views/default/layout/shells/one_sidebar.php: layout views should use
+ 'content' to support alternate viewtypes (like rss) - updated the one_sidebar
+ view
+
+ * engine/lib/users.php, languages/en.php, mod/friends/languages/en.php,
+ mod/friends/manifest.xml, mod/friends/start.php,
+ .../views/default/widgets/friends/content.php,
+ mod/friends/views/default/widgets/friends/edit.php,
+ views/default/widgets/friends/content.php,
+ views/default/widgets/friends/edit.php: moved friends widget into core
+
+2010-12-15 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/layout/objects/widget.php,
+ views/default/layout/objects/widget/controls.php,
+ views/default/layout/objects/widget/settings.php,
+ views/default/layout/shells/widgets.php,
+ views/default/layout/shells/widgets/add_button.php,
+ views/default/layout/shells/widgets/add_panel.php,
+ views/default/object/widget.php, views/default/widgets/add_button.php,
+ views/default/widgets/add_panel.php, views/default/widgets/controls.php,
+ views/default/widgets/settings.php, views/default/widgets/wrapper.php: moved
+ widget into layout/objects as one of our core css objects
+
+ * engine/classes/ElggPluginManifestParser17.php: Fixes #2728 creating a name
+ for plugins with 1.7 manifests based on hellekin's patch
+
+ * views/default/admin/plugins/advanced.php: checking if categories are set
+ before looping (hellekin)
+
+ * engine/lib/statistics.php, mod/diagnostics/start.php,
+ mod/groups/start.php: updated to removing more deprecation warnings (from
+ hellekin)
+
+ * mod/blog/start.php, mod/bookmarks/start.php, mod/file/start.php,
+ mod/friends/start.php, mod/groups/start.php, mod/messageboard/start.php,
+ mod/pages/start.php, mod/tagcloud/start.php, mod/thewire/start.php,
+ mod/twitter/start.php: replacing calls to add_widget_type() with
+ elgg_register_widget_type() (from hellekin)
+
+ * install/ElggRewriteTester.php: Ignore SSL certificate errors when testing
+ URL rewriting during installation (from hellekin)
+
+ * engine/lib/access.php, engine/lib/users.php,
+ mod/groups/views/default/forms/groups/invite.php,
+ pages/friends/pickercallback.php, views/default/core/friends/collection.php,
+ views/default/core/friends/collections.php,
+ views/default/core/friends/collectiontabs.php,
+ views/default/core/friends/picker.php,
+ views/default/core/friends/tablelist.php,
+ .../default/core/friends/tablelistcountupdate.php,
+ views/default/forms/friends/edit.php, views/default/friends/collection.php,
+ views/default/friends/collections.php,
+ views/default/friends/collectiontabs.php, views/default/friends/picker.php,
+ views/default/friends/tablelist.php,
+ views/default/friends/tablelistcountupdate.php: moving friends views into
+ core
+
+ * pages/friends/add.php, pages/friends/edit.php,
+ pages/friends/pickercallback.php,
+ views/default/forms/friends/collectionfields.php,
+ views/default/forms/friends/edit.php,
+ views/default/friends/forms/collectionfields.php,
+ views/default/friends/forms/edit.php: moved friend forms into forms directory
+
+
+ * engine/lib/elgglib.php, .../default/river/object/bookmarks/create.php,
+ mod/groups/views/default/river/forum/create.php,
+ .../views/default/river/forum/topic/create.php,
+ mod/groups/views/default/river/group/create.php,
+ .../views/default/river/object/page/create.php,
+ .../views/default/river/item/wrapper.php,
+ .../views/default/river/object/thewire/create.php,
+ views/default/annotation/annotate.php, views/default/core/river/controls.php,
+ views/default/forms/likes/display.php, views/default/forms/likes/edit.php,
+ views/default/forms/likes/link.php, views/default/likes/forms/display.php,
+ views/default/likes/forms/edit.php, views/default/likes/forms/link.php: moved
+ likes forms into forms directory
+
+ * mod/notifications/index.php: added friends picker js to notifications
+ plugin - is there a reason it isn't using the friends picker view?
+
+ * engine/lib/notification.php, mod/notifications/start.php,
+ .../notifications/settings/usersettings.php,
+ views/default/usersettings/notifications.php: moved default notification
+ settings into usersettings
+
+ * views/default/js/initialise_elgg.php,
+ views/default/js/initialize_elgg.php,
+ views/default/page/elements/html_begin.php,
+ views/default/scripts/initialize_elgg.php: last step in conversion to elgg.js
+
+
+ * engine/lib/views.php, mod/embed/start.php, mod/profile/start.php,
+ views/default/js/elgg.php, views/default/js/initialise_elgg.php: 1st step in
+ changing initialise_elgg.js to elgg.js
+
+ * views/default/upload/upload_form_content.php: upload form content view not
+ used anywhere
+
+ * views/default/settings/system.php: site settings were moved to admin views
+
+
+ * pages/account/forgotten_password.php, pages/account/register.php,
+ views/default/account/forms/forgotten_password.php,
+ views/default/account/forms/login.php,
+ views/default/account/forms/register.php,
+ views/default/account/forms/useradd.php, views/default/admin/users/add.php,
+ views/default/core/account/login_box.php,
+ views/default/core/account/login_dropdown.php,
+ views/default/core/account/login_walled_garden.php,
+ views/default/forms/login.php, views/default/forms/register.php,
+ views/default/forms/user/requestnewpassword.php,
+ views/default/forms/useradd.php: moved account forms into forms directory
+
+2010-12-14 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, engine/lib/users.php, index.php,
+ mod/sitepages/start.php, views/default/account/login_box.php,
+ views/default/account/login_dropdown.php,
+ views/default/account/login_walled_garden.php,
+ views/default/core/account/login_box.php,
+ views/default/core/account/login_dropdown.php,
+ views/default/core/account/login_walled_garden.php,
+ views/default/page/elements/header.php: moved account views into core views -
+ account forms are next
+
+ * views/default/css/elements/core.php,
+ views/default/css/elements/layout.php,
+ views/default/css/elements/page_layout.php,
+ views/default/css/elements/skin.php,
+ views/default/css/elements/typography.php, views/default/css/screen.php:
+ moving more css into the skin view - including page layout information
+
+ * upgrade.php, views/default/page/shells/upgrade.php,
+ views/default/settings/upgrading.php: Refs #2733 added explanation on the
+ security of the upgrade script
+
+ * engine/lib/users.php: Fixes #2103 adding a site nav entry for members
+
+ * mod/members/index.php, mod/members/languages/en.php,
+ mod/members/manifest.xml, mod/members/start.php,
+ mod/members/views/default/members/css.php,
+ .../views/default/members/members_navigation.php,
+ mod/members/views/default/members/search.php: Refs #2723 removing old members
+ plugin
+
+ * engine/lib/upgrades/2010121401.php, engine/lib/users.php,
+ languages/en.php, pages/members/index.php, pages/members/search.php,
+ version.php, views/default/core/members/nav.php,
+ views/default/core/members/sidebar.php,
+ views/default/forms/members/name_search.php,
+ views/default/forms/members/tag_search.php: Fixes #2723 members listing pages
+ now in core
+
+2010-12-14 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: sanitise_filepath() removes double /s.
+
+ * engine/classes/ElggPluginPackage.php: Cleaned up constructor logic for
+ ElggPluginPackage. Better detection of invalid paths.
+
+2010-12-13 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * index.php: front page code does not depend on riverdashboard plugin
+ anymore
+
+ * .../views/default/river/object/blog/create.php: Refs #2226 need a catch in
+ river views until riverdashboard plugin is updated
+
+ * mod/blog/languages/en.php, .../views/default/river/object/blog/create.php:
+ Refs #2226 updated blog plugin to use new river view
+
+ * engine/classes/ElggRiverItem.php, engine/lib/annotations.php,
+ engine/lib/river.php, engine/lib/views.php, languages/en.php,
+ mod/riverdashboard/index.php, mod/riverdashboard/start.php,
+ .../views/default/river/item/list.php, pages/river.php,
+ views/default/core/river/body.php, views/default/core/river/controls.php,
+ views/default/core/river/filter.php, views/default/core/river/footer.php,
+ views/default/core/river/image.php, views/default/css/screen.php,
+ views/default/forms/comments/inline.php: Refs #2226 moving riverdashboard
+ into core - need to clean up riverdashboard plugin and move to plugins
+ repository and update plugins with new river views
+
+2010-12-12 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/core/dashboard/blurb.php, views/default/dashboard/blurb.php:
+ adding a place to put views for core pages
+
+ * js/lib/ui.js: added toggler function
+
+ * views/default/page/shells/admin.php,
+ views/default/page/shells/default.php: removed unnecessary title code in page
+ shells
+
+ * pages/dashboard/latest.php: removed unused dashboard directory
+
+ * engine/lib/users.php, pages/dashboard.php, pages/dashboard/index.php:
+ moved dashboard handler into base pages directory
+
+ * views/default/layout/objects/media.php: fixed typo
+
+2010-12-11 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css/elements/page_layout.php,
+ views/default/layout/objects/media.php: added alternate picture block to css
+ media object
+
+ * views/default/layout/shells/content.php,
+ views/default/layout/shells/one_column.php,
+ views/default/layout/shells/one_sidebar.php,
+ views/default/layout/shells/two_sidebar.php: supporting an additional class
+ on primary layouts
+
+ * views/default/layout/objects/list.php: added better list id's based on
+ type
+
+ * views/default/css/elements/page_layout.php,
+ views/default/layout/objects/module.php, views/default/output/tagcloud.php:
+ updated module markup and fixed a bug with its footer code
+
+ * engine/lib/entities.php: fixed spelling error in documentation
+
+ * engine/lib/tags.php: updated tags library to use new sql functions
+
+ * engine/lib/relationships.php: provided more flexibility in creating the
+ relationships join sql
+
+ * views/default/page/elements/topbar.php: fixed copy and paste error in the
+ topbar view
+
+2010-12-10 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/lib/blog.php, views/default/layout/shells/content/filter.php:
+ using all rather than everyone to be more consistent
+
+ * views/default/css/elements/core.php,
+ views/default/css/elements/navigation.php,
+ views/default/css/elements/reset.php, views/default/css/elements/skin.php,
+ views/default/css/screen.php: Refs #2317 starting create a css skin sub view
+
+ * engine/lib/views.php, views/default/css/elements/page_layout.php,
+ views/default/layout/objects/media.php: changed name of icon block to picture
+ block in media object to avoid conflicts with elgg sprites
+
+ * mod/search/views/default/search/css.php,
+ views/default/css/elements/navigation.php,
+ views/default/css/elements/page_layout.php, views/default/css/screen.php,
+ views/default/navigation/site_nav.php: a few more adjustments to the page
+ header
+
+ * views/default/css/elements/navigation.php,
+ views/default/navigation/site_nav.php: finished clean up the header css
+ (except for search box in search plugin
+
+ * _graphics/elgg_toolbar_logo.gif, mod/search/views/default/search/css.php,
+ views/default/css/elements/navigation.php,
+ views/default/css/elements/page_layout.php,
+ views/default/navigation/site_nav.php,
+ views/default/page/elements/header_logo.php: stage 1 of cleaning up page
+ header css
+
+ * views/default/css/elements/page_layout.php, views/default/css/screen.php,
+ views/default/page/elements/topbar.php,
+ views/default/page/elements/topbar_logout.php: completed the topbar
+ modifications
+
+2010-12-09 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/riverdashboard/css.php: Fixes #2724 fixed typo in
+ riverdashboard CSS
+
+ * views/default/input/userpicker.php: Fixes #2726 applied zcho's patch to
+ fix more errors from the "_" to "-" CSS conversion
+
+2010-12-09 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Refs #1411: Can specify custom row callbacks with
+ 'row_callback' options in elgg_get_entities().
+
+2010-12-09 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/start.php, .../views/default/profile/topbar_extend.php: topbar
+ friends should be in core, not profile plugin
+
+ * mod/embed/views/default/embed/js.php,
+ views/default/settings/upgrading.php: Fixes #2717 - fixing more errors
+ introduced by my over aggressive renaming script - thanks to zcho and
+ hellekin
+
+ * engine/classes/ElggSite.php: Fixes #2721 fixed typo - thanks for the
+ report!
+
+2010-12-09 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php: Refs #1411: Documentation fix.
+
+ * engine/lib/annotations.php: Refs #1411. Added ability to specify
+ annotation time_created lower and upper. Deprecated remaining
+ get/list_entities_from/by_annotation*() functions.
+
+2010-12-09 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css/elements/page_layout.php,
+ views/default/page/elements/topbar.php,
+ views/default/page/elements/topbar_logout.php: cleaning up the topbar CSS
+
+2010-12-09 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php, engine/tests/api/entity_getter_functions.php:
+ Refs #1411. Added elgg_get_entities_from_annotation_calculation(). Deprecated
+ get_entities_from_annotations_count() and
+ get_entities_from_annotation_calculate_x().
+ elgg_get_entities_from_annotations() now runs through egef_metadata() for
+ backward compatibility support.
+
+2010-12-09 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/layout/objects/list.php: added ability to include pagination
+ before and after a list
+
+ * engine/lib/views.php, views/default/layout/objects/list.php,
+ views/default/navigation/pagination.php: fixed pagination for annotations due
+ to changes in views
+
+2010-12-09 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: DRY'd up elgg_get_entities() where clause helper
+ functions. Added ability to specify guids in elgg_get_entity*() functions.
+
+2010-12-09 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css/elements/core.php,
+ views/default/css/elements/navigation.php,
+ views/default/css/elements/page_layout.php, views/default/css/screen.php:
+ Refs #2317 pulled more css out into sub views
+
+ * views/default/css/screen.php, views/default/navigation/pagination.php:
+ Updated pagination to use semantic html
+
+2010-12-08 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Added ability to check for empty string in
+ elgg_get_array_value().
+
+ * engine/lib/entities.php: Fixed a bug that wouldn't let you specify
+ multiple selects in get_entities().
+
+ * engine/lib/relationships.php: Refs #1411. Deprecated
+ get_entities_by_relationship_count() and
+ list_entities_by_relationship_count().
+
+ * engine/tests/api/entity_getter_functions.php: Removed the silly things I
+ was doing in the egef_relationship_count() test.
+
+2010-12-08 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/ajax/loader.php, views/default/graphics/ajax_loader.php:
+ moved ajax loader into the graphics view directory
+
+ * views/default/css/components/OOCSS_LICENSE,
+ views/default/css/components/forms.php,
+ views/default/css/components/grid.php,
+ views/default/css/components/heading.php,
+ views/default/css/components/reset.php,
+ views/default/css/components/spacing.php,
+ views/default/css/components/typography.php,
+ views/default/css/elements/OOCSS_LICENSE,
+ views/default/css/elements/forms.php, views/default/css/elements/grid.php,
+ views/default/css/elements/heading.php, views/default/css/elements/reset.php,
+ views/default/css/elements/spacing.php,
+ views/default/css/elements/typography.php, views/default/css/screen.php:
+ changed css/components to css/elements
+
+ * views/default/css/screen.php, views/default/page/elements/footer.php,
+ views/default/page/elements/header.php,
+ views/default/page/elements/topbar.php,
+ views/default/page/shells/default.php: using the generic .elgg-inner class on
+ topbar, header, and footer
+
+2010-12-08 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/tests/api/entity_getter_functions.php: D'oh. Re-enabled the other
+ getter unit tests.
+
+ * engine/lib/relationships.php,
+ engine/tests/api/entity_getter_functions.php: Refs #1411: Added
+ elgg_get_entity_from_relationship_count().
+
+2010-12-08 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/comments/latest.php: comment views have been moved
+
+ * engine/lib/views.php, mod/blog/views/default/blog/sidebar_menu.php,
+ views/default/annotation/generic_comment.php,
+ views/default/annotation/list.php, views/default/comments/list.php,
+ views/default/layout/elements/comments.php,
+ views/default/layout/objects/list.php: Fixes #2189 created the object/list
+ view with semantic markup
+
+ * engine/lib/elgglib.php, engine/lib/views.php, mod/blog/lib/blog.php,
+ mod/bookmarks/bookmarklet.php, mod/bookmarks/start.php,
+ mod/diagnostics/index.php, mod/file/friends.php, mod/file/index.php,
+ mod/file/search.php, mod/file/world.php, mod/groups/all.php,
+ mod/groups/index.php, mod/groups/membership.php, mod/members/index.php,
+ mod/search/index.php, mod/sitepages/sitepages_functions.php,
+ views/default/layout/shells/two_sidebar.php,
+ views/default/page/elements/body.php,
+ views/default/page/elements/content.php,
+ views/default/page/elements/content_header.php,
+ .../page/elements/content_header_member.php,
+ views/default/page/elements/footer.php,
+ views/default/page/elements/header.php,
+ views/default/page/elements/header_logo.php,
+ views/default/page/elements/html_begin.php,
+ views/default/page/elements/html_end.php,
+ views/default/page/elements/messages.php,
+ views/default/page/elements/topbar.php,
+ views/default/page/elements/topbar_logout.php,
+ views/default/page/shells/admin.php, views/default/page/shells/default.php,
+ views/default/page/shells/walled_garden.php,
+ views/default/page_elements/body.php,
+ views/default/page_elements/content.php,
+ views/default/page_elements/content_header.php,
+ .../page_elements/content_header_member.php,
+ views/default/page_elements/footer.php,
+ views/default/page_elements/header.php,
+ views/default/page_elements/header_logo.php,
+ views/default/page_elements/html_begin.php,
+ views/default/page_elements/html_end.php,
+ views/default/page_elements/messages.php,
+ views/default/page_elements/topbar.php,
+ views/default/page_elements/topbar_logout.php,
+ views/default/page_shells/admin.php, views/default/page_shells/default.php,
+ views/default/page_shells/walled_garden.php,
+ views/failsafe/page/shells/default.php,
+ views/failsafe/page_shells/default.php, views/foaf/page/shells/default.php,
+ views/foaf/page_elements/contentwrapper.php,
+ views/foaf/page_shells/default.php, views/ical/page/shells/default.php,
+ views/ical/pageshells/pageshell.php,
+ views/installation/page/shells/default.php,
+ views/installation/page_shells/default.php,
+ views/json/page/shells/default.php,
+ views/json/page_elements/contentwrapper.php,
+ views/json/page_shells/default.php, views/opendd/page/shells/default.php,
+ views/opendd/pageshells/pageshell.php, views/php/page/shells/default.php,
+ views/php/page_shells/default.php, views/rss/page/shells/default.php,
+ views/rss/page_elements/contentwrapper.php,
+ views/rss/page_shells/default.php, views/xml/page/shells/default.php,
+ views/xml/page_shells/default.php: reorganized the page views as discussed
+
+ * views/js/object/default.php, views/js/pageshells/pageshell.php,
+ views/js/user/default.php: removed unused viewtype js
+
+ * views/default/layout/elements/owner_block.php,
+ views/default/layout/elements/sidebar.php,
+ views/default/layout/elements/title.php,
+ views/default/layout/shells/administration.php,
+ .../layout/shells/one_column_with_sidebar.php,
+ views/default/layout/shells/one_sidebar.php,
+ views/default/layout/shells/two_sidebar.php,
+ views/default/page_elements/owner_block.php,
+ views/default/page_elements/sidebar.php,
+ views/default/page_elements/title.php: moved a few elements to layout from
+ page
+
+ * views/default/content/filter.php, views/default/content/footer.php,
+ views/default/content/header.php, views/default/content/sidebar.php,
+ views/default/layout/shells/content.php,
+ views/default/layout/shells/content/filter.php,
+ views/default/layout/shells/content/footer.php,
+ views/default/layout/shells/content/header.php,
+ views/default/layout/shells/content/sidebar.php: moved content views into
+ layout/shells/content
+
+2010-12-07 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/river/item/wrapper.php: Refs #2700 fixed another stray
+ conversion in riverdashboard
+
+ * engine/lib/views.php, mod/blog/start.php,
+ mod/blog/views/default/blog/sidebar_menu.php,
+ mod/blog/views/default/blog/sidebar_revisions.php,
+ views/default/layout/objects/media.php,
+ views/default/layout/objects/module.php,
+ views/default/layout/shells/administration.php,
+ views/default/layout/shells/content.php,
+ views/default/layout/shells/default.php,
+ views/default/layout/shells/one_column.php,
+ .../layout/shells/one_column_with_sidebar.php,
+ views/default/layout/shells/one_sidebar.php,
+ views/default/layout/shells/two_sidebar.php,
+ views/default/layout/shells/widgets.php,
+ views/default/layout_elements/media.php,
+ views/default/layout_elements/module.php,
+ views/default/layouts/administration.php, views/default/layouts/default.php,
+ views/default/layouts/main_content.php, views/default/layouts/one_column.php,
+ views/default/layouts/one_column_with_sidebar.php,
+ views/default/layouts/one_sidebar.php, views/default/layouts/two_sidebar.php,
+ views/default/layouts/widgets.php, views/default/output/tagcloud.php:
+ reorganized the layout views
+
+2010-12-07 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Refs #2220. Check that an autoload class is
+ registered before trying to include it.
+
+ * engine/classes/ElggPluginManifest.php,
+ engine/classes/ElggPluginPackage.php: Removed leading _ in private var names.
+
+
+2010-12-06 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggPluginManifest.php,
+ engine/classes/ElggPluginManifestParser17.php,
+ engine/classes/ElggPluginManifestParser18.php,
+ engine/classes/ElggPluginPackage.php, engine/tests/api/plugins.php,
+ engine/tests/test_files/plugin_18/manifest.xml: Renamed 'elgg' manifest
+ requirment to 'elgg_version' to be more in line with the current options.
+ Removed assignments in if statements. 1.7 manifest files properly show
+ elgg_version as a requirement.
+
+2010-12-06 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, engine/lib/views.php,
+ views/default/messages/list.php, views/default/page_elements/messages.php,
+ views/default/page_shells/admin.php, views/default/page_shells/default.php,
+ views/default/page_shells/walled_garden.php: cleaned up system messages
+ display code
+
+ * views/default/friends/list.php,
+ views/default/messages/exceptions/exception.php: removing unused views
+
+ * views/default/css/screen.php, views/default/layout_elements/media.php,
+ views/default/layout_elements/module.php: added more options to module view
+
+ * engine/lib/views.php, languages/en.php,
+ views/default/annotation/generic_comment.php,
+ views/default/annotation/list.php, views/default/comments/forms/edit.php,
+ views/default/forms/comments/add.php,
+ views/default/layout_elements/media.php: comments use the media view now
+
+ * mod/blog/lib/blog.php, views/default/css/screen.php: Fixed minor display
+ issues with blog breadcrumbs and also the archives page
+
+2010-12-05 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css/screen.php, views/default/navigation/breadcrumbs.php:
+ rewrote breadcrumbs
+
+ * languages/en.php: changed "my friends" to "friends"
+
+ * engine/lib/views.php, mod/blog/languages/en.php, mod/blog/lib/blog.php,
+ mod/blog/views/default/blog/forms/edit.php,
+ mod/blog/views/default/forms/blog/save.php,
+ mod/blog/views/default/js/blog/save_draft.php, views/default/css/screen.php:
+ blog plugin now uses the new elgg_view_form() function
+
+ * engine/lib/views.php: Fixes #2616 Adds Evan's view form convenience
+ function
+
+ * engine/lib/views.php, mod/blog/views/default/object/blog.php,
+ views/default/annotation/generic_comment.php: added a convience function for
+ the media content pattern - is elgg_view_media() a good name?
+
+ * mod/blog/views/default/object/blog.php,
+ views/default/annotation/generic_comment.php, views/default/css/screen.php,
+ views/default/layout_elements/media.php: changed img | body media element to
+ icon | body
+
+ * engine/lib/views.php: moved the view functions around so that they are
+ grouped together by function
+
+ * engine/lib/views.php, languages/en.php, mod/blog/actions/blog/delete.php,
+ mod/blog/actions/blog/save.php, mod/blog/languages/en.php,
+ mod/blog/lib/blog.php, mod/blog/start.php,
+ mod/blog/views/default/blog/css.php,
+ mod/blog/views/default/blog/forms/edit.php,
+ mod/blog/views/default/blog/sidebar_menu.php,
+ mod/blog/views/default/blog/sidebar_revisions.php,
+ mod/blog/views/default/object/blog.php, views/default/content/filter.php,
+ views/default/content/header.php, views/default/css/components/forms.php:
+ Clean-up of the blog plugin - now using urls from 1.7.5
+
+ * mod/uservalidationbyemail/start.php: fixed bug in uservalidationbyemail
+ permissions hook handler - was giving everyone permission to everything
+
+2010-12-04 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, mod/blog/blog_lib.php, mod/blog/lib/blog.php,
+ mod/blog/start.php: Fixes #2519 we can now register and load php libraries -
+ blog plugin is using this
+
+ * engine/lib/views.php, mod/blog/views/default/object/blog.php,
+ views/default/annotation/generic_comment.php,
+ views/default/comments/latest.php, views/default/css/screen.php,
+ views/default/entities/list.php: object/blog view uses new media view - needs
+ some clean up
+
+ * engine/lib/views.php, mod/blog/views/default/blog/sidebar_menu.php,
+ mod/file/friends.php, mod/file/index.php, mod/file/world.php,
+ views/default/annotation/generic_comment.php,
+ views/default/annotation/latest_comments.php,
+ views/default/comments/latest.php, views/default/css/screen.php,
+ views/default/layout_elements/media.php,
+ views/default/layout_elements/module.php: welcome to the new media view - it
+ is being used in the new latest comments module
+
+ * views/default/css/screen.php, views/default/layouts/main_content.php,
+ views/default/layouts/one_sidebar.php, views/default/page_elements/body.php,
+ views/default/page_elements/content.php,
+ views/default/page_elements/footer.php,
+ views/default/page_elements/header.php,
+ views/default/page_elements/topbar.php,
+ views/default/page_shells/default.php: using classes for page level divs
+
+ * mod/blog/views/default/blog/css.php,
+ mod/blog/views/default/object/blog.php, views/default/content/header.php,
+ views/default/css/screen.php: fitting blog object display into new html
+ structure
+
+ * mod/blog/views/default/blog/sidebar_edit.php,
+ mod/blog/views/default/blog/sidebar_menu.php,
+ mod/blog/views/default/blog/sidebar_revisions.php,
+ views/default/annotation/latest_comments.php, views/default/css/screen.php,
+ views/default/layout_elements/module.php, views/default/layouts/module.php,
+ views/default/output/tagcloud.php: blog sidebar html updates finished - uses
+ modules!
+
+ * mod/blog/blog_lib.php, mod/blog/start.php,
+ views/default/content/filter.php, views/default/content/footer.php,
+ views/default/content/header.php, views/default/content/sidebar.php,
+ views/default/css/screen.php, views/default/layouts/main_content.php: a
+ better main content view structure
+
+ * views/default/css/screen.php,
+ views/default/layouts/one_column_with_sidebar.php,
+ views/default/page_elements/content.php,
+ views/default/page_elements/footer.php,
+ views/default/page_elements/header.php,
+ views/default/page_elements/topbar.php,
+ views/default/page_shells/default.php: striking balance between all classes
+ and giving ids on major layout elements for easy css-only theming
+
+ * engine/lib/views.php: check if there are any messages before grabbing them
+ in elgg_view_page()
+
+2010-12-03 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/views.php: Fixes #2706 simplecache url generator was not
+ handling an empty last cache date
+
+ * install/ElggInstaller.php, install/css/install.css,
+ views/installation/install/forms/template.php,
+ views/installation/install/nav.php,
+ views/installation/install/pages/complete.php,
+ views/installation/page_shells/default.php: Refs #2706 updates display of
+ installer due to switch to dashes in CSS elements
+
+2010-12-03 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/handlers/cache_handler.php: Cache handler needs to support _ in
+ views
+
+ * mod/riverdashboard/index.php,
+ .../views/default/riverdashboard/ecml/activity.php: Refs #2700: Removed a few
+ stray hyphens.
+
+ * install/ElggInstaller.php: Refs #2706. Added configuration.php to
+ installation engine bootstrapping. Required because of use of
+ elgg_get_site_url().
+
+2010-12-03 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css/components/grid.php: updated grid css - added sixths
+
+ * engine/lib/views.php, views/default/entities/list.php,
+ views/default/entities/list_item.php: Refs #2189 the beginning of semantic
+ markup for entity lists - needs some reorganization
+
+ * views/default/navigation/tabs.php: removed extra div in navigation/tabs
+
+2010-12-03 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/river/item/wrapper.php: Another stray hyphens
+
+ * .../views/default/river/item/list.php: hyphen snuck in to
+ elgg_view_river_item
+
+2010-12-03 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggPluginManifest.php,
+ engine/classes/ElggPluginManifestParser.php,
+ engine/classes/ElggPluginManifestParser17.php,
+ engine/classes/ElggPluginManifestParser18.php,
+ engine/classes/ElggPluginPackage.php, engine/lib/plugins.php,
+ engine/tests/api/plugins.php, engine/tests/test_files/plugin_17/manifest.xml,
+ engine/tests/test_files/plugin_18/manifest.xml, languages/en.php: Refs #1986
+ #2170 #2225. Added semantic manifest.xml support and unit tests. Also added
+ plugin dependencies system. See
+ engine/tests/test_files/plugin_18/manifest.xml for examples. Not closing
+ tickets pending discussion.
+
+ * mod/oauth_lib/manifest.xml, mod/sitepages/manifest.xml: Removed more
+ incompatible 1.8 attributes in 1.7-style manifests.
+
+ * mod/ecml/manifest.xml: Removing unsupported 1.7-style manifest elements.
+
+2010-12-03 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/blog_lib.php, mod/blog/start.php, views/default/css/screen.php,
+ views/default/layouts/module.php,
+ views/default/page_elements/main_header.php,
+ views/default/page_elements/main_module.php,
+ views/default/page_elements/main_nav.php: preview of what the main content
+ area looks like with a module approach
+
+ * views/default/css/screen.php, views/default/navigation/breadcrumbs.php:
+ updated breadcrumbs with elgg- namespace
+
+ * views/default/css/screen.php, views/default/layouts/one_column.php,
+ views/default/layouts/one_column_with_sidebar.php,
+ views/default/page_elements/footer.php: adjusted the one column and two
+ column layouts
+
+ * mod/blog/views/default/object/blog.php,
+ mod/groups/views/default/forum/topics.php,
+ mod/groups/views/default/groups/groupprofile.php, mod/messages/index.php,
+ mod/messages/sent.php, mod/messages/views/default/messages/messages.php,
+ views/default/annotation/generic_comment.php,
+ views/default/annotation/latest_comments.php, views/default/css/screen.php,
+ views/default/js/initialise_elgg.php, views/default/likes/forms/edit.php,
+ views/default/page_elements/content_header.php,
+ .../page_elements/content_header_member.php: Refs #2700 completed the _ to -
+ conversion for screen.css (leaves admin.css and plugin css)
+
+2010-12-02 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/riverdashboard/start.php: Refs #2700. Fixed a misplaced - in
+ riverdashboard from the css _ to - conversion.
+
+2010-12-02 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/layouts/module.php: adding a generic module layout
+
+ * views/default/css/screen.php, views/default/page_elements/header.php:
+ cleaned up header css for new layout
+
+2010-12-02 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Better code and docs or previous.
+
+ * engine/lib/elgglib.php: Added 'true' as a truthy value for ini_get_bool().
+
+
+2010-12-02 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css/screen.php,
+ views/default/layouts/one_column_with_sidebar.php,
+ views/default/page_elements/footer.php: more cleanup of the basic layout css
+
+ * views/default/css/screen.php, views/default/page_elements/topbar.php:
+ cleaned up the topbar css
+
+ * views/default/widgets/wrapper.php: fixed typo in widget display
+ deprecation
+
+ * views/default/page_elements/footer.php: restored the powered by badge
+ image
+
+ * js/lib/ui.js, views/default/css/components/reset.php,
+ views/default/css/screen.php,
+ views/default/layouts/one_column_with_sidebar.php,
+ views/default/messages/errors/list.php, views/default/messages/list.php,
+ views/default/messages/messages/list.php,
+ views/default/page_elements/content.php,
+ views/default/page_elements/footer.php,
+ views/default/page_elements/header.php,
+ views/default/page_elements/topbar.php,
+ views/default/page_shells/default.php: rough implementation of Evan's page
+ layout
+
+ * engine/lib/sites.php: added a function for getting current site entity
+
+ * js/lib/ui.js, js/lib/ui.widgets.js, views/default/js/initialise_elgg.php,
+ views/default/layouts/widgets.php, views/default/widgets/add_panel.php,
+ views/default/widgets/wrapper.php: Refs #2700 fixed the widget code with the
+ new CSS element names
+
+ * mod/blog/views/default/blog/css.php,
+ mod/blog/views/default/blog/forms/edit.php,
+ mod/blog/views/default/blog/sidebar_revisions.php,
+ mod/blog/views/default/object/blog.php,
+ .../views/default/river/object/blog/create.php,
+ .../views/default/bookmarks/bookmarklet.php,
+ mod/bookmarks/views/default/bookmarks/form.php,
+ .../views/default/bookmarks/group_bookmarks.php,
+ mod/bookmarks/views/default/object/bookmarks.php,
+ .../default/river/object/bookmarks/create.php,
+ .../views/default/widgets/bookmarks/view.php,
+ .../views/default/defaultwidgets/editor.php,
+ .../views/default/embed/web_services/content.php,
+ mod/ecml/views/default/settings/ecml/edit.php,
+ mod/embed/views/default/embed/css.php,
+ mod/embed/views/default/embed/embed.php,
+ mod/embed/views/default/embed/item/list.php,
+ mod/embed/views/default/embed/js.php,
+ mod/embed/views/default/object/file/embedlist.php, mod/file/friends.php,
+ mod/file/index.php, mod/file/views/default/file/css.php,
+ mod/file/views/default/file/groupprofile_files.php,
+ mod/file/views/default/file/upload.php,
+ mod/file/views/default/object/file.php,
+ .../views/default/widgets/filerepo/content.php, mod/groups/groupprofile.php,
+ mod/groups/views/default/forms/forums/addtopic.php,
+ mod/groups/views/default/forms/groups/edit.php,
+ mod/groups/views/default/forms/groups/invite.php,
+ mod/groups/views/default/forum/maintopic.php,
+ mod/groups/views/default/forum/topics.php,
+ .../views/default/groups/closedmembership.php,
+ mod/groups/views/default/groups/css.php,
+ mod/groups/views/default/groups/featured.php,
+ mod/groups/views/default/groups/find.php,
+ mod/groups/views/default/groups/forum_latest.php,
+ .../views/default/groups/group_sort_menu.php,
+ mod/groups/views/default/groups/grouplisting.php,
+ mod/groups/views/default/groups/groupprofile.php,
+ .../views/default/groups/invitationrequests.php,
+ .../views/default/groups/membershiprequests.php,
+ .../views/default/object/groupforumtopic.php,
+ mod/groups/views/default/river/forum/create.php,
+ .../views/default/river/forum/topic/create.php,
+ mod/groups/views/default/river/group/create.php,
+ .../default/river/relationship/member/create.php,
+ .../views/default/invitefriends/formitems.php, mod/members/index.php,
+ mod/members/views/default/members/css.php,
+ .../views/default/members/members_navigation.php,
+ mod/members/views/default/members/search.php,
+ .../views/default/widgets/messageboard/content.php, mod/messages/index.php,
+ mod/messages/sent.php, mod/messages/views/default/messages/css.php,
+ .../views/default/messages/forms/reply.php,
+ mod/messages/views/default/messages/forms/send.php,
+ mod/messages/views/default/messages/messages.php,
+ mod/messages/views/default/messages/view.php, mod/notifications/start.php,
+ .../notifications/subscriptions/collections.php,
+ .../default/notifications/subscriptions/form.php,
+ .../notifications/subscriptions/forminternals.php,
+ .../notifications/subscriptions/groupsform.php,
+ .../views/default/river/object/page/create.php,
+ .../default/profile/commentwall/commentwall.php,
+ .../profile/commentwall/commentwall_content.php,
+ mod/profile/views/default/profile/css.php,
+ mod/profile/views/default/profile/edit.php,
+ .../views/default/profile/editdefaultprofile.php,
+ .../default/profile/editdefaultprofileitems.php,
+ mod/profile/views/default/profile/editicon.php,
+ mod/profile/views/default/profile/listing.php,
+ .../views/default/profile/profile_navigation.php,
+ .../river/user/default/profileiconupdate.php,
+ .../default/river/user/default/profileupdate.php,
+ .../default/admin/overview/reportedcontent.php,
+ .../views/default/reportedcontent/form.php,
+ mod/riverdashboard/endpoint/get_comments.php,
+ mod/riverdashboard/endpoint/ping.php, mod/riverdashboard/index.php,
+ mod/riverdashboard/start.php, .../views/default/river/item/list.php,
+ .../views/default/river/item/wrapper.php,
+ .../views/default/river/item/wrapper_classic.php,
+ .../views/default/riverdashboard/container.php,
+ .../views/default/riverdashboard/css.php,
+ .../views/default/riverdashboard/ecml/activity.php,
+ .../views/default/riverdashboard/js.php,
+ .../views/default/riverdashboard/nav.php,
+ .../views/default/riverdashboard/rivercomment.php,
+ .../views/default/search/comments/entity.php,
+ mod/search/views/default/search/entity.php,
+ mod/search/views/default/search/search_box.php,
+ .../views/default/canvas/layouts/frontpage.php,
+ mod/sitepages/views/default/sitepages/css.php,
+ mod/sitepages/views/default/sitepages/members.php,
+ mod/sitepages/views/default/sitepages/menu.php,
+ mod/thewire/views/default/object/thewire.php,
+ .../views/default/river/object/thewire/create.php,
+ mod/thewire/views/default/thewire/css.php,
+ .../views/default/thewire/profile_status.php,
+ mod/tinymce/views/default/tinymce/css.php,
+ views/default/account/forms/forgotten_password.php,
+ views/default/account/forms/login.php,
+ views/default/account/forms/register.php,
+ views/default/account/forms/useradd.php,
+ views/default/account/login_dropdown.php,
+ views/default/account/login_walled_garden.php,
+ views/default/admin/appearance/menu_items.php,
+ views/default/admin/overview.php, views/default/admin/overview/online.php,
+ views/default/admin/plugins/advanced.php,
+ views/default/admin/plugins/simple.php,
+ views/default/admin/site/advanced.php, views/default/admin/site/basic.php,
+ views/default/admin/users/newest.php, views/default/admin/users/online.php,
+ views/default/ajax/loader.php, views/default/annotation/annotate.php,
+ views/default/annotation/annotatelike.php,
+ views/default/annotation/generic_comment.php,
+ views/default/annotation/latest_comments.php,
+ views/default/annotation/likes.php, views/default/comments/forms/edit.php,
+ views/default/css/admin.php, views/default/css/ie.php,
+ views/default/css/ie6.php, views/default/css/screen.php,
+ views/default/dashboard/blurb.php, views/default/entities/entity_listing.php,
+ views/default/export/entity.php, views/default/export/metadata.php,
+ views/default/export/relationship.php, views/default/friends/collection.php,
+ views/default/friends/collections.php,
+ views/default/friends/collectiontabs.php, views/default/friends/picker.php,
+ views/default/input/userpicker.php, views/default/js/friendsPickerv1.php,
+ views/default/js/initialise_elgg.php,
+ views/default/layouts/administration.php,
+ views/default/layouts/one_column.php,
+ views/default/layouts/one_column_with_sidebar.php,
+ views/default/layouts/widgets.php, views/default/likes/forms/edit.php,
+ views/default/likes/forms/link.php, views/default/messages/errors/list.php,
+ views/default/messages/list.php, views/default/messages/messages/list.php,
+ views/default/navigation/listtype.php,
+ views/default/navigation/pagination.php,
+ views/default/navigation/site_nav.php, views/default/navigation/tabs.php,
+ .../notifications/settings/usersettings.php,
+ views/default/output/rss_view.php,
+ views/default/page_elements/content_header.php,
+ .../page_elements/content_header_member.php,
+ views/default/page_elements/footer.php,
+ views/default/page_elements/header.php,
+ views/default/page_elements/header_logo.php,
+ views/default/page_elements/owner_block.php,
+ views/default/page_elements/topbar.php,
+ views/default/page_elements/topbar_logout.php,
+ views/default/page_shells/walled_garden.php,
+ views/default/river/item/wrapper.php, views/default/settings/system.php,
+ views/default/settings/upgrading.php,
+ views/default/user/settings/default_access.php,
+ views/default/user/settings/email.php,
+ views/default/user/settings/language.php,
+ views/default/user/settings/password.php,
+ views/default/usersettings/plugins.php,
+ views/default/usersettings/plugins_opt/plugin.php,
+ .../usersettings/statistics_opt/numentities.php,
+ .../default/usersettings/statistics_opt/online.php,
+ views/default/widgets/add_button.php, views/default/widgets/add_panel.php,
+ views/default/widgets/controls.php, views/default/widgets/settings.php,
+ views/default/widgets/wrapper.php,
+ views/installation/page_shells/default.php: Refs #2700 replaced most
+ underscores with hyphens - there may be broken display code due to extent of
+ this change
+
+ * mod/blog/views/default/blog/css.php,
+ mod/blog/views/default/blog/forms/edit.php,
+ mod/blog/views/default/object/blog.php,
+ mod/bookmarks/views/default/object/bookmarks.php,
+ .../views/default/defaultwidgets/editor.php,
+ mod/ecml/views/default/ecml/input_ext.php,
+ .../views/default/embed/web_services/content.php,
+ mod/embed/views/default/embed/css.php,
+ mod/embed/views/default/embed/link.php,
+ mod/file/views/default/object/file.php,
+ mod/groups/views/default/forms/forums/addtopic.php,
+ .../views/default/forms/forums/edittopic.php,
+ mod/groups/views/default/forms/groups/edit.php,
+ mod/groups/views/default/forum/maintopic.php,
+ mod/groups/views/default/forum/topics.php,
+ mod/groups/views/default/groups/css.php,
+ mod/groups/views/default/groups/groupprofile.php,
+ .../views/default/groups/invitationrequests.php,
+ .../views/default/groups/membershiprequests.php,
+ .../views/default/object/groupforumtopic.php,
+ .../views/default/invitefriends/formitems.php,
+ .../views/default/messageboard/forms/add.php,
+ .../views/default/widgets/messageboard/content.php, mod/messages/index.php,
+ mod/messages/sent.php, mod/messages/views/default/messages/css.php,
+ .../views/default/messages/forms/reply.php,
+ mod/messages/views/default/messages/forms/send.php,
+ mod/messages/views/default/messages/forms/view.php,
+ mod/messages/views/default/messages/messages.php,
+ mod/messages/views/default/messages/view.php,
+ mod/pages/views/default/forms/pages/edit.php,
+ .../views/default/forms/pages/editwelcome.php,
+ .../default/admin/appearance/defaultprofile.php,
+ .../profile/commentwall/commentwall_content.php,
+ mod/profile/views/default/profile/css.php,
+ mod/profile/views/default/profile/edit.php,
+ .../default/profile/editdefaultprofileitems.php,
+ mod/profile/views/default/profile/editicon.php,
+ .../views/default/profile/profile_ownerblock.php,
+ .../views/default/object/reported_content.php,
+ .../views/default/riverdashboard/css.php,
+ .../default/sitepages/forms/editfrontsimple.php,
+ mod/thewire/views/default/object/thewire.php,
+ mod/thewire/views/default/thewire/css.php,
+ mod/thewire/views/default/thewire/forms/add.php,
+ .../views/default/thewire/profile_status.php,
+ mod/tinymce/views/default/input/longtext.php,
+ mod/twitter/views/default/twitter/css.php,
+ .../uservalidationbyemail/unvalidated_user.php,
+ views/default/account/forms/register.php,
+ views/default/account/login_walled_garden.php,
+ views/default/admin/components/plugin.php,
+ views/default/admin/components/plugin_settings.php,
+ views/default/admin/plugins/advanced.php,
+ views/default/admin/plugins/simple.php,
+ views/default/annotation/generic_comment.php,
+ views/default/annotation/likes.php, views/default/css/admin.php,
+ views/default/css/components/forms.php, views/default/css/ie.php,
+ views/default/css/ie6.php, views/default/css/screen.php,
+ views/default/friends/picker.php, views/default/input/access.php,
+ views/default/input/button.php, views/default/input/checkbox.php,
+ views/default/input/checkboxes.php, views/default/input/email.php,
+ views/default/input/file.php, views/default/input/longtext.php,
+ views/default/input/password.php, views/default/input/plaintext.php,
+ views/default/input/pulldown.php, views/default/input/radio.php,
+ views/default/input/tags.php, views/default/input/text.php,
+ views/default/input/url.php, views/default/input/userpicker.php,
+ views/default/js/upload_js.php, views/default/layouts/widgets.php,
+ views/default/page_elements/content_header.php,
+ views/default/page_shells/walled_garden.php,
+ views/default/usersettings/form.php, views/default/widgets/add_button.php,
+ views/installation/input/access.php, views/installation/input/button.php,
+ views/installation/input/longtext.php, views/installation/input/password.php,
+ views/installation/input/text.php: Refs #2700 changed underscores to hyphens
+ for the forms css elements
+
+ * views/default/css/admin.php, views/default/css/components/OOCSS_LICENSE,
+ views/default/css/components/forms.php,
+ views/default/css/components/grid.php,
+ views/default/css/components/heading.php,
+ views/default/css/components/reset.php,
+ views/default/css/components/spacing.php,
+ views/default/css/components/typography.php, views/default/css/screen.php:
+ Refs #2317 pulled a few sections of CSS out to try out granular CSS
+
+ * views/default/css.php, views/default/css/screen.php: moved the CSS into
+ the new css/screen view and added a check for old themes
+
+2010-12-01 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/views.php, mod/blog/start.php, mod/bookmarks/start.php,
+ mod/captcha/start.php, mod/categories/start.php, mod/ecml/start.php,
+ mod/embed/start.php, mod/file/start.php, mod/groups/start.php,
+ mod/members/start.php, mod/messageboard/start.php, mod/messages/start.php,
+ mod/notifications/start.php, mod/pages/start.php, mod/profile/start.php,
+ mod/reportedcontent/start.php, mod/riverdashboard/start.php,
+ mod/search/start.php, mod/sitepages/start.php, mod/tagcloud/start.php,
+ mod/thewire/start.php, mod/tinymce/start.php, mod/twitter/start.php,
+ mod/zaudio/start.php, views/default/css/elgg.php,
+ views/default/css/screen.php: screen.css is a better name for our main css
+ file
+
+2010-12-01 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/plugins.php: Fixes #1457. Added optional status param for
+ get_installed_plugins()
+
+2010-12-01 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/configuration.php: Fixes #2461 unsetting CONFIG variable in
+ unset_config()
+
+ * engine/lib/access.php: Fixes #2430 adds
+ get_entities_from_access_collection() into trunk
+
+ * .../views/default/widgets/filerepo/content.php,
+ mod/file/views/default/widgets/filerepo/view.php,
+ .../views/default/widgets/friends/content.php,
+ mod/friends/views/default/widgets/friends/view.php,
+ .../default/widgets/a_users_groups/content.php,
+ .../views/default/widgets/a_users_groups/view.php,
+ .../default/widgets/group_entities_widget/edit.php,
+ .../default/widgets/group_entities_widget/view.php,
+ .../default/widgets/group_members_widget/edit.php,
+ .../default/widgets/group_members_widget/view.php,
+ .../views/default/widgets/messageboard/content.php,
+ .../views/default/widgets/messageboard/view.php,
+ mod/pages/views/default/widgets/pages/content.php,
+ mod/pages/views/default/widgets/pages/view.php,
+ .../views/default/widgets/tagcloud/content.php,
+ .../views/default/widgets/tagcloud/view.php,
+ .../views/default/widgets/thewire/content.php,
+ mod/thewire/views/default/widgets/thewire/view.php,
+ .../views/default/widgets/twitter/content.php,
+ mod/twitter/views/default/widgets/twitter/view.php,
+ views/default/widgets/wrapper.php: Fixes #2555 content.php is the new display
+ view for widgets
+
+2010-11-30 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/plugins.php: Fix typo in previous.
+
+ * engine/classes/ElggPlugin.php, engine/classes/ElggPluginManifest.php,
+ engine/classes/ElggPluginManifestParser.php,
+ engine/classes/ElggPluginManifestParser17.php,
+ engine/classes/ElggPluginManifestParser18.php, engine/lib/plugins.php,
+ engine/tests/api/plugins.php: Refs #1986 #2170 #2225 Added
+ ElggPluginManifest, ElggPluginManifestParser, and its parser classes for 1.7
+ and 1.8 style manifests. Changed load_plugin_manifest() to use new parser.
+ Added initial unit tests.
+
+2010-11-30 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/user/passwordreset.php, actions/usersettings/save.php,
+ pages/account/register.php, pages/dashboard/latest.php,
+ pages/friends/pickercallback.php: Refs #2428 removed a few CONFIG uses in
+ core
+
+ * mod/crontrigger/start.php, mod/garbagecollector/start.php,
+ mod/invitefriends/start.php, mod/logbrowser/start.php, mod/members/start.php,
+ mod/messageboard/start.php, mod/reportedcontent/start.php,
+ mod/sitepages/start.php, mod/thewire/start.php,
+ mod/uservalidationbyemail/lib/functions.php,
+ mod/uservalidationbyemail/start.php: Refs #2428 removed some global CONFIG
+ usage in plugins
+
+ * mod/uservalidationbyemail/start.php: fixed typo in uservalidationbyemail
+ plugin
+
+ * mod/messages/start.php, mod/messages/views/default/messages/topbar.php:
+ started cleaning up the messages plugin
+
+ * engine/lib/configuration.php, engine/lib/elgglib.php: Refs #2428 adds
+ elgg_get_plugin_path() and elgg_get_data_path()
+
+ * mod/zaudio/manifest.xml, mod/zaudio/readme.txt, mod/zaudio/start.php,
+ .../default/file/specialcontent/audio/mp3.php,
+ .../default/file/specialcontent/audio/mpeg.php,
+ .../default/file/specialcontent/audio/mpg.php,
+ mod/zaudio/views/default/zaudio/audioplayer.php,
+ mod/zaudio/views/default/zaudio/css.php: Updated the zaudio plugin for 1.8
+
+2010-11-29 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggEntity.php: Refs #2668: Deprecated
+ ElggEntity::setContainer() for setContainerGUID()
+
+2010-11-29 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/group.php: Fixes #2694 fixed typo in join_group()
+
+ * engine/handlers/export_handler.php: fixed typo in the code that I moved
+ from /services/export
+
+ * mod/reportedcontent/actions/archive.php,
+ mod/reportedcontent/actions/delete.php: Fixes #2508 Sending user to referrer
+ in reported content admin actions
+
+ * engine/lib/configuration.php, views/default/page_shells/admin.php,
+ views/default/page_shells/default.php,
+ views/default/page_shells/walled_garden.php: Refs #2428 added
+ elgg_get_config(), elgg_set_config(), and elgg_save_config()
+
+ * views/default/css/admin.php: removed reported content css in admin css
+ view
+
+ * mod/crontrigger/start.php, mod/garbagecollector/languages/en.php,
+ mod/garbagecollector/start.php,
+ .../default/settings/garbagecollector/edit.php,
+ mod/logrotate/languages/en.php, mod/logrotate/start.php,
+ .../views/default/settings/logrotate/edit.php, mod/tinymce/languages/en.php,
+ mod/tinymce/start.php: cleaned up some of the other smaller plugins
+
+ * mod/logbrowser/languages/en.php, mod/logbrowser/start.php,
+ .../views/default/admin/overview/logbrowser.php,
+ .../views/default/logbrowser/adminlinks.php,
+ mod/logbrowser/views/default/logbrowser/css.php,
+ mod/logbrowser/views/default/logbrowser/form.php,
+ mod/logbrowser/views/default/logbrowser/table.php,
+ mod/logbrowser/views/default/object/logwrapper.php: Cleaned up the log
+ browser plugin
+
+ * mod/reportedcontent/actions/add.php,
+ mod/reportedcontent/actions/archive.php,
+ mod/reportedcontent/actions/delete.php, mod/reportedcontent/add.php,
+ mod/reportedcontent/languages/en.php, mod/reportedcontent/start.php,
+ .../default/admin/overview/reportedcontent.php,
+ .../views/default/object/reported_content.php,
+ .../views/default/reportedcontent/admin_css.php,
+ .../views/default/reportedcontent/css.php,
+ .../views/default/reportedcontent/footer_link.php,
+ .../views/default/reportedcontent/listing.php,
+ .../views/default/reportedcontent/user_report.php: cleaned up the reported
+ content plugin
+
+2010-11-28 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/admin.php, engine/lib/elgglib.php, engine/lib/views.php,
+ views/default/friends/picker.php, views/default/page_elements/html_begin.php:
+ Fixes #2173 #2507 integrated the ie and admin stylesheets into the new
+ simplecache code
+
+ * _css/css.php, _css/js.php, engine/handlers/cache_handler.php,
+ engine/lib/views.php, engine/start.php, htaccess_dist, simplecache/view.php,
+ views/default/css/elgg.php, views/default/friends/picker.php: Fixes #2160
+ #2678 introducing a more flexible simplecache handler (this requires an
+ htaccess update)
+
+ * engine/lib/admin.php, engine/lib/elgglib.php, views/default/css/admin.php,
+ views/default/css/ie.php, views/default/css/ie6.php,
+ views/default/css_ie.php, views/default/css_ie6.php,
+ views/default/layouts/administration.php,
+ views/default/page_elements/html_begin.php,
+ views/default/page_elements/html_begin_admin.php,
+ views/default/page_shells/admin.php: Refs #2173 #2160 #2507 added a css page
+ handler to support multiple css files
+
+ * services/export/handler.php: Refs #2681 removes services directory
+
+ * engine/handlers/export_handler.php, htaccess_dist: Fixes #2681 moves
+ export handler into handler directory - current installs need to have
+ .htaccess updated
+
+ * engine/lib/web_services.php, services/api/rest_api.php: moved rest/rpc web
+ services handler into web_services library
+
+ * engine/lib/api.php, engine/lib/web_services.php, engine/start.php,
+ install/ElggInstaller.php: moved api.php to web_services.php as it is more
+ descriptive
+
+2010-11-27 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/ajax/loader.php: Fixes #2280: ajax/loader view starts out
+ with display set to none
+
+2010-11-26 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * CONTRIBUTORS.txt: Updated contrib file.
+
+ * CONTRIBUTORS.txt, README.txt: Cleaned up some typos and formatting issues
+ in README and CONTRIB files.
+
+ * CONTRIBUTORS.txt, COPYRIGHT.txt: Fixed typos and cleaned up copyright and
+ contrib file.
+
+2010-11-24 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/views.php: Fixes #2664: elgg_view_entity subtype defaults to
+ "default" rather than $type
+
+ * engine/handlers/page_handler.php, engine/handlers/pagehandler.php,
+ htaccess_dist: Fixes #2667: pagehandler.php => page_handler.php. You'll need
+ to update .htaccess to keep developing
+
+ * mod/sitepages/start.php: unnecessary declaration of global $CONFIG;
+
+ * mod/blog/blog_lib.php, mod/blog/start.php, mod/sitepages/start.php:
+ Removing superfluous calls to insert site root in urls
+
+ * engine/lib/metadata.php: Deprecated list_entities_from_metadata_multi
+
+ * languages/en.php: Added generic function deprecation translation
+
+ * mod/bookmarks/actions/add.php, mod/bookmarks/actions/edit.php,
+ mod/defaultwidgets/actions/update.php, mod/defaultwidgets/start.php,
+ mod/file/actions/upload.php, mod/groups/actions/addtogroup.php,
+ mod/groups/actions/featured.php, mod/groups/actions/groupskillinvitation.php,
+ mod/groups/actions/groupskillrequest.php, mod/groups/actions/invite.php,
+ mod/groups/actions/join.php, mod/groups/actions/joinrequest.php,
+ mod/groups/actions/leave.php, mod/groups/start.php,
+ mod/messages/actions/delete.php, mod/pages/actions/pages/edit.php,
+ mod/pages/actions/pages/editwelcome.php, mod/profile/actions/cropicon.php,
+ mod/profile/actions/deletedefaultprofileitem.php,
+ mod/profile/actions/edit.php, mod/profile/actions/editdefault.php,
+ mod/profile/actions/editfield.php, mod/profile/actions/iconupload.php,
+ mod/profile/actions/reorder.php, mod/profile/actions/resetdefaultprofile.php,
+ mod/reportedcontent/actions/archive.php,
+ mod/reportedcontent/actions/delete.php, mod/reportedcontent/start.php,
+ mod/riverdashboard/actions/add.php, mod/riverdashboard/actions/delete.php:
+ Refs #2451: Removes (admin_)gatekeeper() calls from core plugin actions
+
+ * actions/admin/plugins/disable.php, actions/admin/plugins/disableall.php,
+ actions/admin/plugins/enable.php, actions/admin/plugins/enableall.php,
+ actions/admin/plugins/reorder.php, actions/admin/site/update_advanced.php,
+ actions/admin/site/update_basic.php, actions/admin/user/ban.php,
+ actions/admin/user/delete.php, actions/admin/user/makeadmin.php,
+ actions/admin/user/removeadmin.php, actions/admin/user/resetpassword.php,
+ actions/admin/user/unban.php, actions/comments/add.php,
+ actions/email/save.php, actions/entities/delete.php, actions/friends/add.php,
+ actions/friends/addcollection.php, actions/friends/deletecollection.php,
+ actions/friends/remove.php, actions/import/opendd.php, actions/likes/add.php,
+ .../notifications/settings/usersettings/save.php,
+ actions/plugins/settings/save.php, actions/plugins/usersettings/save.php,
+ actions/user/default_access.php, actions/user/language.php,
+ actions/user/name.php, actions/user/password.php, actions/user/spotlight.php,
+ actions/useradd.php, actions/usersettings/save.php,
+ engine/lib/notification.php, engine/lib/users.php: Refs #2451: Removed
+ gatekeeper/admin_gatekeeper() calls from core actions
+
+ * engine/lib/actions.php, engine/lib/admin.php, engine/lib/elgglib.php,
+ engine/lib/export.php, engine/lib/plugins.php, engine/lib/sessions.php,
+ engine/lib/users.php, engine/lib/widgets.php, mod/blog/start.php,
+ mod/bookmarks/start.php, mod/categories/start.php,
+ mod/defaultwidgets/start.php, mod/diagnostics/start.php, mod/ecml/start.php,
+ mod/file/start.php, mod/groups/start.php, mod/invitefriends/start.php,
+ mod/messageboard/start.php, mod/messages/start.php,
+ mod/notifications/start.php, mod/pages/start.php, mod/profile/start.php,
+ mod/reportedcontent/start.php, mod/sitepages/start.php,
+ mod/thewire/start.php, mod/uservalidationbyemail/start.php: Fixes #2655:
+ Converted register_action to elgg_register_action throughout core
+
+ * engine/lib/actions.php: Refs #2655: Introducing elgg_register_action() + a
+ few fixes to typos in documentation
+
+2010-11-23 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/handlers/cron_handler.php, engine/lib/cron.php: Fixes #2472 move
+ cron_handler.php logic into cron page handler
+
+ * mod/groups/views/default/groups/groupprofile.php: Fixes #2638 - specifying
+ the full url on the urls so we don't have this problem anymore
+
+ * mod/embed/start.php, mod/pages/start.php, mod/profile/start.php,
+ mod/sitepages/start.php, views/default/page_elements/html_begin.php: Fixes
+ #2270 - deprecates metatags view and replaces with html_head/extend
+
+ * mod/profile/actions/cropicon.php, mod/profile/actions/iconupload.php:
+ Fixes #2418 and merges [7121] into trunk
+
+ * engine/lib/widgets.php: returning an empty array when there are no widgets
+ for a context
+
+ * views/default/css.php: adjusted text color of widget titles
+
+ * views/default/input/checkbox.php, views/default/input/checkboxes.php:
+ Fixes #397 and Refs #2396 Can suppress the default value for both
+ input/checkbox and input/checkboxes
+
+2010-11-22 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggSite.php, engine/lib/sites.php: Fixes #2488 "return"
+ was missing in ElggSite::getObjects() (also updated some documentation)
+
+ * engine/classes/ElggSite.php, engine/lib/sites.php: updated the deprecated
+ list_site_members() to use new ElggSite::listMembers() method and updated
+ ElggSite::getMembers() to accept all the arguments from elgg_get_entities()
+
+ * engine/lib/sites.php: deprecated some sites functions that were never
+ supported or fully implemented
+
+ * engine/lib/database.php, engine/lib/plugins.php: Refs #2673 moved changes
+ into trunk from 1.7 branch
+
+2010-11-22 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/group.php: Refs #2660: Merged r7409's
+ remove_group_tool_option() to trunk.
+
+ * mod/bookmarks/actions/add.php,
+ mod/bookmarks/views/default/object/bookmarks.php: Merged bookmarks XSS fixes
+ in r7406 to trunk.
+
+2010-11-22 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: widgets should not have content outside their
+ container
+
+ * engine/classes/ElggWidget.php, engine/lib/widgets.php: widget column ids
+ must be integers
+
+2010-11-21 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/user/password.php, languages/en.php,
+ views/default/user/settings/password.php: Refs #2669: Merged password change
+ fixes in 7404 to trunk.
+
+ * mod/members/views/default/members/search.php: Refs #2612: Merged r7402 to
+ trunk.
+
+ * mod/profile/views/default/profile/listing.php,
+ .../default/profile/profile_contents/details.php: Refs #2670: Merged XFN
+ fixes from 1.7 to 1.8. Removed unused code in profile_contents/details.php
+
+2010-11-21 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/file/index.php: removed call to deprecated page_owner()
+
+ * engine/lib/tags.php, mod/blog/views/default/blog/sidebar_menu.php,
+ mod/file/start.php, mod/tagcloud/tagcloud.php,
+ .../views/default/widgets/tagcloud/view.php: removed deprecated tag library
+ calls
+
+ * engine/classes/ElggSite.php, engine/lib/sites.php, engine/lib/views.php,
+ mod/thewire/index.php: deprecated two site functions and removed a use of
+ previously deprecated function in the wire plugin
+
+ * engine/lib/widgets.php: fix for previous
+
+ * engine/lib/widgets.php: use more Elgg standrad function names -
+ elgg_register_widget_type()
+
+2010-11-20 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * js/lib/ui.widgets.js: added hack for opera/jquery-ui bug
+
+ * js/lib/ui.widgets.js, languages/en.php, views/default/css.php,
+ views/default/widgets/controls.php, views/default/widgets/wrapper.php: added
+ collapsible state to widgets
+
+ * engine/classes/ElggData.php: Refs #2629 Brett is correct - don't need the
+ call to initializeAttributes() because all the first level subclasses call
+ initializeAttributes()
+
+ * engine/classes/ElggData.php, engine/classes/ElggFile.php,
+ engine/classes/ElggPlugin.php, engine/classes/ElggWidget.php: Refs #2629 This
+ should fix this ticket. Need to remove initialise_attributes from any class
+ updated with new method and add call to initializeAttributes in ElggData for
+ those that are not updated.
+
+ * engine/classes/ElggWidget.php, languages/en.php, views/default/css.php,
+ views/default/dashboard/blurb.php, views/default/widgets/controls.php,
+ views/default/widgets/wrapper.php: added some light styling to the widget
+ control buttons
+
+2010-11-20 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggData.php, engine/classes/ElggEntity.php,
+ engine/classes/ElggGroup.php, engine/classes/ElggObject.php,
+ engine/classes/ElggSite.php, engine/classes/ElggUser.php: Fixes #2629: Pulled
+ old initialise_attributes() into ElggData and added a default param to emit a
+ deprecation notice if called.
+
+2010-11-20 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/widgets/settings.php: Fixes #1342 dashboard widgets do not
+ have access controls
+
+ * js/lib/ui.widgets.js, mod/friends/start.php,
+ views/default/widgets/add_panel.php, views/default/widgets/wrapper.php: Fixes
+ #472 handling interactive adding/deleting of widgets with single/multiple
+ instance constraints
+
+ * js/lib/ui.widgets.js, languages/en.php, mod/friends/start.php,
+ views/default/css.php, views/default/layouts/widgets.php,
+ views/default/widgets/add_panel.php: Refs #472 not allowing widgets to be
+ added if only single instance allowed
+
+ * actions/widgets/add.php, actions/widgets/save.php,
+ engine/classes/ElggWidget.php, engine/lib/widgets.php: moved save widget
+ settings function to ElggWidget
+
+ * engine/lib/widgets.php, views/default/layouts/widgets.php: added a plugin
+ hook for determining who can edit a widget layout
+
+ * actions/widgets/add.php, engine/classes/ElggWidget.php,
+ js/lib/ui.widgets.js: fixed bug where widgets were not saving their new
+ position
+
+ * engine/classes/ElggWidget.php: do not need special canEdit method for
+ ElggWidget
+
+ * engine/classes/ElggEntity.php, engine/tests/objects/objects.php: Refs
+ #2668 adds getContainerGUID()
+
+ * engine/classes/ElggData.php, engine/classes/ElggEntity.php,
+ engine/classes/ElggExtender.php, engine/classes/ElggUser.php,
+ engine/classes/Loggable.php, engine/lib/entities.php,
+ engine/lib/extender.php, engine/tests/objects/entities.php,
+ mod/groups/actions/forums/edittopic.php, mod/groups/actions/leave.php,
+ mod/thewire/actions/delete.php: Fixes #2668 adding getOwnerGUID()
+
+2010-11-20 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/tests/api/helpers.php: Fixed typos in text expectations that were
+ cause elgg_normalize_url unit tests to fial
+
+ * engine/classes/ElggData.php, engine/classes/ElggEntity.php,
+ engine/classes/ElggExtender.php, engine/classes/ElggGroup.php,
+ engine/classes/ElggObject.php, engine/classes/ElggSite.php,
+ engine/classes/ElggUser.php, engine/tests/objects/entities.php,
+ engine/tests/objects/objects.php, engine/tests/objects/sites.php,
+ engine/tests/objects/users.php: Fixes #2490: attributes initialize to NULL
+ instead of empty string or 0. Updated tests to reflect this
+
+ * engine/classes/ElggPlugin.php: Marking initialise_attributes as deprecated
+ in ElggPlugin
+
+ * engine/classes/ElggGroup.php: Marking initialise_attributes as deprecated
+
+ * engine/handlers/pagehandler.php, engine/lib/actions.php,
+ engine/lib/elgglib.php, engine/lib/group.php, engine/lib/sessions.php: Fixes
+ #2237: Added 'reason' parameter to forward() to allow proper headers and more
+ flexible destinations via plugin hooks. Also made use of this in core
+ gatekeeper functions and in pagehandler.php
+
+ * views/default/input/checkbox.php, views/default/input/checkboxes.php:
+ Fixes #2396: Added a new input/checkbox view. input/checkboxes harnesses it
+
+ * engine/lib/views.php: Fixes #2615: Viewtype now included in views plugin
+ hooks
+
+ * mod/htmlawed/start.php: Fixes #2497: htmLawed now uses a plugin hook for
+ allowed_styles and htmlawed_config
+
+ * engine/lib/elgglib.php, engine/lib/users.php: Fixes #2468: Deprecated
+ call_gatekeeper() and callpath_gatekeeper()
+
+ * views/default/output/calendar.php, views/default/output/confirmlink.php,
+ views/default/output/email.php, views/default/output/friendlytime.php,
+ views/default/output/pulldown.php, views/default/output/tagcloud.php,
+ views/default/output/tags.php, views/default/output/text.php,
+ views/default/output/url.php: Fixes #2036: using htmlspecialchars in output
+ views
+
+ * js/lib/security.js: Fixes #2620: Security token refresh action is now
+ security/refreshtoken
+
+ * mod/messageboard/actions/add.php: Fixes #2357: messageboard post action
+ redirects to referrer
+
+ * engine/classes/ElggEntity.php, engine/lib/entities.php,
+ engine/tests/objects/entities.php: Fixes #2473: removes
+ initialise_entity_cache()
+
+ * mod/blog/views/default/blog/forms/edit.php, mod/diagnostics/index.php,
+ .../views/default/embed/web_services/content.php,
+ .../views/default/admin/users/unvalidated.php,
+ views/default/admin/plugins/advanced.php, views/default/input/button.php,
+ views/default/input/reset.php, views/default/input/submit.php,
+ views/installation/input/reset.php, views/installation/input/submit.php: Refs
+ #2143: DRY up button input views (button, reset, submit). Changed core uses
+ of button to reflect the fact that it no longer defaults to submit
+
+ * js/lib/security.js: Utilizing elgg.extend, rather than jQuery.extend
+
+ * js/lib/languages.js: Commented elgg.add_translation Utilizing elgg.extend
+ instead of $.extend
+
+ * js/lib/elgglib.js: Added an elgg.extend method for merging two or more
+ objects
+
+ * views/default/input/submit.php: Refs #2143: Cleaned up input/submit
+
+ * views/default/input/tags.php: Refs #2143: DRY up input/tags
+
+ * views/default/input/email.php: Refs #2143: DRY up input/email
+
+ * views/default/input/text.php: Refs #2143: DRY up input/text
+
+ * views/default/input/form.php: Refs #2143: DRYed up input/form
+
+ * engine/lib/output.php: Doesn't make any sense for elgg_format_attributes
+ to default to an empty array...
+
+ * engine/lib/output.php, views/default/input/url.php,
+ views/default/output/url.php: Refs #2143: Added elgg_format_attributes() for
+ generating an attribute string from an associative array. DRYed up
+ input/output url
+
+2010-11-19 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/widgets/add.php, engine/lib/widgets.php, js/lib/ui.widgets.js,
+ views/default/css.php, views/default/layouts/widgets.php,
+ views/default/widgets/add.php, views/default/widgets/add_panel.php,
+ views/default/widgets/editwrapper.php, views/default/widgets/settings.php,
+ views/default/widgets/wrapper.php: improving interactions of widgets -
+ containment wasn't working due to height issues
+
+ * engine/lib/widgets.php, views/default/widgets/add.php,
+ views/default/widgets/wrapper.php: finished updated the widgets library
+
+ * actions/widgets/save.php, js/lib/ui.widgets.js,
+ views/default/widgets/editwrapper.php, views/default/widgets/wrapper.php:
+ updating widget contents when settings are changed
+
+ * actions/widgets/save.php, engine/lib/widgets.php, js/lib/ui.widgets.js,
+ views/default/css.php, views/default/widgets/controls.php,
+ views/default/widgets/editwrapper.php, views/default/widgets/wrapper.php:
+ saving widget settings
+
+ * actions/widgets/delete.php, engine/classes/ElggWidget.php,
+ engine/lib/widgets.php, js/lib/ui.widgets.js, languages/en.php,
+ views/default/css.php, views/default/widgets/controls.php,
+ views/default/widgets/wrapper.php: users can delete widgets from layout
+
+ * actions/widgets/add.php, actions/widgets/move.php,
+ engine/classes/ElggWidget.php, engine/lib/widgets.php: moved some widget
+ functionality into ElggWidget class
+
+ * mod/file/views/default/widgets/filerepo/edit.php,
+ mod/file/views/default/widgets/filerepo/view.php: updated file widget to use
+ 1.7 elgg_get_entities* APIs
+
+ * .../views/default/widgets/bookmarks/edit.php,
+ .../views/default/widgets/bookmarks/view.php: updated bookmarks widget to use
+ 1.7 APIs
+
+ * actions/register.php: Closes #2653 users are logged in on registration and
+ login exceptions are caught for unvalidated users
+
+ * engine/lib/users.php, mod/uservalidationbyemail/actions/delete.php,
+ .../actions/resend_validation.php,
+ mod/uservalidationbyemail/actions/validate.php,
+ mod/uservalidationbyemail/lib/functions.php,
+ mod/uservalidationbyemail/start.php: Closes #617 core has get and set
+ functions for user validation status
+
+ * actions/widgets/add.php, actions/widgets/move.php, engine/lib/widgets.php,
+ js/lib/ui.widgets.js, languages/en.php, views/default/layouts/widgets.php,
+ views/default/widgets/wrapper.php: saving widget position after moving
+
+ * engine/lib/version.php: $CONFIG->path is not set up early enough for some
+ elgg deprecate notices
+
+ * engine/handlers/action_handler.php, engine/handlers/cron_handler.php,
+ engine/handlers/pagehandler.php, engine/handlers/service_handler.php,
+ engine/handlers/xml-rpc_handler.php: switching to using full paths in
+ handlers
+
+2010-11-18 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/widgets/add.php, engine/lib/widgets.php, js/lib/ui.widgets.js:
+ Added functions to support moving and adding widgets
+
+ * engine/lib/widgets.php, views/default/css.php,
+ views/default/layouts/widgets.php, views/default/widgets/wrapper.php: Refs
+ #1793 getting sorted widgets from elgg_get_widgets()
+
+ * actions/widgets/add.php, engine/lib/widgets.php, js/lib/ui.widgets.js,
+ languages/en.php, views/default/css.php, views/default/layouts/widgets.php,
+ views/default/widgets/add.php, views/default/widgets/add_button.php: Refs
+ #1793 added ability to add widgets to layout through ajax
+
+ * engine/lib/location.php: Refs #1411, #2165 added
+ elgg_list_entities_from_location() and deprecated in_area functions
+
+ * engine/lib/location.php, engine/tests/api/entity_getter_functions.php:
+ Refs #2165 adds elgg_get_entities_from_location()
+
+ * engine/lib/private_settings.php,
+ engine/tests/api/entity_getter_functions.php: Refs #2165 added
+ elgg_get_entities_from_private_settings()
+
+2010-11-17 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/output/url.php: Refs #2143 I need ids for urls for the
+ widget code right now
+
+ * engine/lib/widgets.php, js/lib/ui.widgets.js, languages/en.php,
+ views/default/css.php, views/default/layouts/widgets.php,
+ views/default/widgets/add.php, views/default/widgets/add_button.php: Refs
+ #1793 - added a basic add new widgets view - it is not wired up yet
+
+ * actions/admin/user/ban.php, actions/admin/user/delete.php,
+ actions/admin/user/removeadmin.php, actions/admin/user/resetpassword.php,
+ actions/admin/user/unban.php, languages/en.php: Closes #1422 admin user
+ actions now check for self before banning, deleting, or removing admin
+ privileges
+
+ * pages/friends/index.php, pages/friends/of.php: Refs #1411 using new
+ elgg_list* functions in friends page handlers
+
+ * pages/friends/index.php, pages/friends/of.php: Refs #2662 removed html
+ from friends page handlers
+
+ * js/lib/ui.widgets.js, views/default/css.php,
+ views/default/layouts/widgets.php, views/default/widgets/wrapper.php: Refs
+ #821 #1793 early widget layout - does not include edit settings, delete,
+ collapsing, reloading, or adding widgets
+
+2010-11-16 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/uservalidationbyemail/lib/functions.php,
+ .../views/default/admin/users/unvalidated.php,
+ .../uservalidationbyemail/unvalidated_user.php: Refs #2573 updates the
+ uservalidationbyemail plugin to work with new validation metadata approach
+
+ * engine/lib/upgrades/2010111501.php, version.php: Fixes #2573 upgrade
+ script for new user validation approach
+
+ * engine/lib/admin.php, engine/lib/elgglib.php, engine/lib/views.php,
+ install/ElggInstaller.php: Fixes #2642 changed elgg_view_page() to always
+ pick up page_shell views for the page_shells directory
+
+ * .gitignore, engine/lib/actions.php, engine/settings.example.php,
+ install/ElggInstaller.php: Pulled in hellekin's fixes from
+ https://github.com/Elgg/Elgg/pull/2
+
+ * engine/lib/views.php: made page_draw() backward compatible with 1.7
+
+ * engine/lib/install.php: just in case any plugin called the previous
+ install functions, I put them back as stubs
+
+2010-11-15 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php: Refs #617 put user validation functions back in
+ users lib
+
+ * mod/uservalidationbyemail/lib/functions.php,
+ mod/uservalidationbyemail/start.php: Refs #2573 fixes validation issue for
+ users registered with validation turned off. Still need to write an upgrade
+ script since validation status wasn't set on unvalidated users before this
+
+ * engine/classes/ElggPAM.php, engine/lib/pam.php,
+ mod/uservalidationbyemail/languages/en.php,
+ mod/uservalidationbyemail/start.php: Fixes #1417 Users get notified when
+ their accounts are not validated for any authentication attempt
+
+ * actions/register.php: #Refs 2653 removed login() call since it was
+ conflicting with user validation plugin
+
+2010-11-14 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/login.php, engine/classes/ElggPAM.php,
+ engine/classes/LoginException.php, engine/lib/api.php, engine/lib/pam.php,
+ engine/lib/sessions.php, engine/tests/services/api.php, languages/en.php:
+ Refs #1417 Elgg core now passes back useful messages to user when log in
+ fails - uservalidationbyemail is next
+
+ * index.php: fixed bug where the front page wasn't being populated with the
+ views
+
+ * engine/classes/ElggAccess.php: fixed typo in comment
+
+2010-11-14 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php, views/default/entities/entity_listing.php: Refs
+ #2391: Baby steps toward getting a unified css -- haven't landed on a name
+ yet, but listing/icon/info seems to make the most sense. Do we need to be
+ worried about naming collisions, since those names are so simple?
+
+ * js/classes/ElggPriorityList.js, js/lib/elgglib.js, js/lib/events.js,
+ js/lib/languages.js, js/lib/prototypes.js, js/tests/ElggEventsTest.js,
+ js/tests/ElggLibTest.js, js/tests/jsTestDriver.conf, vendors/sprintf.js,
+ views/default/js/initialise_elgg.php: Refs #2538: Added vsprintf support to
+ elgg.echo. Added unit tests for normalize_url, added prototype definitions
+ for Array#forEach for compatibility with IE.
+
+ * js/classes/ElggPriorityList.js, js/lib/events.js: Refs #2538: Refactored
+ and cleaned up ElggPriorityList and events
+
+ * engine/lib/access.php, engine/lib/annotations.php,
+ engine/lib/calendar.php, engine/lib/entities.php, engine/lib/group.php,
+ engine/lib/location.php, engine/lib/metadata.php,
+ engine/lib/relationships.php, engine/lib/users.php, engine/lib/views.php,
+ mod/ecml/ecml_functions.php, mod/file/search.php,
+ mod/file/views/default/file/typecloud.php,
+ mod/file/views/default/object/file.php,
+ mod/pages/views/default/object/page.php,
+ mod/pages/views/default/object/page_top.php,
+ mod/search/views/default/search/entity_list.php,
+ views/default/entities/entity_list.php,
+ views/default/navigation/listtype.php, views/default/navigation/viewtype.php,
+ views/default/object/default.php, views/default/user/default.php: Fixes
+ #2334: Converted viewtype => listtype and viewtypetoggle => listtypetoggle.
+ Did my best to maintain backwards compatibility but might have missed
+ something...
+
+ * engine/tests/api/helpers.php: Added some more unit tests for
+ elgg_normalize_url
+
+ * engine/classes/ElggEntity.php: No comment...
+
+ * engine/classes/ElggEntity.php: Wow, what a blunder -- what to go deleting
+ random methods, Winslow
+
+ * views/default/input/button.php: Refs #1208: Default input/button to
+ 'button' type (rather than 'submit' type).
+
+ * engine/classes/ElggEntity.php: Refs #2486: Added support for the
+ 'recursive' parameter to ElggEntity::delete()
+
+ * engine/classes/ElggAnnotation.php, engine/classes/ElggData.php,
+ engine/classes/ElggEntity.php: Added comments to several undocumented methods
+
+ * mod/pages/actions/pages/editwelcome.php: Fixes #2572: Removed last
+ @license tag from pages plugin
+
+2010-11-13 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/access.php: Fixes #2561 fixed typo - thanks for the report
+
+2010-11-13 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/tests/objects/entities.php: Cleaning up database after new
+ ElggEntity unit test.
+
+2010-11-12 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/metadata.php, engine/tests/objects/entities.php: Updating
+ ElggEntity::clearMetaData() to fail when passed a non-existent metadata name.
+ Fixes #2273
+
+2010-11-11 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Obliterated C&P in elgg_trigger_plugin_hook
+
+ * engine/lib/elgglib.php: Making CodeSniffer happy + reduced C&P in
+ elgg_trigger_event
+
+2010-11-11 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Refs #2641 merged [7295] into trunk
+
+ * mod/groups/views/default/groups/groupprofile.php: Fixes #2638 fixes group
+ action url problem
+
+ * mod/groups/all.php: Refs #2640 fixes a layout issue due to change in
+ elgg_view_layout()
+
+ * views/default/canvas/default.php,
+ views/default/canvas/layouts/administration.php,
+ views/default/canvas/layouts/one_column.php,
+ .../canvas/layouts/one_column_with_sidebar.php,
+ views/default/canvas/layouts/widgets.php: Closes #2637 good-bye canvas
+
+ * engine/lib/views.php, views/default/layouts/administration.php,
+ views/default/layouts/default.php, views/default/layouts/one_column.php,
+ views/default/layouts/one_column_with_sidebar.php,
+ views/default/layouts/widgets.php: Refs #2637 moved canvas/layouts to layouts
+
+
+ * engine/lib/admin.php, engine/lib/tags.php, engine/lib/users.php,
+ engine/lib/views.php, engine/tests/ui/submenu.php, index.php,
+ mod/blog/start.php, mod/bookmarks/bookmarklet.php, mod/bookmarks/start.php,
+ mod/diagnostics/index.php, mod/ecml/start.php, mod/file/edit.php,
+ mod/file/friends.php, mod/file/index.php, mod/file/search.php,
+ mod/file/upload.php, mod/file/world.php, mod/groups/activity.php,
+ mod/groups/addtopic.php, mod/groups/all.php, mod/groups/edit.php,
+ mod/groups/edittopic.php, mod/groups/forum.php, mod/groups/groupprofile.php,
+ mod/groups/index.php, mod/groups/invitations.php, mod/groups/invite.php,
+ mod/groups/membership.php, mod/groups/membershipreq.php, mod/groups/new.php,
+ mod/groups/topicposts.php, mod/invitefriends/index.php,
+ mod/members/index.php, mod/messages/index.php, mod/messages/read.php,
+ mod/messages/send.php, mod/messages/sent.php, mod/notifications/groups.php,
+ mod/notifications/index.php, mod/pages/edit.php, mod/pages/history.php,
+ mod/pages/index.php, mod/pages/new.php, mod/pages/view.php,
+ mod/pages/welcome.php, mod/pages/world.php, mod/profile/edit.php,
+ mod/profile/editicon.php, mod/profile/index.php, mod/profile/start.php,
+ mod/reportedcontent/add.php, mod/riverdashboard/index.php,
+ mod/search/index.php, mod/search/views/default/search/layout.php,
+ mod/sitepages/index.php, mod/sitepages/sitepages_functions.php,
+ mod/tagcloud/tagcloud.php, mod/thewire/add.php, mod/thewire/everyone.php,
+ mod/thewire/index.php, pages/account/forgotten_password.php,
+ pages/account/register.php, pages/dashboard/index.php,
+ pages/dashboard/latest.php, pages/entities/index.php, pages/friends/add.php,
+ pages/friends/collections.php, pages/friends/edit.php,
+ pages/friends/index.php, pages/friends/of.php, pages/settings/plugins.php,
+ pages/settings/statistics.php, pages/settings/user.php,
+ services/export/handler.php, views/default/canvas/default.php,
+ views/default/canvas/layouts/administration.php,
+ views/default/canvas/layouts/one_column.php,
+ .../canvas/layouts/one_column_with_sidebar.php,
+ views/default/js/initialise_elgg.php,
+ views/default/messages/exceptions/exception.php,
+ views/default/page_elements/sidebar.php: Fixes #2640 - elgg_view_layout now
+ uses a parameter array like all the other elgg_view* functions
+
+2010-11-11 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Fixes #2367: Corrected plugin hook documentation
+ to maintain that the default priority is 500
+
+2010-11-10 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php: Fixes #2306: deprecated get/count/list_user_objects
+ as well as get_user_objects_by_metadata
+
+ * engine/lib/elgglib.php: Using max() to give priority a minimum value of 0
+ for plugin hooks
+
+ * actions/login.php, actions/plugins/settings/save.php,
+ actions/register.php, actions/usersettings/save.php,
+ documentation/examples/events/advanced.php,
+ documentation/examples/events/all.php,
+ documentation/examples/events/basic.php,
+ documentation/examples/events/emit.php,
+ documentation/examples/hooks/basic.php,
+ documentation/examples/hooks/register/advanced.php,
+ documentation/examples/hooks/register/all.php,
+ documentation/examples/hooks/register/basic.php,
+ documentation/examples/hooks/register/emit.php,
+ documentation/examples/hooks/trigger/advanced.php,
+ documentation/examples/hooks/trigger/basic.php,
+ documentation/stubs/config.php, engine/classes/ElggSession.php,
+ engine/classes/ElggSite.php, engine/handlers/cron_handler.php,
+ engine/lib/access.php, engine/lib/actions.php, engine/lib/admin.php,
+ engine/lib/annotations.php, engine/lib/api.php, engine/lib/configuration.php,
+ engine/lib/cron.php, engine/lib/database.php, engine/lib/elgglib.php,
+ engine/lib/entities.php, engine/lib/export.php, engine/lib/extender.php,
+ engine/lib/filestore.php, engine/lib/group.php, engine/lib/input.php,
+ engine/lib/location.php, engine/lib/metadata.php,
+ engine/lib/notification.php, engine/lib/objects.php, engine/lib/output.php,
+ engine/lib/pageowner.php, engine/lib/plugins.php,
+ engine/lib/relationships.php, engine/lib/sessions.php, engine/lib/sites.php,
+ engine/lib/statistics.php, engine/lib/system_log.php, engine/lib/users.php,
+ engine/lib/usersettings.php, engine/lib/version.php, engine/lib/views.php,
+ engine/lib/widgets.php, engine/start.php, engine/tests/suite.php,
+ engine/tests/test_skeleton.php, index.php, install/ElggInstaller.php,
+ mod/blog/start.php, mod/bookmarks/start.php, mod/captcha/start.php,
+ mod/categories/start.php, mod/crontrigger/start.php,
+ mod/defaultwidgets/start.php, mod/diagnostics/actions/download.php,
+ mod/diagnostics/start.php, mod/ecml/ecml_functions.php, mod/ecml/start.php,
+ mod/embed/start.php, mod/embed/views/default/embed/embed.php,
+ mod/file/start.php, mod/friends/start.php, mod/garbagecollector/start.php,
+ mod/groups/start.php, mod/htmlawed/start.php, mod/invitefriends/start.php,
+ mod/logbrowser/start.php, mod/logrotate/start.php, mod/members/index.php,
+ mod/members/start.php, mod/messageboard/start.php, mod/messages/start.php,
+ mod/notifications/start.php, mod/pages/start.php,
+ mod/profile/actions/edit.php, mod/profile/actions/iconupload.php,
+ mod/profile/start.php, mod/reportedcontent/actions/add.php,
+ mod/reportedcontent/actions/archive.php,
+ mod/reportedcontent/actions/delete.php, mod/reportedcontent/start.php,
+ mod/riverdashboard/start.php, mod/search/index.php, mod/search/start.php,
+ mod/sitepages/start.php, mod/tagcloud/start.php, mod/thewire/start.php,
+ mod/tinymce/start.php, mod/twitter/start.php,
+ mod/uservalidationbyemail/start.php, mod/zaudio/start.php,
+ services/api/rest_api.php, services/export/handler.php,
+ views/default/page_elements/owner_block.php: Fixes #2367: With fear and
+ trepidation, converting events/plugin hooks to use elgg_ prefixed versions
+
+ * engine/lib/views.php: Refs #2124: Removed js, page_owner, and
+ page_owner_user variables from $vars
+
+ * engine/lib/views.php: Refs #2124: Removed session variables from $vars
+
+2010-11-10 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/account/forms/register.php: Refs #866 - registration uses
+ https if configured for login
+
+2010-11-10 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/account/login_box.php: No sense in calling
+ elgg_get_site_url() twice here...
+
+ * views/default/account/login_box.php: Prevent "https login" from breaking
+ login on sites that are https by default
+
+2010-11-09 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/actions/edit.php: Refs #2609 - added fix to trunk
+
+ * views/default/annotation/default.php: Refs #2626 - adds default annotation
+ view to trunk
+
+ * engine/lib/metadata.php: Refs #2632 - cleaned up documentation on metadata
+
+
+ * engine/lib/elgglib.php, engine/lib/users.php, index.php,
+ mod/sitepages/start.php, views/default/account/forms/login.php,
+ views/default/account/forms/login_dropdown.php,
+ .../default/account/forms/login_walled_garden.php,
+ views/default/account/login_box.php,
+ views/default/account/login_dropdown.php,
+ views/default/account/login_walled_garden.php, views/default/css.php,
+ views/default/css_ie.php, views/default/page_elements/header.php: Refs #2506
+ reorged the login box views - css still needs to be cleaned up
+
+ * mod/diagnostics/index.php, mod/members/index.php, mod/search/index.php,
+ mod/sitepages/sitepages_functions.php,
+ views/default/canvas/layouts/administration.php,
+ .../canvas/layouts/one_column_with_sidebar.php,
+ views/default/page_elements/content.php,
+ views/default/page_elements/elgg_content.php,
+ views/default/page_elements/elgg_footer.php,
+ views/default/page_elements/elgg_header.php,
+ views/default/page_elements/elgg_header_logo.php,
+ views/default/page_elements/elgg_sidebar.php,
+ views/default/page_elements/elgg_topbar.php,
+ views/default/page_elements/elgg_topbar_logout.php,
+ views/default/page_elements/footer.php,
+ views/default/page_elements/header.php,
+ views/default/page_elements/header_logo.php,
+ views/default/page_elements/sidebar.php,
+ views/default/page_elements/topbar.php,
+ views/default/page_elements/topbar_logout.php,
+ views/default/page_shells/admin.php, views/default/page_shells/default.php:
+ Fixes #2631 removes 'elgg_' namespace from the page element views - anyone
+ working with the trunk will need to update their theme and/or flush their
+ cache
+
+2010-11-09 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * js/tests/ElggLibTest.js: Renamed test method appropriately. jslinted
+ ElggLibTest.
+
+ * js/tests/ElggEventsTest.js: Using nullFunction + abstractMethod reference
+ instead of new closures in EventsTest
+
+ * js/tests/ElggAjaxOptionsTest.js: Using nullFunction reference instead of
+ new closure in ajaxOptionsTest
+
+ * js/lib/ui.widgets.js: jslinted ui.widgets.js
+
+ * js/lib/ui.js: jslinted ui.js
+
+ * js/lib/session.js: jsLinted session.js, employed elgg type-checker
+ functions, and did some more miscellaneous cleanup
+
+ * js/lib/elgglib.js: Added elgg.isNumber type-checking function
+
+ * js/lib/security.js: jsLinted security.js + using elgg typecheckers rather
+ than ===
+
+ * js/lib/languages.js: jslinted languages.js
+
+ * js/lib/elgglib.js: Abstract methods are no longer nameable
+
+2010-11-07 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * js/lib/ajax.js: Various tweaks to coding style + comments (apologies for
+ my schizo here... trying to experiment to see what works). Using
+ type-checking helpers rather than raw typeof and === checks
+
+ * js/lib/elgglib.js: Addition of type-checking helper functions, various
+ tweaks to comments, code style, etc.
+
+2010-11-06 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggDiskFilestore.php: replaced usages of
+ make_file_matrix() with new method makeFileMatrix()
+
+ * views/default/css.php: added text color for warnings otherwise warnings
+ that occur in topbar end up blank
+
+ * engine/lib/entities.php, engine/lib/private_settings.php,
+ engine/start.php, install/ElggInstaller.php: pulled private settings out into
+ a separate lib
+
+ * engine/lib/relationships.php: Refs #1411 fixes bug introduced in [7213]
+ that broke listing relationships
+
+2010-11-06 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * js/lib/ajax.js: jsLinted ajax.js, removed experimental functions
+
+2010-11-05 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/riverdashboard/index.php: removed hacked in link to conversations
+ plugin in riverdashboard
+
+2010-11-05 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * COPYRIGHT.txt, README.txt: small tweaks to the readme and copyright pages
+
+2010-11-04 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/output.php, engine/tests/api/helpers.php: Fixes #2463: Added
+ support for forwarding to root-level files, e.g. forward('install.php')
+
+2010-11-04 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/output.php: Refs #2463 Added trim for leading /s to avoid //s
+ when passing elgg_normalize_url('/mod/some/file.php').
+
+2010-11-04 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/output.php, engine/tests/api/helpers.php: Fixes #2463: Added ^
+ to beginning of normalize_url regex to prevent matching on urls like
+ mod/plugin/page.php. Added unit tests to verify functionality.
+
+ * engine/lib/elgglib.php: Added @deprecated docblock tag to events()
+
+ * engine/tests/objects/objects.php: Removed requirement that object
+ container be a group
+
+2010-11-04 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, engine/lib/views.php,
+ views/default/friends/picker.php, views/default/page_elements/html_begin.php:
+ Fixes #2210 - using new functions for registering the core js and css files
+
+2010-11-03 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, engine/lib/group.php: Moved list_entities_groups
+ to groups.php and deprecated in favor of elgg_list_entities
+
+2010-11-03 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/friends/river/create.php: Fixed missing ).
+
+ * COPYRIGHT.txt: Added myself to the copyright.
+
+ * mod/blog/start.php, mod/blog/views/default/blog/sidebar_menu.php,
+ mod/blog/views/default/object/blog.php,
+ .../views/default/river/object/blog/create.php, mod/bookmarks/start.php,
+ .../views/default/bookmarks/bookmarklet.php,
+ .../default/river/object/bookmarks/create.php, mod/categories/listing.php,
+ mod/categories/start.php, mod/diagnostics/actions/download.php,
+ mod/diagnostics/start.php, mod/file/friends.php, mod/file/index.php,
+ mod/file/search.php, mod/file/start.php,
+ mod/file/views/default/object/file.php,
+ .../views/default/river/object/file/create.php,
+ mod/garbagecollector/start.php, mod/groups/actions/addtogroup.php,
+ mod/groups/actions/invite.php, mod/groups/actions/joinrequest.php,
+ mod/groups/activity.php, mod/groups/all.php,
+ .../views/default/object/groupforumtopic.php,
+ mod/groups/views/default/river/forum/create.php,
+ .../views/default/river/forum/topic/create.php,
+ mod/groups/views/default/river/group/create.php,
+ .../river/object/groupforumtopic/annotate.php,
+ .../river/object/groupforumtopic/create.php,
+ .../river/object/groupforumtopic/update.php,
+ .../default/river/relationship/member/create.php,
+ mod/invitefriends/actions/invite.php,
+ .../views/default/invitefriends/formitems.php, mod/members/index.php,
+ mod/messageboard/index.php, mod/messageboard/start.php,
+ .../default/river/object/messageboard/create.php, mod/messages/index.php,
+ mod/messages/read.php, mod/messages/send.php, mod/messages/sent.php,
+ mod/messages/start.php, mod/pages/history.php, mod/pages/index.php,
+ mod/pages/new.php, mod/pages/start.php, mod/pages/view.php,
+ mod/pages/views/default/annotation/page.php,
+ mod/pages/views/default/pages/pagelisting.php,
+ mod/pages/views/default/pages/pageprofile.php,
+ mod/pages/views/default/pages/welcome.php,
+ .../views/default/river/object/page/annotate.php,
+ .../views/default/river/object/page/create.php,
+ .../views/default/river/object/page/update.php,
+ .../default/river/object/page_top/annotate.php,
+ .../views/default/river/object/page_top/create.php,
+ .../views/default/river/object/page_top/update.php, mod/pages/welcome.php,
+ mod/pages/world.php, mod/profile/actions/addcomment.php,
+ mod/profile/actions/edit.php,
+ .../views/default/profile/profile_navigation.php,
+ .../views/default/profile/profile_ownerblock.php,
+ .../river/user/default/profileiconupdate.php,
+ .../default/river/user/default/profileupdate.php,
+ .../views/default/river/item/wrapper.php,
+ .../views/default/riverdashboard/welcome.php, mod/search/index.php,
+ .../views/default/search/comments/entity.php,
+ mod/search/views/default/search/listing.php,
+ mod/search/views/default/search/startblurb.php,
+ mod/search/views/rss/search/comments/entity.php, mod/tagcloud/tagcloud.php,
+ mod/thewire/index.php, mod/thewire/views/default/object/thewire.php,
+ mod/thewire/views/rss/object/thewire.php,
+ .../views/rss/search/object/thewire/entity.php,
+ mod/uservalidationbyemail/lib/functions.php,
+ .../uservalidationbyemail/unvalidated_user.php: Fixes #1320: Bundled mods use
+ elgg_echo()'s internal string substitution.
+
+2010-11-03 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/group.php: Refs #2351: deprecated get_objects_in_group() in
+ favor of elgg_get_entities(). There's nothing the former can do that the
+ latter can't, so it's not worth maintaining.
+
+2010-11-03 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/plugins/disable.php, actions/admin/plugins/disableall.php,
+ actions/admin/plugins/enable.php, actions/admin/plugins/enableall.php,
+ actions/admin/plugins/reorder.php, actions/admin/user/delete.php,
+ actions/admin/user/resetpassword.php, actions/comments/add.php,
+ actions/entities/delete.php, actions/friends/add.php,
+ actions/friends/remove.php, actions/likes/add.php,
+ actions/plugins/settings/save.php, actions/plugins/usersettings/save.php,
+ actions/register.php, actions/user/requestnewpassword.php,
+ actions/useradd.php, engine/classes/ElggAnnotation.php,
+ engine/classes/ElggDiskFilestore.php, engine/classes/ElggExtender.php,
+ engine/classes/ElggFile.php, engine/classes/ElggFileCache.php,
+ engine/classes/ElggGroup.php, engine/classes/ElggMemcache.php,
+ engine/classes/ElggMetadata.php, engine/classes/ElggObject.php,
+ engine/classes/ElggRelationship.php, engine/classes/ElggSite.php,
+ engine/classes/ElggUser.php, engine/handlers/cron_handler.php,
+ engine/lib/actions.php, engine/lib/api.php, engine/lib/cron.php,
+ engine/lib/database.php, engine/lib/entities.php, engine/lib/export.php,
+ engine/lib/extender.php, engine/lib/group.php, engine/lib/notification.php,
+ engine/lib/objects.php, engine/lib/output.php, engine/lib/plugins.php,
+ engine/lib/relationships.php, engine/lib/sites.php, engine/lib/users.php,
+ engine/lib/xml-rpc.php, index.php, install/ElggInstaller.php,
+ install/ElggRewriteTester.php, languages/en.php, pages/friends/index.php,
+ pages/friends/of.php, services/export/handler.php,
+ views/default/admin/plugins/simple.php,
+ views/default/annotation/annotate.php,
+ views/default/friends/river/create.php,
+ views/default/group/search/startblurb.php, views/default/object/default.php,
+ views/default/user/search/startblurb.php: Refs #1320. Updated core to use
+ elgg_echo()'s native string replacement.
+
+ * engine/lib/languages.php: Refs #1320: elgg_echo() has built-in sprintf
+ support.
+
+ * mod/groups/views/default/groups/find.php: Refs #2582. Merged [7224] to
+ trunk.
+
+2010-11-03 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php, mod/blog/views/default/object/blog.php,
+ .../views/default/bookmarks/group_bookmarks.php,
+ .../views/default/embed/web_services/content.php,
+ mod/embed/views/default/object/file/embedlist.php,
+ mod/file/views/default/file/groupprofile_files.php,
+ mod/file/views/default/widgets/filerepo/view.php,
+ mod/groups/views/default/forum/maintopic.php,
+ mod/groups/views/default/forum/topics.php,
+ mod/groups/views/default/groups/featured.php,
+ mod/groups/views/default/groups/forum_latest.php,
+ mod/groups/views/default/groups/groupprofile.php,
+ .../views/default/groups/invitationrequests.php,
+ mod/groups/views/default/groups/members.php,
+ .../views/default/groups/membershiprequests.php,
+ mod/groups/views/default/groups/profileitems.php,
+ .../views/default/widgets/a_users_groups/view.php,
+ .../views/default/admin/overview/logbrowser.php,
+ mod/messages/views/default/messages/forms/send.php,
+ mod/messages/views/default/messages/messages.php,
+ mod/messages/views/default/messages/view.php,
+ mod/profile/views/default/profile/admin_menu.php,
+ .../profile/commentwall/commentwall_content.php,
+ .../views/default/profile/profile_ownerblock.php,
+ .../views/default/reportedcontent/listing.php,
+ mod/riverdashboard/endpoint/get_comments.php,
+ .../views/default/river/item/list.php,
+ .../views/default/river/item/wrapper.php,
+ .../views/default/river/item/wrapper_classic.php,
+ .../views/default/riverdashboard/nav.php,
+ .../views/default/search/comments/entity.php,
+ mod/search/views/default/search/entity.php,
+ .../views/default/canvas/layouts/frontpage.php,
+ mod/sitepages/views/default/sitepages/members.php,
+ mod/sitepages/views/default/sitepages/sidebar.php,
+ mod/sitepages/views/default/sitepages/welcome.php,
+ mod/thewire/views/default/object/thewire.php,
+ mod/thewire/views/default/thewire/forms/add.php,
+ .../views/default/thewire/profile_status.php,
+ .../default/account/forms/login_walled_garden.php,
+ views/default/admin/plugins/advanced.php,
+ views/default/admin/plugins/simple.php,
+ views/default/annotation/generic_comment.php,
+ views/default/annotation/latest_comments.php,
+ views/default/annotation/likes.php,
+ views/default/canvas/layouts/administration.php,
+ views/default/canvas/layouts/one_column.php,
+ .../canvas/layouts/one_column_with_sidebar.php, views/default/css.php,
+ views/default/css_ie.php, views/default/entities/entity_listing.php,
+ views/default/entities/gallery_listing.php, views/default/friends/picker.php,
+ views/default/likes/forms/edit.php, views/default/navigation/pagination.php,
+ views/default/navigation/site_nav.php, views/default/output/rss_view.php,
+ views/default/page_elements/content_header.php,
+ .../page_elements/content_header_member.php,
+ views/default/page_elements/elgg_footer.php,
+ views/default/page_elements/elgg_topbar.php,
+ views/default/page_elements/owner_block.php,
+ views/default/page_shells/walled_garden.php: Fixes #2440: Converted
+ clearfloat to clearfix, brought back orig clearfloat
+
+ * engine/lib/entities.php: Refs #2050: Added missing docblock parameters
+
+ * engine/classes/ElggEntity.php, engine/lib/entities.php: Fixes #2050: Added
+ subtype parameter to can_write_to_container functions and hooks
+
+ * engine/lib/entities.php: Set return type of get_entity to ElggEntity
+
+ * engine/classes/ElggEntity.php, engine/classes/ElggObject.php: Fixes #2134:
+ Moved getContainerEntity() method to ElggEntity
+
+ * engine/lib/group.php: Refs #1411: Deprecated
+ get_entities_from_metadata_groups(_multi) in favor of
+ elgg_get_entities_from_metadata. Added proper deprecation for
+ delete_group_entity. Unsure of version deprecated -- set to 1.6
+
+ * engine/lib/access.php: bah! forgot to rename all variables in
+ list_entities_from_access_id
+
+ * engine/lib/access.php: Fixed regression in deprecated
+ list_entities_from_access_id -- was passing access_id as 'collection_id'
+ instead of 'access_id'
+
+2010-11-03 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/admin.php, engine/lib/api.php, engine/lib/navigation.php,
+ engine/lib/users.php, engine/lib/usersettings.php, engine/lib/views.php,
+ engine/lib/widgets.php, engine/tests/ui/submenu.php, index.php,
+ mod/bookmarks/start.php, .../default/river/object/bookmarks/create.php,
+ mod/categories/listing.php, .../views/default/defaultwidgets/editor.php,
+ mod/diagnostics/index.php, mod/diagnostics/start.php, mod/ecml/start.php,
+ mod/file/friends.php, mod/file/index.php, mod/file/search.php,
+ mod/file/start.php, mod/file/views/default/object/file.php,
+ mod/file/world.php, mod/groups/all.php, mod/groups/forum.php,
+ mod/groups/groupprofile.php, mod/groups/index.php, mod/groups/membership.php,
+ mod/groups/start.php, .../views/default/object/groupforumtopic.php,
+ mod/invitefriends/index.php, mod/invitefriends/start.php,
+ mod/members/index.php, mod/messages/start.php, mod/notifications/groups.php,
+ mod/notifications/index.php, mod/notifications/start.php,
+ mod/pages/actions/pages/edit.php, mod/pages/index.php, mod/pages/start.php,
+ mod/pages/view.php, mod/pages/world.php, mod/profile/edit.php,
+ mod/profile/editicon.php, mod/profile/start.php,
+ mod/riverdashboard/index.php, .../views/default/river/item/wrapper.php,
+ mod/sitepages/index.php, mod/sitepages/start.php,
+ mod/sitepages/views/default/sitepages/metatags.php,
+ .../views/default/widgets/tagcloud/view.php, mod/thewire/start.php,
+ mod/uservalidationbyemail/start.php, pages/dashboard/index.php,
+ pages/dashboard/latest.php, pages/entities/index.php,
+ pages/entities/list.php, views/default/admin/overview/online.php,
+ views/default/admin/users/online.php, views/default/annotation/annotate.php,
+ views/default/canvas/layouts/widgets.php,
+ views/default/navigation/pagination.php,
+ views/default/navigation/site_nav.php, views/default/output/tagcloud.php,
+ views/default/page_elements/content_header.php,
+ views/default/widgets/editwrapper.php: Fixes #2128 - replaces all uses of
+ set_context() and get_context() in core and plugins
+
+2010-11-03 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/views.php: Fixes #2151: Replaced elgg_get_viewtype()
+ implementation with @cash's much simpler version
+
+ * engine/lib/annotations.php, engine/lib/relationships.php: Refs #1411:
+ Deprecated list_entities_from_relationship() in favor of
+ elgg_list_entities_from_relationship()
+
+ * engine/lib/access.php, engine/lib/annotations.php,
+ engine/lib/entities.php, engine/lib/metadata.php: Fixes #2606: Abstracted
+ elgg_list_entities. Takes an optional second argument for the 'getter',
+ defaulting to 'elgg_get_entities'. Converted current elgg_list_entities*
+ functions to use it
+
+ * README.txt: Added .txt for consistency
+
+2010-11-02 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/handlers/xml-rpc_handler.php, engine/lib/admin.php,
+ engine/lib/api.php, engine/lib/elgglib.php, engine/lib/tags.php,
+ engine/lib/users.php, engine/lib/xml-rpc.php, engine/tests/ui/submenu.php,
+ index.php, install/ElggInstaller.php, mod/blog/start.php,
+ mod/bookmarks/bookmarklet.php, mod/bookmarks/start.php,
+ mod/categories/listing.php, mod/diagnostics/index.php, mod/ecml/start.php,
+ mod/file/edit.php, mod/file/friends.php, mod/file/index.php,
+ mod/file/search.php, mod/file/upload.php, mod/file/world.php,
+ mod/groups/activity.php, mod/groups/addtopic.php, mod/groups/all.php,
+ mod/groups/edit.php, mod/groups/edittopic.php, mod/groups/forum.php,
+ mod/groups/groupprofile.php, mod/groups/index.php,
+ mod/groups/invitations.php, mod/groups/invite.php, mod/groups/membership.php,
+ mod/groups/membershipreq.php, mod/groups/new.php, mod/groups/topicposts.php,
+ mod/invitefriends/index.php, mod/members/index.php,
+ mod/messageboard/history.php, mod/messageboard/index.php,
+ mod/messages/index.php, mod/messages/read.php, mod/messages/send.php,
+ mod/messages/sent.php, mod/notifications/groups.php,
+ mod/notifications/index.php, mod/pages/edit.php, mod/pages/history.php,
+ mod/pages/index.php, mod/pages/new.php, mod/pages/view.php,
+ mod/pages/welcome.php, mod/pages/world.php, mod/profile/edit.php,
+ mod/profile/editicon.php, mod/profile/index.php, mod/profile/start.php,
+ mod/reportedcontent/add.php, mod/riverdashboard/index.php,
+ mod/search/index.php, mod/sitepages/index.php, mod/sitepages/start.php,
+ mod/tagcloud/tagcloud.php, mod/thewire/add.php, mod/thewire/everyone.php,
+ mod/thewire/index.php, pages/account/forgotten_password.php,
+ pages/account/register.php, pages/dashboard/index.php,
+ pages/dashboard/latest.php, pages/entities/index.php,
+ pages/entities/list.php, pages/friends/add.php,
+ pages/friends/collections.php, pages/friends/edit.php,
+ pages/friends/index.php, pages/friends/of.php, pages/settings/plugins.php,
+ pages/settings/statistics.php, pages/settings/user.php,
+ services/api/rest_api.php, services/export/handler.php: Fixes #2360:
+ page_draw => elgg_view_page in core + bundled plugins
+
+ * documentation/examples/hooks/basic.php,
+ documentation/examples/hooks/register/all.php,
+ documentation/examples/hooks/register/emit.php: Fixed several typos in
+ documentation examples
+
+ * documentation/examples/hooks/register/advanced.php, engine/lib/views.php:
+ Refs #2360: Deprecated page_draw in favor of elgg_view_page. Updated
+ packaged documentation to reflect this.
+
+ * engine/lib/elgglib.php, engine/tests/api/helpers.php: Added url
+ normalization support to elgg_register_js and elgg_register_css
+
+ * documentation/examples/hooks/register/advanced.php,
+ documentation/examples/hooks/register/basic.php: Corrected a couple typos in
+ the documentation that are being registered as php errors
+
+ * .../default/messageboard/messageboard_content.php, mod/messages/start.php,
+ mod/messages/views/default/messages/messages.php,
+ mod/messages/views/default/messages/view.php, mod/pages/history.php,
+ mod/pages/new.php, mod/pages/start.php, mod/pages/view.php,
+ mod/pages/welcome.php, mod/profile/start.php,
+ mod/profile/views/default/profile/admin_menu.php,
+ .../profile/commentwall/commentwall_content.php,
+ .../views/default/profile/menu/adminlinks.php,
+ .../views/default/profile/menu/friendlinks.php,
+ .../views/default/riverdashboard/sitemessage.php, mod/sitepages/start.php,
+ mod/thewire/start.php, mod/thewire/views/default/object/thewire.php,
+ .../uservalidationbyemail/unvalidated_user.php: Fixes #2463: Removed
+ gratuitous references to $CONFIG->url, etc. from the rest of the plugins.
+
+ * mod/blog/start.php, mod/blog/views/default/blog/forms/edit.php,
+ mod/blog/views/default/blog/sidebar_edit.php,
+ mod/blog/views/default/blog/sidebar_revisions.php,
+ mod/blog/views/default/object/blog.php, mod/bookmarks/start.php,
+ mod/bookmarks/views/default/object/bookmarks.php,
+ .../views/default/diagnostics/forms/download.php, mod/file/start.php,
+ mod/file/views/default/object/file.php, mod/groups/actions/addtogroup.php,
+ mod/groups/actions/join.php, mod/groups/all.php, mod/groups/index.php,
+ mod/groups/membership.php, mod/groups/start.php,
+ mod/groups/views/default/forum/maintopic.php,
+ .../views/default/groups/invitationrequests.php,
+ .../views/default/groups/membershiprequests.php,
+ .../views/default/object/groupforumtopic.php: Refs #2463: Removed gratuitous
+ references to $CONFIG->url, etc. in blog - groups plugins
+
+ * engine/lib/actions.php, engine/lib/entities.php, engine/lib/extender.php:
+ Refs #2463: Added URL normalization support for entity and extender url
+ handlers
+
+ * views/default/page_elements/content_header.php: Refs #2463:
+ page_elements/content_header normalizes 'new_link'
+
+ * engine/lib/entities.php: Refs #2463: Fixed typo of elgg_normalize_url
+ function
+
+ * engine/classes/ElggSite.php, engine/lib/actions.php,
+ engine/lib/elgglib.php, engine/lib/entities.php, engine/lib/navigation.php,
+ engine/lib/views.php, engine/tests/ui/submenu.php, install/ElggInstaller.php,
+ views/default/annotation/generic_comment.php,
+ views/default/annotation/likes.php, views/default/friends/collection.php,
+ views/default/object/default.php,
+ views/default/page_elements/content_header.php,
+ views/default/page_elements/elgg_topbar_logout.php: Refs #2463: Removed some
+ more instances of $CONFIG->url. Added support for elgg_normalize_url to
+ elgg_add_action_tokens_to_url
+
+ * engine/lib/output.php, views/default/output/confirmlink.php,
+ views/default/output/url.php: Refs #2463: Added url normalization support to
+ output/url, output/confirmlink. Enhanced normalization to take care of urls
+ like "example.com"
+
+ * engine/lib/admin.php, engine/lib/users.php, mod/bookmarks/start.php,
+ mod/diagnostics/start.php, .../views/default/diagnostics/runalltests.php,
+ mod/file/views/default/file/embed_upload.php, mod/groups/start.php,
+ mod/invitefriends/start.php, .../views/default/invitefriends/form.php,
+ mod/logbrowser/views/default/logbrowser/form.php, mod/messages/start.php,
+ mod/messages/views/default/messages/forms/view.php,
+ mod/notifications/groups.php, mod/notifications/start.php,
+ .../default/notifications/subscriptions/form.php, mod/pages/index.php,
+ mod/pages/start.php, mod/pages/view.php, mod/pages/world.php,
+ mod/profile/start.php, .../default/admin/appearance/defaultprofile.php,
+ .../views/default/profile/editdefaultprofile.php,
+ .../views/default/riverdashboard/rivercomment.php,
+ .../views/default/riverdashboard/sitemessage.php,
+ .../views/default/admin/users/unvalidated.php,
+ views/default/account/forms/forgotten_password.php,
+ .../default/account/forms/login_walled_garden.php,
+ views/default/account/forms/register.php,
+ views/default/account/forms/useradd.php,
+ views/default/admin/appearance/menu_items.php,
+ views/default/admin/components/plugin_settings.php,
+ views/default/admin/plugins/simple.php,
+ views/default/comments/forms/edit.php, views/default/friends/forms/edit.php,
+ views/default/object/plugin.php, views/default/usersettings/form.php,
+ views/default/widgets/editwrapper.php: Refs #2463: Removed many more
+ graituitous calls to elgg_get_site_url(), $CONFIG->url, etc.
+
+ * views/default/input/form.php: Refs #2463: input/form now normalizes the
+ action parameter
+
+ * engine/lib/output.php: Refs #2463: Removed stay { that was causing the
+ regexp to break
+
+ * mod/blog/start.php, mod/bookmarks/start.php, mod/file/start.php,
+ mod/groups/start.php, mod/pages/start.php, mod/riverdashboard/start.php,
+ mod/thewire/start.php: Refs #2463: Removed some gratuitous calls to
+ elgg_get_site_url() from core plugins
+
+ * engine/lib/elgglib.php, engine/lib/navigation.php, engine/lib/output.php:
+ Refs #2463: Added elgg_normalize_url. forward() and add_menu() make use of
+ it
+
+ * actions/admin/menu_items.php, actions/admin/plugins/disable.php,
+ actions/admin/plugins/disableall.php, actions/admin/plugins/enable.php,
+ actions/admin/plugins/enableall.php, actions/admin/plugins/reorder.php,
+ actions/admin/plugins/simple_update_states.php,
+ actions/admin/site/update_advanced.php, actions/admin/site/update_basic.php,
+ actions/admin/user/makeadmin.php, actions/admin/user/removeadmin.php,
+ actions/admin/user/resetpassword.php, actions/admin/user/unban.php,
+ actions/comments/add.php, actions/comments/delete.php,
+ actions/email/save.php, actions/entities/delete.php, actions/friends/add.php,
+ actions/friends/remove.php, actions/import/opendd.php, actions/likes/add.php,
+ actions/likes/delete.php, actions/login.php,
+ actions/plugins/settings/save.php, actions/plugins/usersettings/save.php,
+ actions/user/name.php, actions/useradd.php, actions/usersettings/save.php,
+ actions/widgets/add.php, actions/widgets/reorder.php,
+ actions/widgets/save.php, mod/blog/actions/blog/delete.php,
+ mod/blog/start.php, mod/bookmarks/actions/delete.php,
+ mod/categories/actions/save.php, mod/ecml/actions/save_permissions.php,
+ mod/file/actions/upload.php, mod/groups/actions/addtogroup.php,
+ mod/groups/actions/edit.php, mod/groups/actions/featured.php,
+ mod/groups/actions/groupskillinvitation.php,
+ mod/groups/actions/groupskillrequest.php, mod/groups/actions/invite.php,
+ mod/groups/actions/join.php, mod/groups/actions/joinrequest.php,
+ mod/groups/actions/leave.php, mod/invitefriends/actions/invite.php,
+ mod/messages/actions/delete.php, mod/notifications/actions/groupsave.php,
+ mod/notifications/actions/save.php, mod/pages/actions/pages/delete.php,
+ mod/pages/actions/pages/edit.php, mod/profile/actions/addcomment.php,
+ mod/profile/actions/cropicon.php, mod/profile/actions/deletecomment.php,
+ mod/profile/actions/deletedefaultprofileitem.php,
+ mod/profile/actions/edit.php, mod/profile/actions/editdefault.php,
+ mod/profile/actions/iconupload.php,
+ mod/profile/actions/resetdefaultprofile.php,
+ mod/sitepages/actions/edit_settings.php: Using REFERER shorthand throughout
+ core
+
+ * js/lib/elgglib.js: Refs #2538: Removed stray 'f' from elgg.system_messages
+ that was causing fatal error
+
+ * js/tests/jsTestDriver.conf, jsTestDriver.conf: Refs #2538: Moved
+ jsTestDriver.conf to js/tests/
+
+ * engine/js/classes/ElggEntity.js, engine/js/classes/ElggPriorityList.js,
+ engine/js/classes/ElggUser.js, engine/js/lib/ajax.js,
+ engine/js/lib/configuration.js, engine/js/lib/elgglib.js,
+ engine/js/lib/events.js, engine/js/lib/languages.js,
+ engine/js/lib/security.js, engine/js/lib/session.js, engine/js/lib/ui.js,
+ engine/js/lib/ui.widgets.js, engine/js/tests/ElggAjaxOptionsTest.js,
+ engine/js/tests/ElggAjaxTest.js, engine/js/tests/ElggEventsTest.js,
+ engine/js/tests/ElggLanguagesTest.js, engine/js/tests/ElggLibTest.js,
+ engine/js/tests/ElggPriorityListTest.js, engine/js/tests/ElggSecurityTest.js,
+ engine/js/tests/ElggSessionTest.js, js/classes/ElggEntity.js,
+ js/classes/ElggPriorityList.js, js/classes/ElggUser.js, js/lib/ajax.js,
+ js/lib/configuration.js, js/lib/elgglib.js, js/lib/events.js,
+ js/lib/languages.js, js/lib/security.js, js/lib/session.js, js/lib/ui.js,
+ js/lib/ui.widgets.js, js/tests/ElggAjaxOptionsTest.js,
+ js/tests/ElggAjaxTest.js, js/tests/ElggEventsTest.js,
+ js/tests/ElggLanguagesTest.js, js/tests/ElggLibTest.js,
+ js/tests/ElggPriorityListTest.js, js/tests/ElggSecurityTest.js,
+ js/tests/ElggSessionTest.js, jsTestDriver.conf,
+ views/default/js/initialise_elgg.php: Refs #2538: Moved js directory to elgg
+ root.
+
+ * engine/js/lib/ajax.js, engine/js/lib/elgglib.js,
+ engine/js/tests/ElggLibTest.js, engine/lib/entities.php: Refs #2538: Renamed
+ elgg.extendUrl to elgg.normalize_url
+
+ * engine/js/lib/elgglib.js: Refs #2538: Added type checking to some more
+ core functions
+
+ * engine/js/classes/ElggPriorityList.js, engine/js/lib/elgglib.js,
+ engine/js/lib/events.js, engine/js/lib/languages.js,
+ engine/js/lib/security.js, engine/js/lib/ui.js, engine/js/lib/ui.widgets.js,
+ engine/js/tests/ElggEventsTest.js, engine/js/tests/ElggLibTest.js,
+ engine/js/tests/ElggPriorityListTest.js,
+ views/default/js/initialise_elgg.php: Refs #2538: Added Elggy event system.
+ Javascript boot sequence mimics PHP.
+
+2010-11-01 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/js/lib/elgglib.js, views/default/css.php,
+ views/default/messages/errors/list.php, views/default/messages/list.php,
+ views/default/messages/messages/list.php: Fixes #2318: Adjusted system
+ message markup + styles to work with ajax actions
+
+ * engine/lib/actions.php: Refs #2538: Pulled in support for ajax actions
+
+ * actions/security/refreshtoken.php, engine/js/classes/ElggEntity.js,
+ engine/js/classes/ElggUser.js, engine/js/lib/elgglib.js,
+ engine/js/lib/languages.js, engine/js/tests/ElggLibTest.js,
+ jsTestDriver.conf, views/default/js/initialise_elgg.php,
+ views/default/js/languages.php, views/default/js/languages/en.php,
+ views/default/page_elements/html_begin.php,
+ views/default/page_elements/html_begin_admin.php,
+ views/default/scripts/initialize_elgg.php: Refs #2538: Added some models,
+ inheritance, more bootstrapping code
+
+ * engine/js/classes/ElggUser.js, engine/js/lib/elgglib.js,
+ engine/js/lib/languages.js, engine/js/lib/session.js,
+ engine/js/tests/ElggLanguagesTest.js: Refs #2538: Pulled in some i18n
+ features
+
+ * engine/js/tests/ElggAjaxOptionsTest.js, engine/js/tests/ElggLibTest.js,
+ engine/js/tests/ElggSecurityTest.js: Commented some js Test files
+
+ * jsTestDriver.conf: Switched jsTestDriver.conf to use default jsTestDriver
+ port
+
+2010-11-01 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggSite.php: Fixes #2603: Corrected is_public_page() to
+ isPublicPage().
+
+2010-11-01 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/js/lib/ajax.js, engine/js/lib/configuration.js,
+ engine/js/lib/elgglib.js, engine/js/lib/security.js,
+ engine/js/lib/session.js, engine/js/lib/ui.js, engine/js/lib/ui.widgets.js,
+ engine/js/tests/ElggAjaxOptionsTest.js, engine/js/tests/ElggAjaxTest.js,
+ engine/js/tests/ElggLibTest.js, engine/js/tests/ElggSecurityTest.js,
+ engine/js/tests/ElggSessionTest.js, jsTestDriver.conf: Refs #2538: Pulled in
+ elgg JS object and unit tests
+
+2010-10-31 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggData.php, engine/classes/ElggEntity.php,
+ engine/classes/ElggExtender.php: Refs #2597: Pushed getOwner and
+ getOwnerEntity into ElggEntity and ElggExtender
+
+ * engine/classes/ElggData.php, engine/classes/Loggable.php: Refs #2597:
+ Deprecated Loggable::getObjectOwnerGUID()
+
+2010-10-31 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Refs #2210 - added functions for managing
+ javascript and css files
+
+ * engine/tests/regression/trac_bugs.php: Fixed bug in regression test for
+ upscaling turned off
+
+ * engine/tests/objects/sites.php, engine/tests/objects/users.php: Fixes for
+ [7165] - entity variable changed
+
+ * engine/tests/objects/filestore.php: updated unit test for file matrix to
+ reflect updates in directory structure and class method names
+
+ * engine/tests/objects/entities.php, engine/tests/objects/objects.php,
+ engine/tests/objects/sites.php, engine/tests/objects/users.php: Refs #2597 -
+ fixes some unit tests broken in the reorg of the data models
+
+ * engine/tests/suite.php: Unit tests with the system log turned on are too
+ slow
+
+2010-10-31 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggAnnotation.php, engine/classes/ElggData.php,
+ engine/classes/ElggEntity.php, engine/classes/ElggMetadata.php,
+ engine/classes/ElggRelationship.php: Refs #2597: Pulled __set, __get, __isset
+ magic functions definitions into ElggData
+
+ * engine/classes/ElggEntity.php: Refs #2597: Auto-initialize temp_metadata,
+ temp_annotations, and volatile as arrays
+
+ * engine/classes/ElggData.php, engine/classes/ElggEntity.php,
+ engine/classes/ElggExtender.php, engine/classes/ElggRelationship.php: Refs
+ #2597: Moved "implements Exportable" up to {{{ElggData}}}
+
+ * engine/classes/ElggEntity.php: Refs #2597:
+ ElggEntity::initializeAttributes calls into parent initializeAttributes()
+
+ * engine/classes/ElggAnnotation.php, engine/classes/ElggData.php,
+ engine/classes/ElggEntity.php, engine/classes/ElggExtender.php,
+ engine/classes/ElggMetadata.php, engine/classes/ElggRelationship.php:
+ Improved initializeAttributes implementations
+
+ * engine/classes/ElggGroup.php, engine/classes/ElggObject.php,
+ engine/classes/ElggUser.php: Refs #2597: Entity type constructors all use
+ initializeAttributes now
+
+ * engine/classes/ElggData.php, engine/classes/ElggEntity.php,
+ engine/classes/ElggExtender.php: Refs #2597: Added getURL(),
+ getTimeCreated(), and initializeAttributes() to {{{ElggData}}}
+
+2010-10-30 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggData.php, engine/classes/ElggEntity.php,
+ engine/classes/ElggExtender.php: Refs #2597: pulled getOwner and
+ getOwnerEntity functions into ElggData I thought this would be OK even
+ though relationships don't technically have owners because ElggRelationship
+ implemented the getObectOwnerGUID method
+
+ * engine/classes/ElggData.php, engine/classes/ElggEntity.php,
+ engine/classes/ElggExtender.php, engine/classes/ElggRelationship.php: Refs
+ #2597: Pulled Loggable functions with identical implementations into ElggData
+
+ * engine/classes/ElggData.php, engine/classes/ElggEntity.php,
+ engine/classes/ElggExtender.php, engine/classes/ElggRelationship.php: Refs
+ #2597: Pulled identical {{{Iterator}}} and {{{ArrayAccess}}} implementations
+ into {{{ElggData}}}
+
+2010-10-30 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/pagehandler.php, engine/lib/pageowner.php: Refs #2128 - added
+ stack context functions
+
+2010-10-30 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggData.php, engine/classes/ElggEntity.php,
+ engine/classes/ElggExtender.php, engine/classes/ElggRelationship.php: Refs
+ #2597: Added a new ElggData class that ElggEntity, ElggExtender, and
+ ElggRelationship all extend
+
+ * views/default/page_elements/title.php: Changed get_submenu to
+ elgg_get_submenu
+
+ * mod/bookmarks/views/default/object/bookmarks.php,
+ mod/ecml/views/default/ecml/input_ext.php,
+ .../views/default/groups/activity_latest.php,
+ mod/groups/views/default/river/forum/create.php,
+ mod/profile/views/default/profile/admin_menu.php,
+ .../views/default/profile/menu/adminlinks.php,
+ views/default/admin/site/advanced.php, views/default/admin/site/basic.php:
+ Refs #2598: Converted the rest of the $vars['url'] references to
+ elgg_get_site_url()
+
+ * mod/blog/views/default/blog/forms/edit.php,
+ mod/blog/views/default/blog/sidebar_edit.php,
+ mod/blog/views/default/blog/sidebar_revisions.php,
+ mod/blog/views/default/object/blog.php,
+ .../views/default/bookmarks/bookmarklet.php,
+ mod/bookmarks/views/default/bookmarks/form.php,
+ .../views/default/bookmarks/group_bookmarks.php,
+ .../views/default/widgets/bookmarks/view.php,
+ mod/captcha/views/default/input/captcha.php,
+ mod/categories/views/default/categories/view.php,
+ .../views/default/defaultwidgets/editor.php,
+ .../views/default/diagnostics/runalltests.php,
+ mod/ecml/views/default/ecml/admin/css.php,
+ mod/ecml/views/default/ecml/help/blip.tv.php,
+ mod/ecml/views/default/ecml/help/dailymotion.php,
+ mod/ecml/views/default/ecml/help/googlemaps.php,
+ mod/ecml/views/default/ecml/help/livevideo.php,
+ mod/ecml/views/default/ecml/help/redlasso.php,
+ mod/ecml/views/default/ecml/help/slideshare.php,
+ mod/ecml/views/default/ecml/help/vimeo.php,
+ mod/ecml/views/default/ecml/help/youtube.php,
+ .../views/default/embed/web_services/content.php,
+ mod/embed/views/default/embed/css.php,
+ mod/embed/views/default/embed/embed.php,
+ mod/embed/views/default/embed/js.php, mod/embed/views/default/embed/link.php,
+ mod/embed/views/default/embed/upload/content.php,
+ mod/file/views/default/file/css.php,
+ mod/file/views/default/file/embed_upload.php,
+ mod/file/views/default/file/groupprofile_files.php,
+ mod/file/views/default/file/icon.php,
+ .../default/file/specialcontent/audio/mid.php,
+ .../default/file/specialcontent/audio/mp3.php,
+ .../default/file/specialcontent/audio/mpeg.php,
+ .../default/file/specialcontent/audio/x-wav.php,
+ .../default/file/specialcontent/image/default.php,
+ mod/file/views/default/file/typecloud.php,
+ mod/file/views/default/file/upload.php,
+ mod/file/views/default/object/file.php,
+ mod/file/views/default/widgets/filerepo/view.php,
+ mod/file/views/rss/object/file.php, mod/groups/actions/delete.php,
+ mod/groups/views/default/forms/forums/addtopic.php,
+ .../views/default/forms/forums/edittopic.php,
+ mod/groups/views/default/forms/groups/edit.php,
+ mod/groups/views/default/forms/groups/invite.php,
+ mod/groups/views/default/forum/maintopic.php,
+ mod/groups/views/default/forum/topics.php,
+ mod/groups/views/default/forum/viewposts.php,
+ mod/groups/views/default/groups/find.php,
+ mod/groups/views/default/groups/forum_latest.php,
+ .../views/default/groups/group_sort_menu.php,
+ mod/groups/views/default/groups/grouplisting.php,
+ mod/groups/views/default/groups/groupprofile.php,
+ .../views/default/groups/invitationrequests.php,
+ .../views/default/groups/membershiprequests.php,
+ mod/groups/views/default/groups/side_menu.php,
+ .../views/default/icon/group/default/large.php,
+ .../views/default/icon/group/default/medium.php,
+ .../views/default/icon/group/default/small.php,
+ .../views/default/icon/group/default/tiny.php,
+ .../views/default/object/groupforumtopic.php,
+ .../views/default/river/forum/topic/create.php,
+ .../views/default/invitefriends/form.php,
+ .../views/default/logbrowser/adminlinks.php,
+ mod/logbrowser/views/default/logbrowser/form.php,
+ .../views/default/members/members_navigation.php,
+ mod/members/views/default/members/search.php,
+ .../views/default/messageboard/css.php,
+ .../views/default/messageboard/forms/add.php,
+ .../default/messageboard/messageboard_content.php,
+ .../views/default/widgets/messageboard/view.php,
+ mod/messages/views/default/messages/css.php,
+ .../views/default/messages/forms/reply.php,
+ mod/messages/views/default/messages/forms/send.php,
+ mod/messages/views/default/messages/forms/view.php,
+ mod/messages/views/default/messages/menu.php,
+ mod/messages/views/default/messages/messages.php,
+ mod/messages/views/default/messages/topbar.php,
+ mod/messages/views/default/messages/view.php,
+ .../views/default/notifications/css.php,
+ .../default/notifications/subscriptions/form.php,
+ mod/pages/views/default/forms/pages/edit.php,
+ .../views/default/forms/pages/editwelcome.php,
+ .../views/default/icon/object/page/medium.php,
+ mod/pages/views/default/icon/object/page/small.php,
+ .../views/default/icon/object/page_top/medium.php,
+ .../views/default/icon/object/page_top/small.php,
+ mod/pages/views/default/pages/css.php,
+ mod/pages/views/default/pages/metatags.php,
+ mod/pages/views/default/widgets/pages/view.php,
+ mod/profile/actions/cropicon.php,
+ .../views/default/icon/user/default/large.php,
+ .../views/default/icon/user/default/master.php,
+ .../views/default/icon/user/default/medium.php,
+ .../views/default/icon/user/default/small.php,
+ .../views/default/icon/user/default/tiny.php,
+ .../views/default/icon/user/default/topbar.php,
+ .../profile/commentwall/commentwall_content.php,
+ .../default/profile/commentwall/commentwalladd.php,
+ mod/profile/views/default/profile/css.php,
+ mod/profile/views/default/profile/edit.php,
+ .../views/default/profile/editdefaultprofile.php,
+ .../default/profile/editdefaultprofileitems.php,
+ mod/profile/views/default/profile/editicon.php,
+ mod/profile/views/default/profile/icon.php,
+ .../views/default/profile/menu/adminlinks.php,
+ .../views/default/profile/menu/friendlinks.php,
+ .../views/default/profile/profile_ownerblock.php,
+ .../views/default/profile/topbar_extend.php,
+ .../views/default/reportedcontent/css.php,
+ .../views/default/reportedcontent/footer_link.php,
+ .../views/default/reportedcontent/form.php,
+ .../views/default/reportedcontent/listing.php,
+ .../views/default/riverdashboard/container.php,
+ .../views/default/riverdashboard/css.php,
+ .../views/default/riverdashboard/js.php,
+ .../views/default/riverdashboard/menu.php,
+ .../views/default/riverdashboard/rivercomment.php,
+ .../views/default/riverdashboard/sitemessage.php,
+ mod/search/views/default/search/listing.php,
+ mod/search/views/default/search/search_box.php,
+ .../views/default/sitepages/footer_menu.php,
+ mod/sitepages/views/default/sitepages/menu.php,
+ mod/thewire/views/default/object/thewire.php,
+ .../views/default/river/object/thewire/create.php,
+ mod/thewire/views/default/thewire/css.php,
+ mod/thewire/views/default/thewire/forms/add.php,
+ .../views/default/thewire/profile_status.php,
+ mod/thewire/views/default/widgets/thewire/view.php,
+ mod/tinymce/views/default/input/longtext.php,
+ mod/twitter/views/default/twitter/css.php,
+ .../views/default/admin/users/unvalidated.php,
+ .../uservalidationbyemail/unvalidated_user.php,
+ .../default/file/specialcontent/audio/mp3.php,
+ .../default/file/specialcontent/audio/mpeg.php,
+ .../default/file/specialcontent/audio/mpg.php,
+ views/default/account/forms/forgotten_password.php,
+ views/default/account/forms/login.php,
+ views/default/account/forms/login_dropdown.php,
+ .../default/account/forms/login_walled_garden.php,
+ views/default/account/forms/register.php,
+ views/default/account/forms/useradd.php,
+ views/default/admin/appearance/menu_items.php,
+ views/default/admin/components/plugin.php,
+ views/default/admin/components/plugin_settings.php,
+ views/default/admin/plugins/simple.php,
+ views/default/annotation/generic_comment.php,
+ views/default/annotation/latest_comments.php,
+ views/default/annotation/likes.php,
+ views/default/canvas/layouts/administration.php,
+ views/default/canvas/layouts/widgets.php,
+ views/default/comments/forms/edit.php, views/default/css.php,
+ views/default/dashboard/blurb.php, views/default/friends/collection.php,
+ views/default/friends/collectiontabs.php,
+ views/default/friends/forms/edit.php,
+ views/default/group/search/finishblurb.php,
+ views/default/input/autocomplete.php, views/default/input/userpicker.php,
+ views/default/likes/forms/edit.php, views/default/likes/forms/link.php,
+ views/default/object/default.php, views/default/object/plugin.php,
+ views/default/output/tagcloud.php, views/default/output/tags.php,
+ views/default/page_elements/content_header.php,
+ views/default/page_elements/elgg_footer.php,
+ views/default/page_elements/elgg_header_logo.php,
+ views/default/page_elements/elgg_topbar.php,
+ views/default/page_elements/elgg_topbar_logout.php,
+ views/default/page_elements/html_begin.php,
+ views/default/page_elements/html_begin_admin.php,
+ views/default/page_shells/walled_garden.php,
+ views/default/settings/system.php, views/default/settings/upgrading.php,
+ views/default/user/search/finishblurb.php,
+ views/default/usersettings/form.php, views/default/widgets/editwrapper.php,
+ views/default/widgets/wrapper.php, views/foaf/page_shells/default.php,
+ views/foaf/user/default.php, views/installation/install/header.php,
+ views/installation/install/nav.php,
+ views/installation/install/pages/complete.php,
+ views/installation/page_shells/default.php: Refs #2598: Converted most
+ $vars['url'] to elgg_get_site_url()
+
+2010-10-30 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/start.php: checking if the site has any groups before looping
+ over them
+
+ * mod/blog/blog_lib.php: fixed minor issue where blog code wasn't setting
+ type when getting subtype
+
+2010-10-30 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/export.php, engine/lib/relationships.php,
+ install/ElggInstaller.php, mod/blog/start.php,
+ mod/blog/views/default/blog/sidebar_menu.php, mod/bookmarks/start.php,
+ mod/diagnostics/index.php, mod/diagnostics/start.php,
+ mod/file/actions/save.php, mod/file/actions/upload.php, mod/file/start.php,
+ .../default/file/icon/application/default.php,
+ .../views/default/file/icon/application/excel.php,
+ .../views/default/file/icon/application/msword.php,
+ .../views/default/file/icon/application/pdf.php,
+ .../default/file/icon/application/powerpoint.php,
+ .../default/file/icon/application/vnd.ms-excel.php,
+ .../file/icon/application/vnd.ms-powerpoint.php,
+ .../application/vnd.oasis.opendocument.text.php,
+ mod/file/views/default/file/icon/archive.php,
+ mod/file/views/default/file/icon/audio.php,
+ mod/file/views/default/file/icon/default.php,
+ mod/file/views/default/file/icon/document.php,
+ .../views/default/file/icon/text/directory.php,
+ mod/file/views/default/file/icon/video.php,
+ mod/groups/actions/forums/addtopic.php,
+ mod/groups/actions/forums/deletetopic.php,
+ mod/groups/actions/forums/edittopic.php, mod/groups/activity.php,
+ mod/groups/forum.php, mod/groups/start.php,
+ mod/groups/views/default/forms/forums/addtopic.php,
+ mod/groups/views/default/forum/viewposts.php,
+ mod/invitefriends/actions/invite.php, mod/invitefriends/start.php,
+ mod/members/index.php, mod/messageboard/start.php, mod/messages/index.php,
+ mod/messages/sent.php, mod/messages/start.php, mod/notifications/groups.php,
+ mod/notifications/start.php, mod/pages/index.php, mod/pages/start.php,
+ mod/pages/view.php, mod/pages/views/default/pages/breadcrumbs.php,
+ mod/pages/world.php, mod/profile/actions/addcomment.php,
+ mod/profile/start.php, .../default/admin/appearance/defaultprofile.php,
+ .../views/default/reportedcontent/user_report.php,
+ mod/riverdashboard/start.php, mod/search/index.php, mod/thewire/start.php,
+ views/default/page_elements/content_header.php,
+ views/default/usersettings/main_opt/plugins.php,
+ views/default/usersettings/main_opt/statistics.php,
+ views/default/usersettings/main_opt/user.php,
+ views/installation/input/button.php: Refs #2598: Converted virtually all uses
+ of $CONFIG->wwwroot to elgg_get_site_url()
+
+2010-10-30 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggFile.php, engine/tests/objects/entities.php,
+ mod/blog/classes/ElggBlog.php: finished the conversion to
+ initializeAttributes()
+
+2010-10-30 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Fixes #2598: Added elgg_get_site_url()
+
+ * .../admin/appearance/default_dashboard_widgets.php,
+ .../admin/appearance/default_profile_widgets.php, mod/file/search.php,
+ mod/file/world.php, mod/groups/actions/leave.php, mod/pages/world.php,
+ mod/profile/views/default/profile/admin_menu.php,
+ .../default/profile/commentwall/commentwalladd.php,
+ mod/profile/views/default/profile/icon.php,
+ .../views/default/profile/menu/adminlinks.php, mod/thewire/index.php,
+ mod/thewire/start.php: Replaced $_SESSION['id'] and $_SESSION['guid'] with
+ get_loggedin_userid()
+
+2010-10-30 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: fixed php exception and error handlers not being
+ next to each other in elgglib
+
+ * documentation/stubs/config.php, engine/lib/configuration.php,
+ engine/lib/database.php, engine/lib/install.php, engine/lib/sessions.php,
+ engine/lib/sites.php, engine/lib/version.php, engine/start.php: ripped out
+ last remaining tentacles of old installer from core - just needs removal of
+ install.php when elgg_view() is updated
+
+2010-10-30 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/group.php, engine/lib/users.php, engine/lib/views.php,
+ mod/blog/views/default/blog/sidebar_menu.php, mod/bookmarks/bookmarklet.php,
+ mod/bookmarks/start.php, .../views/default/bookmarks/bookmarklet.php,
+ mod/bookmarks/views/default/bookmarks/form.php,
+ .../views/default/bookmarks/group_bookmarks.php,
+ .../views/default/widgets/bookmarks/view.php,
+ .../views/default/defaultwidgets/editor.php, mod/file/edit.php,
+ mod/file/friends.php, mod/file/index.php, mod/file/search.php,
+ mod/file/start.php, mod/file/upload.php,
+ mod/file/views/default/file/groupprofile_files.php,
+ mod/file/views/default/file/typecloud.php,
+ mod/file/views/default/file/upload.php, mod/file/world.php,
+ mod/groups/activity.php, mod/groups/addtopic.php, mod/groups/all.php,
+ mod/groups/edittopic.php, mod/groups/forum.php, mod/groups/index.php,
+ mod/groups/membership.php, mod/groups/start.php, mod/groups/topicposts.php,
+ mod/groups/views/default/forum/maintopic.php,
+ mod/groups/views/default/forum/topics.php,
+ mod/groups/views/default/forum/viewposts.php,
+ .../views/default/groups/activity_latest.php,
+ mod/groups/views/default/groups/forum_latest.php,
+ .../views/default/object/groupforumtopic.php, mod/members/index.php,
+ mod/messageboard/index.php, .../views/default/messageboard/forms/add.php,
+ .../views/default/widgets/messageboard/view.php, mod/messages/send.php,
+ mod/pages/edit.php, mod/pages/history.php, mod/pages/index.php,
+ mod/pages/new.php, mod/pages/start.php, mod/pages/view.php,
+ mod/pages/views/default/forms/pages/edit.php,
+ .../views/default/pages/groupprofile_pages.php,
+ mod/pages/views/default/widgets/pages/view.php, mod/pages/welcome.php,
+ mod/pages/world.php, mod/profile/edit.php, mod/profile/editicon.php,
+ mod/profile/icon.php, mod/profile/start.php,
+ mod/profile/views/default/profile/admin_menu.php,
+ .../default/profile/commentwall/commentwalladd.php,
+ mod/profile/views/default/profile/edit.php,
+ mod/profile/views/default/profile/listing.php,
+ mod/profile/views/default/profile/metatags.php,
+ .../default/profile/profile_contents/details.php,
+ .../views/default/profile/profile_ownerblock.php,
+ mod/reportedcontent/add.php, .../views/default/widgets/tagcloud/view.php,
+ mod/thewire/index.php, mod/thewire/start.php,
+ mod/thewire/views/default/widgets/thewire/view.php, pages/friends/index.php,
+ pages/friends/of.php, pages/friends/pickercallback.php,
+ pages/settings/index.php, pages/settings/plugins.php,
+ pages/settings/statistics.php, pages/settings/user.php,
+ views/default/canvas/layouts/widgets.php,
+ .../notifications/settings/usersettings.php,
+ views/default/page_elements/content_header.php,
+ .../page_elements/content_header_member.php,
+ views/default/page_elements/owner_block.php,
+ views/default/page_elements/title.php,
+ views/default/user/settings/default_access.php,
+ views/default/user/settings/email.php,
+ views/default/user/settings/language.php,
+ views/default/user/settings/name.php,
+ views/default/user/settings/password.php,
+ views/default/widgets/editwrapper.php, views/default/widgets/wrapper.php,
+ views/foaf/page_shells/default.php: Refs #1439: Using new page_owner
+ functions in all of core
+
+ * engine/lib/filestore.php, mod/bookmarks/actions/add.php,
+ mod/bookmarks/bookmarklet.php,
+ mod/bookmarks/views/default/bookmarks/form.php,
+ mod/diagnostics/actions/download.php, mod/file/actions/delete.php,
+ mod/file/actions/save.php, mod/file/world.php, mod/groups/actions/delete.php,
+ mod/groups/actions/forums/addtopic.php,
+ mod/groups/actions/forums/edittopic.php, mod/groups/actions/leave.php,
+ mod/groups/groupprofile.php, mod/groups/membership.php, mod/groups/start.php,
+ mod/groups/views/default/forum/topics.php,
+ mod/groups/views/default/forum/viewposts.php,
+ mod/groups/views/default/groups/forum_latest.php,
+ mod/groups/views/default/groups/side_menu.php, mod/members/index.php,
+ mod/messages/actions/delete.php, mod/messages/send.php,
+ mod/messages/sent.php, mod/messages/start.php,
+ mod/messages/views/default/messages/messages.php,
+ mod/messages/views/default/messages/topbar.php,
+ mod/messages/views/default/messages/view.php,
+ .../notifications/subscriptions/collections.php,
+ .../notifications/subscriptions/forminternals.php,
+ .../notifications/subscriptions/groupsform.php,
+ .../notifications/subscriptions/personal.php,
+ mod/pages/actions/pages/edit.php, mod/pages/edit.php, mod/pages/new.php,
+ mod/pages/start.php, mod/pages/welcome.php, mod/pages/world.php,
+ mod/profile/actions/addcomment.php, mod/profile/actions/edit.php,
+ mod/profile/start.php, mod/profile/views/default/profile/editicon.php,
+ mod/profile/views/default/profile/icon.php,
+ .../views/default/profile/profile_ownerblock.php,
+ mod/reportedcontent/actions/add.php, mod/reportedcontent/add.php,
+ .../views/default/reportedcontent/form.php,
+ mod/riverdashboard/actions/add.php, mod/riverdashboard/index.php,
+ .../views/default/riverdashboard/ecml/activity.php,
+ .../views/default/riverdashboard/welcome.php, mod/thewire/index.php,
+ mod/thewire/start.php, views/default/canvas/layouts/widgets.php,
+ views/foaf/page_shells/default.php: Refs #2124: Using get_loggedin_user
+ functions instead of $vars['user'], $_SESSION['user'], etc.
+
+ * mod/pages/views/default/pages/breadcrumbs.php,
+ views/foaf/user/default.php: Refs #2124: Using elgg_get_page_owner instead of
+ $vars['page_owner'] in views
+
+2010-10-30 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: organized functions in elgglib by purpose - more
+ or less
+
+ * engine/lib/elgglib.php, engine/lib/navigation.php, engine/start.php,
+ install/ElggInstaller.php: pulled navigation functions out of elgglib.php
+
+ * engine/lib/configuration.php, engine/lib/elgglib.php: moved datalist code
+ into the configuration lib
+
+ * engine/lib/plugins.php: fixed spelling mistake in comment
+
+ * engine/lib/cache.php, engine/lib/elgglib.php: moved file path cache
+ functions into the cache lib which seems to be a more logical location for
+ them
+
+2010-10-30 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/useradd.php, engine/lib/entities.php: Fixed an invalid call to
+ get_pageowner_guid() in can_edit_entity(). Removed the call to the validation
+ function in useradd.
+
+2010-10-29 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * CONTRIBUTORS.txt, README.txt: Language changes for contributors and
+ readme.
+
+2010-10-29 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * README.txt: small readme tweak.
+
+2010-10-28 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/mb_wrapper.php: Fixes #2544. Pulled out the eval() for creating
+ elgg_*() mb wrapper functions.
+
+ * engine/lib/filestore.php: Fixes #2150: Removed old code in filestore.
+
+ * CHANGES.txt, _css/css.php, _css/js.php, actions/admin/menu_items.php,
+ actions/admin/plugins/simple_update_states.php, actions/comments/add.php,
+ actions/email/save.php, actions/friends/add.php,
+ actions/friends/addcollection.php, actions/friends/deletecollection.php,
+ actions/friends/editcollection.php, actions/friends/remove.php,
+ actions/likes/add.php, actions/likes/delete.php, actions/login.php,
+ actions/register.php, actions/user/language.php, actions/user/password.php,
+ actions/user/spotlight.php, actions/useradd.php,
+ actions/usersettings/save.php, actions/widgets/add.php,
+ actions/widgets/reorder.php, actions/widgets/save.php,
+ engine/classes/APIException.php, engine/classes/CallException.php,
+ engine/classes/ClassException.php, engine/classes/ClassNotFoundException.php,
+ engine/classes/ConfigurationException.php, engine/classes/CronException.php,
+ engine/classes/DataFormatException.php, engine/classes/DatabaseException.php,
+ engine/classes/ElggAccess.php, engine/classes/ElggAnnotation.php,
+ engine/classes/ElggCache.php, engine/classes/ElggDiskFilestore.php,
+ engine/classes/ElggEntity.php, engine/classes/ElggExtender.php,
+ engine/classes/ElggFile.php, engine/classes/ElggFileCache.php,
+ engine/classes/ElggFilestore.php, engine/classes/ElggGroup.php,
+ engine/classes/ElggHMACCache.php, engine/classes/ElggMemcache.php,
+ engine/classes/ElggMetadata.php, engine/classes/ElggObject.php,
+ engine/classes/ElggPlugin.php, engine/classes/ElggRelationship.php,
+ engine/classes/ElggSession.php, engine/classes/ElggSharedMemoryCache.php,
+ engine/classes/ElggSite.php, engine/classes/ElggStaticVariableCache.php,
+ engine/classes/ElggUser.php, engine/classes/ElggWidget.php,
+ engine/classes/ErrorResult.php, engine/classes/ExportException.php,
+ engine/classes/Exportable.php, engine/classes/Friendable.php,
+ engine/classes/GenericResult.php, engine/classes/IOException.php,
+ engine/classes/ImportException.php, engine/classes/Importable.php,
+ engine/classes/InstallationException.php,
+ engine/classes/InvalidClassException.php,
+ engine/classes/InvalidParameterException.php, engine/classes/Locatable.php,
+ engine/classes/Loggable.php, engine/classes/NotImplementedException.php,
+ engine/classes/Notable.php, engine/classes/NotificationException.php,
+ engine/classes/ODD.php, engine/classes/ODDDocument.php,
+ engine/classes/ODDEntity.php, engine/classes/PluginException.php,
+ engine/classes/RegistrationException.php,
+ engine/classes/SecurityException.php, engine/classes/SuccessResult.php,
+ engine/classes/XMLRPCArrayParameter.php,
+ engine/classes/XMLRPCBase64Parameter.php,
+ engine/classes/XMLRPCBoolParameter.php, engine/classes/XMLRPCCall.php,
+ engine/classes/XMLRPCDateParameter.php,
+ engine/classes/XMLRPCDoubleParameter.php,
+ engine/classes/XMLRPCErrorResponse.php,
+ engine/classes/XMLRPCIntParameter.php, engine/classes/XMLRPCParameter.php,
+ engine/classes/XMLRPCResponse.php, engine/classes/XMLRPCStringParameter.php,
+ engine/classes/XMLRPCStructParameter.php,
+ engine/classes/XMLRPCSuccessResponse.php, engine/classes/XmlElement.php,
+ engine/handlers/xml-rpc_handler.php, engine/lib/access.php,
+ engine/lib/actions.php, engine/lib/admin.php, engine/lib/annotations.php,
+ engine/lib/api.php, engine/lib/calendar.php, engine/lib/configuration.php,
+ engine/lib/cron.php, engine/lib/database.php, engine/lib/elgglib.php,
+ engine/lib/entities.php, engine/lib/export.php, engine/lib/extender.php,
+ engine/lib/filestore.php, engine/lib/group.php, engine/lib/input.php,
+ engine/lib/install.php, engine/lib/languages.php, engine/lib/location.php,
+ engine/lib/memcache.php, engine/lib/metadata.php, engine/lib/metastrings.php,
+ engine/lib/notification.php, engine/lib/objects.php, engine/lib/opendd.php,
+ engine/lib/output.php, engine/lib/pagehandler.php, engine/lib/pageowner.php,
+ engine/lib/pam.php, engine/lib/plugins.php, engine/lib/relationships.php,
+ engine/lib/river.php, engine/lib/sessions.php, engine/lib/sites.php,
+ engine/lib/statistics.php, engine/lib/system_log.php, engine/lib/tags.php,
+ engine/lib/upgrades/2008100701.php, engine/lib/upgrades/2008101303.php,
+ engine/lib/upgrades/2009022701.php, engine/lib/upgrades/2009041701.php,
+ engine/lib/upgrades/2009070101.php, engine/lib/upgrades/2009102801.php,
+ engine/lib/upgrades/2010033101.php, engine/lib/upgrades/2010060401.php,
+ engine/lib/upgrades/2010061501.php, engine/lib/upgrades/2010062301.php,
+ engine/lib/upgrades/2010071001.php, engine/lib/upgrades/2010071002.php,
+ engine/lib/users.php, engine/lib/usersettings.php, engine/lib/version.php,
+ engine/lib/views.php, engine/lib/widgets.php, engine/lib/xml-rpc.php,
+ engine/lib/xml.php, engine/settings.example.php, engine/start.php, index.php,
+ install.php, install/ElggInstaller.php, install/ElggRewriteTester.php,
+ .../views/default/profile/profile_ownerblock.php,
+ pages/account/forgotten_password.php, pages/account/register.php,
+ pages/dashboard/index.php, pages/dashboard/latest.php,
+ pages/entities/index.php, pages/friends/add.php, pages/friends/edit.php,
+ pages/friends/index.php, pages/friends/of.php,
+ pages/friends/pickercallback.php, pages/settings/plugins.php,
+ services/api/rest_api.php, services/export/handler.php, simplecache/view.php,
+ upgrade.php: Standardized code in all of core, not including language files,
+ tests, or core mods.
+
+2010-10-27 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * CONTRIBUTORS.txt, README.txt: Updated readme to reflect the MIT license.
+ Updated contributors to be a flat list.
+
+2010-10-27 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * simplecache/view.php: Fixes #2590 - simplecache now works when simplecache
+ turned off
+
+2010-10-25 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/AccessControlQueryComponent.php,
+ engine/classes/DeleteQueryTypeQueryComponent.php,
+ engine/classes/InsertQueryTypeQueryComponent.php,
+ engine/classes/JoinQueryComponent.php,
+ engine/classes/LimitOffsetQueryComponent.php,
+ engine/classes/OrderQueryComponent.php, engine/classes/Query.php,
+ engine/classes/QueryComponent.php,
+ engine/classes/QueryTypeQueryComponent.php,
+ engine/classes/SelectFieldQueryComponent.php,
+ engine/classes/SelectQueryTypeQueryComponent.php,
+ engine/classes/SetQueryComponent.php, engine/classes/SimpleQuery.php,
+ engine/classes/TableQueryComponent.php,
+ engine/classes/UpdateQueryTypeQueryComponent.php,
+ engine/classes/WhereQueryComponent.php,
+ engine/classes/WhereSetQueryComponent.php,
+ engine/classes/WhereStaticQueryComponent.php: Closes #2511. Query object
+ classes removed.
+
+2010-10-22 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * COPYRIGHT.txt, actions/admin/menu_items.php, actions/comments/add.php,
+ actions/comments/delete.php, actions/entities/delete.php,
+ actions/friends/add.php, actions/friends/addcollection.php,
+ actions/friends/deletecollection.php, actions/friends/editcollection.php,
+ actions/friends/remove.php, actions/import/opendd.php, actions/likes/add.php,
+ actions/likes/delete.php, actions/logout.php,
+ .../notifications/settings/usersettings/save.php,
+ actions/plugins/settings/save.php, actions/plugins/usersettings/save.php,
+ actions/user/default_access.php, actions/user/language.php,
+ actions/user/name.php, actions/user/password.php,
+ actions/user/passwordreset.php, actions/user/spotlight.php,
+ actions/useradd.php, actions/usersettings/save.php, actions/widgets/add.php,
+ actions/widgets/reorder.php, actions/widgets/save.php,
+ engine/classes/ElggFile.php, engine/classes/ElggFileCache.php,
+ engine/classes/ElggFilestore.php, engine/classes/ElggGroup.php,
+ engine/classes/ElggHMACCache.php, engine/classes/ElggMemcache.php,
+ engine/classes/ElggMetadata.php, engine/classes/ElggStaticVariableCache.php,
+ engine/classes/ErrorResult.php, engine/classes/Exportable.php,
+ engine/classes/GenericResult.php, engine/classes/IOException.php,
+ engine/classes/Importable.php,
+ engine/classes/InsertQueryTypeQueryComponent.php,
+ engine/classes/InstallationException.php,
+ engine/classes/InvalidClassException.php,
+ engine/classes/InvalidParameterException.php,
+ engine/classes/JoinQueryComponent.php,
+ engine/classes/LimitOffsetQueryComponent.php, engine/classes/Loggable.php,
+ engine/classes/NotImplementedException.php,
+ engine/classes/NotificationException.php, engine/classes/ODD.php,
+ engine/classes/ODDDocument.php, engine/classes/ODDEntity.php,
+ engine/classes/OrderQueryComponent.php, engine/classes/Query.php,
+ engine/classes/QueryComponent.php,
+ engine/classes/QueryTypeQueryComponent.php,
+ engine/classes/RegistrationException.php,
+ engine/classes/SecurityException.php,
+ engine/classes/SelectFieldQueryComponent.php,
+ engine/classes/SelectQueryTypeQueryComponent.php,
+ engine/classes/SetQueryComponent.php, engine/classes/SimpleQuery.php,
+ engine/classes/SuccessResult.php, engine/classes/TableQueryComponent.php,
+ engine/classes/UpdateQueryTypeQueryComponent.php,
+ engine/classes/WhereQueryComponent.php,
+ engine/classes/WhereSetQueryComponent.php,
+ engine/classes/WhereStaticQueryComponent.php,
+ engine/classes/XMLRPCArrayParameter.php,
+ engine/classes/XMLRPCBase64Parameter.php,
+ engine/classes/XMLRPCBoolParameter.php, engine/classes/XMLRPCCall.php,
+ engine/classes/XMLRPCDateParameter.php,
+ engine/classes/XMLRPCDoubleParameter.php,
+ engine/classes/XMLRPCErrorResponse.php,
+ engine/classes/XMLRPCIntParameter.php, engine/classes/XMLRPCParameter.php,
+ engine/classes/XMLRPCResponse.php, engine/classes/XMLRPCStringParameter.php,
+ engine/classes/XMLRPCStructParameter.php,
+ engine/classes/XMLRPCSuccessResponse.php, engine/lib/admin.php,
+ engine/lib/annotations.php, engine/lib/api.php, engine/lib/cache.php,
+ engine/lib/calendar.php, engine/lib/cron.php, engine/lib/export.php,
+ engine/lib/extender.php, engine/lib/filestore.php, engine/lib/group.php,
+ engine/lib/input.php, engine/lib/install.php, engine/lib/languages.php,
+ engine/lib/location.php, engine/lib/memcache.php, engine/lib/metadata.php,
+ engine/lib/metastrings.php, engine/lib/notification.php,
+ engine/lib/objects.php, engine/lib/opendd.php, engine/lib/output.php,
+ engine/lib/pagehandler.php, engine/lib/pageowner.php, engine/lib/pam.php,
+ engine/lib/plugins.php, engine/lib/relationships.php, engine/lib/river.php,
+ engine/lib/sessions.php, engine/lib/sites.php, engine/lib/statistics.php,
+ engine/lib/system_log.php, engine/lib/tags.php, engine/lib/users.php,
+ engine/lib/usersettings.php, engine/lib/version.php, engine/lib/widgets.php,
+ engine/lib/xml-rpc.php, engine/lib/xml.php,
+ engine/tests/api/entity_getter_functions.php, engine/tests/api/helpers.php,
+ engine/tests/objects/entities.php, engine/tests/objects/filestore.php,
+ engine/tests/objects/metadata.php, engine/tests/objects/objects.php,
+ engine/tests/objects/sites.php, engine/tests/objects/users.php,
+ engine/tests/regression/trac_bugs.php, engine/tests/services/api.php,
+ engine/tests/suite.php, engine/tests/test_skeleton.php, index.php,
+ install.php, install/ElggInstaller.php, languages/en.php,
+ mod/blog/actions/blog/auto_save_revision.php,
+ mod/blog/actions/blog/delete.php, mod/blog/actions/blog/save.php,
+ mod/blog/blog_lib.php, mod/blog/start.php,
+ mod/blog/views/default/blog/css.php,
+ mod/blog/views/default/blog/forms/edit.php,
+ mod/blog/views/default/blog/sidebar_edit.php,
+ mod/blog/views/default/blog/sidebar_menu.php,
+ mod/blog/views/default/blog/sidebar_revisions.php,
+ mod/blog/views/default/object/blog.php, mod/bookmarks/actions/add.php,
+ mod/bookmarks/actions/delete.php, mod/bookmarks/bookmarklet.php,
+ mod/bookmarks/start.php, .../views/default/bookmarks/bookmarklet.php,
+ mod/bookmarks/views/default/bookmarks/css.php,
+ mod/bookmarks/views/default/bookmarks/form.php,
+ mod/bookmarks/views/default/object/bookmarks.php,
+ .../views/default/widgets/bookmarks/edit.php,
+ .../views/default/widgets/bookmarks/view.php,
+ mod/bookmarks/views/rss/object/bookmarks.php, mod/captcha/captcha.php,
+ mod/captcha/languages/en.php, mod/captcha/start.php,
+ mod/captcha/views/default/captcha/css.php,
+ mod/captcha/views/default/input/captcha.php, mod/categories/actions/save.php,
+ mod/categories/listing.php, mod/categories/start.php,
+ mod/categories/views/default/categories.php,
+ mod/categories/views/default/categories/css.php,
+ .../views/default/settings/categories/edit.php, mod/crontrigger/start.php,
+ mod/defaultwidgets/actions/update.php, mod/defaultwidgets/start.php,
+ .../admin/appearance/default_dashboard_widgets.php,
+ .../admin/appearance/default_profile_widgets.php,
+ .../views/default/defaultwidgets/editor.php,
+ mod/diagnostics/actions/download.php, mod/diagnostics/index.php,
+ mod/diagnostics/languages/en.php, mod/diagnostics/start.php,
+ .../views/default/diagnostics/forms/download.php,
+ .../views/default/diagnostics/runalltests.php,
+ mod/ecml/actions/save_permissions.php, mod/ecml/ecml_functions.php,
+ mod/ecml/languages/en.php, mod/ecml/start.php,
+ mod/ecml/views/default/ecml/help.php,
+ mod/ecml/views/default/ecml/input_ext.php,
+ mod/ecml/views/default/ecml/keywords/blip.tv.php,
+ .../views/default/ecml/keywords/dailymotion.php,
+ mod/ecml/views/default/ecml/keywords/entity.php,
+ .../views/default/ecml/keywords/googlemaps.php,
+ mod/ecml/views/default/ecml/keywords/livevideo.php,
+ mod/ecml/views/default/ecml/keywords/redlasso.php,
+ .../views/default/ecml/keywords/slideshare.php,
+ mod/ecml/views/default/ecml/keywords/user_list.php,
+ mod/ecml/views/default/ecml/keywords/vimeo.php,
+ mod/ecml/views/default/ecml/keywords/youtube.php,
+ mod/ecml/views/default/settings/ecml/edit.php, mod/embed/start.php,
+ mod/embed/views/default/embed/css.php, mod/file/actions/delete.php,
+ mod/file/actions/download.php, mod/file/actions/save.php,
+ mod/file/actions/upload.php, mod/file/download.php, mod/file/edit.php,
+ mod/file/friends.php, mod/file/index.php, mod/file/languages/en.php,
+ mod/file/search.php, mod/file/start.php, mod/file/thumbnail.php,
+ mod/file/upload.php, mod/file/views/default/file/css.php,
+ mod/file/views/default/file/icon.php, mod/file/views/default/file/upload.php,
+ mod/file/views/default/object/file.php, mod/file/views/rss/object/file.php,
+ mod/file/world.php, mod/friends/start.php,
+ mod/friends/views/default/widgets/friends/edit.php,
+ mod/friends/views/default/widgets/friends/view.php,
+ mod/garbagecollector/languages/en.php, mod/garbagecollector/start.php,
+ mod/groups/actions/addtogroup.php, mod/groups/actions/edit.php,
+ mod/groups/actions/featured.php, mod/groups/actions/forums/addtopic.php,
+ mod/groups/actions/forums/deletetopic.php,
+ mod/groups/actions/groupskillinvitation.php,
+ mod/groups/actions/groupskillrequest.php, mod/groups/actions/invite.php,
+ mod/groups/actions/join.php, mod/groups/actions/joinrequest.php,
+ mod/groups/actions/leave.php, mod/groups/all.php, mod/groups/edit.php,
+ mod/groups/graphics/icon.php, mod/groups/groupprofile.php,
+ mod/groups/index.php, mod/groups/invitations.php, mod/groups/invite.php,
+ mod/groups/languages/en.php, mod/groups/membership.php,
+ mod/groups/membershipreq.php, mod/groups/new.php, mod/groups/start.php,
+ mod/groups/topicposts.php,
+ mod/groups/views/default/forms/forums/addtopic.php,
+ .../views/default/forms/forums/edittopic.php,
+ mod/groups/views/default/forms/groups/edit.php,
+ mod/groups/views/default/forms/groups/invite.php,
+ mod/groups/views/default/forum/maintopic.php,
+ mod/groups/views/default/group/default.php,
+ .../views/default/groups/activity_latest.php,
+ .../views/default/groups/closedmembership.php,
+ mod/groups/views/default/groups/css.php,
+ mod/groups/views/default/groups/grouplisting.php,
+ mod/groups/views/default/groups/groupprofile.php,
+ mod/groups/views/default/groups/icon.php,
+ mod/groups/views/default/groups/members.php,
+ mod/groups/views/default/groups/profileitems.php,
+ .../views/default/object/groupforumtopic.php,
+ .../default/widgets/group_entities_widget/edit.php,
+ .../default/widgets/group_entities_widget/view.php,
+ .../default/widgets/group_members_widget/edit.php,
+ .../default/widgets/group_members_widget/view.php,
+ mod/groups/views/rss/forum/topics.php,
+ mod/groups/views/rss/forum/viewposts.php,
+ mod/groups/views/rss/groups/profileitems.php,
+ mod/groups/views/rss/object/groupforumtopic.php, mod/htmlawed/start.php,
+ mod/invitefriends/actions/invite.php, mod/invitefriends/index.php,
+ mod/invitefriends/languages/en.php, mod/invitefriends/start.php,
+ .../views/default/invitefriends/form.php,
+ .../views/default/invitefriends/formitems.php,
+ mod/logbrowser/languages/en.php, mod/logbrowser/start.php,
+ .../views/default/admin/overview/logbrowser.php,
+ mod/logbrowser/views/default/logbrowser/css.php,
+ mod/logbrowser/views/default/object/logwrapper.php,
+ mod/logrotate/languages/en.php, mod/logrotate/start.php,
+ mod/members/index.php, mod/members/languages/en.php, mod/members/start.php,
+ mod/members/views/default/members/css.php,
+ mod/members/views/default/members/search.php,
+ mod/messageboard/actions/add.php, mod/messageboard/actions/delete.php,
+ mod/messageboard/ajax_endpoint/load.php, mod/messageboard/history.php,
+ mod/messageboard/index.php, mod/messageboard/start.php,
+ .../views/default/messageboard/css.php,
+ .../views/default/messageboard/forms/add.php,
+ .../views/default/messageboard/messageboard.php,
+ .../default/messageboard/messageboard_content.php,
+ .../views/default/widgets/messageboard/edit.php,
+ .../views/default/widgets/messageboard/view.php,
+ mod/messages/actions/delete.php, mod/messages/actions/send.php,
+ mod/messages/index.php, mod/messages/languages/en.php, mod/messages/read.php,
+ mod/messages/send.php, mod/messages/sent.php, mod/messages/start.php,
+ mod/messages/views/default/messages/css.php,
+ mod/messages/views/default/messages/forms/send.php,
+ mod/messages/views/default/messages/forms/view.php,
+ mod/messages/views/default/messages/menu.php,
+ mod/messages/views/default/messages/messages.php,
+ mod/messages/views/default/messages/topbar.php,
+ mod/messages/views/default/messages/view.php,
+ mod/notifications/actions/groupsave.php, mod/notifications/actions/save.php,
+ mod/notifications/groups.php, mod/notifications/index.php,
+ mod/notifications/start.php, .../views/default/notifications/css.php,
+ .../default/notifications/subscriptions/form.php,
+ .../notifications/subscriptions/groupsform.php,
+ mod/pages/actions/pages/editwelcome.php, mod/pages/history.php,
+ mod/pages/views/default/widgets/pages/view.php,
+ mod/profile/actions/cropicon.php,
+ mod/profile/actions/deletedefaultprofileitem.php,
+ mod/profile/actions/edit.php, mod/profile/actions/editdefault.php,
+ mod/profile/actions/editfield.php, mod/profile/actions/iconupload.php,
+ mod/profile/actions/reorder.php, mod/profile/actions/resetdefaultprofile.php,
+ mod/profile/edit.php, mod/profile/editicon.php, mod/profile/icon.php,
+ mod/profile/icondirect.php, mod/profile/index.php,
+ mod/profile/javascript.php, mod/profile/profile_lib.php,
+ mod/profile/start.php, .../default/admin/appearance/defaultprofile.php,
+ mod/profile/views/default/profile/css.php,
+ mod/profile/views/default/profile/edit.php,
+ .../views/default/profile/editdefaultprofile.php,
+ mod/profile/views/default/profile/editicon.php,
+ mod/profile/views/default/profile/hoverover.php,
+ mod/profile/views/default/profile/icon.php,
+ mod/profile/views/default/profile/javascript.php,
+ mod/profile/views/default/profile/listing.php,
+ .../views/default/profile/menu/adminlinks.php,
+ .../views/default/profile/menu/friendlinks.php,
+ mod/profile/views/default/profile/menu/links.php,
+ mod/profile/views/default/profile/metatags.php,
+ mod/profile/views/default/profile/sidebar.php,
+ mod/reportedcontent/actions/add.php, mod/reportedcontent/actions/archive.php,
+ mod/reportedcontent/actions/delete.php, mod/reportedcontent/add.php,
+ mod/reportedcontent/languages/en.php, mod/reportedcontent/start.php,
+ .../default/admin/overview/reportedcontent.php,
+ .../views/default/reportedcontent/css.php,
+ .../views/default/reportedcontent/footer_link.php,
+ .../views/default/reportedcontent/form.php,
+ .../views/default/reportedcontent/listing.php,
+ mod/riverdashboard/actions/add.php, mod/riverdashboard/actions/delete.php,
+ .../views/default/river/item/wrapper_classic.php,
+ .../views/default/riverdashboard/ecml/activity.php,
+ .../views/default/riverdashboard/sitemessage.php, mod/search/index.php,
+ mod/search/search_hooks.php, mod/search/start.php,
+ .../views/default/search/comments/entity.php,
+ mod/search/views/default/search/css.php,
+ mod/search/views/default/search/entity.php,
+ mod/search/views/default/search/gallery.php,
+ .../views/default/search/gallery_listing.php,
+ mod/search/views/default/search/layout.php,
+ mod/search/views/default/search/listing.php,
+ mod/search/views/default/search/startblurb.php,
+ mod/search/views/rss/search/comments/entity.php,
+ mod/search/views/rss/search/entity.php,
+ mod/search/views/rss/search/listing.php, mod/sitepages/languages/en.php,
+ mod/sitepages/sitepages_functions.php, mod/sitepages/start.php,
+ .../views/default/admin/site/sitepages.php,
+ .../views/default/sitepages/custom_frontpage.php,
+ .../views/default/sitepages/footer_menu.php,
+ .../views/default/sitepages/forms/edit.php,
+ .../default/sitepages/forms/editfrontsimple.php,
+ .../views/default/sitepages/forms/editmeta.php,
+ .../views/default/sitepages/keywords/sitestats.php,
+ .../views/default/sitepages/keywords/userlist.php,
+ mod/sitepages/views/default/sitepages/menu.php,
+ mod/sitepages/views/default/sitepages/metatags.php,
+ mod/thewire/actions/add.php, mod/thewire/actions/delete.php,
+ mod/thewire/add.php, mod/thewire/everyone.php, mod/thewire/index.php,
+ mod/thewire/start.php, mod/thewire/views/default/object/thewire.php,
+ mod/thewire/views/default/thewire/css.php,
+ mod/thewire/views/default/thewire/forms/add.php,
+ mod/thewire/views/default/thewire/notfound.php,
+ mod/thewire/views/default/thewire/view.php,
+ mod/thewire/views/rss/object/thewire.php,
+ .../views/rss/search/object/thewire/entity.php, mod/tinymce/start.php,
+ mod/tinymce/views/default/input/longtext.php, mod/twitter/start.php,
+ mod/twitter/views/default/twitter/css.php,
+ mod/twitter/views/default/widgets/twitter/edit.php,
+ mod/twitter/views/default/widgets/twitter/view.php, mod/zaudio/start.php,
+ .../default/file/specialcontent/audio/mp3.php,
+ .../default/file/specialcontent/audio/mpeg.php,
+ .../default/file/specialcontent/audio/mpg.php, pages/dashboard/index.php,
+ pages/dashboard/latest.php, pages/entities/index.php,
+ pages/entities/list.php, pages/friends/add.php,
+ pages/friends/collections.php, pages/friends/edit.php,
+ pages/friends/index.php, pages/friends/of.php,
+ pages/friends/pickercallback.php, pages/settings/index.php,
+ pages/settings/plugins.php, pages/settings/statistics.php,
+ pages/settings/user.php, services/api/rest_api.php,
+ services/export/handler.php, simplecache/view.php, upgrade.php, version.php,
+ views/default/account/forms/forgotten_password.php,
+ views/default/account/forms/login.php,
+ views/default/account/forms/register.php,
+ views/default/account/forms/useradd.php,
+ views/default/admin/appearance/menu_items.php,
+ views/default/admin/components/plugin.php,
+ views/default/admin/components/plugin_settings.php,
+ views/default/admin/overview.php,
+ views/default/admin/overview/numentities.php,
+ views/default/admin/overview/online.php,
+ views/default/admin/plugins/advanced.php,
+ views/default/admin/plugins/simple.php,
+ views/default/admin/site/advanced.php, views/default/admin/site/basic.php,
+ views/default/ajax/loader.php, views/default/api/output.php,
+ views/default/canvas/default.php,
+ views/default/canvas/layouts/administration.php,
+ views/default/canvas/layouts/one_column.php,
+ .../canvas/layouts/one_column_with_sidebar.php,
+ views/default/comments/forms/edit.php, views/default/dashboard/blurb.php,
+ views/default/entities/entity_list.php,
+ views/default/entities/entity_listing.php,
+ views/default/entities/gallery.php,
+ views/default/entities/gallery_listing.php, views/default/export/entity.php,
+ views/default/export/metadata.php, views/default/export/relationship.php,
+ views/default/friends/collection.php, views/default/friends/collections.php,
+ views/default/friends/collectiontabs.php,
+ views/default/friends/forms/collectionfields.php,
+ views/default/friends/forms/edit.php, views/default/friends/list.php,
+ views/default/friends/picker.php, views/default/friends/river/create.php,
+ views/default/friends/tablelist.php,
+ views/default/friends/tablelistcountupdate.php,
+ views/default/graphics/icon.php, views/default/group/default.php,
+ views/default/group/search/finishblurb.php,
+ views/default/group/search/startblurb.php, views/default/input/access.php,
+ views/default/input/autocomplete.php, views/default/input/button.php,
+ views/default/input/captcha.php, views/default/input/checkboxes.php,
+ views/default/input/datepicker.php, views/default/input/email.php,
+ views/default/input/file.php, views/default/input/form.php,
+ views/default/input/hidden.php, views/default/input/longtext.php,
+ views/default/input/password.php, views/default/input/plaintext.php,
+ views/default/input/pulldown.php, views/default/input/radio.php,
+ views/default/input/reset.php, views/default/input/securitytoken.php,
+ views/default/input/submit.php, views/default/input/tags.php,
+ views/default/input/text.php, views/default/input/url.php,
+ views/default/input/urlshortener.php, views/default/input/userpicker.php,
+ views/default/likes/forms/display.php, views/default/likes/forms/edit.php,
+ views/default/likes/forms/link.php, views/default/messages/errors/error.php,
+ views/default/messages/errors/list.php,
+ views/default/messages/exceptions/exception.php,
+ views/default/messages/list.php, views/default/messages/messages/list.php,
+ views/default/messages/messages/message.php,
+ views/default/navigation/breadcrumbs.php,
+ views/default/navigation/pagination.php,
+ views/default/navigation/sidebar_menu.php,
+ views/default/navigation/submenu_group.php,
+ views/default/navigation/submenu_item.php,
+ views/default/navigation/submenu_js.php,
+ views/default/navigation/topbar_tools.php,
+ views/default/navigation/viewtype.php,
+ .../notifications/settings/usersettings.php,
+ views/default/object/default.php, views/default/object/object.php,
+ views/default/object/plugin.php, views/default/object/widget.php,
+ views/default/output/calendar.php, views/default/output/checkboxes.php,
+ views/default/output/confirmlink.php, views/default/output/date.php,
+ views/default/output/email.php, views/default/output/iframe.php,
+ views/default/output/longtext.php, views/default/output/pulldown.php,
+ views/default/output/radio.php, views/default/output/tagcloud.php,
+ views/default/output/tags.php, views/default/output/text.php,
+ views/default/output/url.php, views/default/page_elements/content_header.php,
+ .../page_elements/content_header_member.php,
+ views/default/page_elements/elgg_footer.php,
+ views/default/page_elements/owner_block.php,
+ views/default/page_shells/admin.php, views/default/page_shells/default.php,
+ views/default/river/item/list.php, views/default/river/item/wrapper.php,
+ views/default/settings/system.php, views/default/settings/upgrading.php,
+ views/default/site/default.php, views/default/spotlight/default.php,
+ views/default/upload/upload_form_content.php, views/default/user/default.php,
+ views/default/user/search/finishblurb.php,
+ views/default/user/search/startblurb.php,
+ views/default/user/settings/default_access.php,
+ views/default/user/settings/email.php,
+ views/default/user/settings/language.php,
+ views/default/user/settings/name.php,
+ views/default/user/settings/password.php,
+ views/default/usersettings/form.php, views/default/usersettings/main.php,
+ views/default/usersettings/main_opt/plugins.php,
+ views/default/usersettings/main_opt/statistics.php,
+ views/default/usersettings/main_opt/user.php,
+ views/default/usersettings/plugins.php,
+ views/default/usersettings/plugins_opt/plugin.php,
+ views/default/usersettings/statistics.php,
+ .../usersettings/statistics_opt/numentities.php,
+ .../default/usersettings/statistics_opt/online.php,
+ views/default/usersettings/user.php, views/default/widgets/editwrapper.php,
+ views/default/widgets/wrapper.php, views/failsafe/canvas/default.php,
+ views/failsafe/messages/exceptions/exception.php,
+ views/failsafe/page_shells/default.php, views/foaf/canvas/default.php,
+ views/foaf/page_elements/contentwrapper.php,
+ views/foaf/page_shells/default.php, views/foaf/search/entity_list.php,
+ views/foaf/user/default.php, views/ical/canvas/default.php,
+ views/ical/export/entity.php, views/ical/object/default.php,
+ views/ical/pageshells/pageshell.php, views/ical/search/entity_list.php,
+ views/installation/canvas/default.php, views/installation/input/access.php,
+ views/installation/input/button.php, views/installation/input/checkboxes.php,
+ views/installation/input/form.php, views/installation/input/hidden.php,
+ views/installation/input/longtext.php, views/installation/input/password.php,
+ views/installation/input/pulldown.php, views/installation/input/reset.php,
+ views/installation/input/securitytoken.php,
+ views/installation/input/submit.php, views/installation/input/text.php,
+ views/installation/messages/errors/error.php,
+ views/installation/messages/errors/list.php,
+ views/installation/messages/list.php,
+ views/installation/messages/messages/list.php,
+ views/installation/messages/messages/message.php,
+ views/installation/page_shells/default.php, views/js/object/default.php,
+ views/js/pageshells/pageshell.php, views/js/user/default.php,
+ views/json/api/output.php, views/json/canvas/default.php,
+ views/json/export/entity.php, views/json/export/metadata.php,
+ views/json/export/relationship.php, views/json/group/default.php,
+ views/json/messages/exceptions/exception.php, views/json/object/default.php,
+ views/json/page_elements/contentwrapper.php,
+ views/json/page_shells/default.php, views/json/river/item/list.php,
+ views/json/search/entity_list.php, views/json/site/default.php,
+ views/json/user/default.php, views/opendd/canvas/default.php,
+ views/opendd/export/entity.php, views/opendd/export/metadata.php,
+ views/opendd/export/relationship.php, views/opendd/group/default.php,
+ views/opendd/messages/exceptions/exception.php,
+ views/opendd/object/default.php, views/opendd/pageshells/pageshell.php,
+ views/opendd/search/entity_list.php, views/opendd/site/default.php,
+ views/opendd/user/default.php, views/php/api/output.php,
+ views/php/canvas/default.php, views/php/export/entity.php,
+ views/php/export/metadata.php, views/php/export/relationship.php,
+ views/php/group/default.php, views/php/messages/exceptions/exception.php,
+ views/php/object/default.php, views/php/page_shells/default.php,
+ views/php/search/entity_list.php, views/php/site/default.php,
+ views/php/user/default.php, views/rss/annotation/default.php,
+ views/rss/canvas/default.php, views/rss/group/default.php,
+ views/rss/object/default.php, views/rss/page_elements/contentwrapper.php,
+ views/rss/page_shells/default.php, views/rss/river/item/list.php,
+ views/rss/search/entity_list.php, views/rss/user/default.php,
+ views/xml/api/output.php, views/xml/messages/exceptions/exception.php,
+ views/xml/page_shells/default.php, views/xml/xml-rpc/output.php: Removed
+ @license, @copyright, and @author from files. License and copyright are
+ covered by LICENSE.txt and COPYRIGHT.txt in root.
+
+2010-10-22 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * pages/entities/index.php, pages/entities/list.php: Fixes #2578 - entity
+ pages should not need call to load engine
+
+ * engine/lib/elgglib.php: Fixes #733 - events now support PHP callbacks
+
+ * engine/lib/elgglib.php: better creation of event and plugin hook
+ registration arrays
+
+ * engine/lib/elgglib.php: Fixes #2466 - split events() into register and
+ trigger functions
+
+2010-10-21 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Refs #733 - plugin hooks now support PHP callbacks
+
+
+2010-10-20 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/bookmarks/actions/add.php, mod/bookmarks/languages/en.php,
+ mod/bookmarks/views/default/object/bookmarks.php: Refs #2551 - merged [7051]
+ and [7053] into trunk
+
+ * views/default/annotation/annotate.php: Merges [7038] into trunk from 1.7
+ branch
+
+ * actions/admin/plugins/disable.php, actions/admin/plugins/disableall.php,
+ actions/admin/plugins/enable.php, actions/admin/plugins/enableall.php,
+ actions/admin/plugins/reorder.php,
+ actions/admin/plugins/simple_update_states.php: Refs #2537 - merged [7026]
+ into trunk from 1.7 branch
+
+ * engine/lib/views.php, simplecache/view.php: Refs #2410 - merged [7024]
+ into trunk from 1.7 branch
+
+ * mod/profile/views/default/profile/javascript.php,
+ .../views/default/riverdashboard/js.php: Refs #2493 - merged [7008] into
+ trunk from 1.7 branch
+
+ * engine/classes/ElggMemcache.php: Refs #2465 - merged [7007] into trunk
+ from 1.7 branch
+
+ * engine/lib/filestore.php, mod/profile/actions/iconupload.php: Refs #2499 -
+ merged [6990] into trunk from 1.7 branch
+
+ * mod/groups/views/default/river/forum/create.php: Refs #2498 - merged
+ [6982] into trunk from 1.7 branch
+
+ * mod/file/start.php, mod/file/views/default/file/groupprofile_files.php:
+ Refs #2489 - manually merged [6981] from 1.7 branch to keep group file option
+ consistent across Elgg versions
+
+ * engine/lib/database.php: Refs #2474 - merged [6976] from 1.7 branch into
+ trunk
+
+ * mod/pages/actions/pages/editwelcome.php, mod/pages/index.php,
+ mod/pages/start.php, .../views/default/forms/pages/editwelcome.php,
+ mod/pages/welcome.php, mod/pages/world.php: Refs #2496 - manually merged
+ [6975] from 1.7 branch
+
+ * mod/pages/actions/pages/edit.php: fixed stray character that got into
+ pages edit action
+
+ * install/ElggInstaller.php, views/installation/install/forms/admin.php,
+ views/installation/install/forms/database.php,
+ views/installation/install/forms/settings.php: Fixes #2570 - cannot replicate
+ issue with current_page_url() so returned to using it - fixes subdirectory
+ install issue
+
+2010-10-19 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * install/ElggInstaller.php, install/languages/en.php: added a check for
+ register globals
+
+2010-10-17 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, engine/lib/input.php, engine/start.php: Fixes
+ #2563 - setup autoload in elgglib.php so exceptions and other classes are
+ available as soon as possible
+
+ * install/ElggInstaller.php: removed exceptions.php from install boot
+ loading
+
+2010-10-14 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/actions.php, languages/en.php: Fixes #2514 - separating action
+ error messages for undefined and no action script file
+
+ * engine/lib/query.php, engine/start.php, install/ElggInstaller.php: Refs
+ #2511 - removed empty query.php lib file
+
+ * engine/lib/elgglib.php, engine/lib/output.php, engine/lib/social.php,
+ engine/start.php, install/ElggInstaller.php: Fixes #2339 - removes social
+ library and deprecates its two functions (put it output.php for lack of a
+ better location)
+
+ * engine/lib/entities.php: Fixes #2403 - adds unregister_entity_type()
+
+2010-10-14 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/exceptions.php, engine/start.php: Deprecated unnecessary
+ exceptions.php lib file
+
+ * mod/blog/classes/ElggBlog.php: Switching blog over to autoload method for
+ plugin classes
+
+ * engine/lib/elgglib.php, engine/lib/plugins.php, engine/start.php,
+ mod/blog/blog_lib.php: Fixes #2547: Plugins can now participate in
+ autoloading classes.
+
+2010-10-13 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * install/ElggInstaller.php, install/ElggRewriteTester.php,
+ install/cli/sample_installer.php, install/languages/en.php: Fixes #2556 - one
+ step install now supported with sample cli script
+
+2010-10-12 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * install/ElggInstaller.php, install/languages/en.php: Fixes #2312 -
+ checking value of arg_separator.output during install
+
+ * views/installation/input/button.php, views/installation/input/form.php,
+ views/installation/install/forms/admin.php,
+ views/installation/install/forms/database.php,
+ views/installation/install/forms/settings.php,
+ views/installation/install/forms/template.php,
+ views/installation/install/nav.php: Fixes #2522 - disabling form submission
+ after first submission
+
+ * install/ElggRewriteTester.php, install/languages/en.php: Fixes #2521 -
+ added check for old .htaccess
+
+ * install/ElggInstaller.php, install/languages/en.php, languages/en.php:
+ better handling of settings file issues during installation
+
+ * htaccess_dist: forgot to update rewrite rule in htaccess_dist
+
+2010-10-11 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * install/ElggInstaller.php, install/ElggRewriteTester.php,
+ install/languages/en.php: Pulled rewrite test out into separate class
+
+2010-10-10 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/uservalidationbyemail/start.php: Fixes #2529 for real this time. Not
+ using made up ElggEntity attributes. Added canEdit() override for user
+ validation so it can disable users after they register.
+
+ * engine/lib/entities.php: Checking for a valid entity before using its
+ methods in update_entity().
+
+ * engine/classes/ElggEntity.php: ElggEntity::disable() and enable() now
+ update the attributes so you don't have stale data on the object.
+
+2010-10-10 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php, engine/settings.example.php,
+ install/ElggInstaller.php, install/languages/en.php: using config variable
+ for minimum password length
+
+ * install/ElggInstaller.php, install/languages/en.php: better error messages
+ when there are already Elgg database tables in the database
+
+ * install/ElggInstaller.php: fixed issue when settings.php is filled out
+ before installation is started
+
+ * engine/lib/elgglib.php, engine/lib/install.php, languages/en.php,
+ views/failsafe/messages/exceptions/exception.php,
+ views/failsafe/page_shells/default.php: handling the database being down/busy
+ or an incomplete install. Also cleaned up failsafe views
+
+ * engine/lib/database.php: removed function replaced by installer
+
+ * install/ElggInstaller.php, views/installation/install/pages/complete.php:
+ finished the auto login option for the installer
+
+2010-10-09 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/register.php, install/ElggInstaller.php, install/languages/en.php:
+ pulled out special exception in registration action for first admin login
+
+2010-10-09 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/uservalidationbyemail/start.php: Fixes #2529. User validation only
+ prevents logins for disabled users to avoid conflicting with alternative
+ login plugins.
+
+2010-10-08 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * install/ElggInstaller.php, install/languages/en.php: using new email
+ validation in installer
+
+ * engine/lib/input.php, engine/lib/users.php: Fixes #2161 - using
+ filter_var() in email validation and moved is_email_address() to the input
+ library
+
+2010-10-07 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * install/ElggInstaller.php, install/languages/en.php,
+ views/installation/install/pages/complete.php: pulled more language strings
+ out of installer into language file
+
+ * _graphics/elgg_logo.png, install/css/install.css, install/install.css,
+ views/installation/install/header.php,
+ views/installation/page_shells/default.php: added Elgg logo to installer
+ screens
+
+2010-10-06 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/uservalidationbyemail/actions/validate.php,
+ mod/uservalidationbyemail/lib/functions.php,
+ .../views/default/admin/users/unvalidated.php,
+ .../uservalidationbyemail/unvalidated_user.php: Merged some fixes from the
+ 1.7.4 backport of uservalidationbyemail.
+
+2010-10-06 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/systemsettings/install.php, engine/lib/actions.php,
+ engine/lib/elgglib.php, engine/lib/install.php, engine/start.php,
+ install/languages/en.php, languages/en.php,
+ views/default/settings/install.php: removed several parts of the old
+ installer from the core
+
+ * .../messages/sanitisation/dbsettings_error.php,
+ views/failsafe/messages/sanitisation/htaccess.php,
+ views/failsafe/messages/sanitisation/settings.php,
+ views/failsafe/settings/install.php, views/failsafe/settings/system.php:
+ removed old views used in previous installer
+
+ * install/ElggInstaller.php, install/languages/en.php, languages/en.php,
+ views/installation/install/forms/template.php,
+ views/installation/page_shells/default.php: Pulled installation language
+ strings out of core language file into installer
+
+2010-10-05 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/upgrades/2010100500.php, version.php: Creating an upgrade to
+ migrate users from old oauth to new oauth_lib plugin. Closes #2532
+
+ * mod/oauth/manifest.xml, mod/oauth/start.php,
+ mod/oauth/vendors/oauth/LICENSE,
+ mod/oauth/vendors/oauth/example/server/INSTALL,
+ .../vendors/oauth/example/server/core/init.php,
+ .../example/server/core/templates/inc/footer.tpl,
+ .../example/server/core/templates/inc/header.tpl,
+ .../oauth/example/server/core/templates/index.tpl,
+ .../oauth/example/server/core/templates/logon.tpl,
+ .../example/server/core/templates/register.tpl,
+ .../vendors/oauth/example/server/www/hello.php,
+ .../vendors/oauth/example/server/www/index.php,
+ .../vendors/oauth/example/server/www/logon.php,
+ .../vendors/oauth/example/server/www/oauth.php,
+ .../vendors/oauth/example/server/www/register.php,
+ .../oauth/example/server/www/services.xrds.php,
+ mod/oauth/vendors/oauth/library/OAuthDiscovery.php,
+ mod/oauth/vendors/oauth/library/OAuthException.php,
+ mod/oauth/vendors/oauth/library/OAuthRequest.php,
+ .../vendors/oauth/library/OAuthRequestLogger.php,
+ .../vendors/oauth/library/OAuthRequestSigner.php,
+ .../vendors/oauth/library/OAuthRequestVerifier.php,
+ mod/oauth/vendors/oauth/library/OAuthRequester.php,
+ mod/oauth/vendors/oauth/library/OAuthServer.php,
+ mod/oauth/vendors/oauth/library/OAuthStore.php,
+ .../library/body/OAuthBodyContentDisposition.php,
+ .../library/body/OAuthBodyMultipartFormdata.php,
+ .../vendors/oauth/library/discovery/xrds_parse.php,
+ .../vendors/oauth/library/discovery/xrds_parse.txt,
+ .../OAuthSignatureMethod.class.php, .../OAuthSignatureMethod_HMAC_SHA1.php,
+ .../signature_method/OAuthSignatureMethod_MD5.php,
+ .../OAuthSignatureMethod_PLAINTEXT.php,
+ .../OAuthSignatureMethod_RSA_SHA1.php,
+ .../library/store/OAuthStoreAbstract.class.php,
+ .../oauth/library/store/OAuthStoreAnyMeta.php,
+ .../oauth/library/store/OAuthStoreMySQL.php,
+ .../vendors/oauth/library/store/mysql/install.php,
+ .../vendors/oauth/library/store/mysql/mysql.sql,
+ .../oauth/test/discovery/xrds-fireeagle.xrds,
+ .../oauth/test/discovery/xrds-getsatisfaction.xrds,
+ .../oauth/test/discovery/xrds-magnolia.xrds,
+ mod/oauth/vendors/oauth/test/oauth_test.php, mod/oauth_lib/manifest.xml,
+ mod/oauth_lib/start.php, mod/oauth_lib/vendors/oauth/LICENSE,
+ mod/oauth_lib/vendors/oauth/example/server/INSTALL,
+ .../vendors/oauth/example/server/core/init.php,
+ .../example/server/core/templates/inc/footer.tpl,
+ .../example/server/core/templates/inc/header.tpl,
+ .../oauth/example/server/core/templates/index.tpl,
+ .../oauth/example/server/core/templates/logon.tpl,
+ .../example/server/core/templates/register.tpl,
+ .../vendors/oauth/example/server/www/hello.php,
+ .../vendors/oauth/example/server/www/index.php,
+ .../vendors/oauth/example/server/www/logon.php,
+ .../vendors/oauth/example/server/www/oauth.php,
+ .../vendors/oauth/example/server/www/register.php,
+ .../oauth/example/server/www/services.xrds.php,
+ .../vendors/oauth/library/OAuthDiscovery.php,
+ .../vendors/oauth/library/OAuthException.php,
+ .../vendors/oauth/library/OAuthRequest.php,
+ .../vendors/oauth/library/OAuthRequestLogger.php,
+ .../vendors/oauth/library/OAuthRequestSigner.php,
+ .../vendors/oauth/library/OAuthRequestVerifier.php,
+ .../vendors/oauth/library/OAuthRequester.php,
+ .../vendors/oauth/library/OAuthServer.php,
+ mod/oauth_lib/vendors/oauth/library/OAuthStore.php,
+ .../library/body/OAuthBodyContentDisposition.php,
+ .../library/body/OAuthBodyMultipartFormdata.php,
+ .../vendors/oauth/library/discovery/xrds_parse.php,
+ .../vendors/oauth/library/discovery/xrds_parse.txt,
+ .../OAuthSignatureMethod.class.php, .../OAuthSignatureMethod_HMAC_SHA1.php,
+ .../signature_method/OAuthSignatureMethod_MD5.php,
+ .../OAuthSignatureMethod_PLAINTEXT.php,
+ .../OAuthSignatureMethod_RSA_SHA1.php,
+ .../library/store/OAuthStoreAbstract.class.php,
+ .../oauth/library/store/OAuthStoreAnyMeta.php,
+ .../oauth/library/store/OAuthStoreMySQL.php,
+ .../vendors/oauth/library/store/mysql/install.php,
+ .../vendors/oauth/library/store/mysql/mysql.sql,
+ .../oauth/test/discovery/xrds-fireeagle.xrds,
+ .../oauth/test/discovery/xrds-getsatisfaction.xrds,
+ .../oauth/test/discovery/xrds-magnolia.xrds,
+ mod/oauth_lib/vendors/oauth/test/oauth_test.php: Changing the name of the
+ oAuth plugin to reflect it's library service status. Refs #2532
+
+2010-10-05 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * install/install.css, views/installation/messages/errors/list.php,
+ views/installation/messages/messages/list.php: Fixes #2523 - errors get red
+ box during install
+
+ * install/ElggInstaller.php, views/failsafe/input/access.php,
+ views/failsafe/input/button.php, views/failsafe/input/checkboxes.php,
+ views/failsafe/input/form.php, views/failsafe/input/hidden.php,
+ views/failsafe/input/longtext.php, views/failsafe/input/password.php,
+ views/failsafe/input/pulldown.php, views/failsafe/input/reset.php,
+ views/failsafe/input/securitytoken.php, views/failsafe/input/submit.php,
+ views/failsafe/input/text.php, views/failsafe/install/footer.php,
+ views/failsafe/install/forms/admin.php,
+ views/failsafe/install/forms/database.php,
+ views/failsafe/install/forms/settings.php,
+ views/failsafe/install/forms/template.php, views/failsafe/install/header.php,
+ views/failsafe/install/nav.php, views/failsafe/install/pages/admin.php,
+ views/failsafe/install/pages/complete.php,
+ views/failsafe/install/pages/database.php,
+ views/failsafe/install/pages/requirements.php,
+ views/failsafe/install/pages/settings.php,
+ views/failsafe/install/pages/welcome.php, views/failsafe/install/sidebar.php,
+ views/failsafe/messages/errors/error.php,
+ views/failsafe/messages/errors/list.php, views/failsafe/messages/list.php,
+ views/failsafe/messages/messages/list.php,
+ views/failsafe/messages/messages/message.php,
+ views/failsafe/page_shells/install.php, views/installation/input/access.php,
+ views/installation/input/button.php, views/installation/input/checkboxes.php,
+ views/installation/input/form.php, views/installation/input/hidden.php,
+ views/installation/input/longtext.php, views/installation/input/password.php,
+ views/installation/input/pulldown.php, views/installation/input/reset.php,
+ views/installation/input/securitytoken.php,
+ views/installation/input/submit.php, views/installation/input/text.php,
+ views/installation/install/footer.php,
+ views/installation/install/forms/admin.php,
+ views/installation/install/forms/database.php,
+ views/installation/install/forms/settings.php,
+ views/installation/install/forms/template.php,
+ views/installation/install/header.php, views/installation/install/nav.php,
+ views/installation/install/pages/admin.php,
+ views/installation/install/pages/complete.php,
+ views/installation/install/pages/database.php,
+ views/installation/install/pages/requirements.php,
+ views/installation/install/pages/settings.php,
+ views/installation/install/pages/welcome.php,
+ views/installation/install/sidebar.php,
+ views/installation/messages/errors/error.php,
+ views/installation/messages/errors/list.php,
+ views/installation/messages/list.php,
+ views/installation/messages/messages/list.php,
+ views/installation/messages/messages/message.php,
+ views/installation/page_shells/default.php: moved installation to its own
+ viewtype
+
+2010-10-05 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/uservalidationbyemail/lib/functions.php,
+ .../views/default/admin/users/unvalidated.php: Using more built-in API to get
+ unvalidated users.
+
+2010-10-04 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * install/ElggInstaller.php, languages/en.php: Refs #2129: Pulls some
+ strings out into elgg_echo() in new installation.
+
+ * languages/en.php: Refs #2129: Added missing language string for new
+ installer.
+
+ * htaccess_dist: Cleaned up tabs vs spaces in htaccess_dist.
+
+ * languages/en.php: Refs #2129: Added missing language string for new
+ installer.
+
+2010-10-03 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * install/ElggInstaller.php: uservalidationbyemail is turned on by default
+ so we need to have the first admin user validated
+
+2010-10-02 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * install/ElggInstaller.php, languages/en.php: Closes #2129 - installer now
+ works with web servers besides Apache - tested with nginx
+
+2010-10-01 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/uservalidationbyemail/actions/bulk_action.php,
+ mod/uservalidationbyemail/actions/delete.php,
+ .../actions/resend_validation.php,
+ mod/uservalidationbyemail/actions/validate.php,
+ mod/uservalidationbyemail/languages/en.php,
+ mod/uservalidationbyemail/lib/functions.php,
+ mod/uservalidationbyemail/start.php,
+ .../views/default/admin/users/unvalidated.php,
+ .../uservalidationbyemail/unvalidated_user.php: Added admin page to validate,
+ resend validation requests, or delete unvalidated users.
+
+2010-10-01 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/account/forms/login_dropdown.php: Fixes #2505 - fixes the
+ registration link on the drop down login form
+
+2010-10-01 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/reportedcontent/start.php,
+ .../default/admin/overview/reportedcontent.php: Fixed incorrect echoing of an
+ array.
+
+ * simplecache/view.php: Fixes #2504. Renamed $view to $view_name in
+ simplecache/view.php to avoid var name collision with engine/start.php's
+ $view.
+
+2010-10-01 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/start.php: replacing more documentation lost in integration of
+ installer
+
+ * engine/settings.example.php, engine/start.php, htaccess_dist, install.php,
+ install/ElggInstaller.php, install/install.css, languages/en.php,
+ views/failsafe/input/password.php, views/failsafe/install/footer.php,
+ views/failsafe/install/forms/admin.php,
+ views/failsafe/install/forms/database.php,
+ views/failsafe/install/forms/settings.php,
+ views/failsafe/install/forms/template.php, views/failsafe/install/header.php,
+ views/failsafe/install/nav.php, views/failsafe/install/pages/admin.php,
+ views/failsafe/install/pages/complete.php,
+ views/failsafe/install/pages/database.php,
+ views/failsafe/install/pages/requirements.php,
+ views/failsafe/install/pages/settings.php,
+ views/failsafe/install/pages/welcome.php, views/failsafe/install/sidebar.php,
+ views/failsafe/page_shells/install.php: Refs #2129 - integrates new installer
+ code from http://github.com/cash/Elgg - does not work yet with non-Apache web
+ servers
+
+2010-09-30 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php, friends/add.php, friends/collections.php,
+ friends/edit.php, friends/index.php, friends/of.php,
+ friends/pickercallback.php, pages/friends/add.php,
+ pages/friends/collections.php, pages/friends/edit.php,
+ pages/friends/index.php, pages/friends/of.php,
+ pages/friends/pickercallback.php, views/default/friends/collection.php,
+ views/default/friends/collectiontabs.php: Closes #2344 - moves friends pages
+ into pages directory
+
+ * engine/lib/entities.php, entities/index.php, entities/list.php,
+ mod/file/start.php, pages/entities/index.php, pages/entities/list.php: Refs
+ #2344 - moves entities directory to pages directory
+
+ * admin/index.php, engine/lib/admin.php, search/index.php: Refs #2344 -
+ removed unused search and admin directories
+
+ * engine/lib/usersettings.php, pages/settings/index.php,
+ pages/settings/plugins.php, pages/settings/statistics.php,
+ pages/settings/user.php, settings/index.php, settings/plugins.php,
+ settings/statistics.php, settings/user.php: Refs #2344 - moves settings pages
+ into the pages directory
+
+ * dashboard/index.php, dashboard/latest.php, engine/lib/users.php,
+ pages/dashboard/index.php, pages/dashboard/latest.php,
+ views/default/dashboard/blurb.php: Refs #2344 - moves dashboard pages into
+ pages directory
+
+ * account/forgotten_password.php, account/register.php,
+ engine/classes/ElggSite.php, engine/lib/users.php,
+ pages/account/forgotten_password.php, pages/account/register.php,
+ views/default/account/forms/login.php,
+ views/default/account/forms/login_dropdown.php,
+ .../default/account/forms/login_walled_garden.php: Refs #2344 - move account
+ pages into pages directory
+
+2010-09-30 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/login.php, actions/register.php,
+ actions/user/requestnewpassword.php, engine/lib/sessions.php,
+ engine/lib/users.php, languages/en.php,
+ mod/uservalidationbyemail/languages/en.php,
+ mod/uservalidationbyemail/lib/functions.php,
+ mod/uservalidationbyemail/start.php: Fixes #617, #2271 User validation
+ removed from core to UserValidationByEmail plugin. Without a validation
+ plugin, users can login immediately. Fixes #2243 Removed "You have validated
+ your email" email. Users are logged in immediately after registration or
+ validating email. Refs #2409 Added register, user plugin hook that is called
+ only on self registration. Can be used to halt registration.
+
+2010-09-29 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Checking for menu items before doing a foreach().
+
+ * engine/lib/views.php: Checking for $CONFIG->view_type before accessing it
+ in elgg_is_valid_viewtype(). Prevents a notice during installation.
+
+2010-09-25 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/email/save.php: Cleaned up the file docblock.
+
+2010-09-24 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/email/save.php: Fixes #1418: Changing an email address no longer
+ invalidates an account.
+
+ * engine/classes/ElggUser.php: Refs #617: ElggUser:makeAdmin() and
+ removeAdmin() correctly set the attribute for unsaved users.
+
+ * engine/lib/api.php: Refs #2459: Merged [6927] to trunk.
+
+ * views/json/entities/entity_list.php: Merged [6923] to trunk.
+
+ * actions/register.php, languages/en.php: Refs #2454: Merged [6920] to
+ trunk.
+
+ * mod/profile/start.php: Merged [6905] to trunk.
+
+ * engine/lib/group.php: Refs #2437: Merged [6707] to trunk.
+
+ * mod/profile/start.php: Refs #2429: Merged [6889] to trunk.
+
+2010-09-23 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggObject.php, engine/classes/ElggSite.php: Refs #2450:
+ Documented ElggSite, clarified some docs on ElggObject.
+
+2010-09-22 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/APIException.php,
+ engine/classes/AccessControlQueryComponent.php,
+ engine/classes/CallException.php, engine/classes/ClassException.php,
+ engine/classes/ClassNotFoundException.php,
+ engine/classes/ConfigurationException.php, engine/classes/CronException.php,
+ engine/classes/DataFormatException.php, engine/classes/DatabaseException.php,
+ engine/classes/DeleteQueryTypeQueryComponent.php,
+ engine/classes/ElggAccess.php, engine/classes/ElggAnnotation.php,
+ engine/classes/ElggCache.php, engine/classes/ElggEntity.php,
+ engine/classes/ElggExtender.php, engine/classes/ElggFileCache.php,
+ engine/classes/ElggFilestore.php, engine/classes/ElggGroup.php,
+ engine/classes/ElggHMACCache.php, engine/classes/ElggMemcache.php,
+ engine/classes/ElggMetadata.php, engine/classes/ElggObject.php,
+ engine/classes/ElggPlugin.php, engine/classes/ElggRelationship.php,
+ engine/classes/ElggSession.php, engine/classes/ElggSharedMemoryCache.php,
+ engine/classes/ElggSite.php, engine/classes/ElggStaticVariableCache.php,
+ engine/classes/ElggUser.php, engine/classes/ElggWidget.php,
+ engine/classes/ErrorResult.php, engine/classes/ExportException.php,
+ engine/classes/Exportable.php, engine/classes/GenericResult.php,
+ engine/classes/IOException.php, engine/classes/ImportException.php,
+ engine/classes/Importable.php,
+ engine/classes/InsertQueryTypeQueryComponent.php,
+ engine/classes/InstallationException.php,
+ engine/classes/InvalidClassException.php,
+ engine/classes/InvalidParameterException.php,
+ engine/classes/JoinQueryComponent.php,
+ engine/classes/LimitOffsetQueryComponent.php, engine/classes/Locatable.php,
+ engine/classes/Loggable.php, engine/classes/NotImplementedException.php,
+ engine/classes/Notable.php, engine/classes/NotificationException.php,
+ engine/classes/ODD.php, engine/classes/ODDDocument.php,
+ engine/classes/ODDEntity.php, engine/classes/OrderQueryComponent.php,
+ engine/classes/PluginException.php, engine/classes/Query.php,
+ engine/classes/QueryComponent.php,
+ engine/classes/QueryTypeQueryComponent.php,
+ engine/classes/RegistrationException.php,
+ engine/classes/SecurityException.php,
+ engine/classes/SelectFieldQueryComponent.php,
+ engine/classes/SelectQueryTypeQueryComponent.php,
+ engine/classes/SetQueryComponent.php, engine/classes/SimpleQuery.php,
+ engine/classes/SuccessResult.php, engine/classes/TableQueryComponent.php,
+ engine/classes/UpdateQueryTypeQueryComponent.php,
+ engine/classes/WhereQueryComponent.php,
+ engine/classes/WhereSetQueryComponent.php,
+ engine/classes/WhereStaticQueryComponent.php,
+ engine/classes/XMLRPCArrayParameter.php,
+ engine/classes/XMLRPCBase64Parameter.php,
+ engine/classes/XMLRPCBoolParameter.php, engine/classes/XMLRPCCall.php,
+ engine/classes/XMLRPCDateParameter.php,
+ engine/classes/XMLRPCDoubleParameter.php,
+ engine/classes/XMLRPCErrorResponse.php,
+ engine/classes/XMLRPCIntParameter.php, engine/classes/XMLRPCParameter.php,
+ engine/classes/XMLRPCResponse.php, engine/classes/XMLRPCStringParameter.php,
+ engine/classes/XMLRPCStructParameter.php,
+ engine/classes/XMLRPCSuccessResponse.php, engine/classes/XmlElement.php:
+ Converted line endings to unix.
+
+ * engine/classes/ElggAnnotation.php, engine/classes/ElggExtender.php,
+ engine/classes/ElggPlugin.php, engine/classes/ElggRelationship.php: Refs
+ #2450: Documented a few more classes.
+
+ * engine/classes/ElggObject.php: Refs #2450: Documented ElggObject.
+
+ * engine/classes/ElggEntity.php: Refs #2450: ElggEntity documented.
+
+ * engine/lib/entities.php: Refs #2450: Changed the subpackage and fixed a
+ typo.
+
+2010-09-20 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/APIException.php,
+ engine/classes/AccessControlQueryComponent.php,
+ engine/classes/CallException.php, engine/classes/ClassException.php,
+ engine/classes/ClassNotFoundException.php,
+ engine/classes/ConfigurationException.php, engine/classes/CronException.php,
+ engine/classes/DataFormatException.php, engine/classes/DatabaseException.php,
+ engine/classes/DeleteQueryTypeQueryComponent.php,
+ engine/classes/ElggAccess.php, engine/classes/ElggAnnotation.php,
+ engine/classes/ElggCache.php, engine/classes/ElggDiskFilestore.php: Refs
+ #2450: Documented first bit of the classes.
+
+ * engine/lib/views.php: Refs #2450: Documented views.php.
+
+2010-09-17 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/actions.php: Fixes #2479: Removed unused actions init and
+ registered "error" action.
+
+ * documentation/examples/actions/manual_tokens.php,
+ engine/handlers/action_handler.php, engine/lib/actions.php: Refs #2450: Added
+ documentation for actions.
+
+2010-09-16 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/access.php: Refs #2450: Documented access.php.
+
+ * engine/lib/elgglib.php: Refs #2450: Changed preferred syntax for talking
+ about hooks / events because :s are used in some names. Now using $name,
+ $type.
+
+ * engine/lib/elgglib.php: Correct spaces issue in autoload function.
+
+ * engine/lib/entities.php: Refs #2450: Documented entities.php
+
+2010-09-15 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/handlers/action_handler.php, engine/handlers/cron_handler.php,
+ engine/handlers/pagehandler.php, engine/handlers/service_handler.php,
+ engine/handlers/xml-rpc_handler.php: Refs #2450: Documented handler files.
+
+2010-09-15 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/APIException.php,
+ engine/classes/AccessControlQueryComponent.php,
+ engine/classes/CallException.php, engine/classes/ClassException.php,
+ engine/classes/ClassNotFoundException.php,
+ engine/classes/ConfigurationException.php,
+ engine/classes/DataFormatException.php, engine/classes/DatabaseException.php,
+ engine/classes/DeleteQueryTypeQueryComponent.php,
+ engine/classes/IOException.php,
+ engine/classes/InsertQueryTypeQueryComponent.php,
+ engine/classes/InstallationException.php,
+ engine/classes/InvalidClassException.php,
+ engine/classes/InvalidParameterException.php,
+ engine/classes/JoinQueryComponent.php,
+ engine/classes/LimitOffsetQueryComponent.php,
+ engine/classes/NotImplementedException.php,
+ engine/classes/NotificationException.php,
+ engine/classes/OrderQueryComponent.php, engine/classes/PluginException.php,
+ engine/classes/Query.php, engine/classes/QueryComponent.php,
+ engine/classes/QueryTypeQueryComponent.php,
+ engine/classes/RegistrationException.php,
+ engine/classes/SecurityException.php,
+ engine/classes/SelectFieldQueryComponent.php,
+ engine/classes/SelectQueryTypeQueryComponent.php,
+ engine/classes/SetQueryComponent.php, engine/classes/SimpleQuery.php,
+ engine/classes/TableQueryComponent.php,
+ engine/classes/UpdateQueryTypeQueryComponent.php,
+ engine/classes/WhereQueryComponent.php,
+ engine/classes/WhereSetQueryComponent.php,
+ engine/classes/WhereStaticQueryComponent.php, engine/lib/access.php,
+ engine/lib/actions.php, engine/lib/admin.php, engine/lib/annotations.php,
+ engine/lib/api.php, engine/lib/cache.php, engine/lib/calendar.php,
+ engine/lib/cron.php, engine/lib/elgglib.php, engine/lib/entities.php,
+ engine/lib/exceptions.php, engine/lib/export.php, engine/lib/extender.php,
+ engine/lib/filestore.php, engine/lib/group.php, engine/lib/input.php,
+ engine/lib/install.php, engine/lib/location.php, engine/lib/memcache.php,
+ engine/lib/metadata.php, engine/lib/notification.php, engine/lib/objects.php,
+ engine/lib/opendd.php, engine/lib/plugins.php, engine/lib/query.php,
+ engine/lib/relationships.php, engine/lib/river.php, engine/lib/sessions.php,
+ engine/lib/sites.php, engine/lib/system_log.php, engine/lib/tags.php,
+ engine/lib/users.php, engine/lib/widgets.php, engine/lib/xml-rpc.php,
+ engine/lib/xml.php: Refs #2220: Pulled remaining classes out of lib files.
+ Core classes now autoloaded via __autoload().
+
+2010-09-15 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * account/forgotten_password.php, account/register.php: Refs #2450: Updated
+ docs for account/*
+
+ * engine/start.php: Refs #2450: Documented engine/start.php
+
+ * documentation/stubs/config.php: Refs @2450: Better documentation for
+ $CONFIG->view.
+
+ * documentation/stubs/config.php: Refs #2450: Added config.php stub to
+ document many of the $CONFIG vars.
+
+ * actions/admin/menu_items.php: Removing unused
+ 'menu_items_hide_toolbar_entries' config value.
+
+ * engine/lib/elgglib.php: Fixes #2366: Deprecated test_ip() and
+ is_ip_in_array().
+
+ * documentation/examples/events/advanced.php,
+ documentation/examples/events/all.php,
+ documentation/examples/events/basic.php,
+ documentation/examples/events/emit.php,
+ documentation/examples/hooks/basic.php,
+ documentation/examples/hooks/register/advanced.php,
+ documentation/examples/hooks/register/all.php,
+ documentation/examples/hooks/register/basic.php,
+ documentation/examples/hooks/register/emit.php,
+ documentation/examples/hooks/trigger/advanced.php,
+ documentation/examples/hooks/trigger/basic.php: Adding documentation and
+ examples.
+
+ * engine/lib/elgglib.php: Refs #2450: Added documentation to elgglib.
+
+2010-09-13 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/database.php: Refs #2450: Really removed the @uses and @see
+ tags.
+
+ * engine/lib/database.php: Refs #2450: Removing @see and @uses. Replaced NB:
+ with English phrases.
+
+ * actions/admin/plugins/disable.php, actions/admin/plugins/disableall.php,
+ actions/admin/plugins/enable.php, actions/admin/plugins/enableall.php,
+ actions/admin/plugins/reorder.php,
+ actions/admin/plugins/simple_update_states.php,
+ actions/admin/site/update_advanced.php, actions/admin/site/update_basic.php,
+ actions/admin/user/ban.php, actions/admin/user/delete.php,
+ actions/admin/user/makeadmin.php, actions/admin/user/removeadmin.php,
+ actions/admin/user/resetpassword.php, actions/admin/user/unban.php: Refs
+ #2450: Updated docs for core admin actions.
+
+2010-09-11 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Merged get_entities() is_numeric() fix to trunk.
+
+2010-09-09 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/settings.example.php: Updated settings.example.php docs
+
+ * engine/lib/configuration.php: Refs #2450: Documented configuration.php.
+
+2010-09-08 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/database.php: Refs #2450: Documentation added for database
+ functions.
+
+ * engine/settings.example.php: Refs #2450: Added db_disable_query_cache to
+ settings.example.php.
+
+ * engine/settings.example.php: Refs #2450: Documented db-related $CONFIG
+ vars.
+
+2010-09-07 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _css/css.php, _css/js.php: Refs #2450: Fixed some typos in css/js
+ simplecache documentation
+
+2010-09-06 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * account/forgotten_password.php, account/register.php: Refs #2450:
+ Documentation for account/ files added.
+
+ * _css/js.php: Refs #2450: Added the default viewtype in the views dir for
+ the @see tag.
+
+ * _css/css.php, _css/js.php: Refs #2450: Added documentation for js and css
+ files.
+
+2010-08-31 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php, .../views/default/profile/profile_navigation.php,
+ .../views/default/profile/profile_ownerblock.php: Refs #2434 - make view
+ failures spectacular rather than silent since they should only happen during
+ development
+
+ * mod/profile/start.php, .../views/default/profile/profile_navigation.php,
+ .../views/default/profile/profile_ownerblock.php: Refs #2434 - made the
+ profile plugin more robust to bad urls and did a little code standardization
+
+2010-08-30 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/groupprofile.php, mod/groups/views/default/group/default.php,
+ mod/groups/views/default/group/group.php: Fixes #2289: grouprofile.php now
+ uses elgg_view_entity and group/group has been renamed to group/default
+
+ * views/default/css.php, views/default/navigation/breadcrumbs.php: Refs
+ #2394: changed breadcrumbs from an id to a class
+
+2010-08-29 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/access.php, engine/lib/annotations.php,
+ engine/lib/metadata.php: Merged [6875] from 1.7 branch into trunk
+
+ * mod/captcha/start.php: merged [6876] into trunk from 1.7 branch
+
+2010-08-28 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: added escaping to
+ get_entities_from_private_setting_multi()
+
+2010-08-28 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * README.txt: Closes #2420 Trac seems to work.
+
+ * README.txt: Refs #2420 trac test.
+
+ * README.txt: Refs #2420: Trac test.
+
+ * README.txt: Refs #2420 trac test.
+
+2010-08-28 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/pageowner.php: Refs #1439 added better page owner functions
+
+2010-08-26 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/upgrades/2010062301.php: Merged [6857] into trunk
+
+2010-08-25 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/captcha/captcha.php, mod/captcha/languages/en.php,
+ mod/captcha/manifest.xml, mod/captcha/start.php,
+ mod/captcha/views/default/input/captcha.php: standardized captcha plugin
+
+2010-08-23 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/languages/en.php, .../views/default/object/groupforumtopic.php:
+ Merged [6819] into trunk from 1.7 branch
+
+ * mod/thewire/languages/en.php,
+ .../views/default/thewire/profile_status.php: merged [6828] into trunk from
+ 1.7 branch
+
+ * mod/thewire/languages/en.php,
+ mod/thewire/views/default/object/thewire.php: merged [6829] from 1.7 branch
+ into trunk
+
+ * .../views/default/object/groupforumtopic.php: merged [6832] into trunk
+ from 1.7 branch
+
+2010-08-23 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: Fixed text overflow and word-breaking for base
+ theme
+
+2010-08-22 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * CHANGES.txt, CONTRIBUTORS.txt, engine/lib/annotations.php,
+ engine/lib/entities.php, engine/lib/plugins.php,
+ engine/schema/upgrades/2009100701.sql, engine/start.php, languages/en.php,
+ mod/embed/views/default/object/default/embed.php,
+ mod/reportedcontent/languages/en.php, mod/search/start.php,
+ mod/twitter/views/default/widgets/twitter/view.php,
+ views/default/messages/errors/error.php,
+ views/default/messages/messages/message.php,
+ views/default/output/longtext.php: Merged r6812:6837 from 1.7 branch to trunk
+ (skipping some changes to plugins like groups and wire)
+
+ * CHANGES.txt, .../notifications/settings/usersettings/save.php,
+ actions/user/default_access.php, engine/lib/access.php,
+ engine/lib/actions.php, engine/lib/annotations.php, engine/lib/api.php,
+ engine/lib/cache.php, engine/lib/database.php, engine/lib/elgglib.php,
+ engine/lib/entities.php, engine/lib/extender.php, engine/lib/filestore.php,
+ engine/lib/group.php, engine/lib/install.php, engine/lib/languages.php,
+ engine/lib/location.php, engine/lib/mb_wrapper.php, engine/lib/memcache.php,
+ engine/lib/metadata.php, engine/lib/notification.php, engine/lib/objects.php,
+ engine/lib/pam.php, engine/lib/plugins.php, engine/lib/query.php,
+ engine/lib/relationships.php, engine/lib/river.php, engine/lib/sessions.php,
+ engine/lib/sites.php, engine/lib/tags.php, engine/lib/users.php,
+ engine/lib/views.php, engine/lib/widgets.php, engine/lib/xml-rpc.php,
+ languages/en.php, mod/friends/add.php, mod/friends/collections.php,
+ mod/friends/edit.php, mod/friends/languages/en.php, mod/friends/start.php,
+ mod/friends/views/default/widgets/friends/edit.php,
+ mod/friends/views/default/widgets/friends/view.php, mod/htmlawed/start.php,
+ mod/messages/start.php, .../views/default/widgets/messages/view.php,
+ mod/pages/languages/en.php, mod/riverdashboard/languages/en.php,
+ services/export/handler.php, views/default/account/forms/useradd.php,
+ views/default/friends/collection.php,
+ views/default/friends/collectiontabs.php,
+ views/default/input/autocomplete.php, views/default/page_elements/title.php,
+ views/default/usersettings/plugins_opt/plugin.php,
+ .../usersettings/statistics_opt/numentities.php,
+ .../default/usersettings/statistics_opt/online.php: Merged r6757:6810 from
+ 1.7 branch into trunk
+
+ * actions/email/save.php, actions/friends/add.php,
+ actions/friends/addcollection.php, actions/friends/deletecollection.php,
+ actions/friends/remove.php, actions/plugins/usersettings/save.php,
+ actions/user/default_access.php, actions/user/language.php,
+ actions/user/name.php, actions/user/password.php, actions/user/spotlight.php,
+ engine/lib/annotations.php, engine/lib/database.php,
+ engine/lib/filestore.php, engine/lib/group.php, engine/lib/metadata.php,
+ engine/lib/plugins.php, engine/lib/relationships.php, engine/lib/tags.php,
+ engine/tests/regression/trac_bugs.php, entities/list.php,
+ mod/categories/listing.php, mod/categories/views/default/categories/list.php,
+ mod/file/search.php, mod/groups/actions/addtogroup.php,
+ mod/groups/languages/en.php, .../views/default/groups/closedmembership.php,
+ settings/index.php, settings/plugins.php, settings/statistics.php,
+ settings/user.php, views/json/river/item/list.php: Merged r6701:6756 from 1.7
+ branch into trunk
+
+ * engine/lib/entities.php, engine/lib/relationships.php,
+ engine/lib/upgrades/2010071001.php, engine/lib/upgrades/2010071002.php,
+ mod/notifications/start.php, mod/pages/actions/pages/edit.php,
+ mod/pages/start.php, mod/pages/views/default/forms/pages/edit.php,
+ mod/profile/actions/cropicon.php, mod/profile/actions/iconupload.php,
+ mod/profile/icon.php, mod/profile/icondirect.php, mod/profile/start.php,
+ version.php: Merged r6684:6694 from 1.7 branch to trunk (pages plugin was
+ manually merged due to standardization of code in trunk but not branch)
+
+ * engine/lib/entities.php, engine/lib/metadata.php, engine/lib/output.php,
+ engine/lib/views.php, engine/lib/widgets.php, mod/file/world.php: Merged
+ r6671:6683 from 1.7 branch to trunk
+
+ * actions/admin/user/delete.php, engine/lib/elgglib.php,
+ engine/lib/entities.php, engine/lib/filestore.php, engine/lib/metadata.php,
+ engine/lib/output.php, engine/lib/version.php, engine/lib/views.php,
+ htaccess_dist, languages/en.php,
+ mod/blog/actions/blog/auto_save_revision.php,
+ mod/blog/actions/blog/delete.php, mod/blog/actions/blog/save.php,
+ mod/bookmarks/actions/delete.php,
+ mod/embed/views/default/embed/item/gallery.php,
+ mod/embed/views/default/embed/item/list.php, mod/file/actions/delete.php,
+ mod/groups/views/default/river/forum/create.php,
+ .../views/default/river/forum/topic/create.php,
+ mod/pages/actions/pages/delete.php,
+ .../views/default/river/object/page/create.php,
+ .../default/admin/overview/reportedcontent.php,
+ mod/riverdashboard/endpoint/get_comments.php,
+ .../views/default/river/item/wrapper.php, views/default/input/checkboxes.php,
+ views/default/input/radio.php, views/failsafe/input/checkboxes.php: Merged
+ r6620:6653 from 1.7 branch into trunk
+
+ * engine/lib/annotations.php, engine/lib/api.php, mod/file/start.php,
+ mod/groups/views/default/forms/groups/invite.php,
+ mod/groups/views/default/groups/groupprofile.php,
+ mod/groups/views/default/sharing/invite.php: Merged r6614:6617 from 1.7
+ branch into trunk
+
+ * engine/lib/upgrades/2010070301.php, mod/groups/actions/edit.php,
+ mod/groups/actions/join.php, mod/groups/languages/en.php,
+ mod/groups/views/default/river/group/create.php,
+ .../default/river/relationship/member/create.php, version.php: Merged [6612]
+ from 1.7 into the trunk
+
+ * engine/lib/entities.php, engine/lib/export.php, engine/lib/input.php,
+ engine/lib/metadata.php, engine/tests/objects/metadata.php,
+ .../views/default/forms/forums/edittopic.php,
+ .../views/default/object/groupforumtopic.php,
+ .../views/default/river/object/group/create.php,
+ views/foaf/page_elements/title.php, views/json/page_elements/title.php,
+ views/rss/navigation/pagination.php, views/rss/page_elements/title.php:
+ Merged [6600],[6601],[6605],[6606],[6607],[6608],[6611] from 1.7 branch into
+ trunk
+
+2010-08-21 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/output.php, mod/blog/start.php,
+ mod/blog/views/default/blog/sidebar_edit.php,
+ mod/blog/views/default/blog/sidebar_revisions.php,
+ mod/blog/views/default/object/blog.php,
+ .../views/default/river/object/blog/create.php, mod/bookmarks/start.php,
+ .../views/default/bookmarks/group_bookmarks.php,
+ mod/bookmarks/views/default/object/bookmarks.php,
+ .../default/river/object/bookmarks/create.php,
+ .../views/default/widgets/bookmarks/view.php,
+ mod/embed/views/default/embed/item/list.php,
+ mod/embed/views/default/object/file/embedlist.php, mod/file/start.php,
+ mod/file/views/default/file/groupprofile_files.php,
+ mod/file/views/default/object/file.php,
+ mod/file/views/default/widgets/filerepo/view.php, mod/groups/start.php,
+ mod/groups/views/default/forum/maintopic.php,
+ .../views/default/object/groupforumtopic.php,
+ mod/groups/views/default/river/forum/create.php,
+ .../views/default/river/forum/topic/create.php,
+ mod/groups/views/default/river/group/create.php,
+ .../default/messageboard/messageboard_content.php,
+ mod/messages/views/default/messages/messages.php,
+ mod/messages/views/default/messages/view.php,
+ mod/pages/views/default/annotation/page.php,
+ mod/pages/views/default/pages/pagelisting.php,
+ mod/pages/views/default/pages/pageprofile.php,
+ .../views/default/river/object/page/create.php,
+ .../profile/commentwall/commentwall_content.php,
+ .../river/user/default/profileiconupdate.php,
+ .../default/river/user/default/profileupdate.php,
+ .../views/default/reportedcontent/listing.php,
+ mod/riverdashboard/endpoint/get_comments.php,
+ .../views/default/river/item/wrapper.php,
+ .../views/default/riverdashboard/sitemessage.php,
+ .../views/default/search/comments/entity.php,
+ mod/search/views/default/search/entity.php,
+ mod/thewire/views/default/object/thewire.php,
+ .../views/default/river/object/thewire/create.php,
+ .../views/default/thewire/profile_status.php,
+ views/default/annotation/annotate.php,
+ views/default/annotation/annotatelike.php,
+ views/default/annotation/generic_comment.php,
+ views/default/annotation/latest_comments.php,
+ views/default/annotation/likes.php, views/default/object/default.php,
+ views/default/output/friendlytime.php, views/default/river/item/wrapper.php:
+ Merged r6586:6587 from 1.7 branch into trunk
+
+ * engine/lib/actions.php, mod/groups/views/default/forms/groups/edit.php,
+ views/default/graphics/icon.php: Merged [6573],[6574],[6582] from 1.7 branch
+ into trunk
+
+ * CODING.txt, INSTALL.txt, engine/lib/elgglib.php, engine/lib/metadata.php,
+ engine/lib/output.php, engine/lib/relationships.php,
+ engine/lib/upgrades/2010062301.php, engine/lib/upgrades/2010062302.php,
+ engine/schema/mysql.sql, engine/schema/upgrades/2010062401.sql,
+ engine/tests/api/entity_getter_functions.php, mod/groups/languages/en.php,
+ mod/groups/start.php, mod/groups/views/default/groups/grouplisting.php,
+ mod/search/search_hooks.php, mod/search/start.php, version.php,
+ views/default/friends/picker.php, views/default/input/checkboxes.php: Merged
+ r6534-6559 from 1.7 branch to trunk
+
+ * engine/lib/metadata.php, engine/lib/upgrades/2010061501.php,
+ engine/tests/api/entity_getter_functions.php, mod/search/start.php: Merging
+ r6517:6520 from 1.7 branch
+
+2010-08-09 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_shells/walled_garden.php: Updated walledgarden login to
+ wraplongnames
+
+2010-08-06 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * LICENCE.txt: cleaned up the included license, GPL v2
+
+2010-08-06 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/html_begin.php: Removed additional
+ header/extend view from HTML head. Moved metatags view to right before
+ </html>. Removed the check if the view exists since it's done in elgg_view()
+ anyway.
+
+2010-08-04 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/input.php: Added optional param to sanitise_filepath() that
+ appends a / or not. Also removes any ../s
+
+2010-08-04 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/embed/views/default/embed/css.php: Updated embed css
+
+ * views/default/page_shells/walled_garden.php: Updated walled-garden login
+ input boxes - so they are not effected by any theme running
+
+2010-08-03 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/html_begin.php: a view inserted for plugins to
+ extend
+
+2010-08-02 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/admin/overview.php: inserted a view for plugins to extend
+
+2010-07-29 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * README.txt: correcting a mistake in the readme file.
+
+2010-07-19 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/riverdashboard/nav.php: small nav tweak to the filter
+
+2010-07-19 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/riverdashboard/index.php, .../views/default/riverdashboard/nav.php:
+ Moved start conversation button
+
+2010-07-19 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/languages/en.php: missing string added
+
+ * mod/profile/index.php, .../default/profile/profile_contents/groups.php,
+ .../views/default/profile/profile_navigation.php: groups tab added to profile
+
+ * .../views/default/riverdashboard/nav.php: lang tweak on activity filter
+
+2010-07-19 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/activity.php, mod/riverdashboard/index.php,
+ .../views/default/riverdashboard/nav.php: Added interface elements for inline
+ conversation posting from activity stream
+
+2010-07-19 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/riverdashboard/index.php: added a view for plugins to extend the
+ activity view if required
+
+2010-07-18 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/activity.php: view for plugins to extend on group activity
+
+2010-07-16 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/pages/actions/pages/edit.php, mod/pages/history.php: More code cleanup
+ to pages.
+
+ * engine/lib/views.php: Added display:page plugin hook in page_draw
+ function.
+
+ * engine/lib/output.php, mod/ecml/start.php: plugin hook output:strip_tags
+ is now format:strip_tags.
+
+ * engine/lib/output.php: elgg_make_excerpt() uses elgg_strip_tags().
+
+2010-07-15 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/notification.php: Using elgg_strip_tags() for notification
+ body.
+
+ * mod/ecml/start.php: ECML removes keywords for elgg_strip_tags().
+
+ * engine/lib/output.php: Fixes #2099. Added elgg_strip_tags() to allow
+ plugins to remove extra formatting.
+
+ * mod/pages/start.php: Parsing pages views for ecml.
+
+ * mod/pages/actions/pages/delete.php, mod/pages/actions/pages/edit.php,
+ mod/pages/actions/pages/editwelcome.php, mod/pages/edit.php,
+ mod/pages/history.php, mod/pages/index.php, mod/pages/languages/en.php,
+ mod/pages/new.php, mod/pages/pagesTree.php, mod/pages/start.php,
+ mod/pages/view.php, mod/pages/views/default/annotation/icon.php,
+ mod/pages/views/default/annotation/page.php,
+ mod/pages/views/default/forms/pages/edit.php,
+ .../views/default/forms/pages/editwelcome.php,
+ .../views/default/icon/object/page/medium.php,
+ mod/pages/views/default/icon/object/page/small.php,
+ .../views/default/icon/object/page_top/medium.php,
+ .../views/default/icon/object/page_top/small.php,
+ mod/pages/views/default/object/page.php,
+ mod/pages/views/default/object/page_top.php,
+ mod/pages/views/default/pages/breadcrumbs.php,
+ mod/pages/views/default/pages/css.php,
+ .../views/default/pages/groupprofile_pages.php,
+ mod/pages/views/default/pages/metatags.php,
+ mod/pages/views/default/pages/pagegallery.php,
+ mod/pages/views/default/pages/pagelisting.php,
+ mod/pages/views/default/pages/pageprofile.php,
+ .../views/default/pages/sidebar/sidebarthis.php,
+ mod/pages/views/default/pages/sidebar/starter.php,
+ mod/pages/views/default/pages/sidebar/tree.php,
+ mod/pages/views/default/pages/sidebar/wrapper.php,
+ mod/pages/views/default/pages/welcome.php,
+ .../views/default/river/object/page/annotate.php,
+ .../views/default/river/object/page/create.php,
+ .../views/default/river/object/page/update.php,
+ .../default/river/object/page_top/annotate.php,
+ .../views/default/river/object/page_top/create.php,
+ .../views/default/river/object/page_top/update.php,
+ mod/pages/views/default/widgets/pages/edit.php,
+ mod/pages/views/default/widgets/pages/view.php, mod/pages/welcome.php,
+ mod/pages/world.php: First pass at standardizing pages.
+
+ * mod/pages/actions/pages/editwelcome.php, mod/pages/history.php,
+ mod/pages/index.php, mod/pages/languages/en.php, mod/pages/new.php,
+ mod/pages/start.php, .../views/default/forms/pages/editwelcome.php,
+ mod/pages/views/default/pages/breadcrumbs.php,
+ mod/pages/views/default/pages/css.php,
+ .../views/default/pages/groupprofile_pages.php,
+ mod/pages/views/default/pages/pageprofile.php,
+ mod/pages/views/default/pages/sidebar/tree.php,
+ mod/pages/views/default/pages/welcome.php,
+ .../views/default/river/object/page/update.php,
+ .../views/default/river/object/page_top/update.php,
+ mod/pages/views/default/widgets/pages/edit.php,
+ mod/pages/views/default/widgets/pages/view.php, mod/pages/welcome.php,
+ mod/pages/world.php: Converting spaces to tabs without the stray t.
+
+ * mod/pages/actions/pages/editwelcome.php, mod/pages/history.php,
+ mod/pages/index.php, mod/pages/languages/en.php, mod/pages/new.php,
+ mod/pages/start.php, .../views/default/forms/pages/editwelcome.php,
+ mod/pages/views/default/pages/breadcrumbs.php,
+ mod/pages/views/default/pages/css.php,
+ .../views/default/pages/groupprofile_pages.php,
+ mod/pages/views/default/pages/pageprofile.php,
+ mod/pages/views/default/pages/sidebar/tree.php,
+ mod/pages/views/default/pages/welcome.php,
+ .../views/default/river/object/page/update.php,
+ .../views/default/river/object/page_top/update.php,
+ mod/pages/views/default/widgets/pages/edit.php,
+ mod/pages/views/default/widgets/pages/view.php, mod/pages/welcome.php,
+ mod/pages/world.php: Convert spaces to tabs.
+
+ * views/default/page_elements/elgg_header.php,
+ views/default/page_elements/elgg_header_logo.php: Fixes #2284. Pulled out
+ home link in elgg_header to page_elements/elgg_header_logo. Removed
+ csseditor-specific code that caused custom logos to still appear even when
+ csseditor was disabled.
+
+2010-07-14 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../default/account/forms/login_walled_garden.php: Added ugly hack to get
+ around problems with sliding in hidden images in visual captcha on login
+ pages in webkit browsers.
+
+ * engine/lib/admin.php, engine/lib/elgglib.php, engine/lib/views.php: Fixes
+ #2195. 3rd and 4th params of page_draw() are now $page_shell and $vars.
+
+2010-07-14 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/invitefriends/languages/en.php,
+ .../views/default/invitefriends/formitems.php: Disabling friend invite form
+ when site has disabled new user registration.
+
+2010-07-14 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/actions/join.php,
+ mod/groups/views/default/groups/groupprofile.php: Admin users can join
+ groups. Don't request to join a closed group if admin.
+
+2010-07-12 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css_ie.php: Added clearfloat improvement to IE7/8 CSS
+
+ * mod/ecml/graphics/logo_bliptv.gif, mod/ecml/graphics/logo_dailymotion.gif,
+ mod/ecml/graphics/logo_googlemaps.gif, mod/ecml/graphics/logo_livevideo.gif,
+ mod/ecml/graphics/logo_redlasso.gif, mod/ecml/graphics/logo_slideshare.gif,
+ mod/ecml/graphics/logo_vimeo.gif, mod/ecml/graphics/logo_youtube.gif,
+ mod/ecml/views/default/ecml/admin/css.php,
+ .../views/default/embed/web_services/content.php,
+ mod/embed/views/default/embed/css.php: Added logos to embed web services
+ pane, and made embed nav-bar theme agnostic
+
+ * mod/embed/views/default/embed/css.php: Removed old classes from embed
+
+ * mod/ecml/graphics/url_status.png,
+ mod/ecml/views/default/ecml/admin/css.php,
+ .../views/default/embed/web_services/content.php,
+ mod/embed/views/default/embed/css.php: Updated ecml and embed with new
+ success/failure for input code.
+
+ * views/default/css.php: Added disabled class to submit_button
+
+ * .../views/default/embed/web_services/content.php: Corrected js for preview
+ pane toggleclass
+
+2010-07-10 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/messages/start.php: messages now parse ecml
+
+ * mod/groups/languages/en.php, mod/groups/start.php: ecml added to group
+ profiles
+
+2010-07-09 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/embed/views/default/embed/link.php: Web services tab now default embed
+ tab if ecml is enabled.
+
+2010-07-09 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/ecml/views/default/ecml/admin/css.php,
+ .../views/default/embed/web_services/content.php,
+ mod/embed/views/default/embed/css.php: Updated embed/ecml modal interface
+
+2010-07-09 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/sitepages/start.php: keep sitepages settings in their normal location
+
+2010-07-09 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/elgg_sprites.png: Updated elgg sprites graphic with embed modal
+ arrows
+
+ * mod/ecml/languages/en.php, mod/ecml/views/default/ecml/admin/css.php,
+ .../views/default/embed/web_services/content.php: continuation of embed modal
+ interfacing
+
+ * mod/ecml/views/default/ecml/admin/css.php,
+ .../views/default/embed/web_services/content.php,
+ mod/embed/views/default/embed/css.php: Beginnings of embed modal web-services
+ interfacing improvements.
+
+2010-07-09 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/river/group/create.php: river view tweaked
+
+ * mod/ecml/languages/en.php: missing string added
+
+2010-07-09 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/embed/languages/en.php: Added instructions.
+
+ * mod/ecml/graphics/dailymotion.png, mod/ecml/graphics/googlemaps.png,
+ mod/ecml/graphics/redlasso_1.png, mod/ecml/graphics/redlasso_2.png,
+ mod/ecml/graphics/slideshare.png, mod/ecml/graphics/vimeo.png,
+ mod/ecml/graphics/youtube.png, mod/ecml/languages/en.php, mod/ecml/start.php,
+ mod/ecml/views/default/ecml/help/blip.tv.php,
+ mod/ecml/views/default/ecml/help/dailymotion.php,
+ mod/ecml/views/default/ecml/help/googlemaps.php,
+ mod/ecml/views/default/ecml/help/livevideo.php,
+ mod/ecml/views/default/ecml/help/redlasso.php,
+ mod/ecml/views/default/ecml/help/slideshare.php,
+ mod/ecml/views/default/ecml/help/vimeo.php,
+ mod/ecml/views/default/ecml/help/youtube.php,
+ mod/ecml/views/default/ecml/keyword_help.php,
+ .../views/default/ecml/keywords/googlemaps.php,
+ mod/ecml/views/default/ecml/keywords/livevideo.php,
+ .../views/default/embed/web_services/content.php: Added ecml help for web
+ service embeds.
+
+2010-07-08 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/oauth/start.php: Adding a missed oauth library file.
+
+2010-07-08 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/embed/README.txt, mod/embed/start.php,
+ mod/embed/views/default/embed/css.php,
+ mod/embed/views/default/embed/embed.php: Sorting tabs and upload sections
+ correctly by name instead of id. Passing internal_name to all views related
+ to embedding to allow correct calls to elggEmbedInsertContent() in overrided
+ layouts.
+
+ * .../views/default/embed/web_services/content.php: Added missing important
+ view for ECML web services embed.
+
+ * mod/ecml/README.txt, mod/ecml/ecml_functions.php, mod/ecml/start.php:
+ Pulled ECML regex into a constant. Added ecml_get_keywords(),
+ ecml_parse_string(), ecml_extract_keywords(), ecml_get_keyword_info(). Added
+ callback for resolving ECML given an embed code / URL. Removed unused page
+ setup hook. Added web services support. Updated docs.
+
+2010-07-08 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/forms/forums/addtopic.php,
+ .../views/default/forms/forums/edittopic.php,
+ .../views/default/groups/invitationrequests.php: Updated group forum forms
+ with an id
+
+ * .../views/default/river/object/blog/create.php,
+ .../default/river/object/bookmarks/create.php,
+ mod/groups/views/default/river/forum/create.php,
+ .../views/default/river/forum/topic/create.php,
+ .../views/default/river/item/wrapper.php,
+ .../views/default/riverdashboard/css.php,
+ .../views/default/river/object/thewire/create.php,
+ views/default/annotation/annotate.php: Moved all river entry metadata inside
+ span (pushed onto new line) and added relevant css
+
+2010-07-07 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Added elgg_sort_3d_array_by_value(). I do this
+ often enough that a helper function will be nice.
+
+2010-07-07 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/sitepages/manifest.xml: undo the last sitepages manifest change
+
+ * mod/sitepages/manifest.xml: site pages enabled
+
+ * mod/bookmarks/views/default/bookmarks/form.php: bookmark edit form access
+ options fixed for groups
+
+2010-07-06 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/embed/languages/en.php,
+ mod/embed/views/default/embed/upload/content.php: Pulled out some language
+ strings.
+
+ * mod/file/views/default/file/embed_upload.php: Removed stray </div> that
+ broke IE and wasted 3 hours.
+
+ * mod/file/actions/upload.php, mod/file/start.php,
+ mod/file/views/default/file/embed_upload.php: Added upload support to file
+ embed.
+
+ * mod/file/start.php: Added embed support to file plugin.
+
+ * mod/embed/README.txt, mod/embed/languages/en.php, mod/embed/start.php,
+ mod/embed/views/default/embed/embed.php,
+ mod/embed/views/default/embed/link.php: Updated documentation for embed.
+ Fixed bug passing internal_name for elggEmbedInsertContent(). Showing a
+ message if no embedable items are returned.
+
+2010-07-06 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/sites.php: Adding javascript and CSS to the walled garden
+ whitelist.
+
+2010-07-06 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/embed/upload.php: Removed unused upload.php file in embed.
+
+2010-07-06 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: Updated small button hover text
+
+ * mod/groups/activity.php: Added js to groups riverdashboard view
+
+2010-07-05 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/embed/languages/en.php: small lang tweak
+
+2010-07-03 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/river/item/noaccess.php: removing stopgap from [3082] since
+ denied river items are now skipped
+
+ * views/default/river/dashboard.php: Removing another pre-1.5 view that is
+ no longer used
+
+ * views/default/river/relationship/friend/create.php: Closes #2121 - removed
+ view from pre-1.5 days
+
+ * views/default/river/wrapper.php: leftover view from pre-Elgg 1.5 days
+
+2010-07-03 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/bookmarks/start.php: removing navigation when editing for consistency
+
+2010-07-01 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/oauth/manifest.xml, mod/oauth/start.php,
+ mod/oauth/vendors/oauth/LICENSE,
+ mod/oauth/vendors/oauth/example/server/INSTALL,
+ .../vendors/oauth/example/server/core/init.php,
+ .../example/server/core/templates/inc/footer.tpl,
+ .../example/server/core/templates/inc/header.tpl,
+ .../oauth/example/server/core/templates/index.tpl,
+ .../oauth/example/server/core/templates/logon.tpl,
+ .../example/server/core/templates/register.tpl,
+ .../vendors/oauth/example/server/www/hello.php,
+ .../vendors/oauth/example/server/www/index.php,
+ .../vendors/oauth/example/server/www/logon.php,
+ .../vendors/oauth/example/server/www/oauth.php,
+ .../vendors/oauth/example/server/www/register.php,
+ .../oauth/example/server/www/services.xrds.php,
+ mod/oauth/vendors/oauth/library/OAuthDiscovery.php,
+ mod/oauth/vendors/oauth/library/OAuthException.php,
+ mod/oauth/vendors/oauth/library/OAuthRequest.php,
+ .../vendors/oauth/library/OAuthRequestLogger.php,
+ .../vendors/oauth/library/OAuthRequestSigner.php,
+ .../vendors/oauth/library/OAuthRequestVerifier.php,
+ mod/oauth/vendors/oauth/library/OAuthRequester.php,
+ mod/oauth/vendors/oauth/library/OAuthServer.php,
+ mod/oauth/vendors/oauth/library/OAuthStore.php,
+ .../library/body/OAuthBodyContentDisposition.php,
+ .../library/body/OAuthBodyMultipartFormdata.php,
+ .../vendors/oauth/library/discovery/xrds_parse.php,
+ .../vendors/oauth/library/discovery/xrds_parse.txt,
+ .../OAuthSignatureMethod.class.php, .../OAuthSignatureMethod_HMAC_SHA1.php,
+ .../signature_method/OAuthSignatureMethod_MD5.php,
+ .../OAuthSignatureMethod_PLAINTEXT.php,
+ .../OAuthSignatureMethod_RSA_SHA1.php,
+ .../library/store/OAuthStoreAbstract.class.php,
+ .../oauth/library/store/OAuthStoreAnyMeta.php,
+ .../oauth/library/store/OAuthStoreMySQL.php,
+ .../vendors/oauth/library/store/mysql/install.php,
+ .../vendors/oauth/library/store/mysql/mysql.sql,
+ .../oauth/test/discovery/xrds-fireeagle.xrds,
+ .../oauth/test/discovery/xrds-getsatisfaction.xrds,
+ .../oauth/test/discovery/xrds-magnolia.xrds,
+ mod/oauth/vendors/oauth/test/oauth_test.php: Moved oauth from plugins to core
+ since twitterservices is core and it depends upon oauth.
+
+2010-07-01 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/canvas/layouts/administration.php,
+ views/default/page_elements/html_begin_admin.php,
+ views/default/page_shells/admin.php: Updated admin area to be stand-alone.
+ Added a new html begin for admin area.
+
+2010-07-01 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/admin.php, engine/lib/views.php,
+ views/default/page_shells/admin.php: added a parameter to the page_draw
+ function so you can specify a different page shell if required.
+
+2010-06-30 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/sitepages/README.txt, mod/sitepages/start.php,
+ .../views/default/admin/site/sitepages.php,
+ .../views/default/settings/sitepages/edit.php: Updated README.txt for new
+ ECML. Moved settings to site category.
+
+ * mod/tinymce/views/default/embed/addcontentjs.php,
+ .../default/tinymce/embed_custom_insert_js.php: Embed's
+ elggEmbedInsertContent() now supports multiple losely coupled views to handle
+ custom insertion js. Plugin order no longer matters.
+
+ * mod/embed/start.php, mod/embed/views/default/embed/embed.php: Embed
+ correctly passes text area name to elggEmbedInsertContent().
+
+2010-06-30 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/sitepages/views/default/sitepages/members.php,
+ mod/sitepages/views/default/sitepages/sidebar.php,
+ mod/sitepages/views/default/sitepages/welcome.php: Interface updates to
+ sitepages
+
+ * views/default/canvas/layouts/administration.php: Added more stand-alone
+ admin area rules
+
+ * mod/groups/start.php, mod/groups/views/default/forms/groups/edit.php,
+ views/default/page_elements/elgg_sidebar.php: Added classname to group edit
+ form, divider before edit buttons, and moved the invalid number preceding the
+ classname.
+
+ * mod/members/views/default/members/search.php: Added classnames to members
+ search form
+
+ * mod/members/views/default/members/search.php: Updated wrapper with new
+ naming
+
+2010-06-29 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/output/tagcloud.php: Added wrapper to tagcloud + title (for
+ theming)
+
+ * mod/profile/views/default/profile/admin_menu.php: Added float-clear on
+ owner-block links (for theming)
+
+2010-06-28 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: Updated sidebar comments text overflow
+
+ * mod/blog/views/default/blog/css.php,
+ mod/blog/views/default/object/blog.php: Updated the layout of a blogpost
+
+ * mod/groups/views/default/forum/maintopic.php,
+ mod/groups/views/default/groups/css.php: Updated the layout of a topic post
+ within group discussions
+
+2010-06-27 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/html_begin.php,
+ views/default/page_elements/owner_block.php: Closes #2307 #2308 - encoding
+ ampersands in RSS links
+
+2010-06-26 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/river/object/thewire/create.php: The wire can now have
+ comments and likes via the activity stream.
+
+2010-06-25 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css_ie.php: Updates to IE7 css
+
+ * views/default/admin/components/plugin.php: Updated advanced plugin strings
+ markup/classes
+
+2010-06-25 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/notifications/manifest.xml: notfications default state enabled
+
+ * mod/bookmarks/manifest.xml: changed the default state for bookmarks
+
+2010-06-23 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Added optional 4th argument 'class' for
+ elgg_instanceof().
+
+ * views/default/page_elements/content_header.php: Updated documentation for
+ page_elements/content_header
+
+2010-06-23 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/navigation/tabs.php: Only displaying navigation div when
+ tabs are present.
+
+2010-06-22 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/content_header.php: Allowing plugin authors to
+ override the default tabs (filters) displayed on the content header.
+
+2010-06-22 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php, .../views/default/bookmarks/group_bookmarks.php,
+ .../views/default/groups/activity_latest.php,
+ mod/groups/views/default/groups/css.php,
+ mod/groups/views/default/groups/forum_latest.php: Added a 'view all' link to
+ group tools widgets.
+
+ * mod/groups/views/default/forum/maintopic.php,
+ mod/groups/views/default/groups/css.php: Updated groups/forums topic css
+
+2010-06-19 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/actions/forums/edittopic.php: forward to the correct place
+ after editing a topic
+
+ * mod/groups/actions/forums/addpost.php,
+ mod/groups/actions/forums/addtopic.php,
+ mod/groups/actions/forums/deletepost.php,
+ mod/groups/actions/forums/editpost.php,
+ mod/groups/actions/forums/edittopic.php, mod/groups/activity.php,
+ mod/groups/addtopic.php, mod/groups/all.php, mod/groups/discussions.php,
+ mod/groups/edit.php, mod/groups/edittopic.php, mod/groups/forum.php,
+ mod/groups/languages/en.php, mod/groups/start.php,
+ mod/groups/views/default/forms/forums/addpost.php,
+ .../views/default/forms/forums/edittopic.php,
+ mod/groups/views/default/forum/maintopic.php,
+ mod/groups/views/default/forum/topicposts.php,
+ mod/groups/views/default/forum/topics.php,
+ mod/groups/views/default/forum/viewposts.php,
+ mod/groups/views/default/groups/css.php,
+ mod/groups/views/default/groups/forum_latest.php,
+ .../views/default/object/groupforumtopic.php,
+ .../views/default/river/forum/topic/create.php: There was no point in group
+ discussions having their own comment annotations, better to use the generic
+ comments so this has been changed and a full group activity stream added. For
+ v1.8, there will need to be an upgrade script which will change
+ 'group_topic_post' -> 'generic_comment' and on all existing topics, take the
+ first annotation of type 'group_topic_post' and populate the topic's
+ description.
+
+ * .../views/default/river/item/wrapper.php: group discussion no longer needs
+ this check as it will be possible to comment on discussions from the activity
+ stream.
+
+2010-06-19 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/actions/edit.php: Ref #2294 - group creation action also needs
+ page owner set
+
+ * mod/groups/actions/addtogroup.php, mod/groups/actions/join.php,
+ mod/groups/actions/joinrequest.php, mod/groups/actions/leave.php: Refs #2294
+ - groups_write_acl_plugin_hook depends on page owner since [5782] and group
+ actions seem to end up with the group owner as the page owner. This is a
+ temporary fix for this issue. All group activity since [5782] on installs now
+ have corrupted group access lists. I have a script to fix this that I can
+ share.
+
+ * mod/groups/actions/join.php: Fixed broken join action for closed groups -
+ encoding issue on forward URL
+
+2010-06-19 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/views.php: included an option to display existing comments but
+ not show the new comment form.
+
+2010-06-18 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/upgrades/2010061501.php, engine/lib/views.php,
+ engine/start.php, mod/groups/actions/invite.php, version.php: Merged
+ r6506:6509 from 1.7 to trunk.
+
+ * engine/lib/pagehandler.php, friends/add.php, friends/collections.php,
+ friends/edit.php, friends/index.php, friends/of.php: Merged friends pages
+ fixes in r6501:6503 from 1.7 to trunk.
+
+ * engine/lib/notification.php, engine/lib/users.php, languages/en.php:
+ Merging r6497:6499 to trunk.
+
+ * mod/groups/actions/featured.php,
+ mod/groups/views/default/groups/grouplisting.php: Merged group featuring
+ fixes to trunk [6493]
+
+2010-06-16 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/pages/views/default/pages/breadcrumbs.php: Updated Pages breadcrumbs
+ markup to use generic breadcrumb style
+
+2010-06-15 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/pages/start.php: Making menu link for pages go to all pages instead of
+ owned pages.
+
+ * mod/pages/actions/pages/delete.php,
+ mod/pages/actions/pages/editwelcome.php, mod/pages/edit.php,
+ mod/pages/history.php, mod/pages/index.php, mod/pages/languages/en.php,
+ mod/pages/new.php, mod/pages/pagesTree.php, mod/pages/start.php,
+ mod/pages/view.php, mod/pages/views/default/annotation/icon.php,
+ mod/pages/views/default/annotation/page.php,
+ .../views/default/icon/object/page/medium.php,
+ mod/pages/views/default/icon/object/page/small.php,
+ .../views/default/icon/object/page_top/medium.php,
+ .../views/default/icon/object/page_top/small.php,
+ mod/pages/views/default/object/page.php,
+ mod/pages/views/default/object/page_top.php,
+ mod/pages/views/default/pages/breadcrumbs.php,
+ .../views/default/pages/groupprofile_pages.php,
+ mod/pages/views/default/pages/pagegallery.php,
+ mod/pages/views/default/pages/pagelisting.php,
+ mod/pages/views/default/pages/pageprofile.php,
+ .../views/default/pages/sidebar/sidebarthis.php,
+ mod/pages/views/default/pages/sidebar/starter.php,
+ mod/pages/views/default/pages/sidebar/tree.php,
+ mod/pages/views/default/pages/sidebar/wrapper.php,
+ mod/pages/views/default/pages/welcome.php,
+ .../views/default/river/object/page/annotate.php,
+ .../views/default/river/object/page/create.php,
+ .../views/default/river/object/page/update.php,
+ .../default/river/object/page_top/annotate.php,
+ .../views/default/river/object/page_top/create.php,
+ .../views/default/river/object/page_top/update.php,
+ mod/pages/views/default/widgets/pages/edit.php,
+ mod/pages/views/default/widgets/pages/view.php, mod/pages/welcome.php,
+ mod/pages/world.php: Quick and dirty changes to pages to work on 1.8's
+ layout.
+
+ * engine/start.php: Making sure to load all plugins when doing an upgrade to
+ pull in CSS changes and allow plugins to register for the upgrade hook.
+
+2010-06-14 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, engine/lib/views.php, engine/start.php: Merged
+ [6485] and [6486] to trunk.
+
+2010-06-13 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/navigation/pagination.php: Merged 6482 to trunk.
+
+2010-06-12 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/register.php, engine/lib/access.php, engine/lib/users.php,
+ mod/invitefriends/actions/invite.php, mod/invitefriends/languages/en.php:
+ Merged r6362:6366 from 1.7 to trunk.
+
+2010-06-11 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/views/default/object/blog.php: Always show access level when
+ listing blogs, regardless of canEdit().
+
+ * mod/blog/blog_lib.php: Removing old time_created fudging for blogs. It
+ doens't work right.
+
+ * mod/profile/languages/en.php, mod/profile/profile_lib.php,
+ mod/profile/start.php, .../views/default/profile/profile_content.php,
+ .../default/profile/profile_contents/activity.php,
+ .../profile/profile_contents/commentwall.php,
+ .../default/profile/profile_contents/details.php,
+ .../default/profile/profile_contents/friends.php,
+ .../default/profile/profile_contents/sidebar.php,
+ .../default/profile/profile_contents/twitter.php,
+ mod/profile/views/default/profile/sidebar.php: Some code cleanup on profile
+ plugin. Added wrapper view for profile content. Added ECML for profile
+ content. Moved profile/profile_content/sidebar to profile/sidebar
+
+ * mod/groups/languages/en.php: Slight code cleanup in groups langauges.
+ Added string for group discussion ECML option.
+
+ * mod/groups/start.php: Added group forums to ECML views to parse.
+
+ * mod/bookmarks/languages/en.php, mod/bookmarks/start.php,
+ .../views/default/bookmarks/bookmarklet.php: Small code cleanup on bookmarks.
+ Added better logic for determining the username to use when adding a bookmark
+ via the bookmarklet.
+
+ * .../views/default/river/item/wrapper.php: Activity stream comments now
+ show up outside of the hidden div so you can see them when on the like tab.
+
+ * mod/riverdashboard/languages/en.php,
+ .../views/default/river/item/wrapper.php,
+ .../views/default/riverdashboard/css.php,
+ .../views/default/riverdashboard/js.php: Added "Show less" on activity stream
+ comments.
+
+2010-06-11 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/embed/views/default/embed/css.php: Updates to embed interface to make
+ it theme agnostic in core
+
+ * .../views/default/riverdashboard/css.php: Updated inline comment form css
+ height - for a smoother slide animation
+
+2010-06-10 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/canvas/layouts/administration.php: Updated administration
+ area css with more styles to make it totally stand-alone
+
+ * mod/profile/views/default/profile/css.php: Small update to latest tweets
+ list style
+
+ * .../profile/profile_contents/commentwall.php: Added wrapper to profile
+ page commentwall
+
+2010-06-10 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/riverdashboard/languages/en.php, mod/riverdashboard/start.php: ECML is
+ parsed on the activity stream.
+
+2010-06-10 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/riverdashboard/endpoint/get_comments.php,
+ .../views/default/river/item/wrapper.php: Adding "twitter_anywhere" class to
+ Conversation and Riverdashboard posts.
+
+ * views/default/input/userpicker.php: Performing checks to handle empty
+ arrays and malformed values.
+
+2010-06-10 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/bookmarks/views/default/object/bookmarks.php: Moved view extend call -
+ so it's for all users (not just object owner), and added likes to bookmarks
+ (as we already have it in the activity stream)
+
+2010-06-10 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/bookmarks/group_bookmarks.php: group bookmarks now
+ provides a link to create if none exist
+
+ * mod/groups/views/default/groups/forum_latest.php: if there is no group
+ discussion, provide a link to create a topic
+
+2010-06-10 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/riverdashboard/languages/en.php,
+ .../views/default/river/item/wrapper.php,
+ .../views/default/riverdashboard/js.php: Added a 'show less' link. [Still
+ needs a js function adding to collapse list]
+
+ * mod/groups/all.php, .../views/default/groups/group_sort_menu.php: Updated
+ Groups tabs so you land on newest groups tab rather than discussion.
+
+2010-06-09 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/input/userpicker.php: Pre-populating userpicker list when
+ values are passed.
+
+2010-06-09 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/embed/views/default/embed/css.php,
+ mod/embed/views/default/embed/item/list.php,
+ mod/embed/views/default/embed/upload/content.php: Updated embed modal
+ listings with timestamp and text formatting / css.
+
+2010-06-09 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/embed/views/default/embed/embed.php,
+ mod/embed/views/default/embed/item/gallery.php,
+ mod/embed/views/default/embed/item/list.php: Embed hooks now accept icon_size
+ for displaying items in gallery / list view.
+
+ * .../views/default/riverdashboard/js.php: Removing debug call...I've been
+ very bad about this!
+
+ * mod/embed/views/default/embed/item/gallery.php: Embed default gallery list
+ uses medium icon instead of tiny.
+
+2010-06-09 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/ecml/views/default/ecml/keywords/entity.php,
+ mod/embed/views/default/embed/css.php: Updated embeded object links ui
+
+ * mod/embed/views/default/embed/css.php,
+ mod/embed/views/default/embed/layouts/gallery.php,
+ mod/embed/views/default/embed/layouts/list.php,
+ mod/embed/views/default/embed/upload/content.php: Updated embed modal with
+ wrappers & classnames for each pane
+
+ * mod/embed/views/default/embed/css.php: Updated embed modal with an initial
+ default size
+
+ * mod/ecml/views/default/ecml/keywords/entity.php: Updated ecml inline
+ embeded document links to have a classname
+
+ * views/default/css.php: Updated core css download button
+
+2010-06-08 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/profile/profile_navigation.php: Properly extending
+ profile navigation view.
+
+2010-06-08 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/riverdashboard/endpoint/get_likes.php,
+ .../views/default/river/item/wrapper.php,
+ .../views/default/riverdashboard/js.php: Ajaxified likes view on activity
+ stream.
+
+2010-06-08 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/languages/en.php, mod/groups/start.php,
+ mod/groups/views/default/groups/groupprofile.php: Cleaning up groups
+ navigation. Action buttons have replaced the submenu links, helping to
+ standardize user experience. Added a membership-dependent breadcrumb trail.
+
+2010-06-08 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/profile/profile_ownerblock.php: profile owmer block link
+ fixed
+
+2010-06-08 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/embed/views/default/embed/embed.php: removing debug output.
+
+ * mod/embed/views/default/embed/embed.php: Fixed invalid variable name that
+ caused embed to ignore custom views for embed content.
+
+ * mod/embed/views/default/embed/embed.php: Upload tab selected when
+ uploading in embed modal.
+
+2010-06-08 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: Updated documents. Removed large and small document
+ icons - we now just use the very small ones from the old filter directory.
+ Updated doc's list view and download button.
+
+ * .../views/default/riverdashboard/css.php: Updated riverdashboard more
+ comments link
+
+ * views/default/css.php, views/default/css_ie.php,
+ views/default/js/initialise_elgg.php: Updated display and position of likes
+ lists. Added js to dismiss list if a click outside the list is detected, also
+ added js so only one list is viewable at a time.
+
+2010-06-08 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/elgg_sidebar.php: Reverting [6371] because
+ Cash already took care of it.
+
+ * engine/lib/annotations.php, engine/lib/metadata.php:
+ elgg_get_entities_from_metadata() and egef_annotations() support singular ->
+ plural rewrites. (Why didn't I add this originally?!)
+
+2010-06-07 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/riverdashboard/endpoint/get_comments.php,
+ mod/riverdashboard/index.php, mod/riverdashboard/languages/en.php,
+ mod/riverdashboard/start.php, .../views/default/river/item/list.php,
+ .../views/default/river/item/wrapper.php,
+ .../views/default/riverdashboard/js.php: Minimal attempt to bring
+ riverdashboard up to code standards. Fixed comment count in +N more string.
+ Added ajax grabbing of all comments when clicking more link.
+
+ * mod/blog/actions/blog/auto_save_revision.php,
+ mod/blog/actions/blog/save.php: Added metadata 'new_post' when autosaving
+ blogs to help with river / revision logic. Autosaved blogs now correctly
+ show up in river and don't create a revision upon initial save.
+
+ * mod/blog/views/default/blog/forms/edit.php: Fix for displaying auto save
+ time. HTML was changed without relevent JS updates.
+
+2010-06-07 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/river.php, .../views/default/widgets/a_users_groups/view.php:
+ Removing deprecated calls to get_entities_from_relationship() from core code.
+
+
+2010-06-07 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/actions/edit.php: group create river action moved
+
+2010-06-07 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/forum/topicposts.php,
+ views/default/annotation/generic_comment.php: Added a classname to generic
+ comment and forum topic posts anchors - for theming purposes.
+
+2010-06-07 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/notifications/languages/en.php,
+ .../notifications/subscriptions/collections.php: Updating Notifications
+ language file.
+
+2010-06-07 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/actions/edit.php, mod/groups/languages/en.php,
+ mod/groups/views/default/river/group/create.php: creating a new group now
+ displays in the activity stream.
+
+ * mod/groups/languages/en.php,
+ .../views/default/river/forum/topic/create.php: updated the group discussion
+ river view
+
+2010-06-07 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/admin.php, views/default/admin/users/find.php: Removing user
+ "Find" from Admin area. Closes #2216
+
+2010-06-07 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php: lang tweak
+
+ * mod/groups/actions/featured.php, mod/groups/languages/en.php,
+ mod/groups/views/default/groups/grouplisting.php: featuring and unfeaturing
+ groups now works
+
+ * mod/ecml/start.php: don't extend input fields yet with ecml as it is not
+ designed as an end user tool
+
+ * mod/blog/views/default/object/blog.php: blog tags will not display the
+ class if no tags exist
+
+ * actions/likes/add.php, languages/en.php: missing lang strings added
+
+2010-06-06 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/elgg_sidebar.php: Added elgg_sidebar/extend
+ view.
+
+2010-06-04 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/embed/languages/en.php: Added missing language string for embed.
+
+ * mod/embed/start.php, mod/embed/views/default/embed/embed.php,
+ mod/embed/views/default/embed/upload/content.php: Added first loosely coupled
+ upload support to embed.
+
+2010-06-04 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/admin/users/find.php, views/default/css.php: Updating Find
+ User in the Admin section to use the livesearch user picker.
+
+2010-06-04 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/upgrades/2010060401.php,
+ .../views/default/widgets/a_users_groups/view.php, version.php: Merged
+ r6349:6351 from 1.7 to trunk.
+
+ * engine/lib/elgglib.php, engine/lib/upgrades/2010060101.php,
+ engine/start.php, .../views/default/defaultwidgets/editor.php,
+ mod/notifications/start.php, mod/profile/views/default/profile/icon.php,
+ simplecache/view.php, upgrade.php, version.php,
+ views/default/canvas/layouts/widgets.php: Merge r6301:6338 from 1.7 to trunk.
+
+
+2010-06-04 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/uservalidationbyemail/start.php: Allowing new users to validate email
+ addresses if the site is a Private Network.
+
+2010-06-04 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/forms/groups/invite.php: Added id to invite
+ friends to group form (for theming purposes).
+
+ * .../profile/profile_contents/commentwall.php: Removed profile content
+ wrapper from comment wall content.
+
+2010-06-03 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/thewire/views/default/object/thewire.php,
+ .../views/default/river/object/thewire/create.php: Updating views to no
+ longer parse usernames as this is handled directly thru Mentions.
+
+2010-06-03 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/ecml/README.txt, mod/ecml/ecml_functions.php, mod/ecml/start.php,
+ mod/ecml/views/default/ecml/keywords/entity.php: Added entity keyword to
+ ECML. (NB: The old entity keyword is now entity_list)
+
+2010-06-03 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/tinymce/views/default/input/longtext.php: Removed one unused and one
+ absent plugin from tinyMCE init that was causing problems in some browsers.
+
+2010-06-03 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * CODING.txt: Updated CODING.txt with more best practices. Simplified some
+ of the examples.
+
+ * mod/embed/views/default/embed/embed.php,
+ mod/embed/views/default/embed/item/gallery.php,
+ mod/embed/views/default/embed/layouts/gallery.php,
+ mod/embed/views/default/embed/layouts/list.php: Moved most of the logic for
+ embed viewing into a single place. Added gallery support (still no CSS).
+
+2010-06-02 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php: Mathematical calculations on annotations will
+ return false for non-existent entity subtypes.
+
+ * engine/lib/tags.php, languages/en.php, mod/tagcloud/start.php,
+ mod/tagcloud/views/default/tagcloud/extend.php,
+ views/default/output/tagcloud.php: Moving new Site Tags functionality out of
+ Tagcloud plugin and into core.
+
+ * engine/lib/annotations.php, engine/tests/objects/entities.php: Requesting
+ annotations from a non-existent subtype will now return nothing instead of
+ everything. This functionality is required to preserve context.
+
+2010-06-02 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/languages/en.php: Added missing language strings for blog.
+
+ * views/default/entities/entity_listing.php,
+ views/default/entities/gallery_listing.php: Updated documentation for
+ entity_listing and gallery_listing.
+
+ * views/default/entities/gallery_listing.php: Updated gallery_listing.php
+ view. No CSS yet.
+
+ * mod/embed/embed.php, mod/embed/views/default/embed/link.php,
+ mod/embed/views/default/embed/media.php,
+ mod/embed/views/default/embed/pagination.php,
+ mod/embed/views/default/embed/simpletype.php,
+ mod/embed/views/default/embed/tabs.php,
+ mod/embed/views/default/embed/upload.php: Removing unused views and files
+ from embed.
+
+2010-06-02 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/tagcloud/views/default/tagcloud/extend.php: Updated tagcloud link
+
+2010-06-02 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/embed/languages/en.php, mod/embed/views/default/embed/embed.php:
+ Standardized embed language file. Fixed title language string for embed
+ modal.
+
+2010-06-02 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/walled_garden_background_top.gif,
+ _graphics/walled_garden_backgroundfull_bottom.gif,
+ _graphics/walled_garden_backgroundfull_top.gif,
+ .../default/account/forms/login_walled_garden.php,
+ views/default/account/forms/register.php, views/default/css.php,
+ views/default/page_shells/walled_garden.php: Updated private network
+ (previously walled garden) login/register/lost password to be independent of
+ any theme running, and improved interface.
+
+2010-06-02 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/all.php: removed redundant view call
+
+2010-06-02 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/tagcloud/start.php: Updated all site Tagcloud to use 2column canvas.
+
+2010-06-01 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/embed/README.txt, mod/embed/embed.php, mod/embed/manifest.xml,
+ mod/embed/start.php, mod/embed/views/default/embed/addcontentjs.php,
+ mod/embed/views/default/embed/embed.php,
+ mod/embed/views/default/embed/item/list.php,
+ mod/embed/views/default/embed/js.php,
+ mod/embed/views/default/embed/layouts/gallery.php,
+ mod/embed/views/default/embed/layouts/list.php,
+ mod/embed/views/default/embed/link.php,
+ mod/embed/views/default/embed/media.php,
+ mod/embed/views/default/embed/upload.php: First pass at a loosely couple
+ embed plugin using ECML.
+
+2010-06-01 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../default/account/forms/login_walled_garden.php, views/default/css.php:
+ Adding a "Register" link to the Walled Garden login screen. This mimics
+ pre-existing "Lost Password" functionality without redirecting to an internal
+ page.
+
+2010-06-01 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/navigation/pagination.php: Pagination uses
+ elgg_get_array_value().
+
+ * engine/lib/elgglib.php: Added elgg_get_array_value() helper function.
+
+ * views/default/navigation/pagination.php: Fixed bug in detecting and using
+ baseurl in navingation/pagination view.
+
+ * views/default/entities/entity_listing.php: Updated documentation for
+ entities/entity_listing view.
+
+2010-06-01 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/tagcloud/start.php, mod/tagcloud/views/default/tagcloud/extend.php,
+ views/default/output/tagcloud.php: Extending default tagcloud view to include
+ a link to all site tags. Also fixing a bug where errant "," was prepended to
+ tag list.
+
+2010-06-01 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/input.php: get_input() defaults to NULL instead of empty
+ string. Works better with isset().
+
+ * mod/tinymce/tinymce_content.css,
+ .../themes/advanced/skins/default/content.css: Forgot to svn add
+ tinymce_content.css. Added tinymce_content.css and reverted [6300] to allow
+ for easier tinymce upgrades.
+
+2010-06-01 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/start.php, mod/blog/views/default/blog/sidebar_menu.php:
+ Restricting tag cloud display on Blogs and Documents by context.
+
+2010-06-01 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/sitepages/start.php, mod/sitepages/views/default/sitepages/css.php,
+ mod/sitepages/views/default/sitepages/sidebar.php,
+ mod/sitepages/views/default/sitepages/welcome.php: Updated Sitepages homepage
+ markup with clearfloat, content wrappers and associated css.
+
+ * mod/profile/views/default/profile/css.php: Updated avatar user-menu
+ font-style.
+
+ * .../themes/advanced/skins/default/content.css: TinyMCE default editor
+ font-size increased to match preview and publish size.
+
+2010-05-31 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/all.php: remove the filter header if not logged in
+
+ * mod/bookmarks/languages/en.php,
+ .../default/river/object/bookmarks/create.php: bookmarks river view altered
+ for groups
+
+2010-05-29 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * index.php: make sure logged out river display correctly
+
+ * engine/lib/river.php: small tweak to the new river
+
+ * mod/bookmarks/start.php: removed a breadcrumb view when on the all page
+
+ * mod/bookmarks/languages/en.php: change community to group for consistency
+
+2010-05-29 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, engine/lib/output.php: Merged r6263:6271 to trunk.
+
+
+ * engine/handlers/pagehandler.php, engine/lib/pagehandler.php,
+ mod/tinymce/views/default/input/longtext.php,
+ views/default/input/pulldown.php: Merged [6248] - [6252] into trunk.
+
+ * engine/lib/upgrades/2010052601.php, mod/groups/actions/edit.php,
+ mod/groups/views/default/forms/groups/edit.php, version.php: Merged [6223] -
+ [6228] into trunk.
+
+ * mod/groups/actions/forums/deletetopic.php,
+ mod/groups/actions/forums/editpost.php: Merging [6091] to trunk.
+
+ * mod/tinymce/languages/en.php, mod/tinymce/readme.txt,
+ mod/tinymce/start.php, mod/tinymce/tinymce/changelog.txt,
+ mod/tinymce/tinymce/jscripts/tiny_mce/langs/en.js,
+ mod/tinymce/tinymce/jscripts/tiny_mce/license.txt,
+ .../jscripts/tiny_mce/plugins/advhr/css/advhr.css,
+ .../tiny_mce/plugins/advhr/editor_plugin.js,
+ .../tiny_mce/plugins/advhr/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/advhr/js/rule.js,
+ .../tiny_mce/plugins/advhr/langs/en_dlg.js,
+ .../jscripts/tiny_mce/plugins/advhr/rule.htm,
+ .../tiny_mce/plugins/advimage/css/advimage.css,
+ .../tiny_mce/plugins/advimage/editor_plugin.js,
+ .../tiny_mce/plugins/advimage/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/advimage/image.htm,
+ .../tiny_mce/plugins/advimage/img/sample.gif,
+ .../jscripts/tiny_mce/plugins/advimage/js/image.js,
+ .../tiny_mce/plugins/advimage/langs/en_dlg.js,
+ .../tiny_mce/plugins/advlink/css/advlink.css,
+ .../tiny_mce/plugins/advlink/editor_plugin.js,
+ .../tiny_mce/plugins/advlink/editor_plugin_src.js,
+ .../tiny_mce/plugins/advlink/js/advlink.js,
+ .../tiny_mce/plugins/advlink/langs/en_dlg.js,
+ .../jscripts/tiny_mce/plugins/advlink/link.htm,
+ .../tiny_mce/plugins/autosave/editor_plugin.js,
+ .../tiny_mce/plugins/autosave/editor_plugin_src.js,
+ .../tiny_mce/plugins/bbcode/editor_plugin.js,
+ .../tiny_mce/plugins/bbcode/editor_plugin_src.js,
+ .../tiny_mce/plugins/compat2x/editor_plugin.js,
+ .../tiny_mce/plugins/compat2x/editor_plugin_src.js,
+ .../tiny_mce/plugins/contextmenu/editor_plugin.js,
+ .../plugins/contextmenu/editor_plugin_src.js,
+ .../plugins/directionality/editor_plugin.js,
+ .../plugins/directionality/editor_plugin_src.js,
+ .../tiny_mce/plugins/emotions/editor_plugin.js,
+ .../tiny_mce/plugins/emotions/editor_plugin_src.js,
+ .../tiny_mce/plugins/emotions/emotions.htm,
+ .../tiny_mce/plugins/emotions/img/smiley-cool.gif,
+ .../tiny_mce/plugins/emotions/img/smiley-cry.gif,
+ .../plugins/emotions/img/smiley-embarassed.gif,
+ .../plugins/emotions/img/smiley-foot-in-mouth.gif,
+ .../tiny_mce/plugins/emotions/img/smiley-frown.gif,
+ .../plugins/emotions/img/smiley-innocent.gif,
+ .../tiny_mce/plugins/emotions/img/smiley-kiss.gif,
+ .../plugins/emotions/img/smiley-laughing.gif,
+ .../plugins/emotions/img/smiley-money-mouth.gif,
+ .../plugins/emotions/img/smiley-sealed.gif,
+ .../tiny_mce/plugins/emotions/img/smiley-smile.gif,
+ .../plugins/emotions/img/smiley-surprised.gif,
+ .../plugins/emotions/img/smiley-tongue-out.gif,
+ .../plugins/emotions/img/smiley-undecided.gif,
+ .../tiny_mce/plugins/emotions/img/smiley-wink.gif,
+ .../tiny_mce/plugins/emotions/img/smiley-yell.gif,
+ .../tiny_mce/plugins/emotions/js/emotions.js,
+ .../tiny_mce/plugins/emotions/langs/en_dlg.js,
+ .../jscripts/tiny_mce/plugins/example/dialog.htm,
+ .../tiny_mce/plugins/example/editor_plugin.js,
+ .../tiny_mce/plugins/example/editor_plugin_src.js,
+ .../tiny_mce/plugins/example/img/example.gif,
+ .../jscripts/tiny_mce/plugins/example/js/dialog.js,
+ .../jscripts/tiny_mce/plugins/example/langs/en.js,
+ .../tiny_mce/plugins/example/langs/en_dlg.js,
+ .../tiny_mce/plugins/fullpage/css/fullpage.css,
+ .../tiny_mce/plugins/fullpage/editor_plugin.js,
+ .../tiny_mce/plugins/fullpage/editor_plugin_src.js,
+ .../tiny_mce/plugins/fullpage/fullpage.htm,
+ .../tiny_mce/plugins/fullpage/js/fullpage.js,
+ .../tiny_mce/plugins/fullpage/langs/en_dlg.js,
+ .../tiny_mce/plugins/fullscreen/editor_plugin.js,
+ .../plugins/fullscreen/editor_plugin_src.js,
+ .../tiny_mce/plugins/fullscreen/fullscreen.htm,
+ .../tiny_mce/plugins/iespell/editor_plugin.js,
+ .../tiny_mce/plugins/iespell/editor_plugin_src.js,
+ .../tiny_mce/plugins/inlinepopups/editor_plugin.js,
+ .../plugins/inlinepopups/editor_plugin_src.js,
+ .../inlinepopups/skins/clearlooks2/img/alert.gif,
+ .../inlinepopups/skins/clearlooks2/img/button.gif,
+ .../inlinepopups/skins/clearlooks2/img/buttons.gif,
+ .../inlinepopups/skins/clearlooks2/img/confirm.gif,
+ .../inlinepopups/skins/clearlooks2/img/corners.gif,
+ .../skins/clearlooks2/img/horizontal.gif,
+ .../skins/clearlooks2/img/vertical.gif,
+ .../inlinepopups/skins/clearlooks2/window.css,
+ .../tiny_mce/plugins/inlinepopups/template.htm,
+ .../plugins/insertdatetime/editor_plugin.js,
+ .../plugins/insertdatetime/editor_plugin_src.js,
+ .../tiny_mce/plugins/layer/editor_plugin.js,
+ .../tiny_mce/plugins/layer/editor_plugin_src.js,
+ .../tiny_mce/plugins/media/css/content.css,
+ .../jscripts/tiny_mce/plugins/media/css/media.css,
+ .../tiny_mce/plugins/media/editor_plugin.js,
+ .../tiny_mce/plugins/media/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/media/img/flash.gif,
+ .../tiny_mce/plugins/media/img/flv_player.swf,
+ .../tiny_mce/plugins/media/img/quicktime.gif,
+ .../tiny_mce/plugins/media/img/realmedia.gif,
+ .../tiny_mce/plugins/media/img/shockwave.gif,
+ .../jscripts/tiny_mce/plugins/media/img/trans.gif,
+ .../tiny_mce/plugins/media/img/windowsmedia.gif,
+ .../jscripts/tiny_mce/plugins/media/js/embed.js,
+ .../jscripts/tiny_mce/plugins/media/js/media.js,
+ .../tiny_mce/plugins/media/langs/en_dlg.js,
+ .../jscripts/tiny_mce/plugins/media/media.htm,
+ .../tiny_mce/plugins/nonbreaking/editor_plugin.js,
+ .../plugins/nonbreaking/editor_plugin_src.js,
+ .../tiny_mce/plugins/noneditable/editor_plugin.js,
+ .../plugins/noneditable/editor_plugin_src.js,
+ .../tiny_mce/plugins/pagebreak/css/content.css,
+ .../tiny_mce/plugins/pagebreak/editor_plugin.js,
+ .../plugins/pagebreak/editor_plugin_src.js,
+ .../tiny_mce/plugins/pagebreak/img/pagebreak.gif,
+ .../tiny_mce/plugins/pagebreak/img/trans.gif,
+ .../jscripts/tiny_mce/plugins/paste/blank.htm,
+ .../jscripts/tiny_mce/plugins/paste/css/blank.css,
+ .../tiny_mce/plugins/paste/css/pasteword.css,
+ .../tiny_mce/plugins/paste/editor_plugin.js,
+ .../tiny_mce/plugins/paste/editor_plugin_src.js,
+ .../tiny_mce/plugins/paste/js/pastetext.js,
+ .../tiny_mce/plugins/paste/js/pasteword.js,
+ .../tiny_mce/plugins/paste/langs/en_dlg.js,
+ .../jscripts/tiny_mce/plugins/paste/pastetext.htm,
+ .../jscripts/tiny_mce/plugins/paste/pasteword.htm,
+ .../tiny_mce/plugins/preview/editor_plugin.js,
+ .../tiny_mce/plugins/preview/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/preview/example.html,
+ .../tiny_mce/plugins/preview/jscripts/embed.js,
+ .../tiny_mce/plugins/print/editor_plugin.js,
+ .../tiny_mce/plugins/print/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/safari/blank.htm,
+ .../tiny_mce/plugins/safari/editor_plugin.js,
+ .../tiny_mce/plugins/safari/editor_plugin_src.js,
+ .../tiny_mce/plugins/save/editor_plugin.js,
+ .../tiny_mce/plugins/save/editor_plugin_src.js,
+ .../plugins/searchreplace/css/searchreplace.css,
+ .../plugins/searchreplace/editor_plugin.js,
+ .../plugins/searchreplace/editor_plugin_src.js,
+ .../plugins/searchreplace/js/searchreplace.js,
+ .../tiny_mce/plugins/searchreplace/langs/en_dlg.js,
+ .../plugins/searchreplace/searchreplace.htm,
+ .../tiny_mce/plugins/spellchecker/css/content.css,
+ .../tiny_mce/plugins/spellchecker/editor_plugin.js,
+ .../plugins/spellchecker/editor_plugin_src.js,
+ .../tiny_mce/plugins/spellchecker/img/wline.gif,
+ .../jscripts/tiny_mce/plugins/style/css/props.css,
+ .../tiny_mce/plugins/style/editor_plugin.js,
+ .../tiny_mce/plugins/style/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/style/js/props.js,
+ .../tiny_mce/plugins/style/langs/en_dlg.js,
+ .../jscripts/tiny_mce/plugins/style/props.htm,
+ .../jscripts/tiny_mce/plugins/table/cell.htm,
+ .../jscripts/tiny_mce/plugins/table/css/cell.css,
+ .../jscripts/tiny_mce/plugins/table/css/row.css,
+ .../jscripts/tiny_mce/plugins/table/css/table.css,
+ .../tiny_mce/plugins/table/editor_plugin.js,
+ .../tiny_mce/plugins/table/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/table/js/cell.js,
+ .../tiny_mce/plugins/table/js/merge_cells.js,
+ .../jscripts/tiny_mce/plugins/table/js/row.js,
+ .../jscripts/tiny_mce/plugins/table/js/table.js,
+ .../tiny_mce/plugins/table/langs/en_dlg.js,
+ .../tiny_mce/plugins/table/merge_cells.htm,
+ .../jscripts/tiny_mce/plugins/table/row.htm,
+ .../jscripts/tiny_mce/plugins/table/table.htm,
+ .../jscripts/tiny_mce/plugins/template/blank.htm,
+ .../tiny_mce/plugins/template/css/template.css,
+ .../tiny_mce/plugins/template/editor_plugin.js,
+ .../tiny_mce/plugins/template/editor_plugin_src.js,
+ .../tiny_mce/plugins/template/js/template.js,
+ .../tiny_mce/plugins/template/langs/en_dlg.js,
+ .../tiny_mce/plugins/template/template.htm,
+ .../tiny_mce/plugins/visualchars/editor_plugin.js,
+ .../plugins/visualchars/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/xhtmlxtras/abbr.htm,
+ .../tiny_mce/plugins/xhtmlxtras/acronym.htm,
+ .../tiny_mce/plugins/xhtmlxtras/attributes.htm,
+ .../jscripts/tiny_mce/plugins/xhtmlxtras/cite.htm,
+ .../tiny_mce/plugins/xhtmlxtras/css/attributes.css,
+ .../tiny_mce/plugins/xhtmlxtras/css/popup.css,
+ .../jscripts/tiny_mce/plugins/xhtmlxtras/del.htm,
+ .../tiny_mce/plugins/xhtmlxtras/editor_plugin.js,
+ .../plugins/xhtmlxtras/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/xhtmlxtras/ins.htm,
+ .../tiny_mce/plugins/xhtmlxtras/js/abbr.js,
+ .../tiny_mce/plugins/xhtmlxtras/js/acronym.js,
+ .../tiny_mce/plugins/xhtmlxtras/js/attributes.js,
+ .../tiny_mce/plugins/xhtmlxtras/js/cite.js,
+ .../jscripts/tiny_mce/plugins/xhtmlxtras/js/del.js,
+ .../plugins/xhtmlxtras/js/element_common.js,
+ .../jscripts/tiny_mce/plugins/xhtmlxtras/js/ins.js,
+ .../tiny_mce/plugins/xhtmlxtras/langs/en_dlg.js,
+ .../jscripts/tiny_mce/themes/advanced/about.htm,
+ .../jscripts/tiny_mce/themes/advanced/anchor.htm,
+ .../jscripts/tiny_mce/themes/advanced/charmap.htm,
+ .../tiny_mce/themes/advanced/color_picker.htm,
+ .../tiny_mce/themes/advanced/editor_template.js,
+ .../themes/advanced/editor_template_src.js,
+ .../jscripts/tiny_mce/themes/advanced/image.htm,
+ .../tiny_mce/themes/advanced/img/colorpicker.jpg,
+ .../tiny_mce/themes/advanced/img/icons.gif,
+ .../jscripts/tiny_mce/themes/advanced/js/about.js,
+ .../jscripts/tiny_mce/themes/advanced/js/anchor.js,
+ .../tiny_mce/themes/advanced/js/charmap.js,
+ .../tiny_mce/themes/advanced/js/color_picker.js,
+ .../jscripts/tiny_mce/themes/advanced/js/image.js,
+ .../jscripts/tiny_mce/themes/advanced/js/link.js,
+ .../tiny_mce/themes/advanced/js/source_editor.js,
+ .../jscripts/tiny_mce/themes/advanced/langs/en.js,
+ .../tiny_mce/themes/advanced/langs/en_dlg.js,
+ .../jscripts/tiny_mce/themes/advanced/link.htm,
+ .../themes/advanced/skins/default/content.css,
+ .../themes/advanced/skins/default/dialog.css,
+ .../themes/advanced/skins/default/img/buttons.png,
+ .../themes/advanced/skins/default/img/items.gif,
+ .../advanced/skins/default/img/menu_arrow.gif,
+ .../advanced/skins/default/img/menu_check.gif,
+ .../themes/advanced/skins/default/img/progress.gif,
+ .../themes/advanced/skins/default/img/tabs.gif,
+ .../tiny_mce/themes/advanced/skins/default/ui.css,
+ .../themes/advanced/skins/o2k7/content.css,
+ .../tiny_mce/themes/advanced/skins/o2k7/dialog.css,
+ .../themes/advanced/skins/o2k7/img/button_bg.png,
+ .../advanced/skins/o2k7/img/button_bg_black.png,
+ .../advanced/skins/o2k7/img/button_bg_silver.png,
+ .../tiny_mce/themes/advanced/skins/o2k7/ui.css,
+ .../themes/advanced/skins/o2k7/ui_black.css,
+ .../themes/advanced/skins/o2k7/ui_silver.css,
+ .../tiny_mce/themes/advanced/source_editor.htm,
+ .../tiny_mce/themes/simple/editor_template.js,
+ .../tiny_mce/themes/simple/editor_template_src.js,
+ .../jscripts/tiny_mce/themes/simple/img/icons.gif,
+ .../jscripts/tiny_mce/themes/simple/langs/en.js,
+ .../themes/simple/skins/default/content.css,
+ .../tiny_mce/themes/simple/skins/default/ui.css,
+ .../tiny_mce/themes/simple/skins/o2k7/content.css,
+ .../themes/simple/skins/o2k7/img/button_bg.png,
+ .../tiny_mce/themes/simple/skins/o2k7/ui.css,
+ mod/tinymce/tinymce/jscripts/tiny_mce/tiny_mce.js,
+ .../tinymce/jscripts/tiny_mce/tiny_mce_popup.js,
+ .../jscripts/tiny_mce/utils/editable_selects.js,
+ .../tinymce/jscripts/tiny_mce/utils/form_utils.js,
+ .../tinymce/jscripts/tiny_mce/utils/mctabs.js,
+ .../tinymce/jscripts/tiny_mce/utils/validate.js,
+ mod/tinymce/vendor/tinymce/changelog.txt,
+ .../vendor/tinymce/jscripts/tiny_mce/langs/en.js,
+ .../vendor/tinymce/jscripts/tiny_mce/license.txt,
+ .../jscripts/tiny_mce/plugins/advhr/css/advhr.css,
+ .../tiny_mce/plugins/advhr/editor_plugin.js,
+ .../tiny_mce/plugins/advhr/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/advhr/js/rule.js,
+ .../tiny_mce/plugins/advhr/langs/en_dlg.js,
+ .../jscripts/tiny_mce/plugins/advhr/rule.htm,
+ .../tiny_mce/plugins/advimage/css/advimage.css,
+ .../tiny_mce/plugins/advimage/editor_plugin.js,
+ .../tiny_mce/plugins/advimage/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/advimage/image.htm,
+ .../tiny_mce/plugins/advimage/img/sample.gif,
+ .../jscripts/tiny_mce/plugins/advimage/js/image.js,
+ .../tiny_mce/plugins/advimage/langs/en_dlg.js,
+ .../tiny_mce/plugins/advlink/css/advlink.css,
+ .../tiny_mce/plugins/advlink/editor_plugin.js,
+ .../tiny_mce/plugins/advlink/editor_plugin_src.js,
+ .../tiny_mce/plugins/advlink/js/advlink.js,
+ .../tiny_mce/plugins/advlink/langs/en_dlg.js,
+ .../jscripts/tiny_mce/plugins/advlink/link.htm,
+ .../tiny_mce/plugins/advlist/editor_plugin.js,
+ .../tiny_mce/plugins/advlist/editor_plugin_src.js,
+ .../tiny_mce/plugins/autoresize/editor_plugin.js,
+ .../plugins/autoresize/editor_plugin_src.js,
+ .../tiny_mce/plugins/autosave/editor_plugin.js,
+ .../tiny_mce/plugins/autosave/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/autosave/langs/en.js,
+ .../tiny_mce/plugins/bbcode/editor_plugin.js,
+ .../tiny_mce/plugins/bbcode/editor_plugin_src.js,
+ .../tiny_mce/plugins/contextmenu/editor_plugin.js,
+ .../plugins/contextmenu/editor_plugin_src.js,
+ .../plugins/directionality/editor_plugin.js,
+ .../plugins/directionality/editor_plugin_src.js,
+ .../tiny_mce/plugins/emotions/editor_plugin.js,
+ .../tiny_mce/plugins/emotions/editor_plugin_src.js,
+ .../tiny_mce/plugins/emotions/emotions.htm,
+ .../tiny_mce/plugins/emotions/img/smiley-cool.gif,
+ .../tiny_mce/plugins/emotions/img/smiley-cry.gif,
+ .../plugins/emotions/img/smiley-embarassed.gif,
+ .../plugins/emotions/img/smiley-foot-in-mouth.gif,
+ .../tiny_mce/plugins/emotions/img/smiley-frown.gif,
+ .../plugins/emotions/img/smiley-innocent.gif,
+ .../tiny_mce/plugins/emotions/img/smiley-kiss.gif,
+ .../plugins/emotions/img/smiley-laughing.gif,
+ .../plugins/emotions/img/smiley-money-mouth.gif,
+ .../plugins/emotions/img/smiley-sealed.gif,
+ .../tiny_mce/plugins/emotions/img/smiley-smile.gif,
+ .../plugins/emotions/img/smiley-surprised.gif,
+ .../plugins/emotions/img/smiley-tongue-out.gif,
+ .../plugins/emotions/img/smiley-undecided.gif,
+ .../tiny_mce/plugins/emotions/img/smiley-wink.gif,
+ .../tiny_mce/plugins/emotions/img/smiley-yell.gif,
+ .../tiny_mce/plugins/emotions/js/emotions.js,
+ .../tiny_mce/plugins/emotions/langs/en_dlg.js,
+ .../jscripts/tiny_mce/plugins/example/dialog.htm,
+ .../tiny_mce/plugins/example/editor_plugin.js,
+ .../tiny_mce/plugins/example/editor_plugin_src.js,
+ .../tiny_mce/plugins/example/img/example.gif,
+ .../jscripts/tiny_mce/plugins/example/js/dialog.js,
+ .../jscripts/tiny_mce/plugins/example/langs/en.js,
+ .../tiny_mce/plugins/example/langs/en_dlg.js,
+ .../tiny_mce/plugins/fullpage/css/fullpage.css,
+ .../tiny_mce/plugins/fullpage/editor_plugin.js,
+ .../tiny_mce/plugins/fullpage/editor_plugin_src.js,
+ .../tiny_mce/plugins/fullpage/fullpage.htm,
+ .../tiny_mce/plugins/fullpage/js/fullpage.js,
+ .../tiny_mce/plugins/fullpage/langs/en_dlg.js,
+ .../tiny_mce/plugins/fullscreen/editor_plugin.js,
+ .../plugins/fullscreen/editor_plugin_src.js,
+ .../tiny_mce/plugins/fullscreen/fullscreen.htm,
+ .../tiny_mce/plugins/iespell/editor_plugin.js,
+ .../tiny_mce/plugins/iespell/editor_plugin_src.js,
+ .../tiny_mce/plugins/inlinepopups/editor_plugin.js,
+ .../plugins/inlinepopups/editor_plugin_src.js,
+ .../inlinepopups/skins/clearlooks2/img/alert.gif,
+ .../inlinepopups/skins/clearlooks2/img/button.gif,
+ .../inlinepopups/skins/clearlooks2/img/buttons.gif,
+ .../inlinepopups/skins/clearlooks2/img/confirm.gif,
+ .../inlinepopups/skins/clearlooks2/img/corners.gif,
+ .../skins/clearlooks2/img/horizontal.gif,
+ .../skins/clearlooks2/img/vertical.gif,
+ .../inlinepopups/skins/clearlooks2/window.css,
+ .../tiny_mce/plugins/inlinepopups/template.htm,
+ .../plugins/insertdatetime/editor_plugin.js,
+ .../plugins/insertdatetime/editor_plugin_src.js,
+ .../tiny_mce/plugins/layer/editor_plugin.js,
+ .../tiny_mce/plugins/layer/editor_plugin_src.js,
+ .../tiny_mce/plugins/legacyoutput/editor_plugin.js,
+ .../plugins/legacyoutput/editor_plugin_src.js,
+ .../tiny_mce/plugins/media/css/content.css,
+ .../jscripts/tiny_mce/plugins/media/css/media.css,
+ .../tiny_mce/plugins/media/editor_plugin.js,
+ .../tiny_mce/plugins/media/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/media/img/flash.gif,
+ .../tiny_mce/plugins/media/img/flv_player.swf,
+ .../tiny_mce/plugins/media/img/quicktime.gif,
+ .../tiny_mce/plugins/media/img/realmedia.gif,
+ .../tiny_mce/plugins/media/img/shockwave.gif,
+ .../jscripts/tiny_mce/plugins/media/img/trans.gif,
+ .../tiny_mce/plugins/media/img/windowsmedia.gif,
+ .../jscripts/tiny_mce/plugins/media/js/embed.js,
+ .../jscripts/tiny_mce/plugins/media/js/media.js,
+ .../tiny_mce/plugins/media/langs/en_dlg.js,
+ .../jscripts/tiny_mce/plugins/media/media.htm,
+ .../tiny_mce/plugins/nonbreaking/editor_plugin.js,
+ .../plugins/nonbreaking/editor_plugin_src.js,
+ .../tiny_mce/plugins/noneditable/editor_plugin.js,
+ .../plugins/noneditable/editor_plugin_src.js,
+ .../tiny_mce/plugins/pagebreak/css/content.css,
+ .../tiny_mce/plugins/pagebreak/editor_plugin.js,
+ .../plugins/pagebreak/editor_plugin_src.js,
+ .../tiny_mce/plugins/pagebreak/img/pagebreak.gif,
+ .../tiny_mce/plugins/pagebreak/img/trans.gif,
+ .../tiny_mce/plugins/paste/editor_plugin.js,
+ .../tiny_mce/plugins/paste/editor_plugin_src.js,
+ .../tiny_mce/plugins/paste/js/pastetext.js,
+ .../tiny_mce/plugins/paste/js/pasteword.js,
+ .../tiny_mce/plugins/paste/langs/en_dlg.js,
+ .../jscripts/tiny_mce/plugins/paste/pastetext.htm,
+ .../jscripts/tiny_mce/plugins/paste/pasteword.htm,
+ .../tiny_mce/plugins/preview/editor_plugin.js,
+ .../tiny_mce/plugins/preview/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/preview/example.html,
+ .../tiny_mce/plugins/preview/jscripts/embed.js,
+ .../jscripts/tiny_mce/plugins/preview/preview.html,
+ .../tiny_mce/plugins/print/editor_plugin.js,
+ .../tiny_mce/plugins/print/editor_plugin_src.js,
+ .../tiny_mce/plugins/save/editor_plugin.js,
+ .../tiny_mce/plugins/save/editor_plugin_src.js,
+ .../plugins/searchreplace/css/searchreplace.css,
+ .../plugins/searchreplace/editor_plugin.js,
+ .../plugins/searchreplace/editor_plugin_src.js,
+ .../plugins/searchreplace/js/searchreplace.js,
+ .../tiny_mce/plugins/searchreplace/langs/en_dlg.js,
+ .../plugins/searchreplace/searchreplace.htm,
+ .../tiny_mce/plugins/spellchecker/css/content.css,
+ .../tiny_mce/plugins/spellchecker/editor_plugin.js,
+ .../plugins/spellchecker/editor_plugin_src.js,
+ .../tiny_mce/plugins/spellchecker/img/wline.gif,
+ .../jscripts/tiny_mce/plugins/style/css/props.css,
+ .../tiny_mce/plugins/style/editor_plugin.js,
+ .../tiny_mce/plugins/style/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/style/js/props.js,
+ .../tiny_mce/plugins/style/langs/en_dlg.js,
+ .../jscripts/tiny_mce/plugins/style/props.htm,
+ .../tiny_mce/plugins/tabfocus/editor_plugin.js,
+ .../tiny_mce/plugins/tabfocus/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/table/cell.htm,
+ .../jscripts/tiny_mce/plugins/table/css/cell.css,
+ .../jscripts/tiny_mce/plugins/table/css/row.css,
+ .../jscripts/tiny_mce/plugins/table/css/table.css,
+ .../tiny_mce/plugins/table/editor_plugin.js,
+ .../tiny_mce/plugins/table/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/table/js/cell.js,
+ .../tiny_mce/plugins/table/js/merge_cells.js,
+ .../jscripts/tiny_mce/plugins/table/js/row.js,
+ .../jscripts/tiny_mce/plugins/table/js/table.js,
+ .../tiny_mce/plugins/table/langs/en_dlg.js,
+ .../tiny_mce/plugins/table/merge_cells.htm,
+ .../jscripts/tiny_mce/plugins/table/row.htm,
+ .../jscripts/tiny_mce/plugins/table/table.htm,
+ .../jscripts/tiny_mce/plugins/template/blank.htm,
+ .../tiny_mce/plugins/template/css/template.css,
+ .../tiny_mce/plugins/template/editor_plugin.js,
+ .../tiny_mce/plugins/template/editor_plugin_src.js,
+ .../tiny_mce/plugins/template/js/template.js,
+ .../tiny_mce/plugins/template/langs/en_dlg.js,
+ .../tiny_mce/plugins/template/template.htm,
+ .../tiny_mce/plugins/visualchars/editor_plugin.js,
+ .../plugins/visualchars/editor_plugin_src.js,
+ .../tiny_mce/plugins/wordcount/editor_plugin.js,
+ .../plugins/wordcount/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/xhtmlxtras/abbr.htm,
+ .../tiny_mce/plugins/xhtmlxtras/acronym.htm,
+ .../tiny_mce/plugins/xhtmlxtras/attributes.htm,
+ .../jscripts/tiny_mce/plugins/xhtmlxtras/cite.htm,
+ .../tiny_mce/plugins/xhtmlxtras/css/attributes.css,
+ .../tiny_mce/plugins/xhtmlxtras/css/popup.css,
+ .../jscripts/tiny_mce/plugins/xhtmlxtras/del.htm,
+ .../tiny_mce/plugins/xhtmlxtras/editor_plugin.js,
+ .../plugins/xhtmlxtras/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/xhtmlxtras/ins.htm,
+ .../tiny_mce/plugins/xhtmlxtras/js/abbr.js,
+ .../tiny_mce/plugins/xhtmlxtras/js/acronym.js,
+ .../tiny_mce/plugins/xhtmlxtras/js/attributes.js,
+ .../tiny_mce/plugins/xhtmlxtras/js/cite.js,
+ .../jscripts/tiny_mce/plugins/xhtmlxtras/js/del.js,
+ .../plugins/xhtmlxtras/js/element_common.js,
+ .../jscripts/tiny_mce/plugins/xhtmlxtras/js/ins.js,
+ .../tiny_mce/plugins/xhtmlxtras/langs/en_dlg.js,
+ .../jscripts/tiny_mce/themes/advanced/about.htm,
+ .../jscripts/tiny_mce/themes/advanced/anchor.htm,
+ .../jscripts/tiny_mce/themes/advanced/charmap.htm,
+ .../tiny_mce/themes/advanced/color_picker.htm,
+ .../tiny_mce/themes/advanced/editor_template.js,
+ .../themes/advanced/editor_template_src.js,
+ .../jscripts/tiny_mce/themes/advanced/image.htm,
+ .../tiny_mce/themes/advanced/img/colorpicker.jpg,
+ .../tiny_mce/themes/advanced/img/icons.gif,
+ .../jscripts/tiny_mce/themes/advanced/js/about.js,
+ .../jscripts/tiny_mce/themes/advanced/js/anchor.js,
+ .../tiny_mce/themes/advanced/js/charmap.js,
+ .../tiny_mce/themes/advanced/js/color_picker.js,
+ .../jscripts/tiny_mce/themes/advanced/js/image.js,
+ .../jscripts/tiny_mce/themes/advanced/js/link.js,
+ .../tiny_mce/themes/advanced/js/source_editor.js,
+ .../jscripts/tiny_mce/themes/advanced/langs/en.js,
+ .../tiny_mce/themes/advanced/langs/en_dlg.js,
+ .../jscripts/tiny_mce/themes/advanced/link.htm,
+ .../themes/advanced/skins/default/content.css,
+ .../themes/advanced/skins/default/dialog.css,
+ .../themes/advanced/skins/default/img/buttons.png,
+ .../themes/advanced/skins/default/img/items.gif,
+ .../advanced/skins/default/img/menu_arrow.gif,
+ .../advanced/skins/default/img/menu_check.gif,
+ .../themes/advanced/skins/default/img/progress.gif,
+ .../themes/advanced/skins/default/img/tabs.gif,
+ .../tiny_mce/themes/advanced/skins/default/ui.css,
+ .../themes/advanced/skins/o2k7/content.css,
+ .../tiny_mce/themes/advanced/skins/o2k7/dialog.css,
+ .../themes/advanced/skins/o2k7/img/button_bg.png,
+ .../advanced/skins/o2k7/img/button_bg_black.png,
+ .../advanced/skins/o2k7/img/button_bg_silver.png,
+ .../tiny_mce/themes/advanced/skins/o2k7/ui.css,
+ .../themes/advanced/skins/o2k7/ui_black.css,
+ .../themes/advanced/skins/o2k7/ui_silver.css,
+ .../tiny_mce/themes/advanced/source_editor.htm,
+ .../tiny_mce/themes/simple/editor_template.js,
+ .../tiny_mce/themes/simple/editor_template_src.js,
+ .../jscripts/tiny_mce/themes/simple/img/icons.gif,
+ .../jscripts/tiny_mce/themes/simple/langs/en.js,
+ .../themes/simple/skins/default/content.css,
+ .../tiny_mce/themes/simple/skins/default/ui.css,
+ .../tiny_mce/themes/simple/skins/o2k7/content.css,
+ .../themes/simple/skins/o2k7/img/button_bg.png,
+ .../tiny_mce/themes/simple/skins/o2k7/ui.css,
+ .../vendor/tinymce/jscripts/tiny_mce/tiny_mce.js,
+ .../tinymce/jscripts/tiny_mce/tiny_mce_popup.js,
+ .../jscripts/tiny_mce/utils/editable_selects.js,
+ .../tinymce/jscripts/tiny_mce/utils/form_utils.js,
+ .../tinymce/jscripts/tiny_mce/utils/mctabs.js,
+ .../tinymce/jscripts/tiny_mce/utils/validate.js,
+ mod/tinymce/views/default/input/longtext.php,
+ mod/tinymce/views/default/tinymce/css.php: Upgraded TinyMCE to 3.3.6.
+
+2010-05-29 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/navigation/breadcrumbs.php: added a hint on breadcrumb usage
+
+ * views/default/page_elements/owner_block.php: removed some code made
+ unnecessary by the changes to layout in 1.8
+
+ * views/default/page_elements/elgg_sidebar.php: updated documentation on
+ optional parameters
+
+ * views/default/canvas/layouts/administration.php: updated administration
+ layout to work with new sidebar view
+
+2010-05-28 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/navigation/sidebar_menu.php,
+ views/default/page_elements/elgg_sidebar.php,
+ views/default/page_elements/owner_block.php: sidebar menu deserves its own
+ view
+
+2010-05-28 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, engine/lib/plugins.php: Refs #2115: Added
+ elgg_is_valid_view_type(). Currently calculated at each load but will want to
+ cache like view paths. Cleaned up autoregister_views() and load_plugins()
+ code. Added spaces between function params in numerous places. C'mon
+ guys...spaces are free.
+
+2010-05-28 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../default/profile/editdefaultprofileitems.php: Removed debug log to
+ console as it was preventing FF from executing the rest of the callback
+ function.
+
+2010-05-28 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/actions/edit.php: when editing details, return to the details
+ tab when done.
+
+2010-05-28 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/admin/appearance/menu_items.php,
+ views/default/canvas/layouts/administration.php: Updated interface for custom
+ menu items
+
+ * mod/profile/views/default/profile/css.php,
+ .../default/profile/editdefaultprofileitems.php: Updated interface for edit
+ profile fields
+
+ * mod/blog/views/default/blog/css.php,
+ mod/blog/views/default/blog/sidebar_menu.php: Updated archive list-style
+
+2010-05-27 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/views/default/object/blog.php: Fixed mismatched <span></a> tags
+ in blog list status display.
+
+ * mod/blog/views/default/blog/sidebar_menu.php: Fixed typo in blog sidebar
+ menu that caused an extra LI item in archives.
+
+2010-05-27 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php: Registering user password request/reset as public
+ actions.
+
+2010-05-27 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/input/userpicker.php: Fixing code for JS userpicker remove
+ function to cope with recent structure changes.
+
+2010-05-27 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/cron.php, engine/lib/sites.php, mod/sitepages/start.php:
+ Updating walled garden to register public pages as regular expressions.
+
+2010-05-27 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/languages/en.php,
+ .../views/default/profile/profile_navigation.php: removed hard coded lang in
+ profile tabs
+
+2010-05-26 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/notifications/start.php, .../notifications/settings/usersettings.php:
+ Un-extending core notification view in favor of Notifications plugin.
+
+ * mod/sitepages/actions/add.php, mod/sitepages/actions/addfront.php,
+ mod/sitepages/actions/addfrontsimple.php, mod/sitepages/actions/addmeta.php,
+ mod/sitepages/actions/edit_settings.php,
+ mod/sitepages/sitepages_functions.php, mod/sitepages/start.php,
+ .../views/default/settings/sitepages/edit.php,
+ .../views/default/sitepages/forms/edit.php,
+ .../views/default/sitepages/forms/editfront.php,
+ .../default/sitepages/forms/editfrontsimple.php,
+ .../views/default/sitepages/forms/editmeta.php,
+ mod/sitepages/views/default/sitepages/menu.php: Updating Sitepages plugin
+ settings for new administration layout.
+
+2010-05-26 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/start.php: Gatekeeper() added to blog edit/create pagehandler.
+
+ * engine/lib/entities.php: Fix problem rewriting type_subtype_pair ->
+ type_subtype_pairs in elgg_get_entities().
+
+2010-05-26 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/forms/forums/addtopic.php: group discussion
+ access defaults to the group
+
+2010-05-26 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/start.php, mod/groups/start.php: Ensuring Blogs and Forum links
+ display properly in the group ownerblock.
+
+2010-05-26 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/content_header.php: small tweak to header
+ contents
+
+ * mod/bookmarks/start.php: bookmark header bug fixed
+
+2010-05-26 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../page_elements/content_header_member.php: Updated content area title
+ when viewing a users objects
+
+ * .../views/default/profile/profile_ownerblock.php: Additional links to
+ tools added to profile pages ownerblock (hardcoded for phase1)
+
+2010-05-25 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/defaultwidgets/actions/update.php, mod/defaultwidgets/dashboard.php,
+ mod/defaultwidgets/profile.php, mod/defaultwidgets/start.php,
+ .../admin/appearance/default_dashboard_widgets.php,
+ .../admin/appearance/default_profile_widgets.php, mod/logbrowser/index.php,
+ mod/logbrowser/start.php, .../views/default/admin/overview/logbrowser.php,
+ mod/logbrowser/views/default/logbrowser/form.php,
+ mod/profile/defaultprofile.php, mod/profile/start.php,
+ .../default/admin/appearance/defaultprofile.php,
+ mod/reportedcontent/actions/archive.php,
+ mod/reportedcontent/actions/delete.php, mod/reportedcontent/index.php,
+ mod/reportedcontent/start.php,
+ .../default/admin/overview/reportedcontent.php: Updating administration
+ plugins with admin submenu views.
+
+2010-05-25 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/navigation/tabs.php: Navigation/tabs uses output/url for the
+ links.
+
+ * views/default/output/url.php: Added title to output/url. Fixed typo
+ breaking js support in output/url.
+
+ * CHANGES.txt: Added changes to CHANGES.txt.
+
+ * views/default/output/url.php: Fixed documentation for output/url view.
+
+ * views/default/output/url.php: Added title to url output.
+
+2010-05-25 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/bookmarks/start.php: change the bookmark header depending on whose
+ bookmarks are being viewed
+
+2010-05-25 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Updated documentation for register_plugin_hook().
+
+ * engine/lib/elgglib.php: Updated documentation and cleaned up code for
+ trigger_plugin_hook().
+
+2010-05-25 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/walled_garden_background_bottom.gif,
+ _graphics/walled_garden_background_extend.gif,
+ _graphics/walled_garden_background_top.gif, engine/lib/elgglib.php,
+ .../default/account/forms/login_walled_garden.php, views/default/css.php,
+ views/default/page_shells/walled_garden.php: Walled Garden login page is no
+ longer tied to the default page shell.
+
+2010-05-25 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/views/default/object/blog.php: only display comment count if
+ there are comments
+
+ * mod/blog/blog_lib.php: check to see if comments are on or off
+
+ * mod/blog/views/default/blog/sidebar_revisions.php: blog revisions tweaked
+
+2010-05-25 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/defaultwidgets/dashboard.php, mod/defaultwidgets/profile.php,
+ mod/defaultwidgets/start.php, .../views/default/defaultwidgets/editor.php:
+ Updating Default Widgets administration to use new canvas layout.
+
+2010-05-25 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/views/default/blog/css.php: Fix for blogs list view interface in
+ some browsers
+
+2010-05-25 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/languages/en.php: comment wall notification message tweaked
+
+2010-05-25 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/views/default/blog/css.php,
+ mod/blog/views/default/blog/forms/edit.php,
+ mod/blog/views/default/blog/sidebar_revisions.php: Updates to Blogs edit UI.
+
+2010-05-25 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../page_elements/content_header_member.php: content header added for use
+ when viewing another user
+
+ * mod/tagcloud/all.php, mod/tagcloud/tagcloud.php: added an all site
+ tagcloud view, tagcloud.php will be customised to run in the sidebar.
+
+2010-05-25 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/css.php: UI update to avatar menu
+ list-style.
+
+2010-05-25 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../canvas/layouts/one_column_with_sidebar.php,
+ views/default/page_elements/elgg_sidebar.php: Refs #2114 - added elgg_sidebar
+ view
+
+2010-05-24 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/languages/en.php, mod/blog/views/default/object/blog.php: Added
+ blog author link by line on blog list.
+
+ * mod/blog/views/default/object/blog.php: Added access level in blog list.
+
+ * views/default/output/access.php: Added output/access view for displaying
+ entity access levels.
+
+2010-05-24 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/logbrowser/index.php, mod/logbrowser/start.php, mod/profile/start.php,
+ mod/reportedcontent/start.php, mod/sitepages/start.php: Updating multiple
+ plugins to no longer register admin menus with an event hook.
+
+2010-05-24 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/actions/blog/auto_save_revision.php,
+ mod/blog/actions/blog/save.php, mod/blog/blog_lib.php,
+ mod/blog/views/default/object/blog.php: Blog uses elgg_make_excerpt() now
+ instead of its own.
+
+ * engine/lib/output.php: Replacing '...' with html elipse character (&#8230)
+ in elgg_make_excerpt().
+
+ * engine/lib/river.php: Copied explaination for weird str_replace() in
+ get_river_items() to the same call in elgg_get_river_items_new() so I stay
+ sane.
+
+ * mod/blog/actions/blog/save.php, mod/blog/blog_lib.php,
+ mod/blog/views/default/blog/forms/edit.php: Removing publish_date interface
+ for blogs pending better l10n for dates.
+
+ * mod/blog/start.php: Removing blogs from groups, part 2.
+
+ * mod/blog/start.php: Removing blog options from groups, part 1.
+
+2010-05-24 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/actions/edit.php: Only notifying name change when it actually
+ changed.
+
+ * views/default/output/url.php: Ensuring text displays on URL view for both
+ "value" and "html" sent as property.
+
+2010-05-24 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/start.php: Moved blog edit sidebar revisions to the top of the
+ sidebar.
+
+2010-05-24 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/river/object/blog/create.php,
+ .../default/river/object/bookmarks/create.php: you can no longer comment on
+ river item while logged out
+
+2010-05-24 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/views/default/blog/forms/edit.php: Blog edit/create form displays
+ correct title.
+
+ * mod/blog/actions/blog/save.php: Blogs only show up in the river if in
+ published state.
+
+ * mod/riverdashboard/endpoint/ping.php: Added access controls to the
+ activity stream update count.
+
+ * mod/riverdashboard/endpoint/ping.php, mod/riverdashboard/index.php,
+ .../views/default/river/item/list.php,
+ .../views/default/river/item/wrapper.php,
+ .../views/default/riverdashboard/container.php,
+ .../views/default/riverdashboard/js.php: The activity stream's count uses the
+ river table instead of trying to combine entities + annotations based up on
+ time_created. Also brought small bits of code up to standards.
+
+2010-05-24 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/css.php, views/default/css.php: UI
+ updates to users links and admin menu on profile pages
+
+2010-05-24 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/sitepages/views/default/sitepages/menu.php: the correct tab now
+ highlights
+
+2010-05-24 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/blog_lib.php: Saving a blog post no longer rewrites all entity
+ time_created and time_updated fields. Yikes.
+
+2010-05-24 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/canvas/layouts/administration.php, views/default/css.php:
+ Updated css for admin area/plugins and submenu list style
+
+ * mod/profile/views/default/profile/css.php, views/default/css.php: Added
+ missing formatting to user-generated content
+
+2010-05-24 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/messages/start.php: messages now display the correct number unread
+
+2010-05-24 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/start.php: Updated group forum link to only appear in group
+ ownerblock, and when group forum is enabled.
+
+ * mod/messages/views/default/messages/forms/send.php: Updated 'Send a
+ message to' form to display users display name rather than username.
+
+2010-05-24 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/forms/groups/invite.php: Small tweak to group
+ invite friends so it will show your friends correctly
+
+2010-05-24 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/languages/en.php, mod/groups/start.php: Group forum link added
+ to group ownerblock
+
+2010-05-24 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/sitepages/index.php: sitepages river tweak
+
+ * mod/sitepages/index.php: sitepages now displays the correct river
+
+ * mod/riverdashboard/index.php,
+ .../views/default/settings/riverdashboard/edit.php: activity type toggle
+ removed as it was poorly thought out and implemented.
+
+ * mod/sitepages/actions/addfrontsimple.php, mod/sitepages/index.php,
+ mod/sitepages/languages/en.php, mod/sitepages/sitepages_functions.php,
+ mod/sitepages/start.php, .../views/default/canvas/layouts/frontpage.php,
+ mod/sitepages/views/default/sitepages/css.php,
+ .../default/sitepages/forms/editfrontsimple.php,
+ mod/sitepages/views/default/sitepages/members.php,
+ mod/sitepages/views/default/sitepages/sidebar.php,
+ mod/sitepages/views/default/sitepages/welcome.php: a simple version of the
+ sitepages index - we will need to turn this into a basic and advance
+ selection for admins.
+
+2010-05-24 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/css.php,
+ views/default/page_elements/owner_block.php: Ownerblock links to users
+ objects interface updated.
+
+ * mod/groups/start.php: Group link to forum removed from sidebar submenu
+
+ * mod/blog/start.php, mod/bookmarks/start.php: Group blog and bookmarks
+ submenu removed from sidebar (links are now in the group ownerblock)
+
+2010-05-23 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/foaf/page_shells/default.php, views/foaf/pageshells/pageshell.php,
+ views/php/page_shells/default.php, views/php/pageshells/pageshell.php,
+ views/xml/page_shells/default.php, views/xml/pageshells/pageshell.php: fixed
+ page shells for xml, php, and foaf
+
+2010-05-22 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/reportedcontent/languages/en.php,
+ .../views/default/reportedcontent/footer_link.php: added title attribute to
+ report this footer link
+
+ * mod/reportedcontent/start.php,
+ .../views/default/reportedcontent/footer_link.php,
+ views/default/page_elements/elgg_footer.php: removing reported content
+ dependency from core code...again
+
+ * views/default/page_elements/elgg_footer.php: Fixes #2122 - footer
+ analytics view added
+
+2010-05-21 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/owner_block.php: Using a lambda function to
+ sort the profile menu.
+
+ * mod/blog/start.php, mod/bookmarks/start.php, mod/file/start.php,
+ views/default/page_elements/owner_block.php: Registering new plugin hooks to
+ extend the owner block profile menu.
+
+ * views/default/page_elements/owner_block.php: Fixing a typo. Works this
+ time; no, really.
+
+ * mod/pages/start.php, mod/pages/views/default/pages/profile_extend.php:
+ Updating Pages plugin to extend profile owner block directly with
+ user-specific links.
+
+ * views/default/page_elements/owner_block.php: Cleaning up profile owner
+ blocks to allow for view extensions.
+
+2010-05-20 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/start.php, mod/bookmarks/start.php, mod/file/start.php,
+ mod/pages/start.php: Adding submenu items for standard plugins to owner
+ block.
+
+2010-05-20 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/tests/api/entity_getter_functions.php: Fixes #2159: Updated entity
+ getter test to order by guid instead of time_created.
+
+ * engine/tests/objects/entities.php, engine/tests/objects/objects.php,
+ engine/tests/objects/sites.php, engine/tests/objects/users.php: Update unit
+ tests for last_action column.
+
+ * engine/lib/entities.php, engine/lib/river.php: create_entity() now adds a
+ default last_action set to the same as time_created. This solves a problem of
+ having to specify an order by of last_action desc, time_created desc on each
+ call. Standardized update_entity_last_action() and moved it from river.php to
+ entities.php.
+
+ * engine/lib/river.php: Properly merged old 1.8 river2.php with river.php to
+ fix last_action-based bubble ups.
+
+2010-05-20 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/content_header.php: small edit to header
+ contents, will need to find a better way to extend this view in the required
+ fashion.
+
+ * mod/bookmarks/start.php: small bookmark add bug fixed.
+
+2010-05-20 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/rss/annotation/default.php, views/rss/object/creator.php,
+ views/rss/object/default.php, views/rss/object/georss.php: Updating RSS views
+ to allow for object creator and geolocation.
+
+2010-05-20 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * account/forgotten_password.php, account/register.php,
+ views/default/account/forms/forgotten_password.php,
+ views/default/account/forms/register.php,
+ views/default/account/forms/useradd.php: Updated Register and ForgottenLogin
+ forms to use default canvases.
+
+ * views/default/canvas/layouts/administration.php: Added a link to 'return
+ to network' from admin area.
+
+2010-05-19 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/admin.php, languages/en.php,
+ views/default/admin/users/newest.php: Added "Newest Users" admin section.
+
+ * mod/groups/all.php, mod/groups/discussions.php, mod/groups/forum.php,
+ mod/groups/views/default/forum/topics.php: Removed legacy calls from groups.
+
+ * engine/lib/annotations.php: Refs #2165: Added
+ elgg_list_entities_from_annotations() to deprecate
+ list_entities_from_annotations().
+
+ * mod/groups/forum.php: Missed passing group_guid to forum topics.
+
+ * mod/groups/views/default/forum/topics.php: Fixed incorrect call for $vars
+ in group forum topics.
+
+ * mod/riverdashboard/manifest.xml: Riverdashboard enabled on default
+ installs.
+
+ * mod/custom_index/index.php, mod/custom_index/languages/en.php,
+ mod/custom_index/manifest.xml, mod/custom_index/start.php,
+ .../views/default/canvas/layouts/new_index.php,
+ .../views/default/custom_index/css.php: Custom index is deprecated by Site
+ pages. These two provide the same functionality but in different ways, so
+ just moving Custom Index to the plugins repo.
+
+ * mod/externalpages/actions/add.php, mod/externalpages/index.php,
+ mod/externalpages/languages/en.php, mod/externalpages/manifest.xml,
+ mod/externalpages/read.php, mod/externalpages/start.php,
+ .../views/default/expages/analytics.php,
+ mod/externalpages/views/default/expages/css.php,
+ .../views/default/expages/footer_menu.php,
+ .../views/default/expages/forms/edit.php,
+ mod/externalpages/views/default/expages/menu.php,
+ mod/externalpages/views/default/object/expages.php: The Externalpages plugin
+ is now Site Pages. Removing old plugin.
+
+2010-05-19 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * vendors/jquery/jquery-1.4.2.min.js, vendors/jquery/jquery-1.4.min.js,
+ views/default/page_elements/html_begin.php: jQuery updated to v1.4.2
+
+ * mod/groups/views/default/groups/css.php: Small UI update to Group activity
+ widget.
+
+ * views/default/annotation/annotatelike.php: Likes river entry timestamp
+ wrapped in span.
+
+2010-05-18 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/start.php: Moved output.php into the pre-installation required lib
+ list to fix trunk installation.
+
+2010-05-18 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/walledgarden/graphics/background_bottom.gif,
+ mod/walledgarden/graphics/background_extend.gif,
+ mod/walledgarden/graphics/background_top.gif, mod/walledgarden/index.php,
+ mod/walledgarden/languages/en.php, mod/walledgarden/manifest.xml,
+ mod/walledgarden/readme.txt, mod/walledgarden/start.php,
+ .../views/default/account/forms/login.php,
+ .../default/page_shells/walled_garden_index.php,
+ .../views/default/walledgarden/css.php,
+ .../views/default/walledgarden/walledgarden.php: Removing Walled Garden
+ plugin from trunk.
+
+ * engine/lib/elgglib.php, engine/lib/sites.php: Ensuring the Walled Garden
+ hook properly exits before plugins can continue to extend view.
+
+ * views/json/canvas/default.php, views/json/page_shells/default.php,
+ views/json/pageshells/pageshell.php: Updating the core JSON views to allow
+ for proper object export.
+
+2010-05-18 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/members/index.php: browse members now working for 1.8
+
+ * languages/en.php, views/default/account/forms/login.php,
+ views/default/account/forms/login_dropdown.php: as you can login with either
+ username or email, reflect this in the lang.
+
+2010-05-18 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/admin/components/plugin_settings.php,
+ views/default/canvas/layouts/administration.php: Interface updates to plugins
+ settings form.
+
+2010-05-18 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php: small lang changes
+
+2010-05-18 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/canvas/layouts/administration.php: Admin area long-text
+ fields width updated.
+
+2010-05-17 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/rss/river/item/list.php: Defaulting RSS view to use Elgg Entity
+ view.
+
+ * views/rss/object/default.php, views/rss/page_shells/default.php,
+ views/rss/pageshells/pageshell.php, views/rss/river/item/list.php: Updating
+ RSS feeds to use proper views called with page_shells.
+
+2010-05-17 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/views/default/blog/css.php: Another UI update to individual blog
+ page.
+
+ * mod/blog/views/default/blog/css.php,
+ mod/profile/views/default/profile/css.php: ..a couple more ui tweaks.
+
+ * mod/messages/views/default/messages/forms/view.php,
+ mod/profile/graphics/speech_bubble_tail.gif,
+ mod/profile/graphics/twitter16px.png,
+ views/default/canvas/layouts/administration.php: A few UI updates.
+
+2010-05-15 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/riverdashboard/css.php, views/default/css.php: Updates
+ to core css UI and riverdashboard mod.
+
+2010-05-14 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/start.php: Fixed loading of activity and database files.
+
+ * engine/lib/actions.php, engine/lib/activity.php, engine/lib/api.php,
+ engine/lib/elgglib.php, engine/lib/entities.php, engine/lib/input.php,
+ engine/lib/output.php, engine/lib/pagehandler.php, engine/lib/river.php,
+ engine/lib/river2.php, engine/lib/sessions.php, engine/start.php,
+ htaccess_dist, languages/en.php, mod/groups/invitations.php,
+ mod/groups/new.php, mod/groups/views/default/river/forum/create.php,
+ .../views/default/river/forum/topic/create.php,
+ .../views/default/river/object/page/create.php, mod/profile/actions/edit.php:
+ Merged 5928-6908 from 1.7 branch to trunk.
+
+ * actions/widgets/save.php, engine/lib/access.php, engine/lib/elgglib.php,
+ engine/lib/entities.php, engine/lib/notification.php, engine/lib/river2.php,
+ engine/lib/sessions.php, engine/lib/system_log.php, engine/lib/tags.php,
+ engine/lib/users.php, mod/groups/forum.php,
+ mod/groups/views/default/forum/topics.php,
+ mod/invitefriends/actions/invite.php, mod/invitefriends/index.php,
+ mod/invitefriends/languages/en.php, mod/invitefriends/start.php,
+ .../views/default/invitefriends/form.php,
+ .../views/default/invitefriends/formitems.php, mod/profile/icon.php,
+ views/default/friends/river/create.php, views/rss/entities/entity_list.php:
+ merge -r5898:5928 (not excluding riverdashboard, notifications, and
+ messageboard) from 1.7 to trunk.
+
+2010-05-14 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/canvas/layouts/administration.php: Updated admin area css
+
+2010-05-14 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * CHANGES.txt, engine/lib/actions.php, engine/lib/api.php,
+ engine/lib/elgglib.php, engine/lib/notification.php, engine/lib/river2.php,
+ mod/invitefriends/actions/invite.php, services/api/rest_api.php: merge
+ -r5832:5898 from 1.7 to trunk.
+
+ * views/foaf/pageshells/pageshell.php, views/foaf/user/default.php: merge
+ -r5822:5825 from 1.7 to trunk.
+
+ * engine/lib/xml.php, mod/file/actions/upload.php,
+ mod/groups/actions/forums/deletepost.php: Merge r5761:5788 from 1.7 to trunk.
+
+
+2010-05-14 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/account/forms/login.php: Moving login/extend view to call
+ after the login button (consistent with login dropdown).
+
+ * engine/lib/sites.php, languages/en.php: Updating language files for new
+ Walled Garden support.
+
+ * _css/css.php, _css/js.php, engine/handlers/action_handler.php,
+ engine/handlers/cron_handler.php, engine/handlers/pagehandler.php,
+ engine/handlers/service_handler.php, engine/handlers/xml-rpc_handler.php,
+ engine/lib/cron.php, engine/lib/sites.php, index.php,
+ mod/externalpages/read.php, upgrade.php: Updating core code to allow public
+ pages using new Walled Garden functionality.
+
+2010-05-14 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/views/default/blog/sidebar_menu.php, mod/tagcloud/tagcloud.php,
+ mod/tagcloud/views/default/tagcloud/css.php, views/default/css.php,
+ views/default/output/tagcloud.php: Updated core tagcloud view markup/css.
+
+2010-05-13 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/tagcloud/views/default/output/tagcloud.php: Removing tagcloud output
+ view from tagcloud mod--it's in core now.
+
+2010-05-13 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/canvas/layouts/administration.php, views/default/css.php:
+ Update to submenu items css.
+
+ * mod/profile/defaultprofile.php, mod/reportedcontent/index.php,
+ mod/sitepages/sitepages_functions.php: Updated plugins to use new admin area
+ canvas.
+
+2010-05-13 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: To detect if a submenu item is selected, using
+ output from full_url() instead of $_SERVER['REQUEST_URI'] because the host
+ isn't set in REQUEST_URI.
+
+2010-05-13 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/admin.php, views/default/canvas/layouts/administration.php,
+ views/default/css.php: Beginnings of a stand-alone admin area.
+
+ * mod/profile/views/default/profile/icon.php: Fix for @mentions mod creating
+ multiple hrefs in avatar submenu.
+
+ * views/default/admin/overview.php, views/default/admin/site/advanced.php,
+ views/default/admin/site/basic.php, views/default/admin/users/add.php,
+ views/default/admin/users/find.php, views/default/admin/users/online.php:
+ Added content titles to admin area pages.
+
+2010-05-13 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/riverdashboard/index.php: removed extra div from riverdashboard index
+ page
+
+ * mod/riverdashboard/start.php, .../views/default/riverdashboard/menu.php,
+ .../views/default/riverdashboard/nav.php: merged [5959] from 1.7 branch into
+ trunk for riverdashboard plugin
+
+ * mod/riverdashboard/actions/add.php, mod/riverdashboard/actions/delete.php,
+ mod/riverdashboard/endpoint/ping.php, mod/riverdashboard/index.php,
+ mod/riverdashboard/languages/en.php, mod/riverdashboard/start.php,
+ .../views/default/river/item/list.php,
+ .../views/default/river/item/wrapper.php,
+ .../views/default/river/item/wrapper_classic.php,
+ .../views/default/riverdashboard/container.php,
+ .../views/default/riverdashboard/ecml/activity.php,
+ .../views/default/riverdashboard/menu.php,
+ .../views/default/riverdashboard/nav.php,
+ .../views/default/riverdashboard/sitemessage.php,
+ .../views/default/riverdashboard/welcome.php,
+ .../views/default/settings/riverdashboard/edit.php: attempting to standardize
+ riverdashboard plugin in similar manner as 1.7 branch revision [5943]
+
+ * mod/notifications/actions/groupsave.php,
+ mod/notifications/actions/save.php, mod/notifications/groups.php,
+ mod/notifications/index.php, mod/notifications/languages/en.php,
+ mod/notifications/start.php, .../notifications/subscriptions/collections.php,
+ .../default/notifications/subscriptions/form.php,
+ .../notifications/subscriptions/groupsform.php,
+ .../notifications/subscriptions/jsfuncs.php,
+ .../notifications/subscriptions/personal.php: merged in notifications plugin
+ cleanup from 1.7 branch: [5962], [5978] - [5980], [6000]
+
+2010-05-12 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/messageboard/actions/add.php, mod/messageboard/actions/delete.php,
+ mod/messageboard/ajax_endpoint/load.php, mod/messageboard/history.php,
+ mod/messageboard/index.php, mod/messageboard/languages/en.php,
+ mod/messageboard/readme.txt, mod/messageboard/start.php,
+ .../views/default/messageboard/css.php,
+ .../views/default/messageboard/forms/add.php,
+ .../default/messageboard/group_messageboard.php,
+ .../views/default/messageboard/messageboard.php,
+ .../default/messageboard/messageboard_content.php,
+ .../default/river/object/messageboard/create.php,
+ .../views/default/widgets/messageboard/edit.php,
+ .../views/default/widgets/messageboard/view.php: merging messageboard cleanup
+ from 1.7 branch [5908],[5909],[5917]
+
+2010-05-12 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * account/register.php, engine/lib/elgglib.php, engine/lib/sites.php,
+ mod/sitepages/start.php: Creating a hook for plugin authors to register
+ Walled Garden public sites.
+
+2010-05-12 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/bookmarks/languages/en.php: removed a duplicate lang string
+
+ * .../views/default/bookmarks/group_bookmarks.php: fix so group bookmarks
+ display on group frontpage
+
+2010-05-11 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/site/update_advanced.php,
+ actions/systemsettings/install.php, engine/lib/elgglib.php,
+ engine/lib/sites.php, engine/lib/upgrades/2010050701.php,
+ views/default/admin/site/advanced.php: Do not display site pages when in
+ Walled Garden mode, excepting system-defined whitelist.
+
+ * account/register.php: Not allowing new user registration to continue
+ action when disabled.
+
+2010-05-11 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/systemsettings/install.php: Fixed a typo.
+
+ * engine/lib/admin.php, engine/lib/elgglib.php,
+ views/default/navigation/submenu_item.php: Fix admin area for overview and
+ appearance.
+
+2010-05-10 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/elgg_topbar.php,
+ views/default/page_elements/elgg_topbar_logout.php: Breaking logout link into
+ a separate view.
+
+2010-05-10 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/admin.php, engine/lib/elgglib.php, engine/tests/ui/submenu.php,
+ .../default/admin/components/admin_page_layout.php,
+ views/default/admin/components/sidemenu.php,
+ views/default/navigation/submenu_item.php, views/default/output/url.php,
+ views/default/page_elements/owner_block.php: Admin area now uses standard
+ submenu tools.
+
+2010-05-09 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/basic_elements/welcome.php, views/default/welcome.php,
+ views/default/welcome/logged_in.php, views/default/welcome/logged_out.php:
+ removing more views that haven't been used/touched in almost 2 years
+
+ * views/default/text/about.php, views/default/text/privacy_view.php,
+ views/default/text/tos_view.php: removing some chuff that's been just sitting
+ there for a long time - these views ended up in the external pages/site pages
+ plugins
+
+2010-05-08 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Not setting $item->selected on a submenu item acts
+ the same as setting it to NULL for selected state guessing. Removed unused
+ code in submenu system.
+
+ * engine/lib/elgglib.php, engine/tests/ui/submenu.php,
+ views/default/canvas_header/submenu_group.php,
+ views/default/canvas_header/submenu_template.php, views/default/css.php,
+ views/default/navigation/submenu_group.php,
+ views/default/navigation/submenu_item.php,
+ views/default/navigation/submenu_js.php: Added new submenu system. Added
+ elgg_http_url_is_identical(). Moved canvas_header/submenu* to
+ navigation/submenu*. Added UI test for submenu.
+
+2010-05-07 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/site/update_advanced.php, actions/register.php,
+ actions/systemsettings/install.php, engine/lib/upgrades/2010050701.php,
+ version.php, views/default/account/forms/login.php,
+ views/default/account/forms/login_dropdown.php,
+ views/default/admin/site/advanced.php: Adding an option to restrict new user
+ registration in advanced site settings. This is the first step in fully
+ merging "Walled Garden" plugin into core Elgg engine.
+
+2010-05-05 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/plugins/disable.php, actions/admin/plugins/disableall.php,
+ actions/admin/plugins/enable.php, actions/admin/plugins/enableall.php,
+ actions/admin/plugins/reorder.php,
+ actions/admin/plugins/simple_update_states.php,
+ actions/admin/site/update_advanced.php, actions/admin/site/update_basic.php,
+ actions/login.php, actions/plugins/settings/save.php, actions/register.php,
+ actions/systemsettings/install.php, admin/index.php, admin/menu_items.php,
+ admin/plugins.php, admin/site.php, admin/statistics.php, admin/user.php,
+ engine/lib/actions.php, engine/lib/admin.php, engine/lib/plugins.php,
+ engine/lib/sessions.php, languages/en.php, mod/blog/manifest.xml,
+ mod/blog/views/default/blog/forms/edit.php, mod/bookmarks/manifest.xml,
+ mod/captcha/manifest.xml, mod/categories/actions/save.php,
+ mod/categories/languages/en.php, mod/categories/manifest.xml,
+ mod/categories/settings.php, mod/categories/start.php,
+ mod/categories/views/default/categories/css.php,
+ .../views/default/categories/settings.php,
+ .../views/default/categories/settingsform.php,
+ .../views/default/settings/categories/edit.php, mod/crontrigger/manifest.xml,
+ mod/custom_index/manifest.xml, mod/defaultwidgets/manifest.xml,
+ mod/diagnostics/manifest.xml, mod/ecml/manifest.xml, mod/ecml/start.php,
+ mod/ecml/views/default/ecml/admin/ecml_admin.php,
+ mod/ecml/views/default/settings/ecml/edit.php, mod/embed/manifest.xml,
+ mod/externalpages/manifest.xml, mod/file/manifest.xml,
+ mod/friends/manifest.xml, mod/garbagecollector/manifest.xml,
+ mod/groups/manifest.xml, mod/htmlawed/manifest.xml,
+ mod/invitefriends/manifest.xml, mod/logbrowser/manifest.xml,
+ mod/logrotate/manifest.xml, mod/members/manifest.xml,
+ mod/messageboard/manifest.xml, mod/messages/manifest.xml,
+ mod/notifications/manifest.xml, mod/pages/manifest.xml,
+ mod/profile/manifest.xml, mod/reportedcontent/manifest.xml,
+ mod/riverdashboard/manifest.xml, mod/search/manifest.xml,
+ mod/sitepages/manifest.xml, mod/tagcloud/manifest.xml,
+ mod/thewire/manifest.xml, mod/tinymce/manifest.xml, mod/twitter/manifest.xml,
+ mod/uservalidationbyemail/manifest.xml, mod/walledgarden/manifest.xml,
+ mod/zaudio/manifest.xml, views/default/admin/appearance/menu_items.php,
+ .../default/admin/components/admin_page_layout.php,
+ views/default/admin/components/plugin.php,
+ views/default/admin/components/plugin_settings.php,
+ views/default/admin/components/sidemenu.php, views/default/admin/main.php,
+ views/default/admin/main_opt/plugins.php,
+ views/default/admin/main_opt/site.php,
+ views/default/admin/main_opt/statistics.php,
+ views/default/admin/main_opt/user.php, views/default/admin/menu_items.php,
+ views/default/admin/overview.php,
+ views/default/admin/overview/numentities.php,
+ views/default/admin/overview/online.php, views/default/admin/plugins.php,
+ views/default/admin/plugins/advanced.php,
+ views/default/admin/plugins/simple.php,
+ views/default/admin/plugins_opt/plugin.php, views/default/admin/site.php,
+ views/default/admin/site/advanced.php, views/default/admin/site/basic.php,
+ views/default/admin/statistics.php,
+ views/default/admin/statistics_opt/basic.php,
+ views/default/admin/statistics_opt/numentities.php,
+ views/default/admin/statistics_opt/online.php, views/default/admin/user.php,
+ views/default/admin/user_opt/search.php, views/default/admin/users/add.php,
+ views/default/admin/users/find.php, views/default/admin/users/online.php,
+ views/default/css.php, views/default/object/admin_notice.php: Merged
+ 18_new_admin branch to trunk.
+
+2010-05-05 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/usersettings/form.php: Added ID to submit button on user
+ settings form.
+
+ * views/default/canvas_header/submenu_group.php: Updated submenu with
+ missing groupname.
+
+ * mod/profile/views/default/profile/editicon.php: Addition of a wrapper on
+ edit avatar page for theming purposes.
+
+2010-05-04 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/elgg_topbar.php: Returning extended view to
+ original location in code (to preserve CSS rendering).
+
+2010-05-04 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/css.php: Updated avatar sub-menu font
+ sizes.
+
+2010-05-04 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/start.php, .../views/default/profile/topbar_extend.php:
+ Extending topbar view to include My Friends link.
+
+ * views/default/page_elements/elgg_topbar.php: Removing hard-coded plugin
+ extensions from core topbar.
+
+2010-05-04 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/bookmarks/views/default/bookmarks/form.php: Added id to bookmark edit
+ form (for use theming).
+
+ * .../default/profile/commentwall/commentwall.php: Minor update to the
+ comment wall wrapper div.
+
+2010-05-02 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/pagehandler.php: Fixes #1480 - not passing empty array element
+ from page_handler()
+
+2010-04-30 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../notifications/subscriptions/groupsform.php,
+ views/default/usersettings/plugins.php: Minor updates to User Settings
+ interface.
+
+ * mod/search/views/default/search/entity.php: Search results float cleared.
+
+2010-04-28 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../default/profile/profile_contents/activity.php,
+ .../views/default/riverdashboard/css.php: Updated activity stream on users
+ Profile to include riverdashboard js. Added extra css rules for inline
+ comments and likes on profile activity.
+
+ * mod/profile/views/default/profile/edit.php, views/default/css_ie.php,
+ views/default/js/initialise_elgg.php: Updates to Profile edit, likes js, and
+ tools css for IE7 rendering.
+
+2010-04-27 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/navigation/tabs.php: Added navigation/tabs view for tabbed
+ navigation.
+
+2010-04-27 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/walledgarden/start.php: Restricting external user creation from
+ Facebook Services.
+
+2010-04-27 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * index.php: if the activity stream is enabled show on the frontpage, if
+ not, list entities.
+
+2010-04-27 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php, views/default/css_ie.php: More fixes for IE
+ rendering (entity listings, private messages, topbar, profile, activity)
+
+2010-04-26 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/sitepages/languages/en.php, mod/sitepages/start.php: Updated language
+ strings for site page ecml
+
+ * mod/ecml/languages/en.php, mod/ecml/start.php: Removed view and entity
+ ECML. Updated language strings.
+
+ * mod/sitepages/start.php, .../views/default/sitepages/forms/editfront.php:
+ Only admin users can view site pages. Corrected ECML default for site pages.
+ Moved view and entity ECML keywords to sitepages and restricted them.
+
+ * engine/lib/users.php, mod/blog/manifest.xml, mod/riverdashboard/index.php,
+ mod/riverdashboard/manifest.xml, mod/riverdashboard/start.php,
+ .../views/default/river/item/list.php,
+ views/default/account/forms/login_dropdown.php: Graceful degrading for non-JS
+ users on the dropdown login box.
+
+ * mod/ecml/views/default/ecml/admin/ecml_admin.php: Fixed admin area
+ language string.
+
+ * .../views/default/river/object/blog/create.php: Fixes #2098: River view
+ for blog pulls correct time.
+
+ * engine/lib/plugins.php: Plugins are *required* to have a manifest.xml
+ file.
+
+2010-04-26 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/river/item/wrapper.php, views/default/css_ie.php:
+ Updates to riverdashboard wrapper for IE rendering. Temporary IE rules for
+ riverdashboard added to css_ie.php.
+
+2010-04-26 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/all.php, mod/groups/index.php, mod/groups/membership.php:
+ Updated calls to content_header to point to correct new link in groups.
+
+ * mod/bookmarks/add.php, mod/bookmarks/all.php, mod/bookmarks/friends.php,
+ mod/bookmarks/index.php, mod/bookmarks/start.php: Bookmarks work with groups
+ and use new style content header filter.
+
+2010-04-26 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/account/forms/login_dropdown.php, views/default/css.php:
+ Updates to homepage layout and drop-down login for IE.
+
+ * mod/groups/views/default/forms/groups/edit.php: Update to edit Groups page
+ for ECML and longtext controls positioning.
+
+ * .../views/default/sitepages/forms/editfront.php: Updated SitePages with
+ example homepage markup/ECML.
+
+ * .../views/default/sitepages/forms/editfront.php, views/default/css.php:
+ Update to SitePages and CSSEditor code input fields, code input (monospaced
+ style) added to base css file.
+
+ * mod/profile/views/default/profile/css.php,
+ mod/profile/views/default/profile/icon.php: Update to site user avatars to
+ use CSS3 rounding for modern browsers. Older browsers will display as square
+ avatars.
+
+2010-04-26 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * index.php: Fixes #2084 - layout issue with front page
+
+2010-04-26 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/account/forms/login.php,
+ .../default/page_shells/walled_garden_index.php,
+ .../views/default/walledgarden/css.php: Updated WalledGarden login page for
+ correct rendering in IE.
+
+ * languages/en.php, .../views/default/account/forms/login.php,
+ .../default/page_shells/walled_garden_index.php: Updates to WalledGarden
+ login. Lost password text simplified/shortened, text spacing adjusted, rule
+ added to prevent custom css page background from showing on walledgarden
+ login page.
+
+2010-04-23 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/walledgarden/graphics/background_bottom.gif,
+ mod/walledgarden/graphics/background_extend.gif,
+ mod/walledgarden/graphics/background_top.gif,
+ .../views/default/account/forms/login.php,
+ .../default/page_shells/walled_garden_index.php,
+ .../views/default/walledgarden/css.php: Updated walledgarden login.
+
+ * mod/groups/views/default/forms/forums/addtopic.php: Completed breadcrumb
+ for addtopic (missed in 5855)
+
+ * mod/ecml/start.php, mod/ecml/views/default/ecml/admin/css.php,
+ mod/ecml/views/default/ecml/input_ext.php, mod/embed/languages/en.php,
+ mod/embed/start.php, mod/embed/views/default/embed/css.php,
+ mod/embed/views/default/embed/link.php,
+ .../views/default/expages/forms/edit.php,
+ mod/externalpages/views/default/expages/menu.php,
+ mod/file/views/default/file/upload.php,
+ mod/groups/views/default/forms/forums/addpost.php,
+ mod/groups/views/default/forms/forums/addtopic.php,
+ .../views/default/forms/forums/edittopic.php,
+ mod/groups/views/default/forum/topicposts.php,
+ mod/messages/views/default/messages/forms/send.php,
+ mod/messages/views/default/messages/messages.php,
+ .../views/default/forms/pages/editwelcome.php,
+ .../views/default/reportedcontent/form.php, mod/tinymce/languages/en.php,
+ mod/tinymce/views/default/input/longtext.php,
+ mod/tinymce/views/default/tinymce/css.php,
+ views/default/comments/forms/edit.php, views/default/css.php,
+ views/default/upload/upload_form_content.php: Updated longtext/tinymce area
+ extra controls. Moved and updated ecml help link, 'edit/remove editor' link
+ and 'add media' links both moved and improved. Redundant css removed.
+
+2010-04-23 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/walledgarden/index.php, .../views/default/account/forms/login.php,
+ .../default/account/forms/login_walledgarden.php: small walled garden tweak
+
+ * mod/sitepages/start.php: frontpage creation respects walledgarden
+
+ * .../default/account/forms/login_walledgarden.php: included a view for
+ plugins to extend
+
+ * mod/walledgarden/index.php, mod/walledgarden/start.php,
+ .../default/account/forms/login_walledgarden.php,
+ .../default/page_shells/walled_garden_index.php: The start of a new walled
+ garden index page
+
+2010-04-23 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/forum.php, mod/groups/views/default/forum/viewposts.php:
+ Completed breadcrumbs for Groups Forums.
+
+2010-04-22 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/bookmarks/all.php, mod/bookmarks/index.php: Updated booksmarks to 1.7
+ API.
+
+ * mod/groups/languages/en.php,
+ mod/groups/views/default/forms/groups/invite.php,
+ mod/groups/views/default/groups/groupprofile.php,
+ mod/groups/views/default/sharing/invite.php,
+ .../views/default/widgets/a_users_groups/view.php: Updated groups to 1.7 api.
+
+
+2010-04-22 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/object/groupforumtopic.php: group forum discussion view
+ updated to match the community
+
+ * .../views/default/object/groupforumtopic.php: a small tweak so latest
+ discussion shows the last user to comment.
+
+2010-04-21 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/start.php: Cleaned up some comments about group acl hooks.
+
+ * mod/blog/views/default/blog/sidebar_revisions.php: Cleaned up code to show
+ revisions. Added ability to go to published revision.
+
+ * mod/blog/views/default/blog/forms/edit.php: Decoding html entities for
+ blog excerpts in edit form.
+
+ * mod/blog/blog_lib.php, mod/blog/views/default/object/blog.php: Blog
+ excerpts now work for MB strings and properly detect word breaks.
+
+ * mod/blog/blog_lib.php: Removing unneeded order by metadata.
+
+ * mod/blog/blog_lib.php: Rewriting time_created and time_updated instead of
+ trying to be tricky with metadata.
+
+2010-04-21 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/profile/profile_ownerblock.php: profile owner block can
+ now be viewed while logged out.
+
+ * mod/groups/start.php: a simple function which can be used to restrict
+ group access options
+
+ * .../default/river/object/bookmarks/create.php: bookmark activity view
+ altered to work with both the classic and new versions of activity.
+
+ * .../views/default/river/object/blog/create.php: remove likes and comments
+ from blog activity view if in classic mode
+
+ * engine/lib/river2.php, .../default/profile/profile_contents/activity.php,
+ mod/riverdashboard/index.php, mod/riverdashboard/languages/en.php,
+ .../views/default/river/item/wrapper_classic.php,
+ .../views/default/settings/riverdashboard/edit.php: let site admins toggle
+ between a classic activity stream or the new clustered version
+
+2010-04-21 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: cleaning up [5822] - putting elgg_format_url() in
+ the same location in elgglib.php
+
+2010-04-20 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/riverdashboard/start.php,
+ .../views/default/settings/riverdashboard/edit.php: Removed toggle for
+ overriding river dashboard. If the plugin is enabled, the dashboard is
+ enabled.
+
+ * engine/lib/elgglib.php: Merge previous to trunk.
+
+2010-04-20 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/elgg_sprites.png, index.php,
+ views/default/account/forms/login_dropdown.php, views/default/css.php,
+ views/default/page_elements/elgg_header.php: Added the beginnings of a
+ drop-down login box for Elgg as an alternative to the front-page login box in
+ the homepage sidebar.
+
+2010-04-19 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/ecml/languages/en.php: Fixed missing language string in admin
+
+ * mod/ecml/views/default/ecml/admin/ecml_admin.php: Added smarter check all
+ checkboxes for ECML admin area.
+
+ * mod/search/index.php, mod/search/search_hooks.php: Merged previous to
+ trunk.
+
+2010-04-19 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../default/river/object/bookmarks/create.php: #2087 fixed
+
+2010-04-17 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Updated docs for types and subtypes in
+ elgg_get_entities().
+
+2010-04-17 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/views/default/object/blog.php: pass the entity so other plugins
+ can extend properly
+
+ * mod/ecml/start.php: correct layout applied to ecml help page
+
+ * mod/sitepages/actions/addfront.php: missing ] added to the frontpage
+ action file
+
+2010-04-16 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Merged type_subtype_pair fix from 1.7 branch.
+
+2010-04-16 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/walledgarden/start.php: Removed attempt to hook into system index page
+ from Walled Garden. This is unnecessary at best, and conflicts entirely when
+ custom login Site Pages are used.
+
+2010-04-16 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/start.php: Fixing a logged out problem with group access.
+
+2010-04-16 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/walledgarden/languages/en.php, mod/walledgarden/start.php: Registering
+ a Walled Garden hook which will not allow new user signup with Twitter
+ Services.
+
+2010-04-16 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/start.php: Only showing group access levels within group
+ contexts. Not showing unrelated access levels within group contexts.
+
+2010-04-16 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/bookmarks/group_bookmarks.php,
+ mod/file/views/default/file/css.php,
+ mod/file/views/default/file/groupprofile_files.php,
+ mod/file/views/default/widgets/filerepo/view.php: Removed js drop-down
+ description on group profile tools widgets.
+
+2010-04-16 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/ecml/actions/save_permissions.php, mod/ecml/languages/en.php,
+ mod/ecml/views/default/ecml/admin/css.php,
+ mod/ecml/views/default/ecml/admin/ecml_admin.php: ECML permissions frontend
+ presents a whitelist instead of a black list.
+
+2010-04-16 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/elgg_sprites.png, engine/lib/users.php, views/default/css.php,
+ views/default/page_elements/elgg_topbar.php: Friends link removed from
+ primary nav and added to top toolbar.
+
+2010-04-16 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/riverdashboard/ecml/activity.php: Fixed activity stream
+ ecml view.
+
+ * mod/sitepages/languages/en.php, mod/sitepages/start.php: Removed some left
+ over code from decoupling ECML. Fixed help files for [[ -> [ transition.
+
+ * mod/ecml/README.txt, mod/ecml/languages/en.php, mod/ecml/start.php,
+ mod/ecml/views/default/ecml/help.php: ECML now only requires a single square
+ bracket.
+
+ * mod/riverdashboard/languages/en.php, mod/riverdashboard/start.php,
+ .../views/default/riverdashboard/ecml/activity.php: Added activity ecml
+ keyword.
+
+ * mod/sitepages/actions/addfront.php: Correctly checking for logoutbox for
+ custom front pages.
+
+ * mod/thewire/actions/add.php: Fix the name of the input in the wire's add
+ action.
+
+2010-04-16 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php, mod/blog/views/default/blog/sidebar_menu.php: Tagcloud
+ localized and updated on blogs.
+
+ * views/default/css.php: Tweaked 'Likes' icon css.
+
+ * views/default/css.php: Updated tools menu spacing and added selected class
+ rule for tools submenu items.
+
+ * _graphics/indicator.gif: Removed unused indicator gif. Spinners across the
+ site have been updated to use elgg's ajax_loader gif, except Shared Access
+ mod which still uses indicator gif - which is now in the shared access plugin
+ bundle.
+
+2010-04-16 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/indicator.gif, engine/lib/elgglib.php,
+ mod/categories/actions/save.php, mod/categories/languages/en.php,
+ mod/categories/listing.php, mod/categories/settings.php,
+ mod/categories/start.php, mod/categories/views/default/categories.php,
+ mod/categories/views/default/categories/list.php,
+ .../views/default/categories/settings.php,
+ mod/categories/views/default/categories/view.php,
+ mod/profile/actions/cropicon.php, mod/profile/icondirect.php,
+ mod/profile/start.php, mod/search/search_hooks.php,
+ mod/search/views/default/search/css.php,
+ mod/search/views/default/search/entity.php,
+ mod/thewire/views/rss/object/thewire.php: Merged [5623]:head from 1.7 to
+ trunk.
+
+ * mod/ecml/start.php, mod/ecml/views/default/ecml/keywords/blip.tv.php,
+ .../views/default/ecml/keywords/dailymotion.php,
+ mod/ecml/views/default/ecml/keywords/livevideo.php,
+ mod/ecml/views/default/ecml/keywords/redlasso.php: Added more video sources.
+ Allowing the . character in keywords.
+
+2010-04-15 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/ecml/views/default/ecml/admin/ecml_admin.php: Added ability to check
+ all rows or columns in ecml permissions page.
+
+ * mod/ecml/views/default/ecml/admin/css.php,
+ mod/ecml/views/default/ecml/admin/ecml_admin.php: Inverted the admin matrix
+ for ecml views / keywords.
+
+ * mod/sitepages/languages/en.php, mod/sitepages/start.php,
+ .../default/sitepages/keywords/site_stats.php,
+ .../views/default/sitepages/keywords/sitestats.php,
+ .../views/default/sitepages/keywords/user_list.php,
+ .../views/default/sitepages/keywords/userlist.php: Added usage to the
+ keywords. Restricting keywords to userlist, loginbox, and sitestats to custom
+ front page.
+
+ * mod/ecml/start.php: Correctly setting context to admin to pull in the
+ admin sidebar for ECML permissions page.
+
+ * mod/ecml/README.txt: Updated docs with a FAQ.
+
+2010-04-15 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/groups/activity_latest.php: Activity view added for
+ Groups profile page, based on code by Jon Maul.
+
+2010-04-15 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * CONTRIBUTORS.txt: Jon Maul added as a contributor with MITRE.
+
+ * mod/blog/blog_lib.php, mod/blog/views/default/object/blog.php: Separated
+ blog object view from comments.
+
+ * mod/ecml/ecml_functions.php,
+ mod/ecml/views/default/ecml/admin/ecml_admin.php: Added ability for ECML
+ keyword definitions to restrict themselves to specific views.
+
+2010-04-15 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/ecml/start.php, mod/ecml/views/default/ecml/admin/ecml_admin.php:
+ Small UI updates to ECML.
+
+ * mod/search/views/default/search/entity.php, views/default/css.php: Update
+ to search results view, and small entity list style updates.
+
+2010-04-15 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/ecml/README.txt, mod/ecml/actions/save_permissions.php,
+ mod/ecml/ecml_functions.php, mod/ecml/languages/en.php, mod/ecml/start.php,
+ mod/ecml/views/default/ecml/admin/css.php,
+ mod/ecml/views/default/ecml/admin/ecml_admin.php,
+ .../views/default/ecml/keywords/googlemaps.php: Added granular access for
+ views in ECML. Added 'usage' on keyword info. Updated docs.
+
+ * mod/ecml/start.php, .../views/default/ecml/keywords/googlemaps.php:
+ Googlemaps support added for ECML.
+
+ * mod/ecml/views/default/ecml/help.php: ECML keyword help page now properly
+ lists all registered keywords.
+
+ * mod/sitepages/start.php: Removed _ from Site Pages ECML keywords.
+
+ * mod/ecml/README.txt, mod/ecml/ecml_functions.php, mod/ecml/manifest.xml,
+ mod/ecml/start.php: Updated ECML docs. Removed the _ as a valid keyword
+ character (it looks funny). Added the media sites in start.php. Fixed bug
+ that prevented [[view]] from working. Consequently, [[view]] now requires a
+ src="" attribute.
+
+2010-04-14 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/ecml/start.php, mod/ecml/views/default/ecml/keywords/vimeo.php: Added
+ vimeo support to ECML.
+
+ * mod/ecml/ecml_functions.php, mod/ecml/start.php,
+ .../views/default/ecml/keywords/slideshare.php,
+ mod/ecml/views/default/ecml/keywords/youtube.php: Changed tokenizer for ECML
+ to support attribute quotes. Added core youtube and slideshare keywords.
+ Passing the full keyword and attribute string to views.
+
+ * mod/blog/start.php: Added ECML support in blogs.
+
+2010-04-13 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/plugins.php: Creating a function to clear user-specific plugin
+ settings.
+
+2010-04-13 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/ecml/start.php: Remove unneeded check in ecml view hook.
+
+ * mod/ecml/start.php: ECML uses the brand new granular view hooks.
+
+ * mod/blog/languages/en.php: Added item:object:blog language key for stats.
+
+ * engine/lib/elgglib.php: Added granular view hook view:$view_name instead
+ of a monolithic display:view hook.
+
+ * mod/ecml/start.php: Update todo.
+
+ * mod/ecml/README.txt, mod/ecml/ecml_functions.php,
+ mod/ecml/graphics/ecml.png, mod/ecml/languages/en.php, mod/ecml/manifest.xml,
+ mod/ecml/start.php, mod/ecml/views/default/ecml/help.php,
+ mod/ecml/views/default/ecml/input_ext.php,
+ mod/ecml/views/default/ecml/keywords/user_list.php: First version of ecml.
+
+ * mod/sitepages/README.txt, mod/sitepages/languages/en.php,
+ mod/sitepages/manifest.xml, mod/sitepages/sitepages_functions.php,
+ mod/sitepages/start.php, mod/sitepages/views/default/sitepages/keywords.php,
+ .../views/default/sitepages/keywords/user_list.php: Removed ECML from Site
+ Pages.
+
+2010-04-13 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/bookmarks/group_bookmarks.php,
+ mod/file/views/default/file/groupprofile_files.php,
+ mod/groups/languages/en.php, mod/groups/views/default/forum/topicposts.php,
+ mod/groups/views/default/groups/css.php,
+ mod/groups/views/default/groups/forum_latest.php,
+ mod/groups/views/default/groups/profileitems.php,
+ .../views/default/river/item/wrapper.php: Groups profile page tool widget
+ boxes updated.
+
+ * views/default/css.php, views/default/page_elements/elgg_header.php:
+ Updates to site header and css for Custom Logo mod.
+
+2010-04-12 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/sitepages/README.txt, mod/sitepages/actions/addfront.php,
+ mod/sitepages/languages/en.php, mod/sitepages/sitepages_functions.php,
+ mod/sitepages/start.php, .../default/sitepages/keywords/site_stats.php,
+ .../views/default/sitepages/keywords/user_list.php: Updated site pages docs.
+ Added ability to pass arguments to custom keywords. Added user_list keyword.
+ Reject logged out front pages that don't have [[login_box]].
+
+ * mod/sitepages/manifest.xml, mod/sitepages/sitepages_functions.php: Added
+ 'customization' category to manifest. Cleaned up some comments.
+
+ * mod/sitepages/start.php: Checking if we need to pull in a view before
+ calling it.
+
+ * mod/sitepages/views/default/sitepages/menu.php: DRY'd up the edit code in
+ site pages.
+
+ * mod/sitepages/README.txt: Added docs for site pages.
+
+2010-04-12 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/defaultprofile.php, mod/profile/languages/en.php,
+ mod/profile/views/default/profile/css.php,
+ .../default/profile/editdefaultprofileitems.php: Updated custom profile
+ fields admin area / list re-ordering ui.
+
+ * _graphics/avatar_menu_arrows.gif, _graphics/elgg_sprites.png,
+ _graphics/elgg_toolbar_logout.gif, _graphics/friends_picker_arrows.gif,
+ _graphics/icon_bookmarkthis.gif, _graphics/icon_customise_drag.gif,
+ _graphics/icon_customise_info.gif, _graphics/icon_customise_remove.gif,
+ _graphics/icon_customise_remove.png, _graphics/icon_delete.png,
+ _graphics/icon_gallery.gif, _graphics/icon_like.png, _graphics/icon_odd.gif,
+ _graphics/icon_reportthis.gif, _graphics/icon_rss.gif,
+ _graphics/icon_rss.png, _graphics/icon_tag.gif, _graphics/icon_tag.png,
+ _graphics/more_sprite.png, _graphics/river_icons/river_icon_blog.gif,
+ _graphics/river_icons/river_icon_bookmarks.gif,
+ _graphics/river_icons/river_icon_comment.gif,
+ _graphics/river_icons/river_icon_feed.gif,
+ _graphics/river_icons/river_icon_files.gif,
+ _graphics/river_icons/river_icon_forum.gif,
+ _graphics/river_icons/river_icon_friends.gif,
+ _graphics/river_icons/river_icon_messageboard.gif,
+ _graphics/river_icons/river_icon_pages.gif,
+ _graphics/river_icons/river_icon_plugin.gif,
+ .../river_icons/river_icon_privatemessage.gif,
+ _graphics/river_icons/river_icon_profile.gif,
+ _graphics/river_icons/river_icon_status.gif,
+ _graphics/river_icons/river_icon_thewire.gif, _graphics/search.png,
+ _graphics/speech_bubble_tail.gif, _graphics/thewire_speech_bubble.gif,
+ _graphics/topbar_icons.png, _graphics/twitter16px.png,
+ mod/file/views/default/file/css.php,
+ mod/profile/views/default/profile/css.php, mod/twitter/graphics/twitter.png,
+ mod/twitter/graphics/twitter16px.png,
+ mod/twitter/views/default/twitter/css.php, views/default/css.php,
+ views/default/output/rss_view.php: Collected all core sprites into graphics
+ and updated css accordingly. Removed unused core graphics. Moved
+ plugin-specific graphics into respective plugins graphics directories.
+
+2010-04-12 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/html_begin.php: Removed custom-form-elements
+
+2010-04-12 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/toolbar_messages_icon.gif,
+ mod/messages/graphics/toolbar_messages_icon.gif,
+ mod/messages/views/default/messages/css.php: Messages icon removed form main
+ css and graphics and added to messages mod.
+
+ * _graphics/icon_like.png, languages/en.php, views/default/css.php,
+ views/default/js/initialise_elgg.php, views/default/likes/forms/edit.php:
+ Icon added to likes and interface tweaked. Likes list js fixed to correctly
+ get height of current list.
+
+ * languages/en.php, mod/blog/views/default/object/blog.php,
+ mod/profile/views/default/profile/css.php, views/default/css.php,
+ views/default/likes/forms/edit.php: Likes updated for plugins entity list
+ display (just icon remaining to add)
+
+2010-04-12 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/start.php, views/default/page_elements/content_header.php:
+ create a new group button added
+
+ * .../views/default/bookmarks/group_bookmarks.php: change group bookmarks to
+ get from container guid
+
+2010-04-11 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/views/default/object/blog.php: Updated Likes on Blog and
+ Videolist single entity pages
+
+ * .../views/default/riverdashboard/css.php, views/default/css.php,
+ views/default/js/initialise_elgg.php, views/default/likes/forms/edit.php:
+ Added a popup list of users for Likes.
+
+2010-04-09 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/login.php: Allow login via email.
+
+2010-04-09 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/elgg_header.php: allow for a site logo
+
+2010-04-08 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/twitterservice/languages/en.php, mod/twitterservice/manifest.xml,
+ mod/twitterservice/start.php, mod/twitterservice/vendors/twitter/license.txt,
+ mod/twitterservice/vendors/twitter/load.php,
+ mod/twitterservice/vendors/twitter/readme.txt,
+ mod/twitterservice/vendors/twitter/send.php,
+ .../vendors/twitter/twitter.class.php,
+ .../default/usersettings/twitterservice/edit.php: Moving Twitter Service
+ plugin from core into the plugins directory.
+
+ * mod/blog/languages/en.php: Adding a language definition.
+
+2010-04-07 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/river/item/wrapper.php: conversations now use
+ generic_comments for replies so no need for the extra logic in the river
+ wrapper.
+
+2010-04-07 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/actions/addcomment.php, mod/profile/actions/deletecomment.php,
+ mod/profile/actions/editfield.php, mod/profile/actions/reorder.php,
+ .../default/profile/commentwall/commentwall.php,
+ .../profile/commentwall/commentwall_content.php,
+ .../default/profile/commentwall/commentwalladd.php,
+ .../default/profile/editdefaultprofileitems.php,
+ .../profile/profile_contents/commentwall.php: Removed windows line endings.
+
+ * mod/profile/actions/deletedefaultprofileitem.php,
+ .../default/profile/editdefaultprofileitems.php: Fixed incorrect casting to
+ int for profile ids. Fixed incorrect URL for reordering.
+
+ * mod/profile/start.php: Fixed displaying of custom profile fields on
+ profile page.
+
+ * mod/profile/start.php, .../default/profile/editdefaultprofileitems.php:
+ Fixed editable profile fields.
+
+ * mod/profile/vendor/jq.editable.min.js,
+ mod/profile/vendor/jquery.jeditable.mini.js,
+ .../default/profile/editdefaultprofileitems.php: Wrong jquery editable lib.
+
+ * mod/profile/actions/deletedefaultprofileitem.php,
+ mod/profile/actions/editdefault.php, mod/profile/actions/editfield.php,
+ mod/profile/actions/reorder.php, mod/profile/actions/resetdefaultprofile.php,
+ mod/profile/defaultprofile.php, mod/profile/graphics/drag_handle.png,
+ mod/profile/languages/en.php, mod/profile/manifest.xml,
+ mod/profile/start.php, mod/profile/vendor/jq.editable.min.js,
+ .../views/default/profile/editdefaultprofile.php,
+ .../default/profile/editdefaultprofileitems.php: First go at merging in
+ draggable profile fields. Added categories to profile plugin.
+
+ * engine/lib/elgglib.php: Added optional html_encode parameter to
+ elgg_add_action_tokens_to_url() so it can be used in ajax calls.
+
+2010-04-07 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/blog_lib.php, mod/blog/languages/en.php, mod/blog/start.php:
+ Highlighting current tab in content header. Includes updates to language
+ strings.
+
+2010-04-07 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/bookmarks/index.php: mine tab selects correctly now
+
+2010-04-07 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/blog_lib.php, mod/blog/languages/en.php, mod/blog/start.php,
+ mod/blog/views/default/object/blog.php: Creating content for the blog posts
+ of user's friends.
+
+2010-04-07 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/admin/plugins_opt/plugin.php: Fixed broken interface on
+ updated plugin list
+
+2010-04-07 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/actions/blog/auto_save_revision.php,
+ mod/blog/views/default/blog/forms/edit.php: Updating autosave handler and
+ "Saved date" return values.
+
+ * engine/lib/metadata.php: Ensuring malformed offset/limit values are
+ ignored by elgg_list_entities_from_metadata(). Refs #2046
+
+2010-04-07 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php, .../views/default/river/object/blog/create.php,
+ mod/groups/views/default/river/forum/create.php,
+ .../views/default/river/forum/topic/create.php,
+ .../views/default/river/object/page/create.php,
+ .../views/default/river/item/wrapper.php,
+ .../views/default/riverdashboard/css.php,
+ .../views/default/riverdashboard/js.php,
+ .../views/default/riverdashboard/rivercomment.php,
+ views/default/annotation/annotate.php, views/default/annotation/likes.php,
+ views/default/css.php, views/default/js/initialise_elgg.php,
+ views/default/likes/forms/display.php, views/default/likes/forms/edit.php,
+ views/default/likes/forms/link.php: Riverdashboard refreshed, and updated
+ display of comments and likes (the loading of these needs to be moved to ajax
+ callbacks)
+
+2010-04-07 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../default/profile/profile_contents/feeds.php,
+ .../views/default/profile/profile_navigation.php,
+ .../views/default/profile/profile_ownerblock.php: profile feeds moved from
+ top tabs
+
+2010-04-07 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/settings/system.php: Removed installation usage settings.
+
+2010-04-06 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php, views/default/admin/plugins.php,
+ views/default/admin/plugins_opt/plugin.php, views/default/css.php,
+ views/default/js/initialise_elgg.php: Added screenshots to plugins list.
+
+2010-04-06 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * CONTRIBUTORS.txt:
+
+ * CONTRIBUTORS.txt: upon request
+
+2010-04-06 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Sanitise int on the offset.
+
+2010-04-06 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/elgg_footer.php: Footer float cleared for
+ theming purposes.
+
+2010-04-05 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/actions/blog/save.php, mod/blog/views/default/blog/css.php,
+ mod/blog/views/default/blog/forms/edit.php,
+ mod/blog/views/default/input/datetime.php: Adding a datetime view for use
+ with blog publication.
+
+2010-04-05 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/plugins.php, languages/en.php, views/default/admin/plugins.php,
+ views/default/admin/plugins_opt/plugin.php: Added category and name as valid
+ plugin manifest keys/values.
+
+2010-04-05 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/metadata.php: Metadata lists will default offset and limit to
+ existing url elements.
+
+2010-04-05 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/plugins.php: load_plugin_manifest() converts multiple keys with
+ the same name into assoc arrays.
+
+2010-04-05 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/views/default/object/blog.php: Ensuring generic text line breaks
+ are replaced by paragraph tags.
+
+ * engine/lib/metadata.php: Passing entity list options on to view.
+
+ * engine/lib/elgglib.php: Refs #1947: Do not require views to explicitly
+ pass in the offset.
+
+2010-04-05 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, engine/lib/input.php, engine/schema/mysql.sql,
+ mod/htmlawed/start.php, mod/messages/views/default/messages/css.php,
+ .../notifications/subscriptions/forminternals.php,
+ mod/profile/actions/edit.php, mod/search/languages/en.php,
+ mod/search/search_hooks.php, mod/search/views/default/search/css.php,
+ mod/search/views/default/search/entity.php,
+ mod/search/views/rss/search/comments/entity.php,
+ views/default/account/forms/register.php, views/default/friends/picker.php,
+ views/default/output/friendlytitle.php: Merged 5605:5622 from 1.7 to trunk.
+
+ * CHANGES.txt, actions/admin/user/makeadmin.php,
+ actions/admin/user/removeadmin.php, actions/register.php,
+ actions/useradd.php, engine/lib/actions.php, engine/lib/annotations.php,
+ engine/lib/database.php, engine/lib/elgglib.php, engine/lib/entities.php,
+ engine/lib/group.php, engine/lib/metadata.php, engine/lib/notification.php,
+ engine/lib/river2.php, engine/lib/sessions.php,
+ engine/lib/upgrades/2010033101.php, engine/lib/upgrades/2010040201.php,
+ engine/lib/users.php, engine/lib/widgets.php,
+ engine/schema/upgrades/2009100701.sql,
+ engine/tests/api/entity_getter_functions.php, engine/tests/objects/users.php,
+ languages/en.php, mod/bookmarks/index.php, mod/bookmarks/start.php,
+ .../views/default/widgets/bookmarks/edit.php, mod/file/index.php,
+ mod/file/start.php, mod/file/views/default/widgets/filerepo/edit.php,
+ mod/file/views/default/widgets/filerepo/view.php, mod/groups/discussions.php,
+ mod/pages/index.php, mod/pages/views/default/widgets/pages/edit.php,
+ mod/pages/views/default/widgets/pages/view.php, mod/profile/actions/edit.php,
+ mod/profile/icondirect.php, .../views/default/profile/menu/adminlinks.php,
+ mod/search/index.php, mod/thewire/actions/add.php, mod/thewire/everyone.php,
+ mod/thewire/languages/en.php, mod/thewire/start.php,
+ .../views/default/thewire/activity_view.php,
+ mod/thewire/views/default/thewire/css.php,
+ mod/thewire/views/default/widgets/thewire/edit.php,
+ mod/thewire/views/default/widgets/thewire/view.php,
+ .../views/rss/search/object/thewire/entity.php, version.php,
+ views/default/account/forms/register.php,
+ views/default/account/forms/useradd.php,
+ views/default/output/friendlytime.php,
+ views/default/output/friendlytitle.php, views/default/output/url.php,
+ views/default/page_elements/elgg_topbar.php: Merged 5530:5604 from 1.7 to
+ trunk.
+
+ * engine/lib/entities.php, mod/bookmarks/actions/add.php,
+ mod/embed/views/default/embed/media.php,
+ mod/embed/views/default/embed/pagination.php, mod/file/actions/save.php,
+ mod/groups/actions/edit.php, mod/groups/actions/forums/addtopic.php,
+ mod/groups/actions/forums/edittopic.php, mod/members/index.php,
+ mod/members/views/default/members/search.php, mod/messages/actions/send.php,
+ mod/pages/actions/pages/edit.php, views/default/output/url.php,
+ views/failsafe/messages/sanitisation/settings.php: Merged 5487:5525 from 1.7
+ to trunk.
+
+2010-04-05 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../default/profile/profile_contents/feeds.php: count added
+
+ * mod/profile/profile_lib.php,
+ .../default/profile/profile_contents/feeds.php,
+ .../views/default/profile/profile_navigation.php: feeds options added to the
+ profile
+
+ * views/default/account/forms/login.php: return to referer added to the
+ login form
+
+2010-04-03 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../notifications/subscriptions/forminternals.php: merged [5526] - [5530]
+ into trunk from 1.7 branch - there are more changes before and after these
+ revisions to be merged
+
+ * views/default/admin/plugins.php: the disable button may be for disabling
+ plugins but it is not disabled itself
+
+ * CHANGES.txt, engine/lib/elgglib.php, views/default/admin/plugins.php,
+ views/default/admin/plugins_opt/plugin.php: Fixes #1184 - added
+ elgg_format_url() for handling ampersands in urls
+
+ * views/default/page_elements/elgg_topbar.php: target is not allowed in
+ xhtml strict
+
+ * views/default/account/forms/login.php: fixed some markup issues with login
+ box
+
+ * views/default/navigation/site_nav.php: only display navigation if there
+ are registered nav items - cannot have ul element without li elements
+
+ * views/default/page_elements/elgg_footer.php,
+ views/default/page_elements/html_begin.php: removed two elements not allowed
+ with xhtml strict and removed blank line at top of html sent to browser
+
+2010-04-02 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/navigation/site_nav.php: Fixed the empty nav item entries
+ when automatically building menu.
+
+2010-04-02 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/blog_lib.php: Determining which content header to use based on
+ blog owner. Primary navigation tabs should not display on other users' blog
+ lists.
+
+ * mod/blog/blog_lib.php, mod/blog/languages/en.php: Allowing non-owners to
+ view published blog posts.
+
+ * mod/blog/blog_lib.php: Truncating lengthy blog excerpts on word breaks.
+
+ * mod/blog/blog_lib.php, mod/blog/languages/en.php, mod/blog/start.php,
+ mod/blog/views/default/object/blog.php: Fixing breadcrumb navigation and
+ content header links for blogs.
+
+ * views/default/page_elements/content_header.php: Allowing default page
+ handler to be overridden. You can pass in full url overrides to the content
+ header view for all/mine/friend tabs.
+
+2010-04-02 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../default/profile/profile_contents/activity.php: limit set for profile
+ river
+
+ * views/default/annotation/latest_comments.php: small lang tweak
+
+ * mod/groups/start.php: point the groups main nav link to the all groups
+ page
+
+ * mod/bookmarks/all.php, mod/bookmarks/languages/en.php,
+ mod/bookmarks/views/default/bookmarks/stats.php: bookmark stats now correct,
+ missing strings applied and a function call moved out of the view.
+
+ * mod/profile/start.php: hash out the profile menu option for now, this will
+ be moved to the topbar.
+
+2010-03-31 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/more_sprite.png, languages/en.php,
+ views/default/admin/menu_items.php, views/default/css.php,
+ views/default/css_ie.php, views/default/css_ie6.php,
+ views/default/navigation/site_nav.php: Updated site primary nav bar and
+ improved drop-down submenu and made IE compatible, also cleaned up / improved
+ menuitem admin area.
+
+2010-03-31 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/languages/en.php, .../views/default/river/object/blog/create.php:
+ blog river view altered to pull out some content
+
+2010-03-31 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css_ie.php, views/default/css_ie6.php,
+ views/default/page_elements/html_begin.php: Updated paths to IE specific css,
+ and triggered hasLayout for IE.
+
+2010-03-30 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/bookmarks/languages/en.php, mod/bookmarks/start.php,
+ .../views/default/bookmarks/group_bookmarks.php,
+ mod/groups/views/default/groups/css.php: Added the beginnings of a bookmark
+ view for group profile pages.
+
+ * mod/file/start.php, mod/file/views/default/file/groupprofile_files.php,
+ mod/groups/views/default/groups/css.php,
+ mod/groups/views/default/groups/profileitems.php: Added the beginnings of a
+ new method for displaying the latest content from each tool on a groups
+ profile page.
+
+ * mod/blog/views/default/blog/sidebar_menu.php: Changed blog archive header
+ tag.
+
+ * mod/profile/languages/en.php,
+ .../default/profile/commentwall/commentwall.php,
+ .../profile/commentwall/commentwall_content.php,
+ .../default/profile/commentwall/commentwalladd.php,
+ mod/profile/views/default/profile/css.php: Updated UI for commentwall on
+ profile page.
+
+2010-03-29 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/actions/addcomment.php, mod/profile/actions/deletecomment.php,
+ mod/profile/languages/en.php, mod/profile/profile_lib.php,
+ mod/profile/start.php, .../default/profile/commentwall/commentwall.php,
+ .../profile/commentwall/commentwall_content.php,
+ .../default/profile/commentwall/commentwalladd.php,
+ .../profile/profile_contents/commentwall.php,
+ .../views/default/profile/profile_navigation.php: simple comment wall added
+ to profiles
+
+ * .../views/default/profile/profile_navigation.php: inserted a view for
+ others to extend on profile navigation
+
+2010-03-26 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/river/object/blog/create.php: Added river item views to
+ blog.
+
+ * README.txt: Changed Ben's email addy in README.txt.
+
+2010-03-25 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/likes/forms/edit.php: Updated Likes link.
+
+ * languages/en.php, views/default/comments/forms/edit.php: Updated generic
+ comment submit button text.
+
+2010-03-25 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * README.txt: Bumped version in README.
+
+ * actions/likes/delete.php, mod/bookmarks/actions/edit.php,
+ mod/bookmarks/actions/reference.php, mod/bookmarks/actions/remove.php,
+ mod/bookmarks/views/default/bookmarks/stats.php,
+ .../views/default/members/members_navigation.php,
+ mod/riverdashboard/endpoint/ping.php, mod/riverdashboard/index.php,
+ mod/riverdashboard/languages/en.php, mod/riverdashboard/start.php,
+ .../views/default/riverdashboard/container.php,
+ .../views/default/riverdashboard/menu.php,
+ .../views/default/riverdashboard/nav.php,
+ .../views/default/riverdashboard/rivercomment.php,
+ .../views/default/riverdashboard/welcome.php,
+ mod/sitepages/actions/addmeta.php, mod/sitepages/sitepages_functions.php,
+ .../views/default/settings/sitepages/edit.php,
+ .../views/default/sitepages/forms/editmeta.php,
+ mod/sitepages/views/default/sitepages/keywords.php,
+ mod/sitepages/views/default/sitepages/metatags.php,
+ views/default/annotation/annotatelike.php,
+ views/default/annotation/likes.php, views/foaf/search/entity_list.php,
+ views/opendd/search/entity_list.php, views/rss/search/entity_list.php:
+ Converting all line endings to unix style.
+
+ * .../views/default/riverdashboard/js.php,
+ .../views/default/riverdashboard/rivercomment.php,
+ views/default/js/initialise_elgg.php, views/default/likes/forms/edit.php:
+ Fixed likes interface JS.
+
+ * mod/blog/actions/blog/save.php, mod/blog/blog_lib.php,
+ mod/blog/languages/en.php, mod/blog/start.php: Added river support to blog.
+
+ * engine/lib/annotations.php, engine/lib/elgglib.php: Cleaned up the likes
+ interface a bit.
+
+ * mod/blog/blog_lib.php: Fixed weird login in blog for real.
+
+ * mod/blog/blog_lib.php: Added access controls to blog archive grabbing
+ function. Corrected weird logic for checking validity of blog entities while
+ displaying posts.
+
+2010-03-25 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../default/file/specialcontent/audio/mp3.php,
+ .../default/file/specialcontent/audio/mpeg.php,
+ .../default/file/specialcontent/audio/mpg.php: Small update to zaudio player
+ spacing for new layout.
+
+2010-03-24 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/search/comments/entity.php,
+ views/default/annotation/generic_comment.php: Added anchor names for
+ comments.
+
+ * actions/admin/menu_items.php, engine/lib/elgglib.php, languages/en.php,
+ views/default/admin/menu_items.php: Added ability to make arbitrary links for
+ the menu items.
+
+ * mod/blog/blog_lib.php, mod/blog/views/default/blog/sidebar_menu.php: Added
+ archive view for blogs.
+
+ * engine/lib/metadata.php: Added documentation for order_by_metadata.
+
+2010-03-24 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/tags.php: tag cloud functions are deprecated in 1.8
+
+2010-03-23 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/blog_lib.php, mod/blog/languages/en.php, mod/blog/start.php,
+ mod/blog/views/default/blog/sidebar_menu.php: Added filtering by archive
+ date.
+
+ * views/default/input/datepicker.php: Corrected bug in datepicker for
+ passing in values.
+
+ * CHANGES.txt, engine/lib/entities.php: Added remove_subtype() and
+ update_subtype().
+
+ * engine/lib/elgglib.php: Added missing merge from Merge Monday.
+
+ * mod/blog/actions/blog/auto_save_revision.php,
+ mod/blog/actions/blog/save.php, mod/blog/blog_lib.php,
+ mod/blog/languages/en.php, mod/blog/start.php,
+ mod/blog/views/default/blog/forms/edit.php,
+ mod/blog/views/default/object/blog.php: Added an ElggBlog class to override
+ the time_created field. Added extra language files.
+
+2010-03-23 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/languages/en.php, mod/riverdashboard/index.php: Minor update
+ to profile language strings, and corrected view on riverdashboard for views
+ to extend.
+
+ * views/default/input/userpicker.php: Updated userpicker to use generic
+ delete button
+
+ * views/default/page_elements/elgg_topbar.php: Reordered the top toolbar
+ items.
+
+ * views/default/css.php: Moved Shared Access css into plugin
+
+2010-03-23 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/navigation/site_nav.php: Added selected class in navbar
+ menu.
+
+2010-03-23 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/sitepages/languages/en.php,
+ .../views/default/sitepages/forms/edit.php,
+ .../views/default/sitepages/forms/editfront.php,
+ .../views/default/sitepages/forms/editmeta.php,
+ mod/sitepages/views/default/sitepages/keywords.php,
+ mod/sitepages/views/default/sitepages/menu.php,
+ mod/sitepages/views/default/sitepages/metatags.php: Updated SitePages to new
+ code standards & UI.
+
+2010-03-22 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php, views/default/settings/upgrading.php: Update to
+ ajax loader css and upgrade.php
+
+2010-03-22 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php, engine/lib/configuration.php,
+ engine/lib/elgglib.php, engine/lib/entities.php, engine/lib/input.php,
+ engine/lib/install.php, engine/lib/metadata.php, engine/lib/tags.php,
+ engine/lib/users.php, languages/en.php,
+ mod/bookmarks/views/default/bookmarks/form.php,
+ mod/custom_index/languages/en.php, mod/externalpages/actions/add.php,
+ .../views/default/expages/forms/edit.php,
+ mod/groups/actions/groupskillinvitation.php, mod/groups/all.php,
+ mod/groups/languages/en.php, mod/groups/views/default/groups/find.php,
+ .../views/default/groups/invitationrequests.php,
+ mod/groups/views/rss/groups/profileitems.php,
+ mod/groups/views/rss/object/groupforumtopic.php, mod/messages/index.php,
+ mod/messages/sent.php, mod/search/views/rss/search/layout.php,
+ mod/thewire/start.php, mod/tinymce/views/default/input/longtext.php,
+ views/default/output/tagcloud.php,
+ .../messages/sanitisation/dbsettings_error.php: Merged 1.7 bugfixes back into
+ core. (5376:HEAD).
+
+2010-03-22 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/file/start.php, mod/file/views/default/file/menu.php,
+ mod/messages/start.php, mod/messages/views/default/messages/menu.php,
+ mod/pages/start.php, mod/pages/views/default/pages/menu.php,
+ mod/profile/languages/en.php, mod/profile/start.php,
+ mod/profile/views/default/profile/css.php,
+ mod/profile/views/default/profile/icon.php,
+ mod/profile/views/default/profile/menu/actions.php,
+ .../views/default/profile/menu/adminwrapper.php,
+ .../views/default/profile/menu/friendlinks.php,
+ mod/profile/views/default/profile/menu/links.php,
+ .../views/default/profile/menu/linksownpage.php,
+ .../views/default/profile/profile_ownerblock.php,
+ mod/profile/views/default/profile/submenu.php,
+ .../views/default/reportedcontent/user_report.php: Updated avatar menu:
+ Removed links to tools, provided a view to extend menu, added @username to
+ menu, cleaned-up and simplified menu generation.
+
+ * mod/profile/index.php, mod/profile/profile_lib.php, mod/profile/start.php,
+ .../views/default/profile/profile_navigation.php: Removed widget view from
+ Profile.
+
+2010-03-21 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/riverdashboard/rivercomment.php: hide the river comment
+ form - still need to add a handle to each one so the correct comment form
+ opens
+
+ * actions/comments/add.php, actions/comments/delete.php,
+ mod/riverdashboard/start.php, .../views/default/river/item/wrapper.php,
+ .../views/default/riverdashboard/rivercomment.php: the beginnings of a
+ mechanism to comment on river objects
+
+ * actions/likes/delete.php: after delete action, return to the correct
+ context
+
+ * views/default/annotation/likes.php: timestamp added to like action view
+
+ * .../views/default/river/item/wrapper.php,
+ views/default/likes/forms/edit.php: more tweaks to likes on the activity
+ stream
+
+ * .../views/default/river/item/wrapper.php: likes added to the activity
+ river
+
+ * mod/blog/views/default/object/blog.php: like display added to blog object
+
+ * mod/blog/views/default/object/blog.php: like added to blog posts
+
+ * actions/likes/add.php, actions/likes/delete.php,
+ engine/lib/annotations.php, engine/lib/elgglib.php, languages/en.php,
+ views/default/annotation/annotatelike.php,
+ views/default/annotation/likes.php, views/default/likes/forms/edit.php:
+ generic like this functionality added
+
+2010-03-20 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, languages/en.php,
+ views/default/admin/menu_items.php, views/default/css.php,
+ views/default/navigation/site_nav.php,
+ views/default/navigation/topbar_tools.php,
+ views/default/page_elements/elgg_topbar.php: Moved toolbar dropdown menu to
+ main nav. Added CSS for main nav dropdown. Emptied navigation/topbar_tools
+ view.
+
+ * engine/start.php: Removed non-working "lightmode" option.
+
+ * engine/lib/elgglib.php, engine/start.php: Removed ui_page_setup() to fix
+ installation. Gave engine/start.php a bit of love.
+
+2010-03-19 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/start.php, mod/bookmarks/start.php, mod/file/start.php,
+ mod/groups/start.php, mod/riverdashboard/start.php,
+ mod/thewire/languages/en.php, mod/thewire/start.php: Default all tools' menu
+ items to "world" view. Removed "My" prefix.
+
+ * mod/tinymce/views/default/input/longtext.php: Added a space between the
+ word count colon and the number for tinymce.
+
+ * engine/lib/elgglib.php: Namespaces sticky forms. Requires more testing.
+
+2010-03-19 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/content_header_filter.gif,
+ vendors/jquery/custom-form-elements.js, views/default/css.php,
+ views/default/page_elements/content_header.php: Removed page content area
+ filter menu, in favor of simple tabs.
+
+ * languages/en.php, mod/blog/views/default/blog/sidebar_menu.php,
+ mod/file/friends.php, mod/file/index.php, mod/file/world.php,
+ views/default/annotation/latest_comments.php, views/default/css.php: Updated
+ latest comments to new UI and coding standards, and added to Blog and Files
+ sidebar.
+
+2010-03-18 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/actions/blog/auto_save_revision.php,
+ mod/blog/actions/blog/save.php, mod/blog/actions/blog/save_draft.php,
+ mod/blog/blog_lib.php, mod/blog/languages/en.php, mod/blog/start.php,
+ mod/blog/views/default/blog/forms/edit.php,
+ mod/blog/views/default/blog/sidebar_edit.php,
+ mod/blog/views/default/blog/sidebar_menu.php,
+ mod/blog/views/default/blog/sidebar_revisions.php,
+ mod/blog/views/default/object/blog.php: Updated blog to support multiple
+ revisions and automatic saving of drafts.
+
+2010-03-18 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/views/default/blog/sidebar_menu.php,
+ mod/blog/views/default/object/blog.php, mod/bookmarks/add.php,
+ mod/bookmarks/all.php, mod/bookmarks/friends.php, mod/bookmarks/index.php,
+ mod/bookmarks/views/default/object/bookmarks.php: Included a view for plugins
+ to extend (on the new reworked Bookmarks and Blogs).
+
+2010-03-17 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/languages/en.php: Added blog languages.
+
+ * actions/admin/menu_items.php, admin/menu_items.php, engine/lib/admin.php,
+ engine/lib/elgglib.php, engine/lib/users.php, languages/en.php,
+ views/default/admin/menu_items.php, views/default/navigation/site_nav.php,
+ views/default/navigation/topbar_tools.php: Added config options for tabs and
+ menu items.
+
+2010-03-17 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../default/profile/profile_contents/activity.php,
+ .../views/default/river/item/wrapper.php, views/default/css.php,
+ views/default/navigation/site_nav.php: Updates to: site nav (changed unused
+ id's to title tags), latest wire post in admin/user lists, riverdashboard
+ timestamps unified, and latest wire post on profile page.
+
+2010-03-17 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/configuration.php: Updated documentation for set_config().
+ Removed unnecessary escaping of value before serializing, which broke arrays
+ anyway...
+
+ * views/default/input/pulldown.php: Documented pulldown quirks for NULL and
+ FALSE as values. Fixed bug when calling htmlentities() on the values before
+ testing them.
+
+ * views/default/input/pulldown.php: Refs #1362: Fixed a problem when
+ comparing int and string values to determin the pulldown's selected value.
+
+2010-03-16 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/messages/views/default/messages/css.php: Minor css update to new
+ message notification.
+
+ * views/default/navigation/site_nav.php: Addition of 'conversations' to
+ temporary site_nav.
+
+ * entities/list.php, mod/blog/start.php,
+ mod/bookmarks/views/default/bookmarks/stats.php,
+ .../views/default/widgets/bookmarks/view.php, mod/members/index.php: Replaced
+ more calls to deprecated functions.
+
+ * services/export/handler.php, views/default/export/entity.php,
+ views/default/export/metadata.php, views/default/export/relationship.php:
+ Updates to default entity views (within admin/log browser).
+
+ * mod/logbrowser/views/default/logbrowser/form.php: Minor update (form
+ spacing) to log browser.
+
+ * .../views/default/reportedcontent/css.php,
+ .../views/default/reportedcontent/form.php: Minor UI updates to reported
+ content.
+
+ * mod/file/views/default/widgets/filerepo/view.php,
+ views/default/navigation/viewtype.php: Minor updates to Files.
+
+ * mod/embed/embed.php, mod/embed/images/button_spacer.gif,
+ mod/embed/images/loading.gif, mod/embed/images/media_modal.png,
+ mod/embed/start.php, mod/embed/views/default/embed/css.php,
+ mod/embed/views/default/embed/js.php, mod/embed/views/default/embed/link.php,
+ mod/embed/views/default/embed/media.php,
+ mod/embed/views/default/embed/pagination.php,
+ mod/embed/views/default/embed/simpletype.php,
+ mod/embed/views/default/embed/tabs.php,
+ mod/embed/views/default/embed/upload.php,
+ mod/embed/views/default/group/default/embed.php,
+ mod/embed/views/default/object/default/embed.php,
+ mod/embed/views/default/object/file/embed.php,
+ mod/embed/views/default/object/file/embedlist.php,
+ mod/embed/views/default/site/default/embed.php,
+ mod/embed/views/default/user/default/embed.php: Updated Embed mod to new UI.
+
+ * views/default/css.php: Updates to generic comments
+
+2010-03-15 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/file/views/default/file/css.php,
+ mod/file/views/default/object/file.php: Further updates to files single
+ entity view.
+
+ * entities/index.php, mod/file/edit.php, mod/file/friends.php,
+ mod/file/index.php, mod/file/languages/en.php, mod/file/search.php,
+ mod/file/start.php, mod/file/upload.php, mod/file/views/default/file/css.php,
+ mod/file/views/default/file/groupprofile_files.php,
+ mod/file/views/default/file/typecloud.php,
+ mod/file/views/default/file/upload.php,
+ mod/file/views/default/object/file.php, mod/file/world.php,
+ mod/profile/views/default/profile/css.php,
+ mod/search/views/default/search/gallery.php,
+ mod/tinymce/views/default/tinymce/css.php, views/default/css.php,
+ views/default/entities/gallery.php, views/default/navigation/site_nav.php:
+ Updated File mod to new UI.
+
+ * mod/profile/defaultprofile.php: Corrected misspelt classname.
+
+2010-03-15 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/tagcloud/start.php: Replaced extend_view() with elgg_extend_view().
+
+ * .../views/default/reportedcontent/listing.php, mod/sitepages/start.php,
+ views/default/output/confirmlink.php, views/default/output/url.php: Replaced
+ calls to deprecated elgg_validate_action_url() with
+ elgg_add_action_tokens_to_url().
+
+2010-03-15 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/tinymce/views/default/input/longtext.php,
+ mod/tinymce/views/default/tinymce/css.php, views/default/css.php: Update to
+ longtext/tintMCE input box ui.
+
+ * admin/plugins.php, mod/profile/defaultprofile.php,
+ mod/profile/views/default/profile/css.php,
+ .../views/default/profile/editdefaultprofile.php,
+ .../views/default/reportedcontent/listing.php,
+ mod/sitepages/views/default/sitepages/menu.php,
+ views/default/admin/plugins.php, views/default/admin/plugins_opt/plugin.php,
+ views/default/admin/site.php, views/default/admin/user.php,
+ views/default/css.php, views/default/settings/system.php: Updates to Admin
+ area UI.
+
+ * mod/captcha/captcha.php, mod/captcha/start.php,
+ mod/captcha/views/default/captcha/css.php,
+ mod/captcha/views/default/input/captcha.php: Updated Captcha UI.
+
+ * mod/twitter/views/default/twitter/css.php,
+ mod/twitter/views/default/widgets/twitter/view.php,
+ mod/twitterservice/start.php,
+ .../default/usersettings/twitterservice/edit.php: Updates to Twitter and
+ TwitterService UI.
+
+ * views/default/usersettings/plugins.php: Small update to
+ user-settings/tools page.
+
+ * mod/thewire/everyone.php: …and doing it properly this time.
+
+ * mod/invitefriends/index.php, mod/invitefriends/manifest.xml,
+ mod/invitefriends/start.php, .../views/default/invitefriends/formitems.php:
+ Updated Invite Friends mod to new ui.
+
+ * .../graphics/icon_notifications_site.gif, mod/notifications/groups.php,
+ mod/notifications/index.php, mod/notifications/languages/en.php,
+ .../views/default/notifications/css.php,
+ .../notifications/settings/usersettings.php,
+ .../notifications/subscriptions/collections.php,
+ .../default/notifications/subscriptions/form.php,
+ .../notifications/subscriptions/forminternals.php,
+ .../notifications/subscriptions/groupsform.php,
+ .../notifications/subscriptions/personal.php, views/default/css.php: Updated
+ Notifications to new UI.
+
+2010-03-13 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * version.php: Trunk isn't 1.7.
+
+2010-03-13 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/search/views/default/search/search_box.php,
+ views/default/input/form.php: seems you need to wrap form inputs fields with
+ the fieldset tag for strict xhtml
+
+ * views/default/page_elements/html_begin.php: capitals not allow for strict
+ xhtml
+
+ * views/default/page_elements/html_begin.php: self close the favicon link
+
+2010-03-12 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/views/default/blog/sidebar_menu.php,
+ mod/tagcloud/languages/de.php, mod/tagcloud/languages/en.php,
+ mod/tagcloud/manifest.xml, mod/tagcloud/start.php, mod/tagcloud/tagcloud.php,
+ mod/tagcloud/views/default/output/tagcloud.php,
+ mod/tagcloud/views/default/tagcloud/css.php,
+ .../views/default/widgets/tagcloud/edit.php,
+ .../views/default/widgets/tagcloud/view.php, views/default/css.php: Added
+ updated tagcloud plugin and added to core mods.
+
+2010-03-12 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * UPGRADE.txt, admin/user.php, engine/lib/elgglib.php, index.php,
+ languages/en.php, mod/diagnostics/start.php, mod/file/friends.php,
+ mod/file/index.php, mod/file/search.php, mod/file/world.php,
+ mod/groups/all.php, mod/groups/index.php, mod/groups/membership.php,
+ mod/groups/views/default/forms/forums/addpost.php,
+ mod/groups/views/default/forms/forums/addtopic.php,
+ mod/groups/views/default/forms/groups/edit.php,
+ mod/pages/actions/pages/edit.php, mod/pages/index.php,
+ mod/pages/languages/en.php, mod/pages/views/default/forms/pages/edit.php,
+ mod/pages/views/default/pages/welcome.php, mod/pages/world.php,
+ mod/reportedcontent/actions/add.php, mod/reportedcontent/actions/archive.php,
+ mod/reportedcontent/actions/delete.php, mod/search/search_hooks.php,
+ mod/thewire/everyone.php, mod/uservalidationbyemail/start.php: Merged Cash's
+ bugfixes from the 1.7 branch (3288:5377).
+
+2010-03-12 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/header_shadow.png, mod/blog/views/default/blog/css.php,
+ mod/blog/views/default/object/blog.php,
+ views/default/annotation/annotate.php,
+ views/default/annotation/generic_comment.php,
+ views/default/annotation/latest_comments.php, views/default/css.php:
+ Updated/cleaned-up generic comments with new UI.
+
+ * mod/blog/views/default/blog/css.php,
+ mod/blog/views/default/blog/forms/edit.php,
+ mod/blog/views/default/object/blog.php,
+ views/default/annotation/generic_comment.php,
+ views/default/comments/forms/edit.php: Updated interface on new blog
+ (listings and edit/new blog pages).
+
+ * mod/bookmarks/views/default/object/bookmarks.php,
+ mod/groups/views/default/forum/topicposts.php,
+ mod/groups/views/default/groups/css.php,
+ mod/messages/views/default/messages/view.php,
+ mod/thewire/views/default/object/thewire.php, views/default/css.php: Updated
+ and simplified generic entity listings metadata block (edit, delete, access)
+ to not use tables.
+
+ * mod/blog/views/default/blog/sidebar_menu.php,
+ mod/groups/views/default/groups/side_menu.php, mod/members/index.php,
+ mod/profile/views/default/profile/submenu.php,
+ .../views/default/riverdashboard/menu.php,
+ views/default/canvas_header/submenu_group.php, views/default/css.php,
+ views/default/page_elements/owner_block.php,
+ views/default/page_elements/title.php: Removed unneeded div from around
+ submenu lists.
+
+2010-03-12 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/metadata.php: Added elgg_list_entities_from_metadata() and
+ deprecated list_entities_from_metadata().
+
+ * views/default/input/calendar.php, views/default/input/datepicker.php:
+ Added datepicker view and deprecated calendar view.
+
+ * mod/blog/actions/add.php, mod/blog/actions/blog/delete.php,
+ mod/blog/actions/blog/save.php, mod/blog/actions/blog/save_draft.php,
+ mod/blog/actions/delete.php, mod/blog/actions/edit.php, mod/blog/add.php,
+ mod/blog/all.php, mod/blog/archive.php, mod/blog/blog_lib.php,
+ mod/blog/edit.php, mod/blog/endpoint/index.php, mod/blog/everyone.php,
+ mod/blog/friends.php, mod/blog/index.php, mod/blog/languages/en.php,
+ mod/blog/manifest.xml, mod/blog/preview.php, mod/blog/read.php,
+ mod/blog/savedraft.php, mod/blog/shared.php, mod/blog/start.php,
+ mod/blog/views/default/blog/archive.php,
+ mod/blog/views/default/blog/categorylist.php,
+ mod/blog/views/default/blog/css.php,
+ mod/blog/views/default/blog/forms/edit.php,
+ mod/blog/views/default/blog/gallery.php,
+ mod/blog/views/default/blog/listing.php,
+ mod/blog/views/default/blog/menu.php,
+ mod/blog/views/default/blog/notfound.php,
+ mod/blog/views/default/blog/previewpane.php,
+ mod/blog/views/default/blog/sidebar_menu.php,
+ mod/blog/views/default/blog/stats.php, mod/blog/views/default/blog/view.php,
+ mod/blog/views/default/object/blog.php,
+ .../views/default/river/object/blog/annotate.php,
+ .../views/default/river/object/blog/create.php,
+ .../views/default/river/object/blog/update.php: Rough first version of a new
+ blog plugin.
+
+2010-03-11 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/search/views/default/search/css.php: Minor interface updates for
+ search results.
+
+2010-03-11 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * CHANGES.txt, engine/lib/elgglib.php,
+ mod/tinymce/views/default/input/longtext.php, views/default/input/access.php,
+ views/default/input/calendar.php, views/default/input/checkboxes.php,
+ views/default/input/email.php, views/default/input/hidden.php,
+ views/default/input/longtext.php, views/default/input/plaintext.php,
+ views/default/input/pulldown.php, views/default/input/radio.php,
+ views/default/input/tags.php, views/default/input/text.php,
+ views/default/input/url.php, views/default/input/userpicker.php: Implemented
+ sticky forms.
+
+2010-03-11 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/search/comments/entity.php,
+ mod/search/views/default/search/css.php,
+ mod/search/views/default/search/entity.php,
+ mod/search/views/default/search/listing.php, views/default/css.php,
+ views/default/entities/gallery_listing.php: Updated Search results UI.
+
+2010-03-11 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * CHANGES.txt, engine/lib/elgglib.php, mod/bookmarks/add.php,
+ mod/bookmarks/index.php, mod/groups/forum.php,
+ mod/groups/views/default/forms/forums/addtopic.php,
+ mod/groups/views/default/forum/viewposts.php,
+ mod/messages/views/default/messages/messages.php,
+ views/default/navigation/breadcrumbs.php,
+ views/default/page_elements/breadcrumbs.php,
+ views/default/page_elements/content_header.php: Added breadcrumb support and
+ updated the mods with old-style breadcrumbs.
+
+2010-03-11 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * admin/user.php, mod/blog/views/default/blog/css.php,
+ mod/blog/views/default/blog/forms/edit.php,
+ mod/embed/views/default/embed/upload.php,
+ mod/groups/views/default/groups/css.php,
+ .../views/default/invitefriends/formitems.php,
+ mod/tinymce/views/default/input/longtext.php, views/default/css.php,
+ views/default/user/search/finishblurb.php,
+ views/default/user/search/startblurb.php, views/failsafe/input/access.php,
+ views/failsafe/input/longtext.php, views/failsafe/input/text.php: Updates:
+ longtext editor default size added (and overridden in group/forums), more
+ updates to lists of members, remaining/previously-missed generic input
+ classes renamed to lowercase.
+
+ * friends/index.php, friends/of.php,
+ mod/members/views/default/members/css.php,
+ mod/profile/views/default/profile/listing.php,
+ mod/thewire/views/default/thewire/css.php,
+ views/default/admin/statistics_opt/online.php, views/default/css.php: Updated
+ friends/members listings when there is a latest wire post to display.
+
+ * mod/blog/views/default/blog/menu.php,
+ mod/file/views/default/file/menu.php,
+ mod/messages/views/default/messages/menu.php,
+ mod/pages/views/default/pages/menu.php,
+ mod/profile/views/default/profile/css.php,
+ mod/profile/views/default/profile/hoverover.php,
+ mod/profile/views/default/profile/icon.php,
+ mod/profile/views/default/profile/menu/actions.php,
+ .../views/default/profile/menu/adminwrapper.php,
+ mod/profile/views/default/profile/menu/links.php,
+ .../views/default/profile/menu/linksownpage.php,
+ .../views/default/reportedcontent/user_report.php: Updated avatar user menu
+ to generate an ordered list, reinstated the add/remove friend link, & cleaned
+ up css.
+
+ * .../default/river/object/bookmarks/create.php,
+ .../river/user/default/profileiconupdate.php,
+ .../default/river/user/default/profileupdate.php,
+ mod/riverdashboard/endpoint/ping.php,
+ mod/riverdashboard/graphics/refresh.png,
+ .../views/default/river/item/list.php,
+ .../views/default/river/item/wrapper.php,
+ .../views/default/riverdashboard/container.php,
+ .../views/default/riverdashboard/css.php,
+ .../views/default/riverdashboard/menu.php,
+ .../views/default/riverdashboard/nav.php,
+ .../views/default/riverdashboard/newestmembers.php,
+ .../views/default/riverdashboard/sitemessage.php,
+ .../views/default/riverdashboard/welcome.php,
+ .../views/default/river/object/thewire/create.php,
+ mod/thewire/views/default/thewire/css.php,
+ views/default/annotation/annotate.php, views/default/css.php,
+ views/default/friends/river/create.php, views/default/river/item/wrapper.php,
+ views/default/river/wrapper.php: Riverdashboard updated to new UI. DOM
+ simplified a bit & css cleaned up.
+
+2010-03-10 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * CHANGES.txt, engine/lib/elgglib.php, engine/lib/entities.php,
+ engine/tests/api/helpers.php: Added elgg_instanceof().
+
+2010-03-10 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/bookmarks/languages/en.php, mod/members/views/default/members/css.php,
+ .../views/default/notifications/css.php,
+ .../notifications/subscriptions/forminternals.php, views/default/css.php,
+ views/default/friends/collections.php, views/default/friends/picker.php,
+ views/default/js/friendsPickerv1.php: Updated Friends Picker UI and added to
+ core css.
+
+ * mod/groups/views/default/forms/groups/edit.php,
+ mod/groups/views/default/forms/groups/invite.php,
+ mod/groups/views/default/groups/css.php: Minor ui updates to group forms
+
+2010-03-10 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../default/profile/profile_contents/activity.php: profile activity
+ tweaked // it is still not working correctly but doesn't cause a wsod
+
+2010-03-10 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/all.php, mod/groups/discussions.php, mod/groups/forum.php,
+ mod/groups/groupprofile.php, mod/groups/index.php,
+ mod/groups/languages/en.php, mod/groups/start.php,
+ mod/groups/views/default/forms/forums/addpost.php,
+ mod/groups/views/default/forms/forums/addtopic.php,
+ mod/groups/views/default/forum/topicposts.php,
+ mod/groups/views/default/forum/topics.php,
+ mod/groups/views/default/forum/viewposts.php,
+ mod/groups/views/default/group/group.php,
+ .../views/default/groups/closedmembership.php,
+ mod/groups/views/default/groups/css.php,
+ mod/groups/views/default/groups/featured.php,
+ mod/groups/views/default/groups/find.php,
+ mod/groups/views/default/groups/forum_latest.php,
+ .../views/default/groups/group_sort_menu.php,
+ mod/groups/views/default/groups/groupgallery.php,
+ mod/groups/views/default/groups/grouplisting.php,
+ mod/groups/views/default/groups/groupprofile.php,
+ mod/groups/views/default/groups/icon.php,
+ .../views/default/groups/invitationrequests.php,
+ mod/groups/views/default/groups/members.php,
+ .../views/default/groups/membershiprequests.php,
+ mod/groups/views/default/groups/profileitems.php,
+ .../views/default/object/groupforumtopic.php,
+ mod/groups/views/rss/groups/profileitems.php: Updated Groups to the new
+ interface. Some view clean-up & simplification done.
+
+2010-03-10 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../river/user/default/profileiconupdate.php,
+ .../default/river/user/default/profileupdate.php: river time stamps added to
+ profile edits
+
+ * mod/bookmarks/views/default/object/bookmarks.php: bookmarks open in a new
+ window ticket #1965
+
+ * mod/riverdashboard/index.php: closing div applied. Note: this needs
+ cleaning up.
+
+ * mod/riverdashboard/endpoint/ping.php, mod/riverdashboard/index.php,
+ mod/riverdashboard/languages/en.php, mod/riverdashboard/manifest.xml,
+ mod/riverdashboard/start.php, .../views/default/river/dashboard.php,
+ .../views/default/river/item/list.php,
+ .../views/default/river/item/wrapper.php,
+ .../default/river/relationship/friend/create.php,
+ .../views/default/river/sitemessage/create.php,
+ .../views/default/riverdashboard/container.php,
+ .../views/default/riverdashboard/css.php,
+ .../views/default/riverdashboard/menu.php,
+ .../views/default/riverdashboard/nav.php,
+ .../views/default/riverdashboard/welcome.php,
+ .../views/default/settings/riverdashboard/edit.php,
+ .../views/default/widgets/river_widget/edit.php,
+ .../views/default/widgets/river_widget/view.php: the beginnings of a new
+ activity river with ajax notification and conversation clustering.
+
+ * engine/lib/river2.php: new activity river api functions
+
+2010-03-09 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Fixed incorrect deprecated function rewrite for
+ list_entities().
+
+ * .../canvas/layouts/one_column_with_sidebar.php: Fixed documentation for
+ one_column_with_sidebar layout.
+
+2010-03-09 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/actions/add.php, mod/blog/actions/delete.php,
+ mod/blog/actions/edit.php, mod/blog/add.php, mod/blog/edit.php,
+ mod/blog/endpoint/index.php, mod/blog/languages/en.php,
+ mod/blog/manifest.xml, mod/blog/savedraft.php, mod/blog/start.php,
+ mod/blog/views/default/blog/archive.php,
+ mod/blog/views/default/blog/categorylist.php,
+ mod/blog/views/default/blog/css.php,
+ mod/blog/views/default/blog/forms/edit.php,
+ mod/blog/views/default/blog/gallery.php,
+ mod/blog/views/default/blog/listing.php,
+ mod/blog/views/default/blog/menu.php,
+ mod/blog/views/default/blog/notfound.php,
+ mod/blog/views/default/blog/previewpane.php,
+ mod/blog/views/default/blog/stats.php, mod/blog/views/default/blog/view.php,
+ mod/blog/views/default/object/blog.php: Blogs updated to new UI (needs Brett
+ to look over first)
+
+ * mod/profile/profile_lib.php,
+ .../default/profile/profile_contents/sidebar.php,
+ .../views/default/profile/profile_ownerblock.php: Added large avatar to
+ Profile/details page.
+
+2010-03-09 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/login.php: Forwarding to index.php after login instead of
+ pg/dashboard.
+
+2010-03-09 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/index.php, .../default/profile/profile_contents/details.php:
+ Full profile fields reinstated on profile/details page
+
+ * mod/profile/index.php, .../default/profile/profile_contents/activity.php:
+ Updated profile page calls to profile_contents.
+
+2010-03-09 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/sitepages/sitepages_functions.php: Fixes #1956: Corrected typo for
+ filtering by owner=username.
+
+2010-03-09 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/thewire/languages/en.php, views/default/css.php,
+ views/default/navigation/main_nav.php, views/default/navigation/site_nav.php,
+ views/default/page_elements/elgg_header.php: Added basic (stage1) site-wide
+ navigation. Needs improving with a way for admin and plugin authors to decide
+ which mods display in the primary nav-bar, and which page within each tool
+ they point at.
+
+ * _graphics/icon_rss.png, languages/en.php,
+ mod/bookmarks/views/default/bookmarks/form.php, views/default/css.php,
+ views/default/page_elements/owner_block.php: Generic rss feed icon added
+
+ * mod/profile/views/default/profile/css.php,
+ mod/profile/views/default/profile/edit.php,
+ mod/profile/views/default/profile/editicon.php: Edit profile icon ui fixed.
+
+2010-03-09 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/sitepages/forms/editmeta.php: add/edit metatags form bug
+ fixed
+
+2010-03-09 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/edit.php, mod/profile/editicon.php, mod/profile/start.php:
+ Fixed canvas layout for profile edit views
+
+2010-03-09 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/thewire/views/default/object/thewire.php: Ticket #1954 fixed
+
+2010-03-09 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/thewire/languages/en.php, mod/thewire/start.php: Updated 'my wire'
+ link in toolbar menu
+
+ * mod/bookmarks/all.php, mod/members/index.php: Removed users owner block
+ from 'all bookmarks', and 'all members' views.
+
+ * admin/plugins.php, admin/site.php, admin/statistics.php, admin/user.php,
+ dashboard/latest.php, friends/add.php, friends/collections.php,
+ friends/edit.php, friends/index.php, friends/of.php, index.php,
+ mod/blog/all.php, mod/blog/archive.php, mod/blog/everyone.php,
+ mod/blog/friends.php, mod/blog/index.php, mod/blog/preview.php,
+ mod/blog/read.php, mod/blog/shared.php, mod/bookmarks/add.php,
+ mod/bookmarks/all.php, mod/bookmarks/bookmarklet.php,
+ mod/bookmarks/friends.php, mod/bookmarks/index.php,
+ mod/diagnostics/index.php, mod/externalpages/index.php,
+ mod/externalpages/read.php, mod/groups/addtopic.php, mod/groups/all.php,
+ mod/groups/discussions.php, mod/groups/edit.php, mod/groups/edittopic.php,
+ mod/groups/forum.php, mod/groups/groupprofile.php, mod/groups/index.php,
+ mod/groups/invitations.php, mod/groups/invite.php, mod/groups/membership.php,
+ mod/groups/membershipreq.php, mod/groups/new.php, mod/groups/topicposts.php,
+ mod/logbrowser/index.php, mod/members/index.php, mod/messages/index.php,
+ mod/messages/read.php, mod/messages/send.php, mod/messages/sent.php,
+ mod/profile/defaultprofile.php, mod/profile/edit.php,
+ mod/profile/editicon.php, mod/reportedcontent/add.php,
+ mod/reportedcontent/index.php, mod/search/index.php,
+ mod/search/views/default/search/layout.php,
+ mod/sitepages/sitepages_functions.php, mod/thewire/add.php,
+ mod/thewire/everyone.php, mod/thewire/index.php, mod/walledgarden/index.php,
+ settings/plugins.php, settings/statistics.php, settings/user.php,
+ .../canvas/layouts/one_column_with_sidebar.php: Updated new page canvases
+ (and calls to elgg_view_layout) so that empty vars are not required.
+
+2010-03-09 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/sitepages/actions/addfront.php, mod/sitepages/actions/addmeta.php,
+ mod/sitepages/languages/en.php, mod/sitepages/sitepages_functions.php,
+ mod/sitepages/start.php, .../views/default/settings/sitepages/edit.php,
+ .../views/default/sitepages/custom_frontpage.php,
+ .../views/default/sitepages/footer_menu.php,
+ .../views/default/sitepages/forms/editfront.php,
+ .../views/default/sitepages/forms/editmeta.php,
+ mod/sitepages/views/default/sitepages/keywords.php,
+ mod/sitepages/views/default/sitepages/metatags.php: Added dynamic keywords
+ for view and entity. Separated logged in and logged out front page views.
+ Fixed a problem with saving metatags. Added PHPDoc headers. Updated language
+ strings.
+
+ * mod/sitepages/actions/add.php, mod/sitepages/actions/addfront.php,
+ mod/sitepages/actions/addmeta.php, mod/sitepages/frontpage.php,
+ mod/sitepages/index.php, mod/sitepages/languages/en.php,
+ mod/sitepages/read.php, mod/sitepages/sitepages_functions.php,
+ mod/sitepages/start.php, .../views/default/sitepages/analytics.php,
+ mod/sitepages/views/default/sitepages/css.php,
+ .../views/default/sitepages/custom_frontpage.php,
+ .../views/default/sitepages/forms/edit.php,
+ .../views/default/sitepages/forms/editfront.php,
+ .../views/default/sitepages/forms/editmeta.php,
+ mod/sitepages/views/default/sitepages/keywords.php,
+ mod/sitepages/views/default/sitepages/menu.php,
+ mod/sitepages/views/default/sitepages/metatags.php: Brought sitepages up to
+ standards. Added basic static keyword/view substitution support.
+
+2010-03-08 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/search/start.php, .../views/default/page_elements/searchbox.php,
+ mod/search/views/default/search/search_box.php,
+ views/default/page_elements/elgg_header.php,
+ views/default/page_elements/html_begin.php: Removed hard-coded search box and
+ replaced with extended header/extend view from search page.
+
+2010-03-08 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/all.php, mod/groups/edit.php, mod/groups/groupprofile.php,
+ mod/groups/views/default/groups/contentwrapper.php: Removed the superfluous
+ groups contentwrapper
+
+ * mod/groups/addtopic.php, mod/groups/all.php, mod/groups/discussions.php,
+ mod/groups/edit.php, mod/groups/edittopic.php, mod/groups/forum.php,
+ mod/groups/groupprofile.php, mod/groups/index.php,
+ mod/groups/invitations.php, mod/groups/invite.php,
+ mod/groups/languages/en.php, mod/groups/manifest.xml,
+ mod/groups/membership.php, mod/groups/membershipreq.php, mod/groups/new.php,
+ mod/groups/start.php, mod/groups/topicposts.php,
+ mod/groups/views/default/forms/forums/addtopic.php,
+ mod/groups/views/default/forum/topics.php,
+ mod/groups/views/default/forum/viewposts.php,
+ mod/groups/views/default/groups/css.php,
+ .../views/default/groups/group_sort_menu.php,
+ mod/groups/views/default/groups/groupprofile.php,
+ mod/groups/views/default/groups/side_menu.php: Beginnings of the refreshed
+ groups interface
+
+ * .../page_elements/content_header_member.php,
+ views/default/page_elements/title.php: updates to page_elements
+
+2010-03-08 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/html_begin.php: Commenting out old (hopefully
+ unneeded) jquery hack.
+
+2010-03-08 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/sitepages/actions/add.php, mod/sitepages/actions/addfront.php,
+ mod/sitepages/actions/addmeta.php, mod/sitepages/frontpage.php,
+ mod/sitepages/index.php, mod/sitepages/languages/en.php,
+ mod/sitepages/manifest.xml, mod/sitepages/read.php,
+ mod/sitepages/sitepages_functions.php, mod/sitepages/start.php,
+ .../views/default/settings/sitepages/edit.php,
+ .../views/default/sitepages/analytics.php,
+ mod/sitepages/views/default/sitepages/css.php,
+ .../views/default/sitepages/footer_menu.php,
+ .../views/default/sitepages/forms/edit.php,
+ .../views/default/sitepages/forms/editfront.php,
+ .../views/default/sitepages/forms/editmeta.php,
+ mod/sitepages/views/default/sitepages/keywords.php,
+ mod/sitepages/views/default/sitepages/menu.php,
+ mod/sitepages/views/default/sitepages/metatags.php: Site pages will
+ eventually replace the external pages and custom index plugins as well as
+ introduce a new keywords system to enable dynamic content to be displayed
+ without needing to know php or Elgg. This will be handy for frontpage
+ layout/design.
+
+2010-03-08 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/thewire/actions/add.php, mod/thewire/add.php,
+ mod/thewire/everyone.php, mod/thewire/graphics/thewire_speech_bubble.gif,
+ mod/thewire/index.php, mod/thewire/languages/en.php,
+ mod/thewire/manifest.xml, mod/thewire/views/default/object/thewire.php,
+ mod/thewire/views/default/thewire/css.php,
+ mod/thewire/views/default/thewire/forms/add.php,
+ .../views/default/thewire/profile_status.php,
+ .../views/default/thewire/scripts/counter.js: Updates to thewire interface
+
+ * mod/profile/views/default/profile/css.php, views/default/css.php,
+ views/default/page_elements/owner_block.php: Updates to Profile and
+ owner_block interface
+
+2010-03-05 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/tinymce/graphics/ed-bg.gif, mod/tinymce/graphics/example.gif,
+ mod/tinymce/graphics/more.gif, mod/tinymce/manifest.xml,
+ mod/tinymce/views/default/input/longtext.php,
+ mod/tinymce/views/default/tinymce/css.php: Updated tinymce to new interface
+
+2010-03-04 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/profile_lib.php, mod/profile/start.php,
+ mod/profile/views/default/profile/css.php: Removed horizontal nav from avatar
+ edit view and debug string from sidebar. Added temp fix for large avatar
+ upload image scaling
+
+2010-03-04 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/profile_lib.php, mod/profile/start.php,
+ .../default/profile/profile_contents/activity.php,
+ .../default/profile/profile_contents/details.php,
+ .../default/profile/profile_contents/friends.php,
+ .../default/profile/profile_contents/sidebar.php,
+ .../default/profile/profile_contents/twitter.php: Pulled profile sidebar out
+ into separate view. Using one_column_with_sidebar layout for editing profile.
+
+
+ * mod/profile/actions/cropicon.php,
+ mod/profile/actions/deletedefaultprofileitem.php,
+ mod/profile/actions/edit.php, mod/profile/actions/editdefault.php,
+ mod/profile/actions/iconupload.php,
+ mod/profile/actions/resetdefaultprofile.php, mod/profile/defaultprofile.php,
+ mod/profile/edit.php, mod/profile/editicon.php, mod/profile/icon.php,
+ mod/profile/icondirect.php, mod/profile/index.php,
+ mod/profile/javascript.php, mod/profile/languages/en.php,
+ mod/profile/profile_lib.php, mod/profile/start.php,
+ mod/profile/views/default/profile/admin_menu.php,
+ mod/profile/views/default/profile/css.php,
+ mod/profile/views/default/profile/edit.php,
+ .../views/default/profile/editdefaultprofile.php,
+ mod/profile/views/default/profile/editicon.php,
+ mod/profile/views/default/profile/gallery.php,
+ mod/profile/views/default/profile/hoverover.php,
+ mod/profile/views/default/profile/icon.php,
+ mod/profile/views/default/profile/javascript.php,
+ mod/profile/views/default/profile/listing.php,
+ mod/profile/views/default/profile/menu/actions.php,
+ .../views/default/profile/menu/adminlinks.php,
+ .../views/default/profile/menu/adminwrapper.php,
+ mod/profile/views/default/profile/menu/links.php,
+ .../views/default/profile/menu/linksownpage.php,
+ mod/profile/views/default/profile/metatags.php,
+ .../default/profile/profile_contents/activity.php,
+ .../default/profile/profile_contents/details.php,
+ .../default/profile/profile_contents/friends.php,
+ .../default/profile/profile_contents/twitter.php,
+ .../views/default/profile/profile_navigation.php,
+ .../views/default/profile/profile_ownerblock.php,
+ mod/profile/views/default/profile/profilelinks.php,
+ mod/profile/views/default/profile/userdetails.php,
+ .../river/user/default/profileiconupdate.php,
+ .../default/river/user/default/profileupdate.php: Merged interface changes to
+ profile in.
+
+2010-03-04 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/bookmarks/add.php, mod/bookmarks/all.php,
+ mod/bookmarks/bookmarklet.php, mod/bookmarks/friends.php,
+ mod/bookmarks/index.php, mod/bookmarks/start.php,
+ .../views/default/bookmarks/bookmarklet.php,
+ .../default/bookmarks/bookmarklet_menu_option.php,
+ mod/bookmarks/views/default/bookmarks/css.php,
+ mod/bookmarks/views/default/object/bookmarks.php, views/default/css.php:
+ Updated Bookmarks interface (old sidebar nav removed, breadcrumbs fixed,
+ bookmarklet fixed & updated)
+
+ * .../default/bookmarks/bookmarklet_menu_option.php,
+ mod/logbrowser/views/default/logbrowser/form.php,
+ mod/messages/views/default/messages/messages.php,
+ .../views/default/reportedcontent/listing.php: Removed empty href in
+ elgg_slide_toggle calls to prevent page jump
+
+ * views/default/account/forms/forgotten_password.php,
+ views/default/account/forms/register.php,
+ views/default/admin/plugins_opt/plugin.php, views/default/input/form.php,
+ views/default/js/initialise_elgg.php: Interface updates to js, and login,
+ register, lost password
+
+ * languages/en.php: Merged EN language updates
+
+ * _graphics/favicon.ico: Added the default elgg favicon (linked from
+ html_begin)
+
+ * vendors/jquery/jquery-ui-1.7.2.custom.min.js: Removed jquery custom UI
+ package, we now provide/use the full 1.7.2 UI package
+
+ * mod/search/index.php, mod/search/views/default/search/layout.php,
+ mod/search/views/default/search/startblurb.php: Merged Search interface
+ updates
+
+ * mod/messages/graphics/icon_notifications_site.gif, mod/messages/sent.php,
+ .../views/default/messages/forms/reply.php,
+ mod/messages/views/default/messages/messages.php,
+ mod/messages/views/default/messages/topbar.php,
+ mod/messages/views/default/messages/view.php: Merged missing Messages
+ interface modifications
+
+ * mod/members/views/default/members/search.php: Added missing php closing
+ tag
+
+ * mod/bookmarks/add.php, mod/bookmarks/all.php, mod/bookmarks/index.php,
+ .../views/default/bookmarks/bookmarklet.php: Merged missing Bookmarks
+ interface modifications
+
+2010-03-04 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/walledgarden/index.php, .../views/default/account/forms/login.php,
+ .../views/default/canvas/layouts/new_index.php,
+ .../views/default/walledgarden/css.php: Merged walledgarden changes.
+
+ * mod/walledgarden/index.php, mod/walledgarden/manifest.xml,
+ mod/walledgarden/readme.txt, mod/walledgarden/start.php,
+ .../views/default/account/forms/login.php,
+ .../views/default/canvas/layouts/new_index.php,
+ .../views/default/walledgarden/css.php,
+ .../views/default/walledgarden/walledgarden.php: Moved walled garden into
+ trunk.
+
+ * mod/reportedcontent/add.php,
+ mod/reportedcontent/graphics/icon_reportthis.gif,
+ mod/reportedcontent/index.php, mod/reportedcontent/languages/en.php,
+ mod/reportedcontent/start.php, .../views/default/reportedcontent/css.php,
+ .../views/default/reportedcontent/form.php,
+ .../views/default/reportedcontent/listing.php,
+ .../views/default/reportedcontent/owner_block.php: Merged reported content
+ interface changes.
+
+ * mod/messages/actions/delete.php, mod/messages/actions/send.php,
+ mod/messages/index.php, mod/messages/languages/en.php, mod/messages/read.php,
+ mod/messages/readme.txt, mod/messages/send.php, mod/messages/sent.php,
+ mod/messages/start.php, mod/messages/views/default/messages/css.php,
+ .../views/default/messages/forms/message.php,
+ .../views/default/messages/forms/reply.php,
+ mod/messages/views/default/messages/forms/send.php,
+ mod/messages/views/default/messages/forms/view.php,
+ mod/messages/views/default/messages/menu.php,
+ mod/messages/views/default/messages/messages.php,
+ mod/messages/views/default/messages/topbar.php,
+ mod/messages/views/default/messages/view.php: Merged messages interface
+ changes.
+
+ * mod/members/index.php, mod/members/languages/en.php,
+ mod/members/start.php, mod/members/views/default/members/css.php,
+ .../views/default/members/members_navigation.php,
+ .../views/default/members/members_sort_menu.php,
+ mod/members/views/default/members/online.php,
+ mod/members/views/default/members/search.php: Merged members plugin's new
+ layout.
+
+ * mod/externalpages/actions/addfront.php, mod/externalpages/index.php,
+ mod/externalpages/read.php, mod/externalpages/start.php,
+ mod/externalpages/views/default/expages/css.php,
+ .../views/default/expages/footer_menu.php,
+ .../views/default/expages/forms/editfront.php,
+ .../views/default/expages/front_left.php,
+ .../views/default/expages/front_right.php,
+ mod/externalpages/views/default/expages/menu.php: Updated external pages to
+ new interface.
+
+2010-03-03 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * vendors/jquery/custom-form-elements.js,
+ vendors/jquery/jquery-1.3.2.min.js, vendors/jquery/jquery-1.4.min.js: Added
+ new version of jQuery and custom form elements.
+
+ * mod/bookmarks/actions/add.php, mod/bookmarks/actions/delete.php,
+ mod/bookmarks/actions/edit.php, mod/bookmarks/actions/reference.php,
+ mod/bookmarks/actions/remove.php, mod/bookmarks/add.php,
+ mod/bookmarks/all.php, mod/bookmarks/bookmarklet.php,
+ mod/bookmarks/everyone.php, mod/bookmarks/friends.php,
+ mod/bookmarks/inbox.php, mod/bookmarks/index.php,
+ mod/bookmarks/languages/en.php, mod/bookmarks/start.php,
+ .../views/default/bookmarks/bookmarklet.php,
+ .../default/bookmarks/bookmarklet_menu_option.php,
+ mod/bookmarks/views/default/bookmarks/css.php,
+ mod/bookmarks/views/default/bookmarks/form.php,
+ .../views/default/bookmarks/owner_block.php,
+ mod/bookmarks/views/default/bookmarks/sharing.php,
+ mod/bookmarks/views/default/bookmarks/stats.php,
+ mod/bookmarks/views/default/object/bookmarks.php,
+ .../default/river/object/bookmarks/annotate.php,
+ .../default/river/object/bookmarks/create.php,
+ .../views/default/widgets/bookmarks/edit.php,
+ .../views/default/widgets/bookmarks/view.php,
+ mod/bookmarks/views/rss/object/bookmarks.php: Updated bookmarks with new
+ interface.
+
+ * index.php, languages/en.php, settings/plugins.php,
+ settings/statistics.php, settings/user.php: Pulling in MORE changes that
+ weren't in the patch. Apparently I fail at patching.
+
+ * _graphics/spacer.gif: Removing unneeded svn:executable properties on
+ files.
+
+ * views/default/page_shells/default.php: Merged in a lost change for the
+ interface.
+
+ * actions/systemsettings/install.php: Forward to the registration
+ pagehandler after installation.
+
+ * views/failsafe/page_shells/default.php,
+ views/failsafe/pageshells/pageshell.php: Installation uses new views system.
+
+2010-03-03 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/canvas/layouts/edit_layout.php,
+ views/default/canvas/layouts/sidebar_boxes.php,
+ .../canvas/layouts/two_column_right_sidebar.php: old canvases removed
+
+2010-03-03 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, engine/lib/users.php: Pulled in missing interface
+ modifications for the engine dir.
+
+2010-03-03 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/ajax_loader_bw.gif, _graphics/button_background.gif,
+ _graphics/button_graduation.png, _graphics/content_header_filter.gif,
+ _graphics/icon_delete.png, _graphics/icon_tag.png, _graphics/search.png,
+ _graphics/sidebar_background.gif, _graphics/speech_bubble_tail.gif,
+ _graphics/topbar_icons.png, _graphics/twitter16px.png, views/default/css.php:
+ new graphics added and css updated to reflect new location
+
+2010-03-03 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * account/forgotten_password.php, admin/plugins.php, admin/site.php,
+ admin/statistics.php, admin/user.php, dashboard/latest.php, friends/add.php,
+ friends/collections.php, friends/edit.php, friends/index.php, friends/of.php,
+ mod/blog/actions/add.php, mod/blog/actions/delete.php,
+ mod/blog/actions/edit.php, mod/blog/add.php, mod/blog/archive.php,
+ mod/blog/edit.php, mod/blog/everyone.php, mod/blog/friends.php,
+ mod/blog/index.php, mod/blog/languages/en.php, mod/blog/manifest.xml,
+ mod/blog/preview.php, mod/blog/read.php, mod/blog/savedraft.php,
+ mod/blog/start.php, mod/blog/views/default/blog/categorylist.php,
+ mod/blog/views/default/blog/css.php,
+ mod/blog/views/default/blog/forms/edit.php,
+ mod/blog/views/default/blog/gallery.php,
+ mod/blog/views/default/blog/listing.php,
+ mod/blog/views/default/blog/menu.php,
+ mod/blog/views/default/blog/notfound.php,
+ mod/blog/views/default/blog/previewpane.php,
+ mod/blog/views/default/blog/view.php, mod/blog/views/default/object/blog.php,
+ .../views/default/river/object/blog/annotate.php,
+ .../views/default/river/object/blog/create.php,
+ .../views/default/river/object/blog/update.php,
+ mod/bookmarks/actions/add.php, mod/bookmarks/actions/delete.php,
+ mod/bookmarks/add.php, mod/bookmarks/bookmarklet.php,
+ mod/bookmarks/everyone.php, mod/bookmarks/friends.php,
+ mod/bookmarks/inbox.php, mod/bookmarks/index.php,
+ mod/bookmarks/languages/en.php, mod/bookmarks/manifest.xml,
+ mod/bookmarks/start.php, .../views/default/bookmarks/bookmarklet.php,
+ mod/bookmarks/views/default/bookmarks/css.php,
+ mod/bookmarks/views/default/bookmarks/form.php,
+ .../views/default/bookmarks/owner_block.php,
+ mod/bookmarks/views/default/bookmarks/sharing.php,
+ mod/bookmarks/views/default/object/bookmarks.php,
+ .../default/river/object/bookmarks/annotate.php,
+ .../default/river/object/bookmarks/create.php,
+ .../views/default/widgets/bookmarks/edit.php,
+ .../views/default/widgets/bookmarks/view.php,
+ mod/bookmarks/views/rss/object/bookmarks.php,
+ mod/captcha/backgrounds/bg1.jpg, mod/captcha/backgrounds/bg2.jpg,
+ mod/captcha/backgrounds/bg3.jpg, mod/captcha/backgrounds/bg4.jpg,
+ mod/captcha/backgrounds/bg5.jpg, mod/captcha/captcha.php,
+ mod/captcha/fonts/1.ttf, mod/captcha/fonts/Liberation_serif_License.txt,
+ mod/captcha/languages/en.php, mod/captcha/manifest.xml,
+ mod/captcha/start.php, mod/captcha/views/default/captcha/css.php,
+ mod/captcha/views/default/input/captcha.php, mod/categories/actions/save.php,
+ mod/categories/languages/en.php, mod/categories/manifest.xml,
+ mod/categories/readme.txt, mod/categories/settings.php,
+ mod/categories/start.php, mod/categories/views/default/categories.php,
+ mod/categories/views/default/categories/css.php,
+ mod/categories/views/default/categories/list.php,
+ .../views/default/categories/settings.php,
+ .../views/default/categories/settingsform.php,
+ mod/categories/views/default/categories/view.php, mod/custom_index/index.php,
+ mod/custom_index/languages/en.php, mod/custom_index/manifest.xml,
+ mod/custom_index/start.php, .../views/default/canvas/layouts/new_index.php,
+ .../views/default/custom_index/css.php,
+ mod/defaultwidgets/actions/update.php, mod/defaultwidgets/dashboard.php,
+ mod/defaultwidgets/languages/en.php, mod/defaultwidgets/manifest.xml,
+ mod/defaultwidgets/profile.php, mod/defaultwidgets/start.php,
+ .../views/default/defaultwidgets/editor.php, mod/diagnostics/index.php,
+ mod/diagnostics/languages/en.php, mod/embed/README.txt, mod/embed/embed.php,
+ mod/embed/images/button_spacer.gif, mod/embed/images/close_button.gif,
+ mod/embed/images/loading.gif, mod/embed/images/media_modal.png,
+ mod/embed/languages/en.php, mod/embed/manifest.xml, mod/embed/start.php,
+ mod/embed/upload.php, mod/embed/views/default/embed/addcontentjs.php,
+ mod/embed/views/default/embed/css.php, mod/embed/views/default/embed/js.php,
+ mod/embed/views/default/embed/link.php,
+ mod/embed/views/default/embed/media.php,
+ mod/embed/views/default/embed/metatags.php,
+ mod/embed/views/default/embed/pagination.php,
+ mod/embed/views/default/embed/simpletype.php,
+ mod/embed/views/default/embed/tabs.php,
+ mod/embed/views/default/embed/upload.php,
+ mod/embed/views/default/group/default/embed.php,
+ mod/embed/views/default/object/default/embed.php,
+ mod/embed/views/default/object/file/embed.php,
+ mod/embed/views/default/object/file/embedlist.php,
+ mod/embed/views/default/site/default/embed.php,
+ mod/embed/views/default/user/default/embed.php,
+ mod/externalpages/actions/add.php, mod/externalpages/actions/addfront.php,
+ mod/externalpages/index.php, mod/externalpages/languages/en.php,
+ mod/externalpages/manifest.xml, mod/externalpages/read.php,
+ mod/externalpages/start.php, .../views/default/expages/analytics.php,
+ mod/externalpages/views/default/expages/css.php,
+ .../views/default/expages/footer_menu.php,
+ .../views/default/expages/forms/edit.php,
+ .../views/default/expages/forms/editfront.php,
+ .../views/default/expages/front_left.php,
+ .../views/default/expages/front_right.php,
+ mod/externalpages/views/default/expages/menu.php,
+ mod/externalpages/views/default/object/expages.php,
+ mod/file/actions/delete.php, mod/file/actions/download.php,
+ mod/file/actions/save.php, mod/file/actions/upload.php,
+ mod/file/download.php, mod/file/edit.php, mod/file/friends.php,
+ mod/file/graphics/icons/application.gif,
+ mod/file/graphics/icons/application_lrg.gif,
+ mod/file/graphics/icons/archive.gif, mod/file/graphics/icons/archive_lrg.gif,
+ mod/file/graphics/icons/excel.gif, mod/file/graphics/icons/excel_lrg.gif,
+ mod/file/graphics/icons/general.gif, mod/file/graphics/icons/general_lrg.gif,
+ mod/file/graphics/icons/music.gif, mod/file/graphics/icons/music_lrg.gif,
+ mod/file/graphics/icons/openoffice.gif,
+ mod/file/graphics/icons/openoffice_lrg.gif,
+ mod/file/graphics/icons/pages.gif, mod/file/graphics/icons/pages_lrg.gif,
+ mod/file/graphics/icons/pdf.gif, mod/file/graphics/icons/pdf_lrg.gif,
+ mod/file/graphics/icons/ppt.gif, mod/file/graphics/icons/ppt_lrg.gif,
+ mod/file/graphics/icons/text.gif, mod/file/graphics/icons/text_lrg.gif,
+ mod/file/graphics/icons/vcard.gif, mod/file/graphics/icons/vcard_lrg.gif,
+ mod/file/graphics/icons/video.gif, mod/file/graphics/icons/video_lrg.gif,
+ mod/file/graphics/icons/word.gif, mod/file/graphics/icons/word_lrg.gif,
+ mod/file/index.php, mod/file/languages/en.php, mod/file/manifest.xml,
+ mod/file/search.php, mod/file/start.php, mod/file/thumbnail.php,
+ mod/file/upload.php, mod/file/views/default/file/css.php,
+ mod/file/views/default/file/groupprofile_files.php,
+ mod/file/views/default/file/icon.php,
+ .../default/file/icon/application/default.php,
+ .../views/default/file/icon/application/excel.php,
+ .../views/default/file/icon/application/msword.php,
+ .../views/default/file/icon/application/pdf.php,
+ .../default/file/icon/application/powerpoint.php,
+ .../default/file/icon/application/vnd.ms-excel.php,
+ .../file/icon/application/vnd.ms-powerpoint.php,
+ .../application/vnd.oasis.opendocument.text.php,
+ .../views/default/file/icon/application/x-gzip.php,
+ .../file/icon/application/x-rar-compressed.php,
+ .../default/file/icon/application/x-stuffit.php,
+ .../views/default/file/icon/application/zip.php,
+ mod/file/views/default/file/icon/archive.php,
+ mod/file/views/default/file/icon/audio.php,
+ mod/file/views/default/file/icon/audio/default.php,
+ mod/file/views/default/file/icon/default.php,
+ mod/file/views/default/file/icon/document.php,
+ mod/file/views/default/file/icon/text/default.php,
+ .../views/default/file/icon/text/directory.php,
+ mod/file/views/default/file/icon/text/v-card.php,
+ mod/file/views/default/file/icon/video.php,
+ mod/file/views/default/file/icon/video/default.php,
+ mod/file/views/default/file/menu.php,
+ .../default/file/specialcontent/audio/mid.php,
+ .../default/file/specialcontent/audio/mp3.php,
+ .../default/file/specialcontent/audio/mpeg.php,
+ .../default/file/specialcontent/audio/x-wav.php,
+ .../default/file/specialcontent/image/default.php,
+ mod/file/views/default/file/typecloud.php,
+ mod/file/views/default/file/upload.php,
+ mod/file/views/default/object/file.php,
+ .../views/default/river/object/file/create.php,
+ mod/file/views/default/widgets/filerepo/edit.php,
+ mod/file/views/default/widgets/filerepo/view.php,
+ mod/file/views/rss/object/file.php, mod/file/world.php, mod/friends/add.php,
+ mod/friends/collections.php, mod/friends/edit.php,
+ mod/friends/languages/en.php, mod/friends/manifest.xml,
+ mod/friends/start.php, mod/friends/views/default/widgets/friends/edit.php,
+ mod/friends/views/default/widgets/friends/view.php,
+ mod/groups/actions/addtogroup.php, mod/groups/actions/delete.php,
+ mod/groups/actions/edit.php, mod/groups/actions/featured.php,
+ mod/groups/actions/forums/addpost.php,
+ mod/groups/actions/forums/addtopic.php,
+ mod/groups/actions/forums/deletepost.php,
+ mod/groups/actions/forums/deletetopic.php,
+ mod/groups/actions/forums/editpost.php,
+ mod/groups/actions/forums/edittopic.php,
+ mod/groups/actions/groupskillinvitation.php,
+ mod/groups/actions/groupskillrequest.php, mod/groups/actions/invite.php,
+ mod/groups/actions/join.php, mod/groups/actions/joinrequest.php,
+ mod/groups/actions/leave.php, mod/groups/addtopic.php, mod/groups/all.php,
+ mod/groups/discussions.php, mod/groups/edit.php, mod/groups/edittopic.php,
+ mod/groups/forum.php, mod/groups/graphics/defaultlarge.gif,
+ mod/groups/graphics/defaultmedium.gif, mod/groups/graphics/defaultsmall.gif,
+ mod/groups/graphics/defaulttiny.gif, mod/groups/graphics/icon.php,
+ mod/groups/groupprofile.php, mod/groups/index.php,
+ mod/groups/invitations.php, mod/groups/invite.php,
+ mod/groups/languages/en.php, mod/groups/manifest.xml,
+ mod/groups/membership.php, mod/groups/membershipreq.php, mod/groups/new.php,
+ mod/groups/start.php, mod/groups/topicposts.php,
+ mod/groups/views/default/forms/forums/addpost.php,
+ mod/groups/views/default/forms/forums/addtopic.php,
+ .../views/default/forms/forums/edittopic.php,
+ mod/groups/views/default/forms/groups/edit.php,
+ mod/groups/views/default/forms/groups/invite.php,
+ mod/groups/views/default/forum/topicposts.php,
+ mod/groups/views/default/forum/topics.php,
+ mod/groups/views/default/forum/viewposts.php,
+ mod/groups/views/default/group/group.php,
+ .../views/default/groups/closedmembership.php,
+ mod/groups/views/default/groups/contentwrapper.php,
+ mod/groups/views/default/groups/css.php,
+ mod/groups/views/default/groups/featured.php,
+ mod/groups/views/default/groups/find.php,
+ mod/groups/views/default/groups/forum_latest.php,
+ .../views/default/groups/group_sort_menu.php,
+ mod/groups/views/default/groups/groupgallery.php,
+ mod/groups/views/default/groups/grouplisting.php,
+ mod/groups/views/default/groups/groupprofile.php,
+ mod/groups/views/default/groups/icon.php,
+ .../views/default/groups/invitationrequests.php,
+ mod/groups/views/default/groups/members.php,
+ .../views/default/groups/membershiprequests.php,
+ mod/groups/views/default/groups/profileitems.php,
+ mod/groups/views/default/groups/side_menu.php,
+ .../views/default/icon/group/default/large.php,
+ .../views/default/icon/group/default/medium.php,
+ .../views/default/icon/group/default/small.php,
+ .../views/default/icon/group/default/tiny.php,
+ .../views/default/object/groupforumtopic.php,
+ mod/groups/views/default/river/forum/create.php,
+ .../views/default/river/forum/topic/create.php,
+ mod/groups/views/default/river/group/create.php,
+ .../views/default/river/object/group/create.php,
+ .../river/object/groupforumtopic/annotate.php,
+ .../river/object/groupforumtopic/create.php,
+ .../river/object/groupforumtopic/update.php,
+ .../default/river/relationship/member/create.php,
+ mod/groups/views/default/settings/groups/edit.php,
+ mod/groups/views/default/sharing/invite.php,
+ .../views/default/widgets/a_users_groups/edit.php,
+ .../views/default/widgets/a_users_groups/view.php,
+ .../default/widgets/group_entities_widget/edit.php,
+ .../default/widgets/group_entities_widget/view.php,
+ .../default/widgets/group_members_widget/edit.php,
+ .../default/widgets/group_members_widget/view.php,
+ mod/groups/views/rss/forum/topicposts.php,
+ mod/groups/views/rss/forum/topics.php,
+ mod/groups/views/rss/forum/viewposts.php,
+ mod/groups/views/rss/groups/contentwrapper.php,
+ mod/groups/views/rss/groups/profileitems.php,
+ mod/invitefriends/actions/invite.php, mod/invitefriends/index.php,
+ mod/invitefriends/languages/en.php, mod/invitefriends/manifest.xml,
+ mod/invitefriends/start.php, .../views/default/invitefriends/form.php,
+ .../views/default/invitefriends/formitems.php, mod/logbrowser/index.php,
+ mod/logbrowser/views/default/logbrowser/css.php,
+ mod/logbrowser/views/default/logbrowser/form.php, mod/members/index.php,
+ mod/members/languages/en.php, mod/members/manifest.xml,
+ mod/members/start.php, mod/members/views/default/members/css.php,
+ .../views/default/members/members_sort_menu.php,
+ mod/members/views/default/members/online.php,
+ mod/members/views/default/members/search.php,
+ mod/messageboard/actions/add.php, mod/messageboard/actions/delete.php,
+ mod/messageboard/ajax_endpoint/load.php, mod/messageboard/history.php,
+ mod/messageboard/index.php, mod/messageboard/languages/en.php,
+ mod/messageboard/manifest.xml, mod/messageboard/readme.txt,
+ mod/messageboard/start.php, .../views/default/messageboard/css.php,
+ .../views/default/messageboard/forms/add.php,
+ .../default/messageboard/group_messageboard.php,
+ .../views/default/messageboard/messageboard.php,
+ .../default/messageboard/messageboard_content.php,
+ .../default/river/object/messageboard/create.php,
+ .../views/default/widgets/messageboard/edit.php,
+ .../views/default/widgets/messageboard/view.php,
+ mod/messages/actions/delete.php, mod/messages/actions/send.php,
+ mod/messages/graphics/icon_notifications_site.gif, mod/messages/index.php,
+ mod/messages/languages/en.php, mod/messages/manifest.xml,
+ mod/messages/read.php, mod/messages/readme.txt, mod/messages/send.php,
+ mod/messages/sent.php, mod/messages/start.php,
+ mod/messages/views/default/messages/css.php,
+ .../views/default/messages/forms/message.php,
+ .../views/default/messages/forms/reply.php,
+ mod/messages/views/default/messages/forms/view.php,
+ mod/messages/views/default/messages/menu.php,
+ mod/messages/views/default/messages/messages.php,
+ mod/messages/views/default/messages/topbar.php,
+ mod/messages/views/default/messages/view.php,
+ .../views/default/widgets/messages/view.php,
+ mod/notifications/actions/groupsave.php, mod/notifications/actions/save.php,
+ .../graphics/icon_notifications_email.gif, mod/notifications/groups.php,
+ mod/notifications/index.php, mod/notifications/languages/en.php,
+ mod/notifications/manifest.xml, mod/notifications/start.php,
+ .../views/default/notifications/css.php,
+ .../notifications/settings/usersettings.php,
+ .../notifications/subscriptions/collections.php,
+ .../default/notifications/subscriptions/form.php,
+ .../notifications/subscriptions/forminternals.php,
+ .../notifications/subscriptions/groupsform.php,
+ .../notifications/subscriptions/jsfuncs.php,
+ .../notifications/subscriptions/personal.php,
+ mod/pages/actions/pages/delete.php, mod/pages/actions/pages/edit.php,
+ mod/pages/actions/pages/editwelcome.php, mod/pages/edit.php,
+ mod/pages/history.php, mod/pages/images/application.png,
+ mod/pages/images/code.png, mod/pages/images/css.png, mod/pages/images/db.png,
+ mod/pages/images/directory.png, mod/pages/images/doc.png,
+ mod/pages/images/file.gif, mod/pages/images/file.png,
+ mod/pages/images/film.png, mod/pages/images/flash.png,
+ mod/pages/images/folder-closed.gif, mod/pages/images/folder.gif,
+ mod/pages/images/folder_open.png, mod/pages/images/html.png,
+ mod/pages/images/java.png, mod/pages/images/linux.png,
+ mod/pages/images/minus.gif, mod/pages/images/music.png,
+ mod/pages/images/pages.gif, mod/pages/images/pages_lrg.gif,
+ mod/pages/images/pdf.png, mod/pages/images/php.png,
+ mod/pages/images/picture.png, mod/pages/images/plus.gif,
+ mod/pages/images/ppt.png, mod/pages/images/psd.png,
+ mod/pages/images/ruby.png, mod/pages/images/script.png,
+ mod/pages/images/spinner.gif, mod/pages/images/treeview-black-line.gif,
+ mod/pages/images/treeview-black.gif,
+ mod/pages/images/treeview-default-line.gif,
+ mod/pages/images/treeview-default.gif,
+ mod/pages/images/treeview-famfamfam-line.gif,
+ mod/pages/images/treeview-famfamfam.gif,
+ mod/pages/images/treeview-gray-line.gif, mod/pages/images/treeview-gray.gif,
+ mod/pages/images/treeview-red-line.gif, mod/pages/images/treeview-red.gif,
+ mod/pages/images/txt.png, mod/pages/images/xls.png, mod/pages/images/zip.png,
+ mod/pages/index.php, mod/pages/javascript/jquery.treeview.async.js,
+ mod/pages/javascript/jquery.treeview.js, mod/pages/languages/en.php,
+ mod/pages/manifest.xml, mod/pages/new.php, mod/pages/pagesTree.php,
+ mod/pages/start.php, mod/pages/view.php,
+ mod/pages/views/default/annotation/icon.php,
+ mod/pages/views/default/annotation/page.php,
+ mod/pages/views/default/forms/pages/edit.php,
+ .../views/default/forms/pages/editwelcome.php,
+ .../views/default/icon/object/page/medium.php,
+ mod/pages/views/default/icon/object/page/small.php,
+ .../views/default/icon/object/page_top/medium.php,
+ .../views/default/icon/object/page_top/small.php,
+ mod/pages/views/default/object/page.php,
+ mod/pages/views/default/object/page_top.php,
+ mod/pages/views/default/pages/breadcrumbs.php,
+ mod/pages/views/default/pages/css.php,
+ .../views/default/pages/groupprofile_pages.php,
+ mod/pages/views/default/pages/menu.php,
+ mod/pages/views/default/pages/metatags.php,
+ mod/pages/views/default/pages/pagegallery.php,
+ mod/pages/views/default/pages/pagelisting.php,
+ mod/pages/views/default/pages/pageprofile.php,
+ .../views/default/pages/sidebar/sidebarthis.php,
+ mod/pages/views/default/pages/sidebar/starter.php,
+ mod/pages/views/default/pages/sidebar/tree.php,
+ mod/pages/views/default/pages/sidebar/wrapper.php,
+ mod/pages/views/default/pages/welcome.php,
+ .../views/default/river/object/page/annotate.php,
+ .../views/default/river/object/page/create.php,
+ .../views/default/river/object/page/update.php,
+ .../default/river/object/page_top/annotate.php,
+ .../views/default/river/object/page_top/create.php,
+ .../views/default/river/object/page_top/update.php,
+ mod/pages/views/default/widgets/pages/edit.php,
+ mod/pages/views/default/widgets/pages/view.php, mod/pages/welcome.php,
+ mod/pages/world.php, mod/profile/actions/cropicon.php,
+ mod/profile/actions/deletedefaultprofileitem.php,
+ mod/profile/actions/edit.php, mod/profile/actions/editdefault.php,
+ mod/profile/actions/iconupload.php,
+ mod/profile/actions/resetdefaultprofile.php, mod/profile/defaultprofile.php,
+ mod/profile/edit.php, mod/profile/editicon.php,
+ mod/profile/graphics/defaultlarge.gif,
+ mod/profile/graphics/defaultmaster.gif,
+ mod/profile/graphics/defaultmedium.gif,
+ mod/profile/graphics/defaultsmall.gif, mod/profile/graphics/defaulttiny.gif,
+ mod/profile/graphics/defaulttopbar.gif, mod/profile/icon.php,
+ mod/profile/icondirect.php, mod/profile/index.php,
+ mod/profile/javascript.php, mod/profile/languages/en.php,
+ mod/profile/manifest.xml, mod/profile/start.php,
+ .../views/default/icon/user/default/large.php,
+ .../views/default/icon/user/default/master.php,
+ .../views/default/icon/user/default/medium.php,
+ .../views/default/icon/user/default/small.php,
+ .../views/default/icon/user/default/tiny.php,
+ .../views/default/icon/user/default/topbar.php,
+ .../views/default/js/jquery.imgareaselect-0.8.js,
+ .../default/js/jquery.imgareaselect-0.8.min.js,
+ mod/profile/views/default/profile/css.php,
+ mod/profile/views/default/profile/edit.php,
+ .../views/default/profile/editdefaultprofile.php,
+ mod/profile/views/default/profile/editicon.php,
+ mod/profile/views/default/profile/gallery.php,
+ mod/profile/views/default/profile/hoverover.php,
+ mod/profile/views/default/profile/icon.php,
+ mod/profile/views/default/profile/javascript.php,
+ mod/profile/views/default/profile/listing.php,
+ mod/profile/views/default/profile/menu/actions.php,
+ .../views/default/profile/menu/adminlinks.php,
+ .../views/default/profile/menu/adminwrapper.php,
+ mod/profile/views/default/profile/menu/links.php,
+ .../views/default/profile/menu/linksownpage.php,
+ mod/profile/views/default/profile/metatags.php,
+ mod/profile/views/default/profile/profilelinks.php,
+ mod/profile/views/default/profile/submenu.php,
+ mod/profile/views/default/profile/userdetails.php,
+ .../river/user/default/profileiconupdate.php,
+ .../default/river/user/default/profileupdate.php,
+ mod/reportedcontent/actions/add.php, mod/reportedcontent/actions/archive.php,
+ mod/reportedcontent/actions/delete.php, mod/reportedcontent/add.php,
+ mod/reportedcontent/index.php, mod/reportedcontent/languages/en.php,
+ mod/reportedcontent/manifest.xml, mod/reportedcontent/start.php,
+ .../views/default/reportedcontent/css.php,
+ .../views/default/reportedcontent/form.php,
+ .../views/default/reportedcontent/listing.php,
+ .../views/default/reportedcontent/owner_block.php,
+ .../views/default/reportedcontent/user_report.php,
+ mod/riverdashboard/actions/add.php, mod/riverdashboard/actions/delete.php,
+ mod/riverdashboard/graphics/follow_icon.png, mod/riverdashboard/index.php,
+ mod/riverdashboard/languages/en.php, mod/riverdashboard/manifest.xml,
+ mod/riverdashboard/start.php, .../views/default/river/sitemessage/create.php,
+ .../views/default/riverdashboard/container.php,
+ .../views/default/riverdashboard/css.php,
+ .../views/default/riverdashboard/js.php,
+ .../views/default/riverdashboard/nav.php,
+ .../views/default/riverdashboard/newestmembers.php,
+ .../views/default/riverdashboard/sitemessage.php,
+ .../views/default/riverdashboard/welcome.php,
+ .../views/default/settings/riverdashboard/edit.php,
+ .../views/default/widgets/river_widget/edit.php,
+ .../views/default/widgets/river_widget/view.php,
+ .../views/json/riverdashboard/container.php,
+ .../views/rss/riverdashboard/container.php,
+ mod/search/views/default/search/css.php, mod/thewire/actions/add.php,
+ mod/thewire/actions/delete.php, mod/thewire/add.php,
+ mod/thewire/everyone.php, mod/thewire/graphics/river_icon_thewire.gif,
+ mod/thewire/graphics/thewire_speech_bubble.gif, mod/thewire/index.php,
+ mod/thewire/languages/en.php, mod/thewire/manifest.xml,
+ mod/thewire/readme.txt, mod/thewire/start.php,
+ mod/thewire/views/default/object/thewire.php,
+ .../views/default/river/object/thewire/create.php,
+ .../views/default/thewire/activity_view.php,
+ mod/thewire/views/default/thewire/css.php,
+ mod/thewire/views/default/thewire/forms/add.php,
+ mod/thewire/views/default/thewire/notfound.php,
+ .../views/default/thewire/profile_status.php,
+ .../views/default/thewire/scripts/counter.js,
+ mod/thewire/views/default/thewire/view.php,
+ mod/thewire/views/default/widgets/thewire/edit.php,
+ mod/thewire/views/default/widgets/thewire/view.php,
+ mod/tinymce/languages/en.php, mod/tinymce/manifest.xml,
+ mod/tinymce/readme.txt, mod/tinymce/start.php,
+ mod/tinymce/tinymce/changelog.txt,
+ mod/tinymce/tinymce/jscripts/tiny_mce/langs/en.js,
+ mod/tinymce/tinymce/jscripts/tiny_mce/license.txt,
+ .../jscripts/tiny_mce/plugins/advhr/css/advhr.css,
+ .../tiny_mce/plugins/advhr/editor_plugin.js,
+ .../tiny_mce/plugins/advhr/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/advhr/js/rule.js,
+ .../tiny_mce/plugins/advhr/langs/en_dlg.js,
+ .../jscripts/tiny_mce/plugins/advhr/rule.htm,
+ .../tiny_mce/plugins/advimage/css/advimage.css,
+ .../tiny_mce/plugins/advimage/editor_plugin.js,
+ .../tiny_mce/plugins/advimage/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/advimage/image.htm,
+ .../tiny_mce/plugins/advimage/img/sample.gif,
+ .../jscripts/tiny_mce/plugins/advimage/js/image.js,
+ .../tiny_mce/plugins/advimage/langs/en_dlg.js,
+ .../tiny_mce/plugins/advlink/css/advlink.css,
+ .../tiny_mce/plugins/advlink/editor_plugin.js,
+ .../tiny_mce/plugins/advlink/editor_plugin_src.js,
+ .../tiny_mce/plugins/advlink/js/advlink.js,
+ .../tiny_mce/plugins/advlink/langs/en_dlg.js,
+ .../jscripts/tiny_mce/plugins/advlink/link.htm,
+ .../tiny_mce/plugins/autosave/editor_plugin.js,
+ .../tiny_mce/plugins/autosave/editor_plugin_src.js,
+ .../tiny_mce/plugins/bbcode/editor_plugin.js,
+ .../tiny_mce/plugins/bbcode/editor_plugin_src.js,
+ .../tiny_mce/plugins/compat2x/editor_plugin.js,
+ .../tiny_mce/plugins/compat2x/editor_plugin_src.js,
+ .../tiny_mce/plugins/contextmenu/editor_plugin.js,
+ .../plugins/contextmenu/editor_plugin_src.js,
+ .../plugins/directionality/editor_plugin.js,
+ .../plugins/directionality/editor_plugin_src.js,
+ .../tiny_mce/plugins/emotions/editor_plugin.js,
+ .../tiny_mce/plugins/emotions/editor_plugin_src.js,
+ .../tiny_mce/plugins/emotions/emotions.htm,
+ .../tiny_mce/plugins/emotions/img/smiley-cool.gif,
+ .../tiny_mce/plugins/emotions/img/smiley-cry.gif,
+ .../plugins/emotions/img/smiley-embarassed.gif,
+ .../plugins/emotions/img/smiley-foot-in-mouth.gif,
+ .../tiny_mce/plugins/emotions/img/smiley-frown.gif,
+ .../plugins/emotions/img/smiley-innocent.gif,
+ .../tiny_mce/plugins/emotions/img/smiley-kiss.gif,
+ .../plugins/emotions/img/smiley-laughing.gif,
+ .../plugins/emotions/img/smiley-money-mouth.gif,
+ .../plugins/emotions/img/smiley-sealed.gif,
+ .../tiny_mce/plugins/emotions/img/smiley-smile.gif,
+ .../plugins/emotions/img/smiley-surprised.gif,
+ .../plugins/emotions/img/smiley-tongue-out.gif,
+ .../plugins/emotions/img/smiley-undecided.gif,
+ .../tiny_mce/plugins/emotions/img/smiley-wink.gif,
+ .../tiny_mce/plugins/emotions/img/smiley-yell.gif,
+ .../tiny_mce/plugins/emotions/js/emotions.js,
+ .../tiny_mce/plugins/emotions/langs/en_dlg.js,
+ .../jscripts/tiny_mce/plugins/example/dialog.htm,
+ .../tiny_mce/plugins/example/editor_plugin.js,
+ .../tiny_mce/plugins/example/editor_plugin_src.js,
+ .../tiny_mce/plugins/example/img/example.gif,
+ .../jscripts/tiny_mce/plugins/example/js/dialog.js,
+ .../jscripts/tiny_mce/plugins/example/langs/en.js,
+ .../tiny_mce/plugins/example/langs/en_dlg.js,
+ .../tiny_mce/plugins/fullpage/css/fullpage.css,
+ .../tiny_mce/plugins/fullpage/editor_plugin.js,
+ .../tiny_mce/plugins/fullpage/editor_plugin_src.js,
+ .../tiny_mce/plugins/fullpage/fullpage.htm,
+ .../tiny_mce/plugins/fullpage/js/fullpage.js,
+ .../tiny_mce/plugins/fullpage/langs/en_dlg.js,
+ .../tiny_mce/plugins/fullscreen/editor_plugin.js,
+ .../plugins/fullscreen/editor_plugin_src.js,
+ .../tiny_mce/plugins/fullscreen/fullscreen.htm,
+ .../tiny_mce/plugins/iespell/editor_plugin.js,
+ .../tiny_mce/plugins/iespell/editor_plugin_src.js,
+ .../tiny_mce/plugins/inlinepopups/editor_plugin.js,
+ .../plugins/inlinepopups/editor_plugin_src.js,
+ .../inlinepopups/skins/clearlooks2/img/alert.gif,
+ .../inlinepopups/skins/clearlooks2/img/button.gif,
+ .../inlinepopups/skins/clearlooks2/img/buttons.gif,
+ .../inlinepopups/skins/clearlooks2/img/confirm.gif,
+ .../inlinepopups/skins/clearlooks2/img/corners.gif,
+ .../skins/clearlooks2/img/horizontal.gif,
+ .../skins/clearlooks2/img/vertical.gif,
+ .../inlinepopups/skins/clearlooks2/window.css,
+ .../tiny_mce/plugins/inlinepopups/template.htm,
+ .../plugins/insertdatetime/editor_plugin.js,
+ .../plugins/insertdatetime/editor_plugin_src.js,
+ .../tiny_mce/plugins/layer/editor_plugin.js,
+ .../tiny_mce/plugins/layer/editor_plugin_src.js,
+ .../tiny_mce/plugins/media/css/content.css,
+ .../jscripts/tiny_mce/plugins/media/css/media.css,
+ .../tiny_mce/plugins/media/editor_plugin.js,
+ .../tiny_mce/plugins/media/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/media/img/flash.gif,
+ .../tiny_mce/plugins/media/img/flv_player.swf,
+ .../tiny_mce/plugins/media/img/quicktime.gif,
+ .../tiny_mce/plugins/media/img/realmedia.gif,
+ .../tiny_mce/plugins/media/img/shockwave.gif,
+ .../jscripts/tiny_mce/plugins/media/img/trans.gif,
+ .../tiny_mce/plugins/media/img/windowsmedia.gif,
+ .../jscripts/tiny_mce/plugins/media/js/embed.js,
+ .../jscripts/tiny_mce/plugins/media/js/media.js,
+ .../tiny_mce/plugins/media/langs/en_dlg.js,
+ .../jscripts/tiny_mce/plugins/media/media.htm,
+ .../tiny_mce/plugins/nonbreaking/editor_plugin.js,
+ .../plugins/nonbreaking/editor_plugin_src.js,
+ .../tiny_mce/plugins/noneditable/editor_plugin.js,
+ .../plugins/noneditable/editor_plugin_src.js,
+ .../tiny_mce/plugins/pagebreak/css/content.css,
+ .../tiny_mce/plugins/pagebreak/editor_plugin.js,
+ .../plugins/pagebreak/editor_plugin_src.js,
+ .../tiny_mce/plugins/pagebreak/img/pagebreak.gif,
+ .../tiny_mce/plugins/pagebreak/img/trans.gif,
+ .../jscripts/tiny_mce/plugins/paste/blank.htm,
+ .../jscripts/tiny_mce/plugins/paste/css/blank.css,
+ .../tiny_mce/plugins/paste/css/pasteword.css,
+ .../tiny_mce/plugins/paste/editor_plugin.js,
+ .../tiny_mce/plugins/paste/editor_plugin_src.js,
+ .../tiny_mce/plugins/paste/js/pastetext.js,
+ .../tiny_mce/plugins/paste/js/pasteword.js,
+ .../tiny_mce/plugins/paste/langs/en_dlg.js,
+ .../jscripts/tiny_mce/plugins/paste/pastetext.htm,
+ .../jscripts/tiny_mce/plugins/paste/pasteword.htm,
+ .../tiny_mce/plugins/preview/editor_plugin.js,
+ .../tiny_mce/plugins/preview/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/preview/example.html,
+ .../tiny_mce/plugins/preview/jscripts/embed.js,
+ .../tiny_mce/plugins/print/editor_plugin.js,
+ .../tiny_mce/plugins/print/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/safari/blank.htm,
+ .../tiny_mce/plugins/safari/editor_plugin.js,
+ .../tiny_mce/plugins/safari/editor_plugin_src.js,
+ .../tiny_mce/plugins/save/editor_plugin.js,
+ .../tiny_mce/plugins/save/editor_plugin_src.js,
+ .../plugins/searchreplace/css/searchreplace.css,
+ .../plugins/searchreplace/editor_plugin.js,
+ .../plugins/searchreplace/editor_plugin_src.js,
+ .../plugins/searchreplace/js/searchreplace.js,
+ .../tiny_mce/plugins/searchreplace/langs/en_dlg.js,
+ .../plugins/searchreplace/searchreplace.htm,
+ .../tiny_mce/plugins/spellchecker/css/content.css,
+ .../tiny_mce/plugins/spellchecker/editor_plugin.js,
+ .../plugins/spellchecker/editor_plugin_src.js,
+ .../tiny_mce/plugins/spellchecker/img/wline.gif,
+ .../jscripts/tiny_mce/plugins/style/css/props.css,
+ .../tiny_mce/plugins/style/editor_plugin.js,
+ .../tiny_mce/plugins/style/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/style/js/props.js,
+ .../tiny_mce/plugins/style/langs/en_dlg.js,
+ .../jscripts/tiny_mce/plugins/style/props.htm,
+ .../jscripts/tiny_mce/plugins/table/cell.htm,
+ .../jscripts/tiny_mce/plugins/table/css/cell.css,
+ .../jscripts/tiny_mce/plugins/table/css/row.css,
+ .../jscripts/tiny_mce/plugins/table/css/table.css,
+ .../tiny_mce/plugins/table/editor_plugin.js,
+ .../tiny_mce/plugins/table/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/table/js/cell.js,
+ .../tiny_mce/plugins/table/js/merge_cells.js,
+ .../jscripts/tiny_mce/plugins/table/js/row.js,
+ .../jscripts/tiny_mce/plugins/table/js/table.js,
+ .../tiny_mce/plugins/table/langs/en_dlg.js,
+ .../tiny_mce/plugins/table/merge_cells.htm,
+ .../jscripts/tiny_mce/plugins/table/row.htm,
+ .../jscripts/tiny_mce/plugins/table/table.htm,
+ .../jscripts/tiny_mce/plugins/template/blank.htm,
+ .../tiny_mce/plugins/template/css/template.css,
+ .../tiny_mce/plugins/template/editor_plugin.js,
+ .../tiny_mce/plugins/template/editor_plugin_src.js,
+ .../tiny_mce/plugins/template/js/template.js,
+ .../tiny_mce/plugins/template/langs/en_dlg.js,
+ .../tiny_mce/plugins/template/template.htm,
+ .../tiny_mce/plugins/visualchars/editor_plugin.js,
+ .../plugins/visualchars/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/xhtmlxtras/abbr.htm,
+ .../tiny_mce/plugins/xhtmlxtras/acronym.htm,
+ .../tiny_mce/plugins/xhtmlxtras/attributes.htm,
+ .../jscripts/tiny_mce/plugins/xhtmlxtras/cite.htm,
+ .../tiny_mce/plugins/xhtmlxtras/css/attributes.css,
+ .../tiny_mce/plugins/xhtmlxtras/css/popup.css,
+ .../jscripts/tiny_mce/plugins/xhtmlxtras/del.htm,
+ .../tiny_mce/plugins/xhtmlxtras/editor_plugin.js,
+ .../plugins/xhtmlxtras/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/xhtmlxtras/ins.htm,
+ .../tiny_mce/plugins/xhtmlxtras/js/abbr.js,
+ .../tiny_mce/plugins/xhtmlxtras/js/acronym.js,
+ .../tiny_mce/plugins/xhtmlxtras/js/attributes.js,
+ .../tiny_mce/plugins/xhtmlxtras/js/cite.js,
+ .../jscripts/tiny_mce/plugins/xhtmlxtras/js/del.js,
+ .../plugins/xhtmlxtras/js/element_common.js,
+ .../jscripts/tiny_mce/plugins/xhtmlxtras/js/ins.js,
+ .../tiny_mce/plugins/xhtmlxtras/langs/en_dlg.js,
+ .../jscripts/tiny_mce/themes/advanced/about.htm,
+ .../jscripts/tiny_mce/themes/advanced/anchor.htm,
+ .../jscripts/tiny_mce/themes/advanced/charmap.htm,
+ .../tiny_mce/themes/advanced/color_picker.htm,
+ .../tiny_mce/themes/advanced/editor_template.js,
+ .../themes/advanced/editor_template_src.js,
+ .../jscripts/tiny_mce/themes/advanced/image.htm,
+ .../tiny_mce/themes/advanced/img/colorpicker.jpg,
+ .../tiny_mce/themes/advanced/img/icons.gif,
+ .../jscripts/tiny_mce/themes/advanced/js/about.js,
+ .../jscripts/tiny_mce/themes/advanced/js/anchor.js,
+ .../tiny_mce/themes/advanced/js/charmap.js,
+ .../tiny_mce/themes/advanced/js/color_picker.js,
+ .../jscripts/tiny_mce/themes/advanced/js/image.js,
+ .../jscripts/tiny_mce/themes/advanced/js/link.js,
+ .../tiny_mce/themes/advanced/js/source_editor.js,
+ .../jscripts/tiny_mce/themes/advanced/langs/en.js,
+ .../tiny_mce/themes/advanced/langs/en_dlg.js,
+ .../jscripts/tiny_mce/themes/advanced/link.htm,
+ .../themes/advanced/skins/default/content.css,
+ .../themes/advanced/skins/default/dialog.css,
+ .../themes/advanced/skins/default/img/buttons.png,
+ .../themes/advanced/skins/default/img/items.gif,
+ .../advanced/skins/default/img/menu_arrow.gif,
+ .../advanced/skins/default/img/menu_check.gif,
+ .../themes/advanced/skins/default/img/progress.gif,
+ .../themes/advanced/skins/default/img/tabs.gif,
+ .../tiny_mce/themes/advanced/skins/default/ui.css,
+ .../themes/advanced/skins/o2k7/content.css,
+ .../tiny_mce/themes/advanced/skins/o2k7/dialog.css,
+ .../themes/advanced/skins/o2k7/img/button_bg.png,
+ .../advanced/skins/o2k7/img/button_bg_black.png,
+ .../advanced/skins/o2k7/img/button_bg_silver.png,
+ .../tiny_mce/themes/advanced/skins/o2k7/ui.css,
+ .../themes/advanced/skins/o2k7/ui_black.css,
+ .../themes/advanced/skins/o2k7/ui_silver.css,
+ .../tiny_mce/themes/advanced/source_editor.htm,
+ .../tiny_mce/themes/simple/editor_template.js,
+ .../tiny_mce/themes/simple/editor_template_src.js,
+ .../jscripts/tiny_mce/themes/simple/img/icons.gif,
+ .../jscripts/tiny_mce/themes/simple/langs/en.js,
+ .../themes/simple/skins/default/content.css,
+ .../tiny_mce/themes/simple/skins/default/ui.css,
+ .../tiny_mce/themes/simple/skins/o2k7/content.css,
+ .../themes/simple/skins/o2k7/img/button_bg.png,
+ .../tiny_mce/themes/simple/skins/o2k7/ui.css,
+ mod/tinymce/tinymce/jscripts/tiny_mce/tiny_mce.js,
+ .../tinymce/jscripts/tiny_mce/tiny_mce_popup.js,
+ .../jscripts/tiny_mce/utils/editable_selects.js,
+ .../tinymce/jscripts/tiny_mce/utils/form_utils.js,
+ .../tinymce/jscripts/tiny_mce/utils/mctabs.js,
+ .../tinymce/jscripts/tiny_mce/utils/validate.js,
+ mod/tinymce/views/default/embed/addcontentjs.php,
+ mod/tinymce/views/default/input/longtext.php,
+ mod/tinymce/views/default/tinymce/css.php,
+ mod/twitter/graphics/thewire_speech_bubble.gif,
+ mod/twitter/graphics/twitter.png, mod/twitter/languages/en.php,
+ mod/twitter/manifest.xml, mod/twitter/start.php,
+ mod/twitter/views/default/twitter/css.php,
+ mod/twitter/views/default/widgets/twitter/edit.php,
+ mod/twitter/views/default/widgets/twitter/view.php,
+ mod/twitterservice/languages/en.php, mod/twitterservice/manifest.xml,
+ mod/twitterservice/start.php, mod/twitterservice/vendors/twitter/license.txt,
+ mod/twitterservice/vendors/twitter/load.php,
+ mod/twitterservice/vendors/twitter/readme.txt,
+ mod/twitterservice/vendors/twitter/send.php,
+ .../vendors/twitter/twitter.class.php,
+ .../default/usersettings/twitterservice/edit.php,
+ mod/zaudio/audioplayer/audio-player.js, mod/zaudio/audioplayer/license.txt,
+ mod/zaudio/audioplayer/player.swf, mod/zaudio/manifest.xml,
+ mod/zaudio/readme.txt, mod/zaudio/start.php,
+ .../default/file/specialcontent/audio/mp3.php,
+ .../default/file/specialcontent/audio/mpeg.php,
+ .../default/file/specialcontent/audio/mpg.php,
+ views/default/account/forms/forgotten_password.php,
+ views/default/account/forms/login.php,
+ views/default/account/forms/register.php,
+ views/default/account/forms/useradd.php, views/default/admin/main.php,
+ views/default/admin/main_opt/plugins.php,
+ views/default/admin/main_opt/site.php,
+ views/default/admin/main_opt/statistics.php,
+ views/default/admin/main_opt/user.php, views/default/admin/plugins.php,
+ views/default/admin/plugins_opt/plugin.php, views/default/admin/site.php,
+ views/default/admin/statistics_opt/basic.php,
+ views/default/admin/statistics_opt/numentities.php,
+ views/default/admin/statistics_opt/online.php, views/default/admin/user.php,
+ views/default/admin/user_opt/adduser.php,
+ views/default/admin/user_opt/search.php,
+ views/default/annotation/annotate.php,
+ views/default/annotation/generic_comment.php,
+ views/default/annotation/latest_comments.php,
+ views/default/canvas/default.php,
+ views/default/canvas/layouts/one_column.php,
+ .../canvas/layouts/one_column_with_sidebar.php,
+ .../canvas/layouts/two_column_left_sidebar.php,
+ views/default/canvas/layouts/widgets.php,
+ views/default/canvas_header/submenu_group.php,
+ views/default/comments/forms/edit.php, views/default/css.php,
+ views/default/css_ie.php, views/default/css_ie6.php,
+ views/default/entities/entity_list.php,
+ views/default/entities/entity_listing.php, views/default/friends/picker.php,
+ views/default/friends/river/create.php,
+ views/default/group/search/finishblurb.php,
+ views/default/group/search/startblurb.php, views/default/input/access.php,
+ views/default/input/checkboxes.php, views/default/input/email.php,
+ views/default/input/file.php, views/default/input/longtext.php,
+ views/default/input/password.php, views/default/input/plaintext.php,
+ views/default/input/pulldown.php, views/default/input/radio.php,
+ views/default/input/tags.php, views/default/input/text.php,
+ views/default/input/url.php, views/default/js/initialise_elgg.php,
+ views/default/js/upload_js.php, views/default/messages/errors/error.php,
+ views/default/messages/errors/list.php,
+ views/default/messages/messages/list.php,
+ views/default/messages/messages/message.php,
+ views/default/navigation/main_nav.php,
+ views/default/navigation/pagination.php,
+ views/default/navigation/topbar_tools.php,
+ .../notifications/settings/usersettings.php,
+ views/default/output/confirmlink.php, views/default/output/rss_view.php,
+ views/default/output/tags.php, views/default/output/url.php,
+ views/default/page_elements/breadcrumbs.php,
+ views/default/page_elements/content_header.php,
+ .../page_elements/content_header_member.php,
+ views/default/page_elements/contentwrapper.php,
+ views/default/page_elements/elgg_content.php,
+ views/default/page_elements/elgg_footer.php,
+ views/default/page_elements/elgg_header.php,
+ views/default/page_elements/elgg_topbar.php,
+ views/default/page_elements/footer.php,
+ views/default/page_elements/header.php,
+ views/default/page_elements/header_contents.php,
+ views/default/page_elements/html_begin.php,
+ views/default/page_elements/html_end.php,
+ views/default/page_elements/owner_block.php,
+ views/default/page_elements/spotlight.php,
+ views/default/page_elements/title.php, views/default/page_shells/default.php,
+ views/default/pageshells/pageshell.php, views/default/river/item/list.php,
+ views/default/river/item/wrapper.php, views/default/settings/system.php,
+ views/default/spotlight/default.php,
+ views/default/user/search/finishblurb.php,
+ views/default/user/search/startblurb.php,
+ views/default/user/settings/default_access.php,
+ views/default/user/settings/email.php,
+ views/default/user/settings/language.php,
+ views/default/user/settings/name.php,
+ views/default/user/settings/password.php,
+ views/default/usersettings/form.php, views/default/usersettings/main.php,
+ views/default/usersettings/main_opt/plugins.php,
+ views/default/usersettings/main_opt/statistics.php,
+ views/default/usersettings/main_opt/user.php,
+ views/default/usersettings/plugins.php,
+ views/default/usersettings/plugins_opt/plugin.php,
+ .../usersettings/statistics_opt/numentities.php,
+ .../default/usersettings/statistics_opt/online.php: Pulled in the interface
+ changes.
+
+2010-03-02 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * CHANGES.txt: Updated changes file for 1.7 release.
+
+ * engine/schema/mysql.sql, engine/schema/upgrades/2010030101.sql,
+ version.php: Fixes #1562: Added a default value for entities.last_action in
+ the schema and as an upgraded. Bumped version number to 1.7 final.
+
+ * mod/search/search_hooks.php, mod/search/views/default/search/entity.php:
+ Updated the the default search entity view to check for users and groups and
+ properly display their profile icons.
+
+2010-03-01 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php: Fixing punctuation in upgrade strings.
+
+ * INSTALL.txt: Refs #1562: Updated requirements for Elgg.
+
+ * engine/lib/group.php: Fixes #1566: Rewriting calls to get_group_members()
+ to use 1.7's constant for site_guid.
+
+ * engine/lib/annotations.php, engine/lib/elgglib.php,
+ engine/tests/regression/trac_bugs.php: Fixes #1558: Applied Cash's patch.
+ Added unit tests to test for regressions for any bugs fixed in trac.
+
+ * engine/tests/objects/entities.php, engine/tests/objects/objects.php: Fixed
+ unit tests for exportable values after [3977].
+
+ * engine/lib/entities.php: Fixes #1563: Added time_updated and site_guid to
+ the export vals.
+
+ * mod/search/languages/en.php: Changed search language array variable name.
+
+2010-02-26 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/access.php: Fixes #1540: Added site_guid to
+ get_user_access_collections().
+
+ * engine/lib/relationships.php: Refs #1553: Corrected profile link in
+ friending notification.
+
+ * engine/lib/tags.php: Fixes #1555: Added missing call to
+ elgg_get_registered_tag_metadata_names() and defined missing variable.
+
+ * engine/lib/actions.php: Added login to the list of actions not requiring a
+ security token.
+
+2010-02-24 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * version.php: Version bump.
+
+ * engine/lib/metadata.php, engine/tests/api/entity_getter_functions.php:
+ Fixes #1542: Pulled in Kevin's patch to add ability to sort by metadata.
+ Added unit tests for this.
+
+2010-02-23 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/metadata.php, engine/tests/api/entity_getter_functions.php:
+ Refs #1543: Added support to have pass an array as a value in the
+ metadata_name_value_pair option of elgg_get_entities_from_metadata(). Added
+ unit tests for elgg_get_entities_from_metadata(). Cleaned up some
+ documentation for elgg_get_entities_from_metadata().
+
+2010-02-22 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/group.php, engine/lib/objects.php, engine/lib/users.php: Fixes
+ #1528: Correctly throwing exceptions for objects, groups, and users.
+
+2010-02-22 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/systemsettings/install.php: river plugin is defunct so does not
+ need to be enabled on install
+
+ * mod/diagnostics/actions/download.php, mod/diagnostics/start.php: Fixes
+ #1544: plugin hook for diagnostics now for entity "system"
+
+2010-02-22 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Fixes #1531: Correctly implemented dates for
+ friendly times. No more coding while watching the Olympics!
+
+2010-02-22 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/output/url.php: Fixes #1541: javascript now correctly
+ included in output/url view
+
+2010-02-21 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/xml/pageshells/pageshell.php: Fixes #1517 - let web server set
+ content length on xml files
+
+2010-02-21 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * CHANGES.txt, engine/lib/elgglib.php, views/default/output/confirmlink.php,
+ views/default/output/url.php, views/default/page_elements/spotlight.php:
+ Deprecated elgg_validate_action_url() by elgg_add_action_tokens_to_url().
+ Updated elgg_deprecated_notice() to include the file & line of the caller.
+ Updated core to use elgg_add_action_tokens_to_url().
+
+2010-02-21 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/xml.php: Refs #1517: only encode <,>, and & for strings in xml
+
+2010-02-21 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/plugins/disable.php, actions/admin/plugins/disableall.php,
+ actions/admin/plugins/enable.php, actions/admin/plugins/enableall.php,
+ actions/admin/plugins/reorder.php, actions/admin/site/update_basic.php,
+ actions/admin/user/ban.php, actions/admin/user/delete.php,
+ actions/admin/user/makeadmin.php, actions/admin/user/removeadmin.php,
+ actions/admin/user/resetpassword.php, actions/admin/user/unban.php,
+ actions/comments/add.php, actions/friends/add.php,
+ actions/friends/addcollection.php, actions/friends/remove.php,
+ actions/import/opendd.php, actions/login.php,
+ actions/plugins/settings/save.php, actions/plugins/usersettings/save.php,
+ actions/register.php, actions/user/requestnewpassword.php,
+ actions/useradd.php, actions/usersettings/save.php, actions/widgets/save.php:
+ Refs #1538: Removed action_gatekeeper() from action files in core.
+
+ * htaccess_dist: Fixes #1539: Removed line endings from htaccess_dist.
+
+2010-02-21 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/api.php, services/api/rest.php, services/api/rest_api.php:
+ Apache's MultiViews was matching the rest page handler incorrectly
+
+2010-02-20 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, languages/en.php: Refs #1531: Added full time and
+ dates to friendly time stamptes via acronym tags.
+
+ * mod/search/index.php, mod/search/search_hooks.php, mod/search/start.php:
+ Fixes #1523: Updated search to use ELGG_ENTITIES_NO_VALUE/ANY_VALUE and
+ removed some commented out code.
+
+2010-02-19 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php: Fixes #1421: Banning and unbanning users invalidates
+ the memcache entity.
+
+ * admin/user.php: Corrected fullview call in users admin section.
+
+ * views/default/js/initialise_elgg.php: Refs #1504: Removing revert option
+ from widget draggables to avoid fly away effect in IE 7.
+
+ * views/default/canvas/layouts/widgets.php: Fixed a bug in widget layouts
+ that caused the "edit page" link to not work if no widgets were defined.
+
+ * views/default/friends/picker.php: Fixes #1532: Added security tokens to
+ friend picker when in form mode.
+
+ * views/rss/pageshells/pageshell.php: Fixes #1535: Corrected double replace
+ for URL in RSS title view.
+
+ * engine/lib/access.php: Fixes #1519: Corrected site_guid in
+ create_access_collection().
+
+2010-02-18 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/tests/api/entity_getter_functions.php: Getter API test: Moved the
+ setup and tear down into the construct and destruct methods. Fixed a few new
+ tests that were failing because of sorting by time.
+
+2010-02-17 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * admin/user.php, dashboard/latest.php, engine/lib/activity.php,
+ engine/lib/admin.php, engine/lib/entities.php, engine/lib/export.php,
+ engine/lib/group.php, engine/lib/input.php, engine/lib/metadata.php,
+ engine/lib/notification.php, engine/lib/objects.php,
+ engine/lib/relationships.php, engine/lib/river2.php, engine/lib/sites.php,
+ engine/lib/users.php, index.php: Fixes #1488: Removed use of deprecated
+ functions in core.
+
+ * engine/lib/elgglib.php, engine/lib/entities.php, engine/lib/metadata.php,
+ engine/tests/api/entity_getter_functions.php: Refs #1523: elgg_get_entities()
+ uses the constants for defaults and conditionals. Added some tests to check
+ for no subtypes. Updated the documentation.
+
+ * engine/tests/api/entity_getter_functions.php, mod/diagnostics/index.php,
+ mod/diagnostics/languages/en.php, mod/diagnostics/start.php,
+ mod/diagnostics/testreport.php, mod/diagnostics/unittester.php,
+ mod/diagnostics/views/default/diagnostics/test.php,
+ .../views/default/diagnostics/testresult.php: Fixes #1526: Big honking
+ warning added to unit tests. Getter test also deletes its subtypes now.
+
+ * mod/search/README.txt: Updated docs for search.
+
+ * engine/lib/actions.php: Fixes #1527: Logout doens't require an action
+ token. This is a temporary fix until #1509 is implemented.
+
+ * mod/search/search_hooks.php: Fixes #1499: User and group search default to
+ ignoring subtypes to return all entities.
+
+2010-02-16 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/search/index.php: Fixed incorrect variable calls in search.
+
+ * mod/search/search_hooks.php: Not using elgg_get_entities_from_metadata()
+ for tag search because of performance issues. Switched to custom WHERE /
+ JOINs with elgg_get_entities().
+
+ * engine/lib/elgglib.php: Removing embed extended view from core.
+
+2010-02-13 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, languages/en.php, mod/search/search_hooks.php,
+ views/default/output/tags.php: Cleaned up tag searching so you can search on
+ a specific tag. Useful in search so a tag in "Things I like" won't match a
+ tag in "Things I hate."
+
+2010-02-12 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Can't type hint for strings.
+
+ * CHANGES.txt, engine/lib/entities.php, engine/lib/tags.php,
+ mod/search/search_hooks.php: Closes #1506: Added
+ elgg_register_tag_metadata_name(), elgg_get_registered_tag_metadata_names(),
+ and ElggEntity::getTags(). Search on tags updated to use registered tag
+ names instead of hard-coded 'tags' metadata name.
+
+ * engine/lib/elgglib.php: Fixes #1510: Added elgg_get_file_list().
+ get_library_files() wraps to this function with a deprecation notice for any
+ plugin authors using it to auto-load files.
+
+ * engine/lib/api.php, engine/lib/elgglib.php, engine/lib/input.php,
+ engine/lib/mb_wrapper.php, engine/lib/pagehandler.php,
+ mod/search/views/default/search/listing.php: Fixes #1512: Using a helper
+ function for mb_parse_str() instead of wrapping it exactly.
+
+2010-02-12 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/api.php, languages/en.php: updated documentation on the REST
+ API user authentication
+
+2010-02-11 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/api.php, engine/lib/elgglib.php, engine/lib/input.php,
+ engine/lib/mb_wrapper.php, engine/lib/pagehandler.php: Fixes #1501: Setting
+ ini for mbstring.internal_encoding to utf8 to work around a PHP bug. Replaced
+ calls to parse_str() with elgg_parse_str().
+
+ * views/default/navigation/pagination.php: Fixes #1507: $vars['baseurl']
+ used instead of undefined $baseurl in pagination view.
+
+2010-02-11 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: fixes #1505 - some lazy css was impacting opera for
+ checkboxes - overriding border and padding properties inherited from input
+ selector
+
+2010-02-11 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/output/url.php: Made the output/url view backward compatible
+ for the few plugins that used it.
+
+2010-02-10 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: Remove version from default theme's css.
+
+2010-02-09 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, engine/start.php: Fixes #1503, fixes #1474:
+ Library files are loaded using a hard-coded list to better deal with removed
+ files. Also, ~4% performance increase per page load on my server!
+
+ * mod/search/start.php: Correcting the corrected documentation.
+
+ * mod/search/start.php: Documentation correction in search.
+
+2010-02-08 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/plugins.php, mod/crontrigger/manifest.xml,
+ mod/diagnostics/manifest.xml, mod/garbagecollector/manifest.xml,
+ mod/htmlawed/manifest.xml, mod/logbrowser/manifest.xml,
+ mod/logrotate/manifest.xml, mod/search/manifest.xml,
+ mod/uservalidationbyemail/manifest.xml: Updated copyright for core plugin
+ manifests.
+
+ * engine/lib/access.php, engine/tests/api/entity_getter_functions.php: Fixes
+ #1496: delete_access_collection() invalidates the access collection cache
+ before attempting to delete. Removed a misplaced unset() in a unit test that
+ was causing test objects not to be properly deleted.
+
+2010-02-07 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/settings/system.php: finished the fix to #1492
+
+ * languages/en.php: more user friendly section title on user stats page
+
+ * languages/en.php: fixed punctuation issue on install instructions
+
+ * engine/lib/api.php, languages/en.php: tweaked some documentation on the
+ REST API
+
+2010-02-07 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/metadata.php: Correcting documentation for
+ elgg_get_entities_from_metadata().
+
+2010-02-07 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/elgg_topbar.php,
+ views/default/page_elements/header.php: & replaced by &amp; in the header and
+ alt added to some header graphics
+
+ * CONTRIBUTORS.txt: updated
+
+2010-02-06 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/tests/api/entity_getter_functions.php, engine/tests/suite.php: Refs
+ #1200: Added tests to test for false being returned with elgg_get_entities().
+ Disabled execution time during unit tests.
+
+ * actions/systemsettings/install.php, engine/lib/ping.php, languages/en.php,
+ views/failsafe/settings/system.php: Fixes #1492: Removed usage info
+ collecting from installation.
+
+ * engine/schema/mysql.sql: Fixes #1493: Updated schema to set auto_increment
+ IDs for access_collections to 3 to avoid overwriting default values with
+ group / shared access ACLs.
+
+ * views/default/css.php: Fixes #1491: Removed mistakingly assigned
+ input-password with input-textarea.
+
+2010-02-06 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/version.php: missing new on upgrade_details object creation
+
+ * engine/lib/elgglib.php: fixes #1486 - elgg_dump now works when sending to
+ server error log
+
+2010-02-06 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: Fixes #1404: Added input-password rules in default
+ css.
+
+2010-02-05 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php, languages/en.php: Fixes #1483: Reset password emails
+ forward to a confirmation page handler instead of directly to an action.
+
+ * engine/lib/pageowner.php: Fixes #1212: Removed unused code.
+
+ * engine/lib/elgglib.php: Fixes #1486: elgg_log() can now log arrays and
+ objects to error_log().
+
+ * engine/lib/xml-rpc.php: Fixes #1319: Applied patch for missing xml-rpc
+ <value> tag.
+
+ * CHANGES.txt, engine/lib/elgglib.php,
+ views/default/navigation/pagination.php, views/default/river/item/list.php:
+ Fixes #1481: Applie Mike's patch and created function
+ elgg_http_add_url_query_elements() to handle what the pagination view was
+ trying to do.
+
+2010-02-04 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * README.txt: updated copyright to 2010
+
+2010-02-04 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, engine/lib/entities.php,
+ engine/tests/api/entity_getter_functions.php: Refs #1200: Changed logic in
+ elgg_get_entity_type_subtype_where_sql() to return FALSE if there are no
+ valid subtypes passed. Ignores all invalid subtypes. Added (partial) tests
+ for elgg_get_entities() types and subtypes.
+
+2010-02-03 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * INSTALL.txt: updated install instructions to encourage more use of the
+ wiki instructions/troubleshooting and discourage setting data directory to
+ 777 as default
+
+ * views/rss/pageshells/pageshell.php: fixed a comment in rss pageshell
+
+2010-02-01 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/filestore.php: PHP complains about not casting the timestampt
+ to int for use in date().
+
+ * engine/lib/metadata.php: Added error checking to
+ clear_metadata_by_owner().
+
+ * engine/lib/entities.php: Fixed incorrect variable for subtype in
+ get_entity_dates().
+
+ * views/failsafe/messages/sanitisation/htaccess.php,
+ views/failsafe/messages/sanitisation/settings.php,
+ views/failsafe/pageshells/pageshell.php: Fixes #1328: Removed rows and cols
+ from the installation textareas and added CSS to format width/height at 100%
+ to make it easier to read and select.
+
+ * engine/lib/elgglib.php: Fixes #340: add_menu() and make_register_object()
+ deprecated.
+
+ * engine/lib/languages.php: Fixes #1166. get_installed_translations() only
+ calculates completion if admin is logge din.
+
+ * CHANGES.txt, engine/lib/entities.php: Fixes #1406: get_entity_dates()
+ supports order by.
+
+ * engine/lib/database.php: Adding some \ns between the SQL error and the
+ query in the database exception.
+
+ * engine/lib/input.php: Fixes #1398: autop() doesn't call missing
+ clean_pre() function.
+
+ * CHANGES.txt, engine/lib/entities.php: Fixes #1376: added
+ ElggEntity::removeRelationship().
+
+ * engine/lib/elgglib.php: Fixes #1478: uh....how did that get in there?
+
+ * engine/lib/elgglib.php: Fixes: #1475. elgg_http_build_url() correctly
+ sets port number.
+
+ * engine/lib/filestore.php: Fixes #1314: Filestore opens read-only with rb
+ instead of r+b.
+
+ * actions/email/save.php: Refs #1290: Changed email addresses are checked in
+ action:email/save
+
+ * engine/lib/elgglib.php: Fixes #1261: Exceptions force an HTTP recache.
+
+ * CHANGES.txt, engine/lib/relationships.php: Fixes #1213:
+ delete_relationship() triggers delete:relationship hook.
+
+ * engine/lib/pageowner.php: Fixes #1211: page_owner() sets the page owner
+ after figuring it out.
+
+ * engine/lib/entities.php: Updated documentation for elgg_get_entities().
+
+ * CHANGES.txt, engine/lib/entities.php: Fixes #1325:
+ ElggEntities::countEntitiesFromRelationship() support inverse relationships.
+
+ * engine/lib/users.php, views/default/account/forms/login.php: Fixes #1473:
+ Simple patch to create a view for the registration page.
+
+ * engine/lib/annotations.php: Fixed incorrect deprecated warning.
+
+ * engine/lib/elgglib.php: Refs #1079: elgg_view() casts view to a string
+ before attempting to call views.
+
+ * engine/lib/users.php: Fixes #678. Friending appears in the river for
+ invited new users.
+
+ * engine/lib/entities.php: Put the can_write_to_container() plugin hook in
+ the right place after [3871].
+
+ * CHANGES.txt, engine/lib/access.php, engine/lib/annotations.php,
+ engine/lib/elgglib.php, engine/lib/entities.php, engine/lib/group.php,
+ engine/lib/metadata.php, engine/lib/objects.php,
+ engine/lib/relationships.php, engine/lib/sites.php, engine/lib/users.php,
+ views/default/group/search/finishblurb.php,
+ views/default/group/search/startblurb.php,
+ views/default/user/search/finishblurb.php,
+ views/default/user/search/startblurb.php: Add elgg_deprecated_notice() so we
+ don't have to re-write all the elgg_log() deprecated notices to
+ register_error()s. Updated current ones to use this.
+
+2010-01-31 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/search/views/default/search/listing.php: Removing var_dump().
+
+ * CHANGES.txt, engine/lib/entities.php, engine/lib/group.php,
+ engine/lib/objects.php, engine/lib/sites.php, engine/lib/users.php,
+ mod/search/views/default/search/listing.php,
+ views/default/group/search/finishblurb.php,
+ views/default/group/search/startblurb.php,
+ views/default/user/search/finishblurb.php,
+ views/default/user/search/startblurb.php: Deprecated old search functions and
+ views.
+
+ * CHANGES.txt, engine/lib/entities.php: Fixes #1164:
+ can_write_to_container() now sends default values through
+ container_permissions_check hook.
+
+ * mod/htmlawed/start.php: htmlawed no longer creates tags with extra spaces
+ (<p >).
+
+ * views/rss/pageshells/pageshell.php: Fixes #1289: Pragma: public header
+ added for RSS feeds.
+
+ * engine/lib/users.php: Fixes #804: A relationship is created between a new
+ user and the site it was created on.
+
+ * engine/lib/elgglib.php, views/default/navigation/pagination.php,
+ views/default/navigation/viewtype.php, views/default/river/item/list.php:
+ Fixes #959: Added elgg_http_remove_url_query_element() to remove a GET
+ element instead of using faulty regexp.
+
+2010-01-30 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Changed array_key_exists() to isset() in
+ elgg_validate_action_url().
+
+ * engine/lib/elgglib.php: Added checking for $query array in
+ elgg_validate_action_url().
+
+ * engine/lib/input.php: Setting a default value to avoid notices.
+
+ * mod/htmlawed/start.php, mod/htmlawed/vendors/htmLawed/htmLawed.php,
+ mod/htmlawed/vendors/htmLawed/htmLawedTest.php,
+ mod/htmlawed/vendors/htmLawed/htmLawed_README.htm,
+ mod/htmlawed/vendors/htmLawed/htmLawed_README.txt,
+ .../vendors/htmLawed/htmLawed_TESTCASE.txt: Fixes #1425, Fixes #1341:
+ Upgraded htmlawed to latest. Altered the htmlawed attribute filtering
+ function to return <attr="val"> for proper linking in parse_urls(). Added
+ background-color as a non-filtered style attribute.
+
+ * engine/lib/input.php: Refs #1425: Cleaned up regexp for parlse_urls().
+
+2010-01-29 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/plugins.php: Fixes #1468: Cleaned up logic for enabling and
+ disabling plugins. Checking for arrays when metadata returns only a single
+ enabled plugin.
+
+ * admin/plugins.php, mod/diagnostics/index.php, mod/logbrowser/index.php:
+ Removed unneeded owner block icons from admin.
+
+ * engine/schema/mysql.sql, engine/schema/upgrades/2010012901.sql,
+ version.php: Added db migration 2010012901 that adds last_action column to
+ entities table. Bumped version number to 1.7b (2010012901).
+
+ * CHANGES.txt, engine/lib/relationships.php: Fixes #1472:
+ get_entity_relationships() supports inverse relationships.
+
+ * engine/lib/elgglib.php: Fixes #1470, Fixes #1471:
+ elgg_view_regenerate_simplecache() no longer triggers the pagesetup/system
+ hook. Fixes problems with creating the submenu.
+
+2010-01-28 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/plugins.php: Corrected clear_plugin_setting() to only remove a
+ single plugin setting instead of all setting for a plugin. Added
+ clear_all_plugin_settings() to remove all settings for a plugin.
+
+2010-01-28 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * CONTRIBUTORS.txt: changed my email address to web site in contributors
+ file
+
+2010-01-28 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/useradd.php, engine/lib/users.php: Fixes #1049, Fixes #1435:
+ Admin-created users and first admin user are marked as validated to prevent
+ inaccurate "Please validate your account" messages and emails.
+
+2010-01-27 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * CHANGES.txt, engine/lib/annotations.php, engine/lib/river2.php: Fixes
+ #1419: Added remove_from_river_by_annotation(). Deleting annotations now
+ deletes their river entry.
+
+ * CHANGES.txt: Updated changes.
+
+ * engine/lib/elgglib.php: Fixes #1465: Added unregister_event_handler() and
+ unregister_plugin_hook().
+
+ * engine/lib/sessions.php: Fixes #1464: A new session is created in logout()
+ after destorying the old session to display old $_SESSION['msg'] messages.
+
+2010-01-26 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * CHANGES.txt: Updated changes for the display name change.
+
+ * actions/user/name.php, languages/en.php,
+ views/default/user/settings/name.php: Display names are limited to 50 chars
+ and have HTML tags removed.
+
+ * README.txt: Bumped version number in README.
+
+ * views/default/css.php: Fixed a typo in css that broke everything in FF
+ 3.6.
+
+ * CHANGES.txt, engine/lib/plugins.php, languages/en.php: Fixes #1454:
+ Applied Cash's patch. Bad plugins are automatically disabled and a notice is
+ displayed instead of breaking the site.
+
+2010-01-25 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/actions.php, engine/lib/input.php: Fixes #1450, Fixes #1461:
+ Using $_SERVER['REQUEST_URI'] to pull in GET params on apache servers.
+
+2010-01-24 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Correctly forwarding messages among multiple
+ forwards (action_gatekeeper() -> index -> dashboard would drop messages
+ generated in action_gatekeeper()).
+
+ * actions/systemsettings/install.php: Refs #1450, Refs #1461, Refs #1460:
+ Install now clears out views caches.
+
+ * mod/diagnostics/start.php: Masking dbpassword in dianostics file.
+
+ * engine/lib/actions.php: Fixes #1460, Fixes #1459: Tokens are not required
+ to disable a plugin or install. This allows users to disable plugins that
+ overwrite admin pages without tokens.
+
+ * views/failsafe/input/form.php, views/failsafe/input/securitytoken.php:
+ Refs #1459: Added missing security tokens for failsafe (installation) view.
+
+ * actions/admin/plugins/disable.php, actions/admin/plugins/disableall.php,
+ actions/admin/plugins/enable.php, actions/admin/plugins/enableall.php,
+ actions/admin/plugins/reorder.php, actions/admin/user/ban.php,
+ actions/admin/user/delete.php, actions/admin/user/makeadmin.php,
+ actions/admin/user/removeadmin.php, actions/admin/user/resetpassword.php,
+ actions/admin/user/unban.php, actions/email/save.php,
+ actions/entities/delete.php, actions/register.php,
+ actions/user/default_access.php, actions/user/language.php,
+ actions/user/name.php, actions/user/password.php,
+ actions/user/passwordreset.php, actions/user/requestnewpassword.php,
+ actions/useradd.php, actions/usersettings/save.php: Removing calls to
+ engine/start.php in action files.
+
+ * CODING.txt: Added best practices to CODING.txt.
+
+2010-01-23 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/object/default.php: Fixed missing ) causing a WSOD.
+
+ * views/default/admin/user_opt/search.php: Fixes #1455: Updated search URL
+ for admin user search. (The old one worked, but didn't limit to users.)
+
+2010-01-22 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../actions/email/confirm.php, mod/uservalidationbyemail/manifest.xml,
+ mod/uservalidationbyemail/start.php: Changed uservalidationbyemail to not use
+ an action and cleaned up some of its code.
+
+ * engine/lib/elgglib.php: Fixed a bug preventing messages and warnings from
+ passing during a forward().
+
+2010-01-21 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/basic_elements/welcome.php,
+ views/default/page_elements/elgg_topbar.php,
+ views/default/welcome/logged_in.php: Updated views to use output/url with
+ action flag set.
+
+ * views/default/output/action_link.php, views/default/output/url.php:
+ Removed output/action_link view as it duplicated much of output/url. Improved
+ output/url view.
+
+ * engine/lib/metadata.php: Corrected a possible SQL insertion bug in
+ elgg_get_entity_metadata_where_sql().
+
+ * engine/lib/filestore.php: Fixing bug in resizing function that would
+ incorrectly attempt to crop a picture that was smaller than the target image.
+
+
+ * engine/lib/elgglib.php: Changed default declaration of $vars in
+ elgg_view() to array().
+
+ * views/default/object/default.php: Fixed a typo causing a WSOD.
+
+ * engine/lib/actions.php,
+ views/default/account/forms/forgotten_password.php,
+ views/default/basic_elements/welcome.php,
+ views/default/canvas/layouts/widgets.php, views/default/css.php,
+ views/default/object/default.php,
+ views/default/page_elements/elgg_topbar.php,
+ views/default/page_elements/spotlight.php,
+ views/default/welcome/logged_in.php: Fixes #750: All actions require
+ __elgg_ts and __elgg_token.
+
+ * engine/lib/elgglib.php: elgg_http_build_query() now supports ports.
+ Checking for __elgg_ts also in elgg_validate_action_url(). Fixed a spelling
+ mistake ;)
+
+ * views/default/output/action_link.php: Adding a view to generate action
+ links for single-click actions.
+
+2010-01-20 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/search/views/default/search/listing.php: Fixing bugs in search that
+ would break pagination.
+
+ * views/rss/navigation/pagination.php: Refs #1161: Added empty pagination
+ view for RSS feeds.
+
+ * engine/lib/filestore.php: Resetting cropping coords for images that can't
+ be cropped in filestore.
+
+ * engine/lib/filestore.php: Fixes #1445:
+ get_resized_image_from_existing_file() has an optional parameter to allow
+ upscaling if requested image is larger than original image.
+
+ * engine/lib/entities.php: Fixed documentation for time created and modified
+ params in elgg_get_entities().
+
+2010-01-15 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/search/search_hooks.php: Removing order by clause for now in search.
+
+ * CHANGES.txt: Updated CHANGES for #1414.
+
+2010-01-14 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/page_elements/searchbox.php: Stripping slashes on output
+ of original search query.
+
+ * mod/search/start.php: Allowing no table prefix in
+ search_get_search_where_sql()
+
+ * mod/search/start.php: Fixed incorrect order by for search sorting.
+
+ * mod/search/index.php, mod/search/search_hooks.php, mod/search/start.php:
+ Fixed an incorrect var name that caused a bug when hooking against a type but
+ not a subtype. Added first pass at results sorting.
+
+ * mod/search/README.txt, mod/search/index.php, mod/search/start.php,
+ mod/search/views/default/search/layout.php: Removed unnecessary view
+ directories. Added option of overriding the default layout for search
+ queries. Updated documentation reflecting those changes. Clarified some
+ points in the documentation.
+
+ * engine/lib/elgglib.php: Added checking and an ERROR log if elgg_view() is
+ passed a non-array $vars.
+
+2010-01-13 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * CONTRIBUTORS.txt: Updated contributors with entire MITRE team.
+
+2010-01-13 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Creating a helper function to return INI values in
+ bytes.
+
+2010-01-12 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Fixes #1414: Metadata set to a falsy value
+ (except NULL) returns TRUE for isset($obj->md).
+
+2010-01-12 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, engine/lib/group.php, engine/lib/metadata.php,
+ engine/lib/objects.php, engine/lib/sites.php, engine/lib/users.php,
+ engine/tests/objects/objects.php, engine/tests/objects/users.php: closes
+ #1145 - deprecated current "copy constructor" for all entities and
+ implemented a clone method. The clone copies over all metadata but not
+ annotations and private settings. It sets the guid to 0 so saving the cloned
+ entity creates a new database record. The ownership/access of metadata is set
+ during the save and will be the same as that of the entity.
+
+2010-01-12 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/search/views/rss/search/entity.php: Cleaned up RSS entity view for
+ search a bit.
+
+ * mod/search/index.php, mod/search/views/rss/search/entity.php,
+ mod/search/views/rss/search/listing.php: Added phpdoc header to index.php
+ Added RSS support to search. Nifty.
+
+2010-01-11 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, views/default/output/confirmlink.php: Always
+ generating action tokens with output/confirmlink. Includes a check for
+ actions already defining the tokens.
+
+2010-01-11 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/search/README.txt: Fixed a few spelling mistakes. Added descriptions
+ for the vars in 3.2
+
+ * engine/lib/relationships.php: Sanitising relationship in
+ elgg_get_entities_from_relationship();
+
+ * views/default/output/tags.php: Fixed tag output link for new search.
+
+ * mod/search/README.txt, mod/search/index.php, mod/search/start.php,
+ .../views/default/search/comments/entity.php,
+ .../views/default/search/comments/listing.php,
+ mod/search/views/default/search/entity.php,
+ mod/search/views/default/search/listing.php: Pulling out entity views in
+ search. Adding dev documentation.
+
+2010-01-10 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php: Fixes #1399: Case sensitivity was never in the
+ deprecated function, so no need to add it. Use the new functions if
+ required.
+
+ * engine/lib/metadata.php: Fixes #538. Applied Cash's patch. This is an old
+ one...jeepers.
+
+ * engine/lib/metadata.php: Fixes #1375: Metadata names and values are
+ properly escaped.
+
+2010-01-08 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Refs #1400: Fixed a typo in checking the
+ site_guid. Can't duplicate #1400 now, so possible fix for that. Waiting for
+ other tests to close this one.
+
+ * languages/en.php: Updated language file to reflect default prefix change.
+
+ * views/failsafe/messages/sanitisation/settings.php: Changed default prefix
+ to 'elgg_' for table name readability.
+
+ * actions/systemsettings/install.php, engine/lib/input.php: Fixes #1172: URL
+ now checked for trailing slash upon installation.
+
+2010-01-06 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/upgrades/2009102801.php: Fixing an upgrade issue relating from
+ invalid (non-existent) usernames
+
+2010-01-05 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/upgrades/2010010501.php, version.php: Added an upgrade to
+ enable the search plugin. Bumped internal version number.
+
+2010-01-03 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php: Set admin user's validation upon initial
+ registration. Fixes an incorrect error message if the first admin user enters
+ the wrong password.
+
+2009-12-31 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/database.php: Closes #1424: Faulty database migrations will now
+ halt an upgrade.
+
+ * engine/lib/metadata.php: Removed debug data.
+
+ * engine/schema/upgrades/2009100701.sql: Removed lock tables from db utf8
+ migration because it fails on some (all?) servers.
+
+2009-12-21 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/input/access.php, views/default/input/button.php,
+ views/default/input/file.php, views/default/input/longtext.php,
+ views/default/input/tags.php, views/default/output/confirmlink.php,
+ views/default/page_elements/header.php: a little cleanup of documentation and
+ variable handling in input and output views
+
+ * entities/index.php: removed unused variable in entities index
+
+ * engine/lib/group.php: fixed #1087 - is_group_member() now returns boolean
+ values only
+
+ * engine/lib/entities.php: fixes #988 - subtype is now available on new
+ entities after being saved
+
+2009-12-20 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: fixed bug where array of messages passed to
+ system_messages caused execution to stop - also displaying only errors if
+ they exist rather than having success and error messages overlapping each
+ other
+
+ * engine/lib/users.php: fixes #1322 - "remember me" cookie code is cleared
+ when a user is banned
+
+ * views/default/page_elements/header.php,
+ views/failsafe/pageshells/pageshell.php: fixes #1193 - now specify charset in
+ both metatag and http header
+
+ * engine/lib/database.php: cleaned up logic on db query cache
+
+ * engine/lib/entities.php: fixed typo in list_entities()
+
+2009-12-18 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/relationships.php: Clarified the documentation for
+ add_entity_relationship().
+
+2009-12-18 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/comments/add.php: add comment action now using get_loggedin_user()
+ rather than $_SESSION['user']
+
+ * views/default/input/form.php: added js to input/form
+
+ * engine/lib/actions.php, engine/lib/pagehandler.php: better parsing of
+ query for action and page handlers
+
+2009-12-17 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/mb_wrapper.php: perhaps this is what Brett intended with the
+ new mb_wrapper code
+
+ * views/default/input/button.php, views/default/input/form.php,
+ views/default/input/submit.php, views/default/input/text.php: fixed notices
+ caused by some input views
+
+ * engine/lib/database.php: fixed warning due to database query cache
+
+ * engine/lib/entities.php: when asking for a count of entities, we now
+ return an integer rather than a string
+
+ * engine/lib/elgglib.php: get_submenu was throwing out tons of notices -
+ this should be fixed now
+
+ * views/default/css.php: fixes #951 - using background-color rather than
+ background
+
+2009-12-16 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/filestore.php: better version of
+ get_resized_image_from_existing_file() - fixes #685 - more robust to errors,
+ and fixes a memory leak - tested with both profile photos and file plugin
+ photos - old installs will still have profile icons of the wrong size due to
+ #685
+
+ * engine/lib/input.php: added comments on get_input and set_input since they
+ do not handle nested arrays
+
+2009-12-15 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * CONTRIBUTORS.txt: Fixes #1413: New server test.
+
+2009-12-14 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/tags.php: closes #1277 - display_tagcloud() now has same
+ parameters as get_tags()
+
+ * views/default/output/tagcloud.php: fixes #1197 - no division by zero
+ warning any longer
+
+ * views/default/account/forms/login.php,
+ views/default/account/forms/register.php: easier to extend login and
+ registration forms now
+
+ * CHANGES.txt: updated CHANGES.txt with info on river table
+
+ * engine/tests/services/api.php: fixed line endings on services api unit
+ tests
+
+ * languages/en.php: added some missing language strings
+
+2009-12-10 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/cache.php: closes #1244 - checking whether file exists before
+ deleting it in cache
+
+ * views/default/friends/collectiontabs.php: closes #1226 - fixes eclipse
+ validation error
+
+ * languages/en.php, views/default/admin/user_opt/search.php: fixes #1230 -
+ spelling corrected
+
+ * engine/lib/access.php: using defines for ACCESS values - closes #1064
+
+ * mod/htmlawed/start.php: removes @ from include - closes #879
+
+ * actions/admin/user/ban.php: removes unused variables - closes #1129
+
+2009-12-09 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/sessions.php: minor tweak in comment - closes #1264
+
+ * views/default/css.php, views/default/page_elements/owner_block.php: fixes
+ #973 - pulls reported content and bookmark code out of core owner_block view
+ - left images in _graphics since themes probably depend on that and did not
+ want to break themes
+
+ * engine/lib/relationships.php: fixes #1323 and #1186 - PHP 5.3 requires
+ magic methods to be public
+
+2009-12-08 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, engine/lib/users.php,
+ engine/tests/objects/users.php: fixes #1305 - user and entity cache now
+ cleared on delete
+
+ * engine/lib/sessions.php, languages/en.php: gatekeeper functions now
+ display helpful messages - closes #1060
+
+ * engine/lib/group.php: fixes #1287 - users now removed from group acl when
+ leaving group - changed order of event and relationship removal
+
+ * .../canvas/layouts/two_column_right_sidebar.php, views/default/css.php:
+ fixes #537 - missing area3 added to two_column_right_sidebar - also added
+ enough css so that the login page works with right sidebar
+
+2009-12-07 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/sessions.php: Adding alias ElggSession methods
+
+2009-12-07 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/start.php: fixes #1187
+
+ * actions/comments/add.php, languages/en.php: fixes #1018 - blank comments
+ are now rejected
+
+ * views/default/input/form.php, views/failsafe/input/form.php,
+ views/failsafe/messages/sanitisation/settings.php: fixes #1183 - correct case
+ for form method now
+
+ * engine/lib/elgglib.php: fixed issue where php notices were written to log
+ on any debug level and added a plugin hook so plugins can direct elgg_log
+ messages where they want
+
+ * actions/login.php: fixed warning on access of array index that did not
+ exist in session global
+
+ * engine/lib/access.php: removed code that wasn't doing anything in
+ access.php
+
+ * engine/lib/relationships.php: fixed typo in
+ get_entities_from_relationship()
+
+2009-12-05 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/uservalidationbyemail/start.php: adding more security to the user
+ validation by email code - before people could fake the validation with
+ knowledge of the code making it possible for bots to register and validate
+ without an email address
+
+ * engine/lib/annotations.php: get_entities_from_annotations was ignoring
+ group_guid - setting container_guid now
+
+ * mod/htmlawed/start.php: fixed trivial bug in htmlawed plugin. The ;
+ delimiter should only be used between sets of schemes (protocols). This is
+ due to some slightly lazy coding in htmlawed.
+
+ * engine/lib/sessions.php: if there is already a user in the session, we
+ don't need to set the code from the cookie
+
+ * engine/lib/plugins.php: fixed bug introduced in [3608]
+
+ * languages/en.php, views/default/annotation/annotate.php: fixed bug in
+ comment river view due to missing }
+
+2009-12-04 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: fixes #1273 - replaced previous hack with call to
+ getType
+
+ * engine/lib/api.php, engine/tests/services/api.php: fixes #1397 and updates
+ unit tests - comma was missing
+
+2009-12-03 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/api.php: fixes #1396 - thanks for reporting this
+
+2009-12-03 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/search/search_hooks.php: Stripping tags to remove HTML on title and
+ description for comment search.
+
+ * mod/search/search_hooks.php: Removed a line breaking description for
+ comments in search.
+
+ * mod/search/search_hooks.php: Comments' search hook now correctly trims
+ description and title.
+
+ * .../views/default/search/comments/listing.php,
+ mod/search/views/default/search/listing.php: Removed pagination from top of
+ results.
+
+ * engine/lib/elgglib.php: Trimming the paths when detecting which nav item
+ to mark as selected.
+
+2009-12-02 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/search/views/default/search/listing.php: Search types without a
+ subtype now display properly.
+
+ * engine/lib/elgglib.php: Changed the way the sidebar nav "selected" class
+ is applied. Should yield more accurate results if the URIs aren't exactly
+ the same.
+
+ * CHANGES.txt: Removed duplicate changes entry.
+
+ * .../views/default/search/comments/listing.php,
+ mod/search/views/default/search/listing.php: Changed avatar size to small in
+ search results. Fixed a bug so comment owners' avatars show up instead of
+ commented entity's owners' avatars.
+
+2009-12-02 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/usersettings.php, languages/en.php: closes #876 - profile
+ language strings moved to profile plugin
+
+2009-11-30 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/search/views/default/search/listing.php: Added pagination to comments
+ view.
+
+ * mod/search/search_hooks.php, mod/search/views/default/search/listing.php,
+ mod/search/views/default/search/tags/listing.php: Removed tag search listing.
+ Added ability to provide extra info in searches as 'search_matched_extra'.
+ Allowing overrides for titles.
+
+ * .../views/default/search/comments/listing.php,
+ mod/search/views/default/search/listing.php: If a search result returns a
+ user, make the icon be for the user and not the owner (which is no one)
+
+ * .../views/default/search/comments/listing.php,
+ mod/search/views/default/search/listing.php,
+ mod/search/views/default/search/tags/listing.php: Listings use profile/icon
+ view instead of calling icon directly.
+
+2009-11-26 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/search/views/default/search/entity_list.php: search results view
+ tweaked
+
+2009-11-24 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Fixing a bug resulting from get_loggedin_user()
+ return FALSE. This bug could throw a fatal error to non-loggedin users.
+
+ * engine/tests/test_skeleton.php: Adding documentation to the unit test
+ skeleton file.
+
+2009-11-24 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: entities can now have metadata of 0 and return
+ the correct type. Fixes #1192
+
+ * dashboard/latest.php: dashboard latest wasn't specifying fullview as false
+
+ * engine/lib/languages.php: fixes 1315 - language static now being set
+ correctly
+
+ * engine/lib/entities.php: fixes #935
+
+ * engine/lib/users.php: made the get user friends objects functions
+ consistent and added some missing documentation - no api usage changes
+
+2009-11-23 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/filestore.php, engine/lib/users.php,
+ engine/tests/objects/filestore.php: Deleting a user will remove all user
+ files. Fixes #607
+
+2009-11-22 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/friends/remove.php: remove friend action, return user to the place
+ the action was triggered
+
+ * actions/friends/add.php: when friending another user, return to the page
+ you carried out the action
+
+2009-11-21 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php, engine/lib/metadata.php,
+ engine/lib/relationships.php: fixes #1374 - owner_guid wasn't being set
+ correctly in options array
+
+ * engine/lib/metadata.php: get_entities_from_metadata_multi() had bad option
+ keys - related to #1374.
+
+ * engine/lib/users.php: fixes #1380 - get_user_friends() was being called
+ with subtype of desired objects in get_user_friends_objects() - thanks for
+ the report
+
+2009-11-20 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Fixed a bug with group by and order by in
+ elgg_get_entities. #ElggCampBA
+
+2009-11-17 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/pagehandler.php: updated some documentation on
+ register_page_handler(). This fixes #1373
+
+2009-11-17 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * CONTRIBUTORS.txt: updating the contributors file
+
+2009-11-16 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * version.php: Bump.
+
+2009-11-16 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/search/comments/listing.php,
+ mod/search/views/default/search/listing.php,
+ mod/search/views/default/search/tags/listing.php: 'More' links on serarch
+ results moved, and link added to Tag results
+
+ * .../views/default/search/comments/listing.php,
+ mod/search/views/default/search/listing.php,
+ mod/search/views/default/search/tags/listing.php: Search UI cleaned up
+
+2009-11-16 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/search/views/default/search/listing.php: Fixed typo to display the
+ type of search.
+
+ * actions/systemsettings/install.php, views/default/site/default.php: Added
+ an INSTALLING constant when installing. Fixed a bug when trying to export a
+ site that causes the browser to redirect to the site's url, which caused the
+ installation process to skip past the "create your admin user" prompt when
+ "ping home" was checked.
+
+2009-11-15 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/search/start.php: Added a missing elgg_strlen() in
+ search_remove_ignored_words()
+
+ * CHANGES.txt: Updated changes file with search and user data storage info.
+
+
+2009-11-14 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/tags.php: fixes #1169 as described on ticket
+
+ * CHANGES.txt, engine/lib/api.php: updated documentation of API functions -
+ perhaps ready for developer preview
+
+2009-11-13 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * vendors/jquery/jquery-ui-1.7.2.min.js: Including jQuery UI 1.7.2 in core.
+ The custom build did not contain all the features we would like to have.
+ Leaving the custom build in place for community additions.
+
+ * engine/lib/annotations.php: Properly ordering annotation objects returned
+ by Elgg methods.
+
+ * search/index.php: Creating a redirect page for legacy themes using search.
+
+
+2009-11-13 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/tests/services/api.php: more test cases related to #1364.
+
+ * engine/lib/api.php, engine/tests/services/api.php: should fix #1364 and
+ added relevant unit test cases for this bug (yeah for unit tests)
+
+2009-11-12 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/api.php: fixed typo with handling web services request
+ parameters
+
+ * engine/lib/api.php: rest api parameters can now have default values
+
+2009-11-12 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php, views/default/entities/entity_listing.php,
+ views/default/entities/gallery_listing.php: Fixes: #1356. Reverted
+ search_listing to entity_listing for theme support.
+
+2009-11-12 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/api.php, languages/en.php: added a nonce to hmac signature and
+ header so same call in same second does not get caught by replay check
+
+2009-11-12 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/mb_wrapper.php: Accidentally removed the eval with my debug
+ statements.
+
+ * engine/lib/mb_wrapper.php: Wrapped all multibyte functions that are
+ directly interchangable with non mb functions with elgg_*().
+
+2009-11-12 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/plugins.php: fixes #1286 - ElggPlugin get() wasn't handling "0"
+ and returning null instead
+
+2009-11-12 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/upgrades/2009102801.php: Data migration: Disabled execution
+ time and clearing out caches to avoid OOM errors.
+
+2009-11-12 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/river2.php, engine/schema/mysql.sql,
+ engine/schema/upgrades/2009091901.sql: fixes #1329 - schema for river is
+ fixed - was incomplete before
+
+2009-11-11 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: fixes #1339 - elgg_view_exists now handles view
+ extensions for non-default viewtypes (for one level of recursion)
+
+ * engine/lib/elgglib.php: get_views deprecated for elgg_get_views (just to
+ be consistent with views api)
+
+2009-11-10 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/foaf/page_elements/title.php, views/json/page_elements/title.php,
+ views/rss/page_elements/title.php: these viewtypes need an empty title view
+ or html shows up because they fallback on default view
+
+2009-11-10 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/search/start.php: Removing explicit MySQL 5.1-specific 'IN NATURAL
+ LANGUAGE MODE' option.
+
+2009-11-10 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/upgrades/2009102801.php: Using php default functions instead of
+ ElggUser in upgrade script. Large Elgg sites could not handle the "select *
+ from users" query without hitting memory limit.
+
+2009-11-10 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/admin.php, engine/lib/elgglib.php, engine/lib/usersettings.php,
+ mod/logbrowser/start.php, mod/search/start.php: elgg_extend_view() replaces
+ extend_view()
+
+ * engine/lib/elgglib.php: updated documentation of functions used in
+ creating the topbar tools dropdown menu
+
+2009-11-10 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/search/start.php, mod/search/views/default/search/css.php: Sorting
+ search contexts by longest related substring. Added more pretty highlight
+ colors.
+
+ * mod/search/start.php: Fixed displaying of ...s in search.
+
+ * mod/search/index.php: I hate you search.
+
+ * mod/search/index.php: Missed an htmlspecialchars().
+
+ * mod/search/index.php, mod/search/start.php: Removed unneeded url_encode()s
+ for links.
+
+ * mod/search/start.php: Underscores. grr.
+
+ * mod/search/start.php: Adjusted default context length to 500. Added url
+ decoding to needle string.
+
+ * mod/search/search_hooks.php, mod/search/start.php: Trying out the new
+ context grabbing function in search.
+
+2009-11-10 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/handlers/service_handler.php, engine/lib/api.php, htaccess_dist:
+ introducing a new web services handler
+
+ * engine/lib/notification.php: do not register notification rest api calls
+ by default since no other apis exposed not directly related to the api
+
+ * views/json/api/output.php: leaner json objects for web services api calls
+
+2009-11-09 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/search/search_hooks.php: For real this time.
+
+ * mod/search/search_hooks.php: Sanitising string on tag search.
+
+ * mod/search/search_hooks.php, mod/search/start.php: Sanitising strings to
+ avoid sql insertion hacks.
+
+ * mod/search/index.php, mod/search/search_hooks.php, mod/search/start.php,
+ .../views/default/search/comments/listing.php,
+ mod/search/views/default/search/listing.php: Updated search to allow
+ filtering of results by clicking on submenu items. Fixes #1358: Using raw
+ mysql_query() / fetch() to get ft_min/max vars since they aren't set on some
+ versions of MySQL.
+
+ * engine/lib/entities.php: Ignoring empty owner_guids in elgg_get_entities.
+
+ * engine/lib/elgglib.php: Removed old code from get_submenu().
+
+ * CODING.txt: Added deprecation procedures to coding standards.
+
+2009-11-09 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * CHANGES.txt: updated changes.txt
+
+ * engine/lib/api.php: REST api hmac signature encoding now compatible with
+ Amazon S3 and OAuth
+
+2009-11-08 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/search/comments/listing.php: Fixed the wrapper for
+ comment listing.
+
+ * mod/search/start.php: Uncommenting out the bulk of the search functions.
+
+ * mod/search/search_hooks.php, mod/search/start.php,
+ .../views/default/search/comments/listing.php,
+ mod/search/views/default/search/listing.php,
+ mod/search/views/default/search/tags/listing.php: Added super-basic support
+ for searching comments.
+
+2009-11-07 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/api.php, engine/lib/pam.php, engine/tests/services/api.php,
+ services/api/rest.php: combined the two different pams into one and fixed an
+ issue with hmac authentication
+
+2009-11-07 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/search/search_hooks.php: Reverted groups and users to LIKE instead of
+ MATCH AGAINST.
+
+ * engine/lib/group.php, engine/lib/objects.php, engine/lib/tags.php,
+ engine/lib/users.php, mod/search/index.php, mod/search/search_hooks.php,
+ mod/search/start.php, .../views/default/page_elements/searchbox.php,
+ mod/search/views/default/search/listing.php: Moved default search hooks into
+ search mod. Using MySQL's MATCH ... AGAINST instead of likes for most
+ searches. Changed 'tag' to 'q' while maintaining backward compatibility.
+
+2009-11-07 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: fixed bug in list_entities() wrapper function -
+ it was ignoring false values - there are probably similar problems in the
+ other new wrapper functions
+
+ * _graphics/icons/default/topbar.png: fixes #1324 - default topbar icon now
+ exists
+
+ * engine/lib/metastrings.php: fixes #1227 - this one has been causing nasty
+ problems for far too long
+
+2009-11-06 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/schema/mysql.sql: removed space which would break the schema
+ parsing routine for the next poor sucker who tried to add a table - not the
+ most robust code
+
+ * services/api/rest.php: strike previous - we need the password auth to get
+ the user token - will just need to document that pam_auth_pass does not work
+ with REST because the user credentials are not set
+
+ * engine/lib/pam.php, services/api/rest.php: removing username/password
+ authorization for REST by default - developers can add their own custom PAM
+ using the plugin hook if they require this
+
+2009-11-06 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/group.php: Removed old group search hook.
+
+ * engine/lib/users.php: Removed old user search.
+
+ * engine/lib/group.php, engine/lib/tags.php, engine/lib/users.php: Added
+ search for group, tags, and users.
+
+ * engine/lib/entities.php: Added ability to pass 0 as a subtype meaning
+ "entities without a subtype".
+
+ * engine/lib/objects.php: Added default object search.
+
+ * engine/lib/metadata.php: Corrected documentation for
+ elgg_get_entities_from_metadata()
+
+ * actions/systemsettings/install.php: Enable search mod upon installation.
+
+ * mod/search/index.php, mod/search/start.php,
+ mod/search/views/default/search/css.php,
+ mod/search/views/default/search/listing.php,
+ mod/search/views/default/search/startblurb.php,
+ mod/search/views/default/search/tags/listing.php: Updated search for FTS.
+
+2009-11-04 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * CHANGES.txt, engine/lib/sessions.php: users now allowed to have multiple
+ sessions but not multiple remember me cookies (yet)
+
+2009-11-03 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/htmlawed/start.php: Updated htmlawed to allow the default TinyMCE
+ styles.
+
+2009-11-03 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/opendd.php, engine/lib/plugins.php, engine/lib/xml-rpc.php,
+ engine/lib/xml.php: standardized xml.php and fixed output of booleans in xml
+ view
+
+2009-11-02 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * CHANGES.txt: Updated changes for deprecated functions.
+
+ * engine/lib/annotations.php, engine/lib/entities.php,
+ engine/lib/metadata.php: Deprecated elgg_get_entities_from_annotations().
+
+ * engine/lib/access.php: Changed elgg_get_entities_from_access_id() to be
+ closer to how other functions work.
+
+ * mod/htmlawed/start.php: Updated htmlawed to disallow many style
+ attributes.
+
+2009-11-02 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/xml/pageshells/pageshell.php: setting xml version and encoding in
+ xml pageshell
+
+2009-10-30 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * CHANGES.txt, engine/lib/access.php, engine/tests/objects/users.php:
+ Deprecating get_entities_from_access_id().
+
+2009-10-30 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * index.php: No longer using fullview for listing registered entities on
+ front page.
+
+2009-10-30 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/plugins.php: Removing deprecated function call from
+ find_plugin_settings().
+
+2009-10-30 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/metadata.php, engine/tests/objects/metadata.php: Namespaced
+ metadata keys for elgg_get_entities_from_metadata() so no clashes will happen
+ with annotations.
+
+2009-10-30 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * CHANGES.txt: Updating 1.7 CHANGES file.
+
+2009-10-30 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * CHANGES.txt: Updated changes for the relationship functions.
+
+2009-10-30 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Cleaning up logic regarding view error notices.
+
+2009-10-29 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/metadata.php, engine/lib/relationships.php: Deprecated
+ get_entities_from_relationships_and_meta().
+
+2009-10-29 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/filestore.php, engine/tests/objects/filestore.php: Fully
+ deprecating file matrix use with username. Plugins building the file matrix
+ with the username will still work, but a warning is logged.
+
+ * engine/tests/objects/metadata.php: Updating unit test to reflect
+ deprecated functions.
+
+2009-10-29 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/relationships.php: Fixed incorrect wrapper for
+ get_entities_from_relationship() -> elgg_get_entities_from_relationship().
+
+2009-10-28 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/relationships.php: Deprecated get_entities_from_relationship()
+
+ * engine/lib/metadata.php: Actually fixed the documentation for
+ elgg_get_entities_from_metadata().
+
+ * engine/lib/metadata.php: Cleaned up table prefix for
+ elgg_get_entity_metadata_where_sql(). Cleaned up some documentation.
+
+ * engine/lib/metadata.php: Updated documentation for
+ elgg_get_entity_metadata_where_sql()
+
+ * engine/schema/upgrades/2009100701.sql: Got rid of the silly conditional
+ comments in the db upgrade now that I know what they are.
+
+ * engine/schema/upgrades/2009100701.sql: Added table locking and disabling
+ keys for the UTF8 database upgrade.
+
+2009-10-28 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/upgrades/2009102801.php, version.php: Creating an upgrade
+ script for new user filepath.
+
+2009-10-28 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, engine/lib/metadata.php: Deprecated
+ get_entities_from_metadata() and get_entities_from_metadata_multi().
+
+2009-10-27 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/tests/objects/filestore.php: Removing local debug info from
+ filestore unit test.
+
+ * engine/lib/filestore.php, engine/tests/elgg_unit_test.php,
+ engine/tests/objects/filestore.php, engine/tests/objects/users.php: Modifying
+ user file locations to be based on guid. Previous implementations utilized
+ the owner's username to determine a file path matrix based on (up to) the
+ first five letters. To eliminate language and filesystem inconsistencies, the
+ matrix is now created from the entity's creation date and guid. This has the
+ added benefit of (potentially) allowing users to update their usernames.
+
+2009-10-27 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * CHANGES.txt: Updated changes for bug #1161 and deprecated
+ get_entities_from_metadata()
+
+ * engine/tests/objects/metadata.php: Fixed caching issue that caused
+ metadata test for get_entities_from_metadata() to fail.
+
+ * engine/lib/entities.php: Removed some commented out code.
+
+ * engine/lib/metadata.php: Fixed get_entities_from_metadata() wrapper when
+ passing case_sensitive = FALSE.
+
+ * engine/lib/elgglib.php: Fixes #1161: Views now default to 'default' if not
+ found.
+
+ * engine/lib/elgglib.php, engine/lib/entities.php, engine/lib/metadata.php:
+ Created elgg_get_entities_from_metadata() and made
+ get_entities_from_metadata(). Made elgg_get_entities() accept extra joins and
+ wheres in the options. Created a helper function
+ elgg_normalise_plural_options_array() to rewrite shortcut singular options to
+ plurals.
+
+2009-10-26 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/metastrings.php: Rewriting metastrings search query for
+ simplicity.
+
+2009-10-26 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * CHANGES.txt: Updated changes to show deprecated get_entities().
+
+2009-10-25 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/api.php, engine/tests/services/api.php, languages/en.php:
+ cleaned up the web services unit tests
+
+2009-10-25 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Corrected bug when passing container_guids or
+ owner_guids of 0. Changed the name of the $prefix to $table in sql helper
+ functions. Improved documentation.
+
+2009-10-24 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Created elgg_get_entities() and rewrote
+ get_entities() to pass to the new function. First go at removing
+ get_entities() calls in native functions.
+
+ * engine/lib/elgglib.php: Cleaned up some code in elgg_view().
+
+ * engine/lib/access.php: Slight code cleanup.
+
+2009-10-23 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php, engine/tests/objects/users.php: Creating a unit test
+ for ElggUser
+
+2009-10-23 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/entities/entity_list.php,
+ views/default/entities/entity_listing.php: Standardized entity listing views.
+
+
+ * CODING.txt: Updated standards for method names.
+
+2009-10-22 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/input.php: Refs #1330: Contributed autop() to Wordpress.
+
+ * engine/lib/elgglib.php, engine/lib/entities.php, engine/lib/search.php,
+ mod/search/index.php, mod/search/languages/en.php, mod/search/manifest.xml,
+ mod/search/start.php, .../views/default/page_elements/searchbox.php,
+ mod/search/views/default/search/css.php,
+ mod/search/views/default/search/entity_list.php,
+ mod/search/views/default/search/gallery.php,
+ .../views/default/search/gallery_listing.php,
+ mod/search/views/default/search/listing.php,
+ mod/search/views/default/search/startblurb.php, search/groups.php,
+ search/index.php, search/users.php, views/default/css.php,
+ views/default/entities/entity_list.php,
+ views/default/entities/entity_listing.php,
+ views/default/entities/gallery.php,
+ views/default/entities/gallery_listing.php,
+ views/default/page_elements/elgg_topbar.php,
+ views/default/search/entity_list.php, views/default/search/gallery.php,
+ views/default/search/gallery_listing.php, views/default/search/listing.php,
+ views/default/search/startblurb.php: Pulling in MITRE's search core.
+ Fo'rizzle this time. Yo.
+
+2009-10-22 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * CHANGES.txt: Updating core changes file
+
+ * mod/diagnostics/index.php, mod/diagnostics/languages/en.php: Adding unit
+ testing to the GUI. Unit tests can be run from the core Diagnostics mod.
+
+2009-10-22 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/api.php, engine/tests/services/api.php, languages/en.php: more
+ unit tests for REST api
+
+2009-10-21 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/metadata.php, engine/lib/metastrings.php,
+ engine/tests/objects/metadata.php: Allowing entities to be retrieved by
+ case-insensitive search. Adding a new unit test for ElggMetadata.
+
+ * engine/lib/elgglib.php, engine/tests/suite.php: Reducing the output level
+ of log messages set to "DEBUG". Debug level messages will be logged at the
+ same level as warnings. Additionally, users will be notified when attempting
+ to run the test suite without first placing the site in debug mode.
+
+2009-10-20 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/api.php, engine/tests/services/api.php, languages/en.php: more
+ unit tests for REST api
+
+ * CHANGES.txt: updated CHANGES.txt with services API changes
+
+2009-10-19 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/database.php: Replacing a direct call to error_log() with new
+ elgg_log().
+
+ * CHANGES.txt, actions/admin/site/update_basic.php,
+ actions/systemsettings/install.php, engine/lib/elgglib.php, languages/en.php,
+ views/default/settings/system.php, views/failsafe/settings/system.php: Adding
+ debug options to admin site settings. Debugging errors and warnings to
+ screen. If notice level is enabled, output is sent to system log file.
+
+2009-10-19 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/api.php, engine/tests/services/api.php, languages/en.php,
+ services/api/rest.php: first version of new REST api
+
+2009-10-17 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/pam.php: updated documentation on PAMs as I will be fixing some
+ API PAM issues
+
+2009-10-16 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/api.php, engine/lib/database.php, engine/lib/elgglib.php,
+ engine/lib/entities.php, engine/lib/group.php, engine/lib/languages.php,
+ engine/lib/memcache.php, engine/lib/metastrings.php,
+ engine/lib/notification.php, engine/lib/objects.php, engine/lib/sites.php,
+ engine/lib/users.php, engine/start.php, engine/tests/suite.php,
+ views/default/messages/exceptions/exception.php,
+ views/failsafe/messages/exceptions/exception.php,
+ views/opendd/messages/exceptions/exception.php,
+ views/xml/messages/exceptions/exception.php: Rewriting core debug messages to
+ be more informative. Introducing the concept of levels for Elgg debugging:
+ notices, warnings and errors are displayed when the appropriate debugging
+ level is enabled. An additional level of "debug" exists to differentiate from
+ errors.
+
+2009-10-16 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/foaf/canvas/default.php,
+ views/foaf/page_elements/contentwrapper.php,
+ views/foaf/pageshells/pageshell.php, views/foaf/search/entity_list.php,
+ views/foaf/user/default.php, views/ical/canvas/default.php,
+ views/ical/export/entity.php, views/ical/object/default.php,
+ views/ical/pageshells/pageshell.php, views/ical/search/entity_list.php,
+ views/js/object/default.php, views/js/pageshells/pageshell.php,
+ views/js/user/default.php, views/json/api/output.php,
+ views/json/canvas/default.php, views/json/export/entity.php,
+ views/json/export/metadata.php, views/json/export/relationship.php,
+ views/json/group/default.php, views/json/messages/exceptions/exception.php,
+ views/json/object/default.php, views/json/page_elements/contentwrapper.php,
+ views/json/pageshells/pageshell.php, views/json/river/item/list.php,
+ views/json/search/entity_list.php, views/json/site/default.php,
+ views/json/user/default.php, views/opendd/canvas/default.php,
+ views/opendd/export/entity.php, views/opendd/export/metadata.php,
+ views/opendd/export/relationship.php, views/opendd/group/default.php,
+ views/opendd/messages/exceptions/exception.php,
+ views/opendd/object/default.php, views/opendd/pageshells/pageshell.php,
+ views/opendd/search/entity_list.php, views/opendd/site/default.php,
+ views/opendd/user/default.php, views/php/api/output.php,
+ views/php/canvas/default.php, views/php/export/entity.php,
+ views/php/export/metadata.php, views/php/export/relationship.php,
+ views/php/group/default.php, views/php/messages/exceptions/exception.php,
+ views/php/object/default.php, views/php/pageshells/pageshell.php,
+ views/php/search/entity_list.php, views/php/site/default.php,
+ views/php/user/default.php, views/rss/annotation/default.php,
+ views/rss/canvas/default.php, views/rss/group/default.php,
+ views/rss/object/default.php, views/rss/page_elements/contentwrapper.php,
+ views/rss/pageshells/pageshell.php, views/rss/river/item/list.php,
+ views/rss/search/entity_list.php, views/rss/user/default.php,
+ views/xml/api/output.php, views/xml/messages/exceptions/exception.php,
+ views/xml/pageshells/pageshell.php, views/xml/xml-rpc/output.php: Finished
+ standardizing seconday views.
+
+ * views/failsafe/canvas/default.php, views/failsafe/input/access.php,
+ views/failsafe/input/button.php, views/failsafe/input/checkboxes.php,
+ views/failsafe/input/form.php, views/failsafe/input/hidden.php,
+ views/failsafe/input/longtext.php, views/failsafe/input/pulldown.php,
+ views/failsafe/input/reset.php, views/failsafe/input/submit.php,
+ views/failsafe/input/text.php, views/failsafe/messages/errors/error.php,
+ views/failsafe/messages/errors/list.php,
+ views/failsafe/messages/exceptions/exception.php,
+ views/failsafe/messages/list.php, views/failsafe/messages/messages/list.php,
+ views/failsafe/messages/messages/message.php,
+ views/failsafe/messages/sanitisation/htaccess.php,
+ views/failsafe/messages/sanitisation/settings.php,
+ views/failsafe/pageshells/pageshell.php, views/failsafe/settings/install.php,
+ views/failsafe/settings/system.php: Standardized views/failsafe/*
+
+ * views/default/css.php, views/default/settings/install.php,
+ views/default/settings/system.php, views/default/settings/upgrading.php,
+ views/default/site/default.php, views/default/spotlight/default.php,
+ views/default/text/about.php, views/default/text/privacy_view.php,
+ views/default/text/tos_view.php,
+ views/default/upload/upload_form_content.php, views/default/user/default.php,
+ views/default/user/search/finishblurb.php,
+ views/default/user/search/startblurb.php,
+ views/default/user/settings/default_access.php,
+ views/default/user/settings/email.php,
+ views/default/user/settings/language.php,
+ views/default/user/settings/name.php,
+ views/default/user/settings/password.php,
+ views/default/usersettings/form.php, views/default/usersettings/main.php,
+ views/default/usersettings/main_opt/plugins.php,
+ views/default/usersettings/main_opt/statistics.php,
+ views/default/usersettings/main_opt/user.php,
+ views/default/usersettings/plugins.php,
+ views/default/usersettings/plugins_opt/plugin.php,
+ views/default/usersettings/statistics.php,
+ .../usersettings/statistics_opt/numentities.php,
+ .../default/usersettings/statistics_opt/online.php,
+ views/default/usersettings/user.php, views/default/welcome.php,
+ views/default/welcome/logged_in.php, views/default/welcome/logged_out.php,
+ views/default/widgets/editwrapper.php, views/default/widgets/wrapper.php:
+ Finish up standardizing views/default/*
+
+ * views/default/page_elements/contentwrapper.php,
+ views/default/page_elements/elgg_topbar.php,
+ views/default/page_elements/footer.php,
+ views/default/page_elements/header.php,
+ views/default/page_elements/header_contents.php,
+ views/default/page_elements/owner_block.php,
+ views/default/page_elements/spotlight.php,
+ views/default/page_elements/title.php,
+ views/default/pageshells/pageshell.php, views/default/river/dashboard.php,
+ views/default/river/item/list.php, views/default/river/item/noaccess.php,
+ views/default/river/item/wrapper.php,
+ views/default/river/relationship/friend/create.php,
+ views/default/river/wrapper.php, views/default/search/entity_list.php,
+ views/default/search/gallery.php, views/default/search/gallery_listing.php,
+ views/default/search/listing.php, views/default/search/startblurb.php: More
+ views cleanup.
+
+ * views/default/friends/tablelist.php,
+ views/default/friends/tablelistcountupdate.php,
+ views/default/graphics/icon.php, views/default/group/default.php,
+ views/default/group/search/finishblurb.php,
+ views/default/group/search/startblurb.php, views/default/input/access.php,
+ views/default/input/autocomplete.php, views/default/input/button.php,
+ views/default/input/calendar.php, views/default/input/captcha.php,
+ views/default/input/checkboxes.php, views/default/input/email.php,
+ views/default/input/file.php, views/default/input/form.php,
+ views/default/input/hidden.php, views/default/input/longtext.php,
+ views/default/input/password.php, views/default/input/plaintext.php,
+ views/default/input/pulldown.php, views/default/input/radio.php,
+ views/default/input/reset.php, views/default/input/securitytoken.php,
+ views/default/input/submit.php, views/default/input/tags.php,
+ views/default/input/text.php, views/default/input/url.php,
+ views/default/input/urlshortener.php, views/default/input/userpicker.php,
+ views/default/js/initialise_elgg.php,
+ views/default/messages/errors/error.php,
+ views/default/messages/errors/list.php,
+ views/default/messages/exceptions/exception.php,
+ views/default/messages/list.php, views/default/messages/messages/list.php,
+ views/default/messages/messages/message.php,
+ views/default/navigation/pagination.php,
+ views/default/navigation/topbar_tools.php,
+ views/default/navigation/viewtype.php,
+ .../notifications/settings/usersettings.php,
+ views/default/object/default.php, views/default/object/object.php,
+ views/default/object/plugin.php, views/default/object/widget.php,
+ views/default/output/calendar.php, views/default/output/checkboxes.php,
+ views/default/output/confirmlink.php, views/default/output/date.php,
+ views/default/output/email.php, views/default/output/iframe.php,
+ views/default/output/longtext.php, views/default/output/pulldown.php,
+ views/default/output/radio.php, views/default/output/tagcloud.php,
+ views/default/output/tags.php, views/default/output/text.php,
+ views/default/output/url.php: Standardizing views.`
+
+ * views/default/account/forms/forgotten_password.php,
+ views/default/account/forms/login.php,
+ views/default/account/forms/register.php,
+ views/default/account/forms/useradd.php, views/default/admin/main.php,
+ views/default/admin/main_opt/plugins.php,
+ views/default/admin/main_opt/site.php,
+ views/default/admin/main_opt/statistics.php,
+ views/default/admin/main_opt/user.php, views/default/admin/plugins.php,
+ views/default/admin/plugins_opt/plugin.php, views/default/admin/site.php,
+ views/default/admin/statistics.php,
+ views/default/admin/statistics_opt/basic.php,
+ views/default/admin/statistics_opt/numentities.php,
+ views/default/admin/statistics_opt/online.php, views/default/admin/user.php,
+ views/default/admin/user_opt/adduser.php,
+ views/default/admin/user_opt/search.php, views/default/ajax/loader.php,
+ views/default/annotation/annotate.php,
+ views/default/annotation/generic_comment.php, views/default/api/output.php,
+ views/default/basic_elements/welcome.php, views/default/canvas/default.php,
+ views/default/canvas/layouts/edit_layout.php,
+ views/default/canvas/layouts/one_column.php,
+ views/default/canvas/layouts/sidebar_boxes.php,
+ .../canvas/layouts/two_column_left_sidebar.php,
+ .../canvas/layouts/two_column_right_sidebar.php,
+ views/default/canvas/layouts/widgets.php,
+ views/default/canvas_header/submenu_group.php,
+ views/default/canvas_header/submenu_template.php,
+ views/default/comments/forms/edit.php, views/default/dashboard/blurb.php,
+ views/default/export/entity.php, views/default/export/metadata.php,
+ views/default/export/relationship.php, views/default/friends/collection.php,
+ views/default/friends/collections.php,
+ views/default/friends/collectiontabs.php,
+ views/default/friends/forms/collectionfields.php,
+ views/default/friends/forms/edit.php, views/default/friends/list.php,
+ views/default/friends/picker.php, views/default/friends/river/create.php:
+ Standardized more files.
+
+ * engine/tests/objects/objects.php, engine/tests/suite.php,
+ friends/index.php, friends/of.php, friends/pickercallback.php, index.php,
+ install.php, languages/en.php, search/groups.php, search/index.php,
+ search/users.php, services/api/rest.php, services/export/handler.php,
+ settings/index.php, settings/plugins.php, settings/statistics.php,
+ settings/user.php, simplecache/view.php, upgrade.php, version.php:
+ Standardized files
+
+2009-10-15 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/access.php, engine/lib/admin.php: Merged admin access override
+ hook with ignore access system override hook. get_sql_access_prefix() now
+ correctly uses elgg_check_access_overrides() instead of
+ elgg_get_ignore_access().
+
+ * friends/add.php, friends/collections.php, friends/edit.php: Standardized
+ files.
+
+ * entities/index.php, entities/list.php: Standardized files.
+
+ * engine/lib/widgets.php, engine/settings.example.php, engine/start.php:
+ Standardized files.
+
+ * engine/lib/calendar.php, engine/lib/configuration.php,
+ engine/lib/cron.php, engine/lib/exceptions.php, engine/lib/export.php,
+ engine/lib/extender.php, engine/lib/filestore.php, engine/lib/group.php,
+ engine/lib/input.php, engine/lib/install.php, engine/lib/languages.php,
+ engine/lib/location.php, engine/lib/mb_wrapper.php, engine/lib/memcache.php,
+ engine/lib/metadata.php, engine/lib/metastrings.php,
+ engine/lib/notification.php, engine/lib/objects.php, engine/lib/opendd.php,
+ engine/lib/pagehandler.php, engine/lib/pageowner.php, engine/lib/pam.php,
+ engine/lib/ping.php, engine/lib/plugins.php, engine/lib/query.php,
+ engine/lib/relationships.php, engine/lib/river2.php, engine/lib/search.php,
+ engine/lib/sites.php, engine/lib/social.php, engine/lib/statistics.php,
+ engine/lib/system_log.php, engine/lib/tags.php, engine/lib/users.php,
+ engine/lib/usersettings.php, engine/lib/version.php, engine/lib/widgets.php:
+ Standardized gobs of files.
+
+2009-10-14 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/cache.php: Standardized engine/lib/cache.php
+
+ * engine/lib/api.php: Standardized engine/lib/api.php
+
+ * engine/handlers/action_handler.php, engine/handlers/cron_handler.php,
+ engine/handlers/pagehandler.php, engine/handlers/xml-rpc_handler.php:
+ Standardized engine/handlers/*
+
+ * dashboard/index.php, dashboard/latest.php: Standardized dashboard/*
+
+ * admin/index.php, admin/plugins.php, admin/site.php, admin/statistics.php,
+ admin/user.php: Standardized admin/*
+
+ * actions/email/save.php, actions/entities/delete.php,
+ actions/friends/add.php, actions/friends/addcollection.php,
+ actions/friends/deletecollection.php, actions/friends/editcollection.php,
+ actions/friends/remove.php, actions/import/opendd.php, actions/login.php,
+ actions/logout.php, .../notifications/settings/usersettings/save.php,
+ actions/plugins/settings/save.php, actions/plugins/usersettings/save.php,
+ actions/register.php, actions/systemsettings/install.php,
+ actions/user/default_access.php, actions/user/language.php,
+ actions/user/name.php, actions/user/password.php,
+ actions/user/passwordreset.php, actions/user/requestnewpassword.php,
+ actions/user/spotlight.php, actions/useradd.php,
+ actions/usersettings/save.php, actions/widgets/add.php,
+ actions/widgets/reorder.php, actions/widgets/save.php: Standardized actions/*
+
+
+ * actions/comments/add.php, actions/comments/delete.php: Standardized.
+
+ * actions/admin/plugins/disable.php, actions/admin/plugins/disableall.php,
+ actions/admin/plugins/enable.php, actions/admin/plugins/enableall.php,
+ actions/admin/plugins/reorder.php, actions/admin/site/update_basic.php,
+ actions/admin/user/ban.php, actions/admin/user/delete.php,
+ actions/admin/user/makeadmin.php, actions/admin/user/removeadmin.php,
+ actions/admin/user/resetpassword.php, actions/admin/user/unban.php:
+ Standardized actions/admin/*
+
+ * account/forgotten_password.php, account/register.php: Standardized
+ account/*
+
+ * _css/css.php, _css/js.php: Standardized _css/*
+
+ * CHANGES.txt: Updated changes file for $is_admin deprecation.
+
+2009-10-13 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/tests/objects/entities.php, engine/tests/objects/objects.php,
+ engine/tests/test_skeleton.php: Swallowing all Elgg notices within unit
+ tests. By default, SimpleTest converts PHP errors into exceptions. This is
+ restricted by adding a call to swallowErrors() within the tearDown() methods.
+ This has also been noted within the unit test skeleton.
+
+ * engine/lib/sites.php, engine/tests/objects/sites.php: Creating a generic
+ ElggSite unit test.
+
+2009-10-13 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/access.php, engine/lib/admin.php, engine/lib/entities.php,
+ engine/lib/users.php: Standardized users and entities. Fleshed out
+ elgg_set_ignore_access() and elgg_get_ignore_access()
+
+ * engine/lib/elgglib.php: Standardize elgglib.php
+
+ * engine/tests/suite.php: Test suite now requires admin for web-based tests.
+ Uses access overrides for cli-based tests.
+
+ * engine/lib/entities.php: Standardized entities.php.
+
+ * engine/lib/access.php: Fix typo in ElggAccess:get_ignore_access().
+
+ * engine/lib/access.php, engine/lib/admin.php, engine/lib/sessions.php:
+ First pass at removing $is_admin global.
+
+2009-10-12 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/tests/objects/entities.php, engine/tests/objects/objects.php,
+ engine/tests/suite.php: Adding unit tests for the ElggObject class.
+ Restricting testing suite to only be run as a logged-in user. This will not
+ allow the tests to be run from the command line, but this is already the case
+ due to debug static.
+
+2009-10-11 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * CHANGES.txt, CODING.txt: Added coding styles and changes documents.
+
+2009-10-09 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php: Standardized annotations.php.
+
+ * engine/lib/admin.php: Standardized admin.php
+
+ * engine/lib/activity.php: Standardized activity.
+
+ * engine/lib/actions.php: Standardized actions.php
+
+ * engine/lib/elgglib.php, engine/lib/entities.php, engine/lib/search.php,
+ engine/schema/upgrades/2009093001.sql, mod/search/index.php,
+ mod/search/languages/en.php, mod/search/manifest.xml, mod/search/start.php,
+ .../views/default/page_elements/searchbox.php,
+ mod/search/views/default/search/css.php,
+ mod/search/views/default/search/entity_list.php,
+ mod/search/views/default/search/gallery.php,
+ mod/search/views/default/search/listing.php,
+ views/default/page_elements/elgg_topbar.php,
+ views/default/search/entity_list.php, views/default/search/gallery.php,
+ views/default/search/gallery_listing.php, views/default/search/listing.php,
+ views/default/search/startblurb.php: Reverted back to previous copy removing
+ Justin's search because of views problems in plugins.
+
+ * engine/lib/elgglib.php, engine/lib/entities.php, engine/lib/search.php,
+ engine/schema/upgrades/2009093001.sql, mod/search/index.php,
+ mod/search/languages/en.php, mod/search/manifest.xml, mod/search/start.php,
+ .../views/default/page_elements/searchbox.php,
+ mod/search/views/default/search/css.php,
+ mod/search/views/default/search/entity_list.php,
+ mod/search/views/default/search/gallery.php,
+ mod/search/views/default/search/listing.php,
+ views/default/page_elements/elgg_topbar.php,
+ views/default/search/entity_list.php, views/default/search/gallery.php,
+ views/default/search/gallery_listing.php, views/default/search/listing.php,
+ views/default/search/startblurb.php: Pulled in Justin's search changes from
+ github.
+
+2009-10-09 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, engine/lib/objects.php,
+ engine/tests/objects/entities.php, engine/tests/objects/objects.php,
+ engine/tests/test_skeleton.php: Creating an ElggObject unit test. Fixing
+ issues with the unit test plugin hooks, as well as infinite looping bugs
+ introduced by the unit test skeleton.
+
+2009-10-08 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/tests/objects/entities.php: Adding unit test for ElggEntity
+ annotations.
+
+2009-10-08 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/access.php, engine/lib/sessions.php: Brought access.php and
+ sesssion.php up to code standards.
+
+2009-10-08 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, engine/tests/core/entities.php,
+ engine/tests/objects/entities.php: Adding generic unit tests for ElggEntity.
+
+2009-10-07 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/database.php: database.php now more closely matches coding
+ standards.
+
+ * engine/lib/database.php, engine/schema/upgrades/2009100701.sql: Fixes
+ #1181: UTF8 now correctly stored in database.
+
+ * engine/lib/entities.php, engine/lib/notification.php,
+ engine/lib/users.php, engine/lib/version.php: Fixes #790: Removing unneeded
+ @s.
+
+2009-10-06 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, engine/tests/core/entities.php,
+ engine/tests/elgg_unit_test.php, engine/tests/test_skeleton.php: Adding unit
+ test methods to the new Entities test.
+
+2009-10-06 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/diagnostics/start.php: Removed elgg_test entries.
+
+2009-10-06 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php: Fixing a spacing issue with constructed SQL
+ query. Closes #1295.
+
+2009-10-05 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/testing.php: Removing old testing.php lib.
+
+2009-10-03 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/tests/core/entities.php, engine/tests/entities.php,
+ engine/tests/suite.php, engine/tests/test_skeleton.php: Moved core tests into
+ tests/core. Fixed typo in skeleton and entities tests. Only run tests in
+ debug mode.
+
+2009-10-02 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/tests/entities.php, engine/tests/test_skeleton.php: Added more info
+ to the test. Added a test skeleton.
+
+ * engine/lib/entities.php: Added unit tests for entities.
+
+ * engine/tests/entities.php, engine/tests/suite.php: Added unit tests.
+
+ * engine/tests/elgg_unit_test.php, engine/tests/suite.php,
+ vendors/simpletest/HELP_MY_TESTS_DONT_WORK_ANYMORE,
+ vendors/simpletest/LICENSE, vendors/simpletest/README,
+ vendors/simpletest/VERSION, vendors/simpletest/authentication.php,
+ vendors/simpletest/autorun.php, vendors/simpletest/browser.php,
+ vendors/simpletest/collector.php, vendors/simpletest/compatibility.php,
+ vendors/simpletest/cookies.php, vendors/simpletest/default_reporter.php,
+ vendors/simpletest/detached.php,
+ .../docs/en/authentication_documentation.html,
+ .../simpletest/docs/en/browser_documentation.html,
+ vendors/simpletest/docs/en/docs.css,
+ .../docs/en/expectation_documentation.html,
+ .../docs/en/form_testing_documentation.html,
+ .../docs/en/group_test_documentation.html,
+ vendors/simpletest/docs/en/index.html,
+ .../docs/en/mock_objects_documentation.html,
+ vendors/simpletest/docs/en/overview.html,
+ .../docs/en/partial_mocks_documentation.html,
+ .../simpletest/docs/en/reporter_documentation.html,
+ .../docs/en/unit_test_documentation.html,
+ .../docs/en/web_tester_documentation.html,
+ .../docs/fr/authentication_documentation.html,
+ .../simpletest/docs/fr/browser_documentation.html,
+ vendors/simpletest/docs/fr/docs.css,
+ .../docs/fr/expectation_documentation.html,
+ .../docs/fr/form_testing_documentation.html,
+ .../docs/fr/group_test_documentation.html,
+ vendors/simpletest/docs/fr/index.html,
+ .../docs/fr/mock_objects_documentation.html,
+ vendors/simpletest/docs/fr/overview.html,
+ .../docs/fr/partial_mocks_documentation.html,
+ .../simpletest/docs/fr/reporter_documentation.html,
+ .../docs/fr/unit_test_documentation.html,
+ .../docs/fr/web_tester_documentation.html, vendors/simpletest/dumper.php,
+ vendors/simpletest/eclipse.php, vendors/simpletest/encoding.php,
+ vendors/simpletest/errors.php, vendors/simpletest/exceptions.php,
+ vendors/simpletest/expectation.php,
+ vendors/simpletest/extensions/pear_test_case.php,
+ .../simpletest/extensions/phpunit_test_case.php,
+ vendors/simpletest/extensions/testdox.php,
+ vendors/simpletest/extensions/testdox/test.php, vendors/simpletest/form.php,
+ vendors/simpletest/frames.php, vendors/simpletest/http.php,
+ vendors/simpletest/invoker.php, vendors/simpletest/mock_objects.php,
+ vendors/simpletest/page.php, vendors/simpletest/parser.php,
+ vendors/simpletest/reflection_php4.php,
+ vendors/simpletest/reflection_php5.php, vendors/simpletest/remote.php,
+ vendors/simpletest/reporter.php, vendors/simpletest/scorer.php,
+ vendors/simpletest/selector.php, vendors/simpletest/shell_tester.php,
+ vendors/simpletest/simpletest.php, vendors/simpletest/socket.php,
+ vendors/simpletest/tag.php, vendors/simpletest/test/acceptance_test.php,
+ vendors/simpletest/test/adapter_test.php,
+ vendors/simpletest/test/all_tests.php,
+ vendors/simpletest/test/authentication_test.php,
+ vendors/simpletest/test/autorun_test.php,
+ vendors/simpletest/test/bad_test_suite.php,
+ vendors/simpletest/test/browser_test.php,
+ vendors/simpletest/test/collector_test.php,
+ vendors/simpletest/test/command_line_test.php,
+ vendors/simpletest/test/compatibility_test.php,
+ vendors/simpletest/test/cookies_test.php,
+ vendors/simpletest/test/detached_test.php,
+ vendors/simpletest/test/dumper_test.php,
+ vendors/simpletest/test/eclipse_test.php,
+ vendors/simpletest/test/encoding_test.php,
+ vendors/simpletest/test/errors_test.php,
+ vendors/simpletest/test/exceptions_test.php,
+ vendors/simpletest/test/expectation_test.php,
+ vendors/simpletest/test/form_test.php,
+ vendors/simpletest/test/frames_test.php,
+ vendors/simpletest/test/http_test.php,
+ vendors/simpletest/test/interfaces_test.php,
+ vendors/simpletest/test/live_test.php,
+ vendors/simpletest/test/mock_objects_test.php,
+ vendors/simpletest/test/page_test.php,
+ vendors/simpletest/test/parse_error_test.php,
+ vendors/simpletest/test/parser_test.php,
+ vendors/simpletest/test/reflection_php4_test.php,
+ vendors/simpletest/test/reflection_php5_test.php,
+ vendors/simpletest/test/remote_test.php,
+ vendors/simpletest/test/shell_test.php,
+ vendors/simpletest/test/shell_tester_test.php,
+ vendors/simpletest/test/simpletest_test.php,
+ vendors/simpletest/test/socket_test.php,
+ .../simpletest/test/support/empty_test_file.php,
+ vendors/simpletest/test/support/latin1_sample,
+ vendors/simpletest/test/support/spl_examples.php,
+ .../test/support/supplementary_upload_sample.txt,
+ vendors/simpletest/test/support/test1.php,
+ vendors/simpletest/test/support/upload_sample.txt,
+ vendors/simpletest/test/tag_test.php,
+ vendors/simpletest/test/test_with_parse_error.php,
+ vendors/simpletest/test/unit_tester_test.php,
+ vendors/simpletest/test/unit_tests.php, vendors/simpletest/test/url_test.php,
+ vendors/simpletest/test/user_agent_test.php,
+ vendors/simpletest/test/visual_test.php,
+ vendors/simpletest/test/web_tester_test.php,
+ vendors/simpletest/test/xml_test.php, vendors/simpletest/test_case.php,
+ vendors/simpletest/unit_tester.php, vendors/simpletest/url.php,
+ vendors/simpletest/user_agent.php, vendors/simpletest/web_tester.php,
+ vendors/simpletest/xml.php: Added simpletest and start of unit tests.
+
+2009-09-30 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/account/forms/login.php: Added autofocusing of the username
+ field on the login page.
+
+2009-09-30 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: new activity river - clipped overflow for long
+ urls/strings
+
+2009-09-23 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/input/userpicker.php: Upped minChars to 2 for user picker.
+
+ * views/default/input/userpicker.php: Disabled matchContains in user picker.
+
+
+ * engine/lib/input.php: Updated the user picker to avoid possible mysql
+ injection attacks and to search only by leading chars.
+
+2009-09-22 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/input/userpicker.php: collections picker - delete link given
+ classname and brackets removed from string
+
+2009-09-21 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/embed/addcontentjs.php, views/default/embed/js.php: Removing
+ embed view in favor of the correct views in the plugin.
+
+2009-09-21 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/comments/add.php, engine/lib/annotations.php,
+ engine/lib/river2.php, engine/schema/upgrades/2009091901.sql, version.php,
+ views/default/annotation/annotate.php: New river code added to allow user
+ comment to be pulled out and displayed
+
+2009-09-17 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/input/userpicker.php: Updated user picker to return 25
+ results, text input to be 30 wide.
+
+2009-09-16 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/access.php: Changed get_entities_from_access_collection() to
+ get_entities_from_access_id() to be more generic.
+
+ * engine/lib/extender.php: Fixes #1238: Added ElggExtender::getOwnerEntity()
+ and changed ElggExtender::getOwner() to return just the GUID. Also, this
+ fixes a bug with checking permissions on annotations.
+
+2009-09-15 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * friends/index.php, friends/of.php: Fixes #1251: Correct strings applied.
+
+2009-09-10 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/access.php, engine/lib/sessions.php: Updated fixes for checking
+ for admin in get_access_sql_prefix()
+
+ * engine/lib/access.php: Checking against admin metadata instead of
+ $is_admin global in get_access_sql_suffix().
+
+ * engine/lib/access.php: Fixing a bug with when getting the sql suffix for
+ the non-loggedin user.
+
+2009-09-09 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php: Added "Only Friends" string for user picker.
+
+ * views/default/input/userpicker.php: Defaulted userpicker to all users.
+ Checkbox makes it only friends.
+
+2009-09-09 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * README.txt: updating the version number in the readme
+
+2009-09-07 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/input/userpicker.php: Better jquery deleting of user entity
+ for user picker.
+
+ * languages/en.php, views/default/input/userpicker.php: Pulled out language
+ string to language file.
+
+ * views/default/css.php, views/default/input/userpicker.php: Added bolding
+ to term searc in user picker.
+
+ * engine/lib/input.php, views/default/css.php: Updated livesearch page
+ handler to use classes instead of hard coded css.
+
+ * views/default/css.php, views/default/input/userpicker.php: Added rough
+ version of a new user picker.
+
+ * admin/user.php, views/default/search/entity_list.php: Fixes #1207: Using
+ fullviews with proper list_entity params.
+
+2009-09-06 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * README.txt, version.php: Bumped version number.
+
+ * views/default/site/default.php: Fixed a potential security issue
+ concerning site views.
+
+2009-09-04 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Added strip_tags() to setting titles in
+ ElggEntity
+
+2009-09-04 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/relationships.php: Patch submitted for ticket #886 rolled back
+ as it was causing #1205 -> #886 will need further investigating
+
+ * views/default/css.php, views/default/river/item/wrapper.php: activity
+ display toggle so site admins can choose avatars or the small icons
+
+2009-09-03 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/access.php, engine/lib/input.php: Adding additional hooks to
+ add/remove/update users for access_collections() Added autocomplete endpoint
+ in input_init()
+
+ * views/default/input/autocomplete.php: Cleaning up autocomplete view.
+
+ * vendors/jquery/jquery.autocomplete.min.js,
+ views/default/input/autocomplete.php: Added autocomplete view to core.
+
+2009-09-03 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/relationships.php: missing comma added
+
+ * views/default/search/entity_list.php: fullview hashed out for now as it
+ caused unexpected behaviour on admin user list view, needs more investigating
+
+2009-09-02 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/relationships.php: order by bug fixed in
+ get_entities_from_relationship
+
+2009-09-01 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/access.php: a simple function which returns a string version of
+ an entity's access level
+
+2009-08-31 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * CONTRIBUTORS.txt, INSTALL.txt, README.txt, _css/css.php, _css/js.php,
+ account/register.php, actions/admin/plugins/disable.php,
+ actions/admin/plugins/disableall.php, actions/admin/plugins/enable.php,
+ actions/admin/plugins/reorder.php, actions/admin/site/update_basic.php,
+ actions/admin/user/ban.php, actions/comments/add.php,
+ actions/comments/delete.php, actions/email/save.php, actions/friends/add.php,
+ actions/friends/addcollection.php, actions/friends/deletecollection.php,
+ actions/friends/editcollection.php, actions/friends/remove.php,
+ actions/login.php, actions/logout.php, actions/register.php,
+ actions/systemsettings/install.php, actions/user/default_access.php,
+ actions/user/requestnewpassword.php, actions/user/spotlight.php,
+ actions/useradd.php, actions/usersettings/save.php, actions/widgets/add.php,
+ actions/widgets/reorder.php, actions/widgets/save.php, admin/index.php,
+ admin/plugins.php, admin/site.php, admin/user.php, dashboard/index.php,
+ dashboard/latest.php, engine/handlers/action_handler.php,
+ engine/handlers/cron_handler.php, engine/handlers/pagehandler.php,
+ engine/handlers/xml-rpc_handler.php, engine/lib/access.php,
+ engine/lib/activity.php, engine/lib/admin.php, engine/lib/api.php,
+ engine/lib/configuration.php, engine/lib/database.php,
+ engine/lib/elgglib.php, engine/lib/entities.php, engine/lib/extender.php,
+ engine/lib/input.php, engine/lib/install.php, engine/lib/languages.php,
+ engine/lib/metadata.php, engine/lib/metastrings.php,
+ engine/lib/notification.php, engine/lib/objects.php,
+ engine/lib/pagehandler.php, engine/lib/pageowner.php, engine/lib/pam.php,
+ engine/lib/plugins.php, engine/lib/query.php, engine/lib/relationships.php,
+ engine/lib/river2.php, engine/lib/sessions.php, engine/lib/sites.php,
+ engine/lib/social.php, engine/lib/statistics.php, engine/lib/tags.php,
+ engine/lib/upgrades/2008101303.php, engine/lib/users.php,
+ engine/lib/version.php, engine/lib/widgets.php, engine/settings.example.php,
+ engine/start.php, entities/index.php, entities/list.php, friends/add.php,
+ friends/collections.php, friends/edit.php, friends/index.php, friends/of.php,
+ friends/pickercallback.php, index.php, install.php, languages/en.php,
+ mod/garbagecollector/languages/en.php, mod/logbrowser/index.php,
+ mod/logbrowser/languages/en.php, mod/logbrowser/start.php,
+ .../views/default/logbrowser/adminlinks.php,
+ mod/logbrowser/views/default/logbrowser/form.php,
+ mod/logbrowser/views/default/object/logwrapper.php,
+ mod/uservalidationbyemail/start.php, settings/index.php,
+ simplecache/view.php, upgrade.php, vendors/calendarpopup/CalendarPopup.js,
+ vendors/jquery/jquery.form.js, version.php,
+ views/default/account/forms/login.php,
+ views/default/account/forms/register.php, views/default/admin/main.php,
+ views/default/admin/plugins_opt/plugin.php,
+ views/default/admin/statistics.php,
+ views/default/admin/statistics_opt/numentities.php,
+ views/default/admin/statistics_opt/online.php,
+ views/default/admin/user_opt/search.php, views/default/ajax/loader.php,
+ views/default/annotation/annotate.php,
+ views/default/annotation/generic_comment.php,
+ views/default/basic_elements/welcome.php, views/default/canvas/default.php,
+ views/default/canvas/layouts/edit_layout.php,
+ views/default/canvas/layouts/sidebar_boxes.php,
+ views/default/canvas_header/submenu_group.php,
+ views/default/canvas_header/submenu_template.php,
+ views/default/comments/forms/edit.php, views/default/dashboard/blurb.php,
+ views/default/embed/addcontentjs.php, views/default/embed/js.php,
+ views/default/friends/collection.php, views/default/friends/collections.php,
+ views/default/friends/collectiontabs.php,
+ views/default/friends/forms/collectionfields.php,
+ views/default/friends/forms/edit.php, views/default/friends/list.php,
+ views/default/friends/picker.php, views/default/friends/river/create.php,
+ views/default/friends/tablelistcountupdate.php,
+ views/default/input/access.php, views/default/input/calendar.php,
+ views/default/input/checkboxes.php, views/default/input/email.php,
+ views/default/input/file.php, views/default/input/longtext.php,
+ views/default/input/password.php, views/default/input/plaintext.php,
+ views/default/input/pulldown.php, views/default/input/radio.php,
+ views/default/input/tags.php, views/default/input/text.php,
+ views/default/input/url.php, views/default/js/friendsPickerv1.php,
+ views/default/js/initialise_elgg.php, views/default/js/upload_js.php,
+ views/default/messages/errors/error.php,
+ views/default/messages/errors/list.php,
+ views/default/messages/exceptions/exception.php,
+ views/default/messages/list.php, views/default/messages/messages/list.php,
+ views/default/messages/messages/message.php,
+ views/default/navigation/viewtype.php,
+ .../notifications/settings/usersettings.php, views/default/object/widget.php,
+ views/default/output/calendar.php, views/default/output/checkboxes.php,
+ views/default/output/confirmlink.php, views/default/output/date.php,
+ views/default/output/email.php, views/default/output/longtext.php,
+ views/default/output/pulldown.php, views/default/output/radio.php,
+ views/default/output/tagcloud.php, views/default/output/tags.php,
+ views/default/output/text.php, views/default/output/url.php,
+ views/default/page_elements/contentwrapper.php,
+ views/default/page_elements/header_contents.php,
+ views/default/page_elements/owner_block.php,
+ views/default/river/item/list.php, views/default/river/item/noaccess.php,
+ views/default/river/item/wrapper.php, views/default/river/wrapper.php,
+ views/default/settings/install.php, views/default/settings/system.php,
+ views/default/settings/upgrading.php, views/default/spotlight/default.php,
+ views/default/text/about.php, views/default/text/privacy_view.php,
+ views/default/text/tos_view.php,
+ views/default/upload/upload_form_content.php, views/default/user/default.php,
+ views/default/user/settings/default_access.php,
+ views/default/user/settings/email.php, views/default/user/settings/name.php,
+ views/default/user/settings/password.php,
+ .../usersettings/statistics_opt/numentities.php, views/default/welcome.php,
+ views/default/widgets/editwrapper.php, views/default/widgets/wrapper.php,
+ views/failsafe/canvas/default.php, views/failsafe/input/access.php,
+ views/failsafe/input/checkboxes.php, views/failsafe/input/longtext.php,
+ views/failsafe/input/pulldown.php, views/failsafe/input/text.php,
+ views/failsafe/messages/errors/error.php,
+ views/failsafe/messages/errors/list.php, views/failsafe/messages/list.php,
+ views/failsafe/messages/messages/list.php,
+ views/failsafe/messages/messages/message.php,
+ views/failsafe/messages/sanitisation/htaccess.php,
+ views/failsafe/settings/install.php, views/failsafe/settings/system.php,
+ views/foaf/canvas/default.php, views/foaf/page_elements/contentwrapper.php,
+ views/foaf/pageshells/pageshell.php, views/foaf/user/default.php,
+ views/js/object/default.php, views/js/pageshells/pageshell.php,
+ views/js/user/default.php, views/json/api/output.php,
+ views/json/canvas/default.php, views/json/export/entity.php,
+ views/json/export/metadata.php, views/json/export/relationship.php,
+ views/json/messages/exceptions/exception.php,
+ views/json/page_elements/contentwrapper.php,
+ views/json/pageshells/pageshell.php, views/json/river/item/list.php,
+ views/opendd/messages/exceptions/exception.php,
+ views/rss/annotation/default.php, views/rss/canvas/default.php,
+ views/rss/group/default.php, views/rss/object/default.php,
+ views/rss/page_elements/contentwrapper.php, views/rss/river/item/list.php,
+ views/rss/user/default.php, views/xml/messages/exceptions/exception.php: All
+ line endings are now Unix-style.
+
+2009-08-28 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/register.php, engine/lib/entities.php: Fixes #1196:
+ ElggEntity::disable() now accepts a 2nd arg for recursive. New users are not
+ recursively disabled for plugins that need to create entities owned by the
+ new user upon entity creation.
+
+2009-08-27 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/search.php: Fixes #1191: set_input() was never being called for
+ tag in search_page_handler().
+
+2009-08-27 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/annotation/annotate.php: a missing pipe added
+
+ * views/default/annotation/annotate.php: a snippet of a new comment on an
+ object will now appear in the activity river
+
+2009-08-26 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php: Added entity_owner_guid to get_annotations()
+
+2009-08-25 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/header.php: a simple solution to a css/js
+ loading bug. We need to come up with something better, long term.
+
+2009-08-23 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: new style added for page update action appearing in
+ the river
+
+2009-08-21 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/group.php: Fixes #1180: Group join event triggered after
+ joining group. This trigger's return was never being tested so no overriding
+ could be done. If we decide to test the trigger to stop group joining,
+ groups_write_acl_plugin_hook() will need to be changed...
+
+2009-08-21 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/friends/river/create.php: new friending river view applied
+
+2009-08-20 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * version.php: Version bump to 1.6.
+
+ * _css/css.php, _css/js.php, account/forgotten_password.php,
+ account/register.php, actions/admin/plugins/disable.php,
+ actions/admin/plugins/disableall.php, actions/admin/plugins/enable.php,
+ actions/admin/plugins/enableall.php, actions/admin/plugins/reorder.php,
+ actions/admin/site/update_basic.php, actions/admin/user/ban.php,
+ actions/admin/user/delete.php, actions/admin/user/makeadmin.php,
+ actions/admin/user/removeadmin.php, actions/admin/user/resetpassword.php,
+ actions/admin/user/unban.php, actions/comments/add.php,
+ actions/comments/delete.php, actions/email/save.php,
+ actions/entities/delete.php, actions/friends/add.php,
+ actions/friends/addcollection.php, actions/friends/deletecollection.php,
+ actions/friends/editcollection.php, actions/friends/remove.php,
+ actions/import/opendd.php, actions/login.php, actions/logout.php,
+ .../notifications/settings/usersettings/save.php,
+ actions/plugins/settings/save.php, actions/plugins/usersettings/save.php,
+ actions/register.php, actions/systemsettings/install.php,
+ actions/user/default_access.php, actions/user/language.php,
+ actions/user/name.php, actions/user/password.php,
+ actions/user/passwordreset.php, actions/user/requestnewpassword.php,
+ actions/useradd.php, actions/usersettings/save.php, actions/widgets/add.php,
+ actions/widgets/reorder.php, actions/widgets/save.php, admin/index.php,
+ admin/plugins.php, admin/site.php, admin/statistics.php, admin/user.php,
+ dashboard/index.php, dashboard/latest.php,
+ engine/handlers/action_handler.php, engine/handlers/cron_handler.php,
+ engine/handlers/pagehandler.php, engine/handlers/xml-rpc_handler.php,
+ engine/lib/access.php, engine/lib/actions.php, engine/lib/activity.php,
+ engine/lib/admin.php, engine/lib/annotations.php, engine/lib/api.php,
+ engine/lib/cache.php, engine/lib/calendar.php, engine/lib/configuration.php,
+ engine/lib/cron.php, engine/lib/database.php, engine/lib/elgglib.php,
+ engine/lib/entities.php, engine/lib/exceptions.php, engine/lib/export.php,
+ engine/lib/extender.php, engine/lib/filestore.php, engine/lib/group.php,
+ engine/lib/input.php, engine/lib/install.php, engine/lib/languages.php,
+ engine/lib/location.php, engine/lib/mb_wrapper.php, engine/lib/memcache.php,
+ engine/lib/metadata.php, engine/lib/metastrings.php,
+ engine/lib/notification.php, engine/lib/objects.php, engine/lib/opendd.php,
+ engine/lib/pagehandler.php, engine/lib/pageowner.php, engine/lib/pam.php,
+ engine/lib/ping.php, engine/lib/plugins.php, engine/lib/query.php,
+ engine/lib/relationships.php, engine/lib/river2.php, engine/lib/search.php,
+ engine/lib/sessions.php, engine/lib/sites.php, engine/lib/social.php,
+ engine/lib/statistics.php, engine/lib/system_log.php, engine/lib/tags.php,
+ engine/lib/testing.php, engine/lib/users.php, engine/lib/usersettings.php,
+ engine/lib/version.php, engine/lib/widgets.php, engine/lib/xml-rpc.php,
+ engine/lib/xml.php, engine/schema/mysql.sql, engine/start.php,
+ entities/index.php, entities/list.php, friends/add.php,
+ friends/collections.php, friends/edit.php, friends/index.php, friends/of.php,
+ friends/pickercallback.php, index.php, install.php,
+ mod/crontrigger/start.php, mod/diagnostics/actions/download.php,
+ mod/diagnostics/index.php, mod/diagnostics/languages/en.php,
+ mod/diagnostics/start.php, mod/diagnostics/testreport.php,
+ mod/diagnostics/unittester.php,
+ .../views/default/diagnostics/forms/download.php,
+ .../views/default/diagnostics/runalltests.php,
+ mod/diagnostics/views/default/diagnostics/test.php,
+ .../views/default/diagnostics/testresult.php,
+ mod/garbagecollector/languages/en.php, mod/garbagecollector/start.php,
+ mod/htmlawed/start.php, mod/logbrowser/index.php,
+ mod/logbrowser/languages/en.php, mod/logbrowser/start.php,
+ mod/logbrowser/views/default/logbrowser/css.php,
+ mod/logbrowser/views/default/object/logwrapper.php,
+ mod/logrotate/languages/en.php, mod/logrotate/start.php,
+ .../actions/email/confirm.php, mod/uservalidationbyemail/languages/en.php,
+ mod/uservalidationbyemail/start.php, search/groups.php, search/index.php,
+ search/users.php, services/api/rest.php, services/export/handler.php,
+ settings/index.php, settings/plugins.php, settings/statistics.php,
+ settings/user.php, simplecache/view.php, upgrade.php, version.php,
+ views/default/account/forms/forgotten_password.php,
+ views/default/account/forms/login.php,
+ views/default/account/forms/register.php,
+ views/default/account/forms/useradd.php, views/default/admin/main.php,
+ views/default/admin/main_opt/plugins.php,
+ views/default/admin/main_opt/site.php,
+ views/default/admin/main_opt/statistics.php,
+ views/default/admin/main_opt/user.php, views/default/admin/plugins.php,
+ views/default/admin/plugins_opt/plugin.php, views/default/admin/site.php,
+ views/default/admin/statistics.php,
+ views/default/admin/statistics_opt/basic.php,
+ views/default/admin/statistics_opt/numentities.php,
+ views/default/admin/statistics_opt/online.php, views/default/admin/user.php,
+ views/default/admin/user_opt/adduser.php,
+ views/default/admin/user_opt/search.php, views/default/ajax/loader.php,
+ views/default/annotation/generic_comment.php, views/default/api/output.php,
+ views/default/basic_elements/welcome.php, views/default/canvas/default.php,
+ views/default/canvas/layouts/edit_layout.php,
+ views/default/canvas/layouts/one_column.php,
+ views/default/canvas/layouts/sidebar_boxes.php,
+ .../canvas/layouts/two_column_left_sidebar.php,
+ .../canvas/layouts/two_column_right_sidebar.php,
+ views/default/canvas/layouts/widgets.php,
+ views/default/comments/forms/edit.php, views/default/css.php,
+ views/default/export/entity.php, views/default/export/metadata.php,
+ views/default/export/relationship.php, views/default/friends/collection.php,
+ views/default/friends/collections.php,
+ views/default/friends/forms/collectionfields.php,
+ views/default/friends/forms/edit.php, views/default/friends/list.php,
+ views/default/friends/picker.php, views/default/friends/tablelist.php,
+ views/default/friends/tablelistcountupdate.php,
+ views/default/graphics/icon.php, views/default/group/default.php,
+ views/default/input/access.php, views/default/input/button.php,
+ views/default/input/calendar.php, views/default/input/captcha.php,
+ views/default/input/checkboxes.php, views/default/input/email.php,
+ views/default/input/file.php, views/default/input/form.php,
+ views/default/input/hidden.php, views/default/input/longtext.php,
+ views/default/input/password.php, views/default/input/plaintext.php,
+ views/default/input/pulldown.php, views/default/input/radio.php,
+ views/default/input/reset.php, views/default/input/securitytoken.php,
+ views/default/input/submit.php, views/default/input/tags.php,
+ views/default/input/text.php, views/default/input/url.php,
+ views/default/input/urlshortener.php,
+ views/default/messages/errors/error.php,
+ views/default/messages/errors/list.php,
+ views/default/messages/exceptions/exception.php,
+ views/default/messages/list.php, views/default/messages/messages/list.php,
+ views/default/messages/messages/message.php,
+ views/default/navigation/pagination.php,
+ views/default/navigation/topbar_tools.php,
+ views/default/navigation/viewtype.php,
+ .../notifications/settings/usersettings.php,
+ views/default/object/default.php, views/default/object/object.php,
+ views/default/object/plugin.php, views/default/object/widget.php,
+ views/default/output/calendar.php, views/default/output/checkboxes.php,
+ views/default/output/confirmlink.php, views/default/output/date.php,
+ views/default/output/email.php, views/default/output/iframe.php,
+ views/default/output/longtext.php, views/default/output/pulldown.php,
+ views/default/output/radio.php, views/default/output/tagcloud.php,
+ views/default/output/tags.php, views/default/output/text.php,
+ views/default/output/url.php, views/default/page_elements/elgg_topbar.php,
+ views/default/page_elements/footer.php,
+ views/default/page_elements/header.php,
+ views/default/page_elements/header_contents.php,
+ views/default/page_elements/owner_block.php,
+ views/default/page_elements/spotlight.php,
+ views/default/page_elements/title.php,
+ views/default/pageshells/pageshell.php, views/default/river/dashboard.php,
+ views/default/river/item/wrapper.php,
+ views/default/river/relationship/friend/create.php,
+ views/default/river/wrapper.php, views/default/search/gallery.php,
+ views/default/search/gallery_listing.php, views/default/search/listing.php,
+ views/default/settings/install.php, views/default/settings/system.php,
+ views/default/site/default.php, views/default/spotlight/default.php,
+ views/default/text/about.php, views/default/text/privacy_view.php,
+ views/default/text/tos_view.php, views/default/user/default.php,
+ views/default/user/settings/default_access.php,
+ views/default/user/settings/email.php,
+ views/default/user/settings/language.php,
+ views/default/user/settings/name.php,
+ views/default/user/settings/password.php,
+ views/default/usersettings/main.php,
+ views/default/usersettings/main_opt/plugins.php,
+ views/default/usersettings/main_opt/statistics.php,
+ views/default/usersettings/main_opt/user.php,
+ views/default/usersettings/plugins.php,
+ views/default/usersettings/plugins_opt/plugin.php,
+ views/default/usersettings/statistics.php,
+ .../usersettings/statistics_opt/numentities.php,
+ .../default/usersettings/statistics_opt/online.php,
+ views/default/welcome.php, views/default/welcome/logged_in.php,
+ views/default/welcome/logged_out.php, views/default/widgets/editwrapper.php,
+ views/default/widgets/wrapper.php, views/failsafe/canvas/default.php,
+ views/failsafe/input/access.php, views/failsafe/input/button.php,
+ views/failsafe/input/checkboxes.php, views/failsafe/input/form.php,
+ views/failsafe/input/hidden.php, views/failsafe/input/longtext.php,
+ views/failsafe/input/pulldown.php, views/failsafe/input/reset.php,
+ views/failsafe/input/submit.php, views/failsafe/input/text.php,
+ views/failsafe/messages/errors/error.php,
+ views/failsafe/messages/errors/list.php,
+ views/failsafe/messages/exceptions/exception.php,
+ views/failsafe/messages/list.php, views/failsafe/messages/messages/list.php,
+ views/failsafe/messages/messages/message.php,
+ views/failsafe/messages/sanitisation/htaccess.php,
+ views/failsafe/messages/sanitisation/settings.php,
+ views/failsafe/pageshells/pageshell.php, views/failsafe/settings/install.php,
+ views/failsafe/settings/system.php, views/foaf/canvas/default.php,
+ views/foaf/pageshells/pageshell.php, views/foaf/user/default.php,
+ views/ical/canvas/default.php, views/ical/export/entity.php,
+ views/ical/object/default.php, views/ical/pageshells/pageshell.php,
+ views/ical/search/entity_list.php, views/js/object/default.php,
+ views/js/pageshells/pageshell.php, views/js/user/default.php,
+ views/json/api/output.php, views/json/canvas/default.php,
+ views/json/export/entity.php, views/json/export/metadata.php,
+ views/json/export/relationship.php, views/json/group/default.php,
+ views/json/messages/exceptions/exception.php, views/json/object/default.php,
+ views/json/pageshells/pageshell.php, views/json/search/entity_list.php,
+ views/json/site/default.php, views/json/user/default.php,
+ views/opendd/canvas/default.php, views/opendd/export/entity.php,
+ views/opendd/export/metadata.php, views/opendd/export/relationship.php,
+ views/opendd/group/default.php,
+ views/opendd/messages/exceptions/exception.php,
+ views/opendd/object/default.php, views/opendd/pageshells/pageshell.php,
+ views/opendd/site/default.php, views/opendd/user/default.php,
+ views/php/api/output.php, views/php/canvas/default.php,
+ views/php/export/entity.php, views/php/export/metadata.php,
+ views/php/export/relationship.php, views/php/group/default.php,
+ views/php/messages/exceptions/exception.php, views/php/object/default.php,
+ views/php/pageshells/pageshell.php, views/php/search/entity_list.php,
+ views/php/site/default.php, views/php/user/default.php,
+ views/rss/annotation/default.php, views/rss/canvas/default.php,
+ views/rss/group/default.php, views/rss/object/default.php,
+ views/rss/pageshells/pageshell.php, views/rss/user/default.php,
+ views/xml/api/output.php, views/xml/messages/exceptions/exception.php,
+ views/xml/pageshells/pageshell.php, views/xml/xml-rpc/output.php: Whoa nelly
+ this is a big one: Removed license and copyright for files.
+
+2009-08-19 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * LICENCE.txt: Fixes #1176: Added date back to license.
+
+ * LICENCE.txt: Test
+
+2009-08-11 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php: Fixes #942: In register_user, replaced
+ sanitise_string() call with a simple trim(). Not a problem because all SQL
+ sanitation is handled elsewhere.
+
+ * engine/lib/annotations.php: Added timelower and timeupper to
+ get_annotations() and __get_annotations_calculate_x() and its helpers.
+
+2009-08-06 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/captcha/backgrounds/bg1.jpg, mod/captcha/backgrounds/bg2.jpg,
+ mod/captcha/backgrounds/bg3.jpg, mod/captcha/backgrounds/bg4.jpg,
+ mod/captcha/backgrounds/bg5.jpg, mod/captcha/captcha.php,
+ mod/captcha/fonts/1.ttf, mod/captcha/fonts/Liberation_serif_License.txt,
+ mod/captcha/languages/en.php, mod/captcha/manifest.xml,
+ mod/captcha/start.php, mod/captcha/views/default/captcha/css.php,
+ mod/captcha/views/default/input/captcha.php,
+ mod/groups/actions/addtogroup.php, mod/groups/actions/delete.php,
+ mod/groups/actions/edit.php, mod/groups/actions/featured.php,
+ mod/groups/actions/forums/addpost.php,
+ mod/groups/actions/forums/addtopic.php,
+ mod/groups/actions/forums/deletepost.php,
+ mod/groups/actions/forums/deletetopic.php,
+ mod/groups/actions/forums/editpost.php,
+ mod/groups/actions/forums/edittopic.php,
+ mod/groups/actions/groupskillrequest.php, mod/groups/actions/invite.php,
+ mod/groups/actions/join.php, mod/groups/actions/joinrequest.php,
+ mod/groups/actions/leave.php, mod/groups/addtopic.php, mod/groups/all.php,
+ mod/groups/discussions.php, mod/groups/edit.php, mod/groups/edittopic.php,
+ mod/groups/forum.php, mod/groups/graphics/defaultlarge.gif,
+ mod/groups/graphics/defaultmedium.gif, mod/groups/graphics/defaultsmall.gif,
+ mod/groups/graphics/defaulttiny.gif, mod/groups/graphics/icon.php,
+ mod/groups/groupprofile.php, mod/groups/index.php, mod/groups/invite.php,
+ mod/groups/languages/en.php, mod/groups/manifest.xml,
+ mod/groups/membership.php, mod/groups/membershipreq.php, mod/groups/new.php,
+ mod/groups/start.php, mod/groups/topicposts.php,
+ mod/groups/views/default/forms/forums/addpost.php,
+ mod/groups/views/default/forms/forums/addtopic.php,
+ .../views/default/forms/forums/edittopic.php,
+ mod/groups/views/default/forms/groups/edit.php,
+ mod/groups/views/default/forms/groups/invite.php,
+ mod/groups/views/default/forum/topicposts.php,
+ mod/groups/views/default/forum/topics.php,
+ mod/groups/views/default/forum/viewposts.php,
+ mod/groups/views/default/group/group.php,
+ .../views/default/groups/closedmembership.php,
+ mod/groups/views/default/groups/contentwrapper.php,
+ mod/groups/views/default/groups/css.php,
+ mod/groups/views/default/groups/featured.php,
+ mod/groups/views/default/groups/find.php,
+ mod/groups/views/default/groups/forum_latest.php,
+ .../views/default/groups/group_sort_menu.php,
+ mod/groups/views/default/groups/groupgallery.php,
+ mod/groups/views/default/groups/grouplisting.php,
+ mod/groups/views/default/groups/groupprofile.php,
+ mod/groups/views/default/groups/icon.php,
+ mod/groups/views/default/groups/members.php,
+ .../views/default/groups/membershiprequests.php,
+ mod/groups/views/default/groups/profileitems.php,
+ mod/groups/views/default/groups/side_menu.php,
+ .../views/default/icon/group/default/large.php,
+ .../views/default/icon/group/default/medium.php,
+ .../views/default/icon/group/default/small.php,
+ .../views/default/icon/group/default/tiny.php,
+ .../views/default/object/groupforumtopic.php,
+ mod/groups/views/default/river/forum/create.php,
+ .../views/default/river/forum/topic/create.php,
+ mod/groups/views/default/river/group/create.php,
+ .../views/default/river/object/group/create.php,
+ .../river/object/groupforumtopic/annotate.php,
+ .../river/object/groupforumtopic/create.php,
+ .../river/object/groupforumtopic/update.php,
+ .../default/river/relationship/member/create.php,
+ mod/groups/views/default/settings/groups/edit.php,
+ mod/groups/views/default/sharing/invite.php,
+ .../views/default/widgets/a_users_groups/edit.php,
+ .../views/default/widgets/a_users_groups/view.php,
+ .../default/widgets/group_entities_widget/edit.php,
+ .../default/widgets/group_entities_widget/view.php,
+ .../default/widgets/group_members_widget/edit.php,
+ .../default/widgets/group_members_widget/view.php,
+ mod/groups/views/rss/forum/topicposts.php,
+ mod/groups/views/rss/forum/topics.php,
+ mod/groups/views/rss/forum/viewposts.php,
+ mod/groups/views/rss/groups/contentwrapper.php,
+ mod/groups/views/rss/groups/profileitems.php,
+ mod/notifications/actions/groupsave.php, mod/notifications/actions/save.php,
+ .../graphics/icon_notifications_email.gif, mod/notifications/groups.php,
+ mod/notifications/index.php, mod/notifications/languages/en.php,
+ mod/notifications/manifest.xml, mod/notifications/start.php,
+ .../views/default/notifications/css.php,
+ .../notifications/settings/usersettings.php,
+ .../notifications/subscriptions/collections.php,
+ .../default/notifications/subscriptions/form.php,
+ .../notifications/subscriptions/forminternals.php,
+ .../notifications/subscriptions/groupsform.php,
+ .../notifications/subscriptions/jsfuncs.php,
+ .../notifications/subscriptions/personal.php,
+ mod/profile/actions/cropicon.php,
+ mod/profile/actions/deletedefaultprofileitem.php,
+ mod/profile/actions/edit.php, mod/profile/actions/editdefault.php,
+ mod/profile/actions/iconupload.php,
+ mod/profile/actions/resetdefaultprofile.php, mod/profile/defaultprofile.php,
+ mod/profile/edit.php, mod/profile/editicon.php,
+ mod/profile/graphics/defaultlarge.gif,
+ mod/profile/graphics/defaultmaster.gif,
+ mod/profile/graphics/defaultmedium.gif,
+ mod/profile/graphics/defaultsmall.gif, mod/profile/graphics/defaulttiny.gif,
+ mod/profile/graphics/defaulttopbar.gif, mod/profile/icon.php,
+ mod/profile/icondirect.php, mod/profile/index.php,
+ mod/profile/javascript.php, mod/profile/manifest.xml, mod/profile/start.php,
+ .../views/default/icon/user/default/large.php,
+ .../views/default/icon/user/default/master.php,
+ .../views/default/icon/user/default/medium.php,
+ .../views/default/icon/user/default/small.php,
+ .../views/default/icon/user/default/tiny.php,
+ .../views/default/icon/user/default/topbar.php,
+ .../views/default/js/jquery.imgareaselect-0.8.js,
+ .../default/js/jquery.imgareaselect-0.8.min.js,
+ mod/profile/views/default/profile/css.php,
+ mod/profile/views/default/profile/edit.php,
+ .../views/default/profile/editdefaultprofile.php,
+ mod/profile/views/default/profile/editicon.php,
+ mod/profile/views/default/profile/gallery.php,
+ mod/profile/views/default/profile/hoverover.php,
+ mod/profile/views/default/profile/icon.php,
+ mod/profile/views/default/profile/javascript.php,
+ mod/profile/views/default/profile/listing.php,
+ mod/profile/views/default/profile/menu/actions.php,
+ .../views/default/profile/menu/adminlinks.php,
+ .../views/default/profile/menu/adminwrapper.php,
+ mod/profile/views/default/profile/menu/links.php,
+ .../views/default/profile/menu/linksownpage.php,
+ mod/profile/views/default/profile/metatags.php,
+ mod/profile/views/default/profile/profilelinks.php,
+ mod/profile/views/default/profile/submenu.php,
+ mod/profile/views/default/profile/userdetails.php,
+ .../river/user/default/profileiconupdate.php,
+ .../default/river/user/default/profileupdate.php,
+ mod/reportedcontent/actions/add.php, mod/reportedcontent/actions/archive.php,
+ mod/reportedcontent/actions/delete.php, mod/reportedcontent/add.php,
+ mod/reportedcontent/index.php, mod/reportedcontent/languages/en.php,
+ mod/reportedcontent/manifest.xml, mod/reportedcontent/start.php,
+ .../views/default/reportedcontent/css.php,
+ .../views/default/reportedcontent/form.php,
+ .../views/default/reportedcontent/listing.php,
+ .../views/default/reportedcontent/user_report.php,
+ mod/riverdashboard/actions/add.php, mod/riverdashboard/actions/delete.php,
+ mod/riverdashboard/index.php, mod/riverdashboard/languages/en.php,
+ mod/riverdashboard/manifest.xml, mod/riverdashboard/start.php,
+ .../views/default/river/sitemessage/create.php,
+ .../views/default/riverdashboard/container.php,
+ .../views/default/riverdashboard/css.php,
+ .../views/default/riverdashboard/js.php,
+ .../views/default/riverdashboard/nav.php,
+ .../views/default/riverdashboard/newestmembers.php,
+ .../views/default/riverdashboard/sitemessage.php,
+ .../views/default/riverdashboard/welcome.php,
+ .../views/default/settings/riverdashboard/edit.php,
+ .../views/default/widgets/river_widget/edit.php,
+ .../views/default/widgets/river_widget/view.php,
+ .../views/json/riverdashboard/container.php,
+ .../views/rss/riverdashboard/container.php, mod/thewire/actions/add.php,
+ mod/thewire/actions/delete.php, mod/thewire/add.php,
+ mod/thewire/everyone.php, mod/thewire/graphics/river_icon_thewire.gif,
+ mod/thewire/graphics/thewire_speech_bubble.gif, mod/thewire/index.php,
+ mod/thewire/languages/en.php, mod/thewire/manifest.xml,
+ mod/thewire/readme.txt, mod/thewire/start.php,
+ mod/thewire/views/default/object/thewire.php,
+ .../views/default/river/object/thewire/create.php,
+ .../views/default/thewire/activity_view.php,
+ mod/thewire/views/default/thewire/css.php,
+ mod/thewire/views/default/thewire/forms/add.php,
+ mod/thewire/views/default/thewire/notfound.php,
+ .../views/default/thewire/profile_status.php,
+ .../views/default/thewire/scripts/counter.js,
+ mod/thewire/views/default/thewire/view.php,
+ mod/thewire/views/default/widgets/thewire/edit.php,
+ mod/thewire/views/default/widgets/thewire/view.php: removed all main plugins
+ from core - they now live in the plugins svn
+
+2009-08-05 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/access.php: Added documentation to
+ list_entities_from_access_collection();
+
+2009-08-04 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Fixed a security issues when simple cache is off.
+
+2009-08-04 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * CONTRIBUTORS.txt: small edit
+
+2009-08-03 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php: Added starttime and endtime for
+ get_entities_from_annotation().
+
+2009-07-30 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * htaccess_dist: Refs #1089: Removed [B] flag from htaccess. This flag is
+ wildly inconsistent in functionality and support in Apache. Will have to
+ implement a solution in PHP.
+
+2009-07-29 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/access.php: Added get/list_entities_from_access_collection().
+
+ * engine/lib/cache.php: Fixes #1151: Added is_dir() check before attempting
+ to create cache directory.
+
+2009-07-27 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/notification.php: Fixes #1148: Correctly comparing strings to
+ get OS.
+
+2009-07-27 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/riverdashboard/css.php: small fix to force facebook and
+ twitter user icons to the right size in the recent members sidebar
+
+2009-07-24 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/metadata.php: Fixes #1144: Added comma between order by fields.
+
+
+2009-07-22 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/login.php, version.php: Closes #1137: Setting a hidden variable
+ "returntoreferer" in a login form will now cause the action to use the
+ "referrer" address on a successful login. Version bump.
+
+ * mod/profile/views/default/profile/editicon.php: Minor bugfix on username
+
+2009-07-17 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * version.php: Version bump
+
+ * .../views/default/object/groupforumtopic.php: Closes #1131: htmlentities
+ in view around user text
+
+2009-07-16 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * README.txt: readme tweak
+
+ * CONTRIBUTORS.txt: small tweak
+
+2009-07-15 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/icondirect.php, simplecache/view.php: Forcing a new db connect
+ for simplecache/view.php and mod/profile/icondirect.php Will avoid bugs if a
+ previous connection has been created.
+
+2009-07-13 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/api.php: Closes #1119: If post data not initially found then
+ input stream is used.
+
+2009-07-10 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/header.php: Removed #1100 hack
+
+2009-07-09 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/header.php: Closes #1100: Added a dummy
+ function to page shell to initialise jquery
+
+ * views/default/canvas/layouts/widgets.php: Closes #1113: Htmlentities made
+ UTF-8 and quotes safe.
+
+2009-07-08 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/pagehandler.php, version.php: Closes #1111: Using substr
+ instead of parse_url.
+
+ * engine/lib/elgglib.php: Refs #427: Added $vars array to hook call.
+
+2009-07-07 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/htmlawed/start.php: Closes #956: Classes are removed by the HTML
+ filter.
+
+ * engine/lib/access.php, mod/groups/start.php: Refs #1099: Using write
+ access hook to allow group-only ACLs. Need to examine better solutions after
+ 1.7.
+
+2009-07-06 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/input/pulldown.php: Closes #1105: Value on input/pulldown
+ view now escaped.
+
+ * engine/lib/xml-rpc.php: Closes #1075: XML-RPC client behaving as per spec
+
+2009-07-06 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/pagehandler.php, htaccess_dist: Refs #1089: Added [B] flag to
+ rewrite for tags. Won't work until apache 2.2.12. Cleaned up some query
+ code in pagehandler().
+
+2009-07-06 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/actions/cropicon.php: Admin cropping of other user icons now
+ works as expected.
+
+ * mod/profile/start.php: Fixed doubling on icon edit (nb. this was not the
+ same issue as Refs #1100)
+
+ * mod/profile/views/default/profile/menu/links.php,
+ .../views/default/profile/menu/linksownpage.php: Removed edit profile, added
+ links to own page.
+
+2009-07-06 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/filestore.php: small tweak to filestore
+
+2009-07-06 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/actions/cropicon.php, mod/profile/actions/edit.php,
+ mod/profile/actions/iconupload.php, mod/profile/editicon.php,
+ mod/profile/manifest.xml, mod/profile/start.php,
+ mod/profile/views/default/profile/edit.php,
+ mod/profile/views/default/profile/editicon.php,
+ mod/profile/views/default/profile/menu/links.php,
+ mod/profile/views/default/profile/userdetails.php, version.php: * Closes
+ #1104: Edit profile and edit icon links on pulldown menu for editable users.
+ * Closes #545: Admins are now able to edit profiles and icons of other users.
+ * CSRF protection added to icon upload and edit code. * Version bump.
+
+ * engine/lib/entities.php: Closes #742: Ability to retrieve master icon from
+ getIcon() interface.
+
+ * languages/en.php, mod/profile/views/default/profile/editicon.php: Closes
+ #1103: Profile text now has translation tag
+
+2009-07-03 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: added css rule for em tags to work properly with
+ htmlawed and tinyMCE editor
+
+2009-07-03 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/htmlawed/start.php: Allowing selected style attributes in htmlawed.
+
+2009-07-02 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/systemsettings/install.php: Removing update client from initial
+ modules.
+
+ * actions/systemsettings/install.php: Refs #1086 & #1073: Filtering and
+ captcha have correct install defaults.
+
+2009-07-02 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/start.php: Closes #859: Group forum thread-starters receive
+ same email as participants.
+
+2009-07-02 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/metadata.php: order by now works on get entities from metadata
+
+2009-07-01 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/htmlawed/start.php: Fixed a typo in htmlawed filtering.
+
+ * engine/lib/users.php: Refs #1058: Using validated metadata for new user
+ permission check. Correctly allows for enable() / disable(), but still not
+ ideal.
+
+2009-07-01 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/upgrades/2009070101.php, mod/kses/manifest.xml,
+ mod/kses/start.php, mod/kses/vendors/kses/AUTHORS,
+ mod/kses/vendors/kses/COPYING, mod/kses/vendors/kses/ChangeLog,
+ mod/kses/vendors/kses/README, mod/kses/vendors/kses/TODO,
+ mod/kses/vendors/kses/docs/attribute-value-checks,
+ mod/kses/vendors/kses/docs/hooks,
+ mod/kses/vendors/kses/docs/stripping-everything,
+ mod/kses/vendors/kses/docs/supported-formats,
+ .../vendors/kses/docs/whitelisted-url-protocols,
+ mod/kses/vendors/kses/examples/filter.php,
+ mod/kses/vendors/kses/examples/test.php, mod/kses/vendors/kses/kses.php,
+ mod/kses/vendors/kses/oop/oop.kses.changelog.txt,
+ mod/kses/vendors/kses/oop/oop.simple.api.txt,
+ mod/kses/vendors/kses/oop/php4.class.kses.php,
+ mod/kses/vendors/kses/oop/php5.class.kses.php,
+ mod/kses/vendors/kses/oop/test.oop.kses.php, version.php: Refs #1086:
+ Deprecating kses and removing it from core. Version bump.
+
+2009-07-01 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/htmlawed/manifest.xml, mod/htmlawed/start.php,
+ mod/htmlawed/vendors/htmLawed/htmLawed.php,
+ mod/htmlawed/vendors/htmLawed/htmLawedTest.php,
+ mod/htmlawed/vendors/htmLawed/htmLawed_README.htm,
+ mod/htmlawed/vendors/htmLawed/htmLawed_README.txt,
+ .../vendors/htmLawed/htmLawed_TESTCASE.txt: Refs #1086: Added htmLawed plugin
+ as replacement for kses.
+
+2009-07-01 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/input.php: Closes #1097: Results set by set_input are now also
+ filtered by get_input()
+
+ * engine/lib/annotations.php: Short circuit on delete annotations to avoid
+ error message
+
+ * engine/lib/metadata.php: Metadata delete now passing correct object, also
+ handles missing metadata entity.
+
+2009-07-01 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../notifications/subscriptions/jsfuncs.php,
+ .../views/default/js/jquery.imgareaselect-0.4.2.js,
+ .../default/js/jquery.imgareaselect-0.4.2.min.js,
+ .../views/default/js/jquery.imgareaselect-0.8.js,
+ .../default/js/jquery.imgareaselect-0.8.min.js,
+ mod/profile/views/default/profile/editicon.php,
+ mod/profile/views/default/profile/javascript.php,
+ vendors/jquery/jquery-1.2.6.pack.js, vendors/jquery/jquery-1.3.2.min.js,
+ vendors/jquery/jquery-ui-1.7.2.custom.min.js,
+ .../jquery/jquery-ui-personalized-1.5.3.packed.js,
+ vendors/jquery/jquery.form.js, views/default/embed/addcontentjs.php,
+ views/default/js/initialise_elgg.php, views/default/js/upload_js.php,
+ views/default/page_elements/header.php: update to jquery 1.3.2 and jqueryUI
+ 1.7.2 closes #941
+
+2009-06-30 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php, mod/thewire/views/default/object/thewire.php,
+ .../views/default/river/object/thewire/create.php: fixed wire reply button
+ (missing 'echo'), and tweaked river/dashboard reply link for the default
+ theme. Also fixed a typo in the admin area
+
+2009-06-30 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * search/groups.php, search/index.php, search/users.php: Refs #1086: Fixes
+ specific issues mentioned pending KSES fix / replacement
+
+2009-06-30 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php, views/default/friends/collection.php,
+ views/default/output/confirmlink.php: Modified output/confirmlink view to
+ accept a class param. user_remove_friend() uses
+ remove_user_from_access_collection() instead of raw SQL. Deleting an access
+ collection prompts using output/confirmlink.
+
+2009-06-30 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/river/object/thewire/create.php: wire links will now
+ work in the activity river
+
+2009-06-30 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * README.txt: Fixed typo
+
+2009-06-29 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/friends/collection.php: Ref #1015: Correctly placed the end
+ div for access collection delete link.
+
+ * views/default/friends/collection.php: Closes #1015: Added a prompt before
+ deleting an access collection. Also cleaned up some hard vs soft tab issues.
+
+
+ * engine/lib/users.php: Closes #502: Removing unfriended users from access
+ lists upon unfriending.
+
+ * engine/lib/annotations.php: Closes #337: Added checking for metastrings in
+ __get_annotations_calculate_x()
+
+ * engine/lib/entities.php, engine/lib/relationships.php: Updated get_*()
+ functions ot return false if an invalid subtype is specified.
+
+2009-06-29 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/upgrades/2009050801.php: Closes #1073: Captcha off by default
+
+2009-06-28 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/river2.php: Access levels on add_to_river() will now respect
+ ACCESS_DEFAULT level.
+
+ * views/rss/pageshells/pageshell.php: Closes #1090: Removed xml:base from
+ RSS channel tag.
+
+2009-06-26 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/captcha/manifest.xml: Minor point of clarification
+
+2009-06-25 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/groups/css.php: tweak to input box size
+
+2009-06-24 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * version.php: Version bump
+
+ * engine/lib/elgglib.php: Closes #427: Original view name passed to plugin
+ hook.
+
+ * engine/lib/filestore.php: Some tidying of file download manager functions.
+
+2009-06-23 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * version.php: Version bump
+
+ * actions/friends/add.php, actions/friends/remove.php,
+ mod/profile/views/default/profile/menu/actions.php: Action gatekeeper added
+ to add and remove friends.
+
+2009-06-19 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * version.php: Version bump.
+
+ * views/ical/canvas/default.php, views/ical/export/entity.php,
+ views/ical/object/default.php, views/ical/pageshells/pageshell.php,
+ views/ical/search/entity_list.php: Closes #581: First draft ICAL export views
+ for Notable calendar events.
+
+2009-06-18 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * version.php: Version bump.
+
+ * engine/lib/filestore.php: Closes #601: Provides default for new
+ ElggFilestore objects to remove warning message.
+
+2009-06-17 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/thewire/views/default/object/thewire.php,
+ .../views/default/river/object/thewire/create.php: * Translation 'reply'
+ fixed. * Now possible to reply to wire posts from within the river.
+
+ * engine/lib/annotations.php: Closes #719: More options on annotation count
+ functions.
+
+ * views/default/input/access.php, views/default/input/button.php,
+ views/default/input/checkboxes.php, views/default/input/email.php,
+ views/default/input/file.php, views/default/input/hidden.php,
+ views/default/input/longtext.php, views/default/input/password.php,
+ views/default/input/plaintext.php, views/default/input/pulldown.php,
+ views/default/input/radio.php, views/default/input/tags.php,
+ views/default/input/text.php, views/default/input/url.php: Closes #540:
+ input/* views have internalid attribute.
+
+ * engine/lib/elgglib.php: Refs #964: Correct detection of type.
+
+ * version.php: Version bump
+
+ * engine/lib/system_log.php: Refs #328: Documentation tweak.
+
+ * engine/lib/elgglib.php: Refs #964: Tidied plugin hook into framework
+ function, changed hook to entity:annotate.
+
+2009-06-16 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, version.php: Marcus Povey 20090616: * Closes #964:
+ Introduces a plugin hook 'annotations:view', $entity_class
+ (object/user/group/site) called elgg_view_entity on FULL view. This lets you
+ return annotations to an entity and control the order in which they're
+ displayed. Existing views remain un-effected but should probably be
+ retrofitted. * Version bump.
+
+ * engine/lib/system_log.php: Bugfix to archive logs sql
+
+2009-06-14 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/input/urlshortener.php: URL shortener view.
+
+ * htaccess_dist: Actions rewrite rule will now match against numbers as well
+ as letters.
+
+ * version.php: Version bump
+
+ * mod/thewire/views/default/thewire/forms/add.php: Call out to a url
+ shortner if one is available, through the use of the input/urlshortner view.
+
+2009-06-12 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * version.php: Version bump
+
+ * engine/lib/filestore.php, engine/lib/users.php: Refs #1041: * Speculative
+ fix, extended blacklist of invalid characters for user signup * Mapping some
+ filestore matrix characters (notable '.') to a safe char
+
+ * engine/lib/filestore.php, languages/en.php: Refs #1041: Extra debug
+
+2009-06-11 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php: Block URL unsafe characters from username
+
+2009-06-10 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/cache.php: File cache attempts to create directory if it is not
+ present.
+
+2009-06-08 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/mb_wrapper.php, mod/thewire/start.php: * Introducing substr
+ wrapper function * Wire strips tags (Closes #1045)
+
+2009-06-05 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/mb_wrapper.php, engine/lib/metadata.php,
+ engine/lib/metastrings.php, search/index.php, version.php: Closes #639: *
+ Metastrings can be searched either case sensitive or insensitive modes. *
+ Tags now have case lowered in a UTF8 safe way (requires mbstring support). *
+ Introducing mb_wrapper.php containing multibyte wrapper functions. * Version
+ bump. * Introduces #1043 for consideration.
+
+ * engine/lib/actions.php, engine/lib/pagehandler.php: Close #1040: Limited
+ explode on action and page handler.
+
+2009-06-04 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/input/checkboxes.php: Closes #1037: Removed double pasting
+
+2009-06-04 kevin <kevin@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/js/upload_js.php: Changed a variable name that IE did not
+ like.
+
+2009-06-04 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/metadata.php: Closes #998 : Operator selection on get by
+ metadata multi
+
+2009-06-02 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/database.php: Removed some error messages
+
+2009-05-29 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/actions.php: Option to suppress visible errors in token
+ validation code.
+
+2009-05-29 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/upload/upload_form_content.php: hashed out folders view
+
+2009-05-28 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/pagehandler.php: Closes #1035: Page handler now urldecodes
+ input, necessary as vars are extracted from request_uri and not $_REQUEST
+ (which is automatically decoded)
+
+ * engine/lib/group.php: Fixed some typos in group search
+
+ * languages/en.php: Group search language correction
+
+ * languages/en.php, search/groups.php: Group search language correction
+
+ * views/default/user/search/finishblurb.php: Refs #965: Correct some search
+ links.
+
+ * views/default/group/search/finishblurb.php,
+ views/default/user/search/finishblurb.php: Refs #965: Correct some search
+ links.
+
+ * engine/lib/entities.php, engine/lib/search.php, search/index.php,
+ version.php: Refs #965: Search now correctly using page handler to make it
+ easier to replace.
+
+ * views/default/page_elements/elgg_topbar.php: Refs #965: Topbar search now
+ pointing at correct url.
+
+ * languages/en.php, views/default/page_elements/elgg_topbar.php: Closes
+ #805: Top bar search now internationalised. Refs #965
+
+2009-05-27 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php, engine/lib/metadata.php: Delete event now
+ triggered on metadata and annotation delete
+
+ * version.php: Version bump
+
+ * engine/lib/sessions.php: Admin shortcut flag set on login as well as init
+
+2009-05-27 kevin <kevin@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/filestore.php: Removed plugin-specific references from
+ file_display_thumbnail and file_add_to_folders.
+
+2009-05-22 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/database.php: Refs #965: Allowing upgrades to be loaded from
+ other locations.
+
+ * engine/lib/group.php, engine/lib/users.php, engine/schema/mysql.sql,
+ engine/schema/upgrades/2009052201.sql, languages/en.php, search/groups.php,
+ version.php, views/default/group/search/finishblurb.php,
+ views/default/group/search/startblurb.php: Closes #1030: Group title and
+ description search added, refs #965
+
+ * engine/lib/users.php: Closes #1031: Restored wildcard as it didn't appear
+ that slow.
+
+2009-05-21 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/captcha/views/default/input/captcha.php: captcha layout tweak
+
+2009-05-19 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * version.php: Version bump
+
+ * engine/lib/database.php: Refs #1027: Introducing
+ $CONFIG->db_disable_query_cache which allows disabling of query cache for
+ implementation in CLI mode
+
+ * engine/lib/actions.php: Closes #1026: Removed "@" from include statement
+
+2009-05-18 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/access.php: Closes #1025: Using the correct variable.
+
+2009-05-14 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * version.php: Version bump
+
+ * views/rss/annotation/default.php, views/rss/group/default.php,
+ views/rss/object/default.php, views/rss/pageshells/pageshell.php,
+ views/rss/user/default.php: Closes #646: GeoRSS support added to Locatable
+ objects with coordinates on RSS feeds
+
+ * views/rss/annotation/default.php, views/rss/group/default.php,
+ views/rss/object/default.php, views/rss/pageshells/pageshell.php,
+ views/rss/user/default.php: Closes #1024: Added call to views which allow
+ extensions to be made.
+
+ * views/rss/annotation/default.php, views/rss/group/default.php,
+ views/rss/object/default.php, views/rss/pageshells/pageshell.php: Making use
+ of the Dublin Core extensions to provide owner information in RSS feeds
+
+ * engine/lib/location.php, engine/schema/mysql.sql,
+ engine/schema/upgrades/2009051401.sql, version.php: Fixed geocode stuff +
+ version bump
+
+2009-05-13 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * version.php: Version bump
+
+ * mod/diagnostics/languages/en.php, mod/diagnostics/start.php,
+ mod/diagnostics/views/default/diagnostics/test.php,
+ .../views/default/diagnostics/testresult.php: Closes #1009: Diagnostics unit
+ test with example
+
+ * engine/lib/testing.php, mod/diagnostics/index.php,
+ mod/diagnostics/languages/en.php, mod/diagnostics/start.php,
+ mod/diagnostics/testreport.php, mod/diagnostics/unittester.php,
+ .../views/default/diagnostics/runalltests.php,
+ mod/diagnostics/views/default/diagnostics/test.php,
+ .../views/default/diagnostics/testresult.php: Refs #1009: Enhancements to
+ diagnostics tool to use the test framework.
+
+ * engine/lib/testing.php: Refs #1009: Changed the method tests are
+ performed.
+
+ * engine/lib/testing.php: Refs #1009: Simple test framework outline added.
+
+2009-05-12 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/system_log.php: Closes #1003: Using more efficient query
+
+ * engine/lib/river.php, version.php: Removed deprecated river library +
+ version bump
+
+ * engine/lib/actions.php: Closes #749: Warning message on missing token.
+
+2009-05-11 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/actions/addtogroup.php: Closes #944: Changed owner check to a
+ canEdit check on the group.
+
+ * engine/lib/river.php: Deprecated old river code
+
+ * engine/lib/system_log.php, version.php: Closes #1010: Log event now called
+ on an event of its own, this permits plugins to add additional logging or
+ replace the logging method altogether. This is only possible now that the
+ old river code has been replaced.
+
+ * engine/lib/version.php: Refs #965 & #967: Event triggered on upgrade,
+ allowing easier integration with plugins.
+
+ * views/default/spotlight/default.php: Closes #1017: Div no longer closed
+ early.
+
+ * views/default/page_elements/elgg_topbar.php: Closes #1016: Image tag
+ closed
+
+ * version.php: Version bump
+
+ * mod/captcha/start.php: Captcha list can now be extended by other plugins
+
+2009-05-08 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/thewire/start.php: Hard limit to string lengths.
+
+ * mod/captcha/fonts/Liberation_serif_License.txt: Added font licence, refs
+ #1011
+
+ * actions/systemsettings/install.php, engine/lib/upgrades/2009050801.php,
+ mod/captcha/backgrounds/bg1.jpg, mod/captcha/backgrounds/bg2.jpg,
+ mod/captcha/backgrounds/bg3.jpg, mod/captcha/backgrounds/bg4.jpg,
+ mod/captcha/backgrounds/bg5.jpg, mod/captcha/captcha.php,
+ mod/captcha/fonts/1.ttf, mod/captcha/languages/en.php,
+ mod/captcha/manifest.xml, mod/captcha/start.php,
+ mod/captcha/views/default/captcha/css.php,
+ mod/captcha/views/default/input/captcha.php, version.php: Closes #1011: Added
+ basic captcha support.
+
+ * actions/systemsettings/install.php: System default plugins now accepts
+ array as well as CSV
+
+ * views/default/account/forms/forgotten_password.php: Refs #1011: Correctly
+ CSSed and now using captcha if available
+
+2009-05-07 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * version.php: Version bump
+
+ * views/default/account/forms/register.php, views/default/input/captcha.php:
+ Closes #983: Introducing input/captcha view, use wherever a captcha is
+ required - override with plugins and use the actions hook to do additional
+ validation!
+
+ * engine/lib/relationships.php: Refs #975: Get entities from metadata and
+ relationship now behaves as expected
+
+2009-05-05 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Closes #994: elgg_view_exists will now check to
+ see if a view exists by dint of being extended.
+
+ * engine/lib/access.php, engine/lib/elgglib.php: Removing spurious error log
+ messages
+
+ * mod/reportedcontent/actions/add.php,
+ mod/reportedcontent/actions/archive.php,
+ mod/reportedcontent/actions/delete.php: Closes #725: Typo corrected.
+
+ * languages/en.php, mod/riverdashboard/languages/en.php,
+ .../views/default/riverdashboard/welcome.php,
+ views/default/basic_elements/welcome.php,
+ views/default/welcome/logged_in.php: Closes #950: Fixed missing translations.
+
+ * mod/riverdashboard/languages/en.php,
+ .../views/default/riverdashboard/welcome.php: Closes #1004: Welcome no longer
+ hard coded.
+
+ * version.php: Version bump
+
+ * engine/lib/entities.php: Closes #1007: Private data now removed on entity
+ deletion.
+
+ * engine/lib/users.php: Closes #1008: Fixed typo
+
+2009-05-04 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/languages.php: Closes #824: Test variable to prevent error
+ message in log.
+
+2009-05-01 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php: Closes #1002: Committed missing variable code
+
+ * UPGRADE.txt: Test
+
+ * UPGRADE.txt: Test
+
+2009-04-29 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * UPGRADE.txt: Closes #1001: This is a test
+
+ * UPGRADE.txt: Refs #4: This is a test
+
+ * UPGRADE.txt:
+
+ * UPGRADE.txt:
+
+ * UPGRADE.txt: Test
+
+ * UPGRADE.txt: Test
+
+ * UPGRADE.txt: Test
+
+ * UPGRADE.txt: Test
+
+ * UPGRADE.txt: TEst
+
+ * UPGRADE.txt: Test
+
+ * UPGRADE.txt: Removed test
+
+ * UPGRADE.txt: Test
+
+2009-04-27 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php: Closes #927: Minimum user length no longer hard
+ coded.
+
+ * engine/lib/relationships.php: Closes #975: Now possible to search by
+ metadata and relationship
+
+ * engine/lib/users.php: Closes #943: Event triggered when banning or
+ unbanning a user.
+
+2009-04-24 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * version.php: Version bump
+
+ * mod/groups/actions/edit.php,
+ mod/groups/views/default/forms/groups/edit.php: Added security token to group
+ edit form
+
+ * views/default/input/form.php, views/default/input/securitytoken.php:
+ Introducing input/securitytoken as an intermediate step for form conversion.
+
+ * mod/groups/actions/edit.php, mod/groups/languages/en.php,
+ mod/groups/views/default/forms/groups/edit.php: Closes #969: Admin option to
+ allow the setting of certain access controls on a group
+
+ * actions/useradd.php, engine/lib/users.php: Closes #856: Admin created
+ users are no longer created as being owned by the admin
+
+2009-04-23 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/languages/en.php: Refs #969: Added admin menu option for
+ enabling private groups
+
+ * mod/groups/views/default/settings/groups/edit.php: Refs #969: Added admin
+ menu option for enabling private groups
+
+ * engine/lib/group.php: Closes #980: group_gatekeeper() now has an admin
+ override if the admin is logged in
+
+ * simplecache/view.php: Closes #989: Forces regenerate on next refresh when
+ cache file is missing
+
+2009-04-22 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php, engine/lib/metadata.php, engine/lib/users.php:
+ Deleting correct data + using correct tables
+
+ * engine/lib/annotations.php, engine/lib/entities.php,
+ engine/lib/metadata.php, engine/lib/users.php: Closes #957: Annotations and
+ metadata owned by a deleted user are now also deleted.
+
+ * languages/en.php, mod/groups/views/default/forum/topicposts.php,
+ .../views/default/object/groupforumtopic.php: Closes #957: Groups topics now
+ handle deleted users, I recommend that people look at what I've done and
+ handle deleted users in a similar way in their plugins.
+
+2009-04-21 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/sessions.php: Belts and braces checking on isloggedin()
+
+2009-04-21 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/canvas/layouts/sidebar_boxes.php: an extra view to extend,
+ added to sidebar boxes
+
+2009-04-17 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/kses/manifest.xml: Refs #833: Added manifest
+
+ * actions/systemsettings/install.php, engine/lib/input.php,
+ engine/lib/upgrades/2009041701.php, mod/kses/start.php,
+ mod/kses/vendors/kses/AUTHORS, mod/kses/vendors/kses/COPYING,
+ mod/kses/vendors/kses/ChangeLog, mod/kses/vendors/kses/README,
+ mod/kses/vendors/kses/TODO,
+ mod/kses/vendors/kses/docs/attribute-value-checks,
+ mod/kses/vendors/kses/docs/hooks,
+ mod/kses/vendors/kses/docs/stripping-everything,
+ mod/kses/vendors/kses/docs/supported-formats,
+ .../vendors/kses/docs/whitelisted-url-protocols,
+ mod/kses/vendors/kses/examples/filter.php,
+ mod/kses/vendors/kses/examples/test.php, mod/kses/vendors/kses/kses.php,
+ mod/kses/vendors/kses/oop/oop.kses.changelog.txt,
+ mod/kses/vendors/kses/oop/oop.simple.api.txt,
+ mod/kses/vendors/kses/oop/php4.class.kses.php,
+ mod/kses/vendors/kses/oop/php5.class.kses.php,
+ mod/kses/vendors/kses/oop/test.oop.kses.php, vendors/kses/AUTHORS,
+ vendors/kses/COPYING, vendors/kses/ChangeLog, vendors/kses/README,
+ vendors/kses/TODO, vendors/kses/docs/attribute-value-checks,
+ vendors/kses/docs/hooks, vendors/kses/docs/stripping-everything,
+ vendors/kses/docs/supported-formats,
+ vendors/kses/docs/whitelisted-url-protocols,
+ vendors/kses/examples/filter.php, vendors/kses/examples/test.php,
+ vendors/kses/kses.php, vendors/kses/oop/oop.kses.changelog.txt,
+ vendors/kses/oop/oop.simple.api.txt, vendors/kses/oop/php4.class.kses.php,
+ vendors/kses/oop/php5.class.kses.php, vendors/kses/oop/test.oop.kses.php,
+ version.php: Closes #833: Kses now built as module
+
+ * engine/lib/input.php: Reverted last
+
+2009-04-17 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/input.php: small tweak to kses input, for now.
+
+2009-04-17 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/input.php: Removed style on code
+
+ * engine/lib/input.php: Removed columns
+
+ * engine/lib/input.php: Slightly more draconian kses rules
+
+ * engine/lib/plugins.php: Closes #982: Object limit maximum raised.
+
+2009-04-16 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/filestore.php: Moved old file mime type guesser back to files
+ plugin so that there are no conflicts
+
+2009-04-16 kevinjardine <kevinjardine@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/filestore.php: Passed container_guid to any quota plugins and
+ removed duplicate function definition.
+
+ * engine/lib/filestore.php: Added file_get_general_file_type() function
+
+2009-04-15 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/filestore.php, version.php: Centralised mimetype function
+
+ * engine/lib/filestore.php, views/default/js/upload_js.php,
+ views/default/upload/upload_form_content.php: Rolled in Kevin's file store
+ enhancements and upload code.
+
+ * version.php: Version bump
+
+ * engine/lib/pageowner.php, languages/en.php: Error logged on page forward
+ due to missing page owner.
+
+2009-04-14 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/thewire/graphics/river_icon_thewire.gif,
+ .../views/default/thewire/activity_view.php: link to the wire added to bottom
+ of latest wire post box on riverdashboard page
+
+2009-04-11 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/userdetails.php: small profile custom
+ fields tweak
+
+2009-04-10 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/thewire/start.php: The Wire incoming SMS now uses the default access
+ level.
+
+ * mod/thewire/start.php: Moving the wire to use $SESSION instead of
+ $_SESSION
+
+ * engine/lib/elgglib.php: Removing viewtype autoforward, because it broke
+ installs.
+
+2009-04-10 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/output/actionurl.php, views/default/output/confirmlink.php,
+ views/default/output/url.php: Rolled token into url and confirmlink
+
+ * engine/lib/tags.php: Closes #977: get_tags now functional for entities
+ without subtypes.
+
+2009-04-09 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/output/actionurl.php: Introducing actionurl.php (Refs #749)
+
+ * engine/lib/pageowner.php: Forward user if a page owner is inaccessible
+ (Refs #969)
+
+ * engine/lib/elgglib.php: Non-default view types now preserved when
+ forwarding.
+
+ * engine/lib/metadata.php: Closes #974: Owner_guid may now be an array
+
+2009-04-08 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/site/update_basic.php, engine/lib/configuration.php,
+ engine/lib/elgglib.php, languages/en.php, views/default/settings/system.php:
+ Close #968: View path cache can now be turned on and off
+
+ * engine/lib/elgglib.php: Removed unused experimental cache functions
+
+ * actions/admin/plugins/reorder.php, engine/lib/plugins.php: Refs #946:
+ Improved documentation on enable/disable/reorder plugin commands
+
+ * actions/admin/plugins/disable.php, actions/admin/plugins/disableall.php,
+ actions/admin/plugins/enable.php, actions/admin/plugins/enableall.php,
+ actions/admin/plugins/reorder.php, engine/lib/elgglib.php,
+ engine/lib/plugins.php, upgrade.php: Refs #968 & #946: Tidied filepath cache
+ stuff by placing them in function calls.
+
+ * mod/profile/views/default/profile/userdetails.php,
+ views/default/admin/main.php, views/default/admin/plugins.php,
+ views/default/admin/site.php, views/default/admin/user.php,
+ views/default/canvas/layouts/widgets.php,
+ views/default/messages/errors/error.php,
+ views/default/messages/exceptions/exception.php,
+ views/default/messages/messages/message.php,
+ views/default/usersettings/main.php, views/default/usersettings/plugins.php:
+ Refs #963: Autop changed to longtext on standard views
+
+ * engine/lib/database.php, version.php: Added callback support to
+ get_data_row()
+
+2009-04-07 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/tags.php: Closes #937: Added time constraints to the tag
+ retrieval query.
+
+2009-04-07 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * version.php: The inclusion of a new library merits a new internal version
+ number.
+
+2009-04-07 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/riverdashboard/languages/en.php,
+ .../views/default/riverdashboard/newestmembers.php: Closes #932: Recent
+ members string no longer hard coded
+
+2009-04-07 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * vendors/jquery/jquery.form.js, views/default/page_elements/header.php:
+ jQuery Form plugin, welcome to Elgg Core.
+
+2009-04-02 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/thewire/views/default/object/thewire.php: Closes #949: Method in "via
+ {{Method}}" now wrapped in an elgg_echo
+
+ * engine/lib/plugins.php: Closes #945: enable/disable_plugin now updates
+ $ENABLED_PLUGINS_CACHE
+
+2009-03-31 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/uservalidationbyemail/manifest.xml, version.php: Version bump
+
+ * engine/lib/metadata.php, engine/lib/users.php,
+ mod/uservalidationbyemail/start.php: Closes #896: Error thrown if user not
+ validate. Metadata physically removed rather than simply blanked when
+ validation is requested. Note: update_metadata no longer seems to support
+ anonymous metadata which is likely to have knock on issues elsewhere...
+
+2009-03-30 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/icondirect.php: Closes #916: Icondirect now using multibyte
+ safe str_split code from filestore.php
+
+ * version.php: Version bump
+
+ * engine/lib/database.php: Closes #875: Using db link
+
+ * engine/lib/notification.php: Closes #889: Decoding html entities from
+ messages before stripping tags
+
+ * engine/lib/elgglib.php: Closes #897: Memcache datalists correctly saved on
+ first load
+
+ * views/default/css.php: Closes #903: Large <pre> and <code> blocks no
+ longer break page shell
+
+ * mod/riverdashboard/index.php: Closes #899: River dash ajax now UTF-8
+
+ * views/default/page_elements/owner_block.php: Closes #914: Removed odd line
+
+2009-03-30 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/pageowner.php: Context can now be assigned by defining a
+ constant in the page.
+
+2009-03-30 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/thewire/actions/add.php: Refs #926: Private wire posts get bumped to
+ 'logged in'
+
+2009-03-26 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/languages/en.php: small lang tweak
+
+ * languages/en.php, .../views/default/profile/editdefaultprofile.php: small
+ lang tweak
+
+2009-03-25 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/edittopic.php: Closes #930: addtopic -> edittopic
+
+2009-03-25 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/widgets/river_widget/view.php: small tweak
+
+ * .../views/default/river/object/thewire/create.php: river view tweak for
+ the wire
+
+2009-03-18 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/languages.php: Different assignment.
+
+ * engine/lib/users.php: Disposed of unnecessary $result variables.
+
+ * engine/lib/api.php: Closes #844: API parameter test logic improved
+
+ * engine/lib/languages.php: Closes #883: Using different operator logic so
+ that plugins can replace existing translation entries.
+
+ * mod/groups/actions/addtogroup.php: Closes #893: Using ->join() method
+ instead to ensure that event is triggered.
+
+2009-03-13 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * README.txt, version.php: Oh hai Elgg 1.5
+
+ * actions/user/passwordreset.php, actions/user/requestnewpassword.php,
+ .../actions/email/confirm.php, version.php: Closes #873: Mail/password
+ reset/confirm actions forward to wwwroot rather than ref. Version bump.
+
+ * engine/lib/elgglib.php: Fixes #877: Minor typo addressed. Note: This
+ function is currently not used.
+
+2009-03-12 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/systemsettings/install.php, version.php: Fixed typo in default
+ plugins init + version bump
+
+2009-03-11 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * version.php: Version bump
+
+ * engine/lib/notification.php: Provide a From email address workaround for
+ those with windows servers. See issue http://bugs.php.net/bug.php?id=28038
+
+2009-03-11 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/start.php: Profile user icon URL fix.
+
+2009-03-11 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, engine/lib/group.php, engine/lib/objects.php,
+ engine/lib/sites.php, engine/lib/users.php, languages/en.php, version.php:
+ Closes 868: Fixes regression introduced in [3119]. Version number bumped.
+
+2009-03-11 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Added a clause that will detect if insert_data
+ returned 0 rather than false, and returns 'true' in this case. Fixes #867
+
+ * views/default/page_elements/header.php: Javascript loaded using a safer
+ URL scheme. Fixes #862
+
+2009-03-10 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/languages/en.php, .../views/default/groups/group_sort_menu.php:
+ missing lang strings fixed
+
+ * mod/groups/languages/en.php,
+ mod/groups/views/default/groups/grouplisting.php: missing strings added
+
+2009-03-10 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: left column sidebar background color changed for
+ consistency with other pages (props to Cash for spotting it)
+
+2009-03-09 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/api.php: Minor api tweak
+
+2009-03-09 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * README.txt: Changing version number
+
+ * version.php: Elgg 1.5 RC2. Hi!
+
+2009-03-09 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * htaccess_dist: Closes #823: Root cause was that the Headers decl requires
+ mod_headers to be installed (and Apache had a very unhelpful failure mode for
+ instances when it wasn't). The Header def has now been IfModuled out.
+ mod_headers is still recommended for correct functioning across proxies.
+
+2009-03-09 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: openID river rules removed
+
+2009-03-09 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * htaccess_dist: Refs #823: Mod_deflate htaccess def now disabled by
+ default.
+
+ * mod/groups/actions/edit.php: Admins can now change group profile picture.
+
+2009-03-09 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/start.php: Banned users always have default icons.
+
+ * mod/riverdashboard/languages/en.php, mod/riverdashboard/start.php: Some
+ tweaks to river dashboard, including proper language usage.
+
+ * engine/lib/notification.php: Banned users no longer get notifications
+
+ * actions/register.php, engine/lib/users.php: User validation no longer
+ occurs on first install
+
+ * engine/lib/filestore.php: Icons are now correctly resized
+
+2009-03-09 kevinjardine <kevinjardine@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/actions/edit.php, mod/groups/start.php,
+ mod/groups/views/default/forms/groups/edit.php: Groups now support
+ add_group_tool_option so that any group tool can be toggled on or off via the
+ group's edit form.
+
+ * engine/lib/group.php: Introducing the add_group_tool_option function.
+
+2009-03-09 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/crontrigger/manifest.xml, mod/diagnostics/manifest.xml,
+ mod/garbagecollector/manifest.xml, mod/groups/manifest.xml,
+ mod/logbrowser/manifest.xml, mod/logrotate/manifest.xml,
+ mod/notifications/manifest.xml, mod/profile/manifest.xml,
+ mod/reportedcontent/manifest.xml, mod/riverdashboard/manifest.xml,
+ mod/thewire/manifest.xml, mod/uservalidationbyemail/manifest.xml: Bumped
+ version numbers on bundled plugins
+
+2009-03-08 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: css river rule added for openID user updating
+ profile
+
+2009-03-07 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * version.php: Version bump
+
+ * mod/profile/views/default/profile/userdetails.php: Closes #851: Fixed
+ regression. It is now possible for an admin to edit another user's profile
+ consistent with 1.2
+
+ * _css/css.php, _css/js.php: Closes #844 & #845: Override is now no longer
+ forced on and so will now obey view cache settings.
+
+ * mod/groups/actions/invite.php, mod/groups/languages/en.php,
+ mod/groups/start.php, mod/groups/views/default/forms/groups/invite.php:
+ Closes #843: Introducing intermediary invite action to establish invite
+ relationship but ask a user to join
+
+ * version.php: Version bump
+
+ * engine/lib/users.php: Closes #841: User request for password changes now
+ functional.
+
+2009-03-06 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: one column canvas padding adding
+
+2009-03-06 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/objects.php: Very minor comment tweak
+
+ * engine/lib/group.php, engine/lib/objects.php, engine/lib/sites.php,
+ engine/lib/users.php: Reversed delete procedure on entities, parent now
+ checked first before sub deleted. Any stubs left over will be handled by the
+ garbage collector.
+
+2009-03-06 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: river icon added for openID friend, blockquote
+ style tweaked, elgg horizontal nav bar improved
+
+2009-03-06 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * version.php: Bumped version number corresponding to the change
+
+ * engine/lib/entities.php: Added garbage collector hook to clear up orphaned
+ sub table entities.
+
+ * mod/garbagecollector/start.php: Changed 'system','gc' to 'gc','system'
+
+2009-03-06 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/start.php: Fixed icon overrides
+
+ * engine/lib/river2.php: If you don't have any friends, the river no longer
+ returns all on the 'friends' view. Fixes #839
+
+ * mod/profile/views/default/profile/listing.php: Removed banned listing
+
+ * mod/profile/index.php: Banned profiles are now hidden
+
+ * mod/profile/views/default/profile/userdetails.php: Fixed user profile ban
+ message
+
+2009-03-06 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * version.php: Version number bump
+
+ * engine/lib/languages.php: Closes #838: Missing set from static var.
+
+2009-03-06 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/json/riverdashboard/container.php,
+ views/json/river/item/list.php: Improved JSON version of the dashboard
+
+2009-03-06 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: missing river entry style added
+
+2009-03-05 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/statistics.php: Online users list works properly
+
+ * languages/en.php, views/default/annotation/annotate.php: Fixed generic
+ river comment view
+
+ * mod/riverdashboard/languages/en.php: Corrected a poorly formatted text
+ string
+
+ * mod/thewire/manifest.xml: New manifest description for the wire.
+
+ * version.php: Elgg 1.5 RC1 is gearing up to leave the building.
+
+ * mod/apiadmin/actions/generate.php, mod/apiadmin/actions/revokekey.php,
+ mod/apiadmin/index.php, mod/apiadmin/languages/en.php,
+ mod/apiadmin/manifest.xml, mod/apiadmin/start.php,
+ .../views/default/apiadmin/forms/add_key.php,
+ mod/apiadmin/views/default/object/api_key.php,
+ mod/guidtool/actions/delete.php, mod/guidtool/export.php,
+ mod/guidtool/format_picker.php, mod/guidtool/import.php,
+ mod/guidtool/index.php, mod/guidtool/languages/en.php,
+ mod/guidtool/manifest.xml, mod/guidtool/start.php, mod/guidtool/view.php,
+ .../views/default/forms/guidtool/export.php,
+ .../views/default/forms/guidtool/format.php,
+ .../views/default/forms/guidtool/import.php,
+ mod/guidtool/views/default/guidtool/gallery.php,
+ mod/guidtool/views/default/guidtool/listing.php,
+ mod/guidtool/views/default/guidtool/profile.php,
+ .../views/default/object/guidtoolwrapper.php: Farewell APIadmin, farewell
+ GUIDtool. We'll see you over in the plugins repo.
+
+ * mod/thewire/actions/add.php: Wire posts now save as default access level
+
+ * mod/thewire/actions/add.php: Wire posts are now default access
+
+ * UPGRADE.txt: Improved upgrade text
+
+ * engine/lib/entities.php: Error in subtype detection
+
+2009-03-05 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/riverdashboard/newestmembers.php: a small layout tweak
+
+2009-03-05 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, htaccess_dist: Fixed search RSS
+
+2009-03-05 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * version.php: Bumped version
+
+ * mod/crontrigger/start.php: Surpressing cron output
+
+2009-03-04 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: tiny rule added to make widget layout consistent
+ across all widgets
+
+2009-03-04 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/notification.php: Private items never trigger notifications
+
+ * engine/lib/entities.php: Access fix
+
+ * engine/lib/entities.php: Let's go with the most obvious application of
+ this.
+
+ * engine/lib/entities.php, engine/lib/river2.php: River access issues
+
+ * engine/lib/river2.php, languages/en.php,
+ views/default/river/item/noaccess.php: Stopgap for when you can no longer
+ view river items.
+
+ * views/default/input/button.php: Button src isn't always required.
+
+ * mod/notifications/languages/en.php: Text changes to hopefully make friends
+ notification settings a little less confusing
+
+ * CONTRIBUTORS.txt: Addition to the contributors file
+
+2009-03-04 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/thewire/views/default/thewire/css.php: css tweak
+
+2009-03-04 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/forms/guidtool/export.php,
+ .../views/default/forms/guidtool/import.php: GUIDtool now uses
+ input/plaintext
+
+ * engine/lib/access.php: Access modification - owners can always see their
+ own content
+
+ * views/foaf/user/default.php: Correction to FOAF URL
+
+ * views/foaf/user/default.php: FOAF URL fix
+
+ * views/foaf/page_elements/contentwrapper.php: FOAF contentwrapper
+
+2009-03-04 kevinjardine <kevinjardine@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/notification.php: Changed notification to use
+ has_access_to_entity to move all access control checks to a single mechanism
+
+2009-03-04 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/thewire/views/default/thewire/css.php: added rule to prevent character
+ remaing field focus on thewire individual page
+
+2009-03-04 kevinjardine <kevinjardine@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/access.php: Added has_access_to_entity function
+
+ * engine/lib/access.php: Added the ability to optionally specify the user to
+ get_access_sql_suffix
+
+2009-03-04 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/rss/group/default.php, views/rss/object/default.php,
+ views/rss/river/item/list.php: URL sanitation for RSS feeds
+
+ * mod/groups/views/default/groups/contentwrapper.php: Removing extra quotes
+
+ * views/json/page_elements/contentwrapper.php: JSON contentwrapper view
+
+ * engine/lib/elgglib.php, mod/groups/all.php, mod/groups/edit.php,
+ mod/groups/groupprofile.php,
+ mod/groups/views/default/groups/contentwrapper.php,
+ mod/groups/views/rss/groups/contentwrapper.php,
+ views/default/page_elements/contentwrapper.php,
+ views/rss/page_elements/contentwrapper.php: Added contentWrapper view
+
+2009-03-04 kevinjardine <kevinjardine@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/query.php: AccessControlQueryComponent::__toString changed to
+ use get_access_sql_suffix
+
+2009-03-04 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/guidtool/export.php, mod/guidtool/format_picker.php,
+ mod/guidtool/import.php, mod/guidtool/index.php,
+ mod/guidtool/languages/en.php, mod/guidtool/start.php: Moved GUID tool to
+ admin menu.
+
+2009-03-04 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/riverdashboard/css.php: added a rule to prevent
+ characters remaining field on thewire receiving focus/highlighting
+
+2009-03-04 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/rss/river/item/list.php: Title fix.
+
+ * engine/lib/elgglib.php, views/rss/river/item/list.php: Fixed river RSS
+ views
+
+2009-03-04 kevinjardine <kevinjardine@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/tags.php: Commented out a no longer needed line of code
+
+ * engine/lib/tags.php: get_tags now uses get_access_sql_suffix for access
+ control.
+
+2009-03-04 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/rss/river/item/list.php: Ampersand fix
+
+ * engine/lib/elgglib.php, .../views/rss/riverdashboard/container.php,
+ views/rss/river/item/list.php: Improvements to elgg_view, plus river
+ dashboard RSS feed
+
+ * mod/groups/start.php: The 'manage join requests' link doesn't show up if
+ the current group doesn't have public membership.
+
+2009-03-03 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, mod/profile/icon.php, mod/profile/icondirect.php,
+ simplecache/view.php: Moving to a smaller chunk size.
+
+2009-03-03 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * version.php: Bumping version number
+
+2009-03-03 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/icon.php: Profile icons come in chunks.
+
+2009-03-03 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, simplecache/view.php: Echoing the large output
+ buffer in chunks
+
+2009-03-03 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/icon.php, mod/profile/icondirect.php, simplecache/view.php:
+ Splitting output into chunks.
+
+ * htaccess_dist: Improved .htaccess
+
+2009-03-03 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Stub for experimental view caching (disabled)
+
+2009-03-03 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _css/css.php, _css/js.php: Far future expires header
+
+2009-03-03 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Using faster array concatination
+
+ * views/default/input/button.php: Closes #832: Internal name now handled
+
+2009-03-03 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: $vars is once again populated with session data
+
+2009-03-03 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Removed utterly pointless lines
+
+ * engine/lib/languages.php: Current language now cached per process in
+ elgg_echo.
+
+ * engine/lib/plugins.php: Minor tweaks
+
+ * engine/lib/elgglib.php: Minor tweaks
+
+ * engine/lib/languages.php: Removed directory test to languages since it's
+ probably fair to assume that this isn't going to be the case
+
+2009-03-03 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * simplecache/view.php: Content length on the simplecache.
+
+2009-03-03 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: tiny amendment to owner-block icon spacing
+
+2009-03-03 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _css/js.php: JS override.
+
+ * simplecache/view.php: Fix for previous.
+
+2009-03-03 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/languages.php: Removing the stupidly slow array_merge from lang
+ load code
+
+2009-03-03 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _css/css.php, simplecache/view.php: A quiet little CSS override update.
+
+2009-03-03 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Made get_library_files non-recursive and removed
+ is_dir test... makes the func <1% of total execution time
+
+2009-03-03 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, engine/lib/group.php, engine/lib/objects.php,
+ engine/lib/sites.php, engine/lib/users.php: Removed calls to the deprecated
+ entity cache
+
+2009-03-03 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/crontrigger/start.php: Suppressing output on cron trigger
+
+2009-03-03 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/pagehandler.php: Getting rid of needless double-trimming.
+
+2009-03-03 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/plugins/disable.php, actions/admin/plugins/disableall.php,
+ actions/admin/plugins/enable.php, actions/admin/plugins/enableall.php,
+ actions/admin/plugins/reorder.php, engine/lib/elgglib.php,
+ engine/lib/plugins.php, upgrade.php: Closes #831: Plugin view location is now
+ cached in a file in dataroot and is invalidated on upgrade and plugin
+ enable/disable/reorder. This means that views no longer have to be discovered
+ on boot - reducing file IO from crazy amounts to 1. This also helps make
+ adding new plugins a linear event.
+
+2009-03-03 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * simplecache/view.php: Eliminating the content-length header
+
+2009-03-03 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * htaccess_dist: Refs #830: Minor tweak
+
+ * engine/lib/cache.php: Cache delete now functional
+
+2009-03-02 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/cache.php: Limitless queries now supported
+
+2009-03-02 kevinjardine <kevinjardine@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/start.php, mod/groups/views/default/groups/forum_latest.php:
+ Changed group forums to default to enabled.
+
+ * engine/lib/access.php: Changed the order of the access dropdown so that it
+ is in order of increasing restriction (private, friends, logged-in, public).
+
+2009-03-02 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/groups/css.php,
+ .../views/default/object/groupforumtopic.php: discussion list updated for
+ long usernames, and clearing issues fixed for pc
+
+2009-03-02 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/database.php: Corrected unnecessarily patriotic comments.
+
+2009-03-02 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php: Removing duplicate deletion code.
+
+2009-03-02 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/install.php: Minor change to previous.
+
+ * engine/lib/install.php: A different table to check db existence against.
+
+2009-03-02 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/object/groupforumtopic.php: small tweak to change from
+ username to name on discussion
+
+2009-03-01 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/groups/css.php: mac alignment fixed on delete
+ button
+
+ * mod/groups/views/default/groups/css.php,
+ .../views/default/object/groupforumtopic.php: delete discussion button layout
+ tweaked
+
+2009-03-01 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * version.php: Bump
+
+ * engine/lib/input.php, views/default/output/longtext.php: Closes #828:
+ Quite correct - rather tired - arrays are individually trimmed - non-arrays
+ are not. Closes #714: Input filtering now triggers on a plugin hook, this
+ allows plugins to provide other filtering methods than kses (Refs #561).
+
+2009-03-01 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/object/groupforumtopic.php: deleting discussions added
+
+2009-03-01 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/input.php: Closes #828: Array input values now trimmed
+ individually.
+
+2009-03-01 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/thewire/languages/en.php: Wire lang string tweaked
+
+2009-03-01 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/icon_bookmarkthis.gif, _graphics/icon_reportthis.gif: owner
+ block icons background color corrected for new theme
+
+ * .../views/default/riverdashboard/css.php: reply and delete button removed
+ on latest post on riverdashboard
+
+ * mod/groups/views/default/forms/forums/addpost.php,
+ mod/groups/views/default/forms/forums/addtopic.php,
+ .../views/default/forms/forums/edittopic.php,
+ mod/groups/views/default/forum/topicposts.php,
+ .../views/default/reportedcontent/form.php,
+ views/default/comments/forms/edit.php, views/default/css.php: input/longtext
+ and remove editor link layout improved
+
+2009-02-28 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/input.php: Closes #665: Using a bit of preg callback magic to
+ do <wbr> encoding and href encoding in one pass.
+
+ * engine/lib/languages.php: Closes #824: $language is initialised
+
+2009-02-28 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/widgets/river_widget/edit.php: activity widget default
+ tweaked
+
+ * mod/thewire/languages/en.php: the wire lang tweaked
+
+ * mod/thewire/views/default/object/thewire.php: the wire now uses name
+ rather than username
+
+2009-02-28 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/upgrades/2009022701.php: Disabling updateclient on installs as
+ part of upgrade, this is because it is no longer included and can cause
+ problems.
+
+2009-02-28 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/object/groupforumtopic.php: autop removed on fetching
+ group description for list view (to remove extraneous <br />)
+
+ * mod/groups/views/default/groups/forum_latest.php: clearfloat fixed
+
+ * mod/groups/views/default/groups/css.php,
+ .../views/default/object/groupforumtopic.php: groups latest discussion list
+ view timestamp moved/formatted
+
+2009-02-28 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/actions/addtogroup.php: Removed email force from notification
+ emails
+
+2009-02-28 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/groups/css.php: groups widgets layout made
+ consistent
+
+2009-02-27 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: enable/disable mods buttons layout tweaked
+
+2009-02-27 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/riverdashboard/languages/en.php: Corrected capitalisation, added
+ better description to 'add message' link
+
+2009-02-27 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/footer_back.gif, _graphics/friends_picker_arrows.gif,
+ _graphics/icons/default/topbar.png, _graphics/owner_block_back.jpg,
+ _graphics/owner_block_menu_arrow.gif, _graphics/owner_block_menu_dot.gif,
+ _graphics/page_back_linen.gif, _graphics/page_back_linen_shadow.gif,
+ _graphics/skyscraper.gif, _graphics/spotlight_back.gif,
+ _graphics/thewire_speech_bubble.gif, _graphics/toolbar_arrow.png,
+ _graphics/toolbar_arrow_ie.gif, _graphics/tools_over.png,
+ mod/groups/graphics/defaultlarge.gif, mod/groups/graphics/defaultmedium.gif,
+ mod/groups/graphics/defaultsmall.gif, mod/groups/graphics/defaulttiny.gif,
+ mod/groups/views/default/groups/css.php,
+ mod/logbrowser/views/default/logbrowser/css.php,
+ .../views/default/notifications/css.php,
+ mod/profile/graphics/defaultlarge.gif, mod/profile/graphics/defaultlarge.jpg,
+ mod/profile/graphics/defaultmaster.gif,
+ mod/profile/graphics/defaultmaster.jpg,
+ mod/profile/graphics/defaultmedium.gif,
+ mod/profile/graphics/defaultmedium.jpg,
+ mod/profile/graphics/defaultsmall.gif, mod/profile/graphics/defaultsmall.jpg,
+ mod/profile/graphics/defaulttiny.gif, mod/profile/graphics/defaulttiny.jpg,
+ mod/profile/graphics/defaulttopbar.gif,
+ mod/profile/graphics/defaulttopbar.jpg,
+ .../views/default/icon/user/default/large.php,
+ .../views/default/icon/user/default/master.php,
+ .../views/default/icon/user/default/medium.php,
+ .../views/default/icon/user/default/small.php,
+ .../views/default/icon/user/default/tiny.php,
+ .../views/default/icon/user/default/topbar.php,
+ mod/profile/views/default/profile/css.php,
+ .../views/default/reportedcontent/css.php,
+ .../views/default/riverdashboard/css.php,
+ mod/thewire/graphics/thewire_speech_bubble.gif,
+ mod/thewire/views/default/thewire/css.php, views/default/css.php,
+ views/default/js/friendsPickerv1.php, views/default/js/initialise_elgg.php:
+ default theme changed
+
+2009-02-27 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * version.php: Bumped version number
+
+2009-02-27 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/actions/forums/editpost.php,
+ mod/groups/views/default/forum/topicposts.php: forum post edit bug fixed
+
+2009-02-27 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * htaccess_dist: Deflation is now turned off by default because a version of
+ a certain majority-share browser really doesn't like it.
+
+2009-02-27 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/admin/plugins.php: buttons moved
+
+ * views/default/admin/plugins.php: class names added to enable/disable
+ buttons
+
+2009-02-27 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/plugins/disableall.php, actions/admin/plugins/enableall.php,
+ engine/lib/plugins.php, languages/en.php, views/default/admin/plugins.php:
+ Enable all / disable all functionality added
+
+2009-02-27 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/thewire/views/default/widgets/thewire/view.php: set a default num of
+ wire posts to appear on a widget
+
+2009-02-27 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/actions/addtogroup.php,
+ mod/groups/actions/groupskillrequest.php, mod/groups/languages/en.php,
+ mod/groups/membershipreq.php, mod/groups/start.php,
+ .../views/default/groups/membershiprequests.php: Join request management
+ added.
+
+2009-02-27 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/forms/guidtool/export.php,
+ mod/profile/views/default/profile/icon.php, views/default/input/access.php,
+ views/default/input/button.php, views/default/input/checkboxes.php,
+ views/default/input/email.php, views/default/input/hidden.php,
+ views/default/input/longtext.php, views/default/input/password.php,
+ views/default/input/plaintext.php, views/default/input/pulldown.php,
+ views/default/input/radio.php, views/default/input/tags.php,
+ views/default/input/text.php, views/default/input/url.php,
+ views/default/messages/exceptions/exception.php,
+ views/default/output/calendar.php, views/default/output/confirmlink.php,
+ views/default/output/email.php, views/default/output/pulldown.php,
+ views/default/output/tagcloud.php, views/default/output/tags.php,
+ views/default/output/text.php, views/default/output/url.php,
+ views/failsafe/input/button.php, views/failsafe/input/checkboxes.php,
+ views/failsafe/input/hidden.php, views/failsafe/input/text.php,
+ views/failsafe/messages/exceptions/exception.php: Closes #651: I agree,
+ changed to convert both quotes.
+
+2009-02-27 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php: Added 'accept' to the language list
+
+2009-02-27 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/forum/topicposts.php,
+ .../views/default/reportedcontent/listing.php,
+ .../views/default/riverdashboard/sitemessage.php, views/default/css.php,
+ views/default/js/initialise_elgg.php: generic reusable collapsible div added
+ (replacing manifest_file which is solely for admin plugins page)
+
+2009-02-27 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../notifications/subscriptions/collections.php,
+ .../notifications/subscriptions/forminternals.php,
+ .../notifications/subscriptions/groupsform.php,
+ .../notifications/subscriptions/jsfuncs.php,
+ .../notifications/subscriptions/personal.php: Fixed checkboxes on the
+ notification screen.
+
+ * views/default/admin/plugins_opt/plugin.php: Plugin descriptions are now
+ displayed on the tool menu, for better ease of use.
+
+2009-02-27 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/login.php, languages/en.php: Redirect to tools on first admin
+ login.
+
+2009-02-27 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/riverdashboard/newestmembers.php: members box fixed for
+ IE6&7
+
+ * mod/thewire/views/default/object/thewire.php: thewire user icon layout
+ fixed for IE / cross-browser consistency
+
+2009-02-26 kevinjardine <kevinjardine@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/uservalidationbyemail/start.php: Event functions should return true to
+ prevent an event from being halted. Now this one does.
+
+2009-02-26 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/groups/grouplisting.php,
+ mod/groups/views/default/groups/members.php,
+ .../views/default/object/groupforumtopic.php,
+ views/default/canvas/layouts/sidebar_boxes.php: markup fixing / cleanup / ie6
+ fixes
+
+2009-02-26 kevinjardine <kevinjardine@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, engine/lib/widgets.php: Fixes to container
+ permissions and widgets to allow default widgets to work with the Elgg
+ permissions system.
+
+2009-02-26 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * search/index.php: The search endpoint can now be told to go fetch a users'
+ friends.
+
+2009-02-26 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/plugins/disable.php, actions/admin/plugins/enable.php:
+ enable/disable plugin actions now support arrays as parameters
+
+ * mod/groups/actions/addtogroup.php, mod/groups/actions/join.php,
+ mod/groups/actions/joinrequest.php: Closes #801, Refs #277: Group
+ join/request logic altered.
+
+2009-02-26 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/thewire/profile_status.php: broken wire link fixed
+
+2009-02-26 kevinjardine <kevinjardine@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/forum/topicposts.php: Gave each edit box a unique
+ ID
+
+2009-02-26 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/notification.php: Small access tweak for sending notifications.
+
+ * mod/groups/start.php: Fixed duplicate notifications.
+
+ * mod/groups/start.php: Fixed the first-post forum topic notification error.
+ Fixes #816
+
+2009-02-26 kevinjardine <kevinjardine@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/access.php: Added "enemies" code to get_access_sql_suffix. This
+ implements two features: a. a user can prevent another user from seeing any
+ of his content and b. a user can filter out all the content created by
+ another user. There is no interface for this yet, but adding one should be
+ easy with this core support.
+
+2009-02-26 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/thewire/views/default/object/thewire.php,
+ views/default/navigation/pagination.php: markup fixed for cross-browser
+ rendering consistency
+
+2009-02-26 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/riverdashboard/index.php: Fixed pagination when filtering.
+
+2009-02-26 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/admin.php: Closes #822: Action file existed however the action
+ was not registered (previously called directly)
+
+ * account/forgotten_password.php, account/register.php,
+ dashboard/latest.php, engine/lib/elgglib.php, entities/list.php,
+ friends/add.php, friends/collections.php, friends/edit.php,
+ friends/index.php, friends/of.php, index.php, install.php,
+ mod/notifications/groups.php, mod/notifications/index.php,
+ mod/reportedcontent/add.php, mod/riverdashboard/index.php: Closes #807:
+ Removed echo on page_draw()
+
+2009-02-26 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/languages/en.php, mod/groups/views/default/groups/find.php:
+ Corrected bad form action for group tag and made search label a little more
+ specific.
+
+2009-02-25 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/languages.php: Refs #808: Bug was actually fixed by not using
+ empty... register_translations has to be in the wild otherwise install won't
+ load translation.
+
+ * engine/lib/languages.php: Closes #808: Removed register_translation from
+ the wild, now called on boot so that it is always after configuration_init
+
+2009-02-25 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/output/longtext.php: output/longtext now parses URLs.
+
+2009-02-25 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php: small lang tweak
+
+2009-02-25 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/riverdashboard/js.php: Fixed river pagination issue
+
+2009-02-25 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/notifications/languages/en.php: lang file replaced
+
+ * mod/riverdashboard/languages/en.php: missing lang string
+
+2009-02-25 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * version.php: Architectural version number change
+
+2009-02-25 kevinjardine <kevinjardine@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/access.php, engine/lib/elgglib.php, languages/en.php: Added
+ friends access level
+
+ * actions/admin/site/update_basic.php, engine/lib/access.php,
+ engine/lib/users.php, languages/en.php, views/default/settings/system.php:
+ Introduces user default access.
+
+2009-02-25 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * htaccess_dist: Closes #800: Fixes typo
+
+2009-02-25 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../notifications/subscriptions/forminternals.php,
+ views/default/friends/picker.php: Unicode character fix for friends picker.
+ Fixes #281
+
+ * mod/thewire/languages/en.php: SPG fix
+
+ * .../notifications/subscriptions/collections.php,
+ .../notifications/subscriptions/forminternals.php,
+ .../notifications/subscriptions/groupsform.php,
+ .../notifications/subscriptions/personal.php: Removing the jumps on the
+ notification pickers.
+
+ * mod/groups/start.php: Removing the membership requests link for now.
+
+2009-02-24 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/groupprofile.php,
+ mod/groups/views/default/groups/groupprofile.php: Removing an infinite loop
+ in groups.
+
+ * mod/groups/views/default/forms/groups/invite.php: The group invite friends
+ picker now correctly highlights friends' tabs
+
+ * engine/lib/metadata.php: Syntax improvements for the get_metadata
+ functions
+
+ * engine/lib/relationships.php: Fix for previous, including a change to
+ check_entity_relationships that actually returns the relationship object.
+
+ * engine/lib/relationships.php: Introducing the 'delete relationship' event.
+ Fixes #779
+
+ * mod/groups/languages/en.php: Defining grouptopic:blank; fixes #809
+
+ * engine/lib/notification.php: Notifications with nonexistent handlers no
+ longer throw an exception; they now write to the error log. Refs #754
+
+ * engine/lib/sessions.php: The session initialisation order is slightly
+ altered to allow for language setup on the index page. Fixes #803
+
+ * mod/groups/start.php: Group topics now have a friendlier URL. This will
+ help a lot for notifications.
+
+ * engine/lib/notification.php: Fixed error in notification procedure
+
+ * .../graphics/icon_notifications_web.gif: Removing web notification
+ graphic; will sit elsewhere.
+
+2009-02-24 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../graphics/icon_notifications_web.gif: web notification icon added
+
+2009-02-24 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/groups/find.php: all groups search form
+
+2009-02-24 kevinjardine <kevinjardine@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/login.php, actions/user/requestnewpassword.php,
+ mod/uservalidationbyemail/languages/en.php: Attempts by unvalidated users to
+ login or request new passwords now trigger plugin hooks (if available) or
+ trigger the user validation event by default. Thus, in the default case, the
+ user will be remailed a validation link. Addresses part of
+ http://trac.elgg.org/elgg/ticket/759 .
+
+2009-02-24 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/icondirect.php: Removing a minor simplecache debug message
+ that accidentally made it in.
+
+ * mod/profile/icon.php, mod/profile/icondirect.php: Default icons are
+ preserved.
+
+2009-02-24 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/riverdashboard/languages/en.php, mod/riverdashboard/start.php,
+ .../views/default/settings/riverdashboard/edit.php: you can now replace the
+ default dashboard with the new activity river, if required.
+
+2009-02-24 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/search/startblurb.php,
+ views/default/user/search/finishblurb.php,
+ views/default/user/search/startblurb.php: search results formatted
+
+2009-02-24 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _css/css.php, _css/js.php, upgrade.php: CSS, JS, upgrade are marked as
+ external pages.
+
+2009-02-24 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/groups/groupprofile.php: groups:notfound:details
+ text string formatted
+
+2009-02-24 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/discussions.php, mod/groups/forum.php,
+ mod/groups/membership.php, mod/groups/topicposts.php: Group gatekeeper on
+ internal group pages.
+
+ * engine/lib/xml-rpc.php: Minor variable fix. Fixes #811
+
+2009-02-24 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/actions/delete.php: when deleting a group you now go back to
+ your groups
+
+2009-02-24 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * version.php: A further architecture update version increment.
+
+2009-02-24 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/forms/groups/invite.php: invite friends to group
+ page modified
+
+2009-02-24 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, engine/lib/widgets.php: Added fixes to
+ create_entity and add_widgets to correctly handle containers.
+
+2009-02-24 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/thewire/profile_status.php: profile update wire tweaked
+
+2009-02-24 kevinjardine <kevinjardine@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/site/update_basic.php, engine/lib/elgglib.php,
+ mod/profile/icondirect.php: Made icon views work properly for non-default
+ icons, and introduced elgg_view_enable_simplecache and
+ elgg_view_disable_simplecache functions.
+
+2009-02-24 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/thewire/profile_status.php: profile status update link
+ formatted
+
+2009-02-23 kevinjardine <kevinjardine@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/site/update_basic.php, engine/lib/configuration.php,
+ languages/en.php, mod/profile/icondirect.php, simplecache/view.php,
+ views/default/settings/system.php: Added the ability to turn simplecache on
+ and off.
+
+2009-02-23 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/thewire/views/default/thewire/forms/add.php: post to wire from thewire
+ page styled
+
+2009-02-23 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/start.php: You should no longer get notified of your own topic
+ posts.
+
+ * engine/lib/elgglib.php: ACCESS_DEFAULT is now defined.
+
+2009-02-23 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/thewire/views/default/thewire/forms/add.php: a tweak to the wire
+
+ * mod/thewire/actions/add.php, mod/thewire/everyone.php,
+ mod/thewire/index.php, mod/thewire/languages/en.php, mod/thewire/start.php,
+ mod/thewire/views/default/thewire/forms/add.php,
+ .../views/default/thewire/profile_status.php: new wire work
+
+2009-02-23 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/groups/css.php,
+ mod/groups/views/default/groups/profileitems.php: right_column changed from
+ class to id to match left_column
+
+2009-02-23 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/groupprofile.php, mod/groups/views/rss/groups/profileitems.php:
+ Group RSS feed.
+
+ * mod/groups/views/rss/forum/topics.php: RSS fix for groups.
+
+ * engine/handlers/pagehandler.php: Removing the external definition from the
+ page handler again.
+
+ * engine/lib/annotations.php, mod/groups/start.php,
+ mod/groups/topicposts.php, mod/groups/views/default/forum/topicposts.php,
+ mod/groups/views/rss/forum/topicposts.php,
+ mod/groups/views/rss/forum/viewposts.php, views/rss/object/default.php: RSS
+ for group topics, including fixes for annotation getURL() override
+
+2009-02-23 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php, views/default/messages/errors/list.php,
+ views/default/messages/messages/list.php,
+ views/default/navigation/topbar_tools.php,
+ views/default/page_elements/elgg_topbar.php: top toolbar menu id changed to
+ class. messages div slide action in some browsers removed.
+
+2009-02-23 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/handlers/pagehandler.php: Further external marker on the
+ pagehandler for walledgarden
+
+2009-02-23 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/actions/forums/editpost.php, mod/groups/start.php,
+ mod/groups/views/default/forum/topicposts.php: new group edit options on
+ discussion
+
+2009-02-23 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/handlers/action_handler.php, engine/handlers/cron_handler.php,
+ engine/handlers/xml-rpc_handler.php, index.php: Hook for better walled garden
+
+2009-02-23 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/actions/forums/editpost.php,
+ mod/groups/views/default/forum/topicposts.php: a couple more group comment
+ edit tweaks
+
+2009-02-23 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/forum/topicposts.php: Translating untranslated
+ string
+
+2009-02-23 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/actions/forums/editpost.php,
+ mod/groups/views/default/forum/topicposts.php: small edit comment bug fixed
+
+2009-02-23 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * version.php: Slight version change to represent architectural changes.
+
+2009-02-23 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/forum/topics.php,
+ .../views/default/object/groupforumtopic.php: groups interface details
+ cleanup
+
+2009-02-23 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/group.php, mod/groups/groupprofile.php: Introducing
+ group_gatekeeper()
+
+ * mod/thewire/languages/en.php: New post wire string
+
+ * views/failsafe/input/access.php: Introducing the access control to the
+ failsafe view.
+
+ * actions/admin/site/update_basic.php, actions/systemsettings/install.php,
+ engine/lib/access.php, engine/lib/widgets.php, languages/en.php,
+ mod/profile/actions/edit.php, mod/profile/views/default/profile/edit.php,
+ views/default/input/access.php, views/default/settings/system.php,
+ views/failsafe/settings/system.php: Added site default access permissions.
+ Refs #744
+
+2009-02-23 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/forum/topicposts.php: superfluous <p> tags
+ removed
+
+2009-02-23 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/languages/en.php: missing lang tweak
+
+ * mod/groups/views/default/forum/topics.php: new group discussion layout
+ tweaked to actually work
+
+ * mod/groups/actions/forums/addtopic.php, mod/groups/languages/en.php,
+ .../views/default/river/forum/topic/create.php: topic starting included in
+ river
+
+2009-02-22 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/forum.php, mod/groups/languages/en.php,
+ .../views/default/object/groupforumtopic.php: new group discussion layout
+
+ * mod/groups/languages/en.php: tweaks to the group discussion lang
+
+ * mod/groups/forum.php: group forum posts are now displayed based on last
+ action
+
+ * mod/groups/actions/forums/deletepost.php,
+ mod/groups/actions/forums/editpost.php, mod/groups/languages/en.php,
+ mod/groups/start.php, mod/groups/views/default/forum/topicposts.php: users
+ can now edit and delete their forum comments
+
+ * mod/groups/actions/join.php, mod/groups/languages/en.php,
+ mod/groups/views/default/river/group/create.php: new join group river view
+ added
+
+ * mod/groups/actions/forums/addpost.php,
+ mod/groups/views/default/river/forum/create.php: new river view added for
+ group forum posts
+
+2009-02-20 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/riverdashboard/index.php,
+ .../views/default/riverdashboard/container.php,
+ .../views/default/riverdashboard/js.php,
+ .../views/default/riverdashboard/nav.php: Riverdashboard now loads tabs via
+ jQuery AJAX.
+
+ * .../notifications/subscriptions/forminternals.php,
+ views/default/friends/forms/edit.php, views/default/friends/picker.php: The
+ friends picker now highlights tabs when creating a collection if a user is
+ present there. Also, the separate friends picker in the notification plugin
+ is also now internationalised.
+
+2009-02-20 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/widgets/a_users_groups/view.php: groups widget class
+ added
+
+2009-02-20 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/start.php: Correction for previous.
+
+ * mod/groups/start.php: Forum topic notifications fix.
+
+ * engine/lib/notification.php: Notification messages can be suppressed
+ programmatically.
+
+2009-02-20 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/widgets/a_users_groups/view.php: group widget tweaked
+
+2009-02-20 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php: Fixes an annoying problem in countAnnotations.
+
+2009-02-20 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/languages/en.php, mod/groups/start.php: group email tweak to
+ include lang
+
+2009-02-20 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/defaultprofile.php: custom profile fields admin panel
+ formatted
+
+ * .../views/default/thewire/profile_status.php: brackets added around
+ timestamp
+
+2009-02-20 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php: isFriend() now retrieving userid correctly
+
+2009-02-20 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/thewire/profile_status.php: profile status view tweaked
+
+2009-02-20 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/actions/addtogroup.php: Closes #784: Action now checks that the
+ user is the logged in user's friend before invite.
+
+2009-02-20 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/usersettings/plugins_opt/plugin.php: configure tools page -
+ individual tools formatted
+
+ * .../views/default/widgets/river_widget/view.php: activity widget interface
+
+ * views/default/spotlight/default.php: formatted spotlight footer
+
+2009-02-20 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/listing.php: status moved on member
+ listings
+
+2009-02-20 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/languages/en.php, mod/groups/membershipreq.php,
+ mod/groups/start.php: Placeholder for future work (refs #277)
+
+2009-02-20 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/thewire/actions/add.php: tweak to the add to wire action to make sure
+ forward takes the user to the correct place
+
+2009-02-20 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/groups/grouplisting.php: group details
+ containerised
+
+2009-02-20 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * htaccess_dist: Removing unnecessary mod_rewrite rule
+
+ * languages/en.php, views/default/friends/picker.php: The friends picker can
+ now be internationalized, also allows you to view users whose usernames don't
+ begin with a letter in the char array.
+
+2009-02-20 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/widgets/river_widget/edit.php: riverdash activity widget
+ edit panel formatted
+
+ * mod/thewire/views/default/widgets/thewire/view.php: empty <p> tags causing
+ issues removed
+
+ * mod/groups/views/default/forms/groups/edit.php: button floated and cleared
+
+2009-02-20 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/spotlight/default.php: Went in to decapitalise "intranet",
+ ended up making the text hopefully more immediate.
+
+2009-02-20 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/forms/groups/edit.php: delete group button moved
+ into own area
+
+ * mod/groups/views/default/forms/forums/addtopic.php,
+ mod/groups/views/default/forum/topics.php,
+ mod/groups/views/default/groups/forum_latest.php,
+ mod/groups/views/default/groups/groupprofile.php,
+ mod/groups/views/default/groups/side_menu.php: group areas interfacing
+
+2009-02-20 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * admin/plugins.php, admin/site.php, admin/statistics.php, admin/user.php,
+ views/default/page_elements/owner_block.php: Removed unnecessary owner
+ blocks.
+
+2009-02-20 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/spotlight/default.php: new spotlight contents
+
+2009-02-20 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/messages/exceptions/exception.php: Minor improvement to
+ exception message
+
+ * views/default/messages/exceptions/exception.php: Minor improvement to
+ exception message
+
+ * engine/lib/elgglib.php, views/default/messages/exceptions/exception.php:
+ Closes #487: Removed superfluous page_draw from exception view.
+
+2009-02-20 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/river.php, engine/lib/river2.php: Added some documentation to
+ the river functions.
+
+2009-02-20 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/apiadmin/manifest.xml, mod/crontrigger/manifest.xml,
+ mod/diagnostics/manifest.xml, mod/garbagecollector/manifest.xml,
+ mod/groups/manifest.xml, mod/guidtool/manifest.xml,
+ mod/logbrowser/manifest.xml, mod/logrotate/manifest.xml,
+ mod/notifications/manifest.xml, mod/profile/manifest.xml,
+ mod/reportedcontent/manifest.xml, mod/thewire/manifest.xml,
+ mod/uservalidationbyemail/manifest.xml: Updated core module manifests to
+ contain today's build number. Refs #394
+
+ * mod/riverdashboard/manifest.xml: Closes #795: Added manifest to
+ riverdashboard
+
+ * mod/groups/languages/en.php: Closes #798: Fixing language definition which
+ somehow got clobbered. Nice spot!
+
+ * engine/lib/entities.php: Fixes warning messages on disable or delete for
+ times when an entity has no sub items.
+
+2009-02-19 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/river2.php, .../views/default/widgets/river_widget/view.php,
+ views/default/river/item/list.php: Pagination is now optional on river lists;
+ is removed on the river widget
+
+ * engine/lib/river2.php: Friends river no longer shows your own stuff.
+
+2009-02-19 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/edit.php: missing wrapper added
+
+2009-02-19 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/forum.php: Added a title to group forum topics. Fixes #603
+
+ * mod/groups/membership.php: For now, the group membership page is
+ protected, although eventually this should get its own profile dropdown menu.
+ Fixes #605
+
+2009-02-19 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/groups/featured.php,
+ mod/groups/views/default/groups/forum_latest.php,
+ mod/groups/views/default/groups/profileitems.php: groups interface updated
+
+2009-02-19 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: An alternative template handler will now be sought
+ by elgg_view by default. Fixes #768
+
+2009-02-19 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/groups/find.php,
+ mod/groups/views/default/groups/side_menu.php: all groups submenu tweaked
+
+2009-02-19 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/install.php: A lighter way to detect if the db has been
+ installed. Fixes #791
+
+2009-02-19 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/groups/css.php,
+ mod/groups/views/default/groups/featured.php: featured groups sidebar styled
+
+2009-02-19 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php: Fixed parameter errors in site-related functions.
+ Fixes #793
+
+ * mod/profile/icondirect.php: Better unicode patching for icons. Fixes #789
+
+2009-02-19 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * version.php: Updated version number to today's build
+
+2009-02-19 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/all.php: small tweak to popular groups
+
+ * mod/groups/all.php: it is now possible to list groups by most popular
+
+ * views/default/page_elements/header.php,
+ views/default/page_elements/header_contents.php,
+ views/default/pageshells/pageshell.php: the header has been split out so that
+ theme authors can target the header output without worrying about overwriting
+ the whole header file.
+
+2009-02-19 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/relationships.php: Introduced get / list entities by
+ relationship count
+
+2009-02-19 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/thewire/actions/add.php, mod/thewire/actions/delete.php,
+ mod/thewire/add.php, mod/thewire/everyone.php,
+ mod/thewire/graphics/thewire_speech_bubble.gif, mod/thewire/index.php,
+ mod/thewire/languages/en.php, mod/thewire/manifest.xml,
+ mod/thewire/readme.txt, mod/thewire/start.php,
+ mod/thewire/views/default/object/thewire.php,
+ .../views/default/river/object/thewire/create.php,
+ .../views/default/thewire/activity_view.php,
+ mod/thewire/views/default/thewire/css.php,
+ mod/thewire/views/default/thewire/forms/add.php,
+ mod/thewire/views/default/thewire/notfound.php,
+ .../views/default/thewire/profile_status.php,
+ .../views/default/thewire/scripts/counter.js,
+ mod/thewire/views/default/thewire/view.php,
+ mod/thewire/views/default/widgets/thewire/edit.php,
+ mod/thewire/views/default/widgets/thewire/view.php: the wire has been moved
+ to core as it now powers profile status and status on member search
+
+ * mod/activity/all.php, mod/activity/friends.php, mod/activity/index.php,
+ mod/activity/languages/en.php, mod/activity/manifest.xml,
+ mod/activity/opendd.php, mod/activity/start.php,
+ mod/activity/views/default/activity/css.php,
+ mod/activity/views/default/activity/dashboard.php,
+ mod/activity/views/default/activity/offset.php,
+ mod/activity/views/default/activity/wrapper.php,
+ .../views/default/settings/activity/edit.php,
+ mod/activity/views/opendd/activity/dashboard.php, mod/river/languages/en.php,
+ mod/river/manifest.xml, mod/river/start.php,
+ .../views/default/widgets/river_widget/edit.php,
+ .../views/default/widgets/river_widget/view.php,
+ .../default/widgets/river_widget_friends/edit.php,
+ .../default/widgets/river_widget_friends/view.php: old activity and river
+ removed
+
+2009-02-19 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * htaccess_dist, .../views/default/apiadmin/forms/add_key.php,
+ mod/apiadmin/views/default/object/api_key.php,
+ .../views/default/diagnostics/forms/download.php,
+ mod/groups/actions/join.php, mod/profile/defaultprofile.php,
+ .../views/default/profile/editdefaultprofile.php,
+ .../views/default/profile/menu/adminlinks.php,
+ views/default/account/forms/forgotten_password.php,
+ views/default/object/default.php: Repointed actions/ to action/ in all views
+ and removed actions/* from the action handler.
+
+2009-02-19 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/admin/plugins_opt/plugin.php: Removed some bad links on
+ actions
+
+ * engine/lib/languages.php: Fixed strange infinite loop on language loading.
+
+ * engine/lib/languages.php: Removed @ from register translation include_once
+
+ * engine/lib/plugins.php, languages/en.php,
+ views/default/admin/plugins_opt/plugin.php: Closes #394: May now specify
+ elgg_version in the manifest to specify a minimum version of elgg required.
+
+2009-02-19 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, views/default/canvas_header/submenu_template.php:
+ delete confirmation added to delete pages
+
+ * .../views/default/riverdashboard/sitemessage.php: input view changed on
+ site messages
+
+ * mod/groups/languages/en.php,
+ mod/groups/views/default/forms/groups/edit.php: warning applied to group
+ deletion
+
+ * mod/groups/edit.php: title tweaked
+
+2009-02-19 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php: Fix for user object counting with upper and lower
+ time limits.
+
+2009-02-19 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php: missing lang file
+
+ * views/default/page_elements/owner_block.php: ownerblock tweak
+
+2009-02-19 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, engine/lib/users.php, languages/en.php:
+ Introducing archive functionality.
+
+2009-02-19 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/riverdashboard/languages/en.php, mod/riverdashboard/start.php,
+ .../views/default/river/sitemessage/create.php,
+ .../views/default/widgets/river_widget/edit.php,
+ .../views/default/widgets/river_widget/view.php: new river widget
+
+2009-02-18 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/elgg_toolbar_logo.gif: updated elgg toolbar logo
+
+2009-02-18 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/groups/featured.php: missing id applied
+
+ * mod/groups/actions/featured.php, mod/groups/all.php,
+ mod/groups/languages/en.php, mod/groups/start.php,
+ mod/groups/views/default/groups/featured.php,
+ mod/groups/views/default/groups/grouplisting.php: admins can highlight
+ featured groups
+
+2009-02-18 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/groups/find.php: sidebar forms styled
+
+2009-02-18 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, engine/start.php: Closes #790: Removed @ before
+ include statements.
+
+2009-02-18 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/river/item/list.php: forward and back text added
+
+ * mod/profile/defaultprofile.php: reset button wrapped
+
+ * .../views/default/riverdashboard/nav.php,
+ .../views/default/riverdashboard/newestmembers.php,
+ .../views/default/riverdashboard/sitemessage.php,
+ views/default/river/item/list.php: pagination on river fixed / styled, and
+ site message styled
+
+2009-02-18 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/plugins.php: Helping plugin developers by no longer suppressing
+ parsing errors in plugins.
+
+2009-02-17 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/riverdashboard/start.php: Fix for previous
+
+ * mod/riverdashboard/start.php: Riverdashboard registers an init event
+ handler now .....
+
+2009-02-17 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/all.php, mod/groups/views/default/groups/find.php: style
+ applied
+
+2009-02-17 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/all.php, mod/groups/views/default/groups/side_menu.php: more
+ more all groups tweak
+
+ * mod/groups/all.php, mod/groups/languages/en.php, mod/groups/start.php,
+ mod/groups/views/default/groups/featured.php,
+ mod/groups/views/default/groups/find.php,
+ .../views/default/groups/group_sort_menu.php,
+ mod/groups/views/default/groups/grouplisting.php: new all groups view
+
+ * mod/profile/views/default/profile/userdetails.php: bug fixed in profile
+ status
+
+ * views/default/river/item/wrapper.php: river view altered
+
+2009-02-17 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php, views/default/widgets/wrapper.php: Closes #763: A
+ message is now displayed for widgets belonging to disabled plugins explaining
+ what has happened.
+
+2009-02-17 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/riverdashboard/css.php: css added to sep file
+
+2009-02-17 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/riverdashboard/welcome.php: welcome message tweaked
+
+ * mod/riverdashboard/actions/add.php, mod/riverdashboard/actions/delete.php,
+ mod/riverdashboard/languages/en.php, mod/riverdashboard/start.php,
+ .../views/default/riverdashboard/sitemessage.php: simple site message added
+
+ * mod/groups/views/default/groups/profileitems.php: removed a redundant view
+
+2009-02-17 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/groupprofile.php, mod/groups/languages/en.php,
+ .../views/default/groups/closedmembership.php: Closes #786: Only basic
+ profile information provided to non-joined users of closed groups.
+
+2009-02-17 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/listing.php: entity passed to status
+ view
+
+2009-02-17 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/riverdashboard/index.php, mod/riverdashboard/start.php,
+ .../views/default/riverdashboard/css.php,
+ .../views/default/riverdashboard/nav.php,
+ .../views/default/riverdashboard/newestmembers.php,
+ .../views/default/riverdashboard/sitemessage.php,
+ .../views/default/riverdashboard/welcome.php, views/default/css.php,
+ views/default/friends/collectiontabs.php: interface updated, markup tweaked
+ etc
+
+2009-02-17 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/listing.php: new status view created
+ that can be extended
+
+2009-02-17 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, engine/start.php: Added some very basic page load
+ profiling.
+
+ * engine/lib/elgglib.php: Closes #785: datalists now pulls all settings on
+ first item load.
+
+ * engine/start.php: Closes #783: Initial cache write on start now checks
+ whether elgg has been fully installed before proceeding.
+
+2009-02-16 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/userdetails.php: new view added to allow
+ status plugins to extend and display as part of the profile block
+
+2009-02-16 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/icondirect.php: Icondirect now falls back on the cached
+ default view
+
+ * mod/profile/start.php: Icon default views are now registered as cached
+
+ * views/default/input/plaintext.php: Introducing input/plaintext.
+
+2009-02-16 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/navigation/viewtype.php: loose page elements wrapped in
+ container div
+
+2009-02-16 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, engine/start.php, upgrade.php: A little more
+ flexibility for the simplecache.
+
+2009-02-16 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Short circuit get entity on impossible values,
+ saving two db queries per page
+
+2009-02-16 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _css/css.php, _css/js.php, engine/lib/elgglib.php, engine/start.php,
+ simplecache/view.php, views/default/page_elements/header.php: Views
+ simplecache improvements.
+
+2009-02-16 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/footer.php: another view added for analytics
+ which plugins can extend
+
+ * views/default/page_elements/footer.php: footer links replaced by a view
+ which plugins can extend
+
+2009-02-16 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/cache.php: Removed select_default_memcache as this was not
+ used.
+
+ * engine/lib/languages.php, engine/lib/sessions.php, engine/start.php,
+ version.php: Closes #429: Language loading now no longer loads all possible
+ translations - only english + user's preferred language/site preference
+
+2009-02-16 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/usersettings.php, languages/en.php,
+ mod/profile/views/default/profile/userdetails.php,
+ views/default/friends/collections.php, views/default/friends/forms/edit.php,
+ views/default/friends/tablelist.php: theme updates
+
+2009-02-16 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/plugins/disable.php, actions/admin/plugins/enable.php,
+ actions/admin/plugins/reorder.php: Simplecache improvements.
+
+ * _css/css.php, _css/js.php, engine/lib/elgglib.php, engine/start.php,
+ mod/profile/start.php, mod/profile/views/default/profile/metatags.php,
+ simplecache/view.php, upgrade.php, views/default/page_elements/header.php:
+ Committing the simplecache for views.
+
+2009-02-16 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/friends/collections.php: removed broken expand all link and
+ js
+
+2009-02-16 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php, views/default/admin/plugins_opt/plugin.php: Closes #777:
+ Plugin version now displayed under "more info" link in plugin admin settings.
+
+2009-02-15 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: latest activity link removed as it will be
+ replaced by a full activity stream
+
+ * views/default/admin/statistics.php: removed redundant stats info
+
+2009-02-15 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/usersettings/form.php: user settings style brought in line
+ with other settings pages
+
+2009-02-15 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/groups/forum_latest.php: removed the dropdown
+ menu from forum latest view on group profiles
+
+ * mod/groups/start.php: allow users to put a widget of their groups on their
+ dashboard as well as profile.
+
+ * mod/groups/views/default/groups/forum_latest.php,
+ mod/groups/views/default/groups/profileitems.php: group homepage forum view
+ tweaked
+
+2009-02-13 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/filestore.php: Fixes #778. Thanks!
+
+2009-02-13 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/apiadmin/forms/add_key.php,
+ mod/apiadmin/views/default/object/api_key.php, mod/diagnostics/index.php,
+ .../views/default/diagnostics/forms/download.php,
+ .../default/notifications/subscriptions/form.php,
+ .../notifications/subscriptions/groupsform.php,
+ mod/profile/views/default/profile/edit.php,
+ .../views/default/profile/editdefaultprofile.php,
+ mod/profile/views/default/profile/editicon.php,
+ .../views/default/reportedcontent/form.php,
+ .../views/default/reportedcontent/listing.php,
+ views/default/admin/plugins.php, views/default/admin/site.php,
+ views/default/admin/statistics.php, views/default/admin/user.php,
+ views/default/usersettings/form.php, views/default/usersettings/plugins.php:
+ css classname cleanup, prep for v1.5 default theme
+
+2009-02-13 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/river2.php, views/default/river/item/list.php: Simple river
+ pagination.
+
+2009-02-13 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/riverdashboard/index.php,
+ .../views/default/riverdashboard/newestmembers.php,
+ .../views/default/riverdashboard/sitemessage.php,
+ .../views/default/riverdashboard/welcome.php: new views for riverdashboard
+
+2009-02-13 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/admin/plugins_opt/plugin.php, views/default/css.php,
+ views/default/js/initialise_elgg.php: Moved plugin settings so they're more
+ obvious.
+
+2009-02-13 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/sessions.php: Fixed logic bug in login()
+
+ * engine/schema/upgrades/2009021301.sql, mod/groups/actions/edit.php,
+ mod/groups/languages/en.php, mod/groups/views/default/forms/groups/edit.php,
+ version.php: Closes #761, #718: Group permissions now made much much simpler.
+
+2009-02-13 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/comments/add.php, views/default/annotation/annotate.php: new
+ annotations activity view
+
+2009-02-13 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/forms/groups/edit.php,
+ .../views/default/forms/guidtool/format.php,
+ .../views/default/forms/guidtool/import.php,
+ views/default/account/forms/forgotten_password.php,
+ views/default/comments/forms/edit.php, views/default/export/entity.php: loose
+ text strings cleaned up, extra container divs added
+
+2009-02-13 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/riverdashboard/index.php: changed the activity view
+
+2009-02-13 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/riverdashboard/languages/en.php,
+ .../views/default/riverdashboard/nav.php: Language updates to river dashboard
+
+ * mod/riverdashboard/index.php, .../views/default/riverdashboard/nav.php:
+ Added better content filtering for dashboard
+
+ * mod/riverdashboard/index.php, mod/riverdashboard/start.php,
+ .../views/default/riverdashboard/nav.php: New river dashboard.
+
+ * engine/lib/river2.php: Removing an erroneous system_message call.
+
+ * engine/lib/river2.php: Data sanitisation fix.
+
+2009-02-13 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/canvas/layouts/sidebar_boxes.php, views/default/css.php: new
+ layout canvas
+
+2009-02-13 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/database.php: Added lazy database connections to delay
+ establishing the db link until actually required - will allow for future
+ lite/static content endpoints that bypass db connections and session
+ creation.
+
+ * engine/lib/elgglib.php: Closes #769: Added short circuit to quit function
+ if entity is null.
+
+ * engine/lib/elgglib.php: Closes #772: $value no longer being incorrectly
+ set when memcache is enabled.
+
+2009-02-12 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/extender.php: A correction to the way attributes are set for
+ extenders.
+
+ * languages/en.php: New base translation word: publish
+
+ * engine/schema/mysql.sql: Schema fix
+
+ * engine/lib/entities.php: Clear river items on entity delete
+
+ * engine/lib/river2.php: A minor stabilisation change for river2
+
+ * engine/lib/river2.php: A minor stabilisation change for river2
+
+2009-02-12 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * vendors/kses/kses.php: Refs #561: Removed &amp encoding from kses but
+ retaining script input and entities.
+
+2009-02-12 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/river2.php, engine/schema/mysql.sql,
+ engine/schema/upgrades/2009021201.sql, version.php,
+ views/default/river/item/list.php, views/default/river/item/wrapper.php:
+ Alternative river system trial. This is a test.
+
+2009-02-12 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/river.php: Avoiding wsod for deleted users
+
+2009-02-11 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/activity/views/default/activity/offset.php: div cleared after
+ pagination for theme compatability
+
+2009-02-11 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/activity.php:
+
+ * mod/groups/languages/en.php: Added some missing translations
+
+ * crontab.example: Added links to better documentation
+
+ * engine/lib/input.php: Closes #684: Scratching a particular itch of mine by
+ no longer hiding urls when converting them to active links. This issue has
+ caused many a headache. The url is now preserved but with a <wbr /> inserted
+ after every /, this lets long urls be wrapped without breaking the url.
+
+2009-02-11 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php: Removing wildcard from the beginning of 'like'
+ search for user/username
+
+2009-02-11 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/activity.php: Filtering on type,subtype and event
+
+ * engine/lib/activity.php, engine/lib/river.php, mod/activity/start.php:
+ Relocation of activity database queries to the core.
+
+2009-02-10 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * admin/plugins.php, admin/plugins/index.php, admin/site.php,
+ admin/site/index.php, admin/statistics.php, admin/statistics/index.php,
+ admin/user.php, admin/user/index.php, engine/lib/admin.php: Cleaned up the
+ admin directory using a pagehandler.
+
+ * languages/en.php, settings/plugins.php: Minor confusion clearups
+
+ * views/default/output/calendar.php, views/default/output/confirmlink.php,
+ views/default/output/email.php, views/default/output/longtext.php,
+ views/default/output/pulldown.php, views/default/output/tagcloud.php,
+ views/default/output/tags.php, views/default/output/text.php,
+ views/default/output/url.php: Closes #756: htmlentities on all output forms
+
+ * mod/profile/views/default/profile/userdetails.php: XSS filtering on output
+
+ * engine/lib/input.php: Refs #561: Split filtering into separate function
+
+2009-02-10 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/icondirect.php, mod/profile/start.php: Speedy icon bypass.
+
+2009-02-10 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/activity/views/default/activity/dashboard.php: add a view to site wide
+ activity that can be extended by the wire
+
+2009-02-10 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/notification.php: Further changes to the notification
+ mechanism.
+
+2009-02-10 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/metadata.php: Closes #757: Removed strtolower as it is not UTF8
+ safe. See http://www.phpwact.org/php/i18n/utf-8 for further discussion.
+
+ * views/default/input/access.php, views/default/input/email.php,
+ views/default/input/file.php, views/default/input/longtext.php,
+ views/default/input/password.php, views/default/input/pulldown.php: Refs
+ #756: htmlentities on all input views
+
+ * mod/activity/all.php, mod/activity/index.php: Marcus Povey
+ <marcus@elgg.com> * Pagination not displayed when no activity present *
+ OpenDD link for your activity now functioning
+
+2009-02-10 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../notifications/subscriptions/collections.php: Fixed 'all friends'
+ button.
+
+2009-02-10 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/canvas/layouts/edit_layout.php: new edit canvas layout
+
+2009-02-10 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/start.php, mod/groups/views/default/forms/groups/edit.php:
+ Closes #752: Delete move to edit, making it less fatal. Probably needs
+ skinning.
+
+2009-02-09 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, engine/lib/notification.php,
+ mod/groups/start.php: A single notification is now sent out on forum topic
+ creation. This also contains an update to $entity->countAnnotations, which
+ no longer requires you to specify the annotation type.
+
+ * engine/lib/notification.php: Notification fix: you no longer get
+ notifications on your own content.
+
+ * mod/groups/languages/en.php, mod/groups/start.php: Introducing group forum
+ notifications
+
+2009-02-09 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Refs #640: Entity disable now recursive
+
+ * mod/groups/actions/delete.php, mod/groups/languages/en.php,
+ mod/groups/start.php: Closes #282, Refs #640: Group deletion enabled. TODO:
+ Suggested enhancement #752
+
+2009-02-09 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php: Added the 'annotate' event on entities.
+
+ * .../notifications/subscriptions/collections.php: Minor display fix.
+
+ * mod/notifications/actions/save.php: Group notification settings now save
+ properly
+
+ * engine/lib/relationships.php: Added a new filter to delete relationship
+ functions
+
+2009-02-09 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Refs #640, #282: Recursive deletion of owned and
+ contained entities.
+
+ * .../views/default/profile/menu/adminlinks.php: Closes #223: Admin options
+ now use output/confirmlink
+
+ * mod/guidtool/actions/delete.php, mod/guidtool/languages/en.php,
+ mod/guidtool/start.php, mod/guidtool/views/default/guidtool/listing.php: Refs
+ #492: Export and delete links next to entity
+
+2009-02-09 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/notification.php: Extra security for object notifications.
+
+ * mod/notifications/actions/groupsave.php,
+ mod/notifications/actions/save.php, mod/notifications/groups.php,
+ mod/notifications/languages/en.php, mod/notifications/start.php,
+ .../notifications/subscriptions/collections.php,
+ .../notifications/subscriptions/groupsform.php: Group notifications, all
+ friends notification option
+
+2009-02-09 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php: Couple of extra words
+
+ * languages/en.php, views/default/output/confirmlink.php: Added default to
+ confirm link.
+
+2009-02-09 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/activity/views/default/activity/css.php,
+ mod/activity/views/default/activity/offset.php: pagination on activity stream
+ added
+
+2009-02-09 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php: Closes #584: Removed exception, get_user will now
+ return false if GUID exists but is not a user. This probably makes more sense
+ as Exceptions should probably be reserved for major Ooopses. The error in
+ this bug was caused by this exception being thrown and not caught in the
+ access group handler. This may have been the cause of a number of group
+ related / permission related errors.
+
+ * engine/lib/users.php: Refs #584: Fixed error message.
+
+ * engine/lib/entities.php: Closes #720: setCalendarTimeAndDuration() now
+ saves end time correctly.
+
+2009-02-07 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/groups/members.php: drop down menu removed from
+ members avatars on the group home page. You can change this back by removing
+ 'override' => 'true'
+
+ * mod/groups/languages/en.php,
+ .../views/default/river/object/group/create.php,
+ .../river/object/groupforumtopic/annotate.php,
+ .../river/object/groupforumtopic/create.php,
+ .../river/object/groupforumtopic/update.php,
+ .../default/river/relationship/member/create.php: new river views added to
+ groups
+
+ * mod/activity/views/default/activity/css.php,
+ .../river/user/default/profileiconupdate.php: profile icon added to change
+ river view and css added to activity
+
+ * mod/activity/all.php, mod/activity/friends.php, mod/activity/index.php,
+ mod/activity/languages/en.php,
+ mod/activity/views/default/activity/offset.php: small additions to the
+ activity view
+
+ * mod/notifications/manifest.xml: manifest file added to notifications
+
+2009-02-06 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/notifications/languages/en.php,
+ .../notifications/subscriptions/collections.php: Language and UI changes for
+ the notifications plugin.
+
+2009-02-06 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/notifications/css.php: styles for notifications
+
+2009-02-06 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../notifications/subscriptions/collections.php: Javascript just about
+ beaten into submission. Viewers of the public SVN, I apologise for clogging
+ up the history view. Here's a joke by way of penance:
+
+ * mod/notifications/actions/save.php: Save action corrections
+
+ * .../notifications/subscriptions/collections.php: An attempt at fixing the
+ toggle issue
+
+ * .../notifications/subscriptions/collections.php,
+ .../notifications/subscriptions/forminternals.php,
+ .../notifications/subscriptions/personal.php: Notification settings. Still
+ not right though ..
+
+ * .../notifications/subscriptions/collections.php,
+ .../notifications/subscriptions/forminternals.php,
+ .../notifications/subscriptions/personal.php: More notification settings
+ work.
+
+ * .../notifications/subscriptions/collections.php: Notification icons work
+ properly when selecting / deselecting a friends collection.
+
+ * mod/notifications/languages/en.php,
+ .../notifications/subscriptions/collections.php,
+ .../default/notifications/subscriptions/form.php,
+ .../notifications/subscriptions/forminternals.php,
+ .../notifications/subscriptions/personal.php: Friends collections work
+
+2009-02-06 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/river_icons/river_icon_pages.gif,
+ _graphics/river_icons/river_icon_thewire.gif: icons for river added
+
+ * mod/activity/views/default/activity/css.php: updated activity css
+
+2009-02-05 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * htaccess_dist: Added digits to pagehandler rewrite rule. Fixes #741
+
+ * mod/notifications/actions/save.php,
+ .../notifications/subscriptions/collections.php: Friends collections
+ preferences are saved
+
+ * mod/notifications/languages/en.php,
+ .../notifications/subscriptions/collections.php: Collections titles
+
+ * .../views/default/notifications/css.php,
+ .../notifications/subscriptions/collections.php: Access collections toggle
+ beginnings
+
+ * mod/notifications/actions/save.php, mod/notifications/languages/en.php,
+ mod/notifications/start.php, .../views/default/notifications/css.php,
+ .../notifications/settings/usersettings.php,
+ .../notifications/subscriptions/collections.php,
+ .../default/notifications/subscriptions/form.php,
+ .../notifications/subscriptions/forminternals.php,
+ .../notifications/subscriptions/personal.php: Further notification settings
+ changes.
+
+ * mod/notifications/actions/save.php,
+ .../graphics/icon_notifications_email.gif,
+ mod/notifications/languages/en.php, mod/notifications/start.php,
+ .../views/default/notifications/css.php,
+ .../default/notifications/subscriptions/form.php,
+ .../notifications/subscriptions/forminternals.php: Fitter, happier, more
+ productive notifications plugin.
+
+ * engine/lib/notification.php: Belts and braces with notifications
+
+ * engine/lib/access.php: Minor change to access SQL. Fixes #687
+
+ * htaccess_dist: Further htaccess change
+
+ * htaccess_dist: htaccess update
+
+ * mod/profile/start.php: Added profile updates to the notification handler
+
+2009-02-04 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/json/api/output.php: API results now JSON export properly. Refs #716
+
+ * views/json/canvas/default.php, views/json/export/entity.php,
+ views/json/export/metadata.php, views/json/export/relationship.php,
+ views/json/group/default.php, views/json/messages/exceptions/exception.php,
+ views/json/object/default.php, views/json/pageshells/pageshell.php,
+ views/json/search/entity_list.php, views/json/site/default.php,
+ views/json/user/default.php: JSON feeds now work. Fixes #716
+
+ * engine/lib/access.php, engine/lib/notification.php: Access improvements on
+ granular notifications
+
+ * languages/en.php: DB credentials are no longer unnecessarily revealed on
+ failure to connect. Fixes #723
+
+ * CONTRIBUTORS.txt: Contributors patch
+
+ * mod/reportedcontent/actions/add.php,
+ mod/reportedcontent/actions/archive.php,
+ mod/reportedcontent/actions/delete.php, mod/reportedcontent/languages/en.php:
+ Added plugin hook triggers to reportedcontent plugin. Fixes #725
+
+ * views/default/input/button.php: Added class to input/button. Fixes #618
+
+ * mod/groups/views/default/forum/viewposts.php: Added pagination to group
+ topic posts. Fixes #704
+
+ * entities/index.php: Added unique title tags to the entity browser. Fixes
+ #722
+
+ * CONTRIBUTORS.txt, htaccess_dist, views/default/output/tags.php: Tag URLs
+ now conform to the microformats specification. Fixes #729
+
+ * CONTRIBUTORS.txt: Minor changes to contrib file
+
+2009-02-04 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * CONTRIBUTORS.txt: tweaks to the contributors file
+
+2009-02-04 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/systemsettings/install.php, engine/lib/admin.php,
+ engine/lib/annotations.php, engine/lib/entities.php, engine/lib/group.php,
+ engine/lib/metadata.php, engine/lib/plugins.php, engine/lib/system_log.php,
+ engine/lib/tags.php, engine/lib/users.php, engine/lib/widgets.php,
+ engine/start.php, languages/en.php, mod/apiadmin/actions/generate.php,
+ mod/groups/actions/edit.php, mod/groups/views/default/forms/groups/edit.php,
+ mod/profile/actions/edit.php, mod/profile/views/default/profile/edit.php,
+ mod/reportedcontent/actions/add.php,
+ .../views/default/reportedcontent/form.php: Moves access permissions
+ references over to using the ACCESS_* constants defined in access.php. Refs
+ #687
+
+ * engine/lib/access.php, engine/lib/elgglib.php: Moved the access constant
+ definitions from access.php to elgglib.php, so they'll be loaded initially.
+
+ * engine/lib/users.php: When a new password is generated, the salt is now
+ regenerated first. Fixes #726.
+
+2009-02-03 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/navigation/pagination.php: Corrected pagination limit error.
+
+ * engine/lib/elgglib.php, views/default/embed/addcontentjs.php,
+ views/default/embed/js.php: Elgg Javascript update content function
+
+2009-02-03 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/start.php: ticket #728 dealt with
+
+ * mod/groups/views/default/groups/members.php: changed the number of group
+ members to display on group frontpages from 9999 to 10 (This should become
+ configurable)
+
+ * engine/lib/entities.php: patch number #724 applied
+
+2009-02-03 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/useradd.php, languages/en.php: Users are now notified when an
+ account has been created for them on a site.
+
+2009-02-02 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Fixed bug in get_entities allowing for multiple
+ subtypes.
+
+2009-02-01 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/forms/forums/addtopic.php: removed redundant post
+ options
+
+2009-01-30 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Moving over to use file_exists to check for
+ default entity icons, which should be lighter to load and produce fewer
+ errors.
+
+2009-01-29 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/install.php: Tentatively downgraded version requirement.
+
+2009-01-28 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/notification.php: notify_user now traps exceptions and logs
+ them.
+
+2009-01-27 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/notification.php: Change to notification object registration
+ function.
+
+2009-01-27 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php, views/default/friends/picker.php: friendspicker /
+ collections updated to work with more than 12+ friends per pane
+
+2009-01-27 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/userdetails.php: tweak to banned user
+
+ * views/default/admin/statistics.php: small admin tweak
+
+2009-01-27 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Added container_guid to ElggEntity->save() and
+ update_entity() functions. Fixes #711
+
+ * engine/lib/elgglib.php: Moving actions into the boot event.
+
+2009-01-26 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Moved actions out of init files
+
+ * engine/lib/notification.php: Added object notifications plugin hook
+ override.
+
+ * engine/lib/annotations.php: Fixed pagination issue with count annotations
+ function.
+
+2009-01-25 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/languages.php: Fixes #709: get_language() now fails correctly.
+ @ben Why is this introduced? Surely this is the same as
+ get_current_language()?
+
+2009-01-24 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/metadata.php: Fixing access controls on multi-metadata
+
+2009-01-23 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * README.txt: Refs #706: Copyright in readme
+
+ * views/default/admin/plugins_opt/plugin.php: Support for people who can't
+ spell
+
+ * _css/css.php, account/forgotten_password.php, account/register.php,
+ actions/admin/plugins/disable.php, actions/admin/plugins/enable.php,
+ actions/admin/plugins/reorder.php, actions/admin/site/update_basic.php,
+ actions/admin/user/ban.php, actions/admin/user/delete.php,
+ actions/admin/user/makeadmin.php, actions/admin/user/removeadmin.php,
+ actions/admin/user/resetpassword.php, actions/admin/user/unban.php,
+ actions/comments/add.php, actions/comments/delete.php,
+ actions/email/save.php, actions/entities/delete.php, actions/friends/add.php,
+ actions/friends/addcollection.php, actions/friends/deletecollection.php,
+ actions/friends/editcollection.php, actions/friends/remove.php,
+ actions/import/opendd.php, actions/login.php, actions/logout.php,
+ .../notifications/settings/usersettings/save.php,
+ actions/plugins/settings/save.php, actions/plugins/usersettings/save.php,
+ actions/register.php, actions/systemsettings/install.php,
+ actions/user/language.php, actions/user/name.php, actions/user/password.php,
+ actions/user/passwordreset.php, actions/user/requestnewpassword.php,
+ actions/useradd.php, actions/usersettings/save.php, actions/widgets/add.php,
+ actions/widgets/reorder.php, actions/widgets/save.php, admin/index.php,
+ admin/plugins/index.php, admin/site/index.php, admin/statistics/index.php,
+ admin/user/index.php, dashboard/index.php, dashboard/latest.php,
+ engine/handlers/action_handler.php, engine/handlers/cron_handler.php,
+ engine/handlers/pagehandler.php, engine/handlers/xml-rpc_handler.php,
+ engine/lib/access.php, engine/lib/actions.php, engine/lib/admin.php,
+ engine/lib/annotations.php, engine/lib/api.php, engine/lib/cache.php,
+ engine/lib/calendar.php, engine/lib/configuration.php, engine/lib/cron.php,
+ engine/lib/database.php, engine/lib/elgglib.php, engine/lib/entities.php,
+ engine/lib/exceptions.php, engine/lib/export.php, engine/lib/extender.php,
+ engine/lib/filestore.php, engine/lib/group.php, engine/lib/input.php,
+ engine/lib/install.php, engine/lib/languages.php, engine/lib/location.php,
+ engine/lib/memcache.php, engine/lib/metadata.php, engine/lib/metastrings.php,
+ engine/lib/notification.php, engine/lib/objects.php, engine/lib/opendd.php,
+ engine/lib/pagehandler.php, engine/lib/pageowner.php, engine/lib/pam.php,
+ engine/lib/ping.php, engine/lib/plugins.php, engine/lib/query.php,
+ engine/lib/relationships.php, engine/lib/river.php, engine/lib/sessions.php,
+ engine/lib/sites.php, engine/lib/social.php, engine/lib/statistics.php,
+ engine/lib/system_log.php, engine/lib/tags.php, engine/lib/users.php,
+ engine/lib/usersettings.php, engine/lib/version.php, engine/lib/widgets.php,
+ engine/lib/xml-rpc.php, engine/lib/xml.php, engine/schema/mysql.sql,
+ engine/start.php, entities/index.php, entities/list.php, friends/add.php,
+ friends/collections.php, friends/edit.php, friends/index.php, friends/of.php,
+ friends/pickercallback.php, htaccess_dist, index.php, install.php,
+ mod/activity/all.php, mod/activity/friends.php, mod/activity/index.php,
+ mod/activity/languages/en.php, mod/activity/manifest.xml,
+ mod/activity/opendd.php, mod/activity/start.php,
+ mod/activity/views/default/activity/css.php,
+ mod/activity/views/default/activity/wrapper.php, mod/apiadmin/index.php,
+ mod/apiadmin/languages/en.php, mod/apiadmin/manifest.xml,
+ mod/apiadmin/start.php, mod/crontrigger/manifest.xml,
+ mod/crontrigger/start.php, mod/diagnostics/actions/download.php,
+ mod/diagnostics/index.php, mod/diagnostics/languages/en.php,
+ mod/diagnostics/manifest.xml, mod/diagnostics/start.php,
+ .../views/default/diagnostics/forms/download.php,
+ mod/garbagecollector/languages/en.php, mod/garbagecollector/manifest.xml,
+ mod/garbagecollector/start.php, mod/groups/actions/addtogroup.php,
+ mod/groups/actions/edit.php, mod/groups/actions/forums/addpost.php,
+ mod/groups/actions/forums/addtopic.php,
+ mod/groups/actions/forums/deletepost.php,
+ mod/groups/actions/forums/deletetopic.php,
+ mod/groups/actions/forums/edittopic.php, mod/groups/actions/join.php,
+ mod/groups/actions/joinrequest.php, mod/groups/actions/leave.php,
+ mod/groups/addtopic.php, mod/groups/all.php, mod/groups/discussions.php,
+ mod/groups/edit.php, mod/groups/edittopic.php, mod/groups/forum.php,
+ mod/groups/graphics/icon.php, mod/groups/groupprofile.php,
+ mod/groups/index.php, mod/groups/invite.php, mod/groups/languages/en.php,
+ mod/groups/manifest.xml, mod/groups/membership.php, mod/groups/new.php,
+ mod/groups/start.php, mod/groups/topicposts.php,
+ mod/groups/views/default/forms/forums/addpost.php,
+ mod/groups/views/default/forms/forums/addtopic.php,
+ .../views/default/forms/forums/edittopic.php,
+ mod/groups/views/default/forms/groups/edit.php,
+ mod/groups/views/default/forms/groups/invite.php,
+ mod/groups/views/default/forum/topicposts.php,
+ mod/groups/views/default/forum/topics.php,
+ mod/groups/views/default/forum/viewposts.php,
+ mod/groups/views/default/group/group.php,
+ mod/groups/views/default/groups/css.php,
+ mod/groups/views/default/groups/groupgallery.php,
+ mod/groups/views/default/groups/grouplisting.php,
+ mod/groups/views/default/groups/groupprofile.php,
+ mod/groups/views/default/groups/icon.php,
+ mod/groups/views/default/groups/members.php,
+ mod/groups/views/default/groups/profileitems.php,
+ .../views/default/object/groupforumtopic.php,
+ .../default/river/relationship/member/create.php,
+ mod/groups/views/default/sharing/invite.php,
+ .../default/widgets/group_entities_widget/edit.php,
+ .../default/widgets/group_entities_widget/view.php,
+ .../default/widgets/group_members_widget/edit.php,
+ .../default/widgets/group_members_widget/view.php,
+ mod/groups/views/rss/forum/topics.php,
+ mod/groups/views/rss/forum/viewposts.php,
+ mod/groups/views/rss/groups/profileitems.php, mod/guidtool/export.php,
+ mod/guidtool/format_picker.php, mod/guidtool/import.php,
+ mod/guidtool/index.php, mod/guidtool/languages/en.php,
+ mod/guidtool/manifest.xml, mod/guidtool/start.php, mod/guidtool/view.php,
+ .../views/default/forms/guidtool/export.php,
+ .../views/default/forms/guidtool/format.php,
+ .../views/default/forms/guidtool/import.php,
+ mod/guidtool/views/default/guidtool/gallery.php,
+ mod/guidtool/views/default/guidtool/listing.php,
+ mod/guidtool/views/default/guidtool/profile.php,
+ .../views/default/object/guidtoolwrapper.php, mod/logbrowser/index.php,
+ mod/logbrowser/languages/en.php, mod/logbrowser/manifest.xml,
+ mod/logbrowser/start.php, mod/logbrowser/views/default/object/logwrapper.php,
+ mod/logrotate/languages/en.php, mod/logrotate/manifest.xml,
+ mod/logrotate/start.php, mod/profile/actions/cropicon.php,
+ mod/profile/actions/deletedefaultprofileitem.php,
+ mod/profile/actions/edit.php, mod/profile/actions/editdefault.php,
+ mod/profile/actions/iconupload.php,
+ mod/profile/actions/resetdefaultprofile.php, mod/profile/defaultprofile.php,
+ mod/profile/edit.php, mod/profile/editicon.php, mod/profile/icon.php,
+ mod/profile/index.php, mod/profile/javascript.php, mod/profile/manifest.xml,
+ mod/profile/start.php, mod/profile/views/default/profile/edit.php,
+ .../views/default/profile/editdefaultprofile.php,
+ mod/profile/views/default/profile/editicon.php,
+ mod/profile/views/default/profile/gallery.php,
+ mod/profile/views/default/profile/hoverover.php,
+ mod/profile/views/default/profile/icon.php,
+ mod/profile/views/default/profile/javascript.php,
+ mod/profile/views/default/profile/listing.php,
+ mod/profile/views/default/profile/menu/actions.php,
+ .../views/default/profile/menu/adminlinks.php,
+ mod/profile/views/default/profile/menu/links.php,
+ .../views/default/profile/menu/linksownpage.php,
+ mod/profile/views/default/profile/metatags.php,
+ mod/profile/views/default/profile/profilelinks.php,
+ mod/profile/views/default/profile/submenu.php,
+ mod/profile/views/default/profile/userdetails.php,
+ mod/reportedcontent/actions/add.php, mod/reportedcontent/actions/archive.php,
+ mod/reportedcontent/actions/delete.php, mod/reportedcontent/add.php,
+ mod/reportedcontent/index.php, mod/reportedcontent/languages/en.php,
+ mod/reportedcontent/manifest.xml, mod/reportedcontent/start.php,
+ .../views/default/reportedcontent/form.php, mod/river/manifest.xml,
+ mod/river/start.php, .../views/default/widgets/river_widget/edit.php,
+ .../views/default/widgets/river_widget/view.php,
+ .../default/widgets/river_widget_friends/edit.php,
+ .../default/widgets/river_widget_friends/view.php,
+ .../actions/email/confirm.php, mod/uservalidationbyemail/languages/en.php,
+ mod/uservalidationbyemail/manifest.xml, mod/uservalidationbyemail/start.php,
+ search/index.php, search/users.php, services/api/rest.php,
+ services/export/handler.php, settings/index.php, settings/plugins.php,
+ settings/statistics.php, settings/user.php, upgrade.php, version.php,
+ views/default/account/forms/forgotten_password.php,
+ views/default/account/forms/login.php,
+ views/default/account/forms/register.php,
+ views/default/account/forms/useradd.php, views/default/admin/main.php,
+ views/default/admin/main_opt/plugins.php,
+ views/default/admin/main_opt/site.php,
+ views/default/admin/main_opt/statistics.php,
+ views/default/admin/main_opt/user.php, views/default/admin/plugins.php,
+ views/default/admin/plugins_opt/plugin.php, views/default/admin/site.php,
+ views/default/admin/statistics.php,
+ views/default/admin/statistics_opt/basic.php,
+ views/default/admin/statistics_opt/numentities.php,
+ views/default/admin/statistics_opt/online.php, views/default/admin/user.php,
+ views/default/admin/user_opt/adduser.php,
+ views/default/admin/user_opt/search.php, views/default/ajax/loader.php,
+ views/default/annotation/generic_comment.php, views/default/api/output.php,
+ views/default/basic_elements/welcome.php, views/default/canvas/default.php,
+ views/default/canvas/layouts/one_column.php,
+ .../canvas/layouts/two_column_left_sidebar.php,
+ .../canvas/layouts/two_column_right_sidebar.php,
+ views/default/canvas/layouts/widgets.php,
+ views/default/comments/forms/edit.php, views/default/css.php,
+ views/default/export/entity.php, views/default/export/metadata.php,
+ views/default/export/relationship.php, views/default/friends/collection.php,
+ views/default/friends/collections.php,
+ views/default/friends/forms/collectionfields.php,
+ views/default/friends/forms/edit.php, views/default/friends/list.php,
+ views/default/friends/picker.php, views/default/friends/tablelist.php,
+ views/default/friends/tablelistcountupdate.php,
+ views/default/graphics/icon.php, views/default/group/default.php,
+ views/default/input/access.php, views/default/input/button.php,
+ views/default/input/calendar.php, views/default/input/checkboxes.php,
+ views/default/input/email.php, views/default/input/file.php,
+ views/default/input/form.php, views/default/input/hidden.php,
+ views/default/input/longtext.php, views/default/input/password.php,
+ views/default/input/pulldown.php, views/default/input/radio.php,
+ views/default/input/reset.php, views/default/input/submit.php,
+ views/default/input/tags.php, views/default/input/text.php,
+ views/default/input/url.php, views/default/messages/errors/error.php,
+ views/default/messages/errors/list.php,
+ views/default/messages/exceptions/exception.php,
+ views/default/messages/list.php, views/default/messages/messages/list.php,
+ views/default/messages/messages/message.php,
+ views/default/navigation/pagination.php,
+ views/default/navigation/topbar_tools.php,
+ views/default/navigation/viewtype.php,
+ .../notifications/settings/usersettings.php,
+ views/default/object/default.php, views/default/object/object.php,
+ views/default/object/plugin.php, views/default/object/widget.php,
+ views/default/output/calendar.php, views/default/output/checkboxes.php,
+ views/default/output/confirmlink.php, views/default/output/date.php,
+ views/default/output/email.php, views/default/output/iframe.php,
+ views/default/output/longtext.php, views/default/output/pulldown.php,
+ views/default/output/radio.php, views/default/output/tagcloud.php,
+ views/default/output/tags.php, views/default/output/text.php,
+ views/default/output/url.php, views/default/page_elements/elgg_topbar.php,
+ views/default/page_elements/footer.php,
+ views/default/page_elements/owner_block.php,
+ views/default/page_elements/spotlight.php,
+ views/default/page_elements/title.php,
+ views/default/pageshells/pageshell.php, views/default/river/dashboard.php,
+ views/default/river/relationship/friend/create.php,
+ views/default/river/wrapper.php, views/default/search/gallery.php,
+ views/default/search/gallery_listing.php, views/default/search/listing.php,
+ views/default/settings/install.php, views/default/settings/system.php,
+ views/default/site/default.php, views/default/spotlight/default.php,
+ views/default/text/about.php, views/default/text/privacy_view.php,
+ views/default/text/tos_view.php, views/default/user/default.php,
+ views/default/user/settings/email.php,
+ views/default/user/settings/language.php,
+ views/default/user/settings/name.php,
+ views/default/user/settings/password.php,
+ views/default/usersettings/main.php,
+ views/default/usersettings/main_opt/plugins.php,
+ views/default/usersettings/main_opt/statistics.php,
+ views/default/usersettings/main_opt/user.php,
+ views/default/usersettings/plugins.php,
+ views/default/usersettings/plugins_opt/plugin.php,
+ views/default/usersettings/statistics.php,
+ .../usersettings/statistics_opt/numentities.php,
+ .../default/usersettings/statistics_opt/online.php,
+ views/default/welcome.php, views/default/welcome/logged_in.php,
+ views/default/welcome/logged_out.php, views/default/widgets/editwrapper.php,
+ views/default/widgets/wrapper.php, views/failsafe/canvas/default.php,
+ views/failsafe/input/button.php, views/failsafe/input/checkboxes.php,
+ views/failsafe/input/form.php, views/failsafe/input/hidden.php,
+ views/failsafe/input/longtext.php, views/failsafe/input/pulldown.php,
+ views/failsafe/input/reset.php, views/failsafe/input/submit.php,
+ views/failsafe/input/text.php, views/failsafe/messages/errors/error.php,
+ views/failsafe/messages/errors/list.php,
+ views/failsafe/messages/exceptions/exception.php,
+ views/failsafe/messages/list.php, views/failsafe/messages/messages/list.php,
+ views/failsafe/messages/messages/message.php,
+ views/failsafe/messages/sanitisation/htaccess.php,
+ views/failsafe/messages/sanitisation/settings.php,
+ views/failsafe/pageshells/pageshell.php, views/failsafe/settings/install.php,
+ views/failsafe/settings/system.php, views/foaf/canvas/default.php,
+ views/foaf/pageshells/pageshell.php, views/foaf/user/default.php,
+ views/js/object/default.php, views/js/pageshells/pageshell.php,
+ views/js/user/default.php, views/json/api/output.php,
+ views/json/canvas/default.php, views/json/export/entity.php,
+ views/json/export/metadata.php, views/json/export/relationship.php,
+ views/json/group/default.php, views/json/messages/exceptions/exception.php,
+ views/json/object/default.php, views/json/pageshells/pageshell.php,
+ views/json/search/entity_list.php, views/json/site/default.php,
+ views/json/user/default.php, views/opendd/canvas/default.php,
+ views/opendd/export/entity.php, views/opendd/export/metadata.php,
+ views/opendd/export/relationship.php, views/opendd/group/default.php,
+ views/opendd/messages/exceptions/exception.php,
+ views/opendd/object/default.php, views/opendd/pageshells/pageshell.php,
+ views/opendd/site/default.php, views/opendd/user/default.php,
+ views/php/api/output.php, views/php/canvas/default.php,
+ views/php/export/entity.php, views/php/export/metadata.php,
+ views/php/export/relationship.php, views/php/group/default.php,
+ views/php/messages/exceptions/exception.php, views/php/object/default.php,
+ views/php/pageshells/pageshell.php, views/php/search/entity_list.php,
+ views/php/site/default.php, views/php/user/default.php,
+ views/rss/annotation/default.php, views/rss/canvas/default.php,
+ views/rss/group/default.php, views/rss/object/default.php,
+ views/rss/pageshells/pageshell.php, views/rss/user/default.php,
+ views/xml/api/output.php, views/xml/messages/exceptions/exception.php,
+ views/xml/pageshells/pageshell.php, views/xml/xml-rpc/output.php: Refs #706
+
+2009-01-23 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/notifications/languages/en.php, mod/notifications/start.php: Menu
+ heading changes
+
+ * mod/notifications/actions/save.php: Added save action for the notification
+ subscriptions.
+
+ * mod/notifications/index.php, mod/notifications/languages/en.php,
+ mod/notifications/start.php,
+ .../default/notifications/subscriptions/form.php: Added notification
+ subscriptions page.
+
+ * engine/lib/languages.php: Moved current language detection out into the
+ function get_language();
+
+2009-01-23 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php, views/default/js/initialise_elgg.php,
+ views/default/navigation/topbar_tools.php: new cross-browser js toolbar menu
+
+2009-01-23 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/sessions.php: Refs #562: Configuration flag to disable database
+ sessions.
+
+ * languages/en.php: Fixes missing translations
+
+ * version.php: Bumped version to today
+
+2009-01-22 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../default/usersettings/statistics_opt/online.php: Closes #702: Correct
+ parameters fed to get_system_log
+
+2009-01-22 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/css.php,
+ .../jquery/jquery-easing-compatibility.1.2.pack.js,
+ vendors/jquery/jquery-easing.1.2.pack.js,
+ .../jquery/jquery-ui-personalized-1.5.3.packed.js,
+ .../jquery/jquery-ui-personalized-1.5.packed.js,
+ vendors/jquery/jquery.easing.1.3.packed.js,
+ views/default/js/friendsPickerv1.php, views/default/js/initialise_elgg.php,
+ views/default/page_elements/header.php: jquery framework and avatar menu
+ updated
+
+2009-01-22 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/notification.php: A further change to ensure notification
+ messages don't get changed for every method if one method needs to make a
+ change.
+
+ * engine/lib/notification.php: Slight change to notifications.
+
+ * engine/lib/notification.php: Added more granular notification hook
+
+2009-01-22 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, engine/lib/metadata.php: Closes #701: Blank tags
+ not returned by string_to_tag_array
+
+2009-01-22 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/notification.php: Granular notification: a start
+
+2009-01-22 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/relationships.php: Relationships no longer double added
+
+2009-01-21 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/plugins.php: Closes #700: If a plugin doesn't physically exist
+ then it is deleted.
+
+ * views/default/usersettings/plugins_opt/plugin.php: User settings
+ translated
+
+ * views/default/admin/plugins_opt/plugin.php,
+ views/default/usersettings/plugins_opt/plugin.php: Reverted.
+
+ * views/default/admin/plugins_opt/plugin.php,
+ views/default/usersettings/plugins_opt/plugin.php: Tools menus now elgg_echo
+ folder name
+
+2009-01-21 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php: Introducing a function that orders by sums of
+ an annotation AND limits by a metadata value
+
+2009-01-21 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/activity/all.php, mod/activity/friends.php, mod/activity/index.php,
+ mod/activity/languages/en.php, mod/activity/manifest.xml,
+ mod/activity/opendd.php, mod/activity/start.php,
+ mod/activity/views/default/activity/css.php,
+ mod/activity/views/default/activity/dashboard.php,
+ mod/activity/views/default/activity/wrapper.php,
+ .../views/default/settings/activity/edit.php,
+ mod/activity/views/opendd/activity/dashboard.php: Added Activity stream back
+ in
+
+ * engine/lib/users.php: Closes #699: get_user_by_username now using access
+ controls. Will no longer throw exception when accessing disabled users.
+
+2009-01-20 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php: Added toggling for the annotation sum list
+ functions.
+
+ * engine/lib/annotations.php: Added to and fixed the list by annotation
+ count functions.
+
+ * engine/lib/annotations.php: Fix for previous
+
+ * engine/lib/annotations.php: Added the missing 'group by' clause to the get
+ annotations by sum SQL query.
+
+2009-01-19 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/plugins.php: Added user to user settings
+
+ * engine/lib/plugins.php: Refs #697: Now using plugin hook so one can do
+ live validation of values
+
+ * engine/lib/widgets.php: Closes #698: Typo corrected - nice spot!
+
+ * actions/plugins/settings/save.php, actions/plugins/usersettings/save.php,
+ engine/lib/plugins.php: Closes #697: Events triggered when plugin settings
+ are updated.
+
+2009-01-19 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php: Fix for previous.
+
+ * engine/lib/annotations.php: Added annotation sum functions
+
+2009-01-19 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/metastrings.php: Closes #691: Should have been
+ is_memcache_available()
+
+2009-01-16 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/email/save.php, actions/user/language.php, actions/user/name.php:
+ Closes #689: Email now only changed if it is different than the one
+ registered, also a number of other settings changed in this way.
+
+ * actions/widgets/add.php, actions/widgets/reorder.php: Widget save errors
+ now use correct message box
+
+2009-01-15 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/header.php: Elgg version info now present in
+ headers.
+
+ * mod/crontrigger/manifest.xml, mod/crontrigger/start.php: Closes #672: Poor
+ mans cron plugin enabled. This triggers events according to page load.
+
+ * engine/lib/elgglib.php:
+
+ * engine/lib/elgglib.php: Added shutdown, system event. Refs #672
+
+ * mod/groups/actions/forums/edittopic.php: Editing post no longer takes
+ ownership
+
+ * actions/email/save.php: Refs #641: Email changer now prevents changing to
+ the same as another user.
+
+2009-01-14 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/sessions.php, languages/en.php: Closes #669: Logins rate
+ limited. Accounts are limited to 5 fails in a 5 minute period, meaning an
+ attacker can try one password per minute.
+
+2009-01-13 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/system_log.php: Comment correction.
+
+ * engine/lib/elgglib.php: Fix for template handler override.
+
+2009-01-13 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/group.php, engine/lib/objects.php, engine/lib/sites.php,
+ engine/lib/users.php: Closes #676: Entity subtables now deleted on failed
+ connections.
+
+2009-01-13 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Better trigger_plugin_hook documentation.
+
+2009-01-13 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/user/resetpassword.php, engine/lib/users.php: Closes #675:
+ Salt changed during password reset
+
+ * engine/lib/sessions.php:
+
+2009-01-12 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/tags.php: Tag updates.
+
+2009-01-11 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/owner_block.php: Added rel="nofollow" rss and
+ opendd links in ownerblock
+
+2009-01-09 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/user/makeadmin.php, actions/admin/user/removeadmin.php,
+ languages/en.php, .../views/default/profile/menu/adminlinks.php: Closes #240:
+ It is now possible to downgrade an admin user.
+
+ * engine/lib/users.php: Closes #560: Pagination parameters added.
+
+ * mod/groups/languages/en.php, .../views/default/object/groupforumtopic.php:
+ Closes #544: Logged out view now shows correct dates, also tidied up some
+ translation issues.
+
+ * engine/lib/elgglib.php, engine/lib/entities.php: Minor variable name and
+ comment change.
+
+ * actions/admin/user/unban.php, engine/lib/api.php, engine/lib/sessions.php,
+ engine/lib/users.php, engine/schema/mysql.sql,
+ engine/schema/upgrades/2009010901.sql, languages/en.php,
+ mod/profile/views/default/profile/css.php,
+ mod/profile/views/default/profile/gallery.php,
+ mod/profile/views/default/profile/icon.php,
+ mod/profile/views/default/profile/listing.php,
+ .../views/default/profile/menu/adminlinks.php,
+ mod/profile/views/default/profile/profilelinks.php,
+ mod/profile/views/default/profile/userdetails.php, version.php: Closes #668:
+ Banning now works through a flag in the users_entity table. Database upgrade
+ required. * Added ElggUser::isBanned(); * Added 'banned' column to
+ users_entity * Modified ban() and unban() * Modified pam functions to check
+ $user->isBanned() * Modified login() to check $user->isBanned() * Modified
+ sessions_init() to check isBanned() and destroy session accordingly *
+ Modified profile views to highlight banned users and prevent menus for
+ non-admin users.
+
+2009-01-08 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/system_log.php: Closes #588: Don't remember adding this
+ check... but anyway, double entries regression fixed.
+
+ * engine/lib/entities.php: Minor error message improvement
+
+ * engine/lib/entities.php: Added extra belts and braces check (minor)
+
+ * engine/lib/entities.php: Added extra belts and braces check (minor)
+
+ * engine/lib/users.php: Refs #668: Building on [2546] and providing ban and
+ unban functions. Later these will be replaced with "banning" functions.
+
+ * mod/groups/views/default/forms/groups/edit.php: Closes #664: Defaults
+ added to radio buttons
+
+ * engine/lib/statistics.php: Limit max display of active users to 10.
+
+ * actions/admin/user/ban.php, engine/lib/users.php: Refs #668, #640: Cleaner
+ interface provided for banning.
+
+ * actions/admin/user/ban.php, engine/lib/entities.php, engine/lib/users.php:
+ Refs #640: Renamed and moved entities.php:disable_entities to
+ user.php:disable_user_entities
+
+ * engine/lib/entities.php: Delete replaced by disable in disable_entity
+
+ * engine/schema/mysql.sql, engine/schema/upgrades/2009010801.sql,
+ version.php: Closes #666: Added some extra indexes
+
+ * languages/en.php, mod/uservalidationbyemail/languages/en.php: Closes #546:
+ Translation moved
+
+ * engine/lib/annotations.php: Closes #663: Added access checks on entity on
+ get_entities_from_annotation and count functions.
+
+ * engine/lib/metadata.php: Closes #667: Minor tweak, an e should be an m
+
+2009-01-07 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/relationships.php,
+ .../default/widgets/group_members_widget/view.php: Closes #410: Pagination
+ parameter now passed in relationship list view.
+
+ * engine/lib/access.php, mod/groups/groupprofile.php,
+ mod/groups/languages/en.php: Closes #286: Group access restrictions issue
+ fixed, modified from patch supplied with #315
+
+ * views/failsafe/settings/system.php: Refs #622: Missing command from
+ failsafe view
+
+ * mod/groups/views/default/groups/forum_latest.php: Closes #660: Minor text
+ tweak
+
+ * actions/admin/site/update_basic.php, actions/systemsettings/install.php,
+ languages/en.php, views/default/account/forms/login.php,
+ views/default/settings/system.php: Closes #662: https on login.
+
+2009-01-06 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/navigation/pagination.php: Closes #587: The area of code in
+ question hasn't been coded as defencively as it could have been.
+
+ * engine/lib/annotations.php: Fixes #648: Copy and paste error corrected.
+
+2009-01-05 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: * Added addRelationship to ElggEntity... bit of
+ an omission!
+
+ * htaccess_dist: Closes #656: Disabled mod_deflate for all actions so that
+ active downloads will no longer be double compressed.
+
+ * engine/lib/configuration.php, engine/lib/elgglib.php,
+ engine/lib/sites.php: Fixes #655, Refs #628: Install now working with correct
+ event chain (#628).
+
+2009-01-02 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/friends/add.php: Closes #649: Added checking to report when friend
+ add fails.
+
+2009-01-01 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php: bug #634 fixed
+
+ * mod/groups/views/default/groups/forum_latest.php: lang tweak in group
+ forums
+
+ * mod/groups/actions/edit.php, mod/groups/languages/en.php,
+ mod/groups/start.php, mod/groups/views/default/forms/groups/edit.php,
+ mod/groups/views/default/groups/forum_latest.php: groups owners can choose if
+ they want pages/files/forum enabled or not. Still a little more to do, this
+ is just the beginning code.
+
+ * mod/groups/languages/en.php: missing group lang items added
+
+2008-12-31 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/notification.php, engine/settings.example.php: Closes #579:
+ Allows configurable option $CONFIG->broken_mta = true. If set, this uses "\n"
+ instead of "\r\n" in email headers.
+
+2008-12-30 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/metadata.php: Closes #643: Confirmed bug, applied fix as
+ suggested.
+
+ * views/default/page_elements/owner_block.php: Closes #633: User name in
+ owner block is now link. This may require additional skinning.
+
+ * engine/lib/plugins.php: Closes #608: Placing a file called "disabled" in
+ mod now disables all plugins, allowing easier recovery of an elgg site with
+ screwed up modules.
+
+ * views/default/input/button.php: Closes #519: Typo. Well spotted.
+
+ * languages/en.php: Closes #500
+
+ * mod/reportedcontent/languages/en.php,
+ .../views/default/reportedcontent/form.php,
+ .../views/default/reportedcontent/listing.php: Closes #504
+
+2008-12-29 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/input.php: Closes #396: Form should probably not be permitted
+ on input.
+
+2008-12-23 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Closes #628: Event change now terminates on false.
+ Nice spot :)
+
+2008-12-09 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/updateclient/index.php, mod/updateclient/languages/en.php,
+ mod/updateclient/manifest.xml, mod/updateclient/start.php,
+ .../views/default/settings/updateclient/edit.php: Removed upgrade client
+ since it doesn't really matter.
+
+ * README.txt, version.php: Ticked up version number
+
+2008-12-08 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/schema/mysql.sql, engine/schema/upgrades/2008120501.sql: Fixes #615
+
+2008-12-08 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/user/ban.php: Fixes to user banning (action side).
+
+ * engine/lib/elgglib.php: Fixes to user banning.
+
+2008-12-05 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Prototype view caching
+
+ * engine/lib/notification.php: Closes #597: GUID must now be non-zero for
+ messages to be sent
+
+2008-12-05 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: unused rule removed #583
+
+2008-12-05 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/schema/mysql.sql, engine/schema/upgrades/2008111901.sql,
+ engine/schema/upgrades/2008120501.sql, version.php: Closes #611: Made name
+ field longer
+
+2008-12-04 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/access.php: Closes #421 : Catches the DB Exception, so
+ hopefully this will prevent the error from showing up in the future :)
+
+ * languages/en.php, views/default/friends/collectiontabs.php: Closes #501
+
+ * engine/lib/users.php, mod/uservalidationbyemail/start.php: Closes #609
+
+ * engine/schema/upgrades/2008112002.sql: Fixed update script
+
+ * htaccess_dist: ETag support
+
+2008-12-04 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/groups/forum_latest.php: latest group discussion
+ bug fixed
+
+2008-12-03 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/location.php: Some location tweaks
+
+ * engine/lib/users.php: Closes #550: Code metadata now moved to private
+ storage
+
+ * mod/groups/membership.php: Closes #604
+
+2008-11-28 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/input/radio.php: Improved radio button value retention
+
+ * views/default/input/checkboxes.php: Improved checkbox value retention
+
+2008-11-26 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/metatags.php: FOAF header added to
+ profile
+
+ * views/foaf/user/default.php: Foaf ident on mailbox for friends
+
+ * engine/schema/upgrades/2008112601.sql: Closes #571: Widgets now use
+ private store for settings
+
+ * engine/lib/entities.php, engine/lib/widgets.php: Closes #571: Widgets now
+ use private store for settings
+
+ * engine/lib/opendd.php:
+
+2008-11-25 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, engine/lib/location.php, engine/schema/mysql.sql,
+ engine/schema/upgrades/2008112501.sql, version.php: Hook for future geocoding
+ library added.
+
+ * engine/schema/mysql.sql:
+
+2008-11-24 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/metadata.php: Closes #580: Fixed tagging trim and strtolower
+
+2008-11-21 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/calendar.php: Refs #452: Basic entity listing functions. Needs
+ canvas.
+
+ * engine/lib/users.php: Closes #554: Validation procedure now correctly
+ screening for ascii space
+
+2008-11-20 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/sessions.php:
+
+ * engine/lib/sessions.php: Added site secret to fingerprint to make it
+ harder to guess
+
+ * engine/lib/sessions.php, engine/lib/users.php: Fixes #548: Introducing
+ set_last_login($user_guid). Called from login(), but call from any
+ authentication code where appropriate.
+
+ * engine/lib/calendar.php, engine/lib/entities.php: Refs #452: Calendar
+ interface on entities
+
+ * engine/lib/entities.php: Introducing get_entities_from_private_setting();
+
+2008-11-20 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/start.php, mod/groups/topicposts.php, upgrade.php: No need to
+ trigger the init event on upgrade.
+
+2008-11-20 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/schema/upgrades/2008112001.sql,
+ engine/schema/upgrades/2008112002.sql, version.php: Refs #569, #570, #571:
+ Update script for both users and plugins plugin settings
+
+ * engine/schema/upgrades/2008111901.sql,
+ engine/schema/upgrades/2008112001.sql, version.php: Migrate plugin settings
+ from plugin to new settigns store.
+
+ * engine/lib/entities.php, engine/lib/plugins.php: Refs #571. Fixes #569,
+ #570: * Plugin functions set to use private data store. * Fixed some db
+ queries * Modified plugin class overriding get/set functions
+
+ * engine/schema/mysql.sql, engine/schema/upgrades/2008111901.sql: Refs #569,
+ #570, #571: Minor database schema errors corrected
+
+ * engine/lib/entities.php: Refs #569, #570, #571: Corrected and optimised
+ insert query
+
+ * engine/schema/mysql.sql, engine/schema/upgrades/2008111901.sql: Refs #569,
+ #570, #571: Minor database schema errors corrected
+
+ * engine/lib/entities.php: Refs #569, #570, #571: dbprefix not prefix;
+
+ * engine/lib/entities.php: Refs #569, #570, #571: Added
+ remove_all_private_settings()
+
+ * engine/lib/entities.php: Refs #569, #570, #571: Added
+ get_all_private_settings();
+
+ * engine/lib/metadata.php: Fixes #531: Access permissions enforced
+
+2008-11-19 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, engine/lib/export.php, engine/lib/extender.php,
+ engine/lib/group.php, engine/lib/objects.php, engine/lib/relationships.php,
+ engine/lib/sites.php, engine/lib/users.php, views/default/export/entity.php,
+ views/json/export/entity.php, views/json/export/metadata.php,
+ views/json/export/relationship.php, views/php/export/entity.php,
+ views/php/export/metadata.php, views/php/export/relationship.php: Fixes #568:
+ Exportable code now inclusive not exclusive. * Added extra function
+ Exportable interface * OpenDD export modified * PHP & JSON export views
+ modified * Default export view will still show all data if you are logged in
+ as admin (since this view is used by the guidtool)
+
+2008-11-19 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/schema/upgrades/2008111901.sql: Introducing the new private
+ settings table.
+
+2008-11-19 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/calendar.php: Added get notable enities on relationship
+
+ * engine/lib/calendar.php: Added get notable enities on metadata
+
+ * engine/lib/calendar.php: Added get notable enities
+
+2008-11-18 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/start.php: Closes #557
+
+2008-11-14 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * dashboard/index.php, engine/lib/access.php, engine/lib/annotations.php,
+ engine/lib/entities.php, engine/lib/extender.php, engine/lib/filestore.php,
+ engine/lib/group.php, engine/lib/languages.php, engine/lib/metadata.php,
+ engine/lib/notification.php, engine/lib/plugins.php, engine/lib/sessions.php,
+ engine/lib/tags.php, engine/lib/users.php, engine/lib/usersettings.php: *
+ Introducing get_loggedin_user() and get_loggedin_userid() * ACLs now using
+ get_loggedin_user* * Some logic cleaned up * Some "Undefined..." messages
+ cleaned up
+
+ * views/default/search/entity_list.php:
+
+ * views/default/search/entity_list.php: Removed some "Undefined" messages
+
+ * engine/lib/elgglib.php: Removed some "Undefined" messages
+
+ * views/default/input/access.php, views/default/input/button.php,
+ views/default/input/submit.php: Removed some "Undefined" messages
+
+ * mod/profile/views/default/profile/userdetails.php: Removed some
+ "Undefined" messages
+
+ * views/default/canvas/layouts/widgets.php: Removed some "Undefined"
+ messages
+
+ * engine/lib/elgglib.php: "Undefined" messages tidied up
+
+ * engine/lib/metastrings.php: "Undefined" messages tidied up
+
+ * engine/lib/river.php: "Undefined" messages tidied up
+
+ * engine/lib/sessions.php:
+
+ * engine/lib/sessions.php: * Candidate for initial ElggSession magic class *
+ Session now properly cleared on init and logout - this has knock on effect
+ that you can no longer assume that $_SESSION['id'] or 'guid' will be integer,
+ making it necessary to cast.
+
+ * engine/lib/admin.php: Minor tidying of code
+
+2008-11-13 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/sessions.php: Experimental ElggCache
+
+2008-11-12 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php:
+
+ * engine/lib/cache.php: No longer blanks all caches when clearing
+
+ * engine/lib/cache.php: Closes #543
+
+2008-11-11 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * htaccess_dist: Ifdef expires
+
+ * htaccess_dist: Minor tweaks to mod_gzip config. Note that gzip can't
+ compress some things due to the way that the apache 1.3 stack works
+
+ * htaccess_dist: Simplified GZIP
+
+ * htaccess_dist: Mod deflate support added
+
+ * htaccess_dist: Turned on mod_gzip if available
+
+ * htaccess_dist: Added default expiry
+
+ * mod/groups/graphics/icon.php: Expires header added to group icons
+
+2008-11-10 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/icon.php: Content length on images
+
+ * mod/groups/graphics/icon.php: Content length on images
+
+ * _css/css.php, engine/lib/elgglib.php: Content length headers on JS and css
+
+ * engine/lib/elgglib.php: Javascript now correctly marked as cacheable
+
+ * _css/css.php: Fixes #541: CSS Now not being cached. Error is being caused
+ somewhere in the elgg framework which prevents pragma caching from working...
+ not sure what
+
+ * languages/en.php: Refs #520
+
+ * languages/en.php, views/default/friends/collections.php: Closes #501
+
+ * mod/groups/languages/en.php,
+ mod/groups/views/default/groups/forum_latest.php: Closes #507
+
+ * engine/lib/memcache.php: Tidied.
+
+2008-11-07 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/database.php: Profiling now showing queries executed before
+ debug flag being set
+
+ * engine/lib/metadata.php: Refs #529: Experimental memcaching for metadata
+
+ * engine/lib/elgglib.php: Fixed datalists error
+
+ * engine/lib/elgglib.php: Refs #529: Experimental memcaching on datalists
+
+ * engine/start.php: Removing unnecessary call to datalists
+
+ * index.php: Fixes #530
+
+ * engine/lib/metastrings.php: Refs #529: Experimental caching of metastrings
+
+ * engine/lib/entities.php: Refs #529: Experimental object level caching
+
+2008-11-06 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Reverted limited caching back to array since
+ caching objects don't work so well for these.
+
+ * engine/lib/elgglib.php, engine/schema/mysql.sql,
+ engine/schema/upgrades/2008110601.sql, version.php: datalists now has primary
+ key, datalist set function optimised
+
+ * engine/lib/elgglib.php: Not possible to get any more, so tell them so
+
+ * engine/lib/users.php: Last action query update delayed to avoid
+ invalidating query cache unnecessarily.
+
+ * engine/lib/database.php: * Database functions optimised and centralised a
+ bit * Caching now caches queries which return no data * Introducing
+ execute_delayed_query family for executing queries AFTER the page has loaded.
+
+ * engine/lib/cache.php: isset fixes
+
+ * engine/lib/export.php, engine/lib/extender.php,
+ engine/lib/relationships.php: Some tidying of objects and opendd export
+
+ * engine/lib/cache.php, engine/lib/memcache.php: Added test to see if
+ memcache is available.
+
+ * engine/lib/cache.php, engine/lib/memcache.php: Class hierachy changed to
+ separate shared memory caching
+
+2008-11-05 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/river.php:
+
+ * engine/lib/river.php: Minor extension to river
+
+ * engine/lib/memcache.php: Minor tweak
+
+ * engine/lib/river.php: Slight rejig in the way the river works
+
+ * engine/lib/elgglib.php: Extends elgg_view_tree to support other view
+ types.
+
+ * engine/lib/cache.php: Added "add" method to cache only if it doesn't exist
+ already.
+
+ * engine/lib/database.php: Revert use of memcache for database query cache
+
+ * engine/lib/memcache.php: Changed default timeout
+
+2008-11-04 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/memcache.php: Removed cache clearing for now.
+
+ * engine/lib/database.php, engine/lib/memcache.php: More tweaks
+
+ * engine/lib/memcache.php: Experimental memcache support
+
+ * engine/lib/memcache.php, languages/en.php: Closes #516: Experimental
+ memcache support
+
+ * engine/settings.example.php: Installation notes
+
+ * languages/en.php: Refs #514: Memcache error messages
+
+ * engine/settings.example.php: Refs #514: Memcache settings
+
+ * engine/lib/cache.php: Refs #514 : Using memcache if available
+
+ * engine/settings.example.php: Refs #514
+
+ * engine/lib/memcache.php: First draft memcache object. No testing yet
+ carried out, submitted 'cos I'm moving computers.
+
+ * engine/lib/cache.php:
+
+ * engine/lib/cache.php, engine/lib/database.php, engine/lib/entities.php:
+ Moved caching to function so it can be easily replaced
+
+2008-11-03 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Refs #514: Entity and subtype caching
+
+ * engine/lib/cache.php: Minor tweaks
+
+ * engine/lib/cache.php: back to private
+
+ * engine/lib/cache.php: Initialisation correct
+
+ * engine/lib/database.php: Database using new memory cache object
+
+ * engine/lib/api.php, engine/lib/cache.php: * ElggCache interface improved *
+ ElggStaticVariableCache introduced as a placeholder for more advanced
+ caching.
+
+ * engine/lib/database.php: Experimental database query caching, please
+ report problems asap.
+
+ * engine/lib/calendar.php: Stub added refs #452
+
+ * engine/lib/database.php: Experimental database query caching, please
+ report problems asap.
+
+ * engine/schema/mysql.sql, engine/schema/upgrades/2008110301.sql,
+ version.php: Some missing keys added.
+
+ * engine/lib/access.php, engine/lib/annotations.php,
+ engine/lib/configuration.php, engine/lib/elgglib.php,
+ engine/lib/entities.php, engine/lib/group.php, engine/lib/objects.php,
+ engine/lib/query.php, engine/lib/relationships.php, engine/lib/sites.php,
+ engine/lib/users.php: Minor tweaks 'cos case does matter...
+
+2008-11-01 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/object/groupforumtopic.php: Minor style fix.
+
+ * mod/groups/discussions.php, .../views/default/object/groupforumtopic.php:
+ Latest discussion fix
+
+2008-10-31 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/group.php: Closes #378: Fixed incorrect relationship direction.
+
+ * engine/lib/notification.php: Closes #446: * Errant \r\n and \r chars
+ coverted to \n. * newlines stripped from subject headers. * Lines starting
+ with From are changed to >From
+
+ * engine/handlers/cron_handler.php, mod/garbagecollector/start.php: Changed
+ cron to use output buffering (letting you simply echo rather than needing to
+ pass variables around)
+
+ * mod/groups/views/default/forms/groups/edit.php: Closes #461: Localisations
+ added
+
+ * mod/guidtool/views/default/guidtool/gallery.php,
+ mod/guidtool/views/default/guidtool/listing.php: Refs #494: GUID listed
+
+ * mod/garbagecollector/start.php: Added system, gc plugin hook to garbage
+ collector
+
+ * engine/lib/notification.php: Closes #488: This is indeed a typo... well
+ spotted :)
+
+ * engine/lib/database.php, engine/lib/metastrings.php,
+ mod/garbagecollector/start.php: Closes #493: Moved database queries out of
+ module and in to core in line with best practice.
+
+2008-10-30 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/groups/groupprofile.php: Closes #486
+
+2008-10-30 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * README.txt: Version number fail.
+
+ * version.php: Elgg 1.1 final.
+
+ * version.php: Further version update
+
+ * README.txt: Version number change in the readme file.
+
+2008-10-30 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: profile block layout issue in IE7 fixed
+
+2008-10-29 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * version.php: Version number change
+
+ * languages/en.php: A better description of the RESTful API
+
+2008-10-29 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/access.php: Reverted database access permission caching.
+
+2008-10-29 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/languages/en.php: Group topic error message
+
+ * _graphics/upgrader.gif, upgrade.php, views/default/settings/upgrading.php:
+ Replacement upgrade notifier
+
+ * INSTALL.txt, UPGRADE.txt: Slight update to crontab instructions
+
+ * mod/activity/all.php, mod/activity/friends.php, mod/activity/index.php,
+ mod/activity/languages/en.php, mod/activity/manifest.xml,
+ mod/activity/start.php, mod/activity/views/default/activity/dashboard.php,
+ mod/activity/views/default/activity/wrapper.php,
+ .../views/default/settings/activity/edit.php: Farewell, activity, we hardly
+ knew ye.
+
+2008-10-29 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * INSTALL.txt, UPGRADE.txt: Modification to install and upgrade text files
+ to include details about the crontab
+
+2008-10-29 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/settings/upgrading.php: Added upgrading screen
+
+ * _graphics/upgrader.gif, languages/en.php, upgrade.php: Visual upgrader.
+
+2008-10-29 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/activity/manifest.xml, mod/apiadmin/manifest.xml,
+ mod/diagnostics/manifest.xml, mod/garbagecollector/manifest.xml,
+ mod/groups/manifest.xml, mod/guidtool/manifest.xml,
+ mod/logbrowser/manifest.xml, mod/logrotate/manifest.xml,
+ mod/profile/manifest.xml, mod/river/manifest.xml,
+ mod/updateclient/manifest.xml, mod/uservalidationbyemail/manifest.xml:
+ manifest files sync'ed
+
+2008-10-29 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/account/forms/login.php, views/default/css.php: persistent
+ login checkbox styled
+
+2008-10-29 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php: Menu link text change, to be more descriptive
+
+2008-10-29 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/start.php, mod/profile/views/default/profile/userdetails.php:
+ Hide 'about me' on custom profiles
+
+2008-10-29 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Annotation pagination is now corrected where more
+ than 10 items are being displayed at once.
+
+2008-10-29 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * javascript/friendsPickerv1.js, javascript/initialise_elgg.js: remove js,
+ moved into views
+
+ * javascript/initialise_elgg.js, views/default/css.php,
+ views/default/js/initialise_elgg.php: updates for v1.1, css cleanup, removal
+ of redundant classes, redundant js removed
+
+2008-10-29 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/system_log.php, mod/logrotate/start.php: Logrotate and archive
+ containing offset. Table still created as $now but containing < $now-period.
+
+2008-10-28 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/garbagecollector/languages/en.php, mod/garbagecollector/manifest.xml,
+ mod/garbagecollector/start.php,
+ .../default/settings/garbagecollector/edit.php: Introducing the Elgg garbage
+ collector.
+
+2008-10-28 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/groups/css.php: layout bug when not group owner
+
+2008-10-28 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/navigation/toolbox.php: Removed the toolbox.
+
+ * views/default/page_elements/header.php: Removed needless comment
+
+2008-10-28 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: added additional styles for code, pre, blockquote,
+ dl, dt etc
+
+2008-10-28 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, engine/lib/plugins.php: Views are now more
+ granular.
+
+2008-10-28 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/login.php, languages/en.php,
+ views/default/account/forms/login.php: Closes #306
+
+2008-10-28 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/failsafe/messages/errors/list.php,
+ views/failsafe/messages/messages/list.php: messages in failsafe mode moved to
+ inline ones - so they don't obscure text below
+
+2008-10-28 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../river/annotation/generic_comment/create.php: Hoiking out the generic
+ comment view again. Needs to be rethought.
+
+ * languages/en.php, .../river/annotation/generic_comment/create.php:
+ Committed a generic comment view.
+
+2008-10-28 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/social.php, languages/en.php: Closes #440
+
+ * engine/lib/access.php: Flags to prevent queries being run multiple times.
+
+ * engine/lib/access.php: Removed spurious notice
+
+ * languages/en.php, views/default/admin/plugins_opt/plugin.php: Closes #476:
+ Well spotted.
+
+2008-10-27 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/owner_block.php: additional dicv added to
+ owner block for theme purposes
+
+2008-10-27 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * crontab.example:
+
+ * mod/groups/languages/fr.php, mod/groups/languages/it.php,
+ mod/groups/languages/ru.php, mod/groups/languages/th.php,
+ mod/groups/languages/zh.php: REMOVED LANGUAGE FILES FROM CORE. This is due to
+ a stupid and frustrating legal reason.
+
+ * languages/de.php, languages/es.php, languages/fr.php, languages/it.php,
+ languages/ru.php, languages/th.php, languages/zh.php,
+ mod/activity/languages/ru.php, mod/apiadmin/languages/ru.php,
+ mod/diagnostics/languages/fr.php, mod/diagnostics/languages/it.php,
+ mod/diagnostics/languages/ru.php, mod/diagnostics/languages/th.php,
+ mod/diagnostics/languages/zh.php, mod/guidtool/languages/it.php,
+ mod/guidtool/languages/ru.php, mod/guidtool/languages/th.php,
+ mod/guidtool/languages/zh.php, mod/logbrowser/languages/fr.php,
+ mod/logbrowser/languages/it.php, mod/logbrowser/languages/ru.php,
+ mod/logbrowser/languages/th.php, mod/logbrowser/languages/zh.php,
+ mod/reportedcontent/languages/fr.php, mod/reportedcontent/languages/it.php,
+ mod/reportedcontent/languages/ru.php, mod/reportedcontent/languages/th.php,
+ mod/reportedcontent/languages/zh.php, mod/river/languages/fr.php,
+ mod/river/languages/it.php, mod/river/languages/ru.php,
+ mod/river/languages/th.php, mod/river/languages/zh.php,
+ mod/updateclient/languages/fr.php, mod/updateclient/languages/it.php,
+ mod/updateclient/languages/ru.php, mod/updateclient/languages/th.php,
+ mod/updateclient/languages/zh.php,
+ mod/uservalidationbyemail/languages/ru.php: REMOVED LANGUAGE FILES FROM CORE.
+ This is due to a stupid and tedious legal reason.
+
+ * mod/logrotate/languages/en.php, mod/logrotate/manifest.xml,
+ mod/logrotate/start.php, .../views/default/settings/logrotate/edit.php:
+ Closes #215: Log rotation added.
+
+2008-10-27 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/actions/leave.php, mod/groups/start.php,
+ mod/groups/views/default/forum/topicposts.php,
+ mod/groups/views/default/forum/topics.php,
+ .../views/default/object/groupforumtopic.php: Removing WSOD errors in groups
+
+2008-10-27 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/system_log.php: Refs #215: Minor tweak to logic
+
+2008-10-27 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php: Hopefully slightly friendlier token mismatch errors.
+
+2008-10-27 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/system_log.php: Refs #215: System hook for archiving log. Cron
+ yet to be added.
+
+ * .../views/default/profile/menu/adminlinks.php: Closes #448: Functionality
+ was present, but was lacking interface. Interface provided.
+
+ * views/default/object/default.php: Closes #460: Good spot, thanks for the
+ contribution!
+
+ * languages/en.php: Closes #473: Good spot
+
+2008-10-24 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * account/register.php, actions/register.php, engine/lib/users.php,
+ views/default/account/forms/register.php: The friend invite infrastructure is
+ now secure.
+
+2008-10-24 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/activity/languages/ru.php:
+
+ * mod/activity/languages/ru.php: Closes #469: Thankyou for the translation!
+
+2008-10-24 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * account/register.php, register.php: Further additions to the registration
+ form.
+
+ * views/default/account/forms/register.php: Added friend guid handling to
+ the registration form.
+
+ * engine/lib/users.php: Added the ability to add a user to a user's friends
+ list on registration.
+
+ * actions/register.php: Added the ability to add a user to a user's friends
+ list on registration.
+
+ * engine/lib/entities.php: Revert.
+
+ * engine/lib/entities.php: Improvements for container overrides.
+
+2008-10-22 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/input/radio.php: Fix for input/radio where keys aren't
+ specified
+
+2008-10-22 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/usersettings/plugins_opt/plugin.php: Minor tweaks to tools
+ settings
+
+ * languages/en.php: Added reply
+
+2008-10-22 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php: Small language additions for open and close.
+
+2008-10-22 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/shout_speech_bubble.gif: removed and added to thewire plugin
+
+2008-10-22 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/cron.php: Better default forward
+
+2008-10-22 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/groups/css.php: Fixed typo! Well spotted,
+ @notomodungwa
+
+2008-10-22 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * crontab.example, engine/lib/cron.php: Increasing sub-hour cron granularity
+
+ * engine/schema/mysql.sql, engine/schema/upgrades/2008102101.sql: Removed
+ unnecessary column
+
+ * engine/lib/sessions.php: Closes #453 and #463: Completed work. Sessions
+ now stored in database.
+
+ * engine/lib/sessions.php, engine/schema/mysql.sql,
+ engine/schema/upgrades/2008102101.sql: Semi-working session code. Still won't
+ permit logging in, commented out until there is time to fix. Problem seems
+ to be based around the action_gatekeeper() and the values set for the
+ __elgg_session. Removing this component from the key causes the token to be
+ valid. My feeling is that the session is not being saved or loaded
+ correctly.
+
+2008-10-21 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/navigation/topbar_tools.php: #458 fixed - IE7 conditional
+ statement bug
+
+2008-10-21 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/sessions.php, engine/schema/mysql.sql,
+ engine/schema/upgrades/2008102101.sql, version.php: Database session code.
+ IMPORTANT NOTE: The trigger for this is commented out, so old session code
+ is used. There are serious problems with using the new code since it causes a
+ chicken and egg problem with the upgrade script.
+
+ * engine/lib/group.php, engine/lib/objects.php, engine/lib/sites.php,
+ engine/lib/users.php: Closes #457: Now returns $guid on success, false on
+ fail
+
+ * engine/lib/sites.php, languages/en.php: Added safety rail to prevent
+ disabling/deleting of currently viewed site.
+
+2008-10-20 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/output/checkboxes.php: Output/checkboxes now defers to
+ output/tags rather than output/text; much more sensible.
+
+ * engine/lib/input.php: The input filter now deals with two-dimensional
+ input arrays.
+
+2008-10-20 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/apiadmin/views/default/object/api_key.php:
+
+ * mod/apiadmin/views/default/object/api_key.php: Minor tweaks to avoid
+ breaking non-admin css
+
+2008-10-20 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/plugins.php: Important fix for deleted plugins.
+
+2008-10-17 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/output/checkboxes.php, views/default/output/radio.php:
+ Default output fields for radio and checkboxes
+
+ * search/users.php: Fixed double layout issue
+
+2008-10-17 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/usersettings.php, languages/en.php, settings/index.php,
+ settings/plugins.php, settings/statistics.php, settings/statistics/index.php,
+ settings/user.php, settings/user/index.php, views/default/object/plugin.php,
+ views/default/usersettings/plugins.php,
+ views/default/usersettings/plugins_opt/plugin.php: Closes #335: Marcus Povey
+ : * Per user tools settings now present again (only displays if there are
+ settings present AND the plugin is enabled - needs skinning accordingly) *
+ Re-jigged the settings code to behave like a proper page handler. * Minor
+ tweak to language
+
+ * engine/lib/system_log.php, engine/schema/mysql.sql,
+ engine/schema/upgrades/2008101701.sql, version.php: Changes to access any
+ system log code. Introducing owner guid on items which is necessary for
+ access control. Requires upgrade.php to be run
+
+2008-10-17 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/admin/plugins_opt/plugin.php, views/default/css.php:
+ activity stream basic style applied, and plugin reorder links adjusted
+
+2008-10-16 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: widget gallery more info spacing fixed
+
+2008-10-16 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php: Minor language tweak.
+
+ * actions/admin/plugins/reorder.php, admin/plugins/index.php,
+ engine/lib/plugins.php, languages/en.php, views/default/admin/plugins.php,
+ views/default/admin/plugins_opt/plugin.php: You can now reorder plugins.
+
+2008-10-16 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/css.php: gap in user menu removed
+
+2008-10-16 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/activity/all.php, mod/activity/friends.php, mod/activity/index.php,
+ mod/activity/languages/en.php, mod/activity/manifest.xml,
+ mod/activity/start.php, mod/activity/views/default/activity/dashboard.php,
+ mod/activity/views/default/activity/wrapper.php,
+ .../views/default/settings/activity/edit.php: Initial activity view. Missing
+ functionality: comments, tabs and drill down ability.
+
+2008-10-16 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/statistics.php: Improved online users stats so that more than
+ 10 get displayed
+
+2008-10-16 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Moving internal function out of elgg_view_tree()
+ since this caused problems
+
+ * engine/lib/configuration.php: Closes #438
+
+ * engine/lib/river.php:
+
+ * engine/lib/river.php, engine/lib/system_log.php, engine/schema/mysql.sql,
+ engine/schema/upgrades/2008101601.sql, version.php: Closes #442: Requires
+ schema upgrade. Side effect - friends activity rivers will be blanked.
+
+ * engine/lib/river.php: River performance tweak
+
+2008-10-15 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/languages/ru.php: Committing groups translation
+
+ * .../notifications/settings/usersettings.php: Notification methods now
+ better translated
+
+ * languages/ru.php: Closes #433: Merged changes from trac and email
+ submissions. Thanks for all submissions!
+
+ * languages/ru.php: Initial core russian translation
+
+ * mod/apiadmin/languages/ru.php, mod/diagnostics/languages/ru.php,
+ mod/guidtool/languages/ru.php, mod/logbrowser/languages/ru.php,
+ mod/reportedcontent/languages/ru.php, mod/river/languages/ru.php,
+ mod/updateclient/languages/ru.php,
+ mod/uservalidationbyemail/languages/ru.php: Refs #433: Russian translations
+ for core plugins
+
+2008-10-15 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php: view link added to en.php
+
+2008-10-14 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/social.php: Removed an annoying variable cast that was
+ destroying everything.
+
+ * engine/lib/social.php: The word blacklist for filter_string is now loaded
+ on init.
+
+2008-10-14 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: Edit profile form modified
+
+2008-10-14 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php:
+
+ * mod/profile/actions/deletedefaultprofileitem.php,
+ mod/profile/actions/editdefault.php,
+ mod/profile/actions/resetdefaultprofile.php, mod/profile/defaultprofile.php,
+ mod/profile/start.php, .../views/default/profile/editdefaultprofile.php:
+ Closes #235: Simple profile editor in place
+
+2008-10-13 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/friends_picker_arrow_left.gif,
+ _graphics/friends_picker_arrow_right.gif,
+ _graphics/friends_picker_arrows.gif, _graphics/gallery_back_icon.gif,
+ _graphics/gallery_back_icon_on.gif, views/default/css.php: Friends picker
+ arrows combined into one resource, and updated with hover effect. Redundant
+ image gallery icons removed.
+
+2008-10-13 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php:
+
+ * engine/lib/elgglib.php: Catching error on datalists
+
+2008-10-13 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/avatar_menu_arrow.gif, _graphics/avatar_menu_arrow_hover.gif,
+ _graphics/avatar_menu_arrow_open.gif, _graphics/avatar_menu_arrows.gif,
+ mod/profile/views/default/profile/css.php: Avatar user menu arrows updated to
+ use one image rather than 3
+
+2008-10-13 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/river.php: Closes #412
+
+ * engine/lib/river.php: Refs #431: Belts and braces added to river view
+
+2008-10-13 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/account/forms/useradd.php: Adjusted spacing on add user form
+
+2008-10-13 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/start.php: Refs #432: Typo
+
+ * mod/groups/start.php: Closes #432: Hook added as profile
+
+ * mod/profile/start.php: Minor commenting
+
+2008-10-13 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * INSTALL.txt, UPGRADE.txt: Updated the install and upgrade text.
+
+2008-10-13 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/reportedcontent/languages/zh.php: Refs #424: reportedcontent
+
+ * mod/groups/languages/zh.php, mod/guidtool/languages/zh.php,
+ mod/river/languages/zh.php: Refs #424: guidtool, groups, river
+
+ * mod/diagnostics/languages/zh.php, mod/logbrowser/languages/zh.php,
+ mod/updateclient/languages/zh.php: Refs #424: Diagnostics, logbrowser,
+ updateclient
+
+ * languages/zh.php: Refs #424: Core translations added.
+
+ * UPGRADE.txt, engine/lib/version.php, upgrade.php: Closes #430
+
+2008-10-13 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/graphics/defaultlarge.gif,
+ mod/groups/graphics/defaultmedium.gif, mod/groups/graphics/defaultsmall.gif,
+ mod/groups/graphics/defaulttiny.gif,
+ .../views/default/icon/group/default/large.php,
+ .../views/default/icon/group/default/medium.php,
+ .../views/default/icon/group/default/small.php,
+ .../views/default/icon/group/default/tiny.php,
+ mod/profile/graphics/defaultlarge.jpg,
+ mod/profile/graphics/defaultmedium.jpg,
+ mod/profile/graphics/defaultsmall.jpg, mod/profile/graphics/defaulttiny.jpg,
+ mod/profile/graphics/defaulttopbar.jpg: Groups updated to use new icon method
+ and new groups icons added. Profile updated with new default avatars
+
+2008-10-13 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/upgrades/2008101303.php, version.php: Fixed the previous user
+ login issue.
+
+2008-10-13 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/languages.php: Introducing get_current_language(). Refs #235
+
+ * mod/profile/start.php: Refs #235: Added hooks for future admin interface
+
+ * mod/profile/start.php:
+
+2008-10-13 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/annotation/generic_comment.php: default message styled
+
+2008-10-13 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/start.php: Refs #235: Now possible for plugins to change
+ default profile (plugin hook 'profile:fields', 'profile'.
+
+2008-10-10 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: widget more info tooltip improvements
+
+ * views/default/canvas/layouts/widgets.php: further fixes to the widget
+ gallery to use css-based images
+
+ * views/default/canvas/layouts/widgets.php, views/default/css.php: Updated
+ widget picker gallery to use classes for images rather than hard-coded
+ resources.
+
+2008-10-08 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/css.php,
+ mod/profile/views/default/profile/icon.php,
+ mod/profile/views/default/profile/javascript.php: user avatar menu method
+ adjusted to avoid hard-coded image resources
+
+2008-10-08 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php, views/default/messages/errors/list.php,
+ views/default/messages/messages/list.php: system message strings moved to
+ elgg_echo
+
+2008-10-08 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, mod/profile/icon.php,
+ .../views/default/icon/user/default/large.php,
+ .../views/default/icon/user/default/master.php,
+ .../views/default/icon/user/default/medium.php,
+ .../views/default/icon/user/default/small.php,
+ .../views/default/icon/user/default/tiny.php,
+ .../views/default/icon/user/default/topbar.php: Default icon overrides.
+
+ * engine/lib/entities.php, mod/profile/icon.php: Simple hook to allow for
+ default user and entity icons.
+
+2008-10-08 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php:
+
+ * engine/lib/entities.php, mod/groups/graphics/defaultlarge.jpg,
+ mod/groups/graphics/defaultmedium.jpg, mod/groups/graphics/defaultsmall.jpg,
+ mod/groups/graphics/defaulttiny.jpg, mod/groups/start.php,
+ mod/groups/views/default/groups/icon.php: Closes #417 & #418
+
+ * engine/lib/filestore.php, mod/profile/start.php: Minor optimisations.
+ Introducing exists() on filestores
+
+ * _graphics/icons/default/topbar.png, engine/lib/entities.php,
+ mod/profile/icon.php, mod/profile/start.php,
+ mod/profile/views/default/profile/editicon.php,
+ mod/profile/views/default/profile/icon.php,
+ views/default/page_elements/elgg_topbar.php: Closes #301: Profile icons now
+ use getIcon() API. Overrides now possible: For themes to override, create a
+ plugin hook listening to 'entity:icon:url' and object 'user'. In the hook
+ return a different url. To replace default user icons in a plugin one might
+ create a hook: function profile_usericon_hook($hook, $entity_type,
+ $returnvalue, $params) { if ((!$returnvalue) && ($params['entity'] instanceof
+ ElggUser)) { // return your default graphic here. } } And set it to priority
+ 900 (lower priority than the code that displays a pretty icon for users but
+ higher than the default object display code in entities.php)
+
+ * engine/lib/users.php: Allowing '.' in username, refs #415
+
+ * views/rss/pageshells/pageshell.php: Fixes #413: Rss feeds with GET query
+ strings now functioning. Thanks for your patch, nice spot!
+
+ * languages/en.php: Fixes #415
+
+2008-10-08 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/ajax/loader.php, views/default/css.php: ajax loader updated
+ to use an image from _graphics rather than a hard-coded image resource (to
+ make theming possible).
+
+2008-10-07 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/statistics.php: Removing pagination from online users.
+
+2008-10-07 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/river.php: Removed debug
+
+ * engine/lib/entities.php: Minor tweaks to the getIcon code: * Default now
+ running on priority 1000 * Renamed default hook to a better name Marcus Povey
+
+2008-10-07 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/relationships.php,
+ .../views/default/widgets/a_users_groups/view.php: Removed pagination for the
+ groups widget
+
+2008-10-07 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/schema/mysql.sql, engine/schema/upgrades/2008100601.sql: Bugfixes
+ to river script
+
+ * engine/schema/mysql.sql: Added river key to main schema
+
+2008-10-07 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/failsafe/messages/errors/list.php,
+ views/failsafe/messages/messages/list.php: updated failsafe message divs
+ dimensions
+
+2008-10-07 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/upgrades/2008100601.php, engine/lib/upgrades/2008100701.php:
+ Changed the name. Refs #409
+
+ * engine/lib/database.php, engine/lib/upgrades/2008100601.php,
+ engine/lib/version.php, languages/en.php, version.php: Closes #409: PHP
+ update script to update core added
+
+ * mod/uservalidationbyemail/start.php: removed debug
+
+ * mod/groups/languages/th.php: Removing BOM
+
+ * mod/updateclient/languages/th.php: Thai language pack
+
+ * mod/river/languages/th.php: Thai language pack
+
+ * mod/reportedcontent/languages/th.php: Thai language pack
+
+ * mod/logbrowser/languages/th.php: Thai language pack
+
+ * mod/guidtool/languages/th.php: Thai language pack
+
+ * mod/groups/languages/th.php: Thai language pack
+
+ * mod/diagnostics/languages/th.php: Thai language pack
+
+ * languages/th.php: Closes #406: Thanks for your submission
+
+2008-10-06 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/metadata.php, mod/profile/start.php: Introduced a way to either
+ tether metadata access to entities, or to make them independent - in either
+ case, explicitly.
+
+2008-10-06 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/notification.php:
+
+ * engine/lib/river.php: Deleted old gumpf refs #402 and #407
+
+ * engine/lib/river.php, engine/schema/mysql.sql,
+ engine/schema/upgrades/2008100601.sql,
+ .../default/river/ElggRelationship/create.php,
+ .../default/river/relationship/member/create.php,
+ .../default/river/ElggUser/profileiconupdate.php,
+ .../views/default/river/ElggUser/profileupdate.php,
+ .../river/user/default/profileiconupdate.php,
+ .../default/river/user/default/profileupdate.php,
+ views/default/river/ElggRelationship/create.php,
+ views/default/river/relationship/friend/create.php: Closes #402 and #407 :
+ Right! Finally nailed this fscking issue to the wall (hopefully). Modified
+ system log to hold extra information about the class being stored, this lets
+ us pull only the required rows from the event log. This drastically
+ simplifies and speeds up the query. Requires: Database upgrade. Outstanding
+ issues: Query is using filesort despite using correct index. Still much
+ faster than the last method!
+
+ * engine/lib/elgglib.php: Removed unnecessary debug
+
+2008-10-06 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, engine/lib/entities.php, engine/lib/metadata.php,
+ views/default/search/entity_list.php: You can now remove pagination from a
+ list
+
+ * search/users.php: User browsing is revamped.
+
+ * engine/lib/users.php: List_user_friends_objects now lets you hide the
+ toggle to gallery view
+
+2008-10-06 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/logbrowser/index.php: Refs #402 and #407: Extra fields added to
+ system_log
+
+ * engine/lib/extender.php, engine/lib/relationships.php,
+ engine/lib/system_log.php, engine/schema/mysql.sql,
+ engine/schema/upgrades/2008100601.sql, version.php: Refs #402 and #407: Extra
+ fields added to system_log
+
+2008-10-06 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Minor fix for previous.
+
+ * engine/lib/elgglib.php: Introducing elgg_view_tree, for getting an array
+ of views
+
+ * engine/lib/elgglib.php, views/default/js/friendsPickerv1.php,
+ views/default/js/initialise_elgg.php, views/default/page_elements/header.php:
+ Elgg Javascript now goes through the views system
+
+ * engine/lib/access.php: A massive speed increase for access permissions. :)
+
+2008-10-06 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Closes #405: If -> else if. Nice spot.
+
+2008-10-04 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/comments/forms/edit.php: removed ratings hook from comments.
+ It will now go into plugins.
+
+2008-10-03 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php, views/default/messages/errors/list.php,
+ views/default/messages/messages/list.php: updated messaging system with
+ 'click to dismiss' and moved it's position to not overlap the top toolbar
+
+2008-10-03 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/systemsettings/install.php: Closes #399
+
+ * engine/lib/version.php: Fixes #401
+
+ * languages/en.php, mod/uservalidationbyemail/languages/en.php,
+ mod/uservalidationbyemail/start.php: Refs #311: Modified message slightly
+
+ * actions/register.php, engine/lib/users.php, .../actions/email/confirm.php,
+ mod/uservalidationbyemail/languages/en.php,
+ mod/uservalidationbyemail/start.php: Fixes #311, closes #345: Validation now
+ called via event 'user', 'validate'. Email validation now a plugin.
+
+2008-10-03 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php, views/default/messages/errors/list.php,
+ views/failsafe/messages/errors/list.php,
+ views/failsafe/messages/messages/list.php: updated messages system
+
+2008-10-03 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php: Removed old validation code
+
+ * languages/en.php: Refs #311 : Removing old email confirmation code.
+
+ * actions/email/confirm.php: Refs #311 : Removing old email confirmation
+ code.
+
+ * engine/lib/install.php: Fixing whitescreen on settings file creation
+
+ * mod/uservalidationbyemail/languages/en.php,
+ mod/uservalidationbyemail/manifest.xml, mod/uservalidationbyemail/start.php:
+ Refs #311: Saving stub prior to relocation...
+
+ * actions/systemsettings/install.php: Refs #311: Enable email validation
+ module by default
+
+ * engine/lib/users.php: Refs #311
+
+ * engine/lib/sessions.php: Refs #311
+
+ * actions/register.php: Refs #311
+
+ * actions/email/save.php: Refs #311
+
+ * actions/plugins/settings/save.php, actions/plugins/usersettings/save.php:
+ Closes #398
+
+ * engine/lib/install.php, engine/settings.example.php: Fixing installer
+ issue.
+
+2008-10-02 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/start.php: Fitter, happier group links
+
+ * engine/lib/admin.php: Added an admin override for container permissions
+ checking.
+
+ * mod/groups/start.php: Improved group menu items.
+
+2008-10-01 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * crontab.example, engine/handlers/cron_handler.php, engine/lib/cron.php,
+ htaccess_dist, languages/en.php: Improved cron support
+
+ * engine/lib/metadata.php: Closes #379
+
+ * engine/lib/metadata.php: Closes #389
+
+ * engine/lib/database.php, engine/lib/install.php: Fixes #395
+
+2008-09-30 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/actions.php: Minor tweaks
+
+ * engine/lib/actions.php: Changed to plugin hook
+
+ * engine/lib/actions.php: Closes #390: Triggers an event 'action', $action
+ before action is included. This is rather kludgy and we need to rethink this
+ a bit.
+
+ * engine/lib/plugins.php: Actually, bad idea...
+
+ * engine/lib/plugins.php: Events now triggered on plugin enable/disable
+
+ * actions/friends/remove.php, engine/lib/configuration.php,
+ engine/lib/users.php: Closes #388: Additionally the site check in
+ configuration_init() should be instanceof. Nice spot, thanks.
+
+2008-09-30 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php, views/default/messages/errors/list.php,
+ views/default/messages/messages/list.php: Messages/error notification system
+ updated with dismiss button, longer delay, and sticky/fixed position (at top
+ of viewport).
+
+2008-09-30 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/version.php: Install now works again
+
+2008-09-30 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/comments/forms/edit.php: ratings hook added to comments
+ block
+
+2008-09-29 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Added IP address tools, todo check licence.
+
+ * engine/lib/notification.php, languages/en.php: Set the notification
+ settings
+
+ * engine/lib/notification.php, languages/en.php: Notifications get
+ notification stuff in API form.
+
+ * actions/admin/site/update_basic.php, actions/systemsettings/install.php,
+ languages/en.php, views/default/settings/system.php,
+ views/failsafe/settings/system.php: Closes #383 & #384
+
+ * engine/lib/notification.php: Closes #369: For entities which are not users
+ the ->email field is used, failing that it tries to work out an address from
+ ->url and lastly from $CONFIG->site_guid. Closes #382: Fix applied as
+ suggested.
+
+2008-09-29 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/input.php: get_input can now be properly overridden by
+ set_input. Fixes #324
+
+2008-09-25 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/sessions.php:
+
+ * engine/lib/api.php:
+
+ * engine/lib/api.php: Debug
+
+ * engine/lib/api.php, engine/lib/sessions.php, services/api/rest.php:
+ Committing what I have at the end of the day, api still not 100%
+
+ * engine/lib/cache.php: Caching support fixed.
+
+ * engine/lib/api.php: Fixing auth_token code
+
+ * engine/lib/pam.php: Fixed issue with pam handler, now if required method
+ throws an exception the authentication short circuits with false.
+
+2008-09-25 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php: Clear annotations now clears annotations
+ properly when no name is specified. Fixes #357
+
+ * engine/lib/annotations.php: Count annotations now fails properly if a
+ metastring is not found. Fixes #377
+
+2008-09-25 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php: Make statisics nicer
+
+ * mod/apiadmin/languages/en.php: Make statisics nicer
+
+ * engine/lib/api.php: view now set by endpoint
+
+ * engine/lib/widgets.php: Closes #326: add_widget uses the specified
+ $user_guid as $widget->owner_guid
+
+2008-09-24 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/install.php:
+
+ * languages/en.php: Closes #360: Will now install on 5.1.6 or greater with a
+ warning, 5.2 with now warning.
+
+ * engine/lib/install.php: Closes #360: Will now install on 5.1.6 or greater
+ with a warning, 5.2 with now warning.
+
+ * mod/updateclient/start.php: Modified pinger to use new style endpoint
+ format. Note, this will require ping.elgg.org to be upgraded come next
+ release!
+
+ * engine/lib/ping.php: Modified pinger to use new style endpoint format.
+ Note, this will require ping.elgg.org to be upgraded come next release!
+
+ * engine/lib/ping.php, mod/diagnostics/start.php,
+ mod/updateclient/start.php, views/default/admin/statistics_opt/basic.php:
+ Closes 374: Using get_version function instead of including the version file.
+
+ * engine/lib/api.php, languages/en.php: Minor improvements to failure mode.
+
+ * engine/lib/api.php: auth_token api call now functional
+
+ * services/api/rest.php: Addapted to be called from pagehandler
+
+ * engine/lib/api.php:
+
+2008-09-24 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/access.php: Returning cache control back to access permissions.
+
+2008-09-24 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/apiadmin/actions/generate.php, mod/apiadmin/actions/revokekey.php,
+ mod/apiadmin/views/default/object/api_key.php: Added action_gatekeeper() code
+
+ * engine/lib/api.php:
+
+ * engine/lib/api.php: Added endpoint page handler.
+
+ * mod/apiadmin/actions/generate.php, mod/apiadmin/actions/revokekey.php,
+ mod/apiadmin/index.php, mod/apiadmin/languages/en.php,
+ mod/apiadmin/manifest.xml, mod/apiadmin/start.php,
+ .../views/default/apiadmin/forms/add_key.php,
+ mod/apiadmin/views/default/object/api_key.php: Introducing API key
+ administration panel
+
+ * engine/lib/api.php: Create keypair code added
+
+ * engine/lib/api.php: Added create_api_user
+
+ * engine/lib/api.php: Added remove_api_user function
+
+ * engine/lib/api.php: Will now handle banned users
+
+2008-09-24 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/access.php, engine/lib/metadata.php: Metadata permissions now
+ work as advertised, but had to remove caching in the process. Will attempt to
+ re-enable it shortly.
+
+2008-09-24 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/user/settings/name.php: Closes #362: Nice spot. Cause was
+ an omission of the user being edited being passed. No security issues
+ introduced by having this user set, since editing user must still pass a
+ canEdit() in the action itself.
+
+2008-09-23 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/database.php, engine/lib/version.php,
+ engine/schema/upgrades/2008092301.sql, languages/en.php, version.php: The
+ database schema will now automatically update itself on upgrade.
+
+ * engine/lib/api.php, engine/start.php: The cache library is now loaded
+ before the main library boot.
+
+2008-09-23 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/cache.php: Belts and braces
+
+2008-09-23 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/schema/upgrades/2008092301.sql: Database upgrade script from 1.0 to
+ latest schema.
+
+2008-09-22 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/api.php: API improvement. Authentication via token now logs
+ user in for that session.
+
+ * mod/profile/index.php: Closes #367: Widgets only displayed for found
+ profiles.
+
+2008-09-20 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/database.php: Apparently non-p connections are better in many
+ cases, see http://www.slideshare.net/techdude/how-to-kill-mysql-performance
+
+ * languages/it.php: Closes #363
+
+2008-09-19 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * friends/index.php, friends/of.php: Closes #358 and #359. Well spotted.
+
+ * languages/fr.php: Closes #356: Thanks for the contribution!
+
+2008-09-17 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php: API explanations added to language file
+
+ * engine/lib/access.php: Access permissions now cached correctly.
+
+ * engine/lib/plugins.php: Optimised plugin query.
+
+ * engine/lib/metadata.php: Short circuit added for missing values.
+
+ * engine/lib/plugins.php: Removed old gunk
+
+ * engine/lib/api.php: Load cache php
+
+ * engine/lib/api.php: Changed caching to memory.
+
+ * engine/schema/mysql.sql: Added hmac cache of hmacs we have seen before
+ (MEMORY TABLE)
+
+ * engine/schema/mysql.sql: Added hmac cache of hmacs we have seen before
+ (MEMORY TABLE)
+
+ * engine/lib/api.php: Some api improvements: * User tokens setable * List
+ api no longer requires token
+
+ * engine/schema/mysql.sql: Changed users_apisessions to use memory, since
+ there is no reason to store this forever.
+
+ * languages/de.php: Added german core from Elgg development group
+
+ * engine/lib/system_log.php: System log now using delayed writes.
+
+2008-09-15 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/schema/mysql.sql: Marcus Povey: * Some missing indexes added to
+ database. * Removed privileged path table since this is no longer used.
+
+ * engine/lib/elgglib.php: Removed privileged path code since this is no
+ longer used
+
+ * engine/lib/entities.php: Closes #346: More granularity on enable/disable.
+
+ * mod/reportedcontent/languages/it.php: Italian language patch
+
+ * mod/updateclient/languages/it.php: Italian language patch
+
+ * mod/river/languages/it.php: Italian language patch
+
+ * mod/logbrowser/languages/it.php: Italian language patch
+
+ * mod/guidtool/languages/it.php: Italian language patch
+
+ * mod/groups/languages/it.php: Italian language patch
+
+ * mod/diagnostics/languages/it.php: Italian language patch
+
+2008-09-12 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/gallery.php,
+ mod/profile/views/default/profile/listing.php,
+ mod/profile/views/default/profile/userdetails.php: Basic XFN support
+
+2008-09-11 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/reportedcontent/languages/en.php: Added missing translation
+
+2008-09-10 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/extender.php: Closes #349: We need to improve
+ detect_extender_valuetype
+
+ * languages/it.php: Closes #348: Thanks for the patch!
+
+ * languages/it.php: Closes #339 : Italian alpha core language pack applied.
+ Thanks for the contribution!
+
+ * engine/lib/languages.php: Improved language completeness algorithm.
+
+2008-09-09 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/fr.php: Closes #342: Thanks for the updates!
+
+ * engine/lib/languages.php: Minor tweak: Only shows percentage on things
+ less than 100% complete
+
+ * engine/lib/languages.php: Some language helper tools.
+
+ * engine/lib/annotations.php, engine/lib/metadata.php: Closes #338: You're
+ quite right, this is was an error on our part. Nice spot!
+
+ * engine/lib/languages.php, languages/en.php: Introducing: Admin only
+ translation "completeness" helper.
+
+2008-09-08 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/es.php: Preliminary spanish translation
+
+ * engine/lib/xml-rpc.php: Refs #172: Removed line endings on spec.
+
+ * mod/diagnostics/languages/fr.php, mod/groups/languages/fr.php,
+ mod/logbrowser/languages/fr.php, mod/reportedcontent/languages/fr.php,
+ mod/river/languages/fr.php, mod/updateclient/languages/fr.php: Closes #298:
+ Thankyou for your contribution!
+
+ * languages/fr.php: Closes #300: Thanks for the translation!
+
+ * languages/en.php, mod/groups/actions/forums/edittopic.php,
+ mod/groups/languages/en.php: Closes #320: Filled in missing translations
+
+2008-09-07 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/input/checkboxes.php, views/default/input/radio.php,
+ .../notifications/settings/usersettings.php: Fixes 334: Radio buttons were
+ part of the problem, label and option were the wrong way round (compare with
+ input/checkboxes). Second part of the problem was actually with
+ views/default/notifications/settings/usersettings.php, where the value of the
+ field was incorrectly being extracted from the settings array. Thanks for
+ the spot!
+
+2008-09-06 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/plugins/disable.php, actions/admin/plugins/enable.php,
+ views/default/admin/plugins_opt/plugin.php: Closes #327: Thanks for the
+ pointer. In the end I modified the fix from the patch you sent, it still uses
+ get but the generated token should make a CSRF attack much harder.
+
+ * actions/admin/user/ban.php, actions/admin/user/delete.php,
+ actions/admin/user/makeadmin.php, actions/admin/user/resetpassword.php,
+ actions/admin/user/unban.php, .../views/default/profile/menu/adminlinks.php:
+ Fixes #332: Added tokens and action_gatekeeper()
+
+ * engine/lib/database.php: Fixes #330: I implemented the changes you
+ suggested (except for quotes around the table name). What problems did you
+ encounter?
+
+ * mod/reportedcontent/languages/en.php: Refs #331: Trying this again...
+
+ * mod/reportedcontent/languages/en.php,
+ views/default/page_elements/owner_block.php: Closes 331: Removed fixed string
+ in translation. Thanks for the spot!
+
+2008-09-02 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/schema/mysql.sql: Set default db to UTF 8... for what it's worth.
+
+2008-09-01 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/input.php: Closes #305
+
+ * actions/admin/site/update_basic.php: Fixes #244
+
+ * views/default/settings/system.php: Fixes the regression introduced by
+ [2023]
+
+ * engine/lib/actions.php, engine/lib/sessions.php: Additional per-session
+ random token, additional randomness protection against CSRF. Report problems.
+
+2008-08-31 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/actions.php, engine/lib/sessions.php: Some session
+ fingerprinting code. Requires user agent to be consistent across requests.
+
+ * engine/lib/sessions.php: Regenerates session ID on user login. This helps
+ prevent some hijacking attacks.
+
+ * engine/lib/sessions.php: Minor tweak, logout now calls session_destroy()
+
+2008-08-28 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/languages.php, engine/start.php: Closes #313, Fixes #274:
+ Resolved strange OSX language file browsing, including speculative windows
+ fix. Thanks for the patch!
+
+2008-08-26 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php, views/default/canvas/layouts/widgets.php,
+ views/default/navigation/toolbox.php,
+ views/default/navigation/topbar_tools.php: Closes #304: Thanks for the patch!
+
+ * languages/en.php: Fixes #275: Thanks for the report!
+
+ * engine/lib/statistics.php, languages/en.php,
+ views/default/admin/statistics_opt/basic.php: Minor tweak to basic stats to
+ clarify number of users in the system.
+
+2008-08-25 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/filestore.php, engine/lib/users.php, languages/en.php: Closes
+ #254: If mb_string is installed then internationalised usernames are
+ supported in file system. Because of this I have raised mbstring from
+ recommended to a (non-fatal) core requirement. Because of the lack of a
+ unicode ctype_alnum function the validation occurs at username input. Because
+ of this I have improved the user registration code: This code now validates
+ for special chars etc in the username. I have also introduced the following
+ new plugin hooks (which are run after primary validation) which provide
+ plugins with the ability to add other requirements (extra security etc).
+ 'registeruser:validate:password' 'registeruser:validate:username'
+ 'registeruser:validate:email' Marcus Povey 25/8/08
+
+2008-08-22 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/input.php: Committing kses fix
+
+2008-08-21 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/systemsettings/install.php: Fixed ping error. Fixes #269
+
+ * engine/lib/elgglib.php, engine/lib/input.php: Fixed input for people with
+ magic quotes on.
+
+2008-08-21 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/systemsettings/install.php: Actually fixes #269
+
+ * actions/systemsettings/install.php: Fixes #269
+
+2008-08-21 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Added plugin hook to elgg_view.
+
+2008-08-21 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * version.php: Prelude to release
+
+ * engine/lib/elgglib.php: Fixes #280
+
+ * engine/lib/sessions.php: Blanking session code on initialisation fail
+
+2008-08-20 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/river/dashboard.php: Closes #253: Patch provided by
+ edfactor. Thanks for your contribution!
+
+2008-08-20 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/failsafe/pageshells/pageshell.php: install process password box
+ added
+
+ * views/failsafe/messages/errors/list.php,
+ views/failsafe/pageshells/pageshell.php: increased the size of the input
+ boxes on the install pages to faciliate url checking
+
+2008-08-20 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/systemsettings/install.php: Making it case insensitive...
+
+2008-08-20 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/avatar_mini.gif: removed unused image
+
+2008-08-20 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/site/update_basic.php, actions/systemsettings/install.php,
+ engine/lib/input.php, languages/en.php: Refs #273: Extra sanity checking on
+ install
+
+2008-08-20 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php: Language change
+
+ * languages/en.php, views/default/settings/system.php,
+ views/failsafe/settings/system.php: Installation clarity fixes
+
+2008-08-20 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Refs #272: Speculative fix. Added PORT support to
+ current_page_url(). Please test to see if this solves your problem...
+
+ * version.php: Oopsy, wrong package number
+
+ * version.php: Raising point number pre-package
+
+2008-08-20 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * htaccess_dist: Revised rewrite rules.
+
+2008-08-19 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/database.php: Refs #266: Error given if no database has been
+ set up.
+
+ * engine/lib/database.php, engine/lib/elgglib.php, engine/lib/install.php,
+ install.php, languages/en.php,
+ views/failsafe/messages/exceptions/exception.php: Refs #256: Basic
+ installation parameters checked. Fixes #266: If the install flag isn't set
+ then elgg_view will no longer attempt to load data from the database.
+
+ * engine/lib/elgglib.php: Refs #265: If $CONFIG->view not blank then it
+ overrides the session even if the session is set.
+
+ * engine/schema/mysql.sql: Fixes #260: Done. Nice spot.
+
+2008-08-18 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/access.php: Small access fix
+
+ * CONTRIBUTORS.txt: And again.
+
+ * CONTRIBUTORS.txt: Minor contributor file fix.
+
+ * engine/lib/access.php: Corrected minor friend collection issue
+
+2008-08-18 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * CONTRIBUTORS.txt: changed bens twitter account url
+
+2008-08-18 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/user/ban.php: Moving the disable_entities call
+
+ * engine/lib/elgglib.php: More submenu corrections
+
+ * actions/admin/user/ban.php: Banning a user disables their entities
+
+ * engine/lib/entities.php, engine/lib/users.php: Removing a user disables
+ their entities
+
+2008-08-18 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * version.php: Updated for release
+
+2008-08-17 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Fixed the submenu
+
+2008-08-17 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/graphics/defaultmaster.jpg: default image for cropper tool
+
+2008-08-17 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/navigation/topbar_tools.php: The top tool menu is now
+ alphabetically sorted.
+
+ * engine/lib/elgglib.php: Submenu items are now sorted.
+
+ * mod/groups/start.php: Renamed groups submenus
+
+ * mod/groups/languages/en.php: Added a missing translation string to groups.
+
+ * mod/groups/start.php: Corrected the 'your groups' link
+
+2008-08-17 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/spotlight/default.php: spotlight tweaks
+
+2008-08-17 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/friends/picker.php: Removed the context menu in the friends
+ picker.
+
+2008-08-17 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: force tinyMCE editor initial width for safari
+
+ * views/default/page_elements/footer.php: footer updated to fit more links
+
+ * _graphics/spotlight_back.gif, views/default/css.php: Opera fixes and new
+ spotlight back
+
+2008-08-17 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * dashboard/index.php, dashboard/latest.php, engine/lib/elgglib.php,
+ languages/en.php, views/default/dashboard/blurb.php: Wired in latest
+ activity, so new users aren't as lonely as they otherwise might be.
+
+2008-08-17 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/groups/css.php,
+ .../views/default/object/groupforumtopic.php: groups listing icon changed
+ from tiny to small latest discussion listing info block styled up
+
+2008-08-17 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/footer.php: footer tweak
+
+2008-08-17 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/actions/edit.php: Ensuring that tags are saved correctly in
+ profile
+
+2008-08-17 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/css.php, views/default/css.php: avatar
+ menu fixes for IE
+
+ * mod/groups/views/default/groups/css.php,
+ mod/profile/views/default/profile/css.php,
+ mod/profile/views/default/profile/javascript.php: avatar menu fix for IE
+ groups and profile pages
+
+2008-08-17 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * INSTALL.txt: Updated installation instructions
+
+2008-08-16 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/css.php,
+ mod/profile/views/default/profile/javascript.php: avatar menu in IE, z-index
+ bug work-around
+
+ * mod/profile/views/default/profile/javascript.php, views/default/css.php:
+ tools menu removed dynamic z-index
+
+2008-08-16 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/icon.php,
+ mod/profile/views/default/profile/userdetails.php: Removed avatar context
+ menu from large profile picture
+
+ * mod/logbrowser/start.php, .../views/default/logbrowser/adminlinks.php,
+ mod/profile/start.php, .../views/default/profile/menu/adminlinks.php,
+ .../views/default/profile/menu/adminwrapper.php: Admin links are now
+ consolidated
+
+ * engine/lib/users.php: Removing gallery on search user list function
+
+2008-08-16 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: menu selected item ie6 fix
+
+2008-08-16 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/spotlight/default.php: a little content added to the
+ spotlight
+
+ * .../views/default/reportedcontent/listing.php: reported content tweak
+
+2008-08-16 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/actions/edit.php, mod/profile/start.php,
+ mod/profile/views/default/profile/edit.php,
+ mod/profile/views/default/profile/javascript.php,
+ mod/profile/views/default/profile/metatags.php: Individual profile items can
+ now have access restrictions; also made the profile JS more cache friendly
+
+2008-08-16 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/reportedcontent/css.php,
+ .../views/default/reportedcontent/listing.php, views/default/css.php:
+ reported content updates
+
+ * views/default/css.php: tools settings updated
+
+2008-08-16 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php: lang string missing
+
+2008-08-16 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/groups/css.php: groups widget fixed for ie6
+
+2008-08-16 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/diagnostics/languages/en.php, mod/diagnostics/start.php: Globals and
+ PHP info added to diagnostics
+
+2008-08-16 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/admin/plugins_opt/plugin.php: further tweaks on admin
+ settings
+
+ * views/default/admin/plugins_opt/plugin.php: plugin settings moved to
+ hidden dropdown
+
+2008-08-16 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Code also useless
+
+ * engine/lib/entities.php: Salt free diet
+
+2008-08-16 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/css.php, views/default/css.php: avatar
+ menu fixed in admin area, admin area h3's fixed
+
+2008-08-15 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/owner_block_menu_dot.gif, views/default/css.php: owner block
+ menu
+
+2008-08-15 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php: Correction for the search list users by name
+ function.
+
+ * mod/reportedcontent/languages/en.php: A rookie error.
+
+2008-08-15 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/actions/addtogroup.php, mod/groups/actions/joinrequest.php:
+ Closes #234: Please use brackets defensively; The statement: if ($user =
+ get_entity($foo) && $group = get_entity($bar)) Will not do what you expect
+ it to do!
+
+2008-08-15 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php, languages/en.php, search/users.php,
+ views/default/user/search/finishblurb.php: Added proper search for users by
+ name
+
+ * mod/groups/views/rss/forum/topics.php,
+ mod/groups/views/rss/forum/viewposts.php,
+ mod/groups/views/rss/groups/profileitems.php: RSS views for forums
+
+ * views/rss/group/default.php: Group default RSS view
+
+2008-08-15 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: sidebar arrow position fixed for ie 6 & 7
+
+2008-08-15 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _css/css.php, mod/profile/icon.php, mod/profile/javascript.php,
+ views/default/friends/picker.php, views/default/page_elements/header.php:
+ Caching enhancements
+
+2008-08-15 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: screwed up profile page on ie6 fixed
+
+2008-08-15 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/reportedcontent/languages/en.php: Added a language entry for reported
+ items (again)
+
+2008-08-15 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/membership.php: gallery view removed from group lists
+
+ * mod/reportedcontent/index.php: reportedcontent bug sorted
+
+2008-08-15 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/forms/groups/invite.php: Ensured that all friends
+ come through for group invite
+
+ * mod/groups/views/default/forms/groups/invite.php: Ensured that all friends
+ come through for group invite
+
+ * views/default/page_elements/owner_block.php: Owner block defaults to
+ current logged in user.
+
+ * engine/lib/input.php: Improved the kses whitelist
+
+2008-08-15 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * install.php, views/failsafe/canvas/default.php,
+ views/failsafe/input/button.php, views/failsafe/input/checkboxes.php,
+ views/failsafe/input/form.php, views/failsafe/input/hidden.php,
+ views/failsafe/input/longtext.php, views/failsafe/input/pulldown.php,
+ views/failsafe/input/reset.php, views/failsafe/input/submit.php,
+ views/failsafe/input/text.php, views/failsafe/messages/messages/list.php,
+ views/failsafe/messages/messages/message.php,
+ views/failsafe/pageshells/pageshell.php, views/failsafe/settings/install.php,
+ views/failsafe/settings/system.php: Closes #224: Install now using failsafe
+ views. Please test from scratch (including blanking setup) and make sure it
+ works for you!
+
+2008-08-15 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/membership.php: groups view tweaked
+
+2008-08-15 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * entities/index.php, views/default/navigation/pagination.php,
+ views/default/widgets/wrapper.php: Removed pagination in widgets
+
+ * engine/lib/relationships.php: Added the ability to hide the gallery view
+ on list_entities_from_relationships
+
+ * languages/en.php: Language addition to make it clearer that you need to
+ validate before you can log in.
+
+2008-08-15 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/languages/en.php: group lang bug fixed
+
+ * mod/reportedcontent/actions/add.php,
+ mod/reportedcontent/actions/archive.php,
+ mod/reportedcontent/actions/delete.php, mod/reportedcontent/languages/en.php,
+ mod/reportedcontent/start.php, .../views/default/reportedcontent/css.php,
+ .../views/default/reportedcontent/listing.php: reported content updated
+
+2008-08-15 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/reportedcontent/languages/en.php: Added a language entry for reported
+ items
+
+2008-08-15 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/owner_block.php: owner block head - divider
+ line method changed to work in ie6
+
+ * views/default/css.php: owner block fixes and blog post tweaks
+
+2008-08-15 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/pagehandler.php, mod/profile/views/default/profile/listing.php,
+ views/default/admin/statistics_opt/numentities.php,
+ views/default/input/checkboxes.php, views/default/search/entity_list.php:
+ Refs #249
+
+2008-08-15 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, index.php: The front page now only shows content
+ and groups.
+
+2008-08-15 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/edit.php, views/default/page_elements/owner_block.php: Refs
+ #249
+
+2008-08-15 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/reportedcontent/languages/en.php,
+ .../views/default/reportedcontent/listing.php: reported content tweaks
+
+2008-08-15 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/css.php,
+ mod/profile/views/default/profile/userdetails.php, views/default/css.php: IE
+ 6 & 7 profile page avatar menu and submenu fixed, toolbar new msg icon
+ position,
+
+2008-08-14 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: owner block changes
+
+2008-08-14 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/reportedcontent/listing.php: reportedcontent list tweaks
+
+2008-08-14 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Fixed an issue with the submenu.
+
+2008-08-14 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/notification.php: Fixes #245: Tags now stripped from email
+ messages.
+
+2008-08-14 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/diagnostics/index.php, mod/logbrowser/index.php,
+ mod/reportedcontent/index.php: more owner blocks added
+
+ * admin/plugins/index.php, admin/site/index.php, admin/statistics/index.php,
+ admin/user/index.php: owner block added to admin pages
+
+2008-08-14 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: collections, friends picker, status, search items
+ updated for IE6
+
+ * views/default/friends/picker.php, views/default/friends/tablelist.php:
+ friends picker table bug fixed and spacing adjusted on collections
+
+2008-08-14 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Redefined the default submenu item group to 'a',
+ so most usually it will appear on top
+
+ * mod/groups/start.php, views/default/canvas_header/submenu_group.php,
+ views/default/page_elements/owner_block.php: Further submenu clustering
+
+ * engine/lib/elgglib.php, views/default/canvas_header/submenu_group.php:
+ Added the facility to group submenus
+
+2008-08-14 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * javascript/friendsPickerv1.js, views/default/css.php: friends picker
+ modified for IE 6
+
+ * _graphics/friends_picker_arrow_left.gif,
+ _graphics/friends_picker_arrow_right.gif: new picker arrows
+
+2008-08-13 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/email/confirm.php, actions/register.php, engine/lib/entities.php,
+ engine/lib/users.php: Closes #227 and #243: Hopefully this has the fscking
+ thing nailed to the wall. Please report any problems, especially is they
+ relate to access permissions (granted when you shouldn't or denied when you
+ should)
+
+ * mod/diagnostics/languages/en.php, mod/diagnostics/start.php: Added session
+ to diagnostics.
+
+ * engine/lib/sessions.php: Fixing some session blanking problems.
+
+ * actions/email/confirm.php, actions/register.php, engine/lib/entities.php,
+ engine/lib/users.php: Reverted changes so users can now register again.
+ There are critical issues with enable/disable. Primarily: 1) A number of
+ functions do not use the access controls, these throw an exception when
+ accessing a disabled entity. 2) #243 does not seem possible.
+
+2008-08-13 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/owner_block.php: owner block fixed for safari
+ and ie6
+
+2008-08-13 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, languages/en.php: Correct menus being used
+
+2008-08-13 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/groups/css.php,
+ mod/groups/views/default/groups/members.php, views/default/css.php: numerous
+ polishing and rendering fixes to groups
+
+2008-08-13 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php:
+
+ * actions/admin/user/unban.php, engine/lib/admin.php,
+ engine/lib/entities.php, languages/en.php,
+ .../views/default/profile/menu/adminlinks.php: Refs #237: Added option, now
+ just needs a search listing banned users. Depends #243
+
+ * actions/email/confirm.php, actions/register.php, engine/lib/entities.php:
+ Closes #227. Depends on #243 to work.
+
+ * engine/lib/access.php: Refs #237, #46 and #227: Added override code.
+
+ * engine/lib/entities.php: Actually closes #46
+
+ * views/default/admin/plugins_opt/plugin.php: placeholder for settings
+ toggle
+
+2008-08-13 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: login and register boxes fixed
+
+2008-08-13 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/owner_block.php: Now only displays 'report
+ this' when plugin is enabled.
+
+2008-08-13 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/owner_block.php: Sturdier enhancement for the
+ owner block.
+
+ * index.php, languages/en.php, mod/pages/actions/pages/delete.php,
+ mod/pages/actions/pages/edit.php, mod/pages/actions/pages/editwelcome.php,
+ mod/pages/edit.php, mod/pages/history.php, mod/pages/images/application.png,
+ mod/pages/images/code.png, mod/pages/images/css.png, mod/pages/images/db.png,
+ mod/pages/images/directory.png, mod/pages/images/doc.png,
+ mod/pages/images/file.gif, mod/pages/images/file.png,
+ mod/pages/images/film.png, mod/pages/images/flash.png,
+ mod/pages/images/folder-closed.gif, mod/pages/images/folder.gif,
+ mod/pages/images/folder_open.png, mod/pages/images/html.png,
+ mod/pages/images/java.png, mod/pages/images/linux.png,
+ mod/pages/images/minus.gif, mod/pages/images/music.png,
+ mod/pages/images/pdf.png, mod/pages/images/php.png,
+ mod/pages/images/picture.png, mod/pages/images/plus.gif,
+ mod/pages/images/ppt.png, mod/pages/images/psd.png,
+ mod/pages/images/ruby.png, mod/pages/images/script.png,
+ mod/pages/images/spinner.gif, mod/pages/images/treeview-black-line.gif,
+ mod/pages/images/treeview-black.gif,
+ mod/pages/images/treeview-default-line.gif,
+ mod/pages/images/treeview-default.gif,
+ mod/pages/images/treeview-famfamfam-line.gif,
+ mod/pages/images/treeview-famfamfam.gif,
+ mod/pages/images/treeview-gray-line.gif, mod/pages/images/treeview-gray.gif,
+ mod/pages/images/treeview-red-line.gif, mod/pages/images/treeview-red.gif,
+ mod/pages/images/txt.png, mod/pages/images/xls.png, mod/pages/images/zip.png,
+ mod/pages/index.php, mod/pages/javascript/jquery.treeview.async.js,
+ mod/pages/javascript/jquery.treeview.js, mod/pages/languages/en.php,
+ mod/pages/manifest.xml, mod/pages/new.php, mod/pages/pagesTree.php,
+ mod/pages/start.php, mod/pages/view.php,
+ mod/pages/views/default/annotation/icon.php,
+ mod/pages/views/default/annotation/page.php,
+ mod/pages/views/default/forms/pages/edit.php,
+ .../views/default/forms/pages/editwelcome.php,
+ mod/pages/views/default/object/page.php,
+ mod/pages/views/default/object/page_top.php,
+ mod/pages/views/default/pages/breadcrumbs.php,
+ mod/pages/views/default/pages/css.php,
+ .../views/default/pages/groupprofile_pages.php,
+ mod/pages/views/default/pages/menu.php,
+ mod/pages/views/default/pages/metatags.php,
+ mod/pages/views/default/pages/pagegallery.php,
+ mod/pages/views/default/pages/pagelisting.php,
+ mod/pages/views/default/pages/pageprofile.php,
+ .../views/default/pages/sidebar/sidebarthis.php,
+ mod/pages/views/default/pages/sidebar/starter.php,
+ mod/pages/views/default/pages/sidebar/tree.php,
+ mod/pages/views/default/pages/sidebar/wrapper.php,
+ mod/pages/views/default/pages/welcome.php, mod/pages/welcome.php,
+ mod/pages/world.php: Added a new latest activity title to the front page
+
+ * views/default/page_elements/owner_block.php: The owner block now doesn't
+ display at all if there's no page owner
+
+2008-08-13 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/account/forms/login.php, views/default/css.php: front page
+ login box
+
+2008-08-13 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/user/ban.php: Banned now gives a reason why user disabled.
+
+ * engine/lib/entities.php: Added a reason for disabled objects.
+
+ * engine/lib/entities.php: Closes #46: Method for activating an entity. No
+ hookup yet.
+
+ * engine/lib/access.php: Refs #237, #46 and #227: Added active only override
+ to get_access_sql_suffix
+
+2008-08-13 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/actions/add.php, mod/blog/actions/delete.php,
+ mod/blog/actions/edit.php, mod/blog/add.php, mod/blog/edit.php,
+ mod/blog/everyone.php, mod/blog/friends.php, mod/blog/index.php,
+ mod/blog/languages/en.php, mod/blog/manifest.xml, mod/blog/read.php,
+ mod/blog/start.php, mod/blog/views/default/blog/css.php,
+ mod/blog/views/default/blog/forms/edit.php,
+ mod/blog/views/default/blog/gallery.php,
+ mod/blog/views/default/blog/listing.php,
+ mod/blog/views/default/blog/menu.php,
+ mod/blog/views/default/blog/notfound.php,
+ mod/blog/views/default/blog/view.php, mod/blog/views/default/object/blog.php,
+ mod/blog/views/default/river/blog/annotate.php,
+ mod/blog/views/default/river/blog/create.php,
+ mod/blog/views/default/river/blog/update.php: This shouldn't be here!
+
+2008-08-13 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/user/delete.php, engine/lib/group.php,
+ engine/lib/objects.php, engine/lib/sites.php, engine/lib/users.php: Fixes
+ #241: Changed order, delete user using object's delete method rather than the
+ low level function
+
+2008-08-13 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/pagehandler.php: Removed page handler default errors
+
+2008-08-13 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: widget boxes fixed for IE
+
+2008-08-13 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php: Added a page handler for the dashboard
+
+2008-08-13 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/useradd.php, engine/lib/sessions.php: Fixes #238: Problem was
+ caused by authenticate not having the user email validated flag set.
+ Introduced new flag ->admin_created to distinguish between the two types.
+
+2008-08-13 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/canvas/layouts/widgets.php: A warning fix for the dashboard
+ layout.
+
+ * views/default/input/button.php, views/default/input/form.php: Some safety
+ fixes for the new form views
+
+ * engine/lib/elgglib.php: Only log warnings in debug mode.
+
+ * mod/blog/actions/add.php, mod/blog/actions/delete.php,
+ mod/blog/actions/edit.php, mod/blog/add.php, mod/blog/edit.php,
+ mod/blog/everyone.php, mod/blog/friends.php, mod/blog/index.php,
+ mod/blog/languages/en.php, mod/blog/manifest.xml, mod/blog/read.php,
+ mod/blog/start.php, mod/blog/views/default/blog/css.php,
+ mod/blog/views/default/blog/forms/edit.php,
+ mod/blog/views/default/blog/gallery.php,
+ mod/blog/views/default/blog/listing.php,
+ mod/blog/views/default/blog/menu.php,
+ mod/blog/views/default/blog/notfound.php,
+ mod/blog/views/default/blog/view.php, mod/blog/views/default/object/blog.php,
+ mod/blog/views/default/river/blog/annotate.php,
+ mod/blog/views/default/river/blog/create.php,
+ mod/blog/views/default/river/blog/update.php,
+ .../canvas/layouts/two_column_left_sidebar.php,
+ .../canvas/layouts/two_column_right_sidebar.php,
+ views/default/input/form.php: Removing some messages
+
+ * engine/lib/pagehandler.php: Removing an error log entry in the page
+ handler function
+
+ * engine/lib/elgglib.php: Fixed select class issue for submenus
+
+ * search/index.php: Reinstated search label.
+
+ * mod/logbrowser/start.php, mod/profile/start.php: Admin links on profile
+ pages and in user context menus appear at the bottom.
+
+ * mod/profile/views/default/profile/userdetails.php: The profile edit button
+ is now wired up so that admins can edit any user.
+
+ * engine/lib/access.php, engine/lib/admin.php: Admins now see all!
+
+2008-08-13 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/owner_block.php: extra float clear for ie6
+
+ * _graphics/icon_gallery.gif: new gallery icon
+
+ * _graphics/blockquote.png, _graphics/dummy_river_icon.gif,
+ _graphics/footer_logo.gif: removed images not used
+
+ * _graphics/icon_bookmarkthis.gif, _graphics/icon_reportthis.gif,
+ views/default/css.php: owner block additional icons
+
+2008-08-12 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/reportedcontent/listing.php: small tweak to reported
+ content
+
+ * mod/reportedcontent/actions/add.php, mod/reportedcontent/add.php,
+ mod/reportedcontent/index.php, mod/reportedcontent/languages/en.php,
+ mod/reportedcontent/manifest.xml, mod/reportedcontent/start.php,
+ .../views/default/reportedcontent/form.php,
+ .../views/default/reportedcontent/listing.php,
+ .../views/default/reportedcontent/user_report.php: report content added as a
+ core plugin. Still needs a couple of bits wired up.
+
+ * views/default/page_elements/owner_block.php: owner block tweaked to add
+ report this
+
+2008-08-12 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/access.php: Removed superadmin access controls. You can't call
+ get_entity from within get_access_sql_suffix and get_access_array as it
+ causes an infinite loop. The only safe way to do this is via a plugin hook.
+
+ * actions/systemsettings/install.php: Refs #232: Diagnostics now on by
+ default on new installs.
+
+ * mod/diagnostics/actions/download.php, mod/diagnostics/index.php,
+ mod/diagnostics/languages/en.php, mod/diagnostics/manifest.xml,
+ mod/diagnostics/start.php, .../views/default/diagnostics/forms/download.php:
+ Closes #232: Produces a basic report plus checksums of all files in md5sum
+ format. To add extra information to this report add a plugin hook listening
+ to: 'diagnostics:report' And append to $returnvalue which is a simple text
+ buffer.
+
+2008-08-12 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: sidebar menu additions
+
+ * _graphics/icons/default/large.png, _graphics/icons/default/medium.png,
+ _graphics/icons/default/small.png, _graphics/icons/default/tiny.png: new
+ default entity icons
+
+2008-08-12 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/access.php: Further access additions for admins.
+
+ * engine/lib/access.php: Admins can now see private data.
+
+ * mod/groups/views/default/forms/groups/invite.php: Group invites now uses
+ the friends picker.
+
+2008-08-12 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/owner_block.php: bookmark this and report this
+ (still to be wired up) added to the owner block
+
+2008-08-12 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/register.php, actions/useradd.php, engine/lib/users.php: Closes
+ #229: Admin signup now using different view + no password validation for
+ admin signup
+
+ * actions/register.php, engine/lib/exceptions.php, engine/lib/users.php,
+ languages/en.php, views/default/account/forms/register.php: Refs #229 :
+ Register now has more granular messages, dupe email checkiong, sanitisation +
+ fill in the blanks failure mode! (yay)
+
+2008-08-12 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/groups/css.php,
+ mod/groups/views/default/groups/members.php, views/default/css.php: groups
+ pages interface fixes/cleanup
+
+2008-08-12 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * index.php: Improved front page.
+
+ * mod/groups/start.php: Groups now links to a better place when you're
+ logged out.
+
+2008-08-12 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * htaccess_dist: Slight tweak to rewrite rules.
+
+ * actions/systemsettings/install.php: Forward not gatekeeper
+
+2008-08-12 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/navigation/pagination.php: pagination display tweaked
+
+2008-08-11 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/logbrowser/views/default/logbrowser/css.php, views/default/css.php:
+ settings and admin pages cleaned
+
+2008-08-11 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, index.php, views/default/welcome/logged_out.php:
+ Added latest content to the front page
+
+2008-08-11 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/input/form.php: Logic error
+
+ * actions/friends/deletecollection.php: Refs #228: Will now error if
+ collection can not be deleted
+
+2008-08-11 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php:
+
+ * javascript/initialise_elgg.js: toggle more info button for admin panel
+ added
+
+2008-08-11 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/input/form.php: Added ability to disable security
+ enhancements on form (for certain cases)
+
+2008-08-11 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php, search/index.php: Clearer titles for search
+
+2008-08-11 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/friends/forms/edit.php:
+
+ * actions/friends/addcollection.php, views/default/friends/forms/edit.php:
+ Refs #210 & #211: Friends form moved to action_gatekeeper code.
+
+2008-08-11 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * search/index.php: Improved search submenu items
+
+ * languages/en.php: A clearer registration message.
+
+ * engine/lib/notification.php: Downgraded UTF support in the email
+ notification function to optional
+
+2008-08-11 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/admin/plugins_opt/plugin.php: plugin admin layout tweaks
+
+2008-08-11 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/actions.php, languages/en.php: Minor bugfix to
+ actions_gatekeeper()
+
+ * engine/schema/mysql.sql: Usernames now unique
+
+2008-08-11 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/settings/system.php: further admin layout tweak
+
+ * views/default/admin/statistics_opt/basic.php,
+ views/default/admin/statistics_opt/numentities.php,
+ views/default/admin/statistics_opt/online.php: further admin layout tweaks
+
+ * .../usersettings/statistics_opt/numentities.php,
+ .../default/usersettings/statistics_opt/online.php: user settings tweaks
+
+ * .../notifications/settings/usersettings.php,
+ views/default/user/settings/email.php,
+ views/default/user/settings/language.php,
+ views/default/user/settings/name.php,
+ views/default/user/settings/password.php: user settings tweaked
+
+2008-08-11 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/comments/add.php, views/default/comments/forms/edit.php: Refs #210
+ & #211 : Updated comments form
+
+ * actions/widgets/save.php, views/default/widgets/editwrapper.php: Refs #210
+ & #211 : Widgets edit now using action_gatekeeper
+
+ * views/default/input/form.php: Minor modifications to form.
+
+2008-08-11 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/groups/grouplisting.php,
+ mod/profile/views/default/profile/listing.php: Added class to user and group
+ details
+
+2008-08-11 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/site/update_basic.php, actions/systemsettings/install.php,
+ actions/usersettings/save.php, views/default/settings/system.php,
+ views/default/usersettings/form.php: Refs #210 & #211 : Some more core
+ settings / admin pages moved to use admin_gatekeeper. Install script action
+ now also refuses to be run if the site has already been installed.
+
+ * actions/plugins/settings/save.php, actions/plugins/usersettings/save.php,
+ views/default/object/plugin.php: Refs #210 & #211 : Plugins settings
+ converted.
+
+2008-08-11 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/toolbar_messages_icon.gif, views/default/css.php,
+ views/default/welcome/logged_in.php, views/default/welcome/logged_out.php:
+ toolbar messages icon rollover state added. Logged in/out front page wrapped
+ in paragraph tags
+
+2008-08-11 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/basic_elements/login.php: Removed basic_elements/login ...
+ didn't seem to be used and is duped by main login.
+
+ * actions/register.php, actions/useradd.php,
+ views/default/account/forms/register.php,
+ views/default/account/forms/useradd.php: Refs #210 & #211
+
+2008-08-11 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, engine/lib/group.php, engine/lib/users.php,
+ search/index.php: Added a search submenu.
+
+2008-08-11 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/login.php, actions/user/requestnewpassword.php, languages/en.php:
+ Refs #210 & #211
+
+2008-08-10 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/widgets/a_users_groups/view.php: group profile widget
+ tweaked
+
+2008-08-10 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/schema/mysql.sql: Closes #223
+
+2008-08-09 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: top toolbar elements fixed for ie
+
+ * views/default/css.php, views/default/navigation/pagination.php: pagination
+ overlap in ie fixed
+
+ * javascript/friendsPickerv1.js, views/default/css.php:
+
+ * views/default/css.php:
+
+2008-08-09 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/languages/en.php, mod/groups/start.php,
+ .../views/default/widgets/a_users_groups/edit.php,
+ .../views/default/widgets/a_users_groups/view.php: a simple widget that
+ displays a users groups on their profile
+
+ * mod/groups/views/default/groups/grouplisting.php: group listings now
+ include the brief description
+
+2008-08-08 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/group.php, engine/lib/users.php,
+ mod/groups/actions/forums/addtopic.php, mod/groups/addtopic.php,
+ mod/groups/topicposts.php: Major access fix.
+
+ * engine/lib/entities.php, engine/lib/group.php: Solved write issues in
+ groups for non-admin users.
+
+ * README.txt: Slight readme update.
+
+ * CONTRIBUTORS.txt, account/forgotten_password.php,
+ actions/admin/plugins/disable.php, actions/admin/plugins/enable.php,
+ actions/admin/site/update_basic.php, actions/admin/user/ban.php,
+ actions/admin/user/delete.php, actions/admin/user/makeadmin.php,
+ actions/admin/user/resetpassword.php, actions/email/save.php,
+ actions/entities/delete.php, actions/import/opendd.php,
+ .../notifications/settings/usersettings/save.php,
+ actions/plugins/settings/save.php, actions/plugins/usersettings/save.php,
+ actions/user/language.php, actions/user/name.php, actions/user/password.php,
+ actions/user/passwordreset.php, actions/user/requestnewpassword.php,
+ actions/useradd.php, admin/plugins/index.php, admin/site/index.php,
+ admin/statistics/index.php, admin/user/index.php,
+ engine/handlers/cron_handler.php, engine/handlers/xml-rpc_handler.php,
+ engine/lib/admin.php, engine/lib/annotations.php, engine/lib/api.php,
+ engine/lib/cache.php, engine/lib/entities.php, engine/lib/exceptions.php,
+ engine/lib/export.php, engine/lib/extender.php, engine/lib/filestore.php,
+ engine/lib/group.php, engine/lib/input.php, engine/lib/metadata.php,
+ engine/lib/metastrings.php, engine/lib/notification.php,
+ engine/lib/opendd.php, engine/lib/pam.php, engine/lib/ping.php,
+ engine/lib/plugins.php, engine/lib/query.php, engine/lib/relationships.php,
+ engine/lib/river.php, engine/lib/sites.php, engine/lib/statistics.php,
+ engine/lib/system_log.php, engine/lib/tags.php, engine/lib/usersettings.php,
+ engine/lib/xml-rpc.php, engine/lib/xml.php,
+ mod/groups/actions/addtogroup.php, mod/groups/actions/edit.php,
+ mod/groups/actions/join.php, mod/groups/actions/joinrequest.php,
+ mod/groups/actions/leave.php, mod/groups/all.php, mod/groups/discussions.php,
+ mod/groups/edit.php, mod/groups/graphics/icon.php,
+ mod/groups/groupprofile.php, mod/groups/index.php, mod/groups/invite.php,
+ mod/groups/languages/en.php, mod/groups/membership.php, mod/groups/new.php,
+ mod/groups/start.php, mod/groups/topicposts.php,
+ mod/groups/views/default/forms/groups/edit.php,
+ mod/groups/views/default/forms/groups/invite.php,
+ mod/groups/views/default/forum/topicposts.php,
+ mod/groups/views/default/group/group.php,
+ mod/groups/views/default/groups/css.php,
+ mod/groups/views/default/groups/groupgallery.php,
+ mod/groups/views/default/groups/grouplisting.php,
+ mod/groups/views/default/groups/icon.php,
+ .../default/river/ElggRelationship/create.php,
+ mod/groups/views/default/sharing/invite.php,
+ .../default/widgets/group_entities_widget/edit.php,
+ .../default/widgets/group_entities_widget/view.php,
+ .../default/widgets/group_members_widget/edit.php,
+ .../default/widgets/group_members_widget/view.php, mod/guidtool/export.php,
+ mod/guidtool/format_picker.php, mod/guidtool/import.php,
+ mod/guidtool/index.php, mod/guidtool/languages/en.php,
+ mod/guidtool/start.php, mod/guidtool/view.php,
+ .../views/default/forms/guidtool/export.php,
+ .../views/default/forms/guidtool/format.php,
+ .../views/default/forms/guidtool/import.php,
+ mod/guidtool/views/default/guidtool/gallery.php,
+ mod/guidtool/views/default/guidtool/listing.php,
+ mod/guidtool/views/default/guidtool/profile.php,
+ .../views/default/object/guidtoolwrapper.php, mod/logbrowser/index.php,
+ mod/logbrowser/languages/en.php, mod/logbrowser/start.php,
+ mod/logbrowser/views/default/object/logwrapper.php,
+ mod/profile/actions/cropicon.php, mod/profile/actions/edit.php,
+ mod/profile/actions/iconupload.php, mod/profile/edit.php,
+ mod/profile/editicon.php, mod/profile/icon.php, mod/profile/index.php,
+ mod/profile/javascript.php, mod/profile/start.php,
+ mod/profile/views/default/profile/edit.php,
+ mod/profile/views/default/profile/gallery.php,
+ mod/profile/views/default/profile/hoverover.php,
+ mod/profile/views/default/profile/icon.php,
+ mod/profile/views/default/profile/listing.php,
+ mod/profile/views/default/profile/menu/actions.php,
+ .../views/default/profile/menu/adminlinks.php,
+ mod/profile/views/default/profile/menu/links.php,
+ .../views/default/profile/menu/linksownpage.php,
+ mod/profile/views/default/profile/metatags.php,
+ mod/profile/views/default/profile/profilelinks.php,
+ mod/profile/views/default/profile/userdetails.php, mod/river/start.php,
+ .../views/default/widgets/river_widget/edit.php,
+ .../views/default/widgets/river_widget/view.php,
+ .../default/widgets/river_widget_friends/edit.php,
+ .../default/widgets/river_widget_friends/view.php,
+ mod/updateclient/languages/en.php, mod/updateclient/start.php,
+ .../views/default/settings/updateclient/edit.php, services/api/rest.php,
+ services/export/handler.php, settings/statistics/index.php,
+ settings/user/index.php, views/default/account/forms/forgotten_password.php,
+ views/default/account/forms/useradd.php, views/default/admin/main.php,
+ views/default/admin/main_opt/plugins.php,
+ views/default/admin/main_opt/site.php,
+ views/default/admin/main_opt/statistics.php,
+ views/default/admin/main_opt/user.php, views/default/admin/plugins.php,
+ views/default/admin/plugins_opt/plugin.php, views/default/admin/site.php,
+ views/default/admin/statistics.php,
+ views/default/admin/statistics_opt/basic.php,
+ views/default/admin/statistics_opt/numentities.php,
+ views/default/admin/statistics_opt/online.php, views/default/admin/user.php,
+ views/default/admin/user_opt/adduser.php,
+ views/default/admin/user_opt/search.php, views/default/api/output.php,
+ views/default/comments/forms/edit.php, views/default/export/entity.php,
+ views/default/export/metadata.php, views/default/export/relationship.php,
+ views/default/graphics/icon.php, views/default/group/default.php,
+ views/default/input/button.php, views/default/input/form.php,
+ views/default/input/hidden.php, views/default/input/reset.php,
+ views/default/input/submit.php, .../notifications/settings/usersettings.php,
+ views/default/object/default.php, views/default/object/object.php,
+ views/default/object/plugin.php, views/default/output/iframe.php,
+ views/default/river/ElggRelationship/create.php,
+ views/default/river/dashboard.php, views/default/site/default.php,
+ views/default/user/settings/email.php,
+ views/default/user/settings/language.php,
+ views/default/user/settings/name.php,
+ views/default/user/settings/password.php,
+ views/default/usersettings/main.php,
+ views/default/usersettings/main_opt/plugins.php,
+ views/default/usersettings/main_opt/statistics.php,
+ views/default/usersettings/main_opt/user.php,
+ views/default/usersettings/plugins.php,
+ views/default/usersettings/plugins_opt/plugin.php,
+ views/default/usersettings/statistics.php,
+ .../usersettings/statistics_opt/numentities.php,
+ .../default/usersettings/statistics_opt/online.php,
+ views/failsafe/pageshells/pageshell.php, views/foaf/pageshells/pageshell.php,
+ views/json/api/output.php, views/json/canvas/default.php,
+ views/json/export/entity.php, views/json/export/metadata.php,
+ views/json/export/relationship.php, views/json/group/default.php,
+ views/json/messages/exceptions/exception.php, views/json/object/default.php,
+ views/json/pageshells/pageshell.php, views/json/search/entity_list.php,
+ views/json/site/default.php, views/json/user/default.php,
+ views/opendd/canvas/default.php, views/opendd/export/entity.php,
+ views/opendd/export/metadata.php, views/opendd/export/relationship.php,
+ views/opendd/group/default.php,
+ views/opendd/messages/exceptions/exception.php,
+ views/opendd/object/default.php, views/opendd/pageshells/pageshell.php,
+ views/opendd/site/default.php, views/opendd/user/default.php,
+ views/php/api/output.php, views/php/canvas/default.php,
+ views/php/export/entity.php, views/php/export/metadata.php,
+ views/php/export/relationship.php, views/php/group/default.php,
+ views/php/messages/exceptions/exception.php, views/php/object/default.php,
+ views/php/pageshells/pageshell.php, views/php/search/entity_list.php,
+ views/php/site/default.php, views/php/user/default.php,
+ views/xml/api/output.php, views/xml/messages/exceptions/exception.php,
+ views/xml/pageshells/pageshell.php, views/xml/xml-rpc/output.php: Adjusted
+ contributors file.
+
+2008-08-08 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/forms/guidtool/export.php,
+ mod/profile/views/default/profile/icon.php,
+ views/default/canvas/layouts/widgets.php, views/default/input/button.php,
+ views/default/messages/exceptions/exception.php,
+ views/failsafe/messages/exceptions/exception.php: Remaining htmlentities
+ calls converted to utf-8
+
+2008-08-08 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * INSTALL.txt: Small formatting correction to the install file.
+
+ * CONTRIBUTORS.txt, INSTALL.txt, README.txt: Added content to stub files
+
+2008-08-08 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/email/confirm.php, engine/lib/notification.php,
+ engine/lib/users.php, languages/en.php: Closes #221: Body and subject now
+ internationalised.
+
+2008-08-08 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/title.php: The title no longer causes a WSOD
+
+2008-08-08 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/input/checkboxes.php, views/default/input/hidden.php,
+ views/default/input/radio.php, views/default/input/tags.php,
+ views/default/input/text.php, views/default/input/url.php: Refs #206:
+ Hopefully the last of it. Please remember to use htmlentities($foo, null,
+ 'UTF-8'); whenever using htmlentities!
+
+2008-08-08 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php:
+
+2008-08-08 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/icon.php: Refs #206: A better solution
+
+ * mod/profile/views/default/profile/icon.php: Refs #206; Icons title now
+ displayed correctly
+
+2008-08-08 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php, views/default/canvas/layouts/widgets.php: Added extra
+ translation strings to the widget canvas
+
+2008-08-08 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php, views/default/navigation/pagination.php: pagination
+ "..." fixed
+
+2008-08-08 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/addtopic.php, mod/groups/discussions.php,
+ mod/groups/edittopic.php, mod/groups/topicposts.php: Removing some wsod
+ issues
+
+2008-08-08 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * entities/index.php, views/default/page_elements/header.php,
+ views/default/pageshells/pageshell.php: Refs #206: Character encoding on both
+ widget and main page now UTF-8
+
+2008-08-08 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/start.php: Group forums should work
+
+2008-08-08 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/actions.php, views/default/input/form.php: Closes #220: Removed
+ action from hash. Timestamp should make this unpredictable enough.
+
+ * views/default/account/forms/forgotten_password.php,
+ views/default/account/forms/login.php, views/default/input/access.php,
+ views/default/input/button.php, views/default/input/checkboxes.php,
+ views/default/input/email.php, views/default/input/file.php,
+ views/default/input/longtext.php, views/default/input/password.php,
+ views/default/input/pulldown.php, views/default/input/radio.php,
+ views/default/input/reset.php, views/default/input/submit.php,
+ views/default/input/tags.php, views/default/input/text.php,
+ views/default/input/url.php: Refs #211: Two forms converted + extra
+ functionality to input views
+
+ * engine/lib/dummy.php: Removed dummy
+
+2008-08-08 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/forum/topics.php,
+ mod/groups/views/default/forum/viewposts.php,
+ mod/groups/views/default/groups/css.php: continuation of cleanup on groups
+
+2008-08-08 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Friendly titles no longer have more than one
+ hyphen in a row
+
+2008-08-08 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/groups/css.php,
+ mod/groups/views/default/groups/forum_latest.php: latest discussions widget
+
+2008-08-08 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/title.php: Put minor fix back
+
+2008-08-08 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/languages/en.php: lang tweak on groups
+
+2008-08-07 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/pageowner.php, engine/lib/sessions.php: Removed ElggDummy live
+ code for now.
+
+2008-08-07 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/groups/css.php: groups css added
+
+2008-08-07 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/admin/statistics.php: Elgg.org -> elgg.com
+
+ * mod/groups/languages/en.php,
+ mod/groups/views/default/groups/forum_latest.php,
+ mod/groups/views/default/groups/members.php: Group forum additions
+
+ * mod/groups/languages/en.php: Small grammar correction
+
+2008-08-07 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/actions/forums/deletepost.php, mod/groups/start.php,
+ mod/groups/views/default/forum/topicposts.php,
+ mod/groups/views/default/groups/forum_latest.php: more group tweaks
+
+2008-08-07 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * javascript/friendsPickerv1.js: updated, cleaned-up, credited, and tweaked
+ friends picker
+
+2008-08-07 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, engine/lib/group.php, engine/lib/objects.php,
+ engine/lib/sites.php, engine/lib/users.php: Centralised set and get magic
+ functions to the tlc. Added isset and unset magic methods. Report any
+ problems!
+
+2008-08-07 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/languages/en.php: Slight change to group vocabulary.
+
+ * mod/groups/topicposts.php,
+ mod/groups/views/default/groups/groupprofile.php: Wired up group member count
+ and fixed topic page title
+
+2008-08-07 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/actions/forums/addpost.php: group tweak
+
+ * .../views/default/object/groupforumtopic.php: changed the latest
+ discussion view
+
+2008-08-07 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/sessions.php: removed print_r
+
+ * engine/lib/dummy.php, engine/lib/pageowner.php, engine/lib/sessions.php,
+ views/default/page_elements/title.php: Refs #174: Introducing the ElggDummy
+ class which returns false for all methods and set variables called on it.
+ This is what the logged out $_SESSION['user'] is set to and is also what
+ page_owner_entity will return if page_owner is invalid. This means that
+ calls to things like $_SESSION['user']->getGUID() are now safe and will no
+ longer cause a parsing error. Please report any issues.
+
+2008-08-07 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php: Adjusted list_entities_from_annotations to
+ hide the gallery view by default
+
+ * .../views/default/object/groupforumtopic.php: Minor language change to
+ group topics
+
+2008-08-07 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/discussions.php, mod/groups/languages/en.php,
+ mod/groups/views/default/groups/forum_latest.php,
+ .../views/default/object/groupforumtopic.php: more group profile work
+
+2008-08-07 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/index.php, mod/groups/languages/en.php,
+ mod/groups/membership.php, mod/groups/start.php: Added a 'member of' groups
+ page and made it default
+
+ * engine/lib/access.php, mod/groups/start.php, mod/profile/start.php: Fixed
+ access permissions wrt groups
+
+2008-08-07 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/languages/en.php, mod/groups/start.php: new tools menu added -
+ latest discussion
+
+ * mod/groups/languages/en.php,
+ mod/groups/views/default/groups/forum_latest.php: forum latest for group
+ profile page
+
+2008-08-07 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php: Removed an extra sanitise_string call in
+ update_annotations
+
+2008-08-07 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/actions/forums/addpost.php,
+ mod/groups/actions/forums/addtopic.php,
+ mod/groups/actions/forums/deletetopic.php,
+ mod/groups/actions/forums/edittopic.php, mod/groups/addtopic.php,
+ mod/groups/edittopic.php, mod/groups/forum.php, mod/groups/languages/en.php,
+ mod/groups/start.php, mod/groups/topicposts.php,
+ mod/groups/views/default/forms/forums/addpost.php,
+ mod/groups/views/default/forms/forums/addtopic.php,
+ .../views/default/forms/forums/edittopic.php,
+ mod/groups/views/default/forum/topicposts.php,
+ mod/groups/views/default/forum/topics.php,
+ mod/groups/views/default/forum/viewposts.php,
+ mod/groups/views/default/groups/forum_latest.php,
+ mod/groups/views/default/groups/profileitems.php: groups now have forums
+
+2008-08-07 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/toolbar_arrow_ie.gif, views/default/css.php,
+ views/default/navigation/topbar_tools.php: new dropdown toolbar menu that
+ works corss platform. Widget page layout fixed for ie6 & 7
+
+2008-08-07 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/actions.php: Refs #210: Will trigger a plugin hook
+ 'action_gatekeeper:permissions:check'.
+
+ * views/default/page_elements/title.php: Refs #174: Checking that session
+ user exists before calling methods on it
+
+ * install.php: Install site secret
+
+2008-08-07 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/logbrowser/languages/en.php, mod/logbrowser/start.php,
+ .../views/default/logbrowser/adminlinks.php: Added explore log option to user
+ context menu, albeit in the wrong place.
+
+ * languages/en.php, views/default/admin/statistics.php: Direct link from
+ statistics through to elgg.org
+
+ * languages/en.php: Adjusted statistics message
+
+ * languages/en.php, views/default/admin/statistics_opt/basic.php,
+ views/default/admin/statistics_opt/numentities.php: Updated admin statistics
+
+ * engine/lib/system_log.php: You can now filter by ID.
+
+2008-08-07 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/graphics/icon.php: Minor tweaks to the default icon
+
+2008-08-07 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/logbrowser/views/default/object/logwrapper.php: Easy drilldown into
+ logs
+
+ * engine/lib/system_log.php: System log functions now allow searching.
+
+ * mod/logbrowser/index.php, mod/logbrowser/languages/en.php,
+ mod/logbrowser/start.php, mod/logbrowser/views/default/logbrowser/css.php,
+ mod/logbrowser/views/default/logbrowser/form.php,
+ mod/logbrowser/views/default/object/logwrapper.php: The log browser is now
+ searchable.
+
+2008-08-07 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/actions.php, languages/en.php: Closes #218
+
+2008-08-07 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/logbrowser/index.php, mod/logbrowser/start.php,
+ .../views/default/logbrowser/gallery.php,
+ .../views/default/logbrowser/listing.php,
+ mod/logbrowser/views/default/object/logwrapper.php: Initial changes to log
+ browser
+
+2008-08-07 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/input/form.php: Todo has been done
+
+2008-08-06 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: collections, pages nav and numerous other fixes
+
+ * views/default/css.php: breadcrumbs sorted
+
+ * mod/groups/views/default/groups/groupprofile.php, views/default/css.php:
+ groups styles and group owner layout changed
+
+2008-08-06 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/title.php: title block tweaked
+
+2008-08-06 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/owner_block_menu_arrow.gif, views/default/css.php: owner block
+ menu 'selected' style added
+
+2008-08-06 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/groups/groupprofile.php,
+ mod/groups/views/default/groups/profileitems.php: group profile layout
+ tweaked
+
+2008-08-06 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Edited container-related permissions.
+
+2008-08-06 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/groups/profileitems.php: group profile tweak
+
+ * mod/groups/groupprofile.php: group profile tweak
+
+ * mod/groups/views/default/groups/groupprofile.php,
+ mod/groups/views/default/groups/members.php,
+ mod/groups/views/default/groups/profileitems.php: group profile layout
+ tweaked
+
+2008-08-06 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/import/opendd.php, .../views/default/forms/guidtool/import.php:
+ Example of usage (Refs #210), also refs #211.
+
+ * views/default/messages/exceptions/exception.php: Tidied up exception
+
+ * engine/lib/actions.php, languages/en.php, views/default/input/button.php,
+ views/default/input/form.php: Refs #210 and #211
+
+2008-08-06 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php, views/default/page_elements/footer.php: footer
+ links update, changes to gallery view
+
+2008-08-06 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/input/button.php: Images and security fixes
+
+ * views/default/input/button.php, views/default/input/reset.php,
+ views/default/input/submit.php: Closes #212
+
+2008-08-06 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php, views/default/navigation/topbar_tools.php: tool menu
+ slide effect removed, language file changed for dashboatrd instructions
+
+2008-08-06 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/input/hidden.php: Closes #209
+
+ * views/default/input/form.php: Closes #208
+
+ * account/forgotten_password.php: Fixes #207: Thanks for your report eike!
+
+2008-08-05 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: river additions
+
+ * views/default/css.php: toolbar fixes and register box positioning fixed
+
+2008-08-05 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, engine/lib/sessions.php: Tweaked the way
+ forwarding works.
+
+ * engine/lib/access.php, engine/lib/group.php, mod/groups/start.php: Fixed
+ group-specific access controls, and site-specific access controls
+
+2008-08-05 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/river_icons/river_icon_bookmarks.gif,
+ _graphics/river_icons/river_icon_shares.gif,
+ _graphics/river_icons/river_icon_status.gif,
+ _graphics/toolbar_messages_icon.gif, views/default/css.php: numerous fixes to
+ messageboard, status, river icons,
+
+2008-08-05 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Log though will now not store a url relating to an
+ action... it is now possible to log in again if you are logged out! :D
+
+ * engine/lib/river.php, engine/lib/system_log.php: Fixes #121 and #143.
+ Please confirm.
+
+2008-08-05 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/logbrowser/index.php, mod/logbrowser/start.php: The log browser is now
+ a part of the admin panel.
+
+ * engine/lib/widgets.php: Fixed an issue where the third widget column drops
+ widgets.
+
+ * views/default/canvas/layouts/widgets.php: Widget layout update
+
+2008-08-05 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/canvas/layouts/widgets.php: Fixes #204
+
+ * actions/login.php, engine/lib/elgglib.php: Closes #196: Stores last
+ forwarded page in session, this is used by logon to forward page to correct
+ location. Also fixed current_page_url() which was introducing a superfluous
+ "/" before $_SERVER['REQUEST_URI']
+
+2008-08-05 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/toolbar_messages_icon.gif, views/default/css.php,
+ views/default/page_elements/elgg_topbar.php: topbar with message count and
+ icon
+
+2008-08-05 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/actions/iconupload.php: largest avatar size changed from 600
+ to 550
+
+ * mod/profile/editicon.php: icon crop area layout tweaked
+
+2008-08-05 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Tagging issue on unsaved entities: solved.
+
+2008-08-05 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Speculative fix for metadata issue.
+
+ * engine/lib/entities.php: Actually fixes #202
+
+ * engine/lib/elgglib.php, engine/lib/entities.php: Fixes #202 : Listen to
+ plugin hook 'entity:icon:url', which passes parameters: 'entity' The entity
+ 'viewtype' The view (eg 'default') 'size' The size (eg, large, tiny etc) You
+ should return a url for the object's icon if you can.. otherwise return
+ nothing at all.
+
+2008-08-05 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/start.php: Fixed accidental group link error
+
+ * views/default/account/forms/login.php: Removed an annoying notify error
+
+2008-08-05 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/guidtool/views/default/guidtool/listing.php: Using correct entity for
+ icon.
+
+2008-08-05 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * install.php: The install script uses the one column layout
+
+2008-08-05 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/groups/groupprofile.php: more group profile
+ layout tweaks
+
+ * mod/groups/views/default/groups/groupprofile.php: group profile tweaked
+
+2008-08-05 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php:
+
+2008-08-05 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/edit.php, mod/groups/index.php, mod/groups/invite.php,
+ mod/groups/languages/en.php, mod/groups/start.php,
+ mod/groups/views/default/groups/grouplinks.php,
+ mod/groups/views/default/groups/groupprofile.php,
+ mod/groups/views/default/groups/menu/actions.php,
+ .../views/default/groups/menu/adminlinks.php,
+ mod/groups/views/default/groups/menu/links.php,
+ .../views/default/groups/menu/ownerlinks.php: Moved group links to the
+ sidebar
+
+2008-08-05 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/powered_by_elgg_badge_drk_bckgnd.gif,
+ _graphics/powered_by_elgg_badge_light_bckgnd.gif,
+ views/default/page_elements/footer.php: powered by badge in footer
+
+2008-08-05 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/groupprofile.php, mod/groups/views/default/groups/items.php,
+ mod/groups/views/default/groups/profileitems.php: group profile view tweaked
+
+2008-08-04 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * admin/index.php, admin/plugins/index.php, admin/site/index.php,
+ admin/statistics/index.php, admin/user/index.php, engine/lib/admin.php,
+ engine/lib/entities.php, views/default/account/forms/useradd.php,
+ views/default/admin/user_opt/adduser.php,
+ views/default/admin/user_opt/search.php: Further changes to the admin panel
+
+2008-08-04 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/groups/items.php: groups profile page layout
+ tweak
+
+ * mod/groups/edit.php, mod/groups/groupprofile.php,
+ mod/groups/languages/en.php, mod/groups/views/default/groups/items.php,
+ mod/groups/views/default/groups/members.php: new group profile views
+
+2008-08-04 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/guidtool/views/default/guidtool/gallery.php,
+ mod/guidtool/views/default/guidtool/listing.php: Minor improvement to guid
+ tool
+
+2008-08-04 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * settings/index.php, settings/statistics/index.php,
+ settings/user/index.php, .../notifications/settings/usersettings.php,
+ views/default/user/settings/email.php,
+ views/default/user/settings/language.php,
+ views/default/user/settings/name.php,
+ views/default/user/settings/password.php: User changes to settings
+
+ * engine/lib/users.php, engine/lib/usersettings.php, languages/en.php,
+ mod/profile/languages/en.php, mod/profile/start.php, settings/index.php,
+ settings/plugins/index.php, settings/statistics/index.php,
+ settings/user/index.php, .../notifications/settings/usersettings.php,
+ views/default/page_elements/elgg_topbar.php,
+ views/default/user/settings/email.php,
+ views/default/user/settings/language.php,
+ views/default/user/settings/name.php,
+ views/default/user/settings/password.php,
+ views/default/usersettings/form.php,
+ views/default/usersettings/statistics.php,
+ .../usersettings/statistics_opt/numentities.php,
+ .../default/usersettings/statistics_opt/online.php: User settings
+
+2008-08-04 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/xml-rpc.php: Error message bugfix
+
+ * mod/guidtool/index.php, mod/guidtool/languages/en.php,
+ mod/guidtool/start.php: Adapted to use new menus.
+
+ * services/export/handler.php: Handler output made a little more pretty.
+
+ * mod/guidtool/export.php, mod/guidtool/format_picker.php,
+ mod/guidtool/import.php, mod/guidtool/index.php, mod/guidtool/view.php,
+ mod/logbrowser/index.php: Using the new view
+
+2008-08-04 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Fixed the container_guid override.
+
+2008-08-04 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php, views/default/navigation/topbar_tools.php,
+ views/default/page_elements/footer.php: updates to toolbar menu fixes, error
+ messages, owner block
+
+2008-08-04 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/entities/delete.php, languages/en.php,
+ views/default/group/default.php, views/default/object/default.php,
+ views/default/site/default.php: Fixes #199
+
+ * engine/lib/xml-rpc.php: XML-RPC helper functions suggested by Misja
+
+2008-08-04 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * search/index.php: search layout tweaked
+
+2008-08-04 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, engine/lib/metadata.php, search/index.php,
+ views/default/search/entity_list.php: Hidden viewtype toggle on search.
+
+ * views/default/page_elements/owner_block.php: Added owner_block/extend to
+ the owner block
+
+2008-08-04 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * LICENCE.txt: Refs #197: Added placeholders & gpl 2 licence.
+
+ * engine/lib/sessions.php, engine/lib/users.php, engine/schema/mysql.sql:
+ Closes #193: Added salt field to database and new users will be generated
+ with salted passwords. Existing users remain unchanged and should still be
+ able to log in. Requires a schema change and the following code run against
+ the database: alter table elggusers_entity add column salt varchar(8)
+ NOT NULL default '' after password;
+
+2008-08-04 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../canvas/layouts/narrow_right_sidebar.php,
+ views/default/canvas/layouts/two_column.php: Removed old, no-longer-necessary
+ canvas areas.
+
+2008-08-04 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * account/forgotten_password.php, account/register.php,
+ actions/systemsettings/install.php, languages/en.php,
+ views/default/account/forms/forgotten_password.php,
+ views/default/account/forms/login.php: Closes #195 & #191
+
+2008-08-04 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/navigation/pagination.php: Altered pagination so that it
+ does display if we already have an offset.
+
+2008-08-03 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/edit.php: profile edit layout altered
+
+ * views/default/page_elements/title.php: tweaked the old title block - we no
+ longer need the user avatar now we have the owner block.
+
+ * mod/groups/all.php, mod/groups/groupprofile.php, mod/groups/index.php,
+ mod/groups/invite.php, mod/groups/languages/en.php, mod/groups/new.php,
+ mod/groups/start.php: some work on groups to make them work with the new
+ layout
+
+ * mod/profile/languages/en.php, mod/profile/start.php,
+ views/default/page_elements/owner_block.php: brief description added to the
+ owner block and profile
+
+ * views/default/navigation/pagination.php: pagination now only displays if
+ there is content to paginate through
+
+2008-08-02 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: minor interface fixes
+
+2008-08-02 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/rss/annotation/default.php: Default annotation RSS view.
+
+2008-08-01 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/icon_odd.gif, _graphics/icon_rss.gif,
+ _graphics/owner_block_back.jpg,
+ mod/profile/views/default/profile/userdetails.php, views/default/css.php:
+ more interface fixes and improvements. Icons and background added to owner
+ block
+
+2008-08-01 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/foaf/canvas/default.php, views/foaf/friends/list.php,
+ views/foaf/search/entity_list.php, views/foaf/user/default.php: Fixed FOAF
+ view
+
+ * friends/index.php, friends/of.php,
+ mod/profile/views/default/user/default.php, views/default/user/default.php,
+ views/rss/user/default.php: Fixed RSS and OpenDD feeds for users
+
+2008-08-01 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/json/canvas/default.php, views/json/group/default.php,
+ views/json/object/default.php, views/json/search/entity_list.php,
+ views/json/site/default.php, views/json/user/default.php,
+ views/php/canvas/default.php, views/php/group/default.php,
+ views/php/object/default.php, views/php/search/entity_list.php,
+ views/php/site/default.php, views/php/user/default.php: PHP and JSON entity
+ list views... which should work.
+
+2008-08-01 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php: Fixed erroneous friends link issue
+
+ * views/default/page_elements/header.php,
+ views/default/page_elements/owner_block.php,
+ views/opendd/search/entity_list.php: Fixed OpenDD feeds
+
+ * languages/en.php, views/default/page_elements/owner_block.php: RSS and
+ OpenDD feeds autolink in owner block
+
+ * actions/user/spotlight.php, engine/lib/users.php,
+ views/default/page_elements/spotlight.php: Spotlight state persists.
+
+2008-08-01 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: friends picker modified, minor fixes and css
+ cleanup / re-sort
+
+2008-08-01 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/user/passwordreset.php, actions/user/requestnewpassword.php,
+ engine/lib/users.php, languages/en.php: Refs #191: Actions for resetting
+ passwords, but no front end as yet. To request a password reset access
+ http://..../actions/user/requestnewpassword/?username=username
+
+2008-08-01 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/canvas/layouts/widgets.php, views/default/css.php: river
+ updated, widget layout fixed, page block tweaked,
+
+2008-08-01 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/guidtool/views/default/guidtool/gallery.php,
+ mod/guidtool/views/default/guidtool/listing.php: GUIDTool now displays some
+ generic information about entities where available.
+
+2008-08-01 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/widgets/reorder.php, engine/lib/widgets.php, entities/index.php,
+ views/default/canvas/layouts/widgets.php: Widgets now work in three columns
+
+ * engine/lib/elgglib.php: Introducing the new pagesetup event.
+
+2008-08-01 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php: Message changes, refs #190
+
+ * mod/guidtool/start.php: Guidtool only available to admins
+
+ * engine/lib/entities.php, engine/lib/users.php: Changed so that
+ validated_email flag written as null user. Refs #190. Also confirms fix and
+ closes #104.
+
+2008-08-01 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, engine/lib/metadata.php: The metadata permissions
+ check now passes along (optionally) the specific piece of metadata. Refs #104
+
+2008-08-01 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/sessions.php: Closes #190. Note however that logins will be
+ broken until #104 has been resolved!
+
+ * actions/import/opendd.php, engine/lib/input.php: Fixes #194
+
+ * actions/import/opendd.php: Refs #194
+
+2008-08-01 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, entities/index.php,
+ .../canvas/layouts/two_column_left_sidebar.php,
+ views/default/page_elements/owner_block.php: Introducing the consistent owner
+ block
+
+2008-08-01 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/sites.php: Fixed what I presume was an error: namely it was
+ using $site instead of $guid in get_entity
+
+2008-07-31 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/friends/collection.php: delete collection action - div
+ prevented from showing
+
+2008-07-31 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/friends/deletecollection.php, languages/en.php: Collections now
+ delete successfully
+
+2008-07-31 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/friends/collections.php: temporarily allow h2 click to
+ propagate through to delete button
+
+2008-07-31 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/import/opendd.php: Bugfix
+
+2008-07-31 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * friends/pickercallback.php, views/default/friends/collection.php,
+ views/default/friends/collectiontabs.php,
+ views/default/friends/tablelist.php,
+ views/default/friends/tablelistcountupdate.php: Counts now update when you
+ save a friends collection
+
+ * engine/lib/access.php, views/default/friends/picker.php: More updates for
+ collections - save now works properly.
+
+ * actions/friends/editcollection.php: Removing the reference to the
+ collection name for now
+
+ * actions/friends/editcollection.php, engine/lib/access.php,
+ friends/pickercallback.php, languages/en.php,
+ views/default/friends/collection.php,
+ views/default/friends/collectiontabs.php,
+ views/default/friends/forms/collectionfields.php,
+ views/default/friends/forms/edit.php, views/default/friends/picker.php:
+ Picker saves correctly!
+
+2008-07-31 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/output/iframe.php: Added iframe output
+
+ * mod/guidtool/export.php, mod/guidtool/format_picker.php,
+ mod/guidtool/import.php, mod/guidtool/index.php,
+ mod/guidtool/languages/en.php, mod/guidtool/start.php, mod/guidtool/view.php,
+ .../views/default/forms/guidtool/export.php,
+ .../views/default/forms/guidtool/format.php,
+ mod/guidtool/views/default/guidtool/gallery.php,
+ mod/guidtool/views/default/guidtool/listing.php,
+ mod/guidtool/views/default/guidtool/profile.php,
+ .../views/default/object/guidtoolwrapper.php: Guid tool for import, export
+ and browsing.
+
+ * views/default/graphics/icon.php: Refs #151: graphics/icon view
+
+2008-07-31 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/footer_logo.gif, views/default/canvas/layouts/widgets.php,
+ views/default/css.php, views/default/navigation/pagination.php,
+ views/default/page_elements/footer.php: footer logo added, widget gallery
+ instructions changed, pagination block styles added to all pagination
+
+2008-07-31 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/friends/addcollection.php, actions/friends/deletecollection.php,
+ actions/friends/editcollection.php, engine/lib/users.php, friends/add.php,
+ friends/collections.php, friends/edit.php, languages/en.php,
+ views/default/friends/forms/edit.php: Friends collections are now fully part
+ of the main core
+
+2008-07-31 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/icons/default/large.png, _graphics/icons/default/medium.png,
+ _graphics/icons/default/small.png, _graphics/icons/default/tiny.png,
+ engine/lib/elgglib.php, engine/lib/entities.php: Closes #151: Introducing
+ getIcon($size)
+
+ * mod/logbrowser/graphics/defaultlarge.jpg,
+ mod/logbrowser/graphics/defaultmedium.jpg,
+ mod/logbrowser/graphics/defaultsmall.jpg,
+ mod/logbrowser/graphics/defaulttiny.jpg,
+ .../views/default/logbrowser/gallery.php,
+ mod/logbrowser/views/default/logbrowser/icon.php,
+ .../views/default/logbrowser/listing.php: Logbrowser now using getIcon for
+ graphics
+
+ * mod/logbrowser/index.php: Title added
+
+ * engine/lib/elgglib.php: Introducing elgg_get_view_location()
+
+2008-07-31 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/toolbar_arrow.png, views/default/css.php: arrow icon added to
+ dropdown menu
+
+ * views/default/css.php, views/default/friends/picker.php: save and cancel
+ buttons added to collections
+
+2008-07-31 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * friends/pickercallback.php, javascript/friendsPickerv1.js,
+ views/default/friends/collection.php, views/default/friends/collections.php,
+ views/default/friends/collectiontabs.php, views/default/friends/picker.php:
+ Hurrah! Made the friendspickers work
+
+2008-07-31 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/guidtool/import.php, mod/guidtool/index.php,
+ mod/guidtool/languages/en.php, mod/guidtool/manifest.xml,
+ mod/guidtool/start.php, .../views/default/forms/guidtool/import.php: Added
+ guidtool and switching to desktop.
+
+2008-07-31 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/friends/collection.php,
+ views/default/friends/collectiontabs.php: Friends picker tab initialisation
+ updates
+
+2008-07-30 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/friends/picker.php, views/default/friends/tablelist.php:
+ small change to collection members display - as a table
+
+ * javascript/friendsPickerv1.js, views/default/friends/collectiontabs.php:
+ minor fixes from earlier today - re-instating the a-z slider, and correctly
+ switching the picker tabs
+
+2008-07-30 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/friends/collection.php: Removing the members from the
+ collections content
+
+ * views/default/friends/picker.php: Picker works better on ajax load.
+
+ * views/default/friends/collectiontabs.php: Added specific numbering to tab
+ classes for the picker
+
+ * views/default/friends/picker.php: Removing js on picker load
+
+ * views/default/friends/collection.php, views/default/friends/picker.php:
+ Collections open blank (for now)
+
+ * views/default/friends/collectiontabs.php: Committing in loads
+
+2008-07-30 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/friends/collectiontabs.php: pete's collectiontabs code
+
+2008-07-30 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/import/odd.php, actions/import/opendd.php, engine/lib/export.php,
+ services/export/handler.php, views/odd/canvas/default.php,
+ views/odd/export/entity.php, views/odd/export/metadata.php,
+ views/odd/export/relationship.php, views/odd/group/default.php,
+ views/odd/messages/exceptions/exception.php, views/odd/object/default.php,
+ views/odd/pageshells/pageshell.php, views/odd/site/default.php,
+ views/odd/user/default.php, views/opendd/canvas/default.php,
+ views/opendd/export/entity.php, views/opendd/export/metadata.php,
+ views/opendd/export/relationship.php, views/opendd/group/default.php,
+ views/opendd/messages/exceptions/exception.php,
+ views/opendd/object/default.php, views/opendd/pageshells/pageshell.php,
+ views/opendd/site/default.php, views/opendd/user/default.php: Closes #189:
+ ODD -> OpenDD
+
+2008-07-30 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/friends/collection.php,
+ views/default/friends/collectiontabs.php, views/default/friends/picker.php:
+ AJAX improvements to picker
+
+ * engine/lib/elgglib.php, views/default/navigation/pagination.php: Lists of
+ comments etc no longer display "none found" if there aren't any.
+
+2008-07-30 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/import/odd.php: Forward to referer
+
+ * services/export/handler.php:
+
+ * actions/import/odd.php: Admin gatekeeper
+
+2008-07-30 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/elgg_toolbar_logout.gif, _graphics/elgg_toolbar_logout_over.gif,
+ _graphics/icon_customise_remove.png, views/default/css.php,
+ views/default/friends/collection.php: toolbar logout icon changed to work as
+ a single image resource (for caching purposes), delete icon on collections
+ changed to work as a single image rollover
+
+2008-07-30 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php, views/default/export/entity.php: Minor improvements to
+ default entity view.
+
+ * views/default/export/metadata.php, views/default/export/relationship.php:
+ Improved views
+
+2008-07-30 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * friends/pickercallback.php, views/default/friends/picker.php,
+ views/default/friends/tablelist.php: Added friends picker callback
+
+2008-07-30 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/extender.php, engine/lib/relationships.php: Refs #186: Get URL
+ for relationships
+
+2008-07-30 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/friends/collection.php,
+ views/default/friends/collectiontabs.php, views/default/friends/picker.php:
+ Moved collection tabs out of the main picker view
+
+2008-07-30 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/extender.php: Refs #186
+
+ * engine/lib/annotations.php, engine/lib/extender.php,
+ engine/lib/metadata.php: Introducing url handlers for extenders.
+
+ * engine/lib/export.php: Changed export uuid, refs #186
+
+ * htaccess_dist: Changed export rewrite rules.
+
+2008-07-30 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/friends/collection.php, views/default/friends/picker.php,
+ views/default/friends/tablelist.php: Added friends collections members list
+
+2008-07-30 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/relationships.php: Using guid_to_uuid
+
+2008-07-30 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/friends/tablelist.php: Added the tablelist view
+
+2008-07-30 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * javascript/friendsPickerv1.js, views/default/css.php,
+ views/default/friends/collection.php, views/default/friends/picker.php: the
+ beginnings of the tabbed friends picker
+
+2008-07-30 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php, engine/lib/extender.php,
+ engine/lib/metadata.php: Extender getURL() support (no overide as of yet)
+
+ * mod/opendd/actions/opendd/feed/delete.php,
+ mod/opendd/actions/opendd/feed/subscribe.php, mod/opendd/edit.php,
+ mod/opendd/feeds.php, mod/opendd/graphics/defaultlarge.jpg,
+ mod/opendd/graphics/defaultmedium.jpg, mod/opendd/graphics/defaultsmall.jpg,
+ mod/opendd/graphics/defaulttiny.jpg, mod/opendd/index.php,
+ mod/opendd/languages/en.php, mod/opendd/manage.php, mod/opendd/manifest.xml,
+ mod/opendd/start.php, mod/opendd/viewfeed.php,
+ .../views/default/forms/opendd/subscribe.php,
+ mod/opendd/views/default/object/oddentity.php,
+ mod/opendd/views/default/object/oddfeed.php,
+ mod/opendd/views/default/object/oddmetadata.php,
+ .../views/default/object/oddrelationship.php,
+ mod/opendd/views/default/opendd/css.php,
+ mod/opendd/views/default/opendd/gallery.php,
+ mod/opendd/views/default/opendd/icon.php,
+ mod/opendd/views/default/opendd/link_logo.php,
+ mod/opendd/views/default/opendd/links.php,
+ mod/opendd/views/default/opendd/listing.php,
+ mod/opendd/views/default/opendd/metatags.php,
+ mod/opendd/views/default/opendd/profile.php,
+ mod/opendd/views/default/output/uuid.php,
+ .../widgets/opendd_friends_elsewhere/edit.php,
+ .../widgets/opendd_friends_elsewhere/view.php, mod/opendd/viewuuid.php: Moved
+ OpenDD out of the central repo.
+
+ * mod/logbrowser/index.php: Logbrowser using admin gatekeeper.
+
+2008-07-30 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/widgets.php: Widget state cookie is now removed on widget
+ delete.
+
+2008-07-29 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * javascript/initialise_elgg.js, views/default/canvas/layouts/widgets.php,
+ views/default/widgets/wrapper.php: individual widgets state now saved in
+ cookies
+
+2008-07-29 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * htaccess_dist: Default view added to export, for completeness
+
+ * engine/lib/system_log.php:
+
+ * views/odd/group/default.php, views/odd/site/default.php: OpenDD default
+ views on entities
+
+ * views/default/export/entity.php: Improvements to export view
+
+ * views/default/object/default.php, views/default/site/default.php: Added
+ some default views.
+
+ * .../views/default/logbrowser/gallery.php: And in gallery view
+
+ * .../views/default/logbrowser/listing.php: Handle anonymous events.
+
+ * actions/systemsettings/install.php,
+ mod/logbrowser/graphics/defaultlarge.jpg,
+ mod/logbrowser/graphics/defaultmedium.jpg,
+ mod/logbrowser/graphics/defaultsmall.jpg,
+ mod/logbrowser/graphics/defaulttiny.jpg, mod/logbrowser/index.php,
+ mod/logbrowser/languages/en.php, mod/logbrowser/manifest.xml,
+ mod/logbrowser/start.php, .../views/default/logbrowser/gallery.php,
+ mod/logbrowser/views/default/logbrowser/icon.php,
+ .../views/default/logbrowser/listing.php,
+ mod/logbrowser/views/default/object/logwrapper.php: Added basic log browser.
+ updateclient & logbrowser are switched on by default in new installs.
+
+ * engine/lib/system_log.php: Fixed count
+
+ * engine/lib/system_log.php: Typo
+
+ * engine/lib/system_log.php: Added some useful helper functions.
+
+ * engine/lib/system_log.php: Count support added
+
+2008-07-29 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/canvas/layouts/widgets.php, views/default/css.php: final
+ changes to widgets - all ready to wire up now
+
+2008-07-29 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/opendd/start.php: Typo
+
+ * actions/register.php, languages/en.php,
+ views/default/account/forms/login.php: Registration disabled option (no admin
+ screen yet), closes #184
+
+2008-07-29 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * dashboard/index.php: dashboard widget tweak
+
+ * views/default/canvas/layouts/widgets.php: tweak to the profile widget
+ picker
+
+2008-07-29 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/updateclient/languages/en.php, mod/updateclient/start.php,
+ .../views/default/settings/updateclient/edit.php: Update client gets updates
+
+ * engine/lib/admin.php: Admin notify method added, view 'admin_message' for
+ this.
+
+2008-07-29 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php, views/default/canvas/layouts/widgets.php: widget layout
+ help context sensitive.
+
+2008-07-29 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/site/update_basic.php: Only on install
+
+ * mod/updateclient/languages/en.php, mod/updateclient/start.php: Update
+ client
+
+2008-07-28 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/updateclient/languages/en.php,
+ .../views/default/settings/updateclient/edit.php: Added configuration to
+ client.
+
+ * views/default/admin/plugins_opt/plugin.php: Minor look and feel tweaks
+
+ * mod/updateclient/index.php, mod/updateclient/languages/en.php,
+ mod/updateclient/manifest.xml, mod/updateclient/start.php,
+ .../views/default/settings/updateclient/edit.php: Adding updateclient
+ (non-functional) and now switching back to base station.
+
+2008-07-28 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php, views/failsafe/messages/errors/list.php,
+ views/failsafe/messages/exceptions/exception.php,
+ views/failsafe/messages/sanitisation/settings.php,
+ views/failsafe/pageshells/pageshell.php: new start page layout/style
+
+ * views/default/css.php: fixes to toolbar and owner box ie 6 issues
+
+ * views/default/css.php: top toolbar styled up, and owner block items
+
+ * _graphics/tools_over.png, javascript/initialise_elgg.js, languages/en.php,
+ views/default/canvas/layouts/widgets.php, views/default/css.php,
+ views/default/navigation/topbar_tools.php: new 3 column widget gallery (needs
+ wiring up), profile page profile box alignment sorted, topbar menu tweaked
+ and image added,
+
+2008-07-28 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/start.php: Fixes #182
+
+2008-07-27 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/userdetails.php,
+ views/default/canvas/layouts/widgets.php, views/default/css.php: profile and
+ dashboard pages altered for 3 widget columns
+
+2008-07-26 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/footer.php: fixed a small footer error
+
+ * views/default/page_elements/footer.php: wired up the footer menu links
+
+ * views/default/pageshells/pageshell.php: the spotlight is now only
+ available for logged in users.
+
+2008-07-26 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * javascript/friendsPickerv1.js, views/default/css.php,
+ views/default/friends/picker.php: friends picker fixed for new page layout,
+ and hopefully I've fixed the load issue too
+
+2008-07-25 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/userdetails.php,
+ views/default/canvas/layouts/widgets.php, views/default/css.php,
+ views/default/page_elements/elgg_topbar.php,
+ views/default/pageshells/pageshell.php: canvas layout updates, ie6&7 layout
+ fixes, new 3-column widget view
+
+2008-07-25 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/ping.php: Some notes
+
+ * engine/lib/ping.php: Using correct ping address
+
+ * engine/lib/entities.php: User test negative non-fatal on permissions check
+
+ * engine/lib/entities.php: Actually fetching the user
+
+2008-07-25 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * friends/index.php, friends/of.php: friends pages altered
+
+2008-07-25 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/opendd/views/default/output/uuid.php: Introducing UUID view
+
+2008-07-25 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * entities/index.php, entities/list.php: changed list and entity canvas
+ layout
+
+2008-07-25 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/site/update_basic.php, actions/systemsettings/install.php,
+ engine/lib/ping.php: Main pinging mechanism now functional
+
+ * engine/lib/ping.php: Temp disabled
+
+ * engine/schema/mysql.sql: Fixing access collections table
+
+2008-07-25 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/canvas/layouts/one_column.php, views/default/css.php,
+ views/default/page_elements/title.php: more canvas layout additions, and page
+ owner block added to sidebar
+
+2008-07-25 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../canvas/layouts/two_column_left_sidebar.php: tweak to the two_column
+ left to add the owner block
+
+2008-07-25 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/navigation/topbar_tools.php: menu fix
+
+ * views/default/css.php: new canvas layouts
+
+ * .../canvas/layouts/two_column_left_sidebar.php,
+ .../canvas/layouts/two_column_right_sidebar.php: new canvas layouts
+
+2008-07-25 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/ping.php: Sends url with version (to retrieve site if already
+ loaded)
+
+2008-07-25 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/navigation/topbar_tools.php: bug in tools fixed
+
+2008-07-25 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/ping.php: Set to ping ping.elgg.org
+
+ * actions/admin/site/update_basic.php, actions/systemsettings/install.php,
+ engine/lib/ping.php, languages/en.php, views/default/settings/system.php:
+ Ping now configurable.
+
+2008-07-25 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/navigation/topbar_tools.php: tools added to topbar
+
+ * views/default/pageshells/pageshell.php: removed toolbox from main content
+ area
+
+2008-07-25 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/elgg_topbar.php: minor tweak
+
+ * views/default/navigation/topbar_tools.php,
+ views/default/page_elements/elgg_topbar.php: tools menu item fixed and jquery
+ animation added
+
+2008-07-25 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php, views/default/settings/system.php: Moving to laptop
+
+2008-07-25 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/access.php, views/default/friends/collection.php,
+ views/default/friends/picker.php: Improved friend picker.
+
+2008-07-25 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/site/update_basic.php, engine/lib/configuration.php:
+ sitedescription now loaded into config and displayed
+
+2008-07-25 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/navigation/topbar_tools.php,
+ views/default/page_elements/elgg_topbar.php: added tools to the topbar
+
+2008-07-25 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/site/update_basic.php, actions/systemsettings/install.php,
+ languages/en.php, views/default/settings/system.php: Now possible to specify
+ a site description.
+
+ * engine/lib/ping.php:
+
+ * views/default/output/url.php: Fixed another oopsy
+
+ * engine/lib/api.php:
+
+ * engine/lib/entities.php: Support multiple metadata values on entities,
+ closes #179
+
+2008-07-24 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/ping.php:
+
+ * engine/lib/api.php: API Client bugfixes
+
+ * engine/lib/api.php:
+
+2008-07-24 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * javascript/friendsPickerv1.js, views/default/friends/picker.php: Tabs on
+ the friend picker now work.
+
+2008-07-24 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/api.php: Fixing oopsy...
+
+2008-07-24 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/friends/picker.php: Fixed the friends picker.
+
+ * views/default/friends/picker.php: The picker now selects the
+ friendspickerN variable correctly.
+
+ * engine/lib/access.php, engine/lib/relationships.php,
+ engine/schema/mysql.sql, languages/en.php,
+ views/default/friends/collection.php, views/default/friends/collections.php,
+ views/default/friends/picker.php: Introducing the (still issue-packed) friend
+ picker.
+
+2008-07-24 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Allowing multiple
+
+ * views/default/output/url.php: Support HTTPS
+
+ * engine/lib/api.php: Api tweaks refs #149
+
+ * engine/lib/ping.php: New site pinger, refs #149
+
+ * engine/lib/entities.php: Correctly exporting site and container as opendd
+
+2008-07-23 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/api.php, services/api/rest.php: Updated to use pam for auth
+ token. Added anonymous function support.
+
+ * engine/lib/pam.php: PAM now supports 'required' and 'sufficient'
+
+2008-07-23 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/friends_picker_arrow_left.gif,
+ _graphics/friends_picker_arrow_right.gif, javascript/friendsPickerv1.js,
+ .../jquery/jquery-easing-compatibility.1.2.pack.js,
+ vendors/jquery/jquery-easing.1.2.pack.js, views/default/css.php,
+ views/default/page_elements/header.php: new files for friends picker
+
+2008-07-23 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/api.php: Fixed typo
+
+ * engine/lib/api.php, languages/en.php: API client added to code & changed
+ order of expose_function
+
+ * engine/lib/entities.php, engine/lib/group.php: Moving canWriteToContainer
+
+2008-07-23 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/footer_logo.gif, views/default/page_elements/footer.php: removal
+ of the official elgg logo from the footer, this is not GPL.
+
+2008-07-22 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/groupprofile.php: The group profile now sets page ownership to
+ the group
+
+ * mod/groups/views/default/groups/grouplinks.php: Slight modification to
+ group links.
+
+ * engine/lib/objects.php: Yet more container refactoring.
+
+2008-07-22 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/input/access.php, views/default/input/checkboxes.php,
+ views/default/input/file.php, views/default/input/longtext.php,
+ views/default/input/password.php, views/default/input/pulldown.php,
+ views/default/input/radio.php, views/default/input/tags.php,
+ views/default/input/text.php, views/default/input/url.php: Disabled support
+ added to forms.
+
+2008-07-22 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/group.php, engine/lib/metadata.php,
+ engine/lib/relationships.php: More owner_guid to container_guid transfer
+
+ * engine/lib/metadata.php, engine/lib/tags.php: Updated further functions to
+ work from container_guids rather than owner_guids
+
+ * mod/groups/start.php, mod/groups/views/default/groups/icon.php,
+ mod/profile/views/default/profile/icon.php: Icons now handle elegantly if you
+ try and display a non-ElggUser entity.
+
+ * engine/lib/group.php, engine/lib/pageowner.php,
+ mod/groups/languages/en.php: Groups now have usernames of a sort
+
+ * engine/lib/elgglib.php, engine/lib/group.php, engine/lib/users.php:
+ Introducing the Friendable interface
+
+ * mod/profile/views/default/user/default.php,
+ mod/profile/views/default/user/user.php: Moved the default user view from
+ user/user to user/default.
+
+2008-07-22 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php:
+
+ * engine/lib/entities.php: Saving cached annotations
+
+2008-07-21 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/new.php: Typo
+
+ * mod/opendd/edit.php, mod/opendd/feeds.php, mod/opendd/index.php,
+ mod/opendd/manage.php, mod/opendd/viewfeed.php, mod/opendd/viewuuid.php:
+ OpenDD using elgg_view_title
+
+ * engine/lib/entities.php: Exporting full profile
+
+ * mod/groups/all.php, mod/groups/edit.php, mod/groups/groupprofile.php,
+ mod/groups/index.php, mod/groups/invite.php, mod/groups/new.php: Groups using
+ elgg_view_title
+
+ * engine/lib/access.php: Fixes #175
+
+2008-07-18 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Fix for can_write_to_container
+
+ * engine/lib/entities.php: Fixed the can_write_to_container function when
+ you're logged out.
+
+ * engine/lib/entities.php, engine/lib/users.php: Further fixes.
+
+ * engine/lib/entities.php: Fix for previous.
+
+ * engine/lib/entities.php: Container_guid is set intelligently for
+ get_entities when owner_guid is set.
+
+ * engine/lib/users.php: Slight fix to previous.
+
+ * engine/lib/users.php: Altered the get_user_friends_objects functions to
+ work with containers.
+
+ * engine/lib/entities.php, engine/lib/group.php: Moved
+ can_write_to_container into elgglib
+
+ * engine/lib/annotations.php, engine/lib/elgglib.php,
+ engine/lib/entities.php, engine/lib/group.php, engine/lib/objects.php,
+ engine/lib/pageowner.php, engine/lib/users.php, engine/schema/mysql.sql,
+ mod/groups/actions/addtogroup.php, views/default/page_elements/title.php:
+ Moved container_guid to entities, modified a bunch of functions.
+
+ * engine/lib/plugins.php: Standardised plugin loading
+
+2008-07-18 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/group.php, mod/groups/languages/en.php, mod/groups/start.php:
+ Closes #166
+
+2008-07-18 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/access.php: Slight change to write access permissions function
+
+ * engine/lib/access.php: Reinstating plugin hooks for access collections.
+
+ * engine/lib/input.php, mod/profile/views/default/profile/userdetails.php,
+ views/default/admin/main.php, views/default/admin/plugins.php,
+ views/default/admin/site.php, views/default/admin/statistics.php,
+ views/default/admin/user.php, views/default/messages/errors/error.php,
+ views/default/messages/exceptions/exception.php,
+ views/default/messages/messages/message.php,
+ views/default/output/longtext.php, views/default/settings/install.php,
+ views/default/usersettings/main.php, views/default/usersettings/plugins.php,
+ views/default/usersettings/statistics.php,
+ views/failsafe/messages/exceptions/exception.php,
+ views/failsafe/messages/sanitisation/htaccess.php,
+ views/failsafe/messages/sanitisation/settings.php,
+ views/odd/messages/exceptions/exception.php, views/rss/object/default.php,
+ views/rss/user/default.php, views/xml/messages/exceptions/exception.php:
+ Added the autop function, replaced any references to nl2br
+
+ * engine/lib/access.php, engine/schema/mysql.sql: Fixed a bug with the
+ revamped access collections
+
+ * engine/lib/pageowner.php, engine/lib/plugins.php: Improvements to
+ get_context
+
+ * engine/lib/access.php: Fix for access collections
+
+ * views/default/input/text.php: Short text values are now properly escaped
+ in the input/text view.
+
+ * engine/schema/mysql.sql: Added auto increment initial val. Fixes #171
+
+2008-07-18 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/access.php: new functions added to access in order to allow
+ collections to be created
+
+2008-07-17 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/schema/mysql.sql: access_collections now auto_increment
+
+2008-07-17 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/access.php: access groups renamed to access collections
+
+2008-07-17 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/schema/mysql.sql: access_groups -> access_collections
+
+ * engine/lib/access.php: Fix to previous
+
+ * engine/lib/access.php: New access control hooks
+
+2008-07-17 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/systemsettings/install.php, mod/groups/groupprofile.php,
+ mod/groups/start.php: Closes #165 & #167
+
+ * services/export/handler.php:
+
+2008-07-17 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/access.php: Added new access group control functions
+
+2008-07-17 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/sessions.php: Fixes #164: Seems there is something erroniously
+ setting 'guid' to something in logged in systems (or alternatively this is
+ just a session problem on my system) either way I have modified isloggedin to
+ check both guid and id... which seems to work.
+
+ * engine/lib/entities.php, engine/lib/extender.php,
+ services/export/handler.php: Closes #160
+
+2008-07-17 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php: Fixed get_entities_by_annotation
+
+ * engine/lib/annotations.php: Introducing list_entities_from_annotations
+
+2008-07-16 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, mod/opendd/viewuuid.php,
+ views/default/friends/list.php, views/default/search/entity_list.php,
+ views/js/object/default.php, views/js/user/default.php: Fixed numerous
+ occurrances of elgg_view_entity being called incorrectly. Fixes #163
+
+2008-07-16 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * entities/index.php: Fixed the single entity viewer
+
+2008-07-16 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/index.php: Fixes #162
+
+ * mod/opendd/viewuuid.php: Closes #161
+
+2008-07-16 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/friends/add.php, actions/friends/remove.php: Add and remove friend
+ actions now use try / catch
+
+2008-07-16 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, engine/lib/extender.php: Closes #155: Introduces
+ 'volatile' type of metadata in odd feeds.
+
+ * engine/lib/elgglib.php: Closes #157: Introducing elgg_[get|set]_viewtype()
+
+ * engine/lib/river.php: Reversed ben's changes
+
+2008-07-16 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/river.php: Fix for river items when the item is an annotation,
+ not an entity in itself
+
+2008-07-16 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Closes #158: Renamed $location to $view_location
+ within elgg_view. This seems to be a successful workaround.
+
+2008-07-16 misja <misja@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/handlers/xml-rpc_handler.php: Set the view with set_input rather
+ than via the session
+
+2008-07-16 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/opendd.php: Closes #156 & #139
+
+2008-07-16 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/river.php: The friends river now grabs more friends ...
+
+2008-07-16 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/actions/joinrequest.php: Fixes #154
+
+ * engine/lib/metadata.php, mod/groups/actions/join.php: Closes #116: Groups
+ join clears invite flags http://trac.elgg.org/elgg/ticket/116
+
+ * mod/profile/actions/edit.php, mod/profile/actions/iconupload.php,
+ mod/profile/languages/en.php,
+ .../default/river/ElggUser/profileiconupdate.php,
+ .../views/default/river/ElggUser/profileupdate.php,
+ .../views/default/river/ElggUser/update.php: Closes #152 and as a bonus you
+ get a river notification for icon upload as well. Aren't I nice?
+
+2008-07-16 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: river blog updated - added
+
+2008-07-15 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/opendd/start.php: Fixes #147
+
+ * mod/opendd/start.php:
+
+ * mod/opendd/start.php: Closes #150
+
+ * mod/opendd/start.php, .../widgets/opendd_friends_elsewhere/view.php,
+ mod/opendd/viewuuid.php: Closes #145: Override getURL on imported entities.
+
+2008-07-15 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: You can now override entity URLs with the
+ setURL($string) method.
+
+2008-07-15 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/actions/addtogroup.php, mod/groups/actions/edit.php,
+ mod/groups/actions/joinrequest.php, mod/groups/languages/en.php,
+ mod/groups/start.php, mod/groups/views/default/forms/groups/invite.php,
+ mod/groups/views/default/groups/groupgallery.php,
+ mod/groups/views/default/groups/grouplisting.php,
+ mod/groups/views/default/groups/groupprofile.php,
+ .../default/river/ElggRelationship/create.php: Fixes #144
+
+2008-07-15 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/css.php,
+ mod/profile/views/default/profile/javascript.php: javascript menu dropdown IE
+ bug fixed for friends widget, still an issue with friends of
+
+2008-07-15 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/river/ElggRelationship/create.php,
+ views/default/river/wrapper.php,
+ views/json/messages/exceptions/exception.php,
+ views/php/messages/exceptions/exception.php,
+ views/xml/messages/exceptions/exception.php: Closes #140
+
+ * engine/lib/extender.php, mod/opendd/languages/en.php,
+ mod/opendd/manage.php, mod/opendd/start.php, mod/opendd/viewfeed.php,
+ .../widgets/opendd_friends_elsewhere/edit.php,
+ .../widgets/opendd_friends_elsewhere/view.php: Closes #135: First version of
+ the OpenDD friends elsewhere feed.
+
+ * engine/lib/river.php, .../default/river/ElggRelationship/create.php,
+ .../views/default/river/ElggUser/update.php: Using ElggRiverStatement. Plugin
+ writers update your views! Refs #135.
+
+ * engine/lib/entities.php: Moved temp array caching stuff to the correct
+ functions.
+
+ * engine/lib/entities.php: Entity metadata can now be saved using
+ setMetaData() interface even if guid not specified.
+
+2008-07-15 misja <misja@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/handlers/xml-rpc_handler.php, engine/lib/xml-rpc.php: Remove rogue
+ print_r() statement, rightly set the xml view and fix incorrect xml-rpc view
+ call.
+
+ * engine/lib/xml-rpc.php: Fix uninitialized XML-RPC handler value
+
+ * engine/lib/xml-rpc.php: Fixed registering of XML-RPC handlers
+
+2008-07-14 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/extender.php: Time_created should be time_updated.
+
+ * engine/lib/opendd.php: Refs #139: Using UTF-8 encoding as a speculative
+ fix. Test and confirm.
+
+2008-07-14 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: updated toolabr logout for old IE 6's
+
+ * views/default/css.php: updates to log out, pagination, search box
+
+2008-07-14 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/extender.php: Introducing oddmetadata_to_elggextender(), a
+ function used for import but functionised to let you use it from elsewhere.
+
+2008-07-12 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Introducing oddentity_to_elggentity(), a function
+ used for import but functionised to let you use it from elsewhere.
+
+2008-07-11 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: and again
+
+ * views/default/css.php: river_forums_update added
+
+2008-07-11 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php: new date and time lang
+
+2008-07-11 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, views/default/search/entity_list.php,
+ views/rss/search/entity_list.php: The lists now go through the
+ search/entity_list view.
+
+2008-07-11 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/opendd.php: Added getNumElements()
+
+ * engine/lib/entities.php: Fixes #137: annotate and getAnnotations now
+ functions for unsaved entities. Maths functions non-functional at present.
+ Refs #135.
+
+ * engine/lib/entities.php: Added Group entity support to import.
+
+ * languages/en.php, services/export/handler.php: Better errors for attempt
+ to access a GUID you can't
+
+ * views/odd/messages/exceptions/exception.php: Exceptions in OpenDD export
+ now appear as comments for debugging.
+
+ * engine/lib/relationships.php, services/export/handler.php: relationships
+ are addressable and have working UUIDs, refs #132
+
+ * actions/comments/add.php, actions/comments/delete.php,
+ actions/email/confirm.php, actions/email/save.php, actions/friends/add.php,
+ actions/friends/remove.php, actions/import/odd.php, actions/login.php,
+ actions/logout.php, .../notifications/settings/usersettings/save.php,
+ actions/plugins/settings/save.php, actions/plugins/usersettings/save.php,
+ actions/register.php, actions/user/language.php, actions/user/name.php,
+ actions/user/password.php, actions/useradd.php, actions/widgets/save.php,
+ languages/en.php: Using register_error on errors rather than system_message.
+ Also, fixed widget save to handle arrays (Refs #135)
+
+ * actions/admin/user/ban.php, actions/admin/user/delete.php,
+ actions/admin/user/makeadmin.php, actions/admin/user/resetpassword.php: Using
+ register_error on errors rather than system_message
+
+ * actions/admin/plugins/disable.php, actions/admin/plugins/enable.php,
+ mod/groups/actions/addtogroup.php, mod/groups/actions/edit.php,
+ mod/groups/actions/join.php, mod/groups/actions/joinrequest.php,
+ mod/groups/actions/leave.php, mod/opendd/actions/opendd/feed/delete.php,
+ mod/opendd/actions/opendd/feed/subscribe.php: Using register_error on errors
+ rather than system_message
+
+2008-07-11 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: defaut font reset to verdana
+
+ * views/default/css.php: full list of pc names for Lucida Sans added
+
+2008-07-10 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/canvas/layouts/two_column.php, views/default/css.php: two
+ column layout fix
+
+ * views/default/canvas/layouts/two_column.php, views/default/css.php: two
+ column canvas layout fixed
+
+2008-07-10 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, views/default/page_elements/title.php:
+ elgg_view_title can now suppress the submenu
+
+2008-07-10 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/elgg_toolbar_logout_over.gif, views/default/css.php,
+ views/default/page_elements/elgg_topbar.php: elgg topbar logout re-done with
+ rollover
+
+2008-07-10 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/admin/plugins.php: Killed pagination on the plugin admin
+ page
+
+ * engine/lib/elgglib.php: Added a plugin hook for counting comments.
+
+2008-07-10 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/widgets.php: Working with multiple values in array
+
+2008-07-10 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/elgg_bookmarklet.gif: bookmarklet graphic
+
+2008-07-10 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Fixes #134: Using else between statements to
+ ensure that they are only ever triggered once. Please confirm that there are
+ no other issues attached.
+
+2008-07-10 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/css.php,
+ mod/profile/views/default/profile/menu/actions.php,
+ .../views/default/profile/menu/adminlinks.php, views/default/css.php: avatar
+ submenu altered and messages div coloured up
+
+2008-07-10 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/messages/errors/list.php,
+ views/default/messages/messages/list.php: Error messages now have a different
+ div name
+
+ * views/default/page_elements/title.php: The submenu div doesn't appear if
+ there is no submenu.
+
+ * engine/lib/plugins.php: Fixed issue with get_plugin_name and pagehandlers.
+
+2008-07-09 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, views/default/comments/forms/edit.php: Fixed
+ comments!
+
+ * engine/lib/elgglib.php: Fixed submenu tab contexts
+
+2008-07-09 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Blocking some information from export, closes
+ #130
+
+2008-07-09 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/editicon.php: Updated the edit icon form
+ view
+
+ * mod/profile/editicon.php: Restoring old edit icon page
+
+2008-07-09 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/river.php, mod/opendd/actions/opendd/feed/delete.php,
+ mod/opendd/actions/opendd/feed/subscribe.php, mod/opendd/edit.php,
+ mod/opendd/feeds.php, mod/opendd/graphics/defaultlarge.jpg,
+ mod/opendd/graphics/defaultmedium.jpg, mod/opendd/graphics/defaultsmall.jpg,
+ mod/opendd/graphics/defaulttiny.jpg, mod/opendd/index.php,
+ mod/opendd/languages/en.php, mod/opendd/manage.php, mod/opendd/manifest.xml,
+ mod/opendd/start.php, mod/opendd/viewfeed.php,
+ .../views/default/forms/opendd/subscribe.php,
+ mod/opendd/views/default/object/oddentity.php,
+ mod/opendd/views/default/object/oddfeed.php,
+ mod/opendd/views/default/object/oddmetadata.php,
+ .../views/default/object/oddrelationship.php,
+ mod/opendd/views/default/opendd/css.php,
+ mod/opendd/views/default/opendd/gallery.php,
+ mod/opendd/views/default/opendd/icon.php,
+ mod/opendd/views/default/opendd/link_logo.php,
+ mod/opendd/views/default/opendd/links.php,
+ mod/opendd/views/default/opendd/listing.php,
+ mod/opendd/views/default/opendd/metatags.php,
+ mod/opendd/views/default/opendd/profile.php: Closes #81: OpenDD aggregator
+ http://trac.elgg.org/elgg/ticket/81
+
+2008-07-09 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/start.php: Further profile text fix
+
+ * mod/profile/languages/en.php, mod/profile/start.php: Added profile submenu
+
+ * engine/lib/elgglib.php: Fixed minor profile tab issue
+
+2008-07-09 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: mini avatar in page title area fixed
+
+2008-07-09 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * admin/user/index.php: The user administator page now results in an RSS
+ feed
+
+ * engine/lib/elgglib.php, views/default/canvas_header/submenu_template.php,
+ views/default/page_elements/title.php: Introducing the submenu
+
+2008-07-09 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: edit profile button moved
+
+2008-07-09 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/userdetails.php: profile edit link moved
+
+ * friends/of.php: friends of title
+
+ * friends/index.php, friends/of.php: titles on friend list pages
+
+2008-07-09 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: css for page tabs submenu
+
+2008-07-09 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/rss/pageshells/pageshell.php: RSS feeds live again when you're
+ logged out!
+
+2008-07-09 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * htaccess_dist: Fixed opendd metadata .htaccess rules
+
+ * engine/lib/elgglib.php, engine/lib/entities.php: Refs #81: Subtype can be
+ returned on a non-saved entity.
+
+2008-07-09 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Added a comment hook so that other plugins can
+ handle comments instead
+
+ * vendors/kses/kses.php: Removed a kses warning.
+
+ * views/default/comments/forms/edit.php: The comment form only appears if
+ you are logged in.
+
+2008-07-09 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/notification.php: Removed toggle since it broke the handler
+ prototype
+
+2008-07-09 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/title.php: new view added to the canvas title
+ view.
+
+2008-07-09 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php, views/default/page_elements/elgg_topbar.php: topbar
+ altered for messages and links style
+
+2008-07-09 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/object/object.php: Closes #129: Placeholder object default
+ view
+
+2008-07-09 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/editicon.php, mod/profile/languages/en.php,
+ views/default/css.php: new avatar crop page and instructions
+
+2008-07-09 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/languages/en.php, mod/groups/start.php,
+ .../default/widgets/group_entities_widget/edit.php,
+ .../default/widgets/group_entities_widget/view.php: Refs #129, #109 & #106
+
+2008-07-09 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * index.php: Plugins can now override the front page
+
+2008-07-09 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Introducing list_entities_groups()
+
+2008-07-09 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/relationships.php: The relationship listing function wasn't
+ taking offsets properly.
+
+ * views/default/navigation/pagination.php: Further pagination change.
+
+2008-07-09 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/elgg_topbar.php: new topbar
+
+2008-07-09 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/navigation/pagination.php: Further pagination change.
+
+ * views/default/navigation/pagination.php: Slightly more descriptive
+ pagination.
+
+2008-07-09 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * htaccess_dist: Modified rewrite rules for page handler to support - and _
+
+2008-07-09 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/input.php, vendors/kses/AUTHORS, vendors/kses/COPYING,
+ vendors/kses/ChangeLog, vendors/kses/README, vendors/kses/TODO,
+ vendors/kses/docs/attribute-value-checks, vendors/kses/docs/hooks,
+ vendors/kses/docs/stripping-everything, vendors/kses/docs/supported-formats,
+ vendors/kses/docs/whitelisted-url-protocols,
+ vendors/kses/examples/filter.php, vendors/kses/examples/test.php,
+ vendors/kses/kses.php, vendors/kses/oop/oop.kses.changelog.txt,
+ vendors/kses/oop/oop.simple.api.txt, vendors/kses/oop/php4.class.kses.php,
+ vendors/kses/oop/php5.class.kses.php, vendors/kses/oop/test.oop.kses.php:
+ Elgg 1.0, meet kses. Kses, Elgg 1.0.
+
+2008-07-09 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/opendd.php: Minor tweak to OpenDD library
+
+2008-07-09 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/editicon.php, mod/profile/languages/en.php,
+ mod/profile/views/default/profile/editicon.php: new profile avatar page
+
+2008-07-08 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/gallery.php: users gallery view sorted
+
+2008-07-08 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * htaccess_dist: Closes #128
+
+2008-07-08 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/title.php: new canvas title
+
+2008-07-08 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/river_icons/river_icon_friends.gif, views/default/css.php: river
+ icon for friends
+
+2008-07-08 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/vendors/calendarpopup/CalendarPopup.js,
+ engine/vendors/jquery/jquery.js, vendors/calendarpopup/CalendarPopup.js,
+ views/default/input/calendar.php: Moved the calendar popup, erased the
+ duplicate jQuery
+
+ * actions/comments/add.php, engine/lib/notification.php, languages/en.php:
+ Introducing notifications on generic comments.
+
+ * entities/list.php: Rough and ready entity list page
+
+2008-07-08 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/title.php: reverted the new title
+
+ * views/default/page_elements/title.php: title tweaks
+
+2008-07-08 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/header.php: OpenDD autodiscovery header
+
+2008-07-08 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: moved generic comments css from plugin to core
+
+2008-07-08 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php: Closes #125: get_entities_by_latest_annotation
+ function
+
+2008-07-08 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/widgets.php, views/default/output/tags.php: widget are now
+ logged in by default, tag output tweaked
+
+2008-07-08 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/database.php, engine/lib/elgglib.php,
+ engine/lib/metastrings.php, mod/profile/actions/iconupload.php: Removing
+ annoying warning messages
+
+2008-07-07 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php: Users online, not user's ...
+
+ * actions/admin/user/makeadmin.php, engine/lib/admin.php,
+ engine/lib/entities.php, engine/lib/metadata.php, engine/lib/sessions.php,
+ engine/lib/users.php, views/default/admin/statistics_opt/numentities.php,
+ views/default/admin/statistics_opt/online.php: Administration tweaks; fixed
+ users online functions, as well as last_action functions, and the 'make
+ admin' functionality
+
+ * views/default/page_elements/title.php: Removed the 'your' prefix from
+ titles
+
+ * engine/lib/pageowner.php: page_owner() now works off owner_guid, not
+ owner_id
+
+ * languages/en.php: Added the word 'all' to the vocabulary
+
+2008-07-07 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/title.php: changes to the title view
+
+2008-07-07 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/river/wrapper.php: Relationship river items are now
+ correctly wrapped in divs
+
+ * mod/profile/graphics/defaulttopbar.jpg, mod/profile/graphics/topbar.jpg:
+ Default topbar graphic should now be included
+
+2008-07-07 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/graphics/topbar.jpg: default avatar added for topbar
+
+2008-07-07 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, engine/lib/metadata.php: Introducing
+ canEditMetadata
+
+2008-07-07 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/objects.php: Closes #107, this has been superceded by groups
+ functionality (#106).
+
+ * engine/lib/notification.php: Option to hide sender.
+
+2008-07-07 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/gallery_back_icon.gif, _graphics/gallery_back_icon_on.gif:
+ gallery overview icons
+
+ * _graphics/icon_tag.gif: piccy for tags
+
+ * views/default/css.php: tags icon and files update
+
+2008-07-07 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/output/tags.php: class wrapped around tag string.
+
+2008-07-07 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/group.php: Closes #123
+
+2008-07-07 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/comments/forms/edit.php: removed the title from generic
+ comments
+
+2008-07-07 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/objects.php: Fixes #122
+
+2008-07-07 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php, views/default/search/gallery.php: updated file
+ gallery
+
+2008-07-07 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/opendd.php: Decode on import
+
+ * engine/lib/group.php, mod/groups/actions/edit.php,
+ mod/groups/actions/join.php, mod/groups/languages/en.php,
+ mod/groups/views/default/forms/groups/edit.php,
+ mod/groups/views/default/groups/menu/actions.php: Closes #120
+
+2008-07-07 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Fixed friendly_time
+
+2008-07-04 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/actions/edit.php, mod/groups/languages/en.php,
+ mod/groups/views/default/forms/groups/edit.php: Closes #109: Group icons can
+ be set. Fixed recreate group on edit.
+
+ * mod/groups/graphics/defaultlarge.jpg,
+ mod/groups/graphics/defaultmedium.jpg, mod/groups/graphics/defaultsmall.jpg,
+ mod/groups/graphics/defaulttiny.jpg, mod/groups/graphics/icon.php,
+ mod/groups/views/default/groups/icon.php: Refs #109: Default graphics set.
+ Custom graphics must be in groups/{$GROUP_GUID}{$size}.jpg
+
+2008-07-04 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/editicon.php: changes to the icon
+ editing page.
+
+2008-07-04 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/profile/menu/adminlinks.php: Removed blank space on menu
+
+2008-07-04 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/menu/actions.php: REmoved duplicate
+ admin links
+
+2008-07-04 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/statistics.php: Fixes #119
+
+ * languages/en.php, mod/groups/actions/addtogroup.php,
+ mod/groups/actions/edit.php, mod/groups/edit.php, mod/groups/invite.php,
+ mod/groups/languages/en.php, mod/groups/start.php,
+ mod/groups/views/default/forms/groups/invite.php,
+ mod/groups/views/default/groups/groupprofile.php,
+ mod/groups/views/default/groups/icon.php,
+ mod/groups/views/default/groups/menu/actions.php,
+ mod/groups/views/default/sharing/invite.php: Refs #109: Invite support added
+
+2008-07-04 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: updates for friends widget
+
+2008-07-04 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/schema/mysql.sql: Fixed regression
+
+2008-07-04 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * javascript/initialise_elgg.js: updated js
+
+2008-07-04 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/group.php, engine/lib/pageowner.php,
+ mod/groups/languages/en.php, mod/groups/start.php,
+ .../default/widgets/group_members_widget/edit.php,
+ .../default/widgets/group_members_widget/view.php: Refs #109: Group members
+ widget.
+
+ * mod/groups/groupprofile.php, mod/groups/languages/en.php,
+ mod/groups/start.php: Refs #109 : Widget support
+
+ * mod/groups/groupprofile.php, mod/groups/start.php,
+ mod/groups/views/default/groups/grouplinks.php,
+ mod/groups/views/default/groups/groupprofile.php,
+ mod/groups/views/default/groups/menu/actions.php,
+ .../views/default/groups/menu/ownerlinks.php: Refs #109 - Basic profile
+ layout
+
+ * mod/groups/languages/en.php,
+ .../default/river/ElggRelationship/create.php: Refs #109: River functionality
+
+2008-07-04 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: updates to river(ie fixes), and sharing
+
+2008-07-04 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/river/ElggRelationship/create.php: Using entities rather
+ than object
+
+2008-07-04 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php, languages/en.php, search/index.php,
+ views/default/search/startblurb.php,
+ views/default/user/search/finishblurb.php,
+ views/default/user/search/startblurb.php: First pass on user search
+
+2008-07-04 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: more river updates
+
+2008-07-04 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/actions/addtogroup.php: Refs #109 : Private group membership
+ full exchange.
+
+ * engine/lib/notification.php: Unnecessary sanitise string causing issues on
+ some subjects
+
+ * mod/groups/actions/addtogroup.php, mod/groups/actions/joinrequest.php,
+ mod/groups/languages/en.php, mod/groups/start.php: Join requests on closed
+ groups, full loop. Refs #109
+
+2008-07-04 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: more river icon fixes
+
+2008-07-03 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/graphics/defaultlarge.jpg,
+ mod/profile/graphics/defaultmedium.jpg,
+ mod/profile/graphics/defaultsmall.jpg, mod/profile/graphics/defaulttiny.jpg:
+ new default avatar (your's was good Ben - just changed the blue a wee bit)
+
+ * _graphics/river_icons/river_icon_blog.gif,
+ _graphics/river_icons/river_icon_comment.gif,
+ _graphics/river_icons/river_icon_feed.gif,
+ _graphics/river_icons/river_icon_files.gif,
+ _graphics/river_icons/river_icon_forum.gif,
+ _graphics/river_icons/river_icon_messageboard.gif,
+ _graphics/river_icons/river_icon_plugin.gif,
+ .../river_icons/river_icon_privatemessage.gif,
+ _graphics/river_icons/river_icon_profile.gif,
+ _graphics/river_icons/river_icon_shares.gif,
+ _graphics/river_icons/river_icon_status.gif: icons for the river
+
+2008-07-03 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/group.php: Refs #109
+
+2008-07-03 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: river icons added
+
+2008-07-03 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/spotlight/default.php: content added to the spotlight
+
+2008-07-03 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/river/wrapper.php: Fixed a subtype bug in the river item
+ wrapper.
+
+2008-07-03 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/group.php: It would help if I added the functions to the right
+ scope. Oops! Refs #106
+
+ * engine/lib/opendd.php: Fixes #113
+
+ * admin/user/index.php: Fixes #111
+
+ * views/default/input/access.php: Extended access to support options
+ override
+
+ * engine/lib/elgglib.php: Collection to group, refs #106
+
+2008-07-02 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/css.php,
+ mod/profile/views/default/profile/userdetails.php,
+ .../canvas/layouts/narrow_right_sidebar.php, views/default/css.php: profile,
+ forum and canvas updated
+
+ * views/default/css.php: status widget updates
+
+ * views/default/css.php: generic comments moved/cleaned
+
+2008-07-02 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/schema/mysql.sql: Typo on database table
+
+2008-07-02 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/css.php,
+ views/default/canvas/layouts/one_column.php, views/default/css.php: profile
+ menu, single view layout, and comments all updated
+
+2008-07-01 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/css.php,
+ mod/profile/views/default/profile/userdetails.php: avatar menu fixed for
+ non-200px wide avatars
+
+2008-07-01 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * dashboard/index.php, languages/en.php,
+ views/default/canvas/layouts/widgets.php: Default text for the dashboard.
+
+2008-07-01 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/start.php: Closes #112
+
+ * .../views/default/profile/menu/adminlinks.php,
+ mod/profile/views/default/profile/userdetails.php: Closes #112
+
+2008-07-01 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/canvas/layouts/widgets.php: The widget layout now uses areas
+ 3 and 4 as the column content if there aren't any widgets
+
+ * views/default/canvas/layouts/widgets.php: The widget layout now uses areas
+ 3 and 4 as the column content if there aren't any widgets
+
+2008-07-01 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/elgg_topbar.php: created settings link
+
+2008-07-01 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/menu/actions.php,
+ mod/profile/views/default/profile/userdetails.php: Admin menus to the
+ contextual menu
+
+2008-07-01 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/systemsettings/install.php: Closes #110
+
+ * actions/systemsettings/install.php: NEW - #109: Groups core plugin
+ http://trac.elgg.org/elgg/ticket/109
+
+ * actions/systemsettings/install.php: Refs #109: Groups plugin active by
+ default
+
+ * engine/lib/users.php: Closes #108
+
+2008-07-01 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/javascript.php,
+ views/default/widgets/wrapper.php: Fixed avatar menu on widgets
+
+2008-07-01 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/relationships.php: Fixed notification subject
+
+2008-07-01 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/elgg_topbar.php: small tweak to topbar
+
+2008-07-01 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/css.php: lines in avatar menu
+
+2008-07-01 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/river.php: Correction to get_river_entities
+
+2008-07-01 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php, views/default/page_elements/elgg_topbar.php: mini
+ avatar style and position and link
+
+2008-07-01 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/group.php: Membership functions, and introducing
+ can_write_to_container, and its hook group_permission_check. Refs #106.
+
+2008-07-01 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/reset.css: unnecessary file
+
+2008-07-01 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Limits properly propagate to the pagination views.
+
+ * mod/profile/views/default/profile/gallery.php: Sanitising the profile
+ gallery view for now
+
+2008-07-01 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php, views/default/pageshells/pageshell.php: pageshell /
+ logged out modification
+
+2008-07-01 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/search/gallery.php: Gallery view now displays 3 per row
+
+2008-07-01 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/elgg_topbar.php: further topbar tweak
+
+ * views/default/page_elements/elgg_topbar.php: topbar tweaks
+
+2008-07-01 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/account/forms/login.php,
+ views/default/account/forms/register.php,
+ views/default/account/forms/useradd.php,
+ views/default/canvas/layouts/one_column.php, views/default/css.php: login
+ front door tidied up
+
+2008-07-01 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Entity loader support for ElggGroup, refs #106
+
+ * engine/lib/group.php: Bugfix, refs #106
+
+2008-07-01 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/elgg_topbar.php: top_bar icon
+
+2008-07-01 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/manifest.xml: Licence in manifest
+
+2008-07-01 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/dashboard/index.php, mod/dashboard/manifest.xml,
+ mod/dashboard/start.php, mod/dashboard/views/default/dashboard/welcome.php:
+ No need to have the dashboard plugin. Dashboard is part of core.
+
+ * mod/profile/actions/cropicon.php, mod/profile/actions/iconupload.php,
+ mod/profile/icon.php, mod/profile/views/default/profile/icon.php: Toolbar ->
+ topbar in profile icons
+
+ * mod/profile/actions/cropicon.php, mod/profile/actions/iconupload.php,
+ mod/profile/icon.php, mod/profile/views/default/profile/icon.php: Added
+ toolbar size for the icons
+
+2008-07-01 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/group.php, engine/lib/objects.php, languages/en.php: Group
+ class, refs #106
+
+ * engine/schema/mysql.sql: Added groups, refs #106
+
+2008-07-01 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/schema/mysql.sql: Fix for the schema
+
+ * views/default/search/gallery.php: Gallery should probably only be three
+ squares wide for now.
+
+ * views/default/css.php: Small fix for gallery view users
+
+ * mod/profile/views/default/profile/gallery.php: Small fix for gallery view
+ users
+
+ * mod/profile/views/default/profile/gallery.php,
+ mod/profile/views/default/user/user.php,
+ views/default/search/gallery_listing.php, views/default/search/listing.php:
+ Gallery view for users
+
+ * views/default/css.php: CSS additions
+
+2008-07-01 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/navigation/topmenu.php: previous top menu removed - replaced
+ by new elgg_topbar view
+
+ * _graphics/avatar_mini.gif, _graphics/elgg_toolbar_logo.gif,
+ _graphics/elgg_toolbar_logout.gif, _graphics/toptoolbar_background.gif,
+ views/default/css.php, views/default/page_elements/elgg_topbar.php,
+ views/default/page_elements/header.php: topbar menu
+
+2008-07-01 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php: The $entity_guid on get_annotations can now be
+ an array.
+
+2008-07-01 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/objects.php: Added object in container search, refs #106.
+
+2008-07-01 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php: get_annotations can now optionally take an
+ array as owner_guid
+
+ * actions/login.php: Users are now logged into the dashboard.
+
+ * engine/lib/elgglib.php, views/default/navigation/gallery.php,
+ views/default/search/gallery.php: Moved navigation/gallery to search/gallery,
+ which makes more sense.
+
+2008-07-01 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/group.php: Refs #106: Group prototype class
+
+ * engine/lib/entities.php: Added site_guid to internal db fields
+
+2008-07-01 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/widgets/wrapper.php: Widgets now load after the main page
+
+2008-07-01 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/schema/mysql.sql: Refs #106: Added schema
+
+2008-06-30 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/widgets.php, views/default/canvas/layouts/widgets.php: Added
+ the ability to control widget contexts
+
+2008-06-30 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/user/makeadmin.php, languages/en.php,
+ mod/profile/views/default/profile/userdetails.php: Closes #105: Make admin
+ option http://trac.elgg.org/elgg/ticket/105
+
+ * actions/useradd.php, engine/lib/users.php, languages/en.php,
+ views/default/account/forms/useradd.php,
+ views/default/admin/user_opt/adduser.php: Added some user code - needs div
+ hiding
+
+2008-06-30 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * entities/index.php: Fixed entity page
+
+2008-06-30 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Fixed minor cache counting issue
+
+ * engine/lib/plugins.php, languages/en.php: Refs #102 - Speculative fix
+
+2008-06-30 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * entities/index.php, views/default/widgets/wrapper.php: Partial fix for
+ constantly-shrinking widgets bug.
+
+2008-06-29 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/footer_logo.gif, views/default/css.php,
+ views/default/page_elements/footer.php: page footer added and msg div fixed
+ for IE
+
+ * _graphics/page_back_linen.gif, _graphics/page_back_linen_shadow.gif,
+ views/default/css.php: new page style, new floating msg box, other fixes &
+ cleanup
+
+2008-06-29 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/listing.php: changed the friends list
+ view order
+
+2008-06-28 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: more listings items cleanup
+
+ * views/default/css.php: fixed several listing item spacing issues
+
+ * views/default/canvas/layouts/widgets.php, views/default/css.php: cancel
+ button added to widget gallery
+
+2008-06-28 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/listing.php: added user status to the
+ friends view
+
+2008-06-27 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * search/index.php: Sanitising search
+
+ * engine/lib/widgets.php: Fixed widget saving
+
+2008-06-27 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * javascript/initialise_elgg.js, views/default/canvas/layouts/widgets.php,
+ views/default/css.php: new widget gallery
+
+2008-06-27 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/database.php:
+
+ * engine/lib/entities.php: Caching (most) subtype queries, drastically
+ reduces database queries in most use cases, refs #101
+
+2008-06-27 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Introducing friendly_title
+
+ * languages/en.php: Some more translations for comments
+
+2008-06-27 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/metastrings.php:
+
+ * engine/lib/metastrings.php: Metastrings now keeps a record of strings it
+ knows aren't present and so removes the need to futher look for them. Refs
+ #101
+
+2008-06-27 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Bug fix for previous.
+
+ * engine/lib/elgglib.php: Introducing elgg_count_comments
+
+ * views/default/annotation/generic_comment.php,
+ views/default/comments/forms/edit.php, views/default/css.php: Tweaks to
+ generic comment CSS
+
+ * actions/comments/add.php, actions/comments/delete.php,
+ engine/lib/elgglib.php, languages/en.php,
+ views/default/annotation/generic_comment.php,
+ views/default/comments/forms/edit.php: Brought generic comments into Elgg
+ core
+
+2008-06-27 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/database.php: Using persistent db connections. This should
+ speed up pages with numerous small DB calls. Please report any issues asap.
+ Refs #101
+
+ * engine/lib/metastrings.php: Minor textual changes
+
+ * engine/lib/users.php: Added mapping to cache username => guid & code =>
+ guid. Refs #101.
+
+2008-06-27 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/icon.php: Icon menus now work when
+ you're logged out.
+
+2008-06-27 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/database.php: Removed explains since these weren't much use
+
+ * engine/lib/install.php: Db installed flag on config, Refs #101
+
+ * engine/lib/elgglib.php: Caching datalists. Refs #101
+
+2008-06-27 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: Fixed the contextual nubbin on search indices
+ (really)
+
+ * views/default/css.php: Fixed the contextual nubbin on search indices
+
+2008-06-27 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Short circuited query if could not possibly
+ return a value. Refs #101
+
+2008-06-27 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: Forced search result icon sizes to be 40px
+
+2008-06-27 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/database.php: Refs #101 - DB Profiling in debug mode
+ (recommended usage means putting $CONFIG->debug = true in settings.php)
+
+2008-06-27 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * search/index.php: Search now sets context appropriately
+
+2008-06-27 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/languages.php: Removed debug warning
+
+2008-06-27 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, engine/lib/entities.php, engine/lib/metadata.php,
+ engine/lib/relationships.php, engine/lib/sites.php, engine/lib/users.php,
+ friends/index.php, friends/of.php, search/index.php: Added a 'display full
+ view' parameter to all of the listings functions
+
+ * engine/lib/elgglib.php, mod/profile/views/default/profile/listing.php,
+ views/default/search/listing.php: Introducing elgg_view_listing
+
+ * mod/profile/views/default/profile/icon.php: Minor fix to the icon code
+
+ * mod/profile/views/default/profile/icon.php: Fix to icon links, so they
+ display actions too
+
+ * mod/profile/views/default/profile/listing.php, views/default/css.php:
+ Added search listing styles
+
+ * mod/profile/views/default/profile/icon.php: Fix to previous
+
+ * mod/profile/views/default/profile/icon.php: Further contextual menu work
+
+ * mod/profile/javascript.php, mod/profile/profile.js,
+ mod/profile/views/default/profile/icon.php,
+ mod/profile/views/default/profile/javascript.php,
+ mod/profile/views/default/profile/metatags.php,
+ views/default/navigation/topmenu.php: Initial inclusion of profile icon
+ navigation
+
+2008-06-27 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/notification.php: Fixes #100 - User not having any notification
+ method no longer a hard error.
+
+2008-06-27 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/languages/en.php: tweak to profile language
+
+2008-06-27 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/avatar_menu_arrow.gif, _graphics/avatar_menu_arrow_hover.gif,
+ _graphics/avatar_menu_arrow_open.gif, mod/profile/profile.js,
+ mod/profile/views/default/profile/css.php, views/default/css.php: avatar
+ contextual menus
+
+2008-06-27 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/metastrings.php: Refs #86 - Better debug
+
+ * engine/lib/metastrings.php: Closes #86
+
+2008-06-26 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php, .../notifications/settings/usersettings.php,
+ views/default/settings/system.php, views/default/user/settings/language.php:
+ Closes #98
+
+ * views/default/input/pulldown.php: Pulldown menu view now supports passing
+ values as well as options as an associative array "value" => "option text"
+ called $vars['options_values']
+
+2008-06-26 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/css.php,
+ mod/profile/views/default/profile/listing.php,
+ mod/profile/views/default/user/user.php: Improved profile listings
+
+2008-06-26 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/languages.php: Added get_installed_translations() to return an
+ array of available translations together with native language translation of
+ the text. Refs #98
+
+ * languages/en.php: Added ISo-639 language codes, refs #98
+
+2008-06-26 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: Tweaked the title CSS now that it's going to appear
+ inline within canvases.
+
+ * engine/lib/river.php: Widget river items are now of the form
+ river/widget/handler/event.
+
+2008-06-26 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/user/resetpassword.php, engine/lib/admin.php,
+ engine/lib/users.php, languages/en.php,
+ mod/profile/views/default/profile/userdetails.php: Closes #16:
+ Administration: Reset password functionality on user admin screen
+ http://trac.elgg.org/elgg/ticket/16
+
+2008-06-26 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/email/save.php, .../notifications/settings/usersettings/save.php,
+ actions/user/language.php, actions/user/name.php, actions/user/password.php,
+ actions/usersettings/save.php, engine/lib/notification.php,
+ engine/lib/users.php, settings/user/index.php,
+ .../notifications/settings/usersettings.php,
+ views/default/user/settings/email.php,
+ views/default/user/settings/language.php,
+ views/default/user/settings/name.php,
+ views/default/user/settings/password.php,
+ views/default/usersettings/form.php: Unified user settings form
+
+2008-06-26 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/account/forms/register.php: Closes #96: Administration: Add
+ user (with optional admin flag) http://trac.elgg.org/elgg/ticket/96
+
+ * views/default/admin/user_opt/adduser.php: Refs #96: Administration: Add
+ user (with optional admin flag) http://trac.elgg.org/elgg/ticket/96
+
+ * actions/register.php, languages/en.php,
+ views/default/account/forms/register.php, views/default/admin/user.php,
+ views/default/admin/user_opt/adduser.php: Refs #96: Administration: Add user
+ (with optional admin flag) http://trac.elgg.org/elgg/ticket/96
+
+ * actions/user/language.php, engine/lib/languages.php, engine/lib/users.php,
+ languages/en.php, views/default/user/settings/language.php: Closes #92:
+ Settings: Set user language http://trac.elgg.org/elgg/ticket/92
+
+2008-06-26 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/input/checkboxes.php: Checkboxes now work happily with
+ arrays.
+
+2008-06-26 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/user/name.php, actions/user/password.php, engine/lib/sessions.php,
+ engine/lib/users.php, languages/en.php,
+ views/default/user/settings/password.php: Fixes #91 and #97
+
+ * actions/email/save.php, actions/user/name.php,
+ engine/lib/notification.php, engine/lib/users.php, languages/en.php,
+ views/default/notifications/settings/email.php,
+ views/default/user/settings/email.php, views/default/user/settings/name.php:
+ Closes #90: Settings: Change name http://trac.elgg.org/elgg/ticket/90
+
+2008-06-26 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * entities/index.php: Layout update for the single entity view.
+
+2008-06-26 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php: Fixes #95 - Now keying off system log entries so
+ that whenever a user does something that triggers an event they are boosted.
+
+ * views/default/admin/statistics_opt/basic.php: Fixes #94
+
+ * actions/email/save.php, engine/lib/notification.php, languages/en.php,
+ views/default/notifications/settings/email.php: Closes #89: Provide
+ functionality for a user to set their email address in user settings
+ http://trac.elgg.org/elgg/ticket/89
+
+2008-06-25 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/email/confirm.php, actions/register.php,
+ engine/lib/notification.php, engine/lib/sites.php, engine/lib/users.php,
+ languages/en.php: Closes #79: Email confirmation on registration & email
+ change http://trac.elgg.org/elgg/ticket/79
+
+2008-06-25 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: river icon additions
+
+ * javascript/initialise_elgg.js, views/default/css.php: widget gallery
+ tooltip positioning and layer issue fixed
+
+2008-06-25 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/metadata.php, search/index.php: Search and metadata functions
+ now support multiple user GUIDs
+
+2008-06-25 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/email/confirm.php, engine/lib/users.php, languages/en.php: Refs
+ #79
+
+2008-06-25 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/tags.php: Small ownership tweak to get_tags
+
+ * search/index.php: The search page now takes more options.
+
+2008-06-25 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/shout_speech_bubble.gif: shouts bubble
+
+2008-06-25 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/tags.php: get_tags can now take an array as owner_guid.
+
+ * engine/lib/filestore.php: Fixes for filestore.
+
+ * engine/lib/filestore.php: Added grabFile() to the filestore, for much more
+ efficient file reading.
+
+ * engine/lib/river.php, engine/lib/system_log.php: Made the friends river
+ entities functions loads more efficient.
+
+2008-06-25 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php, engine/lib/metadata.php: Fixes #87 & #88
+
+ * engine/lib/notification.php, engine/lib/relationships.php,
+ languages/en.php: Refs #78: Email notifications on friending, comments
+ http://trac.elgg.org/elgg/ticket/78
+
+2008-06-25 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/river.php, views/default/river/wrapper.php: The river now
+ passes entities to each river view as $vars['entity']
+
+ * engine/lib/annotations.php: Adding an annotation triggers an 'annotate'
+ event
+
+2008-06-25 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/spotlight_back.gif, _graphics/temp_spotlight.gif,
+ views/default/css.php, views/default/spotlight/default.php: default spotlight
+
+2008-06-25 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/notification.php, engine/lib/sites.php, languages/en.php: Fixes
+ #84: Method for retrieving preferences for a user and notifying accordingly
+ http://trac.elgg.org/elgg/ticket/84
+
+2008-06-25 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: updated staus box
+
+ * views/default/css.php: moved message styles into plugin
+
+2008-06-24 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: messaging styles
+
+2008-06-24 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/filestore.php: Removed the circular delete mechanism that was
+ plaguing ElggFile
+
+2008-06-24 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/ajax/loader.php: centred loader gif
+
+2008-06-24 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/database.php: Caching the show_db_tables function
+
+2008-06-24 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/userdetails.php, views/default/css.php:
+ profile box fixes
+
+2008-06-24 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/filestore.php: Serious memory optimisation for the photo resize
+ functions
+
+2008-06-24 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/odd/canvas/default.php, views/odd/object/default.php,
+ views/odd/user/default.php: Refs #82 - oops... forgot to add these...
+
+ * .../notifications/settings/usersettings/save.php,
+ engine/lib/notification.php, languages/en.php,
+ .../notifications/settings/usersettings.php: Closes #83 - API & Interface for
+ selecting notification methods
+
+ * actions/plugins/settings/save.php, actions/plugins/usersettings/save.php:
+ Added gatekeeper
+
+2008-06-24 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/objects.php, engine/lib/sites.php: Removing more notices.
+
+ * engine/lib/entities.php: Removing an annoying notice
+
+ * engine/lib/elgglib.php: Minor fix to elgg_view_entity where ElggEntities
+ are subclassed
+
+2008-06-24 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/edit.php: Fixes #69 - Clicking on profile "edit" causes crash.
+ I have retrieved the user again from $_SESSION['id'] since
+ $_SESSION['user'] is not being set. This may point to a larger problem since
+ the $_SESSION looks far from complete.
+
+2008-06-24 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/river.php: Fix for previous river functionality
+
+ * engine/lib/river.php: Minor formatting fix
+
+ * views/default/admin/plugins.php: Update plugins list so 50 display on a
+ page
+
+ * engine/lib/river.php: A fix to the river function.
+
+2008-06-24 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/export.php, views/odd/export/entity.php,
+ views/odd/export/metadata.php, views/odd/export/relationship.php,
+ views/odd/pageshells/pageshell.php: Closes #82: OpenDD feeds in the same vein
+ as RSS http://trac.elgg.org/elgg/ticket/82
+
+2008-06-24 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/widgets/editwrapper.php: Fix to edit wrapper saving
+
+ * views/default/pageshells/pageshell.php: Removing title from pageshell
+ outright
+
+ * views/default/page_elements/title.php,
+ views/default/widgets/editwrapper.php: Introducing elgg_view_title
+
+ * engine/lib/elgglib.php: Introducing elgg_view_title
+
+2008-06-24 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: updated
+
+2008-06-24 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/widgets/save.php, views/default/widgets/editwrapper.php: Save
+ widget improvements.
+
+2008-06-24 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/css.php,
+ mod/profile/views/default/profile/userdetails.php,
+ mod/profile/views/default/user/user.php,
+ .../canvas/layouts/narrow_right_sidebar.php,
+ views/default/canvas/layouts/two_column.php,
+ views/default/canvas/layouts/widgets.php, views/default/css.php,
+ views/default/pageshells/pageshell.php: updated profile box
+
+2008-06-24 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/plugins/usersettings/save.php, engine/lib/plugins.php,
+ languages/en.php, settings/plugins/index.php,
+ views/default/object/plugin.php, views/default/usersettings/plugins.php,
+ views/default/usersettings/plugins_opt/plugin.php: Refs #76: User settings
+ page (to Elgg Classic standard)
+
+2008-06-24 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/river.php: River views now run off subtypes
+
+ * views/default/ajax/loader.php: Introducing the AJAX loader
+
+ * _graphics/ajax-loader.gif, _graphics/ajax_loader.gif,
+ views/default/widgets/editwrapper.php, views/default/widgets/wrapper.php:
+ Widgets now reload properly
+
+2008-06-24 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/ajax-loader.gif: ajax loader gif
+
+2008-06-24 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/statistics.php, languages/en.php,
+ .../default/usersettings/statistics_opt/online.php: Refs #76: User settings
+ page (to Elgg Classic standard)
+
+2008-06-24 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/actions/cropicon.php,
+ views/default/canvas/layouts/widgets.php: Widget fixes
+
+2008-06-23 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/actions/cropicon.php: Added mission crop icon action
+
+2008-06-23 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: container box fixes
+
+2008-06-23 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/userdetails.php: No need to duplicate
+ the user's name.
+
+ * engine/lib/filestore.php, mod/profile/actions/iconupload.php,
+ mod/profile/languages/en.php, mod/profile/start.php,
+ mod/profile/views/default/profile/editicon.php: Image cropping works!
+
+2008-06-23 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/userdetails.php: rearranged the main
+ profile area
+
+ * mod/profile/views/default/profile/userdetails.php: moved the about me
+ below the other profile info
+
+2008-06-23 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php, views/default/widgets/editwrapper.php: Some tweaks to
+ the 'saving' box
+
+2008-06-23 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/statistics.php, languages/en.php, settings/index.php,
+ settings/plugins/index.php, settings/statistics/index.php,
+ settings/user/index.php, usersettings/index.php,
+ usersettings/plugins/index.php, usersettings/statistics/index.php,
+ usersettings/user/index.php, views/default/usersettings/main_opt/plugins.php,
+ views/default/usersettings/main_opt/statistics.php,
+ views/default/usersettings/main_opt/user.php,
+ views/default/usersettings/plugins.php,
+ .../usersettings/statistics_opt/numentities.php: Refs #76: User settings page
+ (to Elgg Classic standard). Committing some work before shutting down for the
+ day.
+
+2008-06-23 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/editicon.php: small bug fix on icon
+ cropper
+
+2008-06-23 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/dummy_river_icon.gif, views/default/css.php: river updates
+
+2008-06-23 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/river/dashboard.php: Removed extra divs.
+
+2008-06-23 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/editicon.php: more icon cropper tweaks,
+ form added
+
+2008-06-23 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * entities/index.php, views/default/widgets/editwrapper.php,
+ views/default/widgets/wrapper.php: Widgets now save on a per-widget basis.
+ TODO: get the collapsing widgets to work once they've saved ..
+
+2008-06-23 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/plugins.php:
+
+2008-06-23 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/editicon.php: coordinates in for the
+ icon cropper
+
+2008-06-23 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/canvas/layouts/widgets.php: Widgets are now loaded as
+ separate JS scripts
+
+ * engine/lib/elgglib.php, views/js/object/default.php,
+ views/js/pageshells/pageshell.php, views/js/user/default.php: You can now get
+ a Javascript version of any entity
+
+2008-06-23 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/plugins.php, engine/lib/usersettings.php, engine/start.php,
+ languages/en.php, usersettings/index.php, usersettings/plugins/index.php,
+ usersettings/statistics/index.php, usersettings/user/index.php,
+ views/default/admin/main_opt/plugins.php,
+ views/default/admin/main_opt/site.php,
+ views/default/admin/main_opt/statistics.php,
+ views/default/admin/main_opt/user.php, views/default/object/plugin.php,
+ views/default/usersettings/main.php,
+ views/default/usersettings/main_opt/plugins.php,
+ views/default/usersettings/main_opt/statistics.php,
+ views/default/usersettings/main_opt/user.php,
+ views/default/usersettings/plugins.php,
+ views/default/usersettings/plugins_opt/plugin.php,
+ views/default/usersettings/statistics.php,
+ views/default/usersettings/user.php: Refs #76: User settings page (to Elgg
+ Classic standard). Committing some work before shutting down for the day.
+
+2008-06-23 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/editicon.php: added coordinates to the
+ icon cropper
+
+ * .../views/default/profile/hoverover/actions.php,
+ .../views/default/profile/hoverover/links.php,
+ mod/profile/views/default/profile/menu/actions.php,
+ mod/profile/views/default/profile/menu/links.php,
+ .../views/default/profile/menu/linksownpage.php,
+ mod/profile/views/default/profile/profilelinks.php: new profile links system.
+
+2008-06-23 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/canvas/layouts/widgets.php, views/default/css.php: css
+ updates
+
+2008-06-23 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/actions/iconupload.php,
+ .../views/default/js/jquery.imgareaselect-0.4.2.js,
+ .../default/js/jquery.imgareaselect-0.4.2.min.js,
+ mod/profile/views/default/profile/editicon.php: beginnings of the icon
+ cropper tool
+
+2008-06-23 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * settings/index.php, settings/plugins/index.php: Refs #76: User settings
+ page (to Elgg Classic standard)
+
+ * settings/plugins/index.php: Refs #76: User settings page (to Elgg Classic
+ standard)
+
+2008-06-23 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/actions/iconupload.php: Fix to icon upload
+
+ * views/default/css.php, views/default/page_elements/header.php,
+ views/default/pageshells/pageshell.php: Page title is now displayed at the
+ top of the canvas.
+
+2008-06-23 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * settings/index.php:
+
+2008-06-23 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/icon.php, mod/profile/views/default/profile/icon.php: Added
+ master icon size (part 2)
+
+2008-06-23 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/user/ban.php, actions/admin/user/delete.php: Forwards to
+ http_referer
+
+2008-06-23 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/actions/iconupload.php: Added master icon size
+
+2008-06-23 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/plugins/disable.php, actions/admin/plugins/enable.php:
+ Forwards to http_referer
+
+ * views/default/admin/plugins.php: Pagination on admin page
+
+ * engine/handlers/cron_handler.php, htaccess_dist: Closes #77 - Cron
+ endpoint and event
+
+ * languages/en.php: Refs #75
+
+ * views/default/admin/statistics_opt/basic.php,
+ views/default/admin/statistics_opt/online.php: Refs #75
+
+2008-06-23 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/navigation/pagination.php: Update for pagination, to allow
+ it to properly take a word other than 'offset' as the word to work from.
+
+2008-06-23 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/navigation/pagination.php: greater than, less than
+ pagination symbol changed
+
+2008-06-23 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/messages/messages/list.php: system messages now fade out
+ after 3 seconds.
+
+2008-06-22 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php, engine/lib/elgglib.php,
+ views/default/navigation/pagination.php: Introducing the annotation listing
+ functions.
+
+ * engine/lib/elgglib.php, engine/lib/metastrings.php: Introducing
+ elgg_view_annotation
+
+2008-06-22 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/profilelinks.php,
+ mod/profile/views/default/profile/userdetails.php: added a new profile links
+ view
+
+2008-06-21 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/systemsettings/install.php: Fixes #72
+
+2008-06-21 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php, views/default/spotlight/default.php: tweaks to the
+ spotlight
+
+ * mod/profile/views/default/profile/userdetails.php: a further temp tweak to
+ the profile layout
+
+ * mod/profile/views/default/profile/userdetails.php,
+ views/default/canvas/layouts/widgets.php: a couple of small, temp, profile
+ layout tweaks.
+
+2008-06-21 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/start.php: Plugin init only called on sanitised installs where
+ installation is complete.
+
+2008-06-20 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php, views/default/page_elements/spotlight.php: Improvements
+ to spotlight
+
+ * views/default/page_elements/spotlight.php,
+ views/default/spotlight/default.php: Plugins can set their own context
+
+2008-06-20 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/plugins.php: Added licence example
+
+2008-06-20 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/actions/edit.php, mod/profile/edit.php,
+ mod/profile/views/default/profile/edit.php: Fixed profile, and allowed admins
+ to edit other profiles
+
+2008-06-20 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/site/update_basic.php: Fixes #71
+
+ * actions/admin/user/ban.php, actions/admin/user/delete.php: Additional
+ fixes to #70
+
+2008-06-20 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/plugins/disable.php, actions/admin/plugins/enable.php:
+ Changed the engine reference in the action
+
+2008-06-20 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/plugins.php:
+
+ * actions/plugins/settings/save.php, engine/lib/plugins.php,
+ languages/en.php, views/default/admin/plugins_opt/plugin.php,
+ views/default/object/plugin.php: Closes #66: Per site plugin settings
+ configuration panel. Use the same technique as edit pages on widgets, i.e.
+ 1) Create a new view in your plugins view/default called
+ settings/PLUGINNAME/edit Where PLUGINNAME is the plugin directory, eg
+ "river" or "profile". 2) Place your edit code in edit.php, fields should
+ save to params[fieldname]. 3) The view will be passed $vars['entity'] which
+ holds any configuration values already set in the metadata. Note. Settings
+ are PER SITE.
+
+ * .../views/default/widgets/river_widget/edit.php,
+ .../default/widgets/river_widget_friends/edit.php: Using a different test to
+ handle metadata better
+
+ * languages/en.php, mod/river/manifest.xml,
+ views/default/admin/plugins_opt/plugin.php: Closes #67 : Added new displayed
+ field "licence"
+
+2008-06-20 misja <misja@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/dashboard/manifest.xml, mod/profile/manifest.xml: Adding manifest
+ files to plugins
+
+2008-06-20 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/plugins/disable.php, actions/admin/plugins/enable.php,
+ admin/plugins/index.php, engine/lib/plugins.php, languages/en.php,
+ views/default/admin/plugins.php, views/default/admin/plugins_opt/plugin.php,
+ views/default/object/plugin.php: Closes #20: Plugin management and config
+ panel http://trac.elgg.org/elgg/ticket/20
+
+ * actions/admin/site/update_basic.php: Added admin gatekeeper
+
+2008-06-20 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php, mod/profile/edit.php,
+ views/default/canvas/layouts/widgets.php: Widget gallery updates -
+ internationalised and more
+
+2008-06-20 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/plugins.php: Further fixes #59
+
+ * mod/river/languages/en.php, mod/river/manifest.xml, mod/river/start.php:
+ Using new manifest code (via manifest.xml)
+
+ * engine/lib/plugins.php: Bypass plugin loading disable code
+
+ * engine/lib/elgglib.php, engine/lib/plugins.php, engine/start.php: Closes
+ #60: Enable/disable plugins on a site by site basis
+ http://trac.elgg.org/elgg/ticket/60
+
+ * engine/lib/elgglib.php: Bugfixes on privileged code execution.
+
+ * engine/lib/database.php: Removed database gatekeepers to avoid chicken and
+ egg problems with privileged codeblock execution, and because it is too
+ problematic.
+
+ * engine/lib/plugins.php: Actually closes #60: Enable/disable plugins on a
+ site by site basis http://trac.elgg.org/elgg/ticket/60
+
+ * engine/lib/metadata.php, engine/lib/plugins.php: Closes #60:
+ Enable/disable plugins on a site by site basis
+
+2008-06-20 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/database.php: update_data now returns true on a successful
+ update.
+
+ * mod/profile/views/default/profile/userdetails.php: Let's use a slightly
+ smaller image on the main profile page ..
+
+ * mod/profile/graphics/defaultlarge.jpg,
+ mod/profile/graphics/defaultmedium.jpg,
+ mod/profile/graphics/defaultsmall.jpg, mod/profile/graphics/defaulttiny.jpg:
+ New default profile pics
+
+2008-06-20 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/plugins.php: Refs #61 - Added ability to find settings for
+ plugins other than the one you are in.
+
+ * engine/lib/plugins.php: Closes #61: Enable plugins to store site specific
+ configurations
+
+2008-06-19 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, views/default/canvas/default.php,
+ views/default/page_elements/header.php, views/foaf/pageshells/pageshell.php,
+ views/rss/canvas/default.php, views/rss/object/default.php,
+ views/rss/pageshells/pageshell.php, views/rss/user/default.php: Automatic RSS
+ feeds!
+
+2008-06-19 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/database.php: Re-enabled database gatekeepers, please report
+ problems. Refs #3, #45
+
+2008-06-19 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/widgettest/start.php, .../views/default/widgets/widgettest/edit.php,
+ .../views/default/widgets/widgettest/view.php: Removing widgettest, which has
+ done its job.
+
+ * mod/river/languages/en.php, mod/river/start.php,
+ .../views/default/widgets/river_widget/view.php,
+ .../default/widgets/river_widget_friends/view.php,
+ views/default/widgets/wrapper.php: Put titles back in their correct place for
+ widgets.
+
+ * engine/lib/system_log.php: System_log no longer adds double entries.
+
+ * engine/lib/river.php, views/default/river/wrapper.php: Minor improvement
+ to previous - river items now are wrapped in a number of divs that make sense
+ according to what they refer to
+
+2008-06-19 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php, mod/river/languages/en.php,
+ .../views/default/widgets/river_widget/edit.php,
+ .../views/default/widgets/river_widget/view.php,
+ .../default/widgets/river_widget_friends/edit.php,
+ .../default/widgets/river_widget_friends/view.php: Fixes #50
+
+2008-06-19 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/river.php, .../views/default/river/ElggUser/update.php,
+ views/default/river/wrapper.php: Modified river functions to use a common
+ wrapper
+
+ * mod/profile/languages/en.php, .../views/default/river/ElggUser/update.php:
+ Profile updates now show up in the river.
+
+2008-06-19 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php:
+
+ * engine/lib/plugins.php, languages/en.php, mod/river/languages/en.php,
+ mod/river/start.php: Closes #59: Plugin manifest. See
+ register_plugin_manifest() & register_plugin_manifest_basic(). Ref #20.
+
+2008-06-19 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/profile.js, mod/profile/views/default/profile/metatags.php:
+ Removing the hoverover menu. Refs #58
+
+ * mod/profile/views/default/profile/css.php: CSS update for hoverover
+
+2008-06-19 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/statistics.php, engine/lib/users.php,
+ views/default/admin/statistics_opt/online.php: Fixes #55 : "Users online now"
+ function
+
+2008-06-19 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/navigation/topmenu.php: Wired up search
+
+ * mod/profile/views/default/profile/hoverover.php,
+ .../views/default/profile/hoverover/actions.php,
+ .../views/default/profile/hoverover/links.php: Sorting hoverover links into
+ actions and plain links
+
+ * mod/profile/views/default/profile/hoverover.php: Whoops! Replacing
+ 'bwerdmuller' with $vars['entity']->username
+
+ * mod/profile/profile.js, mod/profile/start.php,
+ mod/profile/views/default/profile/css.php,
+ mod/profile/views/default/profile/hoverover.php,
+ mod/profile/views/default/profile/icon.php,
+ mod/profile/views/default/profile/menu.php,
+ mod/profile/views/default/profile/metatags.php,
+ mod/profile/views/default/user/user.php: Added a hover-over menu, which can
+ be added to by plugins.
+
+2008-06-19 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Ref #57
+
+ * engine/lib/river.php, languages/en.php, mod/river/start.php,
+ .../views/default/widgets/river_widget/edit.php,
+ .../views/default/widgets/river_widget/view.php,
+ .../default/widgets/river_widget_friends/edit.php,
+ .../default/widgets/river_widget_friends/view.php,
+ views/default/river/dashboard.php: Fixed #50: River widgets
+ http://trac.elgg.org/elgg/ticket/50
+
+ * mod/profile/views/default/profile/userdetails.php: Fixes #56
+
+2008-06-19 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/relationships.php, friends/index.php, friends/of.php: The
+ friends pages now use listing functions; also fixed a minor bug in the
+ get_entities_from_relationship function.
+
+2008-06-19 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/river.php: *actually* fixes #48: Elgg_view_river wrapper
+ function http://trac.elgg.org/elgg/ticket/48
+
+ * engine/lib/river.php: Fixes #48: Elgg_view_river wrapper function
+ http://trac.elgg.org/elgg/ticket/48
+
+2008-06-19 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * javascript/initialise_elgg.js, views/default/canvas/layouts/widgets.php,
+ views/default/css.php: final amends to popups
+
+2008-06-19 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/schema/mysql.sql: Fixes #54 - 'Enabled' functionality needs to be
+ added to metadata, refs #53
+
+2008-06-19 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Minor change to the navigation placement on list
+ view.
+
+ * engine/schema/mysql.sql: Added 'enabled' field to annotations. Refs #51
+
+2008-06-18 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * javascript/initialise_elgg.js, views/default/canvas/layouts/widgets.php,
+ views/default/css.php: widget description popups added
+
+2008-06-18 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/configuration.php: Hopefully fixed default wwwroot. refs #51 -
+ Misja, if this works for you, could you please close the ticket?
+
+2008-06-18 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/user/ban.php, actions/admin/user/delete.php,
+ engine/lib/entities.php: Fixes #15: Ban user functionality
+
+ * engine/lib/access.php, engine/schema/mysql.sql: Fixes #12: Active variable
+ on entities table. Update db schema.
+
+2008-06-18 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * dashboard/index.php: Introducing the dashboard!
+
+ * engine/lib/entities.php, engine/lib/languages.php, engine/lib/sites.php,
+ engine/lib/users.php, engine/lib/widgets.php: Removing some error notices
+
+2008-06-18 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Speculative fix for mac install
+
+2008-06-18 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php, views/default/widgets/editwrapper.php: Better access
+ control labels.
+
+ * engine/lib/database.php: Re-commented out callpath_gatekeeper. refs #37
+
+2008-06-18 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: added default class for submit buttons
+
+2008-06-18 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/widgets/reorder.php, languages/en.php: Corrected widget panel save
+ messages.
+
+ * actions/widgets/reorder.php, engine/lib/widgets.php,
+ views/default/canvas/layouts/widgets.php, views/default/input/access.php:
+ Added widget handling.
+
+2008-06-18 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * admin/user/index.php, views/default/admin/user_opt/search.php: Minor tweak
+ to make compatible with search form
+
+ * engine/lib/sites.php: Fixes #43: Site full text search over name,
+ description and url
+
+ * engine/lib/objects.php: Fixes #42: Object full text search on description
+
+ * admin/user/index.php, engine/lib/users.php, views/default/admin/user.php:
+ Further fixes to #41 with admin panel support
+
+ * admin/user/index.php, engine/lib/users.php, engine/schema/mysql.sql: Fixes
+ #41: User full text search. See caveats in function search_for_user()
+
+2008-06-18 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, views/default/navigation/pagination.php: Interface
+ tweak when no results are found.
+
+ * views/default/canvas/layouts/widgets.php: Descriptions are now registered
+ in widgets as a hidden field.
+
+ * engine/lib/elgglib.php, engine/lib/entities.php, engine/lib/metadata.php,
+ engine/lib/relationships.php, engine/lib/sites.php, engine/lib/users.php,
+ languages/en.php, search/index.php, views/default/navigation/pagination.php:
+ Added generic listing and pagination functions
+
+2008-06-18 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/site/update_basic.php, actions/systemsettings/install.php,
+ engine/lib/elgglib.php, languages/en.php, views/default/settings/system.php:
+ Fixes #18: Set default view type in admin http://trac.elgg.org/elgg/ticket/18
+
+2008-06-18 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * javascript/initialise_elgg.js, views/default/canvas/layouts/widgets.php:
+ widget drag n drop
+
+2008-06-18 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/site/update_basic.php, actions/systemsettings/install.php,
+ engine/lib/configuration.php, languages/en.php,
+ views/default/input/checkboxes.php, views/default/settings/system.php: Fixes
+ #17 - Debug mode toggle. Introduced unset_config() which is also called
+ automatically by set_config(). Also modified the view input/checkboxes to set
+ values on the checkbox.
+
+ * actions/admin/site/update_basic.php, actions/systemsettings/install.php,
+ engine/lib/configuration.php, languages/en.php,
+ views/default/settings/system.php: Fixes #19: Default language selector
+ http://trac.elgg.org/elgg/ticket/19
+
+2008-06-18 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/account/forms/login.php,
+ views/default/account/forms/register.php, views/default/css.php: tweaked
+ login boxes n buttons
+
+2008-06-18 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/canvas/layouts/widgets.php: Added GUIDs and handlers to the
+ widget panel
+
+2008-06-17 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../canvas/layouts/narrow_right_sidebar.php, views/default/css.php:
+ updated page layout
+
+2008-06-17 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, languages/en.php: Fixes #24 - Added a funky
+ display function called friendly_time($timestamp).
+
+ * engine/start.php: Fixed #36 - CSS now works on the install page.
+
+ * engine/lib/sessions.php: isloggedin() doesn't touch the session if we're
+ not fully installed yet.
+
+2008-06-17 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * install.php: - To use main site config Marcus Povey
+
+ * install.php: CLOSED - #36: CSS broken on initial install page.
+ http://trac.elgg.org/elgg/ticket/36
+
+ * engine/lib/elgglib.php, engine/lib/input.php, engine/lib/install.php,
+ engine/settings.example.php, engine/start.php, htaccess_dist,
+ languages/en.php, views/default/messages/sanitisation/htaccess.php,
+ views/default/messages/sanitisation/settings.php,
+ views/failsafe/messages/errors/error.php,
+ views/failsafe/messages/errors/list.php,
+ views/failsafe/messages/exceptions/exception.php,
+ views/failsafe/messages/list.php,
+ views/failsafe/messages/sanitisation/htaccess.php,
+ views/failsafe/messages/sanitisation/settings.php,
+ views/failsafe/pageshells/pageshell.php: CLOSED - #34: Install process must
+ be completely graphical http://trac.elgg.org/elgg/ticket/34
+
+2008-06-17 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/database.php: Fixed #37. It turns out callpath_gatekeeper
+ worked fine; PHP 5.2 with the Zend Optimizer 3.2 does not, which was borking
+ our OSX MAMP installation. We're going to need a great big red warning box
+ for people installing on a Mac, alerting them to the fact that they'll need
+ to switch off the Optimizer.
+
+2008-06-17 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: updated css
+
+2008-06-17 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/database.php: Removed references to callpath_gatekeeper.
+
+ * engine/lib/database.php: Disabling the gatekeeper for now. Reopened #3
+
+ * engine/start.php: We need actions to work when the installation hasn't
+ been settled. Refs #3
+
+2008-06-17 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php, views/default/river/ElggRelationship/create.php,
+ views/default/river/ElggUser/login.php,
+ views/default/river/ElggUser/logout.php, views/default/river/dashboard.php,
+ views/default/river/shell.php: CLOSED - #35: Create specific river views for
+ dashboard http://trac.elgg.org/elgg/ticket/35
+
+2008-06-17 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/install.php: is_installed now returns a much more
+ representative result. Refs #3
+
+ * engine/lib/filestore.php, mod/profile/actions/iconupload.php,
+ mod/profile/languages/en.php: Fixed #33 - all profile icons except for the
+ largest size are cropped to squares. Additionally, the image resampling
+ functions now take an extra boolean parameter to specify squareness (or not).
+
+2008-06-17 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * admin/index.php, admin/plugins/index.php, admin/site/index.php,
+ admin/statistics/index.php, admin/user/index.php: pushed the admin panel
+ through the correct canvas area
+
+ * mod/apitest/index.php, mod/apitest/start.php,
+ mod/apitest/views/default/apitest/configform.php,
+ mod/apitest/views/default/apitest/main.php, mod/exporttest/index.php,
+ mod/exporttest/start.php, mod/exporttest/views/default/exporttest/main.php,
+ .../views/default/exporttest/outputxml.php, mod/guidbrowser/index.php,
+ mod/guidbrowser/languages/en.php, mod/guidbrowser/start.php,
+ .../views/default/guidbrowser/browser.php,
+ .../views/default/guidbrowser/entity.php,
+ .../views/default/guidbrowser/entity_full.php,
+ .../views/default/guidbrowser/newentity.php,
+ .../views/default/guidbrowser/prevnext.php: removed guid exporter, exporttest
+ and apitest from core and put them into the plugins folder
+
+2008-06-16 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/pageowner.php, engine/lib/plugins.php,
+ views/default/navigation/toolbox.php: Sticky menu items, but also, much more
+ intelligent context detection. Plugin authors need not bother with
+ set_context() any more - the context should be set automatically. This is
+ overruled by page handling settings, if set, which use the first element of
+ the URL to determine context. Fixes #32
+
+ * engine/lib/plugins.php: More intelligent context detection. Refs #32
+
+ * engine/lib/elgglib.php, engine/lib/plugins.php, mod/profile/start.php,
+ views/default/navigation/toolbox.php: Registers contexts for each menu item.
+ Refs #32
+
+2008-06-16 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/configuration.php: CLOSED - #30: $CONFIG is not populated from
+ elggconfig or datalists http://trac.elgg.org/elgg/ticket/30
+
+2008-06-16 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/edit.php,
+ mod/profile/views/default/profile/editicon.php,
+ mod/profile/views/default/profile/userdetails.php: updated profile interface
+
+ * views/default/css.php: updated css
+
+2008-06-16 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/schema/mysql.sql: CLOSED - #26: Lengthing metadata fields
+ http://trac.elgg.org/elgg/ticket/26
+
+2008-06-16 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../canvas/layouts/narrow_right_sidebar.php,
+ views/default/canvas/layouts/one_column.php,
+ views/default/canvas/layouts/two_column.php,
+ views/default/canvas/layouts/widgets.php: new canvas area added
+
+2008-06-16 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/metadata.php: CLOSED - #5: Boolean metadata values
+ http://trac.elgg.org/elgg/ticket/5
+
+ * engine/lib/xml-rpc.php: - Minor tweak to exception report. Marcus Povey
+
+ * engine/handlers/xml-rpc_handler.php, engine/lib/xml-rpc.php,
+ htaccess_dist, languages/en.php, views/xml/xml-rpc/output.php: CLOSED - #14:
+ XML-RPC handler http://trac.elgg.org/elgg/ticket/14
+
+2008-06-16 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * javascript/initialise_elgg.js: updated interface js to fix submit button
+ bug
+
+2008-06-16 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/xml/pageshells/pageshell.php: Added Content-Length to XML pageshell
+ for compatibility with most XML based formats.
+
+ * engine/lib/sessions.php: CLOSED - #27: Standard login system to go through
+ PAM http://trac.elgg.org/elgg/ticket/27
+
+2008-06-16 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * search/index.php: Search once again displays results. Fixes #28
+
+ * views/default/widgets/wrapper.php: Widget edit controls now only appear if
+ you can edit the widget in question.
+
+2008-06-15 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/widgets/wrapper.php: small tweak to the widget wrapper
+
+2008-06-13 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/icon_customise_drag.gif, _graphics/icon_customise_info.gif,
+ _graphics/icon_customise_remove.gif, javascript/initialise_elgg.js,
+ .../jquery/jquery-ui-personalized-1.5.packed.js,
+ views/default/canvas/layouts/widgets.php, views/default/css.php,
+ views/default/navigation/toolbox.php, views/default/page_elements/header.php:
+ updated and new stuff pertaining to the customise panel, new jquery also
+
+2008-06-13 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/userdetails.php:
+
+ * views/default/admin/statistics_opt/basic.php,
+ views/default/admin/statistics_opt/numentities.php: - Fixed basic statistics
+ Marcus Povey
+
+ * actions/admin/user/ban.php:
+
+2008-06-13 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: added $order to docs
+
+2008-06-13 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Fixed typo
+
+2008-06-13 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php, engine/lib/entities.php: getAnnotations now
+ has an extra param $order
+
+2008-06-13 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/metadata.php: Metadata now inherits its parent entity's
+ permissions
+
+ * engine/lib/widgets.php: using_widgets();
+
+ * views/default/input/access.php, views/default/widgets/editwrapper.php:
+ Added access controls to widgets and fixed the access control input
+
+2008-06-13 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/user/ban.php, actions/admin/user/delete.php,
+ languages/en.php, mod/profile/views/default/profile/userdetails.php,
+ views/default/admin/user.php: ASSIGNED - # 2: Administration panel
+ http://trac.elgg.org/elgg/ticket/2 - Added ban template and delete
+
+2008-06-13 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/objects.php, engine/lib/sites.php, engine/lib/users.php: Fixed
+ update/insert issue on all top-level entities
+
+ * views/default/canvas/layouts/widgets.php: Added the stub for Pete's widget
+ reorderer
+
+ * engine/lib/widgets.php: Widget fix
+
+2008-06-13 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * admin/user/index.php: - Some thoughts Marcus Povey
+
+ * engine/lib/database.php, engine/lib/entities.php, languages/en.php,
+ .../views/default/guidbrowser/entity_full.php: Marcus Povey: CLOSED - # 9:
+ FilePluginFile not found http://trac.elgg.org/ticket/9
+
+ * admin/user/index.php, languages/en.php, views/default/admin/site.php,
+ views/default/admin/statistics_opt/online.php, views/default/admin/user.php,
+ views/default/admin/user_opt/search.php: - User search box Marcus Povey
+
+2008-06-12 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/admin.php, engine/lib/statistics.php,
+ views/default/admin/statistics.php,
+ views/default/admin/statistics_opt/basic.php,
+ views/default/admin/statistics_opt/numentities.php,
+ views/default/admin/statistics_opt/online.php: - Moved statistics to their
+ own component views. Yay. Marcus Povey
+
+2008-06-12 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/apitest/index.php, mod/exporttest/index.php,
+ mod/guidbrowser/index.php: put remaining core plugins through the canvas
+ views
+
+ * mod/profile/edit.php, mod/profile/editicon.php: piped remaining profile
+ pages through the canvas system
+
+ * views/default/editmenu.php, views/default/pageshell.php: removing some old
+ views
+
+2008-06-12 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/widgets/add.php, actions/widgets/save.php, engine/lib/widgets.php,
+ mod/profile/index.php, mod/profile/start.php, mod/widgettest/start.php,
+ .../views/default/widgets/widgettest/edit.php,
+ .../views/default/widgets/widgettest/view.php,
+ views/default/canvas/layouts/widgets.php, views/default/widgets/wrapper.php:
+ Widgets, including a test widget plugin
+
+ * views/default/canvas/layouts/widgets.php: The widget canvas layout now
+ automatically grabs widgets.
+
+ * engine/lib/elgglib.php: We only have one pageshell.
+
+ * engine/lib/widgets.php: Extra helpful widgets functions
+
+ * actions/widgets/save.php, engine/lib/widgets.php, languages/en.php,
+ views/default/widgets/editwrapper.php: Widget API changes, as well as edit
+ and action infrastructure
+
+2008-06-12 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/statistics.php:
+
+2008-06-12 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/object/widget.php: Added a simple widget alias so widgets
+ display automatically.
+
+ * views/default/canvas/layouts/one_column.php,
+ views/default/canvas/layouts/two_column.php,
+ views/default/canvas/layouts/widgets.php,
+ views/default/widgets/editwrapper.php, views/default/widgets/wrapper.php:
+ Widget wrapper, widget views
+
+2008-06-12 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/pageshells/pageshell.php: logic for not displaying toolbar
+ when non-logged
+
+ * views/default/welcome/logged_in.php: updated welcome pages
+
+ * views/default/page_elements/spotlight.php: new view for page spotlight
+
+ * views/default/welcome/logged_out.php: toolbar switched off for non-logged
+ users
+
+ * _graphics/skyscraper.gif: placeholder skyscaper ad for non logged-in pages
+
+ * views/default/canvas/layouts/one_column.php,
+ views/default/canvas/layouts/two_column.php, views/default/css.php,
+ views/default/pageshells/pageshell.php: new layout using canvas view
+
+2008-06-12 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/relationships.php: Further documentation fixes.
+
+ * engine/lib/entities.php: Some extra entity documentation
+
+2008-06-12 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/admin.php, engine/lib/statistics.php,
+ views/default/admin/site.php, views/default/admin/statistics.php: Marcus
+ Povey <marcus@dushka.co.uk> * Added stub for statistics * Added stub
+ statistics library
+
+2008-06-12 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/widgets.php: Added use_widgets function to register a context
+ for widget use.
+
+ * engine/lib/widgets.php: Added widgets library to core.
+
+2008-06-12 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/pageshells/pageshell_loggedout.php,
+ views/default/pageshells/pageshell_sidebar.php: removed old pageshells
+
+2008-06-11 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/admin.php, engine/lib/entities.php: Edit permissions changes
+ for admins
+
+2008-06-11 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * javascript/initialise_elgg.js: new subdirectory added to house the init js
+ for the page - feel free to move elsewhere
+
+ * views/default/css.php, views/default/navigation/toolbox.php,
+ views/default/navigation/topmenu.php, views/default/page_elements/footer.php,
+ views/default/page_elements/header.php,
+ views/default/pageshells/pageshell.php: latest interface stuff
+
+ * _graphics/footer_back.gif, _graphics/spacer.gif,
+ _graphics/temp_spotlight.gif: new images added
+
+ * _graphics/pagebackground.gif, _graphics/pagebackground.jpg: old images
+ removed
+
+2008-06-11 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/site/update_basic.php: Marcus Povey <marcus@dushka.co.uk> *
+ Removed debug
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Default of
+ can_edit_entity trigger plugin hook set to true.
+
+ * actions/admin/site/update_basic.php, engine/lib/admin.php,
+ engine/lib/entities.php, engine/lib/sites.php, languages/en.php,
+ views/default/admin/site.php: Marcus Povey <marcus@dushka.co.uk> * Basic site
+ admin
+
+ * engine/lib/database.php: Marcus Povey <marcus@dushka.co.uk> * All queries
+ echoed in debug mode
+
+ * views/default/admin/plugins.php: Marcus Povey <marcus@dushka.co.uk> *
+ Comments
+
+ * engine/lib/admin.php: Marcus Povey <marcus@dushka.co.uk> * Documentation
+
+ * admin/index.php, admin/plugins/index.php, admin/site/index.php,
+ admin/user/index.php, engine/lib/admin.php, engine/lib/elgglib.php,
+ languages/en.php, views/default/admin/main.php,
+ views/default/admin/main_opt/plugins.php,
+ views/default/admin/main_opt/site.php, views/default/admin/main_opt/user.php,
+ views/default/admin/plugins.php, views/default/admin/site.php,
+ views/default/admin/user.php: Marcus Povey <marcus@dushka.co.uk> * Initial
+ administration panel
+
+ * engine/lib/admin.php, engine/lib/elgglib.php:
+
+ * engine/lib/sessions.php: Marcus Povey <marcus@dushka.co.uk> * actions with
+ admin only support
+
+ * engine/lib/actions.php: Marcus Povey <marcus@dushka.co.uk> * actions with
+ admin only support
+
+ * admin/index.php, admin/plugins/index.php, admin/settings/index.php,
+ admin/users/index.php, engine/lib/admin.php: Marcus Povey
+ <marcus@dushka.co.uk> * Starting admin and relocating to the garden...
+
+2008-06-11 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/actions/iconupload.php, mod/profile/icon.php,
+ mod/profile/views/default/profile/icon.php: Fixed icon cache issue.
+
+2008-06-11 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/sessions.php: Marcus Povey <marcus@dushka.co.uk> * Introducing
+ admin_gatekeeper()
+
+2008-06-10 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/systemsettings/install.php, languages/en.php: Marcus Povey
+ <marcus@dushka.co.uk> * Debug added to site installation
+
+ * engine/lib/database.php: Marcus Povey <marcus@dushka.co.uk> * Spelling
+ error
+
+2008-06-10 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/output/tags.php: Sorting out tag links.
+
+ * engine/schema/mysql.sql: Added an explicit conversion to MyISAM in the db
+ tables when a FULLTEXT key is used.
+
+2008-06-10 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/languages.php:
+
+ * engine/lib/languages.php:
+
+2008-06-10 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/languages.php: A better fix for language pack loading ...
+
+ * mod/profile/languages/en.php: Fixed a bad header in profile
+
+ * engine/lib/languages.php: Fix for language pack loading.
+
+2008-06-10 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/languages.php: Marcus Povey <marcus@dushka.co.uk> * Modified
+ elgg_echo to return $message_key if no translations found, meaning you will
+ always get _something_ from the command and will serve to prompt people for
+ missing translations.
+
+2008-06-10 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/start.php: Error text change.
+
+ * engine/start.php: Languages are now loaded before the main engine starts.
+
+ * engine/lib/actions.php, engine/lib/configuration.php,
+ engine/lib/database.php, engine/lib/elgglib.php, engine/lib/entities.php,
+ engine/lib/export.php, engine/lib/filestore.php, engine/lib/install.php,
+ engine/lib/languages.php, engine/lib/notification.php,
+ engine/lib/objects.php, engine/lib/sessions.php, engine/lib/sites.php,
+ engine/lib/system_log.php, engine/lib/users.php, engine/start.php,
+ mod/apitest/start.php, mod/dashboard/start.php, mod/exporttest/start.php,
+ mod/guidbrowser/start.php, mod/profile/start.php: register_event_handler and
+ trigger_event have been renamed to register_elgg_event_handler and
+ trigger_elgg_event respectively.
+
+2008-06-10 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/database.php, languages/en.php: Marcus Povey
+ <marcus@dushka.co.uk> * Debug added to db connect
+
+ * engine/lib/filestore.php: Marcus Povey <marcus@dushka.co.uk> * Bugfix on
+ filestore
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Removed
+ debug
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Bugfixed
+ canEdit and isFullyLoaded
+
+2008-06-09 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, engine/lib/objects.php, engine/lib/sites.php,
+ engine/lib/users.php: Marcus Povey <marcus@dushka.co.uk> * Caching complete
+
+ * engine/lib/objects.php, engine/lib/sites.php, engine/lib/users.php:
+
+ * engine/lib/objects.php, engine/lib/sites.php, engine/lib/users.php: Marcus
+ Povey <marcus@dushka.co.uk> * Added the code to the correct method. Doh!
+
+ * engine/lib/entities.php, engine/lib/users.php:
+
+ * engine/lib/users.php:
+
+ * engine/lib/entities.php, engine/lib/objects.php, engine/lib/sites.php,
+ engine/lib/users.php:
+
+ * engine/lib/entities.php, engine/lib/objects.php, engine/lib/sites.php,
+ engine/lib/users.php: Marcus Povey <marcus@dushka.co.uk> * Added table
+ counter
+
+2008-06-09 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/river.php: Annoying typo bugfix
+
+ * views/default/page_elements/header.php: Moving the location of metatags so
+ that we can add jQuery plugins after jQuery gets loaded.
+
+2008-06-09 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/objects.php:
+
+2008-06-09 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/river.php: Fixed class instanceof errors
+
+2008-06-09 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/sites.php, engine/lib/users.php: Marcus Povey
+ <marcus@dushka.co.uk> * Reverted caching error
+
+ * engine/lib/entities.php, engine/lib/sites.php, engine/lib/users.php:
+ Marcus Povey <marcus@dushka.co.uk> * Added caching to entities. Please report
+ any problems.
+
+2008-06-09 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, engine/lib/users.php: Interim fix for user saving
+
+2008-06-09 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/messages/exceptions/exception.php: Marcus Povey
+ <marcus@dushka.co.uk> * Updated to show improved debug in debug mode.
+
+ * views/default/messages/exceptions/exception.php: Marcus Povey
+ <marcus@dushka.co.uk> * Updated to show improved debug in debug mode.
+
+2008-06-09 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Fixed previously-introduced entity save issue.
+
+ * engine/lib/entities.php: There are line breaks in my query. Hrm.
+
+ * engine/lib/entities.php: Fixed issue on save
+
+2008-06-06 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/api.php, languages/en.php: Marcus Povey <marcus@dushka.co.uk> *
+ More internationalisation
+
+ * languages/en.php, services/api/rest.php: Marcus Povey
+ <marcus@dushka.co.uk> * More internationalisation
+
+ * languages/en.php, services/export/handler.php: Marcus Povey
+ <marcus@dushka.co.uk> * More internationalisation
+
+ * languages/en.php, views/default/export/entity.php: Marcus Povey
+ <marcus@dushka.co.uk> * More internationalisation
+
+ * engine/lib/query.php, languages/en.php: Marcus Povey <marcus@dushka.co.uk>
+ * More internationalisation
+
+ * actions/register.php: Marcus Povey <marcus@dushka.co.uk> * Blank passwords
+ and blank second password no longer permitted
+
+ * engine/lib/entities.php, engine/lib/extender.php,
+ engine/lib/relationships.php, engine/lib/river.php,
+ engine/lib/system_log.php: Marcus Povey <marcus@dushka.co.uk> * Limit to
+ specific users and/or relationships
+
+2008-06-05 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/metadata.php, engine/lib/users.php, mod/profile/start.php:
+ Fixes for metadata and for the run order.
+
+2008-06-05 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/river.php:
+
+ * engine/lib/river.php: Marcus Povey <marcus@dushka.co.uk> * River now
+ passes performed_by_guid user as an object to sub views
+
+ * engine/lib/system_log.php, engine/schema/mysql.sql: Marcus Povey
+ <marcus@dushka.co.uk> * System log performs the id of the user who performed
+ a given action (or 0 if no user was logged in). Update your DB schema.
+
+ * views/default/river/shell.php:
+
+ * views/default/river/ElggUser/login.php,
+ views/default/river/ElggUser/logout.php:
+
+ * views/default/river/shell.php:
+
+ * languages/en.php, views/default/river/ElggUser/login.php,
+ views/default/river/ElggUser/logout.php, views/default/river/shell.php:
+ Marcus Povey <marcus@dushka.co.uk> * Some basic river code
+
+ * mod/profile/index.php, views/default/river/ElggUser/login.php,
+ views/default/river/ElggUser/logout.php, views/default/river/shell.php:
+ Marcus Povey <marcus@dushka.co.uk> *
+
+2008-06-05 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/system_log.php, engine/settings.example.php: Removing assorted
+ errors which will allow for excellent river operation
+
+2008-06-05 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/start.php:
+
+2008-06-05 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, engine/lib/filestore.php,
+ views/default/pageshells/pageshell.php: Further cleanup
+
+ * views/default/page_elements/header.php, views/default/pageshell.php:
+ Further sitename fix.
+
+2008-06-05 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/filestore.php, engine/lib/notification.php, languages/en.php:
+ Marcus Povey <marcus@dushka.co.uk> * More text internationalised
+
+2008-06-05 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/filestore.php: Fixed a foreach bug.
+
+ * views/default/page_elements/header.php: Returned the site name to the
+ header.
+
+2008-06-05 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php, engine/lib/cache.php, engine/lib/database.php,
+ engine/lib/elgglib.php, engine/lib/entities.php, engine/lib/export.php,
+ engine/lib/extender.php, engine/lib/filestore.php, engine/lib/metadata.php,
+ engine/lib/objects.php, engine/lib/plugins.php, engine/lib/relationships.php,
+ engine/lib/sites.php, engine/lib/users.php, languages/en.php: Marcus Povey
+ <marcus@dushka.co.uk> * Partial internationalisation of exceptions
+
+2008-06-05 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/systemsettings/install.php, engine/lib/elgglib.php, install.php,
+ views/default/account/forms/register.php, views/default/settings/system.php:
+ Installation and initial account creation should now be stable.
+
+2008-06-04 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: A more elegant event passthrough mechanism.
+
+ * engine/lib/configuration.php, engine/lib/elgglib.php,
+ engine/lib/languages.php, engine/lib/sessions.php, engine/lib/sites.php:
+ Fixed the installation labels issue!
+
+2008-06-04 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/query.php: Marcus Povey <marcus@dushka.co.uk> * Documentation
+ added to query.
+
+2008-06-04 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/actions.php, engine/lib/install.php, engine/lib/sessions.php,
+ engine/lib/users.php, views/default/account/forms/login.php: Fixed actions
+ issues
+
+ * engine/lib/elgglib.php: Fixed the callpath_gatekeeper on Windows machines.
+
+2008-06-04 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/query.php:
+
+ * engine/lib/system_log.php:
+
+ * engine/lib/notification.php: Marcus Povey <marcus@dushka.co.uk> * Belts
+ and braces
+
+ * engine/lib/notification.php: Marcus Povey <marcus@dushka.co.uk> * Supports
+ multiple delivery methods as an array
+
+ * engine/lib/system_log.php: Marcus Povey <marcus@dushka.co.uk> * Minor
+ documentation
+
+ * engine/lib/notification.php: Marcus Povey <marcus@dushka.co.uk> *
+ Documentation
+
+ * engine/lib/elgglib.php: Marcus Povey <marcus@dushka.co.uk> * Minor
+ documentation
+
+ * engine/lib/query.php:
+
+ * engine/lib/query.php: Marcus Povey <marcus@dushka.co.uk> * More
+ documentation added
+
+ * engine/lib/database.php, engine/lib/query.php: Marcus Povey
+ <marcus@dushka.co.uk> * Moved Query object et al to their own file
+
+2008-06-03 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/database.php: Marcus Povey <marcus@dushka.co.uk> * Minor doc
+ tweak
+
+ * engine/lib/database.php: Marcus Povey <marcus@dushka.co.uk> * Added
+ documentation
+
+ * engine/lib/elgglib.php: Marcus Povey <marcus@dushka.co.uk> * Removed
+ superfluous event
+
+ * engine/lib/annotations.php: Marcus Povey <marcus@dushka.co.uk> * Debug
+ removed
+
+ * engine/lib/annotations.php, engine/lib/entities.php,
+ engine/lib/metadata.php, engine/lib/relationships.php: Marcus Povey
+ <marcus@dushka.co.uk> * Fixed annotations not returning anything * Access
+ control on db now disabled when run from privileged code block.
+
+ * engine/lib/access.php: Marcus Povey <marcus@dushka.co.uk> * Fixed
+ restricted mode
+
+2008-06-02 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/header.php: Added the metatags element into
+ the page header.
+
+2008-06-02 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/access.php: Marcus Povey <marcus@dushka.co.uk> * Removed and
+ because you can always add it.
+
+ * engine/lib/access.php: Marcus Povey <marcus@dushka.co.uk> * Added access
+ control shorthand function. REPLACE THIS WHEN QUERY OBJECT COMPLETE
+
+ * engine/lib/database.php:
+
+ * engine/lib/database.php: Marcus Povey <marcus@dushka.co.uk> * Fixed set
+ ommission
+
+ * engine/lib/elgglib.php: Marcus Povey <marcus@dushka.co.uk> * Path check no
+ longer an event, forces path check
+
+ * engine/lib/objects.php, engine/lib/sites.php, engine/lib/users.php: Marcus
+ Povey <marcus@dushka.co.uk> * Update and creates now handled separately, with
+ the appropriate events triggered.
+
+ * action_handler.php, pagehandler.php: Marcus Povey <marcus@dushka.co.uk> *
+ Moved handlers to engine/handlers/ to avoid them running foul of the
+ callpath_gatekeeper.. UPDATE YOUR .htaccess!
+
+ * engine/handlers/action_handler.php, engine/handlers/pagehandler.php,
+ htaccess_dist: Marcus Povey <marcus@dushka.co.uk> * Moved handlers to
+ engine/handlers/ to avoid them running foul of the callpath_gatekeeper..
+ UPDATE YOUR .htaccess!
+
+ * engine/lib/elgglib.php: Marcus Povey <marcus@dushka.co.uk> * Minor bugfix
+
+ * engine/lib/database.php: Marcus Povey <marcus@dushka.co.uk> * BUGFIX:
+ Missing $CONFIG from insert_data
+
+ * engine/lib/elgglib.php, engine/schema/mysql.sql: Marcus Povey
+ <marcus@dushka.co.uk> * Privileged path check to privileged function
+ execution. ... i really don't like this exception stuff. I think it would be
+ better to say that you can't access stuff you can't access.
+
+2008-05-30 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Marcus Povey <marcus@dushka.co.uk> * Removed debug
+
+ * engine/lib/database.php, engine/lib/elgglib.php: Marcus Povey
+ <marcus@dushka.co.uk> * Bugfix on gatekeeper and forcing data functions to
+ privileged only
+
+ * engine/lib/elgglib.php: Marcus Povey <marcus@dushka.co.uk> * Renamed
+ limited to strict
+
+ * engine/lib/elgglib.php: Marcus Povey <marcus@dushka.co.uk> * Improved
+ callpath_gatekeeper
+
+2008-05-29 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/foaf/export/entity.php: Marcus Povey <marcus@dushka.co.uk> * Removed
+ foaf/export since this has been superceded.
+
+ * engine/lib/elgglib.php: Marcus Povey <marcus@dushka.co.uk> * Turns out i
+ needed reflection afterall.
+
+2008-05-29 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/foaf/friends/list.php, views/foaf/pageshells/pageshell.php: Added
+ FOAF
+
+ * views/default/canvas/layouts/one_column.php: Correcting one column font
+ size issue
+
+2008-05-29 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Marcus Povey <marcus@dushka.co.uk> * Introducing
+ callpath_gatekeeper
+
+ * engine/lib/elgglib.php: Marcus Povey <marcus@dushka.co.uk> * Simplified
+ call_gatekeeper()
+
+ * engine/lib/elgglib.php:
+
+ * engine/lib/elgglib.php: Marcus Povey <marcus@dushka.co.uk> * Introducing
+ call_gatekeeper()
+
+2008-05-29 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/friends/add.php, actions/friends/remove.php,
+ engine/lib/social.php, engine/lib/users.php, friends/index.php,
+ friends/of.php, languages/en.php, mod/profile/views/default/profile/menu.php,
+ mod/profile/views/default/profile/userdetails.php,
+ mod/profile/views/default/user/user.php, views/default/friends/list.php:
+ Added friends pages and related functionality
+
+2008-05-29 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/database.php:
+
+2008-05-29 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/user/user.php: Slight change to the user view in
+ profiles, to facilitate the friends page
+
+2008-05-28 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/export.php: Marcus Povey <marcus@dushka.co.uk> * Import now
+ does simple checks for failure
+
+ * engine/lib/opendd.php: Marcus Povey <marcus@dushka.co.uk> * Sanity checks
+ added to OpenDD import
+
+ * mod/exporttest/views/default/exporttest/main.php:
+
+2008-05-28 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/tags.php: Query fixes for previous.
+
+ * engine/lib/tags.php: Adding support for db prefixes to previous
+
+2008-05-28 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/import/odd.php: Marcus Povey <marcus@dushka.co.uk> * Added
+ gatekeeper
+
+ * mod/exporttest/views/default/exporttest/main.php: Marcus Povey
+ <marcus@dushka.co.uk> * export test import set to use new import action
+
+2008-05-28 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/tags.php, views/default/output/tagcloud.php: Added new tagcloud
+ functions
+
+2008-05-28 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/import/odd.php, languages/en.php: Marcus Povey
+ <marcus@dushka.co.uk> * Importing ODD action added
+
+2008-05-28 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * search/index.php, views/default/output/tagcloud.php,
+ views/default/output/tags.php: Subtypes and object types for search.
+
+2008-05-28 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/database.php: Marcus Povey <marcus@dushka.co.uk> * Minor doc
+ update
+
+ * engine/lib/database.php: Marcus Povey <marcus@dushka.co.uk> * Minor doc
+ update
+
+ * engine/lib/database.php: Marcus Povey <marcus@dushka.co.uk> * Fixed Where,
+ WhereStatic and WhereSet
+
+ * engine/lib/database.php: Marcus Povey <marcus@dushka.co.uk> * Fixed
+ order/limit
+
+ * engine/lib/database.php: Marcus Povey <marcus@dushka.co.uk> * Fixed tables
+
+ * engine/lib/database.php: Marcus Povey <marcus@dushka.co.uk> * Fixed
+ spacing issue
+
+ * engine/lib/database.php: Marcus Povey <marcus@dushka.co.uk> * Throws
+ exception if fields are missing on a select query
+
+ * engine/lib/database.php: Marcus Povey <marcus@dushka.co.uk> * Fixed
+ $CONFIG->prefix now $CONFIG->dbprefix * Exception thrown on missing tables
+
+ * engine/lib/database.php: Marcus Povey <marcus@dushka.co.uk> * Fixed ACL
+ where "where" is missing * Added catch for exceptions
+
+2008-05-28 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/canvas/layouts/one_column.php: small tweak to the canvas
+ view - this is temp
+
+2008-05-28 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/sessions.php: A further fix for previous.
+
+ * engine/lib/sessions.php: Solidifying the login() function so that the
+ session data is always consistent.
+
+ * actions/login.php, engine/lib/sessions.php: Revamped the login functions
+ to separate login from authentication.
+
+ * engine/lib/sessions.php: login() can now be extended by other
+ authentication methods. TODO: wrap this up with the PAM functionality.
+
+ * engine/lib/sessions.php: Adding login and logout events.
+
+2008-05-27 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/schema/mysql.sql: Marcus Povey <marcus@dushka.co.uk> * Fixed DB
+ code
+
+ * engine/lib/elgglib.php: Marcus Povey <marcus@dushka.co.uk> * Fixed
+ incorrect event trigger code - problem caused by incorrect is_array clause on
+ event trigger functions
+
+2008-05-27 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/input.php, engine/lib/social.php: create a new social library
+ in the engine. Moved string parsing for links to input.php and removed
+ converting strings to tags from the shouts plugin and added them to the
+ social library.
+
+2008-05-27 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/river.php: Marcus Povey <marcus@dushka.co.uk> * Offset
+ incremented each pass, will no longer get stuck in the infinite loop
+
+ * engine/lib/system_log.php: Marcus Povey <marcus@dushka.co.uk> *
+ Restrictions checked
+
+ * engine/lib/river.php: Marcus Povey <marcus@dushka.co.uk> * Views looked
+ for now river/$CLASSNAME/$EVENT
+
+2008-05-26 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: new fixed width
+
+ * views/default/css.php: fixed width page
+
+ * vendors/jquery/init.js, vendors/jquery/jquery-1.2.4a.js,
+ vendors/jquery/jquery-1.2.6.pack.js, vendors/jquery/jquery.js,
+ vendors/jquery/ui.base.js, vendors/jquery/ui.draggable.js,
+ vendors/jquery/ui.droppable.js, vendors/jquery/ui.sortable.js: new jquery,
+ removed old
+
+ * _graphics/footer.gif, _graphics/header.gif, _graphics/sidebar-bottom.gif,
+ _graphics/sidebar-top.gif: removed old graphics
+
+ * _graphics/pagebackground.gif, _graphics/pagebackground.jpg: pics needed
+
+ * views/default/css.php, views/default/navigation/toolbox.php,
+ views/default/page_elements/header.php, views/default/reset.css: simple
+ default theme as a starting point
+
+2008-05-26 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/canvas/layouts/one_column.php: added a new canvas area to
+ views, this is for plugins to layout their content.
+
+2008-05-26 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Fix for elgg_view_layout
+
+ * engine/lib/elgglib.php: Added layout manager to elgglib
+
+2008-05-26 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/relationships.php: added some relationship helper functions for
+ relationship type 'attached'
+
+2008-05-23 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Slight tweak to the entities
+ getEntitiesFromRelationship method. We need inverse relationships!
+
+ * views/default/pageshells/pageshell.php: Sticking the sidebar somewhere for
+ now
+
+ * engine/lib/access.php, languages/en.php: Added a plugin hook and
+ translations for previous.
+
+ * engine/lib/access.php, views/default/input/access.php: Introducing a
+ visual widget for inputting access permissions.
+
+2008-05-23 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php, views/default/pageshells/pageshell.php: reverted
+ back to a simple layout for now
+
+2008-05-23 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/user/user.php: Similar profile fix to previous
+
+2008-05-23 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php, engine/lib/entities.php,
+ engine/lib/extender.php, engine/lib/metadata.php,
+ engine/lib/relationships.php, engine/lib/river.php,
+ engine/lib/system_log.php, engine/schema/mysql.sql: Marcus Povey
+ <marcus@dushka.co.uk> * Support for river entries
+
+2008-05-23 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/languages/en.php, mod/profile/views/default/profile/edit.php:
+ You can now edit your profile again ..
+
+2008-05-23 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Marcus Povey <marcus@dushka.co.uk> * View debug
+ messages now echoed to system log instead of to the screen. * Minor doc fix
+
+2008-05-23 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/metadata.php: Removing double sanitise_string on save metadata
+
+2008-05-23 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/schema/mysql.sql: Marcus Povey <marcus@dushka.co.uk> * Added
+ access_id
+
+2008-05-23 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Removing conflict over 'event' keyword in views
+
+ * engine/lib/elgglib.php: ... and again ...
+
+2008-05-23 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/system_log.php:
+
+2008-05-23 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Fix for previous
+
+ * mod/profile/actions/iconupload.php, mod/profile/icon.php,
+ mod/profile/views/default/profile/icon.php: Introducing the 'tiny' profile
+ icon size
+
+2008-05-23 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, engine/lib/extender.php,
+ engine/lib/relationships.php, engine/lib/system_log.php, engine/start.php:
+ Marcus Povey <marcus@dushka.co.uk> * System log event code
+
+2008-05-23 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Similar tweak as for events, but with plugin hooks
+
+ * engine/lib/elgglib.php: trigger_event now passes the actual event details
+ on 'all'
+
+ * engine/lib/entities.php: An improvement to the clearMetadata method on
+ ElggEntities - specify a name and it only clears metadata of that type.
+
+2008-05-22 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/start.php: Marcus Povey <marcus@dushka.co.uk> * Added system log to
+ prerequisite loader
+
+ * engine/lib/system_log.php: Marcus Povey <marcus@dushka.co.uk> * Can now
+ run
+
+ * engine/lib/river.php, engine/lib/system_log.php: Marcus Povey
+ <marcus@dushka.co.uk> * Moving back to desktop
+
+ * engine/schema/mysql.sql: Marcus Povey <marcus@dushka.co.uk> * Added
+ system_log table
+
+2008-05-22 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/metadata.php: Removing duplicate metastring issue
+
+2008-05-22 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Marcus Povey <marcus@dushka.co.uk> * undid
+ previous as it was a dumb idea
+
+ * engine/lib/elgglib.php: Marcus Povey <marcus@dushka.co.uk> *
+ Clarification: Trigger event can only be passed a context related to a
+ ElggEntity
+
+2008-05-22 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, engine/lib/objects.php, engine/lib/sites.php,
+ engine/lib/users.php: Rearranging events: stage 1
+
+2008-05-22 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/river.php: Marcus Povey <marcus@dushka.co.uk> * River stub for
+ the pub.
+
+2008-05-22 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/pagehandler.php: The context is now set automatically when the
+ page handler is in use.
+
+ * engine/lib/pageowner.php: Plugins can now set context
+
+2008-05-21 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: And again
+
+ * engine/lib/entities.php: Minor fix for setting metadata
+
+2008-05-21 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/tags.php: Marcus Povey <marcus@dushka.co.uk> * Tag cloud for
+ files
+
+ * engine/lib/metadata.php: Marcus Povey <marcus@dushka.co.uk> * Introducing
+ find_metadata as a counterpart to get_entities_from_metadata
+
+2008-05-21 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, engine/lib/relationships.php: Entities now clear
+ all associated relationships on delete
+
+ * engine/lib/relationships.php: Added function to remove all entity
+ relationships of a particular kind associated with an entity
+
+ * engine/lib/access.php: Creating the constants ACCESS_PUBLIC,
+ ACCESS_PRIVATE, ACCESS_LOGGED_IN
+
+2008-05-21 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/tags.php: Marcus Povey <marcus@dushka.co.uk> * Added tag cloud
+ functions
+
+2008-05-21 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/actions/iconupload.php, mod/profile/icon.php: Assorted profile
+ icon fixes
+
+ * engine/lib/entities.php: Metadata can now be added to before an entity is
+ saved. It will be added to the db on save.
+
+ * views/default/pageshells/pageshell.php: Allowing for further extension to
+ the sidebar
+
+ * engine/lib/elgglib.php, views/default/pageshells/pageshell.php: Added
+ easier sidebar population
+
+2008-05-20 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/filestore.php: Marcus Povey <marcus@dushka.co.uk> * Introducing
+ get_resized_image_from_existing_file * Consolidated
+ get_resized_image_from_uploaded_file to use it
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * BUGFIX:
+ get_subtype_id now shortcircuits returning unmodified $subtype if $subtype is
+ ""
+
+ * engine/lib/objects.php, engine/lib/sites.php, engine/lib/users.php: Marcus
+ Povey <marcus@dushka.co.uk> * Fixed direct load by guid issue
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Fixed
+ strange regression in get_entities, now returns all stuff even if subtype is
+ blank.
+
+ * engine/lib/filestore.php: Marcus Povey <marcus@dushka.co.uk> * Revised
+ matrix generation on filestore
+
+2008-05-20 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/start.php: Removing a PHP notice
+
+2008-05-20 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/atom.php, engine/lib/export.php, engine/lib/opendd.php,
+ views/atom/export/entity.php, views/atom/export/metadata.php,
+ views/atom/export/relationship.php, views/atom/pageshells/pageshell.php:
+ Marcus Povey <marcus@dushka.co.uk> * reverted previous
+
+ * engine/lib/atom.php, engine/lib/export.php, engine/lib/opendd.php,
+ views/atom/export/entity.php, views/atom/export/metadata.php,
+ views/atom/export/relationship.php, views/atom/pageshells/pageshell.php:
+ Marcus Povey <marcus@dushka.co.uk> * Committed abortive Atom wrapper... we
+ need to support different import/export
+
+ * engine/start.php: Marcus Povey <marcus@dushka.co.uk> * Debug mode now
+ lists libraries loaded
+
+ * services/export/handler.php: Marcus Povey <marcus@dushka.co.uk> *
+
+ * engine/lib/elgglib.php: Marcus Povey <marcus@dushka.co.uk> * Introducing:
+ current_page_url()
+
+2008-05-19 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/configuration.php, engine/start.php,
+ views/default/pageshells/pageshell.php: Fixing the install process, step 1.
+
+ * engine/lib/sessions.php: Session init now fails if the db hasn't been
+ installed.
+
+ * engine/start.php: Elgg will now enter light mode (no plugins are loaded,
+ system init doesn't happen) if the parameter lightmode = "true"
+
+2008-05-16 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * services/export/handler.php: Marcus Povey <marcus@dushka.co.uk> * Minor
+ clarification
+
+ * endpoints/rest.php, mod/apitest/start.php, services/api/rest.php: Marcus
+ Povey <marcus@dushka.co.uk> * Refactored API under services
+
+ * export/handler.php, htaccess_dist, services/export/handler.php: Marcus
+ Povey <marcus@dushka.co.uk> * Refactored export to services/export for future
+ expansion of other rest style endpoints
+
+2008-05-15 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/pageshells/pageshell.php: Removed the double body issue to
+ prevent confusion
+
+ * admin/index.php, admin/plugins/index.php, admin/settings/index.php,
+ admin/users/index.php, languages/en.php, mod/blog/actions/add.php,
+ mod/blog/actions/comments/add.php, mod/blog/actions/comments/delete.php,
+ mod/blog/actions/delete.php, mod/blog/actions/edit.php, mod/blog/add.php,
+ mod/blog/edit.php, mod/blog/everyone.php, mod/blog/index.php,
+ mod/blog/languages/en.php, mod/blog/read.php, mod/blog/start.php,
+ mod/blog/views/default/blog/css.php,
+ mod/blog/views/default/blog/forms/edit.php,
+ mod/blog/views/default/blog/notfound.php,
+ mod/blog/views/default/blog/view.php,
+ mod/blog/views/default/object/blog-comment.php,
+ mod/blog/views/default/object/blog-comments.php,
+ mod/blog/views/default/object/blog.php, mod/file/actions/download.php,
+ mod/file/actions/upload.php, mod/file/friends.php, mod/file/index.php,
+ mod/file/languages/en.php, mod/file/start.php, mod/file/upload.php,
+ mod/file/views/default/file/file.php, mod/file/views/default/file/footer.php,
+ mod/file/views/default/file/icon.php, mod/file/views/default/file/upload.php,
+ mod/file/world.php, mod/tasklist/index.php, mod/tasklist/start.php,
+ mod/tasklist/views/default/tasklist/item.php,
+ mod/tasklist/views/default/tasklist/main.php,
+ mod/tasklist/views/default/tasklist/newtask.php,
+ views/default/admin/main.php, views/default/editmenu.php,
+ views/default/navigation/topmenu.php: Moving some stuff into the plugins
+ repo, where it belongs.
+
+ * engine/lib/users.php: Introducing getFriendsObjects to ElggUser
+
+2008-05-14 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/database.php: Marcus Povey <marcus@dushka.co.uk> * Debug mode
+ causes queries that return no data to issue a warning
+
+ * engine/lib/opendd.php: Marcus Povey <marcus@dushka.co.uk> * Fixed
+ ommission: setPublished
+
+2008-05-09 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/opendd.php: Added version
+
+ * engine/lib/opendd.php: Marcus Povey <marcus@dushka.co.uk> * Including XML
+ so it stands as a standalone lib
+
+ * engine/lib/export.php, engine/lib/opendd.php: Marcus Povey
+ <marcus@dushka.co.uk> * Moved ODD stuff to its own lib [untested]
+
+ * views/json/pageshells/pageshell.php: Marcus Povey <marcus@dushka.co.uk> *
+ Being "strictly correct" by returning application/json for json content type.
+
+2008-05-09 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * vendors/jquery/init.js, vendors/jquery/jquery-1.2.4a.js,
+ vendors/jquery/ui.base.js, vendors/jquery/ui.draggable.js,
+ vendors/jquery/ui.droppable.js, vendors/jquery/ui.sortable.js: jquery
+ framework
+
+ * views/default/css.php, views/default/navigation/topmenu.php,
+ views/default/page_elements/header.php,
+ views/default/pageshells/pageshell.php: drag n drop interface test
+
+2008-05-08 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * BUGFIX:
+ Moved shortcut so that subtype of "" doesn't cause fail.
+
+2008-05-07 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/header.php:
+
+ * views/default/css.php, views/default/navigation/toolbox.php,
+ views/default/pageshells/pageshell.php,
+ views/default/pageshells/pageshell_sidebar.php: new toolbar menu
+
+2008-05-02 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Removed a debug message
+
+ * engine/lib/entities.php: A fix for get_entities, which was borking if the
+ subtype of object specified didn't exist.
+
+ * engine/lib/configuration.php, engine/lib/sessions.php,
+ engine/lib/sites.php: Configuration prerequisites are now loaded on boot time
+ rathr than init
+
+ * engine/lib/filestore.php: The filestore is no longer so greedy about its
+ init function, and therefore gets the correct filestore location
+
+ * engine/lib/configuration.php: A small validation check
+
+2008-05-02 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php: reversed my last tweak, another solution will
+ be required
+
+2008-05-02 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php, views/default/navigation/topmenu.php: Adding a user
+ icon to the top menu
+
+2008-05-02 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php: small tweak to get annotations
+
+2008-05-02 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/configuration.php: Minor bug fix in configuration
+
+ * engine/start.php: Update to start.php to fix bug on installation
+
+ * actions/systemsettings/install.php: Corrected an issue with actions.
+
+ * actions/systemsettings/install.php: Fixed a bug where the site was private
+ unless you were logged out ...
+
+ * actions/systemsettings/install.php, engine/lib/configuration.php,
+ engine/lib/database.php, engine/lib/entities.php, engine/lib/install.php,
+ engine/lib/languages.php, engine/lib/metadata.php,
+ engine/lib/relationships.php, engine/lib/users.php, engine/start.php,
+ install.php, languages/en.php, views/default/navigation/toolbox.php,
+ views/default/pageshells/pageshell_sidebar.php,
+ views/default/settings/install.php, views/default/settings/system.php: The
+ system now uses the site GUID to get and set entity data. Also, installation
+ is a great deal more visual.
+
+2008-05-02 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/notification.php: Marcus Povey <marcus@dushka.co.uk> * Now
+ registers email handler (oops)
+
+2008-05-01 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/foaf/export/entity.php: Marcus Povey <marcus@dushka.co.uk> * FOAF
+ view uses correctly formatted UUID
+
+ * views/foaf/export/entity.php, views/foaf/pageshells/pageshell.php: Marcus
+ Povey <marcus@dushka.co.uk> * Added prototype FOAF view
+
+2008-05-01 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/sites.php: Establishing $CONFIG->site
+
+ * engine/lib/install.php: Further changes to the site install procedure.
+
+ * engine/lib/elgglib.php, engine/lib/install.php, engine/lib/sites.php,
+ engine/schema/mysql.sql: Major site config changes
+
+2008-05-01 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/file/actions/upload.php: Marcus Povey <marcus@dushka.co.uk> * Uploads
+ and downloads now work.
+
+ * engine/lib/filestore.php:
+
+2008-05-01 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/schema/mysql.sql: Schema update for configuration
+
+2008-05-01 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/filestore.php: Marcus Povey <marcus@dushka.co.uk> * Bugfixing
+ my sillyness
+
+2008-05-01 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php: Fixed a bug in countAnnotations
+
+2008-05-01 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/filestore.php:
+
+ * engine/lib/filestore.php: Marcus Povey <marcus@dushka.co.uk> * Bugfix
+
+ * mod/file/actions/download.php, mod/file/languages/en.php: Marcus Povey
+ <marcus@dushka.co.uk> * Download support
+
+ * engine/lib/filestore.php: Marcus Povey <marcus@dushka.co.uk> * Added tell
+
+ * engine/lib/filestore.php: Marcus Povey <marcus@dushka.co.uk> * Added eof
+ functionality to datastore
+
+ * mod/file/actions/download.php, mod/file/start.php,
+ mod/file/views/default/file/file.php: Marcus Povey <marcus@dushka.co.uk> *
+ Download page added
+
+2008-05-01 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/configuration.php: Docs for previous
+
+ * engine/lib/actions.php: Added GET variable processing to the action
+ handler.
+
+2008-05-01 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/file/start.php, mod/file/views/default/file/file.php: Marcus Povey
+ <marcus@dushka.co.uk> * Name tweaks
+
+2008-05-01 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/configuration.php: Get and set per-site configuration values
+ from the database
+
+2008-05-01 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/file/actions/upload.php: Marcus Povey <marcus@dushka.co.uk> * Minor
+ tweak
+
+ * mod/file/actions/upload.php: Marcus Povey <marcus@dushka.co.uk> * Error
+ handling
+
+ * mod/file/actions/upload.php: Marcus Povey <marcus@dushka.co.uk> * Save to
+ get the GUID
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * BUGFIX: Typo
+
+2008-05-01 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: $CONFIG->dbprefix, not $CONFIG->prefix
+
+2008-05-01 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/filestore.php, mod/file/upload.php: Marcus Povey
+ <marcus@dushka.co.uk> * Bugfix: uses the correct filename
+
+2008-05-01 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/sessions.php: Introducing gatekeeper();
+
+ * engine/lib/elgglib.php: Introducing run_function_once($functionname,
+ $timelastupdatedcheck).
+
+2008-05-01 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/file/actions/upload.php, mod/file/index.php, mod/file/start.php,
+ mod/file/views/default/file/file.php, mod/file/views/default/file/icon.php:
+ Marcus Povey <marcus@dushka.co.uk> * Using mime types
+
+ * engine/lib/database.php, engine/lib/entities.php: Marcus Povey
+ <marcus@dushka.co.uk> * Fixed regression on custom class loader
+
+ * engine/lib/filestore.php: Marcus Povey <marcus@dushka.co.uk> * Now
+ registers ElggFile for 'object' & 'file'
+
+2008-04-30 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/relationships.php: Fix for previous fix for previous fix
+
+ * engine/lib/entities.php: Slight correction to the count entities from
+ relationship alias in ElggEntity
+
+ * engine/lib/relationships.php: Fix for previous fix
+
+ * engine/lib/relationships.php: Fix for previous
+
+ * engine/lib/entities.php, engine/lib/relationships.php: Fixing some
+ functions relating to relationships
+
+2008-04-30 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/export.php: Marcus Povey <marcus@dushka.co.uk> * Minor tweak:
+ removed $ns references from ODD __toString()
+
+ * engine/lib/export.php, engine/lib/relationships.php: Marcus Povey
+ <marcus@dushka.co.uk> * Changed "verb" to "type" in relationship, as
+ described in ODD spec 0.5
+
+ * engine/lib/notification.php: Marcus Povey <marcus@dushka.co.uk> * Removed
+ get_notifications... you should provide a list of guid's yourself
+
+ * mod/file/views/default/file/footer.php: Marcus Povey <marcus@dushka.co.uk>
+ * Simple footer
+
+2008-04-30 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: get_entities returns false if the subtype name
+ couldn't be found.
+
+2008-04-30 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/file/actions/upload.php, mod/file/friends.php, mod/file/index.php,
+ mod/file/languages/en.php, mod/file/start.php, mod/file/upload.php,
+ mod/file/views/default/file/file.php, mod/file/views/default/file/footer.php,
+ mod/file/views/default/file/upload.php, mod/file/world.php: Marcus Povey
+ <marcus@dushka.co.uk> * First draft file upload
+
+2008-04-30 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, engine/lib/relationships.php: Introducing
+ getEntitiesFromRelationship and countEntitiesFromRelationship methods on
+ ElggEntity
+
+ * mod/blog/views/default/object/blog.php: Fixed a (presumably transient)
+ comments issue in blogs.
+
+ * mod/blog/views/default/object/blog.php: Temporary style fix
+
+ * mod/blog/views/default/object/blog.php: Updating blog view to involve
+ icons
+
+2008-04-30 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/filestore.php: Marcus Povey <marcus@dushka.co.uk> *
+ ElggDiskFilestore now uses matrix formed from username, and supports paths.
+
+ * engine/lib/filestore.php: Marcus Povey <marcus@dushka.co.uk> *
+
+2008-04-30 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/filestore.php: Resizing images now resamples them for better
+ clarity.
+
+ * mod/profile/actions/iconupload.php: Better error reporting on previous.
+
+ * mod/profile/actions/iconupload.php: Fixed profile resizing issue
+
+ * engine/lib/filestore.php: Previous now returns false.
+
+ * engine/lib/filestore.php: Fixed image resizing issue, corrected function
+ to create a jpeg using output buffering rather than a temporary file
+
+2008-04-29 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/header.php: added jquery to the main pageshell
+ header
+
+ * vendors/jquery/jquery.js: Uploaded the latest jquery into core.
+
+2008-04-29 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php, mod/profile/actions/iconupload.php,
+ mod/profile/editicon.php, mod/profile/graphics/defaultlarge.jpg,
+ mod/profile/graphics/defaultmedium.jpg,
+ mod/profile/graphics/defaultsmall.jpg, mod/profile/icon.php,
+ mod/profile/languages/en.php, mod/profile/start.php,
+ mod/profile/views/default/profile/editicon.php,
+ mod/profile/views/default/profile/icon.php,
+ mod/profile/views/default/user/user.php: Introducing profile icons.
+
+ * engine/lib/filestore.php: Fix for make_file_matrix
+
+ * engine/lib/filestore.php: Filenames fix
+
+ * engine/lib/filestore.php: Non-invasive fix for previous.
+
+ * engine/lib/filestore.php: Introducing get_uploaded_file and
+ get_resized_image_from_uploaded_file.
+
+ * engine/lib/extender.php: Sledgehammer tactics on can_edit_extender
+
+ * engine/lib/extender.php: Attempt at an extender canEdit fix
+
+ * engine/lib/annotations.php: Fixed typo
+
+ * engine/lib/extender.php: Added getEntity() to ElggExtender
+
+ * engine/lib/annotations.php: Fixed a minor SQL error in annotation sum
+ functions
+
+ * engine/lib/annotations.php: Minor fix involving ratings and get
+ annotations
+
+2008-04-29 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * BUGFIX:
+ Import functionality works, removed update but no change error on update
+
+ * engine/lib/extender.php: Marcus Povey <marcus@dushka.co.uk> * BUGFIX:
+ Missing name
+
+ * engine/lib/users.php: Marcus Povey <marcus@dushka.co.uk> * Fixed bug in
+ getOwner override
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Fixed
+ incorrect if condition logic
+
+2008-04-29 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/input/calendar.php: small tweak to the calendar input
+
+2008-04-29 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/input/calendar.php: Replacing strip_string with
+ sanitise_string in the calendar input
+
+2008-04-28 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/notification.php: Marcus Povey <marcus@dushka.co.uk> * Notify
+ and email notify added (not tested) ... still unsure about get_notify_list,
+ attempted a number of options ... not sure if this is as simple as it could
+ be
+
+2008-04-28 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/vendors/calendarpopup/CalendarPopup.js,
+ views/default/input/calendar.php, views/default/output/calendar.php: Calendar
+ popup input for dates
+
+ * views/default/output/tags.php: Removing undefined index notice
+
+ * views/default/welcome.php: Removed annoying reference to $vars['name'] in
+ the welcome view
+
+ * mod/profile/actions/edit.php, mod/profile/languages/en.php,
+ mod/profile/start.php, mod/profile/views/default/profile/edit.php,
+ mod/profile/views/default/user/user.php: The profile now has fields set in
+ start.php. TODO: make those user editable, once we have the admin panel ...
+
+ * views/default/output/tags.php: The tag output view can now use
+ $vars['value'], bringing it in line with all the others
+
+ * views/default/input/email.php, views/default/output/email.php: Email
+ address input and output fields
+
+2008-04-25 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * endpoints/rest.php: Marcus Povey <marcus@dushka.co.uk> * Removed minor
+ config stuff
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Crude
+ deleteall method added
+
+ * htaccess_dist: Marcus Povey <marcus@dushka.co.uk> * JSON & PHP export
+ rewrite rules
+
+ * views/json/export/entity.php, views/json/export/metadata.php,
+ views/json/export/relationship.php, views/php/export/entity.php,
+ views/php/export/metadata.php, views/php/export/relationship.php: Marcus
+ Povey <marcus@dushka.co.uk> * JSON & PHP Export modes
+
+ * engine/lib/extender.php, engine/lib/relationships.php: Marcus Povey
+ <marcus@dushka.co.uk> * Metadata and relationships can now be accessed as
+ arrays
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Objects can
+ be accessed as arrays
+
+2008-04-25 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/metadata.php: Adding get_entities_from_metadata_multi
+
+2008-04-25 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * export/handler.php, htaccess_dist, odd/handler.php: Marcus Povey
+ <marcus@dushka.co.uk> * Renamed /odd to /export since the handler can now do
+ so much more...
+
+2008-04-25 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/editmenu.php: Editmenu stub view
+
+2008-04-25 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * htaccess_dist: Marcus Povey <marcus@dushka.co.uk> * Using ODD view by
+ default
+
+ * odd/handler.php, views/default/export/entity.php,
+ views/default/export/metadata.php, views/default/export/relationship.php,
+ views/odd/export/entity.php, views/odd/export/metadata.php,
+ views/odd/export/relationship.php, views/odd/pageshells/pageshell.php: Marcus
+ Povey <marcus@dushka.co.uk> * Updated ODD handler, now uses views * Normal
+ and ODD view for all data items... cute eh? :)
+
+ * engine/lib/annotations.php, engine/lib/extender.php,
+ engine/lib/metadata.php: Marcus Povey <marcus@dushka.co.uk> * Using common
+ attribute type var to determine ODD export type for uuid generation, now
+ attributes can support a uuid
+
+ * .../views/default/guidbrowser/entity_full.php: Marcus Povey
+ <marcus@dushka.co.uk> * Uses guid_one as well
+
+ * odd/handler.php: Marcus Povey <marcus@dushka.co.uk> * Removed session
+ debug
+
+ * action.php, engine/lib/api.php, engine/lib/elgglib.php,
+ views/default/api/output.php, views/json/api/output.php,
+ views/json/pageshells/pageshell.php, views/php/api/output.php,
+ views/php/pageshells/pageshell.php, views/xml/api/output.php,
+ views/xml/pageshells/pageshell.php: Marcus Povey <marcus@dushka.co.uk> *
+
+ * endpoints/rest.php: Marcus Povey <marcus@dushka.co.uk> * API converted to
+ use views system
+
+2008-04-25 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Fix to the debug messages for elgg_view
+
+2008-04-25 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, engine/lib/export.php: Marcus Povey
+ <marcus@dushka.co.uk> * Removed all namespacing code
+
+2008-04-24 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/export.php: Marcus Povey <marcus@dushka.co.uk> * Namespace
+ support added to export
+
+2008-04-24 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * version.php: Minor edit to the version number spec
+
+ * engine/lib/elgglib.php, engine/lib/version.php, engine/schema/mysql.sql,
+ version.php: The beginnings of a db upgrade system. See lib/version.php,
+ /version.php and the datalist functions in elgglib.php.
+
+2008-04-24 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/export.php: Marcus Povey <marcus@dushka.co.uk> * Removed header
+ object
+
+ * engine/lib/export.php: Marcus Povey <marcus@dushka.co.uk> * Unhandled
+ elements issue a warning on import
+
+ * engine/lib/export.php: Marcus Povey <marcus@dushka.co.uk> * Removed ODD
+ header element
+
+ * engine/lib/entities.php:
+
+ * engine/lib/annotations.php, engine/lib/entities.php,
+ engine/lib/extender.php, engine/lib/metadata.php: Marcus Povey
+ <marcus@dushka.co.uk> * Generated now published * Metadata and annotations
+ use time from db * Attributes use time from entity
+
+2008-04-23 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/filestore.php: Marcus Povey <marcus@dushka.co.uk> * Improved
+ documentation
+
+ * engine/lib/filestore.php: Marcus Povey <marcus@dushka.co.uk> * Filesize
+ support added, now possible to get all file contents with
+ $file->read($file->size());
+
+2008-04-21 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/actions/edit.php, mod/profile/edit.php, mod/profile/index.php,
+ mod/profile/languages/en.php, mod/profile/start.php,
+ mod/profile/views/default/profile/edit.php,
+ mod/profile/views/default/user/user.php: Introduced profile plugin
+
+ * engine/lib/entities.php, engine/lib/metadata.php, engine/lib/users.php:
+ Fixed user GUID and multiple metadata bugs
+
+ * engine/lib/sessions.php: Session init now gets priority
+
+ * engine/lib/metadata.php: Improving the metadata search in cases where
+ users have multiple tags with the same text
+
+ * mod/blog/start.php: Added doc for blog URL function
+
+ * engine/lib/entities.php: Minor update to the default entity URLs
+
+ * engine/lib/elgglib.php: Fixed an inconsistency in elgg_view_entity
+
+2008-04-21 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php:
+
+ * engine/lib/filestore.php: Marcus Povey <marcus@dushka.co.uk> * Numerous
+ bugs fixed
+
+ * engine/lib/filestore.php: Marcus Povey <marcus@dushka.co.uk> * No longer
+ saves file automatically, this gives you the option as to how to handle files
+ - either as proper objects or adhoc file handles which still use the
+ filestore code.
+
+ * engine/lib/filestore.php: Marcus Povey <marcus@dushka.co.uk> * Save and
+ Load (read/write) work * TODO: Loaded can not be loaded via name, only
+ guid... correct?
+
+2008-04-21 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: can_edit_entity now always returns false if the
+ user is logged out
+
+2008-04-21 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/actions.php: Marcus Povey <marcus@dushka.co.uk> * Removed tiny
+ debug output
+
+2008-04-21 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/sessions.php: Fix for lingering sessions with nonexistent users
+
+ * engine/schema/mysql.sql: Removing extraneous character from schema
+
+ * engine/schema/mysql.sql: Added site_guid to the entities table
+
+2008-04-18 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/filestore.php: Marcus Povey <marcus@dushka.co.uk> * Unfinished
+ filestore code
+
+ * engine/lib/cache.php: Marcus Povey <marcus@dushka.co.uk> * Cleaned up doc
+
+2008-04-18 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: If you feed an entity a metadata array, it
+ assumes multiple values are allowed
+
+ * views/default/input/tags.php: Updated input tag field to take in strings
+ as well as arrays
+
+ * mod/blog/views/default/object/blog.php: Link fix
+
+ * htaccess_dist: Minor page handler mod_rewrite fix
+
+2008-04-18 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/exporttest/index.php, mod/guidbrowser/index.php: Marcus Povey
+ <marcus@dushka.co.uk> * Hardcoded sessions no longer necessary now that login
+ works
+
+2008-04-18 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/views/default/object/blog-comment.php,
+ mod/blog/views/default/object/blog.php,
+ views/default/account/forms/register.php: Removing references to action.php
+
+ * action_handler.php: Searunner?!
+
+2008-04-18 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * action_handler.php, htaccess_dist: Marcus Povey <marcus@dushka.co.uk> *
+ Fixed broken actions code on linux
+
+2008-04-18 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/actions.php: Removing previous
+
+2008-04-18 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * htaccess_dist: Fixed ODD mod-rewrite rules
+
+2008-04-18 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/actions.php: Action debug
+
+ * htaccess_dist, mod/blog/start.php: Fix for page handler bugs
+
+2008-04-17 misja <misja@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * htaccess_dist: Misja Hoebe <misja@curverider.co.uk> Clean up svn cruft
+
+2008-04-16 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php, search/index.php: Introducing search
+
+ * engine/lib/elgglib.php, mod/blog/views/default/object/blog.php: No need
+ for elgg_view_entity to separately load the owner entity
+
+ * engine/lib/entities.php, mod/blog/start.php: ElggEntity->getOwnerUser() ->
+ ElggEntity->getOwnerEntity()
+
+ * mod/blog/start.php, mod/blog/views/default/object/blog.php: URL handling
+ for the blog plugin
+
+ * engine/lib/entities.php: Added the getURL and getOwnerUser methods to
+ ElggEntity (gets the URL to display the current entity and the ElggUser
+ entity that represents the owner respectively)
+
+ * engine/lib/entities.php, engine/lib/users.php, entities/index.php,
+ languages/en.php: Generic entity view system
+
+ * mod/blog/start.php, mod/blog/views/default/object/blog.php: Blog plugin
+ now serves as a fancy URL example
+
+ * views/default/messages/errors/list.php, views/default/messages/list.php,
+ views/default/messages/messages/list.php: Fixing the message views
+
+ * engine/lib/input.php, engine/lib/pagehandler.php: Added better GET query
+ variable handling into the page handler mix
+
+2008-04-15 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _css/css.php, _graphics/blockquote.png, _graphics/footer.gif,
+ _graphics/header.gif, _graphics/sidebar-bottom.gif,
+ _graphics/sidebar-top.gif, css/css.php, engine/lib/pagehandler.php,
+ graphics/blockquote.png, graphics/footer.gif, graphics/header.gif,
+ graphics/sidebar-bottom.gif, graphics/sidebar-top.gif, htaccess_dist,
+ pagehandler.php, views/default/css.php,
+ views/default/page_elements/header.php: Natty page handling functions. See
+ engine/lib/pagehandler.php
+
+2008-04-15 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * htaccess_dist: Marcus Povey <marcus@dushka.co.uk> * Hopefully correct
+ mod-rewrite rules
+
+2008-04-15 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/database.php, engine/lib/entities.php, engine/lib/users.php:
+ get_entities now allows for arrays of GUIDs to be supplied as an owner, and
+ can be asked to count entities rather than return them; as a result,
+ get_user_friends_objects and count_* functionality is also now available
+
+2008-04-15 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * odd/handler.php: Marcus Povey <marcus@dushka.co.uk> * ODD handler added,
+ still needs modrewrite rules to be specified.
+
+2008-04-15 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/actions/comments/delete.php, mod/blog/languages/en.php,
+ mod/blog/start.php, mod/blog/views/default/object/blog-comment.php,
+ mod/blog/views/default/object/blog-comments.php,
+ mod/blog/views/default/object/blog.php: Blog plugin improvements, including
+ delete on comments
+
+ * languages/en.php: A couple of additions to the language file
+
+ * views/default/input/checkboxes.php, views/default/input/file.php,
+ views/default/input/gender.php, views/default/input/longtext.php,
+ views/default/input/password.php, views/default/input/pulldown.php,
+ views/default/input/radio.php, views/default/input/tags.php,
+ views/default/input/text.php, views/default/input/url.php: Cleaning up input
+ field views
+
+ * views/default/output/confirmlink.php, views/default/output/date.php,
+ views/default/output/file.php, views/default/output/gender.php,
+ views/default/output/longtext.php, views/default/output/pulldown.php,
+ views/default/output/tagcloud.php, views/default/output/tags.php,
+ views/default/output/text.php, views/default/output/timestamp.php,
+ views/default/output/url.php: Tidied up output views
+
+2008-04-15 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Removed
+ canedit shortcut
+
+ * engine/lib/relationships.php: Marcus Povey <marcus@dushka.co.uk> *
+ Modified to not throw exception on missing verb conversion
+
+ * engine/lib/relationships.php: Marcus Povey <marcus@dushka.co.uk> *
+ Relationship import
+
+2008-04-15 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/extender.php: Improvement to canEdit() for extenders, which
+ takes into account the canEdit() status of entities the extender is attached
+ to
+
+ * engine/lib/annotations.php, engine/lib/extender.php,
+ engine/lib/metastrings.php: Removing the multiple slash problem on
+ metastrings in extenders
+
+2008-04-15 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/relationships.php: Marcus Povey <marcus@dushka.co.uk> *
+ Relationships export
+
+ * engine/lib/xml.php: Marcus Povey <marcus@dushka.co.uk> * Improved XML to
+ array code
+
+ * engine/lib/export.php: Marcus Povey <marcus@dushka.co.uk> * Minor tweaks
+
+ * engine/lib/extender.php: Marcus Povey <marcus@dushka.co.uk> * Extender
+ import support. * Removed Importable interface on extender, its easier to
+ just use the entity object interface.
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Blocking
+ create and update dates from ODD export, since these don't make sense to
+ export.
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Added
+ optional set multiple on metadata
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Belts and
+ braces
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Entity
+ import.
+
+ * engine/lib/annotations.php, engine/lib/metadata.php: Marcus Povey
+ <marcus@dushka.co.uk> * Using common detect_extender_valuetype function
+
+2008-04-14 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/export.php: Marcus Povey <marcus@dushka.co.uk> * Undone last as
+ it was a bad idea.
+
+ * engine/lib/export.php: Marcus Povey <marcus@dushka.co.uk> * Exception
+ thrown on unrecognised import tag.
+
+ * engine/lib/export.php: Marcus Povey <marcus@dushka.co.uk> * Import
+ functions now deal in ODD!
+
+ * engine/lib/export.php, engine/lib/xml.php: Marcus Povey
+ <marcus@dushka.co.uk> * XML Import processor
+
+ * engine/lib/relationships.php: Marcus Povey <marcus@dushka.co.uk> *
+ Relationships export
+
+ * engine/lib/export.php: Marcus Povey <marcus@dushka.co.uk> * Relationships
+ export
+
+ * engine/lib/export.php: Marcus Povey <marcus@dushka.co.uk> * ODD
+ relationship verb -> relationship mapping functions
+
+ * mod/guidbrowser/index.php, mod/guidbrowser/start.php,
+ .../views/default/guidbrowser/entity_full.php: Marcus Povey
+ <marcus@dushka.co.uk> * Relationships added to GUID browser
+
+ * engine/schema/mysql.sql: Marcus Povey <marcus@dushka.co.uk> *
+ Relationships table brought in line with code... oops
+
+ * engine/lib/annotations.php, engine/lib/entities.php,
+ engine/lib/extender.php, engine/lib/metadata.php: Marcus Povey
+ <marcus@dushka.co.uk> * ODD Annotation and Metadata export
+
+2008-04-11 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/export.php: Marcus Povey <marcus@dushka.co.uk> * Added owner
+ uuid to type
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Fixed
+ subclass
+
+ * engine/lib/export.php: Marcus Povey <marcus@dushka.co.uk> * Comment tweak
+
+ * engine/lib/annotations.php, engine/lib/entities.php,
+ engine/lib/export.php, engine/lib/extender.php, engine/lib/metadata.php,
+ engine/lib/relationships.php: Marcus Povey <marcus@dushka.co.uk> * Entity ODD
+ export
+
+ * engine/lib/xml.php: Marcus Povey <marcus@dushka.co.uk> * Moved XML stuff
+ to xml.php
+
+ * engine/lib/exceptions.php: Marcus Povey <marcus@dushka.co.uk> * Added
+ DataFormatException
+
+ * engine/lib/api.php: Marcus Povey <marcus@dushka.co.uk> * Minor tweak
+
+2008-04-10 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * endpoints/rest.php, engine/lib/api.php, engine/lib/pam.php: Marcus Povey
+ <marcus@dushka.co.uk> * Created PAM library * API moved to use new PAM
+ functions
+
+2008-04-09 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/apitest/index.php, mod/apitest/start.php,
+ mod/apitest/views/default/apitest/configform.php,
+ mod/apitest/views/default/apitest/main.php: Marcus Povey
+ <marcus@dushka.co.uk> * Package header added
+
+ * mod/tasklist/index.php, mod/tasklist/start.php,
+ mod/tasklist/views/default/tasklist/item.php,
+ mod/tasklist/views/default/tasklist/main.php,
+ mod/tasklist/views/default/tasklist/newtask.php: Marcus Povey
+ <marcus@dushka.co.uk> * Package header added
+
+ * mod/exporttest/index.php, mod/exporttest/start.php,
+ mod/exporttest/views/default/exporttest/main.php,
+ .../views/default/exporttest/outputxml.php: Marcus Povey
+ <marcus@dushka.co.uk> * Package header added
+
+ * mod/guidbrowser/languages/en.php, mod/guidbrowser/start.php,
+ .../views/default/guidbrowser/browser.php,
+ .../views/default/guidbrowser/entity.php,
+ .../views/default/guidbrowser/entity_full.php,
+ .../views/default/guidbrowser/newentity.php,
+ .../views/default/guidbrowser/prevnext.php: Marcus Povey
+ <marcus@dushka.co.uk> * Package header added
+
+2008-04-09 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, engine/start.php: Fixed some bugs including a
+ load order patch from Rolando, and an update issue
+
+ * engine/lib/pam.php: Empty PAM include file
+
+2008-04-08 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php, engine/lib/extender.php,
+ engine/lib/metadata.php, engine/schema/mysql.sql: Marcus Povey
+ <marcus@dushka.co.uk> * Simplified extender types, now only supports integer
+ and text - types deamed not to be necessary (yet), also simplifies import and
+ export. * Types better detected.
+
+2008-04-08 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, engine/lib/users.php, engine/start.php:
+ Incorporating setup fixes from Rolando
+
+2008-04-08 misja <misja@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/api.php, engine/lib/cache.php, engine/lib/database.php: Misja
+ Hoebe <misja@curverider.co.uk> More doctag fixes
+
+ * endpoints/rest.php, engine/lib/annotations.php, engine/lib/entities.php,
+ engine/lib/exceptions.php, engine/lib/export.php, engine/lib/extender.php,
+ engine/lib/metadata.php, engine/lib/objects.php, engine/lib/plugins.php,
+ engine/lib/relationships.php, engine/lib/sites.php, engine/lib/users.php:
+ Misja Hoebe <misja@curverider.co.uk> More docstring fixes
+
+ * action.php, engine/lib/annotations.php, engine/lib/sites.php,
+ engine/lib/users.php: Misja Hoebe <misja@curverider.co.uk> Fixing doctags
+
+2008-04-07 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php, engine/lib/metadata.php: Further annotation /
+ metadata fixes
+
+ * views/default/output/tags.php: Improved tag display
+
+ * engine/lib/annotations.php: Fixing undeclared error
+
+ * mod/blog/actions/delete.php, mod/blog/actions/edit.php,
+ mod/blog/languages/en.php, mod/blog/start.php,
+ mod/blog/views/default/object/blog.php: CRUD for blog posts
+
+ * engine/lib/sites.php, engine/lib/users.php: Same bugfix for sites and
+ users
+
+ * engine/lib/elgglib.php, engine/lib/entities.php, engine/lib/objects.php:
+ Further adventures in getting things to delete correctly
+
+ * engine/lib/annotations.php, engine/lib/elgglib.php,
+ engine/lib/entities.php: Further delete and event trigger fixes
+
+ * engine/lib/entities.php: Triggering events on create, update and delete
+ actions on entities
+
+ * engine/lib/annotations.php, engine/lib/extender.php,
+ engine/lib/metadata.php: Properly extensible canEdit functionality for
+ metadata, annotations, and anything else that supports the ElggExtender
+ interface
+
+ * engine/lib/entities.php, engine/lib/metadata.php: Much better handling for
+ deleting entities and metadata
+
+2008-04-04 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/actions/edit.php, mod/blog/edit.php, mod/blog/start.php,
+ mod/blog/views/default/blog/forms/edit.php,
+ mod/blog/views/default/object/blog.php: Blog edit updates
+
+ * views/default/input/tags.php: Updated the tags input field
+
+ * languages/en.php: Adding 'edit' to the language file
+
+ * engine/lib/entities.php: Added $entity->canEdit() (true|false)
+
+ * mod/blog/everyone.php, mod/blog/index.php, mod/blog/languages/en.php,
+ mod/blog/start.php: Introducing the all blog posts page.
+
+ * views/default/output/tags.php: Tweaking the output/tags view
+
+ * engine/lib/entities.php, engine/lib/metadata.php: Added better support for
+ arrays of metadata
+
+ * mod/blog/actions/add.php, mod/blog/views/default/object/blog.php: Added
+ tags to the blog plugin
+
+ * mod/blog/read.php, mod/blog/views/default/blog/notfound.php: Further blog
+ enhancements
+
+2008-04-03 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, engine/lib/relationships.php: Marcus Povey
+ <marcus@dushka.co.uk> * Relationship related code moved to relationships.php
+ * Added ElggRelationship class as wrapper (to help with import and export) *
+ Import and Export relationship code added (NOT TESTED)
+
+ * mod/exporttest/index.php:
+
+ * engine/lib/metadata.php: Marcus Povey <marcus@dushka.co.uk> * Minor text
+ change
+
+2008-04-03 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/actions/comments/add.php, mod/blog/languages/en.php,
+ mod/blog/start.php, mod/blog/views/default/object/blog-comment.php,
+ mod/blog/views/default/object/blog-comments.php,
+ mod/blog/views/default/object/blog.php: Added comments to blog
+
+ * engine/lib/database.php: Added query display to database exceptions
+
+ * engine/lib/sessions.php: Fixed session initialisation issue
+
+2008-04-03 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, engine/lib/extender.php, engine/lib/metadata.php:
+ Marcus Povey <marcus@dushka.co.uk> * Annotations and metadata now imported
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Bugfixes
+
+ * mod/guidbrowser/index.php, mod/guidbrowser/start.php,
+ .../views/default/guidbrowser/browser.php,
+ .../views/default/guidbrowser/entity.php,
+ .../views/default/guidbrowser/entity_full.php,
+ .../views/default/guidbrowser/navbar.php,
+ .../views/default/guidbrowser/prevnext.php: Marcus Povey
+ <marcus@dushka.co.uk> * Basic guid browser
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Added
+ Iterator interface to override foreach behaviour
+
+ * engine/lib/entities.php, engine/lib/objects.php, engine/lib/sites.php,
+ engine/lib/users.php: Marcus Povey <marcus@dushka.co.uk> * Exception thrown
+ if load fails
+
+2008-04-03 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/languages/en.php, mod/blog/read.php,
+ mod/blog/views/default/blog/css.php, mod/blog/views/default/object/blog.php:
+ Blog: extended comment form, etc.
+
+ * engine/lib/elgglib.php: Slight fix for previous
+
+ * engine/lib/elgglib.php: Update for elgg_view_entity
+
+ * engine/lib/database.php: Slight get_data revert
+
+ * views/default/page_elements/header.php: Changing, once again, the way
+ titles work
+
+ * engine/lib/pageowner.php: Pages can now manually override the page owner
+
+ * mod/blog/languages/en.php, mod/blog/start.php,
+ mod/blog/views/default/blog/css.php, mod/blog/views/default/object/blog.php:
+ Adding name and posted date to blog entries
+
+ * mod/blog/index.php, mod/blog/views/default/blog/view.php,
+ mod/blog/views/default/object/blog.php: Blog update: you can post and view
+ blog entries.
+
+ * engine/lib/elgglib.php: Improved elgg_view_entity
+
+2008-04-03 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Cut and
+ paste is a killer
+
+ * engine/lib/plugins.php: Marcus Povey <marcus@dushka.co.uk> * Fixed
+ language autoload
+
+2008-04-02 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/guidbrowser/index.php, mod/guidbrowser/languages/en.php,
+ mod/guidbrowser/start.php, .../views/default/guidbrowser/entity.php,
+ .../views/default/guidbrowser/entity_full.php,
+ .../views/default/guidbrowser/navbar.php,
+ .../views/default/guidbrowser/newentity.php: Marcus Povey
+ <marcus@dushka.co.uk> * End of day
+
+2008-04-02 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/database.php, engine/lib/entities.php, engine/lib/users.php:
+ Assorted entity fixes
+
+ * engine/lib/plugins.php: Plugins now autoregister translations
+
+ * engine/lib/entities.php: Small fix for get_entities
+
+ * mod/blog/actions/add.php, mod/blog/languages/en.php, mod/blog/start.php,
+ mod/blog/views/default/blog/forms/edit.php: Blog posting
+
+2008-04-02 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Access id
+ better handled
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Subtype is
+ converted to its exportable string version
+
+2008-04-02 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/actions.php: Removed some unnecessary debug junk
+
+ * engine/lib/actions.php: Fixed action registration for plugins
+
+2008-04-02 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/exporttest/index.php: Marcus Povey <marcus@dushka.co.uk> * Minor tweak
+ to actually get the command from it all
+
+2008-04-02 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Modified page_draw to behave correctly depending
+ on sessions
+
+ * languages/en.php: Language updates
+
+ * action.php: Removing debug issue
+
+ * action.php: Debug message in actions
+
+ * views/default/account/forms/register.php: Changing the destination of the
+ register form
+
+ * views/default/css.php, views/default/page_elements/header.php: Separating
+ sitename and title in the header
+
+ * views/default/css.php, views/default/input/tags.php,
+ views/default/input/text.php, views/default/input/url.php: Let's make the
+ classes for input elements consistent
+
+ * views/default/pageshells/pageshell.php: Reinstating the side menu
+
+2008-04-02 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * graphics/blockquote.png, graphics/footer.gif, graphics/header.gif,
+ graphics/sidebar-bottom.gif, graphics/sidebar-top.gif, views/default/css.php,
+ views/default/page_elements/footer.php,
+ views/default/pageshells/pageshell.php: basic skin added
+
+2008-04-02 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, engine/schema/mysql.sql: Marcus Povey
+ <marcus@dushka.co.uk> * BUGFIX: User creation * User import functionality
+ working
+
+ * engine/lib/metadata.php: Marcus Povey <marcus@dushka.co.uk> * BUGFIX:
+ Offset/limit
+
+ * engine/lib/annotations.php: Marcus Povey <marcus@dushka.co.uk> * Value to
+ value_id
+
+ * mod/exporttest/views/default/exporttest/main.php: Marcus Povey
+ <marcus@dushka.co.uk> * Now using method=post
+
+ * engine/lib/entities.php, mod/tasklist/start.php: Marcus Povey
+ <marcus@dushka.co.uk> * REMOVED DEBUG * WARNING!!! THERE IS A PHP BUG ON
+ UBUNTU/APACHE2/PHP5 that will prevent metadata from functioning. Values
+ appear to get unset. No fix known.
+
+ * engine/lib/entities.php:
+
+ * mod/tasklist/start.php:
+
+ * mod/tasklist/start.php:
+
+ * mod/tasklist/start.php:
+
+ * engine/lib/entities.php, engine/lib/metadata.php:
+
+ * engine/lib/entities.php:
+
+ * engine/lib/entities.php:
+
+ * engine/lib/entities.php:
+
+ * mod/tasklist/start.php: debug
+
+ * engine/lib/entities.php: removed debug
+
+ * engine/lib/entities.php: debug
+
+ * engine/lib/entities.php: debug
+
+ * engine/lib/metadata.php: debug
+
+ * engine/lib/annotations.php, engine/lib/metadata.php: Marcus Povey
+ <marcus@dushka.co.uk> * Entity type/ subtype functional
+
+ * engine/lib/metadata.php: Marcus Povey <marcus@dushka.co.uk> *
+ get_metadata_byname better handles single/multiple return values
+
+ * mod/tasklist/start.php, mod/tasklist/views/default/tasklist/newtask.php:
+
+ * engine/lib/metadata.php: Marcus Povey <marcus@dushka.co.uk> *
+ get_metadata_byname better handles single/multiple return values
+
+2008-04-02 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/index.php: Slight change to blogs
+
+2008-04-02 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/metadata.php: debug
+
+ * engine/lib/metadata.php: removed debug
+
+ * engine/lib/metadata.php: debug
+
+ * mod/tasklist/index.php, mod/tasklist/start.php: test
+
+2008-04-02 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * htaccess_dist: htaccess dist
+
+ * engine/lib/users.php: Small fix
+
+ * engine/lib/pageowner.php: Smaller version of previous
+
+ * engine/lib/pageowner.php: Introducing page_owner_entity
+
+ * engine/lib/friends.php: Removing the friends module (it's unnecessary)
+
+ * engine/lib/pageowner.php: Fix to previous
+
+ * engine/lib/pageowner.php: Reverting page_owner
+
+2008-04-01 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/export.php: Marcus Povey <marcus@dushka.co.uk> * End of day...
+
+ * engine/lib/annotations.php, engine/lib/extender.php,
+ engine/lib/metadata.php: Marcus Povey <marcus@dushka.co.uk> * Moved common
+ functionality of metadata and annotations into superclass.
+
+2008-04-01 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php, mod/blog/add.php, mod/blog/edit.php, mod/blog/index.php,
+ mod/blog/languages/en.php, mod/blog/start.php,
+ mod/blog/views/default/blog/forms/edit.php: Further adventures in blogging;
+ saving for now
+
+ * mod/blog/index.php, mod/blog/languages/en.php, mod/blog/start.php,
+ views/default/welcome/logged_in.php: Blog mod and welcome screen updates
+
+ * engine/lib/pageowner.php: Update to docs for previous
+
+ * engine/lib/pageowner.php, engine/lib/users.php: page_owner() now returns
+ an ElggUser or false
+
+ * views/default/navigation/toolbox.php: Modified toolbox to display menu
+ items correctly
+
+ * engine/lib/elgglib.php: Fixed the menu item function
+
+2008-04-01 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * index.php: Marcus Povey <marcus@dushka.co.uk> * Removed debug
+
+2008-04-01 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/languages.php: Added the register_languages function, for
+ easier loading of language files from plugins
+
+ * actions/register.php, engine/lib/entities.php, engine/lib/sessions.php,
+ engine/lib/users.php: Registration, login, logout work. Victory!
+
+ * views/default/account/forms/register.php: Registration form update
+
+ * engine/lib/users.php: Updated the registration function
+
+ * languages/en.php, register.php, views/default/account/forms/login.php,
+ views/default/account/forms/register.php, views/default/login.php,
+ views/default/welcome/logged_out.php: Further adventures in registration
+
+2008-04-01 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/export.php: Marcus Povey <marcus@dushka.co.uk> * Some UUID
+ functions
+
+2008-04-01 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/login.php, actions/logout.php, actions/register.php,
+ engine/lib/entities.php, engine/lib/users.php, languages/en.php,
+ views/default/login.php: User registration gubbins
+
+2008-04-01 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Used wrong
+ function decl
+
+ * mod/exporttest/index.php,
+ mod/exporttest/views/default/exporttest/main.php: Marcus Povey
+ <marcus@dushka.co.uk> * Added import block
+
+ * engine/lib/users.php: Marcus Povey <marcus@dushka.co.uk> * Moved import to
+ ElggEntity
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Moved import
+ to ElggEntity
+
+2008-04-01 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/sessions.php, languages/en.php,
+ views/default/navigation/topmenu.php, views/default/page_elements/header.php,
+ views/default/welcome.php, views/default/welcome/logged_in.php,
+ views/default/welcome/logged_out.php: Fixed some session stuff, modified a
+ few views
+
+2008-04-01 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Moved import
+ to ElggEntity
+
+ * engine/lib/users.php: Marcus Povey <marcus@dushka.co.uk> * Moved import to
+ ElggEntity
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Entities
+ owner_guid exported as owner_uuid
+
+2008-03-31 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/export.php: Marcus Povey <marcus@dushka.co.uk> * Tidied up
+ comments
+
+ * engine/lib/export.php: Marcus Povey <marcus@dushka.co.uk> * Somewhat more
+ robust import logic
+
+ * engine/lib/annotations.php, engine/lib/metadata.php: Marcus Povey
+ <marcus@dushka.co.uk> * Owner guid converted to a uuid
+
+ * engine/lib/export.php: Marcus Povey <marcus@dushka.co.uk> * Initial xml
+ import.
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Export of
+ entities now includes uuid
+
+2008-03-31 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/test/graphics/elgg.powered.png, mod/test/graphics/leaf.jpg,
+ mod/test/graphics/logo.png, mod/test/graphics/orange_small.png,
+ mod/test/graphics/purplecrayon.gif, mod/test/index.php, mod/test/start.php,
+ mod/test/views/default/css.php, mod/test/views/default/menu.php,
+ mod/test/views/default/pageshells/pageshell.php,
+ mod/test/views/default/testplugin/pageshell.php: Removing the mod/test
+ plugin. It doesn't need to be here...
+
+2008-03-31 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/configuration.php: Marcus Povey <marcus@dushka.co.uk> *
+ Reverted regression
+
+2008-03-29 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/export.php: Marcus Povey <marcus@dushka.co.uk> * No such entity
+ error thrown if invalid guid given for export
+
+2008-03-28 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php, engine/lib/api.php, engine/lib/entities.php,
+ engine/lib/export.php, engine/lib/metadata.php, index.php: Marcus Povey
+ <marcus@dushka.co.uk> * Metadata and Annotations now exported.
+
+ * engine/start.php: Marcus Povey <marcus@dushka.co.uk> * Preloads export
+ library - todo: do this better!
+
+ * engine/lib/api.php: Marcus Povey <marcus@dushka.co.uk> *
+
+ * mod/exporttest/index.php, mod/exporttest/start.php,
+ mod/exporttest/views/default/exporttest/main.php,
+ .../views/default/exporttest/outputxml.php: Marcus Povey
+ <marcus@dushka.co.uk> * Export test
+
+ * engine/lib/entities.php, engine/lib/export.php: Marcus Povey
+ <marcus@dushka.co.uk> * Export functionality for ElggEntity and children
+
+ * engine/lib/elgglib.php: Marcus Povey <marcus@dushka.co.uk> * Whitespace
+
+ * engine/lib/api.php: Marcus Povey <marcus@dushka.co.uk> * Using export()
+ instead of toStdClass()
+
+2008-03-28 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Corresponding fix for register_plugin_hook
+
+ * engine/lib/elgglib.php: Fix for trigger_plugin_hook
+
+ * engine/lib/configuration.php: Autoconfiguration update .. again
+
+ * engine/lib/elgglib.php: Some extra params for elgg_view_entity
+
+ * engine/lib/elgglib.php: Added elgg_view_entity(ElggEntity $entity) to
+ intelligently display entities
+
+2008-03-28 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/api.php: Marcus Povey <marcus@dushka.co.uk> * Moved XML
+ serialisation functions to export.php
+
+2008-03-28 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Added custom return values to trigger_plugin_hook
+
+ * engine/lib/elgglib.php: Some extra documentation
+
+ * engine/lib/elgglib.php: Plugin hooks
+
+2008-03-27 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/export.php: Marcus Povey <marcus@dushka.co.uk> * Sketch
+ import/export functions added, pending event handling functions
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Array
+ support added
+
+ * engine/lib/metadata.php: Marcus Povey <marcus@dushka.co.uk> * Add / update
+ meta from array
+
+ * engine/lib/metadata.php: Marcus Povey <marcus@dushka.co.uk> * Multiple
+ meta tag support (requires db schema change)
+
+ * engine/schema/mysql.sql: Marcus Povey <marcus@dushka.co.uk> * Removed sql
+ restriction to allow multiple tag entries
+
+2008-03-26 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/apitest/index.php, mod/apitest/start.php,
+ mod/apitest/views/default/apitest/configform.php,
+ mod/apitest/views/default/apitest/main.php: Marcus Povey
+ <marcus@dushka.co.uk> * Basic API testrig
+
+2008-03-25 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, engine/schema/mysql.sql: Marcus Povey
+ <marcus@dushka.co.uk> * Subtype subclass instantiation
+
+ * engine/lib/cache.php: Marcus Povey <marcus@dushka.co.uk> * IO Exception if
+ cache directory doesn't exist
+
+ * engine/lib/api.php: Marcus Povey <marcus@dushka.co.uk> * Removed debug.
+
+ * engine/lib/api.php: Marcus Povey <marcus@dushka.co.uk> * Array support
+ added to api
+
+ * engine/lib/api.php: Marcus Povey <marcus@dushka.co.uk> * Call method now
+ specified in api
+
+2008-03-22 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Whitespace
+ removed
+
+2008-03-21 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/api.php: Marcus Povey <marcus@dushka.co.uk> * Tweak for
+ unrecognised output format handling
+
+2008-03-20 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/tasklist/index.php: Marcus Povey <marcus@dushka.co.uk> * tags
+
+ * engine/lib/annotations.php, engine/schema/mysql.sql: Marcus Povey
+ <marcus@dushka.co.uk> * Annotations now using metastrings table for name_ids
+ * Stupid amounts of whitespace removed
+
+ * engine/lib/entities.php, engine/lib/metadata.php, engine/schema/mysql.sql:
+ Marcus Povey <marcus@dushka.co.uk> * Metadata now using metastrings *
+ Entities will now throw an exception when creation is attempted with no owner
+
+ * mod/tasklist/index.php, mod/tasklist/views/default/tasklist/newtask.php:
+ Marcus Povey <marcus@dushka.co.uk> * Tags
+
+ * engine/lib/api.php: Marcus Povey <marcus@dushka.co.uk> * a/cvs/csv ...
+ oops
+
+ * engine/lib/cache.php: Marcus Povey <marcus@dushka.co.uk> * Age checking on
+ cache.
+
+2008-03-19 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/api.php: Marcus Povey <marcus@dushka.co.uk> * Exports working
+ system.api.list
+
+ * engine/lib/api.php: Marcus Povey <marcus@dushka.co.uk> * Removed warning
+ when calling undeclaired functions
+
+ * endpoints/rest.php: Marcus Povey <marcus@dushka.co.uk> * Added some
+ default values - these should be removed!
+
+ * engine/lib/api.php: Marcus Povey <marcus@dushka.co.uk> * Using simple
+ cache for replay protection... still need to clear cache of old files etc.
+
+ * engine/lib/cache.php: Marcus Povey <marcus@dushka.co.uk> * Cache no longer
+ using matrix directory due to issues with mkdir.
+
+ * endpoints/rest.php: Marcus Povey <marcus@dushka.co.uk> * Added expose and
+ call functions.
+
+ * engine/lib/api.php: Marcus Povey <marcus@dushka.co.uk> * Added expose and
+ call functions.
+
+ * endpoints/rest.php, engine/lib/api.php, index.php: Marcus Povey
+ <marcus@dushka.co.uk> * API now uses PAM
+
+2008-03-18 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * endpoints/rest.php, engine/lib/api.php: Marcus Povey <marcus@dushka.co.uk>
+ * API now supporting pluggable output format
+
+ * mod/tasklist/index.php, mod/tasklist/start.php,
+ mod/tasklist/views/default/tasklist/item.php,
+ mod/tasklist/views/default/tasklist/main.php,
+ mod/tasklist/views/default/tasklist/newtask.php: Marcus Povey
+ <marcus@dushka.co.uk> * Added VERY simple tasklist plugin.
+
+ * engine/lib/metadata.php: Marcus Povey <marcus@dushka.co.uk> * Final tweaks
+
+ * engine/lib/metadata.php: Marcus Povey <marcus@dushka.co.uk> * Moved order
+ and limit the right way
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Get Metadata
+ now actually works
+
+ * engine/lib/annotations.php, engine/lib/metadata.php: Marcus Povey
+ <marcus@dushka.co.uk> * Modified to better deal with metastrings table
+
+ * engine/schema/mysql.sql: Marcus Povey <marcus@dushka.co.uk> * Value to
+ value_id
+
+2008-03-17 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php: Marcus Povey <marcus@dushka.co.uk> * getOwner now
+ consistent with class hierachy
+
+ * engine/lib/objects.php, engine/lib/users.php: Marcus Povey
+ <marcus@dushka.co.uk> * getOwner now consistent with class hierachy
+
+ * engine/lib/annotations.php: Marcus Povey <marcus@dushka.co.uk> * Fixed sql
+ error on clear annotaitons
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * limit/offset
+ the wrong way round
+
+ * engine/schema/mysql.sql: Marcus Povey <marcus@dushka.co.uk> * guid not
+ needed in subtype since this is just a label.
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * BUGFIX:
+ Added config
+
+ * engine/lib/sessions.php, engine/lib/users.php: Marcus Povey
+ <marcus@dushka.co.uk> * Some minor tweaks
+
+ * engine/lib/configuration.php: Marcus Povey <marcus@dushka.co.uk> *
+ Reverted regression caused by previous revision
+
+2008-03-15 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/sessions.php, engine/lib/users.php: Session functionality,
+ hello again!
+
+2008-03-14 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/access.php, engine/lib/languages.php: Marcus Povey
+ <marcus@dushka.co.uk> * Removed error outputs * Fixed languages
+
+ * engine/lib/access.php: Marcus Povey <marcus@dushka.co.uk> * Made site test
+ conditional to remove debug message
+
+2008-03-14 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/objects.php: A quick syntax fix for objects
+
+2008-03-14 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php, engine/lib/entities.php: Marcus Povey
+ <marcus@dushka.co.uk> * Get and set annotations seem to be working
+
+ * engine/lib/annotations.php, engine/lib/entities.php: Marcus Povey
+ <marcus@dushka.co.uk> * Get annotations
+
+2008-03-14 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php, engine/lib/usersnew.php: Whoops, that should be
+ users.php
+
+ * engine/lib/usersnew.php: Removed a needless comment
+
+ * engine/lib/usersnew.php: New users module
+
+ * engine/lib/entities.php, engine/lib/objects.php, engine/lib/users.php:
+ Adding a couple of extra functions, deleting the old users module
+
+2008-03-14 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php, engine/lib/entities.php: Marcus Povey
+ <marcus@dushka.co.uk> * Annotations added
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Added
+ average calcs
+
+ * engine/lib/sites.php: Marcus Povey <marcus@dushka.co.uk> * Removed debug
+
+ * engine/lib/entities.php, engine/lib/metadata.php, index.php: Marcus Povey
+ <marcus@dushka.co.uk> * Metadata code
+
+2008-03-14 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/objects.php: Added new objects class
+
+ * engine/lib/entities.php, engine/lib/objects.php: Removing old objects
+ class
+
+2008-03-14 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/metastrings.php: Marcus Povey <marcus@dushka.co.uk> *
+ Metastrings modified for new schema
+
+ * engine/lib/sites.php: Marcus Povey <marcus@dushka.co.uk> * Belts and
+ braces
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Belts and
+ braces
+
+2008-03-13 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/database.php: Marcus Povey <marcus@dushka.co.uk> * Use
+ $CONFIG->debug = true to enable query profiling
+
+ * engine/lib/entities.php, engine/lib/sites.php: Marcus Povey
+ <marcus@dushka.co.uk> * Finally got sites to load :)
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Undone
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Owner ID
+ detected if not specified.
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Now saves
+
+ * engine/schema/mysql.sql: Marcus Povey <marcus@dushka.co.uk> * Access
+ control fields ok
+
+ * engine/lib/access.php: Marcus Povey <marcus@dushka.co.uk> * Access using
+ new schema
+
+ * engine/schema/mysql.sql: Marcus Povey <marcus@dushka.co.uk> * Added access
+ groups
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Fixed insert
+ SQL
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Types
+ initialised for first time creation
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Bugfix:
+ getMetaData
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Bugfix:
+ setMetaData
+
+ * engine/schema/mysql.sql: Marcus Povey <marcus@dushka.co.uk> * Made URL
+ unique
+
+ * engine/lib/sites.php: Marcus Povey <marcus@dushka.co.uk> * Commented out
+ sites_init - this needs to be rewritten!
+
+ * engine/lib/sites.php: Marcus Povey <marcus@dushka.co.uk> * Added ElggSite
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Added
+ relationship code
+
+ * engine/lib/entities.php, engine/schema/mysql.sql: Marcus Povey
+ <marcus@dushka.co.uk> * Removed site_guid references, since this should be
+ handled by relationships
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Ooops...
+ forgot access controls
+
+ * engine/schema/mysql.sql: Marcus Povey <marcus@dushka.co.uk> * Changed a
+ couple of table names
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Added
+ delete_entity
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Initial
+ framework of ElggEntity code
+
+ * engine/schema/mysql.sql: Marcus Povey <marcus@dushka.co.uk> * A little bit
+ of extra info.
+
+ * engine/schema/mysql.sql: Marcus Povey <marcus@dushka.co.uk> * Made subtype
+ a unique key
+
+ * engine/schema/mysql.sql: Marcus Povey <marcus@dushka.co.uk> * New database
+ schema. THIS IS A FLAG DAY!
+
+2008-03-13 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Added the ability to set an alternative template
+ handler
+
+2008-03-12 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/metadata.php: Marcus Povey <marcus@dushka.co.uk> * Multiple
+ searches.
+
+ * engine/lib/annotations.php:
+
+ * engine/lib/annotations.php, engine/lib/metadata.php,
+ engine/lib/metastrings.php, engine/lib/sites.php, index.php: Marcus Povey
+ <marcus@dushka.co.uk> * Subtyping on annotations and metadata
+
+ * engine/lib/database.php: Marcus Povey <marcus@dushka.co.uk> * BUGFIX:
+ get_data now catches mysql_errors
+
+2008-03-12 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/actions.php, mod/test/start.php: Actions fix
+
+ * engine/lib/actions.php, engine/lib/objects.php, languages/en.php,
+ mod/test/index.php, mod/test/start.php,
+ mod/test/views/default/testplugin/pageshell.php: Language updates
+
+2008-03-12 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Added
+ get_entity_subtypes function
+
+ * engine/schema/mysql.sql: Marcus Povey <marcus@dushka.co.uk> * object_*
+ changed to entity_* in metadata and annotations
+
+2008-03-12 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/schema/mysql.sql: Fixing incorrect primary key
+
+ * engine/schema/mysql.sql, mod/test/index.php: Fixing incorrect primary key
+
+ * engine/lib/access.php, engine/lib/objects.php, mod/test/index.php: Updates
+ to both objects (in order to be able to resave type properly) and access (to
+ add useful constants)
+
+2008-03-12 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/schema/mysql.sql: Marcus Povey <marcus@dushka.co.uk> * object_*
+ changed to entity_* in metadata and annotations
+
+ * engine/lib/annotations.php, engine/lib/metadata.php: Marcus Povey
+ <marcus@dushka.co.uk> * object_* changed to entity_*
+
+2008-03-11 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/test/views/default/css.php,
+ mod/test/views/default/pageshells/pageshell.php: tweak to ben's elgg 0.2
+ theme plugin
+
+2008-03-11 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/test/graphics/elgg.powered.png, mod/test/graphics/leaf.jpg,
+ mod/test/graphics/logo.png, mod/test/graphics/orange_small.png,
+ mod/test/graphics/purplecrayon.gif, mod/test/views/default/css.php,
+ mod/test/views/default/menu.php,
+ mod/test/views/default/pageshells/pageshell.php,
+ views/default/navigation/toolbox.php: Adding a friendly old template to the
+ test plugin
+
+2008-03-11 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/cache.php: Marcus Povey <marcus@dushka.co.uk> * File cache
+ outline
+
+2008-03-11 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: css tweak
+
+ * index.php, mod/dashboard/views/default/dashboard/welcome.php: index page
+ changes so it now logs you into the dashboard
+
+ * mod/dashboard/index.php, mod/dashboard/start.php,
+ mod/dashboard/views/default/dashboard/welcome.php, views/default/css.php,
+ views/default/navigation/topmenu.php: css, dashboard and topmenu tweaks
+
+2008-03-11 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, engine/lib/plugins.php, mod/test/index.php: Fixes
+ for previous
+
+ * engine/lib/elgglib.php, engine/lib/plugins.php, mod/test/index.php,
+ mod/test/start.php: God bless 'em! Plugins now autoregister their own views.
+
+2008-03-11 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php, engine/lib/metadata.php: Marcus Povey
+ <marcus@dushka.co.uk> * Removed subtypes until problems with tag system are
+ sorted out.
+
+ * engine/lib/annotations.php, engine/lib/metadata.php: Marcus Povey
+ <marcus@dushka.co.uk> * Added orderby and limits
+
+2008-03-11 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Page_draw echoes
+
+2008-03-11 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/cache.php: Marcus Povey <marcus@dushka.co.uk> * ElggCache
+ superclass
+
+ * engine/lib/metadata.php: Marcus Povey <marcus@dushka.co.uk> * Value type
+ added
+
+2008-03-11 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php: user_info() ftw
+
+2008-03-11 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/api.php: Marcus Povey <marcus@dushka.co.uk> * Added api to list
+ apis
+
+2008-03-11 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/pageowner.php, engine/lib/users.php: Et voila: page ownership!
+
+ * engine/lib/elgglib.php, views/default/pageshell.php,
+ views/default/pageshells/pageshell.php: The pageshell now correctly passes
+ elements to the header, footer etc.
+
+ * mod/test/index.php: Minor test plugin fix
+
+ * engine/lib/elgglib.php, views/default/navigation/toolbox.php: Menu items
+ fix
+
+ * mod/test/start.php: Initial test plugin menu items
+
+ * views/default/navigation/toolbox.php: Toolbox navigation edit
+
+ * engine/lib/elgglib.php: Registers and menu items
+
+2008-03-11 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * endpoints/rest.php, engine/lib/api.php: Marcus Povey <marcus@dushka.co.uk>
+ * Site id specified
+
+ * engine/lib/sites.php: Marcus Povey <marcus@dushka.co.uk> * Removed log
+
+ * engine/lib/annotations.php, engine/lib/metadata.php,
+ engine/lib/metastrings.php, engine/schema/mysql.sql: Marcus Povey
+ <marcus@dushka.co.uk> * Added metadata/metastrings tag stuff. Lorks.
+
+ * engine/schema/mysql.sql: Marcus Povey <marcus@dushka.co.uk> * Fixed db
+ problems
+
+ * engine/schema/mysql.sql: Marcus Povey <marcus@dushka.co.uk> * Removed
+ count based on this conversation: [10:05:38] … basically, if you add an
+ item, you need to create a tag entry in the metastrings table (as discussed
+ yesterday) [10:05:56] … if you then delete the item, that leaves a tag
+ [10:06:07] … if you want to delete the tag when nothing references it
+ [10:06:11] … it needs a counter [10:06:29] … which means for every add
+ and delete query you need to check for and sometimes update this counter
+ [10:06:36] … making three queries for every one [10:06:47] … but if you
+ don't do that the meta strings table grows over time [10:06:54] … making it
+ space inefficient [10:07:03] … so, which do you do? [10:10:31] … ?
+ [10:10:43] … i'd be tempted to not delete [10:10:58] … because the
+ multiple queries will be a pain for everyone all the time [10:11:05] … and
+ storage costs are cheap [10:11:32] Ben Werdmuller: I would be very tempted to
+ do the same [10:11:35] … so let's do that :) [10:11:36] Marcus Povey: maybe
+ we could write an admin script to clean up or something [10:11:45] Ben
+ Werdmuller: exactly, we could clean up on a cron if people really want
+ [10:11:59] … but for now, let's just go with the growing tag cloud
+
+2008-03-10 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/login.php, actions/logout.php, engine/lib/languages.php,
+ languages/en.php, views/default/login.php,
+ views/default/navigation/topmenu.php, views/default/page_elements/footer.php,
+ views/default/welcome.php: More language integration
+
+ * actions/login.php, actions/logout.php, engine/lib/languages.php,
+ languages/en.php: Languages! There's a little more to do, but ...
+
+2008-03-10 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/schema/mysql.sql: Marcus Povey <marcus@dushka.co.uk> * Added count
+
+ * engine/schema/mysql.sql: Marcus Povey <marcus@dushka.co.uk> * Changed
+ metadata database to use metastrings as described (all values in metadata are
+ now storing data only once)
+
+ * endpoints/rest.php, engine/lib/api.php: Marcus Povey <marcus@dushka.co.uk>
+ * First draft api
+
+2008-03-10 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/sites.php: Updated ref to get_objects
+
+ * engine/lib/sites.php: Fixing access permissions error on site update
+
+ * engine/lib/objects.php: Updated objects with metadata and annotations
+
+2008-03-10 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * endpoints/rest.php, engine/lib/api.php, engine/lib/users.php,
+ engine/schema/mysql.sql, index.php: Marcus Povey <marcus@dushka.co.uk> *
+ Tokens and execute code added to api
+
+2008-03-10 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/navigation/toolbox.php,
+ views/default/navigation/topmenu.php, views/default/page_elements/header.php:
+ top level navigation added
+
+ * views/default/text/about.php, views/default/text/privacy_view.php,
+ views/default/text/tos_view.php: changes to the text pages
+
+ * engine/lib/elgglib.php, views/default/basic_elements/login.php,
+ views/default/basic_elements/welcome.php, views/default/css.php,
+ views/default/input/checkboxes.php, views/default/input/file.php,
+ views/default/input/gender.php, views/default/input/longtext.php,
+ views/default/input/password.php, views/default/input/pulldown.php,
+ views/default/input/radio.php, views/default/input/tags.php,
+ views/default/input/text.php, views/default/input/url.php,
+ views/default/navigation/toolbox.php, views/default/navigation/topmenu.php,
+ views/default/output/date.php, views/default/output/file.php,
+ views/default/output/gender.php, views/default/output/longtext.php,
+ views/default/output/pulldown.php, views/default/output/tagcloud.php,
+ views/default/output/tags.php, views/default/output/text.php,
+ views/default/output/timestamp.php, views/default/output/url.php,
+ views/default/page_elements/footer.php,
+ views/default/page_elements/header.php,
+ views/default/pageshells/pageshell.php,
+ views/default/pageshells/pageshell_loggedout.php,
+ views/default/pageshells/pageshell_sidebar.php, views/default/text/about.php,
+ views/default/text/privacy_view.php, views/default/text/tos_view.php: some
+ new views
+
+2008-03-10 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/login.php, engine/lib/users.php: Adding metadata and annotations
+ for users.
+
+2008-03-10 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/sites.php: Marcus Povey <marcus@dushka.co.uk> * Erp
+
+2008-03-10 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/welcome.php: logout bug fix
+
+2008-03-10 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/sites.php:
+
+ * engine/lib/annotations.php, engine/lib/sites.php: Marcus Povey
+ <marcus@dushka.co.uk> * Simple maths functions added
+
+ * engine/lib/sites.php: Marcus Povey <marcus@dushka.co.uk> * Site objects
+
+2008-03-10 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/login.php, actions/logout.php, engine/lib/actions.php,
+ engine/lib/elgglib.php, engine/lib/users.php,
+ views/default/messages/list.php, views/default/messages/messages/list.php,
+ views/default/pageshell.php: Messages and actions: fixed!
+
+2008-03-10 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/sites.php: Marcus Povey <marcus@dushka.co.uk> * Remove site
+ metadata
+
+ * engine/lib/sites.php: Marcus Povey <marcus@dushka.co.uk> * Get user sites
+
+2008-03-10 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/login.php, views/default/login.php: Fixing the login form
+
+2008-03-09 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * index.php: Marcus Povey <marcus@dushka.co.uk> * Commented out my testing
+
+ * engine/lib/annotations.php:
+
+ * engine/lib/sites.php: Marcus Povey <marcus@dushka.co.uk> * Fixed copy
+ constructor
+
+ * engine/lib/metadata.php: Marcus Povey <marcus@dushka.co.uk> * Will now
+ return objects via metadata
+
+ * engine/schema/mysql.sql:
+
+ * engine/schema/mysql.sql: Marcus Povey <marcus@dushka.co.uk> * Corrected
+ database fault
+
+2008-03-08 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/settings.example.php: add url field to settings
+
+ * views/default/css.php: css tweak
+
+ * actions/login.php, actions/logout.php, engine/lib/users.php, index.php,
+ views/default/css.php, views/default/login.php, views/default/pageshell.php,
+ views/default/welcome.php: crude login and logout functionality
+
+2008-03-08 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/metadata.php: Marcus Povey <marcus@dushka.co.uk> * Added
+ get_objects_from_metadatas (untested)
+
+2008-03-08 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/configuration.php, mod/test/index.php: Configuration fix
+
+2008-03-08 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/vendors/jquery/jquery.js: jquery added to core
+
+2008-03-07 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/metadata.php: Marcus Povey <marcus@dushka.co.uk> * Add name and
+ value to get_metadatas
+
+2008-03-07 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php: Log in and logout
+
+ * mod/test/start.php, mod/test/views/default/testplugin/pageshell.php: Test
+ plugin
+
+ * engine/lib/elgglib.php: Event API fix
+
+ * engine/lib/plugins.php, engine/start.php: Some extra plugins stuff
+
+ * engine/lib/users.php: Grabbing the ElggUser and sticking it in the session
+ as appropriate
+
+ * engine/lib/friends.php, engine/lib/users.php, engine/schema/mysql.sql,
+ index.php: Users and friends
+
+ * engine/lib/sites.php: Fix for ElggSites
+
+2008-03-07 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * endpoints/rest.php, engine/lib/api.php, engine/schema/mysql.sql: Marcus
+ Povey <marcus@dushka.co.uk> * Initial work on API
+
+2008-03-06 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php, engine/lib/sites.php: Marcus Povey
+ <marcus@dushka.co.uk> * Added delete annotations, fixed error on annotation
+ search (missing params)
+
+ * engine/lib/sites.php: Marcus Povey <marcus@dushka.co.uk> * Delete site
+ implemented
+
+ * engine/lib/sites.php: Marcus Povey <marcus@dushka.co.uk> * Count added
+
+ * engine/lib/annotations.php, engine/lib/metadata.php: Marcus Povey
+ <marcus@dushka.co.uk> * Casting done
+
+ * engine/lib/annotations.php: Marcus Povey <marcus@dushka.co.uk> * Updated
+
+ * engine/lib/annotations.php: Marcus Povey <marcus@dushka.co.uk> * Added
+ count to annotations
+
+ * engine/lib/objects.php: Marcus Povey <marcus@dushka.co.uk> * Casting takes
+ advantage of constructor
+
+ * engine/lib/annotations.php, engine/lib/metadata.php, engine/lib/sites.php,
+ index.php: Marcus Povey <marcus@dushka.co.uk> * Initial annotations and
+ metadata get/sets functional, combined with site test
+
+ * engine/lib/annotations.php: Marcus Povey <marcus@dushka.co.uk> * Can
+ retrieve annotations
+
+ * engine/lib/metadata.php: Marcus Povey <marcus@dushka.co.uk> * Metadata
+ creates and updates
+
+ * engine/lib/metadata.php: Marcus Povey <marcus@dushka.co.uk> * Meta now
+ updates if item already exists (if the user has permission)
+
+2008-03-06 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/objects.php: Objects are now cast to ElggObjects on get
+
+2008-03-06 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php, engine/lib/metadata.php: Marcus Povey
+ <marcus@dushka.co.uk> * Cleared up typo
+
+ * engine/lib/annotations.php: Marcus Povey <marcus@dushka.co.uk> * User ID
+ detected if not provided
+
+ * engine/lib/annotations.php: Marcus Povey <marcus@dushka.co.uk> * Very
+ crude type detection for annotation tags, defaults to 'tag'
+
+ * engine/lib/sites.php: Marcus Povey <marcus@dushka.co.uk> * Implemented
+ update site
+
+ * engine/lib/annotations.php: Marcus Povey <marcus@dushka.co.uk> * Ability
+ to change owner
+
+ * engine/lib/metadata.php: Marcus Povey <marcus@dushka.co.uk> * Ability to
+ change owner
+
+ * engine/lib/annotations.php, engine/lib/metadata.php,
+ engine/lib/objects.php: Marcus Povey <marcus@dushka.co.uk> * Fixed get/sets
+
+ * engine/lib/objects.php: Fixed ElggObject attributes.
+
+ * engine/schema/mysql.sql:
+
+ * engine/schema/mysql.sql: Marcus Povey <marcus@dushka.co.uk> * Removed
+ write access id on sites since it seemed superfluous
+
+2008-03-05 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php, engine/lib/metadata.php, engine/lib/sites.php,
+ index.php: End of day
+
+ * engine/lib/database.php: Marcus Povey <marcus@dushka.co.uk> * Sanitise
+ trims as well
+
+ * engine/lib/exceptions.php: Marcus Povey <marcus@dushka.co.uk> * A couple
+ more exceptions
+
+ * engine/lib/elgglib.php: Marcus Povey <marcus@dushka.co.uk> * Exceptions
+ that are handled by the default elgg error handler are now echoed to the
+ error log.
+
+ * engine/lib/annotations.php, engine/lib/metadata.php: Minor tweaks
+
+ * engine/lib/annotations.php, engine/lib/metadata.php: Switching to desktop
+
+ * engine/lib/annotations.php, engine/lib/metadata.php: Types forced on
+ $object->value
+
+ * engine/lib/metadata.php: Added metadata object and methods
+
+ * engine/schema/mysql.sql: Added owner id to metadata
+
+ * engine/lib/annotations.php, engine/lib/sites.php: Changed
+ mysql_real_escape_string to sanitise_string
+
+ * engine/lib/annotations.php: Get annotations
+
+2008-03-04 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/metadata.php: Commit so i can switch to the laptop...
+
+ * engine/lib/annotations.php: initial annotations library added (untested)
+
+ * engine/schema/mysql.sql: Added metadata and annotations, removed
+ superfluous tables.
+
+ * engine/lib/sites.php:
+
+ * engine/lib/sites.php: Get site prototype
+
+ * engine/lib/sites.php: Save
+
+ * engine/lib/sites.php: Added a basic ElggSite outline
+
+2008-03-03 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/objects.php: Further additions to the ElggObject, according to
+ spec
+
+2008-03-03 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/schema/mysql.sql: new site db
+
+ * engine/lib/database.php: Fixed get_tables so install works correctly
+
+ * engine/lib/configuration.php: Fixed wwwroot
+
+2008-03-03 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/objects.php: Extending stdClass is silly
+
+ * engine/lib/configuration.php, engine/lib/elgglib.php: Removed some notices
+
+ * engine/lib/database.php: Fixed install issue
+
+2008-03-03 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: removed echo
+
+2008-03-03 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/configuration.php, engine/lib/database.php,
+ engine/schema/mysql.sql, engine/settings.example.php, engine/start.php:
+ Installation issues: fixed
+
+2008-03-03 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Fixed short circuit comparison
+
+2008-03-03 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Some further fixes
+
+ * engine/lib/elgglib.php: Views directory fix
+
+2008-03-03 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Fixed file exist error
+
+ * engine/lib/elgglib.php: Removed test to see if .htaccess exists, this test
+ doesn't work on my machine. Reason unknown.
+
+ * engine/lib/database.php: Candidate for deletion
+
+2008-03-03 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/database.php: Added callbacks to get_data
+
+ * engine/lib/objects.php, index.php: Some misc changes
+
+2008-03-03 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/database.php: Database errors now distinct from "no data",
+ errors are hard fails
+
+2008-02-17 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/objects.php: Further metadata and ElggObject updates.
+
+ * engine/lib/objects.php: Added most of an ElggObject class
+
+ * engine/lib/objects.php: Full object and object metadata CRUD functionality
+
+2008-02-15 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/access.php, engine/lib/database.php, engine/lib/objects.php,
+ engine/lib/sites.php, engine/lib/users.php, engine/schema/mysql.sql,
+ index.php: All kinds of object and database stuff
+
+ * engine/schema/mysql.sql, engine/start.php, install.php: Added the concept
+ of a site_id to msot of the database tables. Also some extra installation
+ stuff.
+
+ * views/default/css.php: Added a CSS file
+
+ * engine/lib/actions.php, engine/lib/database.php, engine/lib/elgglib.php,
+ engine/lib/plugins.php, engine/schema/mysql.sql, engine/settings.example.php:
+ Adding more plugin-related fun
+
+ * engine/lib/configuration.php, views/default/pageshell.php: Various
+ configuration things
+
+ * engine/lib/configuration.php, engine/lib/elgglib.php,
+ engine/lib/plugins.php, engine/start.php: Simple plugin mechanism
+
+ * engine/lib/elgglib.php: Correction to previous
+
+ * engine/lib/elgglib.php: Plugins can now extend views.
+
+ * css/css.php: Importing the dynamic CSS file
+
+2008-02-14 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/install.php, install.php, views/default/pageshell.php: Some
+ further installation tweaks
+
+ * engine/lib/database.php, engine/lib/elgglib.php, install.php: A simple
+ beginning to an install script
+
+ * action.php, htaccess_dist, index.php, views/default/pageshell.php: Changes
+ to site structure
+
+ * engine/lib/actions.php, engine/lib/elgglib.php, engine/schema/mysql.sql,
+ engine/settings.example.php, index.php,
+ views/default/messages/sanitisation/htaccess.php: Actions, .htaccess, and the
+ database schema
+
+2008-02-13 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/database.php: Added more context to the database function notes
+
+ * engine/lib/database.php, engine/start.php: Added some fancy database
+ connection gubbins. If you give it loads of read or write dbs to pick from,
+ Elgg will choose one at random for each category!
+
+ * engine/lib/elgglib.php, engine/start.php, views/default/pageshell.php:
+ Messages and exceptions, working merrily together. Aww.
+
+ * views/default/messages/messages/list.php,
+ views/default/messages/messages/message.php: Standard messages are now
+ displayed.
+
+ * engine/lib/elgglib.php, engine/start.php,
+ views/default/messages/errors/exception.php,
+ views/default/messages/exceptions/exception.php,
+ views/default/messages/list.php, views/default/pageshell.php: Further message
+ handling in the template
+
+ * engine/lib/elgglib.php, engine/lib/input.php, engine/start.php,
+ views/default/messages/errors/exception.php: Exception handling
+
+2008-02-13 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/start.php: Moving on to explodenew
+
+ * engine/lib/exceptions.php: Updates
+
+ * engine/lib/input.php: Added input method
+
+ * engine/start.php: Start now reporting errors using exceptions...
+
+ * engine/lib/exceptions.php: Added installation exception
+
+ * engine/start.php: Loads now
+
+ * engine/lib/elgglib.php: Ooops...
+
+ * engine/start.php: Loading exceptions
+
+ * engine/lib/elgglib.php: Added error handler stuff.
+
+ * engine/lib/exceptions.php: Added exceptions
+
+ * engine/start.php: Added CVS exclude to start.php
+
+2008-02-13 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/start.php, views/default/messages/sanitisation/settings.php: A
+ slightly better no-settings error. It's probably a good idea to eventually
+ allow people to edit settings.php directly if they have the access defined.
+
+ * engine/start.php: Let's be a little more friendly.
+
+ * engine/start.php, views/default/messages/errors/error.php,
+ views/default/messages/errors/list.php, views/default/pageshell.php: Some
+ error reporting and initial (very, very basic) templating
+
+ * engine/lib/elgglib.php: A little reoirganisation in elgglib
+
+2008-02-12 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Adding priority and a little more description to
+ the events API.
+
+ * engine/lib/elgglib.php, engine/start.php: Adding the events API
+
+ * engine/lib/elgglib.php, engine/start.php: Sanitisation
+
+ * engine/lib/elgglib.php, engine/start.php,
+ views/default/messages/sanitisation/settings.php: Introducing views and some
+ sanitisation
+
+ * engine/lib/elgglib.php, engine/start.php, index.php: The engine starter
+ now functions appropriately
+
+2008-02-11 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/settings.example.php, engine/start.functions.php, engine/start.php:
+ Some more bootstrapping.
diff --git a/INSTALL.txt b/INSTALL.txt
index 2df994a87..f4ecbffe1 100644
--- a/INSTALL.txt
+++ b/INSTALL.txt
@@ -1,120 +1,113 @@
-
-ELGG INSTALLATION INSTRUCTIONS
-
-TECHNICAL REQUIREMENTS
-
-Elgg runs on a combination of the Apache web server, MySQL database
-system and the PHP interpreted scripting language. This is the most
-popular web server environment in the world.
-
-Due to Elgg's advanced functionality, there are some extra
-configuration requirements:
-
- * The Apache web server needs to be installed with the following
- modules:
- o mod_rewrite
- o PHP
- * MySQL 5+ is needed for data storage
- * PHP 5.2+ needs to be installed as an Apache module (not in CGI
- mode or safe mode) with the following libraries:
- o GD (for graphics processing, eg user icon rescaling)
- o JSON (for API functionality)
-
-It is recommended that you increase the memory available to PHP
-threads beyond the standard 8 or 12M, and increase the maximum
-uploaded filesize (which defaults to 2M). In both cases, this can be
-found in your php.ini.
-
- * The following PHP libraries are also recommended for some
- plugins and extra functionality:
- o mbstring (to allow emails to be sent with non-Latin
- characters)
- o SOAP
- o DOM
-
-
-INSTALLING ELGG
-
-Before you begin, make sure you have read Elgg's technical
-requirements. If you discover problems after following these
-instructions, check out the troubleshooting page at
-[http://docs.elgg.org/wiki/Troubleshooting].
-
-
-1. Upload Elgg
-
-Unzip Elgg and upload it to your site's document root.
-
-
-2. Create a data folder
-
-Elgg needs a special folder to store uploaded files, including
-profile icons and photos. You will need to create this for it.
-
-We recommend that this folder is called data, and is stored outside
-of your document root. For example, if Elgg is installed in
-/home/elgg/html/, you might create it in /home/elgg/data.
-
-Once this folder has been created, you'll need to make sure Elgg has
-permission to write to it. This shouldn't be a problem on Windows-
-based servers, but if your server runs Linux or a UNIX variant,
-you'll need to type something like:
-
-chmod 777 /home/elgg/data/
-
-If you use a graphical client to upload files, you can usually set
-this by right or shift-clicking on the folder and selecting
-'properties'.
-
-
-3. Create a database
-
-Using your database administration tool of choice (if you're unsure
-about this, ask your system administrator), create a new database for
-Elgg. Make sure you know the username and password necessary to
-access this.
-
-4. Install your crontab (UNIX ONLY)
-
-Cron is a UNIX command which allows programs to be run at set
-times of the day.
-
-If you want to take advantage of some of the maintenance
-functions such as log rotation or garbage collection, you must
-install a cron tab to trigger these events.
-
-We have provided an example crontab as /crontab.example. Edit this
-with a text editor to provide the details of your site, rename it
-to another filename (eg 'crontab.mine') and install it with the
-following command:
-
- crontab crontab.mine
-
-Substitute your filename for 'crontab.mine'.
-
-5. Visit your Elgg site
-
-Once you've performed these steps, visit your Elgg site in your web
-browser. Elgg will take you through the rest of the installation
-process from there.
-
-A note on settings and .htaccess
-
-The Elgg installer will try and create two files for you:
-
- * engine/settings.php, which contains the database settings for
- your installation
- * .htaccess, which allows Elgg to generate dynamic URLs
-
-If these files can't be automatically generated, for example because
-you don't have the correct directory permissions, Elgg will tell you
-how to create them. If, for some reason, this won't work, you will
-need to:
-
- * Copy engine/settings.example.php to engine/settings.php, open
- it up in a text editor and fill in your database details
- * Copy /htaccess_dist to /.htaccess
-
-
-The latest version of this document is available at:
-[http://docs.elgg.org/wiki/Installation] \ No newline at end of file
+The latest version of the installation instructions is available at:
+[http://docs.elgg.org/wiki/Installation]
+
+Installation Troubleshooting is available at:
+[http://docs.elgg.org/wiki/Troubleshooting]
+
+
+ELGG INSTALLATION INSTRUCTIONS
+
+TECHNICAL REQUIREMENTS
+
+Elgg runs on a combination of the Apache web server, MySQL database
+system and the PHP interpreted scripting language. This is the most
+popular web server environment in the world. (Elgg can also run on
+other web servers such a nginx and IIS, but requires further configuration).
+
+Due to Elgg's advanced functionality, there are some extra
+configuration requirements:
+
+ * The Apache web server needs to be installed with the following
+ modules:
+ o mod_rewrite
+ o PHP
+ * MySQL 5+.
+ * PHP 5.2+ needs to be installed as an Apache module
+ with the following libraries:
+ o GD (for graphics processing such as avatar cropping)
+ o Multibyte String support (for internationalization)
+
+It is recommended that you increase the memory available to PHP
+threads beyond the standard 8 or 12M, and increase the maximum
+uploaded filesize (which defaults to 2M). In both cases, this can be
+found in your php.ini.
+
+
+INSTALLING ELGG
+
+Before you begin, make sure you have read Elgg's technical
+requirements. If you discover problems after following these
+instructions, check out the troubleshooting page at
+[http://docs.elgg.org/wiki/Troubleshooting].
+
+
+1. Upload Elgg
+
+Unzip Elgg and upload it to your site's document root.
+
+
+2. Create a data folder
+
+Elgg needs a special folder to store uploaded files, including
+profile icons and photos. You will need to create this for it.
+
+We recommend that this folder is called data, and is stored outside
+of your document root. For example, if Elgg is installed in
+/home/elgg/html/, you might create it in /home/elgg/data.
+
+Once this folder has been created, you'll need to make sure that your
+web server has permission to write to it. This shouldn't be a problem
+on Windows-based servers, but if your server runs Linux or a UNIX variant,
+you'll need to figure out what user Apache runs under. For Debian-based
+distros, it is usually www-data and for RedHat, it is often apache. If you
+cannot figure out what the ownership and permissions should be, you can
+set the permissions for world access (though not recommended):
+
+chmod 777 /home/elgg/data/
+
+If you use a graphical client to upload files, you can usually set
+this by right or shift-clicking on the folder and selecting
+'properties'.
+
+
+3. Create a database
+
+Using your database administration tool of choice (if you're unsure
+about this, ask your system administrator), create a new database for
+Elgg. Make sure you know the username and password necessary to
+access this.
+
+
+4. Visit your Elgg site
+
+Once you've performed these steps, visit your Elgg site in your web
+browser. Elgg will take you through the rest of the installation
+process from there.
+
+
+A note on settings.php and .htaccess
+
+The Elgg installer will try and create two files for you:
+
+ * engine/settings.php, which contains the database settings for
+ your installation
+ * .htaccess, which allows Elgg to generate dynamic URLs
+
+If your web server does not have permission to create these files, you
+will need to either
+
+1. Change the permissions on the directory where you are installing
+ Elgg and the engine directory and try again. Remember to change the
+ permissions back to the original values after installation is complete.
+
+2. Copy engine/settings.example.php to engine/settings.php, open
+ it up in a text editor and fill in your database details. Then
+ copy /htaccess_dist to /.htaccess
+
+
+
+The latest version of this document is available at:
+[http://docs.elgg.org/wiki/Installation]
+
+Installation Troubleshooting is available at:
+[http://docs.elgg.org/wiki/Troubleshooting]
diff --git a/LICENCE.txt b/LICENCE.txt
deleted file mode 100644
index d511905c1..000000000
--- a/LICENCE.txt
+++ /dev/null
@@ -1,339 +0,0 @@
- GNU GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users. This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it. (Some other Free Software Foundation software is covered by
-the GNU Lesser General Public License instead.) You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have. You must make sure that they, too, receive or can get the
-source code. And you must show them these terms so they know their
-rights.
-
- We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
- Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software. If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary. To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- GNU GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License. The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language. (Hereinafter, translation is included without limitation in
-the term "modification".) Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
- 1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
- 2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any change.
-
- b) You must cause any work that you distribute or publish, that in
- whole or in part contains or is derived from the Program or any
- part thereof, to be licensed as a whole at no charge to all third
- parties under the terms of this License.
-
- c) If the modified program normally reads commands interactively
- when run, you must cause it, when started running for such
- interactive use in the most ordinary way, to print or display an
- announcement including an appropriate copyright notice and a
- notice that there is no warranty (or else, saying that you provide
- a warranty) and that users may redistribute the program under
- these conditions, and telling the user how to view a copy of this
- License. (Exception: if the Program itself is interactive but
- does not normally print such an announcement, your work based on
- the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
- a) Accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of Sections
- 1 and 2 above on a medium customarily used for software interchange; or,
-
- b) Accompany it with a written offer, valid for at least three
- years, to give any third party, for a charge no more than your
- cost of physically performing source distribution, a complete
- machine-readable copy of the corresponding source code, to be
- distributed under the terms of Sections 1 and 2 above on a medium
- customarily used for software interchange; or,
-
- c) Accompany it with the information you received as to the offer
- to distribute corresponding source code. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form with such
- an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it. For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable. However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License. Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
- 5. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Program or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
- 6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all. For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded. In such case, this License incorporates
-the limitation as if written in the body of this License.
-
- 9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation. If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
- 10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission. For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this. Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
- NO WARRANTY
-
- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
- <one line to give the program's name and a brief idea of what it does.>
- Copyright (C) <year> <name of author>
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with this program; if not, write to the Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
- Gnomovision version 69, Copyright (C) year name of author
- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the program
- `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
- <signature of Ty Coon>, 1 April 1989
- Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs. If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library. If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.
diff --git a/LICENSE.txt b/LICENSE.txt
new file mode 100644
index 000000000..f833d881e
--- /dev/null
+++ b/LICENSE.txt
@@ -0,0 +1,280 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS \ No newline at end of file
diff --git a/README.md b/README.md
new file mode 100644
index 000000000..a1b3e1cbf
--- /dev/null
+++ b/README.md
@@ -0,0 +1,28 @@
+Lorea
+=====
+
+(Re-)Taking the Networks!
+
+The [lorea](https://lorea.org) code aims at providing individuals and teams with privacy-aware, security-conscious, and user-controlled-data collaborative tools over the Web, and around it.
+
+The main application is based on [Elgg](http://elgg.org), a PHP-based social networking platform. Lorea extends it with plugins to provide better privacy features, including strong encryption, *OStatus-based federation* with other Lorea/Elgg installations and OStatus-compliant projects, etc.
+
+It also integrates other popular technologies such as [DokuWiki](http://www.dokuwiki.org), [Etherpad](http://etherpad.org), [XMPP](http://xmpp.org), etc., and provides *GPG-encrypted mailing-lists* to groups.
+
+### Installation
+
+Our code is divided in two git repositories: elgg and lorea-plugins. You can get it using the following commands.
+
+<pre>
+$ git clone git://gitorious.org/lorea/elgg.git
+$ cd elgg
+$ git remote add lorea-plugins git://gitorious.org/lorea/lorea-plugins.git
+$ git pull lorea-plugins master
+</pre>
+
+You can update the code to the latest release using:
+
+<pre>
+$ git pull origin master
+$ git pull lorea-plugins master
+</pre>
diff --git a/README.txt b/README.txt
deleted file mode 100644
index 1e4866b60..000000000
--- a/README.txt
+++ /dev/null
@@ -1,39 +0,0 @@
-Elgg version 1.2
-Copyright (c) 2008-2009 Curverider Ltd
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-USA
-
-
-ABOUT:
-
-See CONTRIBUTORS.txt for development credits.
-
-Elgg concept originally by:
-Ben Werdmuller <ben@elgg.com> and David Tosh <dave@elgg.com>
-
-To learn more about enterprise-grade support and services for Elgg,
-contact us via one of the following methods:
-
-Email: info@elgg.com
-Skype: curverider
-Web: http://elgg.com/
-
-The open source project site can be found at http://elgg.org/
-
-Elgg 1.2 is released under the GNU Public License (GPL), which
-is supplied in this distribution as LICENSE.
-
-For installation instructions, please see the INSTALL file.
diff --git a/UPGRADE.txt b/UPGRADE.txt
index 9ff961b8d..e9610fe39 100644
--- a/UPGRADE.txt
+++ b/UPGRADE.txt
@@ -1,30 +1,71 @@
+Elgg Upgrade Instructions
+=========================
-ELGG UPGRADE INSTRUCTIONS
+Note: Upgrades are one way--You cannot downgrade once you run the upgrade
+ script. Always back up your database, code, and data directory
+ before upgrading!
-1. Download the new version of Elgg from elgg.org or a mirror.
-2. Overwrite your existing Elgg files. Any modifications should
- have been written within plugins, so that they are not lost
- on overwriting. If this is not the case, take care to
- maintain your modifications, although Elgg is not guaranteed
- to work correctly in this instance.
+Upgrading from Elgg 1.7 to 1.8.
+----------------------------------------------------
-3. Visit http://your-elgg-site-URL/upgrade.php
+1. Back up your Elgg database, code, and data directory.
-4. If you haven't already done so, install your crontab (UNIX ONLY)
+2. Download the latest version of Elgg from http://elgg.org/.
- Cron is a UNIX command which allows programs to be run at set
- times of the day.
+3. Identify and save any changes to core files. Pay special attention to
+ the views and actions directories. You should put these changes in plugins
+ once you have installed Elgg 1.8.
- If you want to take advantage of some of the maintenance
- functions such as log rotation or garbage collection, you must
- install a cron tab to trigger these events.
+3. Delete the following directories in the Elgg root on your server:
+ * _css
+ * account
+ * actions
+ * admin
+ * dashboard
+ * entities
+ * friends
+ * search
+ * settings
+ * simplecache
+ * views
- We have provided an example crontab as /crontab.example. Edit this
- with a text editor to provide the details of your site, rename it
- to another filename (eg 'crontab.mine') and install it with the
- following command:
+4. Delete the following core plugins from the Elgg mod directory. Most of these
+ plugins are deprecated and no longer supported by Elgg's core developers.
+ Others have been significantly changed and need to be replaced by new versions.
+ If you modified these plugins, you will need to upgrade the plugin to work
+ in Elgg 1.8.
+ * captcha
+ * crontrigger
+ * default_widgets
+ * friends
+ * riverdashboard
+ * twitter_service
+ * profile
- crontab crontab.mine
-
- Substitute your filename for 'crontab.mine'. \ No newline at end of file
+5. Upload and overwrite your existing Elgg files with the Elgg 1.8 files.
+
+6. Copy htaccess_dist to .htaccess, replacing your existing version. Any
+ modifications to the original .htaccess should be moved to the new
+ .htaccess file.
+
+7. Visit http://your-elgg-site/upgrade.php
+
+
+Upgrading to the latest release
+-----------------------------------------
+
+1. Back up your Elgg database, code, and data directory.
+
+2. Download the latest version of Elgg from http://elgg.org/.
+
+3. Upload and overwrite your existing Elgg files. Any modifications should
+ have been written within plugins so that they are not lost. If this is
+ not the case, take care to maintain your modifications. If you have
+ modified core files, Elgg may not work correctly.
+
+4. Copy htaccess_dist to .htaccess, replacing your existing version. Any
+ modifications to the original .htaccess should be moved to the new
+ .htaccess file.
+
+5. Visit http://your-elgg-site/upgrade.php
diff --git a/_css/css.php b/_css/css.php
deleted file mode 100644
index a6eebee20..000000000
--- a/_css/css.php
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-
- /**
- * Elgg CSS file
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
-
- /*
-
- require_once(dirname(dirname(__FILE__)) . "/engine/start.php");
-
- $default_css = elgg_view("css");
-
- header("Content-type: text/css", true);
- header('Expires: ' . date('r',time() + 864000), true);
- header("Pragma: public", true);
- header("Cache-Control: public", true);
- header("Content-Length: " . strlen($default_css));
-
- echo $default_css;
- */
-
- global $viewinput;
- $viewinput['view'] = 'css';
- $viewinput['viewtype'] = $_GET['viewtype'];
-
- header("Content-type: text/css", true);
- header('Expires: ' . date('r',time() + 864000), true);
- header("Pragma: public", true);
- header("Cache-Control: public", true);
- // header("Content-Length: " . strlen($default_css));
- require_once(dirname(dirname(__FILE__)) . '/simplecache/view.php');
-
-?> \ No newline at end of file
diff --git a/_css/js.php b/_css/js.php
deleted file mode 100644
index a90c87829..000000000
--- a/_css/js.php
+++ /dev/null
@@ -1,41 +0,0 @@
-<?php
-
- /**
- * Elgg CSS file
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
-
- /*
-
- require_once(dirname(dirname(__FILE__)) . "/engine/start.php");
-
- $default_css = elgg_view("css");
-
- header("Content-type: text/css", true);
- header('Expires: ' . date('r',time() + 864000), true);
- header("Pragma: public", true);
- header("Cache-Control: public", true);
- header("Content-Length: " . strlen($default_css));
-
- echo $default_css;
- */
-
- global $viewinput;
- $viewinput['view'] = 'js/' . $_GET['js'];
- $viewinput['viewtype'] = $_GET['viewtype'];
-
- header('Content-type: text/javascript');
- header('Expires: ' . date('r',time() + 864000));
- header("Pragma: public");
- header("Cache-Control: public");
- // header("Content-Length: " . strlen($return));
-
- require_once(dirname(dirname(__FILE__)) . '/simplecache/view.php');
-
-?> \ No newline at end of file
diff --git a/_graphics/SPRITES_LICENSE.TXT b/_graphics/SPRITES_LICENSE.TXT
new file mode 100644
index 000000000..61b0daf3a
--- /dev/null
+++ b/_graphics/SPRITES_LICENSE.TXT
@@ -0,0 +1,9 @@
+The Sprites are copyright © GentleFace http://www.gentleface.com/
+
+They are licensed under Creative Commons
+Attribution-NonCommercial-NoDerivs 3.0 Unported (CC BY-NC-ND 3.0) with special
+permission to distribute and use with the Elgg open source framework. For uses
+outside of Elgg, please see the license and/or contact the author at
+design@gentleface.com
+
+http://creativecommons.org/licenses/by-nc-nd/3.0/ \ No newline at end of file
diff --git a/_graphics/admin_sprites.png b/_graphics/admin_sprites.png
new file mode 100644
index 000000000..82a66f5b2
--- /dev/null
+++ b/_graphics/admin_sprites.png
Binary files differ
diff --git a/_graphics/ajax_loader.gif b/_graphics/ajax_loader.gif
index 5a9af96d2..b55e148bb 100644
--- a/_graphics/ajax_loader.gif
+++ b/_graphics/ajax_loader.gif
Binary files differ
diff --git a/_graphics/ajax_loader_bw.gif b/_graphics/ajax_loader_bw.gif
new file mode 100644
index 000000000..e195e1fd8
--- /dev/null
+++ b/_graphics/ajax_loader_bw.gif
Binary files differ
diff --git a/_graphics/avatar_menu_arrows.gif b/_graphics/avatar_menu_arrows.gif
deleted file mode 100644
index 87a9409b0..000000000
--- a/_graphics/avatar_menu_arrows.gif
+++ /dev/null
Binary files differ
diff --git a/_graphics/button_background.gif b/_graphics/button_background.gif
new file mode 100644
index 000000000..99eac3ecd
--- /dev/null
+++ b/_graphics/button_background.gif
Binary files differ
diff --git a/_graphics/button_graduation.png b/_graphics/button_graduation.png
new file mode 100644
index 000000000..4ca37bbdc
--- /dev/null
+++ b/_graphics/button_graduation.png
Binary files differ
diff --git a/_graphics/elgg_logo.png b/_graphics/elgg_logo.png
new file mode 100644
index 000000000..7a7e01f06
--- /dev/null
+++ b/_graphics/elgg_logo.png
Binary files differ
diff --git a/_graphics/elgg_sprites.png b/_graphics/elgg_sprites.png
new file mode 100644
index 000000000..02b452d94
--- /dev/null
+++ b/_graphics/elgg_sprites.png
Binary files differ
diff --git a/_graphics/elgg_toolbar_logo.gif b/_graphics/elgg_toolbar_logo.gif
index 4362e2af9..a7c03a918 100644
--- a/_graphics/elgg_toolbar_logo.gif
+++ b/_graphics/elgg_toolbar_logo.gif
Binary files differ
diff --git a/_graphics/elgg_toolbar_logout.gif b/_graphics/elgg_toolbar_logout.gif
deleted file mode 100644
index 4655d51d7..000000000
--- a/_graphics/elgg_toolbar_logout.gif
+++ /dev/null
Binary files differ
diff --git a/_graphics/favicon.ico b/_graphics/favicon.ico
new file mode 100644
index 000000000..9e1ecc699
--- /dev/null
+++ b/_graphics/favicon.ico
Binary files differ
diff --git a/_graphics/footer_back.gif b/_graphics/footer_back.gif
deleted file mode 100644
index 19801ad74..000000000
--- a/_graphics/footer_back.gif
+++ /dev/null
Binary files differ
diff --git a/_graphics/friends_picker_arrows.gif b/_graphics/friends_picker_arrows.gif
deleted file mode 100644
index 269fc4e80..000000000
--- a/_graphics/friends_picker_arrows.gif
+++ /dev/null
Binary files differ
diff --git a/_graphics/friendspicker.png b/_graphics/friendspicker.png
new file mode 100644
index 000000000..78b540397
--- /dev/null
+++ b/_graphics/friendspicker.png
Binary files differ
diff --git a/_graphics/header_shadow.png b/_graphics/header_shadow.png
new file mode 100644
index 000000000..4c07b814a
--- /dev/null
+++ b/_graphics/header_shadow.png
Binary files differ
diff --git a/_graphics/icon_bookmarkthis.gif b/_graphics/icon_bookmarkthis.gif
deleted file mode 100644
index 417f3ff0e..000000000
--- a/_graphics/icon_bookmarkthis.gif
+++ /dev/null
Binary files differ
diff --git a/_graphics/icon_customise_drag.gif b/_graphics/icon_customise_drag.gif
deleted file mode 100644
index 010270426..000000000
--- a/_graphics/icon_customise_drag.gif
+++ /dev/null
Binary files differ
diff --git a/_graphics/icon_customise_info.gif b/_graphics/icon_customise_info.gif
deleted file mode 100644
index ba57b42fe..000000000
--- a/_graphics/icon_customise_info.gif
+++ /dev/null
Binary files differ
diff --git a/_graphics/icon_customise_remove.gif b/_graphics/icon_customise_remove.gif
deleted file mode 100644
index 98fccaa1c..000000000
--- a/_graphics/icon_customise_remove.gif
+++ /dev/null
Binary files differ
diff --git a/_graphics/icon_customise_remove.png b/_graphics/icon_customise_remove.png
deleted file mode 100644
index 23e7e20cf..000000000
--- a/_graphics/icon_customise_remove.png
+++ /dev/null
Binary files differ
diff --git a/_graphics/icon_gallery.gif b/_graphics/icon_gallery.gif
deleted file mode 100644
index 2c23d12c8..000000000
--- a/_graphics/icon_gallery.gif
+++ /dev/null
Binary files differ
diff --git a/_graphics/icon_odd.gif b/_graphics/icon_odd.gif
deleted file mode 100644
index 529cf968a..000000000
--- a/_graphics/icon_odd.gif
+++ /dev/null
Binary files differ
diff --git a/_graphics/icon_reportthis.gif b/_graphics/icon_reportthis.gif
deleted file mode 100644
index 726427e70..000000000
--- a/_graphics/icon_reportthis.gif
+++ /dev/null
Binary files differ
diff --git a/_graphics/icon_rss.gif b/_graphics/icon_rss.gif
deleted file mode 100644
index 2c27ed801..000000000
--- a/_graphics/icon_rss.gif
+++ /dev/null
Binary files differ
diff --git a/_graphics/icon_tag.gif b/_graphics/icon_tag.gif
deleted file mode 100644
index de08e0ab5..000000000
--- a/_graphics/icon_tag.gif
+++ /dev/null
Binary files differ
diff --git a/_graphics/icons/default/topbar.png b/_graphics/icons/default/topbar.png
index 8b6d00755..149dfea7f 100644
--- a/_graphics/icons/default/topbar.png
+++ b/_graphics/icons/default/topbar.png
Binary files differ
diff --git a/_graphics/icons/user/defaultlarge.gif b/_graphics/icons/user/defaultlarge.gif
new file mode 100644
index 000000000..6ea3bd4cd
--- /dev/null
+++ b/_graphics/icons/user/defaultlarge.gif
Binary files differ
diff --git a/_graphics/icons/user/defaultmaster.gif b/_graphics/icons/user/defaultmaster.gif
new file mode 100644
index 000000000..5bfd67a2d
--- /dev/null
+++ b/_graphics/icons/user/defaultmaster.gif
Binary files differ
diff --git a/_graphics/icons/user/defaultmedium.gif b/_graphics/icons/user/defaultmedium.gif
new file mode 100644
index 000000000..c6b2e6a6d
--- /dev/null
+++ b/_graphics/icons/user/defaultmedium.gif
Binary files differ
diff --git a/_graphics/icons/user/defaultsmall.gif b/_graphics/icons/user/defaultsmall.gif
new file mode 100644
index 000000000..661d72f04
--- /dev/null
+++ b/_graphics/icons/user/defaultsmall.gif
Binary files differ
diff --git a/_graphics/icons/user/defaulttiny.gif b/_graphics/icons/user/defaulttiny.gif
new file mode 100644
index 000000000..1775346bc
--- /dev/null
+++ b/_graphics/icons/user/defaulttiny.gif
Binary files differ
diff --git a/_graphics/icons/user/defaulttopbar.gif b/_graphics/icons/user/defaulttopbar.gif
new file mode 100644
index 000000000..c3616aeb5
--- /dev/null
+++ b/_graphics/icons/user/defaulttopbar.gif
Binary files differ
diff --git a/_graphics/owner_block_back.jpg b/_graphics/owner_block_back.jpg
deleted file mode 100644
index f2ee864bf..000000000
--- a/_graphics/owner_block_back.jpg
+++ /dev/null
Binary files differ
diff --git a/_graphics/owner_block_menu_arrow.gif b/_graphics/owner_block_menu_arrow.gif
deleted file mode 100644
index 9cd642a74..000000000
--- a/_graphics/owner_block_menu_arrow.gif
+++ /dev/null
Binary files differ
diff --git a/_graphics/owner_block_menu_dot.gif b/_graphics/owner_block_menu_dot.gif
deleted file mode 100644
index d36a5eecf..000000000
--- a/_graphics/owner_block_menu_dot.gif
+++ /dev/null
Binary files differ
diff --git a/_graphics/page_back_linen.gif b/_graphics/page_back_linen.gif
deleted file mode 100644
index 2aed7bbc0..000000000
--- a/_graphics/page_back_linen.gif
+++ /dev/null
Binary files differ
diff --git a/_graphics/page_back_linen_shadow.gif b/_graphics/page_back_linen_shadow.gif
deleted file mode 100644
index b6a3d1593..000000000
--- a/_graphics/page_back_linen_shadow.gif
+++ /dev/null
Binary files differ
diff --git a/_graphics/river_icons/river_icon_blog.gif b/_graphics/river_icons/river_icon_blog.gif
deleted file mode 100644
index 57feb91b0..000000000
--- a/_graphics/river_icons/river_icon_blog.gif
+++ /dev/null
Binary files differ
diff --git a/_graphics/river_icons/river_icon_bookmarks.gif b/_graphics/river_icons/river_icon_bookmarks.gif
deleted file mode 100644
index bdc98d4af..000000000
--- a/_graphics/river_icons/river_icon_bookmarks.gif
+++ /dev/null
Binary files differ
diff --git a/_graphics/river_icons/river_icon_comment.gif b/_graphics/river_icons/river_icon_comment.gif
deleted file mode 100644
index 99035406e..000000000
--- a/_graphics/river_icons/river_icon_comment.gif
+++ /dev/null
Binary files differ
diff --git a/_graphics/river_icons/river_icon_feed.gif b/_graphics/river_icons/river_icon_feed.gif
deleted file mode 100644
index 6b5659bc3..000000000
--- a/_graphics/river_icons/river_icon_feed.gif
+++ /dev/null
Binary files differ
diff --git a/_graphics/river_icons/river_icon_files.gif b/_graphics/river_icons/river_icon_files.gif
deleted file mode 100644
index 877a47c0c..000000000
--- a/_graphics/river_icons/river_icon_files.gif
+++ /dev/null
Binary files differ
diff --git a/_graphics/river_icons/river_icon_forum.gif b/_graphics/river_icons/river_icon_forum.gif
deleted file mode 100644
index 2a5b82704..000000000
--- a/_graphics/river_icons/river_icon_forum.gif
+++ /dev/null
Binary files differ
diff --git a/_graphics/river_icons/river_icon_friends.gif b/_graphics/river_icons/river_icon_friends.gif
deleted file mode 100644
index 5d3565054..000000000
--- a/_graphics/river_icons/river_icon_friends.gif
+++ /dev/null
Binary files differ
diff --git a/_graphics/river_icons/river_icon_messageboard.gif b/_graphics/river_icons/river_icon_messageboard.gif
deleted file mode 100644
index f051bee9d..000000000
--- a/_graphics/river_icons/river_icon_messageboard.gif
+++ /dev/null
Binary files differ
diff --git a/_graphics/river_icons/river_icon_pages.gif b/_graphics/river_icons/river_icon_pages.gif
deleted file mode 100644
index 2a474f8f0..000000000
--- a/_graphics/river_icons/river_icon_pages.gif
+++ /dev/null
Binary files differ
diff --git a/_graphics/river_icons/river_icon_plugin.gif b/_graphics/river_icons/river_icon_plugin.gif
deleted file mode 100644
index b4d2a153d..000000000
--- a/_graphics/river_icons/river_icon_plugin.gif
+++ /dev/null
Binary files differ
diff --git a/_graphics/river_icons/river_icon_privatemessage.gif b/_graphics/river_icons/river_icon_privatemessage.gif
deleted file mode 100644
index eb2527aef..000000000
--- a/_graphics/river_icons/river_icon_privatemessage.gif
+++ /dev/null
Binary files differ
diff --git a/_graphics/river_icons/river_icon_profile.gif b/_graphics/river_icons/river_icon_profile.gif
deleted file mode 100644
index b3f4efe20..000000000
--- a/_graphics/river_icons/river_icon_profile.gif
+++ /dev/null
Binary files differ
diff --git a/_graphics/river_icons/river_icon_status.gif b/_graphics/river_icons/river_icon_status.gif
deleted file mode 100644
index 5e480360f..000000000
--- a/_graphics/river_icons/river_icon_status.gif
+++ /dev/null
Binary files differ
diff --git a/_graphics/river_icons/river_icon_thewire.gif b/_graphics/river_icons/river_icon_thewire.gif
deleted file mode 100644
index f7e9d6003..000000000
--- a/_graphics/river_icons/river_icon_thewire.gif
+++ /dev/null
Binary files differ
diff --git a/_graphics/sidebar_background.gif b/_graphics/sidebar_background.gif
new file mode 100644
index 000000000..868012bb1
--- /dev/null
+++ b/_graphics/sidebar_background.gif
Binary files differ
diff --git a/_graphics/skyscraper.gif b/_graphics/skyscraper.gif
deleted file mode 100644
index 3853a1617..000000000
--- a/_graphics/skyscraper.gif
+++ /dev/null
Binary files differ
diff --git a/_graphics/spacer.gif b/_graphics/spacer.gif
index 5bfd67a2d..5bfd67a2d 100755..100644
--- a/_graphics/spacer.gif
+++ b/_graphics/spacer.gif
Binary files differ
diff --git a/_graphics/spotlight_back.gif b/_graphics/spotlight_back.gif
deleted file mode 100644
index 868d4764b..000000000
--- a/_graphics/spotlight_back.gif
+++ /dev/null
Binary files differ
diff --git a/_graphics/toolbar_arrow.png b/_graphics/toolbar_arrow.png
deleted file mode 100644
index 1b45e622a..000000000
--- a/_graphics/toolbar_arrow.png
+++ /dev/null
Binary files differ
diff --git a/_graphics/toolbar_arrow_ie.gif b/_graphics/toolbar_arrow_ie.gif
deleted file mode 100644
index 1d631489f..000000000
--- a/_graphics/toolbar_arrow_ie.gif
+++ /dev/null
Binary files differ
diff --git a/_graphics/tools_over.png b/_graphics/tools_over.png
deleted file mode 100644
index 46f0f8b05..000000000
--- a/_graphics/tools_over.png
+++ /dev/null
Binary files differ
diff --git a/_graphics/two_sidebar_background.gif b/_graphics/two_sidebar_background.gif
new file mode 100644
index 000000000..947f5cf46
--- /dev/null
+++ b/_graphics/two_sidebar_background.gif
Binary files differ
diff --git a/_graphics/walled_garden/one_column_bottom.png b/_graphics/walled_garden/one_column_bottom.png
new file mode 100644
index 000000000..bd2296896
--- /dev/null
+++ b/_graphics/walled_garden/one_column_bottom.png
Binary files differ
diff --git a/_graphics/walled_garden/one_column_middle.png b/_graphics/walled_garden/one_column_middle.png
new file mode 100644
index 000000000..f53abc123
--- /dev/null
+++ b/_graphics/walled_garden/one_column_middle.png
Binary files differ
diff --git a/_graphics/walled_garden/one_column_top.png b/_graphics/walled_garden/one_column_top.png
new file mode 100644
index 000000000..dc8de438a
--- /dev/null
+++ b/_graphics/walled_garden/one_column_top.png
Binary files differ
diff --git a/_graphics/walled_garden/two_column_bottom.png b/_graphics/walled_garden/two_column_bottom.png
new file mode 100644
index 000000000..21e076991
--- /dev/null
+++ b/_graphics/walled_garden/two_column_bottom.png
Binary files differ
diff --git a/_graphics/walled_garden/two_column_middle.png b/_graphics/walled_garden/two_column_middle.png
new file mode 100644
index 000000000..9a93f19a9
--- /dev/null
+++ b/_graphics/walled_garden/two_column_middle.png
Binary files differ
diff --git a/_graphics/walled_garden/two_column_top.png b/_graphics/walled_garden/two_column_top.png
new file mode 100644
index 000000000..cd71a4262
--- /dev/null
+++ b/_graphics/walled_garden/two_column_top.png
Binary files differ
diff --git a/account/forgotten_password.php b/account/forgotten_password.php
deleted file mode 100644
index b83776167..000000000
--- a/account/forgotten_password.php
+++ /dev/null
@@ -1,22 +0,0 @@
-<?php
- /**
- * Forgotten password function.
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
-
- require_once(dirname(dirname(__FILE__)) . "/engine/start.php");
-
- if (!isloggedin()) {
- $body = elgg_view_title(elgg_echo('user:password:lost')) . elgg_view("account/forms/forgotten_password");
-
- echo page_draw(elgg_echo('user:password:lost'), elgg_view_layout("one_column", $body));
- } else {
- forward();
- }
-?> \ No newline at end of file
diff --git a/account/register.php b/account/register.php
deleted file mode 100644
index 5e7d74a6c..000000000
--- a/account/register.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-
- /**
- * Elgg registration page
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
-
- /**
- * Start the Elgg engine
- */
- require_once(dirname(dirname(__FILE__)) . "/engine/start.php");
-
- $friend_guid = (int) get_input('friend_guid',0);
- $invitecode = get_input('invitecode');
-
- // If we're not logged in, display the registration page
- if (!isloggedin()) {
- echo page_draw(elgg_echo('register'), elgg_view("account/forms/register", array('friend_guid' => $friend_guid, 'invitecode' => $invitecode)));
- // Otherwise, forward to the index page
- } else {
- forward();
- }
-
-?> \ No newline at end of file
diff --git a/actions/admin/delete_admin_notice.php b/actions/admin/delete_admin_notice.php
new file mode 100644
index 000000000..a9c3b8758
--- /dev/null
+++ b/actions/admin/delete_admin_notice.php
@@ -0,0 +1,13 @@
+<?php
+/**
+ * Removes an admin notice.
+ */
+
+$guid = get_input('guid');
+$notice = get_entity($guid);
+
+if (!(elgg_instanceof($notice, 'object', 'admin_notice') && $notice->delete())) {
+ register_error(elgg_echo("admin:notices:could_not_delete"));
+}
+
+forward(REFERER); \ No newline at end of file
diff --git a/actions/admin/menu/save.php b/actions/admin/menu/save.php
new file mode 100644
index 000000000..66ce71082
--- /dev/null
+++ b/actions/admin/menu/save.php
@@ -0,0 +1,34 @@
+<?php
+/**
+ * Save menu items.
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+// featured menu items
+$featured_names = get_input('featured_menu_names', array());
+$featured_names = array_unique($featured_names);
+if (in_array(' ', $featured_names)) {
+ unset($featured_names[array_search(' ', $featured_names)]);
+}
+elgg_save_config('site_featured_menu_names', $featured_names);
+
+// custom menu items
+$custom_menu_titles = get_input('custom_menu_titles', array());
+$custom_menu_urls = get_input('custom_menu_urls', array());
+$num_menu_items = count($custom_menu_titles);
+$custom_menu_items = array();
+for ($i = 0; $i < $num_menu_items; $i++) {
+ if (trim($custom_menu_urls[$i]) && trim($custom_menu_titles[$i])) {
+ $url = $custom_menu_urls[$i];
+ $title = $custom_menu_titles[$i];
+ $custom_menu_items[$title] = $url;
+ }
+}
+elgg_save_config('site_custom_menu_items', $custom_menu_items);
+
+
+system_message(elgg_echo('admin:menu_items:saved'));
+
+forward(REFERER);
diff --git a/actions/admin/plugins/activate.php b/actions/admin/plugins/activate.php
new file mode 100644
index 000000000..5234a4ca5
--- /dev/null
+++ b/actions/admin/plugins/activate.php
@@ -0,0 +1,59 @@
+<?php
+/**
+ * Activate a plugin or plugins.
+ *
+ * Plugins to be activated are passed via $_REQUEST['plugin_guids'] as GUIDs.
+ * After activating the plugin(s), the views cache and simplecache are invalidated.
+ *
+ * @uses mixed $_GET['plugin_guids'] The GUIDs of the plugin to activate. Can be an array.
+ *
+ * @package Elgg.Core
+ * @subpackage Administration.Plugins
+ */
+
+$plugin_guids = get_input('plugin_guids');
+
+if (!is_array($plugin_guids)) {
+ $plugin_guids = array($plugin_guids);
+}
+
+$activated_guids = array();
+foreach ($plugin_guids as $guid) {
+ $plugin = get_entity($guid);
+
+ if (!($plugin instanceof ElggPlugin)) {
+ register_error(elgg_echo('admin:plugins:activate:no', array($guid)));
+ continue;
+ }
+
+ if ($plugin->activate()) {
+ $activated_guids[] = $guid;
+ } else {
+ $msg = $plugin->getError();
+ $string = ($msg) ? 'admin:plugins:activate:no_with_msg' : 'admin:plugins:activate:no';
+ register_error(elgg_echo($string, array($plugin->getFriendlyName(), $plugin->getError())));
+ }
+}
+
+// don't regenerate the simplecache because the plugin won't be
+// loaded until next run. Just invalidate and let it regenerate as needed
+elgg_invalidate_simplecache();
+elgg_reset_system_cache();
+
+if (count($activated_guids) === 1) {
+ $url = 'admin/plugins';
+ $query = (string)parse_url($_SERVER['HTTP_REFERER'], PHP_URL_QUERY);
+ if ($query) {
+ $url .= "?$query";
+ }
+ $plugin = get_entity($plugin_guids[0]);
+ $id = $css_id = preg_replace('/[^a-z0-9-]/i', '-', $plugin->getID());
+ forward("$url#$id");
+} else {
+ // forward to top of page with a failure so remove any #foo
+ $url = $_SERVER['HTTP_REFERER'];
+ if (strpos($url, '#')) {
+ $url = substr(0, strpos($url, '#'));
+ }
+ forward($url);
+} \ No newline at end of file
diff --git a/actions/admin/plugins/activate_all.php b/actions/admin/plugins/activate_all.php
new file mode 100644
index 000000000..4514ccbdf
--- /dev/null
+++ b/actions/admin/plugins/activate_all.php
@@ -0,0 +1,33 @@
+<?php
+/**
+ * Activates all specified installed and inactive plugins.
+ *
+ * All specified plugins in the mod/ directory are that aren't active are activated and the views
+ * cache and simplecache are invalidated.
+ *
+ * @package Elgg.Core
+ * @subpackage Administration.Plugins
+ */
+
+$guids = get_input('guids');
+$guids = explode(',', $guids);
+
+foreach ($guids as $guid) {
+ $plugin = get_entity($guid);
+ if (!$plugin->isActive()) {
+ if ($plugin->activate()) {
+ //system_message(elgg_echo('admin:plugins:activate:yes', array($plugin->getManifest()->getName())));
+ } else {
+ $msg = $plugin->getError();
+ $string = ($msg) ? 'admin:plugins:activate:no_with_msg' : 'admin:plugins:activate:no';
+ register_error(elgg_echo($string, array($plugin->getFriendlyName(), $plugin->getError())));
+ }
+ }
+}
+
+// don't regenerate the simplecache because the plugin won't be
+// loaded until next run. Just invalidate and let it regnerate as needed
+elgg_invalidate_simplecache();
+elgg_reset_system_cache();
+
+forward(REFERER); \ No newline at end of file
diff --git a/actions/admin/plugins/deactivate.php b/actions/admin/plugins/deactivate.php
new file mode 100644
index 000000000..354f4717d
--- /dev/null
+++ b/actions/admin/plugins/deactivate.php
@@ -0,0 +1,53 @@
+<?php
+/**
+ * Deactivate a plugin or plugins.
+ *
+ * Plugins to be deactivated are passed via $_REQUEST['plugin_guids'] as GUIDs.
+ * After deactivating the plugin(s), the views cache and simplecache are invalidated.
+ *
+ * @uses mixed $_GET['plugin_guids'] The GUIDs of the plugin to deactivate. Can be an array.
+ *
+ * @package Elgg.Core
+ * @subpackage Administration.Plugins
+ */
+
+$plugin_guids = get_input('plugin_guids');
+
+if (!is_array($plugin_guids)) {
+ $plugin_guids = array($plugin_guids);
+}
+
+foreach ($plugin_guids as $guid) {
+ $plugin = get_entity($guid);
+
+ if (!($plugin instanceof ElggPlugin)) {
+ register_error(elgg_echo('admin:plugins:deactivate:no', array($guid)));
+ continue;
+ }
+
+ if ($plugin->deactivate()) {
+ //system_message(elgg_echo('admin:plugins:deactivate:yes', array($plugin->getManifest()->getName())));
+ } else {
+ $msg = $plugin->getError();
+ $string = ($msg) ? 'admin:plugins:deactivate:no_with_msg' : 'admin:plugins:deactivate:no';
+ register_error(elgg_echo($string, array($plugin->getFriendlyName(), $plugin->getError())));
+ }
+}
+
+// don't regenerate the simplecache because the plugin won't be
+// loaded until next run. Just invalidate and let it regnerate as needed
+elgg_invalidate_simplecache();
+elgg_reset_system_cache();
+
+if (count($plugin_guids) == 1) {
+ $url = 'admin/plugins';
+ $query = (string)parse_url($_SERVER['HTTP_REFERER'], PHP_URL_QUERY);
+ if ($query) {
+ $url .= "?$query";
+ }
+ $plugin = get_entity($plugin_guids[0]);
+ $id = preg_replace('/[^a-z0-9-]/i', '-', $plugin->getID());
+ forward("$url#$id");
+} else {
+ forward(REFERER);
+}
diff --git a/actions/admin/plugins/deactivate_all.php b/actions/admin/plugins/deactivate_all.php
new file mode 100644
index 000000000..8b347a633
--- /dev/null
+++ b/actions/admin/plugins/deactivate_all.php
@@ -0,0 +1,33 @@
+<?php
+/**
+ * Disable all specified installed plugins.
+ *
+ * Specified plugins in the mod/ directory are disabled and the views cache and simplecache
+ * are reset.
+ *
+ * @package Elgg.Core
+ * @subpackage Administration.Plugins
+ */
+
+$guids = get_input('guids');
+$guids = explode(',', $guids);
+
+foreach ($guids as $guid) {
+ $plugin = get_entity($guid);
+ if ($plugin->isActive()) {
+ if ($plugin->deactivate()) {
+ //system_message(elgg_echo('admin:plugins:activate:yes', array($plugin->getManifest()->getName())));
+ } else {
+ $msg = $plugin->getError();
+ $string = ($msg) ? 'admin:plugins:deactivate:no_with_msg' : 'admin:plugins:deactivate:no';
+ register_error(elgg_echo($string, array($plugin->getFriendlyName(), $plugin->getError())));
+ }
+ }
+}
+
+// don't regenerate the simplecache because the plugin won't be
+// loaded until next run. Just invalidate and let it regnerate as needed
+elgg_invalidate_simplecache();
+elgg_reset_system_cache();
+
+forward(REFERER);
diff --git a/actions/admin/plugins/disable.php b/actions/admin/plugins/disable.php
deleted file mode 100644
index 8724759a6..000000000
--- a/actions/admin/plugins/disable.php
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
- /**
- * Disable plugin action.
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
-
- require_once(dirname(dirname(dirname(dirname(__FILE__)))) . "/engine/start.php");
-
- // block non-admin users
- admin_gatekeeper();
-
- // Validate the action
- action_gatekeeper();
-
- // Get the user
- $plugin = get_input('plugin');
-
- // Disable
- if (disable_plugin($plugin))
- system_message(sprintf(elgg_echo('admin:plugins:disable:yes'), $plugin));
- else
- register_error(sprintf(elgg_echo('admin:plugins:disable:no'), $plugin));
-
- elgg_view_regenerate_simplecache();
-
- forward($_SERVER['HTTP_REFERER']);
- exit;
-?> \ No newline at end of file
diff --git a/actions/admin/plugins/enable.php b/actions/admin/plugins/enable.php
deleted file mode 100644
index 0a9086b91..000000000
--- a/actions/admin/plugins/enable.php
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
- /**
- * Enable plugin action.
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
-
- require_once(dirname(dirname(dirname(dirname(__FILE__)))) . "/engine/start.php");
-
- // block non-admin users
- admin_gatekeeper();
-
- // Validate the action
- action_gatekeeper();
-
- // Get the user
- $plugin = get_input('plugin');
-
- // Disable
- if (enable_plugin($plugin))
- system_message(sprintf(elgg_echo('admin:plugins:enable:yes'), $plugin));
- else
- register_error(sprintf(elgg_echo('admin:plugins:enable:no'), $plugin));
-
- elgg_view_regenerate_simplecache();
-
- forward($_SERVER['HTTP_REFERER']);
- exit;
-?> \ No newline at end of file
diff --git a/actions/admin/plugins/reorder.php b/actions/admin/plugins/reorder.php
deleted file mode 100644
index be5981394..000000000
--- a/actions/admin/plugins/reorder.php
+++ /dev/null
@@ -1,53 +0,0 @@
-<?php
- /**
- * Reorder plugin action.
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
-
- require_once(dirname(dirname(dirname(dirname(__FILE__)))) . "/engine/start.php");
-
- // block non-admin users
- admin_gatekeeper();
-
- // Validate the action
- action_gatekeeper();
-
- // Get the plugin
- $mod = get_input('plugin');
- $mod = str_replace('.','',$mod);
- $mod = str_replace('/','',$mod);
-
- // Get the new order
- $order = (int) get_input('order');
-
- // Get the current plugin list
- $plugins = get_plugin_list();
-
- // Inject the plugin order back into the list
- if ($key = array_search($mod, $plugins)) {
-
- unset($plugins[$key]);
- while (isset($plugins[$order])) {
- $order++;
- }
-
- $plugins[$order] = $mod;
- }
-
- // Disable
- if (regenerate_plugin_list($plugins))
- system_message(sprintf(elgg_echo('admin:plugins:reorder:yes'), $plugin));
- else
- register_error(sprintf(elgg_echo('admin:plugins:reorder:no'), $plugin));
-
- elgg_view_regenerate_simplecache();
-
- forward($_SERVER['HTTP_REFERER']);
-
-?> \ No newline at end of file
diff --git a/actions/admin/plugins/set_priority.php b/actions/admin/plugins/set_priority.php
new file mode 100644
index 000000000..edd735371
--- /dev/null
+++ b/actions/admin/plugins/set_priority.php
@@ -0,0 +1,39 @@
+<?php
+/**
+ * Changes the load priority of a plugin.
+ *
+ * Plugin priority affects view, action, and page handler
+ * overriding as well as the order of view extensions. Plugins with higher
+ * priority are loaded after and override plugins with lower priorities.
+ *
+ * NOTE: When viewing the plugin admin page, plugins LOWER on the page
+ * have HIGHER priority and will override views, etc from plugins above them.
+ *
+ * @package Elgg.Core
+ * @subpackage Administration.Plugins
+ */
+
+$plugin_guid = get_input('plugin_guid');
+$priority = get_input('priority');
+
+$plugin = get_entity($plugin_guid);
+
+if (!($plugin instanceof ElggPlugin)) {
+ register_error(elgg_echo('admin:plugins:set_priority:no', array($plugin_guid)));
+ forward(REFERER);
+}
+
+if ($plugin->setPriority($priority)) {
+ //system_message(elgg_echo('admin:plugins:set_priority:yes', array($plugin->getManifest()->getName())));
+} else {
+ $msg = $plugin->getError();
+ $string = ($msg) ? 'admin:plugins:set_priority:no_with_msg' : 'admin:plugins:set_priority:no';
+ register_error(elgg_echo($string, array($plugin->getFriendlyName(), $plugin->getError())));
+}
+
+// don't regenerate the simplecache because the plugin won't be
+// loaded until next run. Just invalidate and let it regnerate as needed
+elgg_invalidate_simplecache();
+elgg_reset_system_cache();
+
+forward(REFERER); \ No newline at end of file
diff --git a/actions/admin/site/flush_cache.php b/actions/admin/site/flush_cache.php
new file mode 100644
index 000000000..ebb8296c7
--- /dev/null
+++ b/actions/admin/site/flush_cache.php
@@ -0,0 +1,10 @@
+<?php
+/**
+ * Flush all the caches
+ */
+
+elgg_invalidate_simplecache();
+elgg_reset_system_cache();
+
+system_message(elgg_echo('admin:cache:flushed'));
+forward(REFERER); \ No newline at end of file
diff --git a/actions/admin/site/regenerate_secret.php b/actions/admin/site/regenerate_secret.php
new file mode 100644
index 000000000..3112fb5f3
--- /dev/null
+++ b/actions/admin/site/regenerate_secret.php
@@ -0,0 +1,11 @@
+<?php
+/**
+ * Generate a new site secret
+ */
+
+init_site_secret();
+elgg_reset_system_cache();
+
+system_message(elgg_echo('admin:site:secret_regenerated'));
+
+forward(REFERER);
diff --git a/actions/admin/site/unlock_upgrade.php b/actions/admin/site/unlock_upgrade.php
new file mode 100644
index 000000000..b625b1d26
--- /dev/null
+++ b/actions/admin/site/unlock_upgrade.php
@@ -0,0 +1,10 @@
+<?php
+/**
+ * Unlocks the upgrade script
+ */
+
+if (_elgg_upgrade_is_locked()) {
+ _elgg_upgrade_unlock();
+}
+system_message(elgg_echo('upgrade:unlock:success'));
+forward(REFERER);
diff --git a/actions/admin/site/update_advanced.php b/actions/admin/site/update_advanced.php
new file mode 100644
index 000000000..4888b0a8d
--- /dev/null
+++ b/actions/admin/site/update_advanced.php
@@ -0,0 +1,98 @@
+<?php
+/**
+ * Updates the advanced settings for the primary site object.
+ *
+ * Options are saved among metadata on the site object, entries
+ * in the datalist table, and entries in the config table.
+ *
+ * @package Elgg.Core
+ * @subpackage Administration.Site
+ */
+
+if ($site = elgg_get_site_entity()) {
+ if (!($site instanceof ElggSite)) {
+ throw new InstallationException(elgg_echo('InvalidParameterException:NonElggSite'));
+ }
+
+ $site->url = rtrim(get_input('wwwroot', '', false), '/') . '/';
+
+ datalist_set('path', sanitise_filepath(get_input('path', '', false)));
+ $dataroot = sanitise_filepath(get_input('dataroot', '', false));
+
+ // check for relative paths
+ if (stripos(PHP_OS, 'win') === 0) {
+ if (strpos($dataroot, ':') !== 1) {
+ $msg = elgg_echo('admin:configuration:dataroot:relative_path', array($dataroot));
+ register_error($msg);
+ forward(REFERER);
+ }
+ } else {
+ if (strpos($dataroot, '/') !== 0) {
+ $msg = elgg_echo('admin:configuration:dataroot:relative_path', array($dataroot));
+ register_error($msg);
+ forward(REFERER);
+ }
+ }
+
+ datalist_set('dataroot', $dataroot);
+
+ if (get_input('simplecache_enabled')) {
+ elgg_enable_simplecache();
+ } else {
+ elgg_disable_simplecache();
+ }
+
+ if (get_input('system_cache_enabled')) {
+ elgg_enable_system_cache();
+ } else {
+ elgg_disable_system_cache();
+ }
+
+ set_config('default_access', get_input('default_access', ACCESS_PRIVATE), $site->getGUID());
+
+ $user_default_access = (get_input('allow_user_default_access')) ? 1 : 0;
+ set_config('allow_user_default_access', $user_default_access, $site->getGUID());
+
+ $debug = get_input('debug');
+ if ($debug) {
+ set_config('debug', $debug, $site->getGUID());
+ } else {
+ unset_config('debug', $site->getGUID());
+ }
+
+ // allow new user registration?
+ if (get_input('allow_registration', FALSE)) {
+ set_config('allow_registration', TRUE, $site->getGUID());
+ } else {
+ set_config('allow_registration', FALSE, $site->getGUID());
+ }
+
+ // setup walled garden
+ if (get_input('walled_garden', FALSE)) {
+ set_config('walled_garden', TRUE, $site->getGUID());
+ } else {
+ set_config('walled_garden', FALSE, $site->getGUID());
+ }
+
+ $https_login = get_input('https_login');
+ if ($https_login) {
+ set_config('https_login', 1, $site->getGUID());
+ } else {
+ unset_config('https_login', $site->getGUID());
+ }
+
+ $api = get_input('api');
+ if ($api) {
+ unset_config('disable_api', $site->getGUID());
+ } else {
+ set_config('disable_api', 'disabled', $site->getGUID());
+ }
+
+ if ($site->save()) {
+ system_message(elgg_echo("admin:configuration:success"));
+ } else {
+ register_error(elgg_echo("admin:configuration:fail"));
+ }
+
+ forward(REFERER);
+} \ No newline at end of file
diff --git a/actions/admin/site/update_basic.php b/actions/admin/site/update_basic.php
index 002276603..9765182cc 100644
--- a/actions/admin/site/update_basic.php
+++ b/actions/admin/site/update_basic.php
@@ -1,85 +1,27 @@
-<?php
-
- /**
- * Elgg update site action
- *
- * This is an update version of the sitesettings/install action which is used by the admin panel to modify basic settings.
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
+<?php
+/**
+ * Updates the basic settings for the primary site object.
+ *
+ * Basic site settings are saved as metadata on the site object,
+ * with the exception of the default language, which is saved in
+ * the config table.
+ *
+ * @package Elgg.Core
+ * @subpackage Administration.Site
+ */
- global $CONFIG;
-
- // block non-admin users
- admin_gatekeeper();
- action_gatekeeper();
-
- if (get_input('settings') == 'go') {
-
- if (datalist_get('default_site')) {
-
- $site = get_entity(datalist_get('default_site'));
- if (!($site instanceof ElggSite))
- throw new InstallationException(elgg_echo('InvalidParameterException:NonElggSite'));
-
- $site->description = get_input('sitedescription');
- $site->name = get_input('sitename');
- $site->email = get_input('siteemail');
- $site->url = get_input('wwwroot');
-
- datalist_set('path',sanitise_filepath(get_input('path')));
- datalist_set('dataroot',sanitise_filepath(get_input('dataroot')));
-
- set_config('language', get_input('language'), $site->getGUID());
-
- set_config('view', get_input('view'), $site->getGUID());
-
- $debug = get_input('debug');
- if ($debug)
- set_config('debug', 1, $site->getGUID());
- else
- unset_config('debug', $site->getGUID());
-
- $https_login = get_input('https_login');
- if ($https_login)
- set_config('https_login', 1, $site->getGUID());
- else
- unset_config('https_login', $site->getGUID());
-
- $usage = get_input('usage');
- if ($usage)
- unset_config('ping_home', $site->getGUID());
- else
- set_config('ping_home', 'disabled', $site->getGUID());
-
- $api = get_input('api');
- if ($api)
- unset_config('disable_api', $site->getGUID());
- else
- set_config('disable_api', 'disabled', $site->getGUID());
-
- // Now ping home
- //if ((!isset($usage)) || ($usage!='disabled'))
- //{
- // ping_home($site);
- //}
-
- if ($site->save())
- system_message(elgg_echo("admin:configuration:success"));
- else
- register_error(elgg_echo("admin:configuration:fail"));
-
- //header("Location: {$CONFIG->wwwroot}admin/site/");
- forward($_SERVER['HTTP_REFERER']);
- exit;
-
- }
-
- }
-
-?> \ No newline at end of file
+if ($site = elgg_get_site_entity()) {
+ if (!($site instanceof ElggSite)) {
+ throw new InstallationException(elgg_echo('InvalidParameterException:NonElggSite'));
+ }
+
+ $site->description = get_input('sitedescription');
+ $site->name = strip_tags(get_input('sitename'));
+ $site->email = get_input('siteemail');
+ $site->save();
+
+ set_config('language', get_input('language'), $site->getGUID());
+}
+
+system_message(elgg_echo('admin:configuration:success'));
+forward(REFERER); \ No newline at end of file
diff --git a/actions/admin/user/ban.php b/actions/admin/user/ban.php
index 65590f044..209ece2a0 100644
--- a/actions/admin/user/ban.php
+++ b/actions/admin/user/ban.php
@@ -1,39 +1,30 @@
<?php
- /**
- * Elgg ban user
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
+/**
+ * Bans a user.
+ *
+ * User entities are banned by setting the 'banned' column
+ * to 'yes' in the users_entity table.
+ *
+ * @package Elgg.Core
+ * @subpackage Administration.User
+ */
- require_once(dirname(dirname(dirname(dirname(__FILE__)))) . "/engine/start.php");
-
- // block non-admin users
- admin_gatekeeper();
- action_gatekeeper();
-
- // Get the user
- $guid = get_input('guid');
- $obj = get_entity($guid);
-
- if ( ($obj instanceof ElggUser) && ($obj->canEdit()))
- {
- // Now actually disable it
- if ($obj->ban('banned')) {
- system_message(elgg_echo('admin:user:ban:yes'));
- }
- else
- register_error(elgg_echo('admin:user:ban:no'));
- } else {
- $canedit = $obj->canEdit();
- $isinstance = ($obj instanceof ElggUser);
- register_error(elgg_echo('admin:user:ban:no'));
+$guid = get_input('guid');
+$user = get_entity($guid);
+
+if ($guid == elgg_get_logged_in_user_guid()) {
+ register_error(elgg_echo('admin:user:self:ban:no'));
+ forward(REFERER);
+}
+
+if (($user instanceof ElggUser) && ($user->canEdit())) {
+ if ($user->ban('banned')) {
+ system_message(elgg_echo('admin:user:ban:yes'));
+ } else {
+ register_error(elgg_echo('admin:user:ban:no'));
}
-
- forward('pg/admin/user/');
- exit;
-?> \ No newline at end of file
+} else {
+ register_error(elgg_echo('admin:user:ban:no'));
+}
+
+forward(REFERER); \ No newline at end of file
diff --git a/actions/admin/user/delete.php b/actions/admin/user/delete.php
index 0ee87a98d..7cfbd0925 100644
--- a/actions/admin/user/delete.php
+++ b/actions/admin/user/delete.php
@@ -1,35 +1,40 @@
<?php
- /**
- * Elgg delete user
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
+/**
+ * Delete a user.
+ *
+ * The user will be deleted recursively, meaning all entities
+ * owned or contained by the user will also be removed.
+ *
+ * @package Elgg.Core
+ * @subpackage Administration.User
+ */
- require_once(dirname(dirname(dirname(dirname(__FILE__)))) . "/engine/start.php");
+// Get the user
+$guid = get_input('guid');
+$user = get_entity($guid);
- // block non-admin users
- admin_gatekeeper();
- action_gatekeeper();
-
- // Get the user
- $guid = get_input('guid');
- $obj = get_entity($guid);
-
- if ( ($obj instanceof ElggUser) && ($obj->canEdit()))
- {
- if ($obj->delete())
- system_message(elgg_echo('admin:user:delete:yes'));
- else
- register_error(elgg_echo('admin:user:delete:no'));
- }
- else
+if ($guid == elgg_get_logged_in_user_guid()) {
+ register_error(elgg_echo('admin:user:self:delete:no'));
+ forward(REFERER);
+}
+
+$name = $user->name;
+$username = $user->username;
+
+if (($user instanceof ElggUser) && ($user->canEdit())) {
+ if ($user->delete()) {
+ system_message(elgg_echo('admin:user:delete:yes', array($name)));
+ } else {
register_error(elgg_echo('admin:user:delete:no'));
-
- forward($_SERVER['HTTP_REFERER']);
- exit;
-?> \ No newline at end of file
+ }
+} else {
+ register_error(elgg_echo('admin:user:delete:no'));
+}
+
+// forward to user administration if on a user's page as it no longer exists
+$forward = REFERER;
+if (strpos($_SERVER['HTTP_REFERER'], $username) != FALSE) {
+ $forward = "admin/users/newest";
+}
+
+forward($forward);
diff --git a/actions/admin/user/makeadmin.php b/actions/admin/user/makeadmin.php
index 440dd616a..54b0b7070 100644
--- a/actions/admin/user/makeadmin.php
+++ b/actions/admin/user/makeadmin.php
@@ -1,37 +1,27 @@
<?php
- /**
- * Make another user an admin.
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
+/**
+ * Grants admin privileges to a user.
+ *
+ * In >=1.7.1, admin is flagged by setting the admin
+ * column in the users_entity table.
+ *
+ * In <1.7.1, admin is a piece of metadata on the user object.
+ *
+ * @package Elgg.Core
+ * @subpackage Administration.User
+ */
- require_once(dirname(dirname(dirname(dirname(__FILE__)))) . "/engine/start.php");
- global $CONFIG;
-
- // block non-admin users
- admin_gatekeeper();
- action_gatekeeper();
-
- // Get the user
- $guid = get_input('guid');
- $obj = get_entity($guid);
-
- if ( ($obj instanceof ElggUser) && ($obj->canEdit()))
- {
- $obj->admin = 'yes';
- if ($obj->admin)
- system_message(elgg_echo('admin:user:makeadmin:yes'));
- else
- register_error(elgg_echo('admin:user:makeadmin:no'));
- }
- else
+$guid = get_input('guid');
+$user = get_entity($guid);
+
+if (($user instanceof ElggUser) && ($user->canEdit())) {
+ if ($user->makeAdmin()) {
+ system_message(elgg_echo('admin:user:makeadmin:yes'));
+ } else {
register_error(elgg_echo('admin:user:makeadmin:no'));
-
- forward($_SERVER['HTTP_REFERER']);
+ }
+} else {
+ register_error(elgg_echo('admin:user:makeadmin:no'));
+}
-?> \ No newline at end of file
+forward(REFERER);
diff --git a/actions/admin/user/removeadmin.php b/actions/admin/user/removeadmin.php
index 7cd06bc05..8cebc7078 100644
--- a/actions/admin/user/removeadmin.php
+++ b/actions/admin/user/removeadmin.php
@@ -1,37 +1,27 @@
<?php
- /**
- * Make another user an admin.
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
+/**
+ * Revokes admin privileges from a user.
+ *
+ * @package Elgg.Core
+ * @subpackage Administration.User
+ */
- require_once(dirname(dirname(dirname(dirname(__FILE__)))) . "/engine/start.php");
- global $CONFIG;
-
- // block non-admin users
- admin_gatekeeper();
- action_gatekeeper();
-
- // Get the user
- $guid = get_input('guid');
- $obj = get_entity($guid);
-
- if ( ($obj instanceof ElggUser) && ($obj->canEdit()))
- {
- $obj->admin = '';
- if (!$obj->admin)
- system_message(elgg_echo('admin:user:removeadmin:yes'));
- else
- register_error(elgg_echo('admin:user:removeadmin:no'));
- }
- else
+$guid = get_input('guid');
+$user = get_entity($guid);
+
+if ($guid == elgg_get_logged_in_user_guid()) {
+ register_error(elgg_echo('admin:user:self:removeadmin:no'));
+ forward(REFERER);
+}
+
+if (($user instanceof ElggUser) && ($user->canEdit())) {
+ if ($user->removeAdmin()) {
+ system_message(elgg_echo('admin:user:removeadmin:yes'));
+ } else {
register_error(elgg_echo('admin:user:removeadmin:no'));
-
- forward($_SERVER['HTTP_REFERER']);
+ }
+} else {
+ register_error(elgg_echo('admin:user:removeadmin:no'));
+}
-?> \ No newline at end of file
+forward(REFERER);
diff --git a/actions/admin/user/resetpassword.php b/actions/admin/user/resetpassword.php
index 18574d143..d019a7f55 100644
--- a/actions/admin/user/resetpassword.php
+++ b/actions/admin/user/resetpassword.php
@@ -1,44 +1,43 @@
<?php
- /**
- * Admin password reset.
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
+/**
+ * Reset a user's password.
+ *
+ * This is an admin action that generates a new salt and password
+ * for a user, then emails the password to the user's registered
+ * email address.
+ *
+ * NOTE: This is different to the "reset password" link users
+ * can use in that it does not first email the user asking if
+ * they want to have their password reset.
+ *
+ * @package Elgg.Core
+ * @subpackage Administration.User
+ */
- require_once(dirname(dirname(dirname(dirname(__FILE__)))) . "/engine/start.php");
- global $CONFIG;
-
- // block non-admin users
- admin_gatekeeper();
- action_gatekeeper();
-
- // Get the user
- $guid = get_input('guid');
- $obj = get_entity($guid);
-
- if ( ($obj instanceof ElggUser) && ($obj->canEdit()))
- {
- $password = generate_random_cleartext_password();
-
- $obj->salt = generate_random_cleartext_password(); // Reset the salt
- $obj->password = generate_user_password($obj, $password);
-
- if ($obj->save())
- {
- system_message(elgg_echo('admin:user:resetpassword:yes'));
-
- notify_user($obj->guid, $CONFIG->site->guid, elgg_echo('email:resetpassword:subject'), sprintf(elgg_echo('email:resetpassword:body'), $obj->username, $password), NULL, 'email');
- } else
- register_error(elgg_echo('admin:user:resetpassword:no'));
- }
- else
+$guid = get_input('guid');
+$user = get_entity($guid);
+
+if (($user instanceof ElggUser) && ($user->canEdit())) {
+ $password = generate_random_cleartext_password();
+
+ // Always reset the salt before generating the user password.
+ $user->salt = generate_random_cleartext_password();
+ $user->password = generate_user_password($user, $password);
+
+ if ($user->save()) {
+ system_message(elgg_echo('admin:user:resetpassword:yes'));
+
+ notify_user($user->guid,
+ elgg_get_site_entity()->guid,
+ elgg_echo('email:resetpassword:subject'),
+ elgg_echo('email:resetpassword:body', array($user->username, $password)),
+ NULL,
+ 'email');
+ } else {
register_error(elgg_echo('admin:user:resetpassword:no'));
-
- forward($_SERVER['HTTP_REFERER']);
- exit;
-?> \ No newline at end of file
+ }
+} else {
+ register_error(elgg_echo('admin:user:resetpassword:no'));
+}
+
+forward(REFERER); \ No newline at end of file
diff --git a/actions/admin/user/unban.php b/actions/admin/user/unban.php
index 06f71d47c..7a772a0d3 100644
--- a/actions/admin/user/unban.php
+++ b/actions/admin/user/unban.php
@@ -1,41 +1,27 @@
<?php
- /**
- * Elgg ban user
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
+/**
+ * Unbans a user.
+ *
+ * @package Elgg.Core
+ * @subpackage Administration.User
+ */
- require_once(dirname(dirname(dirname(dirname(__FILE__)))) . "/engine/start.php");
-
- // block non-admin users
- admin_gatekeeper();
- action_gatekeeper();
-
- $access_status = access_get_show_hidden_status();
- access_show_hidden_entities(true);
-
- // Get the user
- $guid = get_input('guid');
- $obj = get_entity($guid);
-
- if ( ($obj instanceof ElggUser) && ($obj->canEdit()))
- {
- // Now actually disable it
- if ($obj->unban())
- system_message(elgg_echo('admin:user:unban:yes'));
- else
- register_error(elgg_echo('admin:user:unban:no'));
- }
- else
+$access_status = access_get_show_hidden_status();
+access_show_hidden_entities(true);
+
+$guid = get_input('guid');
+$user = get_entity($guid);
+
+if (($user instanceof ElggUser) && ($user->canEdit())) {
+ if ($user->unban()) {
+ system_message(elgg_echo('admin:user:unban:yes'));
+ } else {
register_error(elgg_echo('admin:user:unban:no'));
-
- access_show_hidden_entities($access_status);
-
- forward($_SERVER['HTTP_REFERER']);
- exit;
-?> \ No newline at end of file
+ }
+} else {
+ register_error(elgg_echo('admin:user:unban:no'));
+}
+
+access_show_hidden_entities($access_status);
+
+forward(REFERER);
diff --git a/actions/avatar/crop.php b/actions/avatar/crop.php
new file mode 100644
index 000000000..b9a80f331
--- /dev/null
+++ b/actions/avatar/crop.php
@@ -0,0 +1,72 @@
+<?php
+/**
+ * Avatar crop action
+ *
+ */
+
+$guid = get_input('guid');
+$owner = get_entity($guid);
+
+if (!$owner || !($owner instanceof ElggUser) || !$owner->canEdit()) {
+ register_error(elgg_echo('avatar:crop:fail'));
+ forward(REFERER);
+}
+
+$x1 = (int) get_input('x1', 0);
+$y1 = (int) get_input('y1', 0);
+$x2 = (int) get_input('x2', 0);
+$y2 = (int) get_input('y2', 0);
+
+$filehandler = new ElggFile();
+$filehandler->owner_guid = $owner->getGUID();
+$filehandler->setFilename("profile/" . $owner->guid . "master" . ".jpg");
+$filename = $filehandler->getFilenameOnFilestore();
+
+// ensuring the avatar image exists in the first place
+if (!file_exists($filename)) {
+ register_error(elgg_echo('avatar:crop:fail'));
+ forward(REFERER);
+}
+
+$icon_sizes = elgg_get_config('icon_sizes');
+unset($icon_sizes['master']);
+
+// get the images and save their file handlers into an array
+// so we can do clean up if one fails.
+$files = array();
+foreach ($icon_sizes as $name => $size_info) {
+ $resized = get_resized_image_from_existing_file($filename, $size_info['w'], $size_info['h'], $size_info['square'], $x1, $y1, $x2, $y2, $size_info['upscale']);
+
+ if ($resized) {
+ //@todo Make these actual entities. See exts #348.
+ $file = new ElggFile();
+ $file->owner_guid = $guid;
+ $file->setFilename("profile/{$guid}{$name}.jpg");
+ $file->open('write');
+ $file->write($resized);
+ $file->close();
+ $files[] = $file;
+ } else {
+ // cleanup on fail
+ foreach ($files as $file) {
+ $file->delete();
+ }
+
+ register_error(elgg_echo('avatar:resize:fail'));
+ forward(REFERER);
+ }
+}
+
+$owner->icontime = time();
+
+$owner->x1 = $x1;
+$owner->x2 = $x2;
+$owner->y1 = $y1;
+$owner->y2 = $y2;
+
+system_message(elgg_echo('avatar:crop:success'));
+$view = 'river/user/default/profileiconupdate';
+elgg_delete_river(array('subject_guid' => $owner->guid, 'view' => $view));
+add_to_river($view, 'update', $owner->guid, $owner->guid);
+
+forward(REFERER);
diff --git a/actions/avatar/remove.php b/actions/avatar/remove.php
new file mode 100644
index 000000000..9cb40a760
--- /dev/null
+++ b/actions/avatar/remove.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * Avatar remove action
+ */
+
+$user_guid = get_input('guid');
+$user = get_user($user_guid);
+
+if (!$user || !$user->canEdit()) {
+ register_error(elgg_echo('avatar:remove:fail'));
+ forward(REFERER);
+}
+
+// Delete all icons from diskspace
+$icon_sizes = elgg_get_config('icon_sizes');
+foreach ($icon_sizes as $name => $size_info) {
+ $file = new ElggFile();
+ $file->owner_guid = $user_guid;
+ $file->setFilename("profile/{$user_guid}{$name}.jpg");
+ $filepath = $file->getFilenameOnFilestore();
+ if (!$file->delete()) {
+ elgg_log("Avatar file remove failed. Remove $filepath manually, please.", 'WARNING');
+ }
+}
+
+// Remove crop coords
+unset($user->x1);
+unset($user->x2);
+unset($user->y1);
+unset($user->y2);
+
+// Remove icon
+unset($user->icontime);
+
+system_message(elgg_echo('avatar:remove:success'));
+forward(REFERER);
diff --git a/actions/avatar/upload.php b/actions/avatar/upload.php
new file mode 100644
index 000000000..0752615e0
--- /dev/null
+++ b/actions/avatar/upload.php
@@ -0,0 +1,62 @@
+<?php
+/**
+ * Avatar upload action
+ */
+
+$guid = get_input('guid');
+$owner = get_entity($guid);
+
+if (!$owner || !($owner instanceof ElggUser) || !$owner->canEdit()) {
+ register_error(elgg_echo('avatar:upload:fail'));
+ forward(REFERER);
+}
+
+if ($_FILES['avatar']['error'] != 0) {
+ register_error(elgg_echo('avatar:upload:fail'));
+ forward(REFERER);
+}
+
+$icon_sizes = elgg_get_config('icon_sizes');
+
+// get the images and save their file handlers into an array
+// so we can do clean up if one fails.
+$files = array();
+foreach ($icon_sizes as $name => $size_info) {
+ $resized = get_resized_image_from_uploaded_file('avatar', $size_info['w'], $size_info['h'], $size_info['square'], $size_info['upscale']);
+
+ if ($resized) {
+ //@todo Make these actual entities. See exts #348.
+ $file = new ElggFile();
+ $file->owner_guid = $guid;
+ $file->setFilename("profile/{$guid}{$name}.jpg");
+ $file->open('write');
+ $file->write($resized);
+ $file->close();
+ $files[] = $file;
+ } else {
+ // cleanup on fail
+ foreach ($files as $file) {
+ $file->delete();
+ }
+
+ register_error(elgg_echo('avatar:resize:fail'));
+ forward(REFERER);
+ }
+}
+
+// reset crop coordinates
+$owner->x1 = 0;
+$owner->x2 = 0;
+$owner->y1 = 0;
+$owner->y2 = 0;
+
+$owner->icontime = time();
+if (elgg_trigger_event('profileiconupdate', $owner->type, $owner)) {
+ system_message(elgg_echo("avatar:upload:success"));
+
+ $view = 'river/user/default/profileiconupdate';
+ elgg_delete_river(array('subject_guid' => $owner->guid, 'view' => $view));
+ add_to_river($view, 'update', $owner->guid, $owner->guid);
+}
+
+forward(REFERER);
diff --git a/actions/comments/add.php b/actions/comments/add.php
index ea3b0326e..5bd741413 100644
--- a/actions/comments/add.php
+++ b/actions/comments/add.php
@@ -1,58 +1,62 @@
-<?php
-
- /**
- * Elgg add comment action
- *
- * @package Elgg
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider <curverider.co.uk>
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
-
- // Make sure we're logged in; forward to the front page if not
- gatekeeper();
- action_gatekeeper();
-
- // Get input
- $entity_guid = (int) get_input('entity_guid');
- $comment_text = get_input('generic_comment');
-
- // Let's see if we can get an entity with the specified GUID
- if ($entity = get_entity($entity_guid)) {
-
- // If posting the comment was successful, say so
- if ($entity->annotate('generic_comment',$comment_text,$entity->access_id, $_SESSION['guid'])) {
-
- if ($entity->owner_guid != $_SESSION['user']->getGUID())
- notify_user($entity->owner_guid, $_SESSION['user']->getGUID(), elgg_echo('generic_comment:email:subject'),
- sprintf(
- elgg_echo('generic_comment:email:body'),
- $entity->title,
- $_SESSION['user']->name,
- $comment_text,
- $entity->getURL(),
- $_SESSION['user']->name,
- $_SESSION['user']->getURL()
- )
- );
-
- system_message(elgg_echo("generic_comment:posted"));
- //add to river
- add_to_river('annotation/annotate','comment',$_SESSION['user']->guid,$entity->guid);
-
-
- } else {
- register_error(elgg_echo("generic_comment:failure"));
- }
-
- } else {
-
- register_error(elgg_echo("generic_comment:notfound"));
-
- }
-
- // Forward to the
- forward($entity->getURL());
-
-?> \ No newline at end of file
+<?php
+/**
+ * Elgg add comment action
+ *
+ * @package Elgg.Core
+ * @subpackage Comments
+ */
+
+$entity_guid = (int) get_input('entity_guid');
+$comment_text = get_input('generic_comment');
+
+if (empty($comment_text)) {
+ register_error(elgg_echo("generic_comment:blank"));
+ forward(REFERER);
+}
+
+// Let's see if we can get an entity with the specified GUID
+$entity = get_entity($entity_guid);
+if (!$entity) {
+ register_error(elgg_echo("generic_comment:notfound"));
+ forward(REFERER);
+}
+
+$user = elgg_get_logged_in_user_entity();
+
+$annotation = create_annotation($entity->guid,
+ 'generic_comment',
+ $comment_text,
+ "",
+ $user->guid,
+ $entity->access_id);
+
+// tell user annotation posted
+if (!$annotation) {
+ register_error(elgg_echo("generic_comment:failure"));
+ forward(REFERER);
+}
+
+// notify if poster wasn't owner
+if ($entity->owner_guid != $user->guid) {
+
+ notify_user($entity->owner_guid,
+ $user->guid,
+ elgg_echo('generic_comment:email:subject'),
+ elgg_echo('generic_comment:email:body', array(
+ $entity->title,
+ $user->name,
+ $comment_text,
+ $entity->getURL(),
+ $user->name,
+ $user->getURL()
+ ))
+ );
+}
+
+system_message(elgg_echo("generic_comment:posted"));
+
+//add to river
+add_to_river('river/annotation/generic_comment/create', 'comment', $user->guid, $entity->guid, "", 0, $annotation);
+
+// Forward to the page the action occurred on
+forward(REFERER);
diff --git a/actions/comments/delete.php b/actions/comments/delete.php
index 76c29449a..c6b481da4 100644
--- a/actions/comments/delete.php
+++ b/actions/comments/delete.php
@@ -1,35 +1,18 @@
-<?php
-
- /**
- * Elgg delete comment action
- *
- * @package Elgg
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider <curverider.co.uk>
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
-
- // Ensure we're logged in
- if (!isloggedin()) forward();
-
- // Make sure we can get the comment in question
- $annotation_id = (int) get_input('annotation_id');
- if ($comment = get_annotation($annotation_id)) {
-
- $entity = get_entity($comment->entity_guid);
-
- if ($comment->canEdit()) {
- $comment->delete();
- system_message(elgg_echo("generic_comment:deleted"));
- forward($entity->getURL());
- }
-
- } else {
- $url = "";
- }
-
- register_error(elgg_echo("generic_comment:notdeleted"));
- forward($entity->getURL());
-
-?> \ No newline at end of file
+<?php
+/**
+ * Elgg delete comment action
+ *
+ * @package Elgg
+ */
+
+// Make sure we can get the comment in question
+$annotation_id = (int) get_input('annotation_id');
+$comment = elgg_get_annotation_from_id($annotation_id);
+if ($comment && $comment->canEdit()) {
+ $comment->delete();
+ system_message(elgg_echo("generic_comment:deleted"));
+} else {
+ register_error(elgg_echo("generic_comment:notdeleted"));
+}
+
+forward(REFERER); \ No newline at end of file
diff --git a/actions/email/save.php b/actions/email/save.php
deleted file mode 100644
index 9e3434cf0..000000000
--- a/actions/email/save.php
+++ /dev/null
@@ -1,55 +0,0 @@
-<?php
- /**
- * Action for saving a new email address for a user and triggering a confirmation.
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
-
- require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php");
- global $CONFIG;
-
- gatekeeper();
-
- $email = get_input('email');
- $user_id = get_input('guid');
- $user = "";
-
- if (!$user_id)
- $user = $_SESSION['user'];
- else
- $user = get_entity($user_id);
-
- if ($user)
- {
- if (strcmp($email,$user->email)!=0)
- {
-
- if (!get_user_by_email($email))
- {
-
- if ($user->email != $email) {
- $user->email = $email;
- if ($user->save())
- {
- request_user_validation($user->getGUID());
- system_message(elgg_echo('email:save:success'));
- }
- else
- register_error(elgg_echo('email:save:fail'));
- }
- }
- else
- register_error(elgg_echo('registration:dupeemail'));
- }
- }
- else
- register_error(elgg_echo('email:save:fail'));
-
- //forward($_SERVER['HTTP_REFERER']);
- //exit;
-?> \ No newline at end of file
diff --git a/actions/entities/delete.php b/actions/entities/delete.php
index 9eb465363..251e1f01c 100644
--- a/actions/entities/delete.php
+++ b/actions/entities/delete.php
@@ -1,32 +1,22 @@
<?php
- /**
- * Default entity delete action
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
+/**
+ * Default entity delete action
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
- require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php");
-
- gatekeeper();
-
- $guid = get_input('guid');
-
- $entity = get_entity($guid);
-
- if (($entity) && ($entity->canEdit()))
- {
- if ($entity->delete())
- system_message(sprintf(elgg_echo('entity:delete:success'), $guid));
- else
- register_error(sprintf(elgg_echo('entity:delete:fail'), $guid));
+$guid = get_input('guid');
+$entity = get_entity($guid);
+
+if (($entity) && ($entity->canEdit())) {
+ if ($entity->delete()) {
+ system_message(elgg_echo('entity:delete:success', array($guid)));
+ } else {
+ register_error(elgg_echo('entity:delete:fail', array($guid)));
}
- else
- register_error(sprintf(elgg_echo('entity:delete:fail'), $guid));
-
- forward($_SERVER['HTTP_REFERER']);
-?> \ No newline at end of file
+} else {
+ register_error(elgg_echo('entity:delete:fail', array($guid)));
+}
+
+forward(REFERER);
diff --git a/actions/friends/add.php b/actions/friends/add.php
index e87597649..d1800ee14 100644
--- a/actions/friends/add.php
+++ b/actions/friends/add.php
@@ -1,36 +1,35 @@
-<?php
-
- /**
- * Elgg add friend action
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
-
- // Ensure we are logged in
- gatekeeper();
-
- // Get the GUID of the user to friend
- $friend_guid = get_input('friend');
- $friend = get_entity($friend_guid);
-
- $errors = false;
-
- // Get the user
- try {
- if (!$_SESSION['user']->addFriend($friend_guid)) $errors = true;
- } catch (Exception $e) {
- register_error(sprintf(elgg_echo("friends:add:failure"),$friend->name));
- $errors = true;
- }
- if (!$errors)
- system_message(sprintf(elgg_echo("friends:add:successful"),$friend->name));
-
- // Forward to the user friends page
- forward("pg/friends/" . $_SESSION['user']->username . "/");
-
-?> \ No newline at end of file
+<?php
+/**
+ * Elgg add friend action
+ *
+ * @package Elgg.Core
+ * @subpackage Friends.Management
+ */
+
+// Get the GUID of the user to friend
+$friend_guid = get_input('friend');
+$friend = get_entity($friend_guid);
+if (!$friend) {
+ register_error(elgg_echo('error:missing_data'));
+ forward(REFERER);
+}
+
+$errors = false;
+
+// Get the user
+try {
+ if (!elgg_get_logged_in_user_entity()->addFriend($friend_guid)) {
+ $errors = true;
+ }
+} catch (Exception $e) {
+ register_error(elgg_echo("friends:add:failure", array($friend->name)));
+ $errors = true;
+}
+if (!$errors) {
+ // add to river
+ add_to_river('river/relationship/friend/create', 'friend', elgg_get_logged_in_user_guid(), $friend_guid);
+ system_message(elgg_echo("friends:add:successful", array($friend->name)));
+}
+
+// Forward back to the page you friended the user on
+forward(REFERER);
diff --git a/actions/friends/addcollection.php b/actions/friends/addcollection.php
deleted file mode 100644
index 27dfc1547..000000000
--- a/actions/friends/addcollection.php
+++ /dev/null
@@ -1,50 +0,0 @@
-<?php
-
- /**
- * Elgg collection add page
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
-
- //must be logged in
- gatekeeper();
- action_gatekeeper();
-
- $collection_name = get_input('collection_name');
- $friends = get_input('friends_collection');
-
- //first check to make sure that a collection name has been set and create the new colection
- if($collection_name){
-
- //create the collection
- $create_collection = create_access_collection($collection_name, $_SESSION['user']->getGUID());
-
- //if the collection was created and the user passed some friends from the form, add them
- if($create_collection && (!empty($friends))){
-
- //add friends to the collection
- foreach($friends as $friend){
- add_user_to_access_collection($friend, $create_collection);
- }
-
- }
-
- // Success message
- system_message(elgg_echo("friends:collectionadded"));
- // Forward to the collections page
- forward("pg/collections/" . $_SESSION['user']->username);
-
- } else {
-
- register_error(elgg_echo("friends:nocollectionname"));
- // Forward to the add collection page
- forward("pg/collections/add");
-
- }
-
-?> \ No newline at end of file
diff --git a/actions/friends/collections/add.php b/actions/friends/collections/add.php
new file mode 100644
index 000000000..e63a149f7
--- /dev/null
+++ b/actions/friends/collections/add.php
@@ -0,0 +1,31 @@
+<?php
+/**
+ * Elgg collection add page
+ *
+ * @package Elgg.Core
+ * @subpackage Friends.Collections
+ */
+
+$collection_name = htmlspecialchars(get_input('collection_name', '', false), ENT_QUOTES, 'UTF-8');
+$friends = get_input('friends_collection');
+
+if (!$collection_name) {
+ register_error(elgg_echo("friends:nocollectionname"));
+ forward(REFERER);
+}
+
+$id = create_access_collection($collection_name);
+
+if ($id) {
+ $result = update_access_collection($id, $friends);
+ if ($result) {
+ system_message(elgg_echo("friends:collectionadded"));
+ forward("collections/" . elgg_get_logged_in_user_entity()->username);
+ } else {
+ register_error(elgg_echo("friends:nocollectionname"));
+ forward(REFERER);
+ }
+} else {
+ register_error(elgg_echo("friends:nocollectionname"));
+ forward(REFERER);
+} \ No newline at end of file
diff --git a/actions/friends/collections/delete.php b/actions/friends/collections/delete.php
new file mode 100644
index 000000000..ff8f1fb55
--- /dev/null
+++ b/actions/friends/collections/delete.php
@@ -0,0 +1,23 @@
+<?php
+/**
+ * Elgg friends: delete collection action
+ *
+ * @package Elgg.Core
+ * @subpackage Friends.Collections
+ */
+
+$collection_id = (int) get_input('collection');
+
+// check the ACL exists and we can edit
+if (!can_edit_access_collection($collection_id)) {
+ register_error(elgg_echo("friends:collectiondeletefailed"));
+ forward(REFERER);
+}
+
+if (delete_access_collection($collection_id)) {
+ system_message(elgg_echo("friends:collectiondeleted"));
+} else {
+ register_error(elgg_echo("friends:collectiondeletefailed"));
+}
+
+forward(REFERER);
diff --git a/actions/friends/collections/edit.php b/actions/friends/collections/edit.php
new file mode 100644
index 000000000..9eb5e1eab
--- /dev/null
+++ b/actions/friends/collections/edit.php
@@ -0,0 +1,23 @@
+<?php
+/**
+ * Friends collection edit action
+ *
+ * @package Elgg.Core
+ * @subpackage Friends.Collections
+ */
+
+$collection_id = get_input('collection_id');
+$friends = get_input('friend');
+
+// check it exists and we can edit
+if (!can_edit_access_collection($collection_id)) {
+ system_message(elgg_echo('friends:collection:edit_failed'));
+}
+
+if (update_access_collection($collection_id, $friends)) {
+ system_message(elgg_echo('friends:collections:edited'));
+} else {
+ system_message(elgg_echo('friends:collection:edit_failed'));
+}
+
+forward(REFERER); \ No newline at end of file
diff --git a/actions/friends/deletecollection.php b/actions/friends/deletecollection.php
deleted file mode 100644
index 99bfdc832..000000000
--- a/actions/friends/deletecollection.php
+++ /dev/null
@@ -1,52 +0,0 @@
-<?php
-
- /**
- * Elgg friends: delete collection action
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
-
- // Make sure we're logged in (send us to the front page if not)
- gatekeeper();
-
- // Get input data
- $collection_id = (int) get_input('collection');
-
- // Check to see that the access collection exist and grab its owner
- $get_collection = get_access_collection($collection_id);
-
- if($get_collection){
-
- if($get_collection->owner_guid == $_SESSION['user']->getGUID()){
-
- $delete_collection = delete_access_collection($collection_id);
-
- // Success message
- if ($delete_collection)
- system_message(elgg_echo("friends:collectiondeleted"));
- else
- register_error(elgg_echo("friends:collectiondeletefailed"));
-
- } else {
-
- // Failure message
- register_error(elgg_echo("friends:collectiondeletefailed"));
-
- }
-
- } else {
-
- // Failure message
- register_error(elgg_echo("friends:collectiondeletefailed"));
-
- }
-
- // Forward to the collections page
- forward("pg/collections/" . $_SESSION['user']->username);
-
-?> \ No newline at end of file
diff --git a/actions/friends/editcollection.php b/actions/friends/editcollection.php
deleted file mode 100644
index 5b828e190..000000000
--- a/actions/friends/editcollection.php
+++ /dev/null
@@ -1,20 +0,0 @@
-<?php
-
- /**
- * Elgg collection add page
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
-
- $collection_id = get_input('collection_id');
- $friends = get_input('friend');
-
- //chech the collection exists and the current user owners it
- update_access_collection($collection_id, $friends);
-
-?> \ No newline at end of file
diff --git a/actions/friends/remove.php b/actions/friends/remove.php
index debb0f7c2..d69d18f31 100644
--- a/actions/friends/remove.php
+++ b/actions/friends/remove.php
@@ -1,41 +1,32 @@
-<?php
-
- /**
- * Elgg remove friend action
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
-
- // Ensure we are logged in
- gatekeeper();
-
- // Get the GUID of the user to friend
- $friend_guid = get_input('friend');
- $friend = get_entity($friend_guid);
- $errors = false;
-
- // Get the user
- try{
- if ($friend instanceof ElggUser)
- $_SESSION['user']->removeFriend($friend_guid);
- else
- {
- register_error(sprintf(elgg_echo("friends:remove:failure"),$friend->name));
- $errors = true;
- }
- } catch (Exception $e) {
- register_error(sprintf(elgg_echo("friends:remove:failure"),$friend->name));
- $errors = true;
- }
- if (!$errors)
- system_message(sprintf(elgg_echo("friends:remove:successful"),$friend->name));
-
- // Forward to the user friends page
- forward("pg/friends/" . $_SESSION['user']->username . "/");
-
-?> \ No newline at end of file
+<?php
+/**
+ * Elgg remove friend action
+ *
+ * @package Elgg.Core
+ * @subpackage Friends.Management
+ */
+
+// Get the GUID of the user to friend
+$friend_guid = get_input('friend');
+$friend = get_entity($friend_guid);
+$errors = false;
+
+// Get the user
+try{
+ if ($friend instanceof ElggUser) {
+ elgg_get_logged_in_user_entity()->removeFriend($friend_guid);
+ } else {
+ register_error(elgg_echo("friends:remove:failure", array($friend->name)));
+ $errors = true;
+ }
+} catch (Exception $e) {
+ register_error(elgg_echo("friends:remove:failure", array($friend->name)));
+ $errors = true;
+}
+
+if (!$errors) {
+ system_message(elgg_echo("friends:remove:successful", array($friend->name)));
+}
+
+// Forward back to the page you made the friend on
+forward(REFERER);
diff --git a/actions/import/opendd.php b/actions/import/opendd.php
index dcf11f55f..e63607145 100644
--- a/actions/import/opendd.php
+++ b/actions/import/opendd.php
@@ -1,32 +1,22 @@
<?php
- /**
- * Elgg OpenDD import action.
- *
- * This action accepts data to import (in OpenDD format) and performs and import. It accepts
- * data as $data.
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
+/**
+ * Elgg OpenDD import action.
+ *
+ * This action accepts data to import (in OpenDD format) and performs and import. It accepts
+ * data as $data.
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
- // Safety
- admin_gatekeeper();
- action_gatekeeper();
-
- // Get input
- $data = get_input('data', '', false);
-
- // Import
- $return = import($data);
-
- if ($return)
- system_message(elgg_echo('importsuccess'));
- else
- register_error(elgg_echo('importfail'));
-
- forward($_SERVER['HTTP_REFERER']);
-?> \ No newline at end of file
+$data = get_input('data', '', false);
+
+$return = import($data);
+
+if ($return) {
+ system_message(elgg_echo('importsuccess'));
+} else {
+ register_error(elgg_echo('importfail'));
+}
+
+forward(REFERER);
diff --git a/actions/login.php b/actions/login.php
index b43a9e5e7..bd7f91299 100644
--- a/actions/login.php
+++ b/actions/login.php
@@ -1,47 +1,69 @@
-<?php
-
- /**
- * Elgg login action
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
-
- // Safety first
- action_gatekeeper();
-
- // Get username and password
-
- $username = get_input('username');
- $password = get_input("password");
- $persistent = get_input("persistent", false);
-
- // If all is present and correct, try to log in
- $result = false;
- if (!empty($username) && !empty($password)) {
- if ($user = authenticate($username,$password)) {
- $result = login($user, $persistent);
- }
- }
-
- // Set the system_message as appropriate
-
- if ($result) {
- system_message(elgg_echo('loginok'));
- if ($_SESSION['last_forward_from'])
- {
- $forward_url = $_SESSION['last_forward_from'];
- $_SESSION['last_forward_from'] = "";
- forward($forward_url);
- }
- else
- forward("pg/dashboard/");
- } else {
- register_error(elgg_echo('loginerror'));
- }
-
-?> \ No newline at end of file
+<?php
+/**
+ * Elgg login action
+ *
+ * @package Elgg.Core
+ * @subpackage User.Authentication
+ */
+
+// set forward url
+if (!empty($_SESSION['last_forward_from'])) {
+ $forward_url = $_SESSION['last_forward_from'];
+} elseif (get_input('returntoreferer')) {
+ $forward_url = REFERER;
+} else {
+ // forward to main index page
+ $forward_url = '';
+}
+
+$username = get_input('username');
+$password = get_input('password', null, false);
+$persistent = (bool) get_input("persistent");
+$result = false;
+
+if (empty($username) || empty($password)) {
+ register_error(elgg_echo('login:empty'));
+ forward();
+}
+
+// check if logging in with email address
+if (strpos($username, '@') !== false && ($users = get_user_by_email($username))) {
+ $username = $users[0]->username;
+}
+
+$result = elgg_authenticate($username, $password);
+if ($result !== true) {
+ register_error($result);
+ forward(REFERER);
+}
+
+$user = get_user_by_username($username);
+if (!$user) {
+ register_error(elgg_echo('login:baduser'));
+ forward(REFERER);
+}
+
+try {
+ login($user, $persistent);
+ // re-register at least the core language file for users with language other than site default
+ register_translations(dirname(dirname(__FILE__)) . "/languages/");
+} catch (LoginException $e) {
+ register_error($e->getMessage());
+ forward(REFERER);
+}
+
+// elgg_echo() caches the language and does not provide a way to change the language.
+// @todo we need to use the config object to store this so that the current language
+// can be changed. Refs #4171
+if ($user->language) {
+ $message = elgg_echo('loginok', array(), $user->language);
+} else {
+ $message = elgg_echo('loginok');
+}
+
+if (isset($_SESSION['last_forward_from'])) {
+ unset($_SESSION['last_forward_from']);
+}
+
+system_message($message);
+forward($forward_url);
diff --git a/actions/logout.php b/actions/logout.php
index 4e6bb393e..c48a26b15 100644
--- a/actions/logout.php
+++ b/actions/logout.php
@@ -1,25 +1,18 @@
-<?php
-
- /**
- * Elgg logout action
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
-
- // Log out
- $result = logout();
-
- // Set the system_message as appropriate
-
- if ($result) {
- system_message(elgg_echo('logoutok'));
- } else {
- register_error(elgg_echo('logouterror'));
- }
-
-?> \ No newline at end of file
+<?php
+/**
+ * Elgg logout action
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+// Log out
+$result = logout();
+
+// Set the system_message as appropriate
+if ($result) {
+ system_message(elgg_echo('logoutok'));
+ forward();
+} else {
+ register_error(elgg_echo('logouterror'));
+} \ No newline at end of file
diff --git a/actions/notifications/settings/usersettings/save.php b/actions/notifications/settings/usersettings/save.php
index a6a21c8a0..455a444e1 100644
--- a/actions/notifications/settings/usersettings/save.php
+++ b/actions/notifications/settings/usersettings/save.php
@@ -1,37 +1,29 @@
<?php
- /**
- * Elgg notifications user preference save acion.
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
+/**
+ * Elgg notifications user preference save acion.
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
- // Method
- $method = get_input('method');
- gatekeeper();
-
- $result = false;
- foreach ($method as $k => $v)
- {
- $result = set_user_notification_setting($_SESSION['user']->guid, $k, ($v == 'yes') ? true : false);
-
- if (!$result)
- {
- register_error(elgg_echo('notifications:usersettings:save:fail'));
- //forward($_SERVER['HTTP_REFERER']);
-
- //exit;
- }
+$method = get_input('method');
+
+$current_settings = get_user_notification_settings();
+
+$result = false;
+foreach ($method as $k => $v) {
+ // check if setting has changed and skip if not
+ if ($current_settings->$k == ($v == 'yes')) {
+ continue;
}
-
- if ($result)
- system_message(elgg_echo('notifications:usersettings:save:ok'));
- else
+
+ $result = set_user_notification_setting(elgg_get_logged_in_user_guid(), $k, ($v == 'yes') ? true : false);
+
+ if (!$result) {
register_error(elgg_echo('notifications:usersettings:save:fail'));
-
- //forward($_SERVER['HTTP_REFERER']);
-?> \ No newline at end of file
+ }
+}
+
+if ($result) {
+ system_message(elgg_echo('notifications:usersettings:save:ok'));
+}
diff --git a/actions/plugins/settings/save.php b/actions/plugins/settings/save.php
index 574b98ef2..581a2f9ec 100644
--- a/actions/plugins/settings/save.php
+++ b/actions/plugins/settings/save.php
@@ -1,42 +1,43 @@
<?php
- /**
- * Elgg plugin settings save action.
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
+/**
+ * Saves global plugin settings.
+ *
+ * This action can be overriden for a specific plugin by creating the
+ * <plugin_id>/settings/save action in that plugin.
+ *
+ * @uses array $_REQUEST['params'] A set of key/value pairs to save to the ElggPlugin entity
+ * @uses int $_REQUEST['plugin_id'] The ID of the plugin
+ *
+ * @package Elgg.Core
+ * @subpackage Plugins.Settings
+ */
- $params = get_input('params');
- $plugin = get_input('plugin');
+$params = get_input('params');
+$plugin_id = get_input('plugin_id');
+$plugin = elgg_get_plugin_from_id($plugin_id);
- gatekeeper();
- action_gatekeeper();
-
- $result = false;
-
- foreach ($params as $k => $v)
- {
- // Save
- $result = set_plugin_setting($k, $v, $plugin);
-
- // Error?
- if (!$result)
- {
- register_error(sprintf(elgg_echo('plugins:settings:save:fail'), $plugin));
-
- forward($_SERVER['HTTP_REFERER']);
-
+if (!($plugin instanceof ElggPlugin)) {
+ register_error(elgg_echo('plugins:settings:save:fail', array($plugin_id)));
+ forward(REFERER);
+}
+
+$plugin_name = $plugin->getManifest()->getName();
+
+$result = false;
+
+// allow a plugin to override the save action for their settings
+if (elgg_action_exists("$plugin_id/settings/save")) {
+ action("$plugin_id/settings/save");
+} else {
+ foreach ($params as $k => $v) {
+ $result = $plugin->setSetting($k, $v);
+ if (!$result) {
+ register_error(elgg_echo('plugins:settings:save:fail', array($plugin_name)));
+ forward(REFERER);
exit;
}
}
+}
- // An event to tell any interested plugins of the change is settings
- //trigger_elgg_event('plugin_settings_save', $plugin, find_plugin_settings($plugin)); // replaced by plugin:setting event
-
- system_message(sprintf(elgg_echo('plugins:settings:save:ok'), $plugin));
- forward($_SERVER['HTTP_REFERER']);
-?> \ No newline at end of file
+system_message(elgg_echo('plugins:settings:save:ok', array($plugin_name)));
+forward(REFERER); \ No newline at end of file
diff --git a/actions/plugins/usersettings/save.php b/actions/plugins/usersettings/save.php
index b34c80828..f6b8ab0b6 100644
--- a/actions/plugins/usersettings/save.php
+++ b/actions/plugins/usersettings/save.php
@@ -1,42 +1,58 @@
<?php
- /**
- * Elgg plugin user settings save action.
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
-
- $params = get_input('params');
- $plugin = get_input('plugin');
-
- gatekeeper();
- action_gatekeeper();
-
- $result = false;
-
- foreach ($params as $k => $v)
- {
+/**
+ * Saves user-specific plugin settings.
+ *
+ * This action can be overriden for a specific plugin by creating the
+ * <plugin_id>/usersettings/save action in that plugin.
+ *
+ * @uses array $_REQUEST['params'] A set of key/value pairs to save to the ElggPlugin entity
+ * @uses int $_REQUEST['plugin_id'] The id of the plugin
+ * @uses int $_REQUEST['user_guid'] The GUID of the user to save settings for.
+ *
+ * @package Elgg.Core
+ * @subpackage Plugins.Settings
+ */
+
+$params = get_input('params');
+$plugin_id = get_input('plugin_id');
+$user_guid = get_input('user_guid', elgg_get_logged_in_user_guid());
+$plugin = elgg_get_plugin_from_id($plugin_id);
+$user = get_entity($user_guid);
+
+if (!($plugin instanceof ElggPlugin)) {
+ register_error(elgg_echo('plugins:usersettings:save:fail', array($plugin_id)));
+ forward(REFERER);
+}
+
+if (!($user instanceof ElggUser)) {
+ register_error(elgg_echo('plugins:usersettings:save:fail', array($plugin_id)));
+ forward(REFERER);
+}
+
+$plugin_name = $plugin->getManifest()->getName();
+
+// make sure we're admin or the user
+if (!$user->canEdit()) {
+ register_error(elgg_echo('plugins:usersettings:save:fail', array($plugin_name)));
+ forward(REFERER);
+}
+
+$result = false;
+
+if (elgg_action_exists("$plugin_id/usersettings/save")) {
+ action("$plugin_id/usersettings/save");
+} else {
+ foreach ($params as $k => $v) {
// Save
- $result = set_plugin_usersetting($k, $v, $_SESSION['user']->guid, $plugin);
-
+ $result = $plugin->setUserSetting($k, $v, $user->guid);
+
// Error?
- if (!$result)
- {
- register_error(sprintf(elgg_echo('plugins:usersettings:save:fail'), $plugin));
-
- forward($_SERVER['HTTP_REFERER']);
-
- exit;
+ if (!$result) {
+ register_error(elgg_echo('plugins:usersettings:save:fail', array($plugin_name)));
+ forward(REFERER);
}
}
+}
- // An event to tell any interested plugins of the change is settings
- //trigger_elgg_event('plugin_usersettings_save', $plugin, find_plugin_settings($plugin)); // replaced by plugin:usersetting event
-
- system_message(sprintf(elgg_echo('plugins:usersettings:save:ok'), $plugin));
- forward($_SERVER['HTTP_REFERER']);
-?> \ No newline at end of file
+system_message(elgg_echo('plugins:usersettings:save:ok', array($plugin_name)));
+forward(REFERER);
diff --git a/actions/profile/edit.php b/actions/profile/edit.php
new file mode 100644
index 000000000..e1f066e82
--- /dev/null
+++ b/actions/profile/edit.php
@@ -0,0 +1,116 @@
+<?php
+/**
+ * Elgg profile edit action
+ *
+ */
+
+elgg_make_sticky_form('profile:edit');
+
+$guid = get_input('guid');
+$owner = get_entity($guid);
+
+if (!$owner || !($owner instanceof ElggUser) || !$owner->canEdit()) {
+ register_error(elgg_echo('profile:edit:fail'));
+ forward(REFERER);
+}
+
+// grab the defined profile field names and their load the values from POST.
+// each field can have its own access, so sort that too.
+$input = array();
+$accesslevel = get_input('accesslevel');
+
+if (!is_array($accesslevel)) {
+ $accesslevel = array();
+}
+
+/**
+ * wrapper for recursive array walk decoding
+ */
+function profile_array_decoder(&$v) {
+ $v = _elgg_html_decode($v);
+}
+
+$profile_fields = elgg_get_config('profile_fields');
+foreach ($profile_fields as $shortname => $valuetype) {
+ // the decoding is a stop gap to prevent &amp;&amp; showing up in profile fields
+ // because it is escaped on both input (get_input()) and output (view:output/text). see #561 and #1405.
+ // must decode in utf8 or string corruption occurs. see #1567.
+ $value = get_input($shortname);
+ if (is_array($value)) {
+ array_walk_recursive($value, 'profile_array_decoder');
+ } else {
+ $value = _elgg_html_decode($value);
+ }
+
+ // limit to reasonable sizes
+ // @todo - throwing away changes due to this is dumb!
+ if (!is_array($value) && $valuetype != 'longtext' && elgg_strlen($value) > 250) {
+ $error = elgg_echo('profile:field_too_long', array(elgg_echo("profile:{$shortname}")));
+ register_error($error);
+ forward(REFERER);
+ }
+
+ if ($value && $valuetype == 'url' && !preg_match('~^https?\://~i', $value)) {
+ $value = "http://$value";
+ }
+
+ if ($valuetype == 'tags') {
+ $value = string_to_tag_array($value);
+ }
+
+ $input[$shortname] = $value;
+}
+
+// display name is handled separately
+$name = strip_tags(get_input('name'));
+if ($name) {
+ if (elgg_strlen($name) > 50) {
+ register_error(elgg_echo('user:name:fail'));
+ } elseif ($owner->name != $name) {
+ $owner->name = $name;
+ $owner->save();
+ }
+}
+
+// go through custom fields
+if (sizeof($input) > 0) {
+ foreach ($input as $shortname => $value) {
+ $options = array(
+ 'guid' => $owner->guid,
+ 'metadata_name' => $shortname,
+ 'limit' => false
+ );
+ elgg_delete_metadata($options);
+
+ if (!is_null($value) && ($value !== '')) {
+ // only create metadata for non empty values (0 is allowed) to prevent metadata records with empty string values #4858
+
+ if (isset($accesslevel[$shortname])) {
+ $access_id = (int) $accesslevel[$shortname];
+ } else {
+ // this should never be executed since the access level should always be set
+ $access_id = ACCESS_DEFAULT;
+ }
+ if (is_array($value)) {
+ $i = 0;
+ foreach ($value as $interval) {
+ $i++;
+ $multiple = ($i > 1) ? TRUE : FALSE;
+ create_metadata($owner->guid, $shortname, $interval, 'text', $owner->guid, $access_id, $multiple);
+ }
+ } else {
+ create_metadata($owner->getGUID(), $shortname, $value, 'text', $owner->getGUID(), $access_id);
+ }
+ }
+ }
+
+ $owner->save();
+
+ // Notify of profile update
+ elgg_trigger_event('profileupdate', $owner->type, $owner);
+
+ elgg_clear_sticky_form('profile:edit');
+ system_message(elgg_echo("profile:saved"));
+}
+
+forward($owner->getUrl());
diff --git a/actions/profile/fields/add.php b/actions/profile/fields/add.php
new file mode 100644
index 000000000..fce783092
--- /dev/null
+++ b/actions/profile/fields/add.php
@@ -0,0 +1,40 @@
+<?php
+/**
+ * Elgg profile plugin edit default profile action
+ *
+ */
+
+$label = get_input('label');
+$type = get_input('type');
+
+$fieldlist = elgg_get_config('profile_custom_fields');
+if (!$fieldlist) {
+ $fieldlist = '';
+ $id = 1;
+} else {
+ $fieldlistarray = explode(',', $fieldlist);
+ foreach ($fieldlistarray as $key => $value) {
+ $fieldlistarray[$key] = (int)$value;
+ }
+ $id = max($fieldlistarray) + 1;
+}
+
+if (($label) && ($type)) {
+ if (!empty($fieldlist)) {
+ $fieldlist .= ',';
+ }
+ $fieldlist .= "$id";
+
+ if (elgg_save_config("admin_defined_profile_$id", $label) &&
+ elgg_save_config("admin_defined_profile_type_$id", $type) &&
+ elgg_save_config('profile_custom_fields', $fieldlist)) {
+
+ system_message(elgg_echo('profile:editdefault:success'));
+ } else {
+ register_error(elgg_echo('profile:editdefault:fail'));
+ }
+} else {
+ register_error(elgg_echo('profile:editdefault:fail'));
+}
+
+forward(REFERER); \ No newline at end of file
diff --git a/actions/profile/fields/delete.php b/actions/profile/fields/delete.php
new file mode 100644
index 000000000..9879feb3f
--- /dev/null
+++ b/actions/profile/fields/delete.php
@@ -0,0 +1,28 @@
+<?php
+/**
+ * Elgg profile plugin edit default profile action removal
+ *
+ */
+
+$id = get_input('id');
+
+$fieldlist = elgg_get_config('profile_custom_fields');
+if (!$fieldlist) {
+ $fieldlist = '';
+}
+
+$fieldlist = str_replace("{$id},", "", $fieldlist);
+$fieldlist = str_replace(",{$id}", "", $fieldlist);
+$fieldlist = str_replace("{$id}", "", $fieldlist);
+
+if ($id &&
+ unset_config("admin_defined_profile_$id") &&
+ unset_config("admin_defined_profile_type_$id") &&
+ elgg_save_config('profile_custom_fields', $fieldlist)) {
+
+ system_message(elgg_echo('profile:editdefault:delete:success'));
+} else {
+ register_error(elgg_echo('profile:editdefault:delete:fail'));
+}
+
+forward(REFERER); \ No newline at end of file
diff --git a/actions/profile/fields/edit.php b/actions/profile/fields/edit.php
new file mode 100644
index 000000000..5fc84ff11
--- /dev/null
+++ b/actions/profile/fields/edit.php
@@ -0,0 +1,20 @@
+<?php
+/**
+ * Edit a custom profile field
+ */
+
+$id = get_input('id');
+$label = get_input('label');
+
+if (!elgg_get_config("admin_defined_profile_$id")) {
+ register_error(elgg_echo('profile:editdefault:fail'));
+ forward(REFERER);
+}
+
+if (elgg_save_config("admin_defined_profile_$id", $label)) {
+ system_message(elgg_echo('profile:editdefault:success'));
+} else {
+ register_error(elgg_echo('profile:editdefault:fail'));
+}
+
+forward(REFERER); \ No newline at end of file
diff --git a/actions/profile/fields/reorder.php b/actions/profile/fields/reorder.php
new file mode 100644
index 000000000..27c716749
--- /dev/null
+++ b/actions/profile/fields/reorder.php
@@ -0,0 +1,12 @@
+<?php
+/**
+ * Elgg profile plugin reorder fields
+ *
+ */
+
+$ordering = get_input('fieldorder');
+
+$result = elgg_save_config('profile_custom_fields', $ordering);
+
+// called by ajax so we exit
+exit;
diff --git a/actions/profile/fields/reset.php b/actions/profile/fields/reset.php
new file mode 100644
index 000000000..19efae479
--- /dev/null
+++ b/actions/profile/fields/reset.php
@@ -0,0 +1,20 @@
+<?php
+/**
+ * Reset profile fields action
+ *
+ */
+
+$fieldlist = elgg_get_config('profile_custom_fields');
+if ($fieldlist) {
+ $fieldlistarray = explode(',', $fieldlist);
+ foreach ($fieldlistarray as $listitem) {
+ unset_config("admin_defined_profile_{$listitem}");
+ unset_config("admin_defined_profile_type_{$listitem}");
+ }
+}
+
+unset_config('profile_custom_fields');
+
+system_message(elgg_echo('profile:defaultprofile:reset'));
+
+forward(REFERER); \ No newline at end of file
diff --git a/actions/register.php b/actions/register.php
index 748c06ce6..73926232c 100644
--- a/actions/register.php
+++ b/actions/register.php
@@ -1,77 +1,80 @@
-<?php
-
- /**
- * Elgg registration action
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
+<?php
+/**
+ * Elgg registration action
+ *
+ * @package Elgg.Core
+ * @subpackage User.Account
+ */
- require_once(dirname(dirname(__FILE__)) . "/engine/start.php");
- global $CONFIG;
-
- action_gatekeeper();
-
- // Get variables
- $username = get_input('username');
- $password = get_input('password');
- $password2 = get_input('password2');
- $email = get_input('email');
- $name = get_input('name');
- $friend_guid = (int) get_input('friend_guid',0);
- $invitecode = get_input('invitecode');
-
- $admin = get_input('admin');
- if (is_array($admin)) $admin = $admin[0];
-
-
- if (!$CONFIG->disable_registration)
- {
- // For now, just try and register the user
-
- try {
- if (
- (
- (trim($password)!="") &&
- (strcmp($password, $password2)==0)
- ) &&
- ($guid = register_user($username, $password, $name, $email, false, $friend_guid, $invitecode))
- ) {
-
- $new_user = get_entity($guid);
- if (($guid) && ($admin))
- {
- admin_gatekeeper(); // Only admins can make someone an admin
- $new_user->admin = 'yes';
- }
-
- // Send user validation request on register only
- request_user_validation($guid);
-
- if (!$new_user->admin)
- $new_user->disable('new_user'); // Now disable if not an admin
-
- system_message(sprintf(elgg_echo("registerok"),$CONFIG->sitename));
-
- forward(); // Forward on success, assume everything else is an error...
- } else {
- register_error(elgg_echo("registerbad"));
- }
- } catch (RegistrationException $r) {
- register_error($r->getMessage());
+elgg_make_sticky_form('register');
+
+// Get variables
+$username = get_input('username');
+$password = get_input('password', null, false);
+$password2 = get_input('password2', null, false);
+$email = get_input('email');
+$name = get_input('name');
+$friend_guid = (int) get_input('friend_guid', 0);
+$invitecode = get_input('invitecode');
+
+if (elgg_get_config('allow_registration')) {
+ try {
+ if (trim($password) == "" || trim($password2) == "") {
+ throw new RegistrationException(elgg_echo('RegistrationException:EmptyPassword'));
+ }
+
+ if (strcmp($password, $password2) != 0) {
+ throw new RegistrationException(elgg_echo('RegistrationException:PasswordMismatch'));
+ }
+
+ $guid = register_user($username, $password, $name, $email, false, $friend_guid, $invitecode);
+
+ if ($guid) {
+ $new_user = get_entity($guid);
+
+ // allow plugins to respond to self registration
+ // note: To catch all new users, even those created by an admin,
+ // register for the create, user event instead.
+ // only passing vars that aren't in ElggUser.
+ $params = array(
+ 'user' => $new_user,
+ 'password' => $password,
+ 'friend_guid' => $friend_guid,
+ 'invitecode' => $invitecode
+ );
+
+ // @todo should registration be allowed no matter what the plugins return?
+ if (!elgg_trigger_plugin_hook('register', 'user', $params, TRUE)) {
+ $ia = elgg_set_ignore_access(true);
+ $new_user->delete();
+ elgg_set_ignore_access($ia);
+ // @todo this is a generic messages. We could have plugins
+ // throw a RegistrationException, but that is very odd
+ // for the plugin hooks system.
+ throw new RegistrationException(elgg_echo('registerbad'));
}
+
+ elgg_clear_sticky_form('register');
+ system_message(elgg_echo("registerok", array(elgg_get_site_entity()->name)));
+
+ // if exception thrown, this probably means there is a validation
+ // plugin that has disabled the user
+ try {
+ login($new_user);
+ } catch (LoginException $e) {
+ // do nothing
+ }
+
+ // Forward on success, assume everything else is an error...
+ forward();
+ } else {
+ register_error(elgg_echo("registerbad"));
}
- else
- register_error(elgg_echo('registerdisabled'));
-
- $qs = explode('?',$_SERVER['HTTP_REFERER']);
- $qs = $qs[0];
- $qs .= "?u=" . urlencode($username) . "&e=" . urlencode($email) . "&n=" . urlencode($name) . "&friend_guid=" . $friend_guid;
-
- forward($qs);
-
-?> \ No newline at end of file
+ } catch (RegistrationException $r) {
+ register_error($r->getMessage());
+ }
+} else {
+ register_error(elgg_echo('registerdisabled'));
+}
+
+forward(REFERER);
diff --git a/actions/river/delete.php b/actions/river/delete.php
new file mode 100644
index 000000000..0d8297932
--- /dev/null
+++ b/actions/river/delete.php
@@ -0,0 +1,21 @@
+<?php
+/**
+ * River item delete action
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+$id = get_input('id', false);
+
+if ($id !== false && elgg_is_admin_logged_in()) {
+ if (elgg_delete_river(array('id' => $id))) {
+ system_message(elgg_echo('river:delete:success'));
+ } else {
+ register_error(elgg_echo('river:delete:fail'));
+ }
+} else {
+ register_error(elgg_echo('river:delete:fail'));
+}
+
+forward(REFERER);
diff --git a/actions/security/refreshtoken.php b/actions/security/refreshtoken.php
new file mode 100644
index 000000000..74a72c4af
--- /dev/null
+++ b/actions/security/refreshtoken.php
@@ -0,0 +1,5 @@
+<?php
+$ts = time();
+$token = generate_action_token($ts);
+
+echo json_encode(array('__elgg_ts' => $ts, '__elgg_token' => $token)); \ No newline at end of file
diff --git a/actions/systemsettings/install.php b/actions/systemsettings/install.php
deleted file mode 100644
index 8b8f78517..000000000
--- a/actions/systemsettings/install.php
+++ /dev/null
@@ -1,120 +0,0 @@
-<?php
-
- /**
- * Elgg install site action
- *
- * Creates a nwe site and sets it as the default
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
-
- elgg_set_viewtype('failsafe'); // Set failsafe again incase we get an exception thrown
-
- if (is_installed()) forward();
-
- if (get_input('settings') == 'go') {
-
- if (!datalist_get('default_site')) {
-
- // Sanitise
- $path = sanitise_filepath(get_input('path'));
- $dataroot = sanitise_filepath(get_input('dataroot'));
-
- // Blank?
- if ($dataroot == "/")
- throw new InstallationException(elgg_echo('InstallationException:DatarootBlank'));
-
- // That it's valid
- if (stripos($dataroot, $path)!==false)
- throw new InstallationException(sprintf(elgg_echo('InstallationException:DatarootUnderPath'), $dataroot));
-
- // Check data root is writable
- if (!is_writable($dataroot))
- throw new InstallationException(sprintf(elgg_echo('InstallationException:DatarootNotWritable'), $dataroot));
-
-
- $site = new ElggSite();
- $site->name = get_input('sitename');
- $site->url = get_input('wwwroot');
- $site->description = get_input('sitedescription');
- $site->email = get_input('siteemail');
- $site->access_id = ACCESS_PUBLIC;
- $guid = $site->save();
-
- if (!$guid)
- throw new InstallationException(sprintf(elgg_echo('InstallationException:CantCreateSite'), get_input('sitename'), get_input('wwwroot')));
-
- datalist_set('installed',time());
-
- datalist_set('path', $path);
- datalist_set('dataroot', $dataroot);
-
- datalist_set('default_site',$site->getGUID());
-
- set_config('view', get_input('view'), $site->getGUID());
- set_config('language', get_input('language'), $site->getGUID());
-
- $debug = get_input('debug');
- if ($debug)
- set_config('debug', 1, $site->getGUID());
- else
- unset_config('debug', $site->getGUID());
-
- $usage = get_input('usage');
- if (is_array($usage)) $usage = $usage[0];
-
- if ($usage)
- unset_config('ping_home', $site->getGUID());
- else
- set_config('ping_home', 'disabled', $site->getGUID());
-
- $api = get_input('api');
- if ($api)
- unset_config('disable_api', $site->getGUID());
- else
- set_config('disable_api', 'disabled', $site->getGUID());
-
- $https_login = get_input('https_login');
- if ($https_login)
- set_config('https_login', 1, $site->getGUID());
- else
- unset_config('https_login', $site->getGUID());
-
- // activate some plugins by default
- if (isset($CONFIG->default_plugins))
- {
- $plugins = explode(',', $CONFIG->default_plugins);
- foreach ($plugins as $plugin)
- enable_plugin(trim($plugins), $site->getGUID());
- }
- else
- {
- enable_plugin('profile', $site->getGUID());
- enable_plugin('river', $site->getGUID());
- enable_plugin('updateclient', $site->getGUID());
- enable_plugin('logbrowser', $site->getGUID());
- enable_plugin('diagnostics', $site->getGUID());
- enable_plugin('uservalidationbyemail', $site->getGUID());
- }
-
- // Now ping home
- if ($usage)
- {
- ping_home($site);
- }
-
- system_message(elgg_echo("installation:configuration:success"));
-
- header("Location: ../../account/register.php");
- exit;
-
- }
-
- }
-
-?> \ No newline at end of file
diff --git a/actions/user/language.php b/actions/user/language.php
deleted file mode 100644
index ec910c12a..000000000
--- a/actions/user/language.php
+++ /dev/null
@@ -1,43 +0,0 @@
-<?php
- /**
- * Action for changing a user's personal language settings
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
-
- require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php");
- global $CONFIG;
-
- gatekeeper();
-
- $language = get_input('language');
- $user_id = get_input('guid');
- $user = "";
-
- if (!$user_id)
- $user = $_SESSION['user'];
- else
- $user = get_entity($user_id);
-
- if (($user) && ($language))
- {
- if (strcmp($language, $user->language)!=0)
- {
- $user->language = $language;
- if ($user->save())
- system_message(elgg_echo('user:language:success'));
- else
- register_error(elgg_echo('user:language:fail'));
- }
- }
- else
- register_error(elgg_echo('user:language:fail'));
-
- //forward($_SERVER['HTTP_REFERER']);
- //exit;
-?> \ No newline at end of file
diff --git a/actions/user/name.php b/actions/user/name.php
deleted file mode 100644
index a69d44487..000000000
--- a/actions/user/name.php
+++ /dev/null
@@ -1,43 +0,0 @@
-<?php
- /**
- * Action for changing a user's name
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
-
- require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php");
- global $CONFIG;
-
- gatekeeper();
-
- $name = get_input('name');
- $user_id = get_input('guid');
- $user = "";
-
- if (!$user_id)
- $user = $_SESSION['user'];
- else
- $user = get_entity($user_id);
-
- if (($user) && ($name))
- {
- if (strcmp($name, $user->name)!=0)
- {
- $user->name = $name;
- if ($user->save())
- system_message(elgg_echo('user:name:success'));
- else
- register_error(elgg_echo('user:name:fail'));
- }
- }
- else
- register_error(elgg_echo('user:name:fail'));
-
- //forward($_SERVER['HTTP_REFERER']);
- //exit;
-?> \ No newline at end of file
diff --git a/actions/user/password.php b/actions/user/password.php
deleted file mode 100644
index 7e097e132..000000000
--- a/actions/user/password.php
+++ /dev/null
@@ -1,50 +0,0 @@
-<?php
- /**
- * Action for changing a user's password
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
-
- require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php");
- global $CONFIG;
-
- gatekeeper();
-
- $password = get_input('password');
- $password2 = get_input('password2');
- $user_id = get_input('guid');
- $user = "";
-
- if (!$user_id)
- $user = $_SESSION['user'];
- else
- $user = get_entity($user_id);
-
- if (($user) && ($password!=""))
- {
- if (strlen($password)>=4)
- {
- if ($password == $password2)
- {
- $user->salt = generate_random_cleartext_password(); // Reset the salt
- $user->password = generate_user_password($user, $password);
- if ($user->save())
- system_message(elgg_echo('user:password:success'));
- else
- register_error(elgg_echo('user:password:fail'));
- }
- else
- register_error(elgg_echo('user:password:fail:notsame'));
- }
- else
- register_error(elgg_echo('user:password:fail:tooshort'));
- }
-
- //forward($_SERVER['HTTP_REFERER']);
- //exit;
-?> \ No newline at end of file
diff --git a/actions/user/passwordreset.php b/actions/user/passwordreset.php
index e7bfbdebd..201d6abcf 100644
--- a/actions/user/passwordreset.php
+++ b/actions/user/passwordreset.php
@@ -1,27 +1,19 @@
<?php
- /**
- * Action to reset a password and send success email.
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
+/**
+ * Action to reset a password and send success email.
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
- require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php");
- global $CONFIG;
-
- $user_guid = get_input('u');
- $code = get_input('c');
-
- if (execute_new_password_request($user_guid, $code))
- system_message(elgg_echo('user:password:success'));
- else
- register_error(elgg_echo('user:password:fail'));
-
- forward($_SERVER['HTTP_REFERER']);
- exit;
-
-?> \ No newline at end of file
+$user_guid = get_input('u');
+$code = get_input('c');
+
+if (execute_new_password_request($user_guid, $code)) {
+ system_message(elgg_echo('user:password:success'));
+} else {
+ register_error(elgg_echo('user:password:fail'));
+}
+
+forward();
+exit;
diff --git a/actions/user/requestnewpassword.php b/actions/user/requestnewpassword.php
index de7147a7b..f1d4fa43c 100644
--- a/actions/user/requestnewpassword.php
+++ b/actions/user/requestnewpassword.php
@@ -1,33 +1,27 @@
<?php
- /**
- * Action to request a new password.
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
+/**
+ * Action to request a new password.
+ *
+ * @package Elgg.Core
+ * @subpackage User.Account
+ */
- require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php");
- global $CONFIG;
-
- action_gatekeeper();
-
- $username = get_input('username');
-
- $user = get_user_by_username($username);
- if ($user)
- {
- if (send_new_password_request($user->guid))
- system_message(elgg_echo('user:password:resetreq:success'));
- else
- register_error(elgg_echo('user:password:resetreq:fail'));
+$username = get_input('username');
+
+// allow email addresses
+if (strpos($username, '@') !== false && ($users = get_user_by_email($username))) {
+ $username = $users[0]->username;
+}
+
+$user = get_user_by_username($username);
+if ($user) {
+ if (send_new_password_request($user->guid)) {
+ system_message(elgg_echo('user:password:resetreq:success'));
+ } else {
+ register_error(elgg_echo('user:password:resetreq:fail'));
}
- else
- register_error(sprintf(elgg_echo('user:username:notfound'), $username));
-
- forward($_SERVER['HTTP_REFERER']);
- exit;
-?> \ No newline at end of file
+} else {
+ register_error(elgg_echo('user:username:notfound', array($username)));
+}
+
+forward();
diff --git a/actions/user/spotlight.php b/actions/user/spotlight.php
index b43af2f16..202dde387 100644
--- a/actions/user/spotlight.php
+++ b/actions/user/spotlight.php
@@ -1,15 +1,19 @@
-<?php
-
- gatekeeper();
-
- $closed = get_input('closed','true');
- if ($closed != 'true') {
- $closed = false;
- } else {
- $closed = true;
- }
-
- $_SESSION['user']->spotlightclosed = $closed;
- exit;
-
-?> \ No newline at end of file
+<?php
+/**
+ * Close or open spotlight.
+ *
+ * @package Elgg.Core
+ * @subpackage Spotlight
+ * @todo This is deprecated in 1.8
+ */
+
+$closed = get_input('closed', 'true');
+if ($closed != 'true') {
+ $closed = false;
+} else {
+ $closed = true;
+}
+
+elgg_get_logged_in_user_entity()->spotlightclosed = $closed;
+// exit as this action is called through Ajax
+exit; \ No newline at end of file
diff --git a/actions/useradd.php b/actions/useradd.php
index e6e071f01..17459021b 100644
--- a/actions/useradd.php
+++ b/actions/useradd.php
@@ -1,58 +1,69 @@
<?php
+/**
+ * Elgg add action
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
- /**
- * Elgg add action
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
-
- require_once(dirname(dirname(__FILE__)) . "/engine/start.php");
-
- admin_gatekeeper(); // Only admins can make someone an admin
- action_gatekeeper();
-
- // Get variables
- global $CONFIG;
- $username = get_input('username');
- $password = get_input('password');
- $password2 = get_input('password2');
- $email = get_input('email');
- $name = get_input('name');
-
- $admin = get_input('admin');
- if (is_array($admin)) $admin = $admin[0];
-
- // For now, just try and register the user
- try {
- if (
- (
- (trim($password)!="") &&
- (strcmp($password, $password2)==0)
- ) &&
- ($guid = register_user($username, $password, $name, $email, true))
- ) {
- $new_user = get_entity($guid);
- if (($guid) && ($admin))
- $new_user->admin = 'yes';
-
- $new_user->admin_created = true;
-
-
- notify_user($new_user->guid, $CONFIG->site->guid, elgg_echo('useradd:subject'), sprintf(elgg_echo('useradd:body'), $name, $CONFIG->site->name, $CONFIG->site->url, $username, $password));
-
- system_message(sprintf(elgg_echo("adduser:ok"),$CONFIG->sitename));
- } else {
- register_error(elgg_echo("adduser:bad"));
+elgg_make_sticky_form('useradd');
+
+// Get variables
+$username = get_input('username');
+$password = get_input('password', null, false);
+$password2 = get_input('password2', null, false);
+$email = get_input('email');
+$name = get_input('name');
+
+$admin = get_input('admin');
+if (is_array($admin)) {
+ $admin = $admin[0];
+}
+
+// no blank fields
+if ($username == '' || $password == '' || $password2 == '' || $email == '' || $name == '') {
+ register_error(elgg_echo('register:fields'));
+ forward(REFERER);
+}
+
+if (strcmp($password, $password2) != 0) {
+ register_error(elgg_echo('RegistrationException:PasswordMismatch'));
+ forward(REFERER);
+}
+
+// For now, just try and register the user
+try {
+ $guid = register_user($username, $password, $name, $email, TRUE);
+
+ if ($guid) {
+ $new_user = get_entity($guid);
+ if ($new_user && $admin && elgg_is_admin_logged_in()) {
+ $new_user->makeAdmin();
}
- } catch (RegistrationException $r) {
- register_error($r->getMessage());
+
+ elgg_clear_sticky_form('useradd');
+
+ $new_user->admin_created = TRUE;
+ // @todo ugh, saving a guid as metadata!
+ $new_user->created_by_guid = elgg_get_logged_in_user_guid();
+
+ $subject = elgg_echo('useradd:subject');
+ $body = elgg_echo('useradd:body', array(
+ $name,
+ elgg_get_site_entity()->name,
+ elgg_get_site_entity()->url,
+ $username,
+ $password,
+ ));
+
+ notify_user($new_user->guid, elgg_get_site_entity()->guid, $subject, $body);
+
+ system_message(elgg_echo("adduser:ok", array(elgg_get_site_entity()->name)));
+ } else {
+ register_error(elgg_echo("adduser:bad"));
}
+} catch (RegistrationException $r) {
+ register_error($r->getMessage());
+}
- forward($_SERVER['HTTP_REFERER']);
- exit;
-?> \ No newline at end of file
+forward(REFERER);
diff --git a/actions/usersettings/save.php b/actions/usersettings/save.php
index 04d7532d0..eb6cdbd5d 100644
--- a/actions/usersettings/save.php
+++ b/actions/usersettings/save.php
@@ -1,22 +1,11 @@
-<?php
- /**
- * Aggregate action for saving settings
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
-
- require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php");
- global $CONFIG;
-
- gatekeeper();
- action_gatekeeper();
-
- trigger_plugin_hook('usersettings:save','user');
-
- forward($_SERVER['HTTP_REFERER']);
-
-?>
+<?php
+/**
+ * Aggregate action for saving settings
+ *
+ * @package Elgg.Core
+ * @subpackage UserSettings
+ */
+
+elgg_trigger_plugin_hook('usersettings:save', 'user');
+
+forward(REFERER);
diff --git a/actions/widgets/add.php b/actions/widgets/add.php
index ff4af4a47..d7b2f291c 100644
--- a/actions/widgets/add.php
+++ b/actions/widgets/add.php
@@ -1,43 +1,42 @@
-<?php
-
- /**
- * Elgg widget add action
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
-
- $guid = get_input('user');
- $handler = get_input('handler');
- $context = get_input('context');
- $column = get_input('column');
-
- $result = false;
-
- if (!empty($guid)) {
-
- if ($user = get_entity($guid)) {
-
- if ($user->canEdit()) {
-
- $result = add_widget($user->getGUID(),$handler,$context,0,$column);
-
- }
-
- }
-
- }
-
- if ($result) {
- system_message(elgg_echo('widgets:save:success'));
- } else {
- register_error(elgg_echo('widgets:save:failure'));
- }
-
- forward($_SERVER['HTTP_REFERER']);
-
-?> \ No newline at end of file
+<?php
+/**
+ * Elgg widget add action
+ *
+ * @package Elgg.Core
+ * @subpackage Widgets.Management
+ */
+
+$owner_guid = get_input('owner_guid');
+$handler = get_input('handler');
+$context = get_input('context');
+$show_access = (bool)get_input('show_access', true);
+$column = get_input('column', 1);
+$default_widgets = get_input('default_widgets', 0);
+
+elgg_push_context($context);
+if ($default_widgets) {
+ elgg_push_context('default_widgets');
+}
+elgg_push_context('widgets');
+
+if (!empty($owner_guid)) {
+ $owner = get_entity($owner_guid);
+ if ($owner && $owner->canEdit()) {
+ $guid = elgg_create_widget($owner->getGUID(), $handler, $context);
+ if ($guid) {
+ $widget = get_entity($guid);
+
+ // position the widget
+ $widget->move($column, 0);
+
+ // send widget html for insertion
+ echo elgg_view_entity($widget, array('show_access' => $show_access));
+
+ //system_message(elgg_echo('widgets:add:success'));
+ forward(REFERER);
+ }
+ }
+}
+
+register_error(elgg_echo('widgets:add:failure'));
+forward(REFERER);
diff --git a/actions/widgets/delete.php b/actions/widgets/delete.php
new file mode 100644
index 000000000..47920013d
--- /dev/null
+++ b/actions/widgets/delete.php
@@ -0,0 +1,20 @@
+<?php
+/**
+ * Elgg widget delete action
+ *
+ * @package Elgg.Core
+ * @subpackage Widgets.Management
+ */
+
+$widget_guid = get_input('widget_guid');
+$owner_guid = get_input('owner_guid', elgg_get_logged_in_user_guid());
+
+$widget = get_entity($widget_guid);
+$owner = get_entity($owner_guid);
+
+if ($widget && $owner->canEdit() && $widget->delete()) {
+ forward(REFERER);
+}
+
+register_error(elgg_echo('widgets:remove:failure'));
+forward(REFERER);
diff --git a/actions/widgets/move.php b/actions/widgets/move.php
new file mode 100644
index 000000000..eab650c9c
--- /dev/null
+++ b/actions/widgets/move.php
@@ -0,0 +1,24 @@
+<?php
+/**
+ * Elgg widget move action
+ *
+ * @package Elgg.Core
+ * @subpackage Widgets.Management
+ */
+
+$widget_guid = get_input('widget_guid');
+$column = get_input('column', 1);
+$position = get_input('position');
+$owner_guid = get_input('owner_guid', elgg_get_logged_in_user_guid());
+
+$widget = get_entity($widget_guid);
+$owner = get_entity($owner_guid);
+
+
+if ($widget && $owner->canEdit()) {
+ $widget->move($column, $position);
+ forward(REFERER);
+}
+
+register_error(elgg_echo('widgets:move:failure'));
+forward(REFERER); \ No newline at end of file
diff --git a/actions/widgets/reorder.php b/actions/widgets/reorder.php
index 47f799889..e43a0ba73 100644
--- a/actions/widgets/reorder.php
+++ b/actions/widgets/reorder.php
@@ -1,32 +1,24 @@
-<?php
-
- /**
- * Elgg widget reorder action
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
-
-
- $owner = get_input('owner');
- $context = get_input('context');
-
- $maincontent = get_input('debugField1');
- $sidebar = get_input('debugField2');
- $rightbar = get_input('debugField3');
-
- $result = reorder_widgets_from_panel($maincontent, $sidebar, $rightbar, $context, $owner);
-
- if ($result) {
- system_message(elgg_echo('widgets:panel:save:success'));
- } else {
- register_error(elgg_echo('widgets:panel:save:failure'));
- }
-
- forward($_SERVER['HTTP_REFERER']);
-
-?> \ No newline at end of file
+<?php
+/**
+ * Elgg widget reorder action
+ *
+ * @package Elgg.Core
+ * @subpackage Widgets.Management
+ */
+
+$owner = get_input('owner');
+$context = get_input('context');
+
+$maincontent = get_input('debugField1');
+$sidebar = get_input('debugField2');
+$rightbar = get_input('debugField3');
+
+$result = reorder_widgets_from_panel($maincontent, $sidebar, $rightbar, $context, $owner);
+
+if ($result) {
+ system_message(elgg_echo('widgets:panel:save:success'));
+} else {
+ register_error(elgg_echo('widgets:panel:save:failure'));
+}
+
+forward(REFERER); \ No newline at end of file
diff --git a/actions/widgets/save.php b/actions/widgets/save.php
index e86632c6e..e15deab77 100644
--- a/actions/widgets/save.php
+++ b/actions/widgets/save.php
@@ -1,38 +1,44 @@
-<?php
-
- /**
- * Elgg widget save action
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
-
- action_gatekeeper();
-
- $guid = get_input('guid');
- $params = $_REQUEST['params'];
- $pageurl = get_input('pageurl');
- $noforward = get_input('noforward',false);
-
- $result = false;
-
- if (!empty($guid)) {
-
- $result = save_widget_info($guid,$params);
-
- }
-
- if ($result) {
- system_message(elgg_echo('widgets:save:success'));
- } else {
- register_error(elgg_echo('widgets:save:failure'));
- }
-
- if (!$noforward)
- forward($_SERVER['HTTP_REFERER']);
-
-?> \ No newline at end of file
+<?php
+/**
+ * Elgg save widget settings action
+ *
+ * @package Elgg.Core
+ * @subpackage Widgets.Management
+ *
+ * @uses int $_REQUEST['guid'] The guid of the widget to save
+ * @uses array $_REQUEST['params'] An array of params to set on the widget.
+ * @uses int $_REQUEST['default_widgets'] Flag for if these settings are for default wigets.
+ * @uses string $_REQUEST['context'] An optional context of the widget. Used to return
+ * the correct output if widget content changes
+ * depending on context.
+ *
+ */
+
+elgg_set_context('widgets');
+
+$guid = get_input('guid');
+$params = get_input('params');
+$default_widgets = get_input('default_widgets', 0);
+$context = get_input('context');
+
+$widget = get_entity($guid);
+if ($widget && $widget->saveSettings($params)) {
+ elgg_set_page_owner_guid($widget->getContainerGUID());
+ if ($context) {
+ elgg_push_context($context);
+ }
+
+ if (!$default_widgets) {
+ if (elgg_view_exists("widgets/$widget->handler/content")) {
+ $view = "widgets/$widget->handler/content";
+ } else {
+ elgg_deprecated_notice("widgets use content as the display view", 1.8);
+ $view = "widgets/$widget->handler/view";
+ }
+ echo elgg_view($view, array('entity' => $widget));
+ }
+} else {
+ register_error(elgg_echo('widgets:save:failure'));
+}
+
+forward(REFERER); \ No newline at end of file
diff --git a/actions/widgets/upgrade.php b/actions/widgets/upgrade.php
new file mode 100644
index 000000000..0a5cf8d48
--- /dev/null
+++ b/actions/widgets/upgrade.php
@@ -0,0 +1,65 @@
+<?php
+/**
+ * Upgrade default widgets for Elgg 1.8
+ *
+ * Pre-1.8, default widgets were stored as metadata on a defaultwidgets object.
+ * Now they are stored as widget objects owned by the site.
+ *
+ * @package Elgg.Core
+ * @subpackage Widgets.Management
+ */
+
+$object = elgg_get_entities(array(
+ 'type' => 'object',
+ 'subtype' => 'moddefaultwidgets',
+ 'limit' => 1,
+));
+
+if (!$object) {
+ forward(REFERER);
+}
+
+$object = $object[0];
+
+$site = elgg_get_site_entity();
+
+$ia = elgg_set_ignore_access(true);
+foreach (array('profile', 'dashboard') as $context) {
+ if (isset($object->$context)) {
+ elgg_push_context($context);
+ elgg_push_context('default_widgets');
+ elgg_push_context('widgets');
+
+ // deserialize the widget information
+ list($left, $middle, $right) = split('%%', $object->$context);
+ $left_widgets = split('::', $left);
+ $middle_widgets = split('::', $middle);
+ $right_widgets = split('::', $right);
+
+ // 1st column is right column in default theme
+ $widgets = array(
+ 1 => array_reverse($right_widgets),
+ 2 => array_reverse($middle_widgets),
+ 3 => array_reverse($left_widgets),
+ );
+
+ foreach ($widgets as $column => $column_widgets) {
+ foreach ($column_widgets as $handler) {
+ $guid = elgg_create_widget($site->getGUID(), $handler, $context);
+ if ($guid) {
+ $widget = get_entity($guid);
+ $widget->move($column, 0);
+ }
+ }
+ }
+
+ elgg_pop_context();
+ elgg_pop_context();
+ elgg_pop_context();
+ }
+}
+elgg_set_ignore_access($ia);
+
+$object->delete();
+system_message(elgg_echo('upgrade:core'));
+forward(REFERER);
diff --git a/admin/index.php b/admin/index.php
deleted file mode 100644
index dbe5185aa..000000000
--- a/admin/index.php
+++ /dev/null
@@ -1,21 +0,0 @@
-<?php
-
- /**
- * Elgg administration system index
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
-
- // Get the Elgg framework
- require_once(dirname(dirname(__FILE__)) . "/engine/start.php");
-
- // Make sure only valid admin users can see this
- admin_gatekeeper();
- forward('pg/admin/statistics/')
-
-?> \ No newline at end of file
diff --git a/admin/plugins.php b/admin/plugins.php
deleted file mode 100644
index 9d3b3218a..000000000
--- a/admin/plugins.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-
- /**
- * Elgg administration plugin system index
- * This is a special page that permits the configuration of plugins in a standard way.
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
-
- // Get the Elgg framework
- require_once(dirname(dirname(__FILE__)) . "/engine/start.php");
-
- // Make sure only valid admin users can see this
- admin_gatekeeper();
-
- // Set admin user for user block
- set_page_owner($_SESSION['guid']);
-
- // Regenerate plugin list
- regenerate_plugin_list();
-
- // Display main admin menu
- page_draw(elgg_echo("admin:plugins"),elgg_view_layout("two_column_left_sidebar", '', elgg_view_title(elgg_echo('admin:plugins')) . elgg_view("admin/plugins", array('installed_plugins' => get_installed_plugins()))));
-
-?> \ No newline at end of file
diff --git a/admin/site.php b/admin/site.php
deleted file mode 100644
index 7803b4a39..000000000
--- a/admin/site.php
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-
- /**
- * Elgg administration site system index
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
-
- // Get the Elgg framework
- require_once(dirname(dirname(__FILE__)) . "/engine/start.php");
-
- // Make sure only valid admin users can see this
- admin_gatekeeper();
-
- // Set admin user for user block
- set_page_owner($_SESSION['guid']);
-
- // Display main admin menu
- page_draw(elgg_echo("admin:site"),elgg_view_layout("two_column_left_sidebar",'', elgg_view_title(elgg_echo('admin:site')) . elgg_view("admin/site")));
-
-?> \ No newline at end of file
diff --git a/admin/statistics.php b/admin/statistics.php
deleted file mode 100644
index fcc42bad5..000000000
--- a/admin/statistics.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
- /**
- * Elgg administration statistics index
- * This is a special page that displays a number of statistics
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
-
- // Get the Elgg framework
- require_once(dirname(dirname(__FILE__)) . "/engine/start.php");
-
- // Make sure only valid admin users can see this
- admin_gatekeeper();
-
- // Set admin user for user block
- set_page_owner($_SESSION['guid']);
-
- // Display main admin menu
- page_draw(elgg_echo("admin:statistics"),elgg_view_layout("two_column_left_sidebar",'',elgg_view_title(elgg_echo('admin:statistics')) . elgg_view("admin/statistics")));
-
-?>
diff --git a/admin/user.php b/admin/user.php
deleted file mode 100644
index 37160d2a7..000000000
--- a/admin/user.php
+++ /dev/null
@@ -1,45 +0,0 @@
-<?php
-
- /**
- * Elgg administration user system index
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
-
- // Get the Elgg framework
- require_once(dirname(dirname(__FILE__)) . "/engine/start.php");
-
- // Make sure only valid admin users can see this
- admin_gatekeeper();
-
- // Set admin user for user block
- set_page_owner($_SESSION['guid']);
-
- // Are we performing a search
- $search = get_input('s');
- $limit = get_input('limit', 10);
- $offset = get_input('offset', 0);
-
- $context = get_context();
-
- $title = elgg_view_title(elgg_echo('admin:user'));
-
- set_context('search');
-
- $result = list_entities('user');
-
- set_context('admin');
-
- // Display main admin menu
- page_draw(elgg_echo("admin:user"),
- elgg_view_layout("two_column_left_sidebar",
- '',
- $title . elgg_view("admin/user") . $result)
- );
-
-?> \ No newline at end of file
diff --git a/crontab.example b/crontab.example
deleted file mode 100644
index b4b55ca04..000000000
--- a/crontab.example
+++ /dev/null
@@ -1,27 +0,0 @@
-# Crontab example.
-#
-# This file is an example of triggering Elgg cron events. Modify and register events
-# as appropriate.
-#
-# See http://docs.elgg.org/wiki/Cron for more information
-#
-# @author Marcus Povey
-
-# Location of GET (see: http://docs.elgg.org/wiki/What_is_get)
-GET='/usr/bin/GET'
-
-# Location of your site (don't forget the trailing slash!)
-ELGG='http://www.example.com/'
-
-# The crontab
-# Don't edit below this line!
-@reboot $GET ${ELGG}pg/cron/reboot/
-* * * * * $GET ${ELGG}pg/cron/minute/
-*/5 * * * * $GET ${ELGG}pg/cron/fiveminute/
-15,30,45,59 * * * * $GET ${ELGG}pg/cron/fifteenmin/
-30,59 * * * * $GET ${ELGG}pg/cron/halfhour/
-@hourly $GET ${ELGG}pg/cron/hourly/
-@daily $GET ${ELGG}pg/cron/daily/
-@weekly $GET ${ELGG}pg/cron/weekly/
-@monthly $GET ${ELGG}pg/cron/monthly/
-@yearly $GET ${ELGG}pg/cron/yearly/
diff --git a/dashboard/index.php b/dashboard/index.php
deleted file mode 100644
index ceedbc09a..000000000
--- a/dashboard/index.php
+++ /dev/null
@@ -1,33 +0,0 @@
-<?php
-
- /**
- * Elgg dashboard
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
-
- // Get the Elgg engine
- require_once(dirname(dirname(__FILE__)) . "/engine/start.php");
-
- // Ensure that only logged-in users can see this page
- gatekeeper();
-
- // Set context and title
- set_context('dashboard');
- set_page_owner(get_loggedin_userid());
- $title = elgg_echo('dashboard');
-
- // wrap intro message in a div
- $intro_message = elgg_view('dashboard/blurb');
-
- // Try and get the user from the username and set the page body accordingly
- $body = elgg_view_layout('widgets',"","",$intro_message);
-
- page_draw($title, $body);
-
-?> \ No newline at end of file
diff --git a/dashboard/latest.php b/dashboard/latest.php
deleted file mode 100644
index add01f209..000000000
--- a/dashboard/latest.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-
- /**
- * Elgg latest content page
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
-
- /**
- * Start the Elgg engine
- */
- require_once(dirname(dirname(__FILE__)) . "/engine/start.php");
-
-
- // Load the front page
- global $CONFIG;
- $title = elgg_view_title(elgg_echo('content:latest'));
- set_context('search');
- $content = list_registered_entities(0,10,true,false,array('object','group'));
- set_context('latest');
- $content = elgg_view_layout('two_column_left_sidebar', '', $title . $content);
- echo page_draw(elgg_echo('content:latest'), $content);
-
-
-?> \ No newline at end of file
diff --git a/documentation/coding_standards/best_practices.txt b/documentation/coding_standards/best_practices.txt
new file mode 100644
index 000000000..df04aa845
--- /dev/null
+++ b/documentation/coding_standards/best_practices.txt
@@ -0,0 +1,60 @@
+*** CODING BEST PRACTICES ***
+
+The following best practices make code easier to read, easier to maintain,
+and easier to debug. Consistent use of these guidelines means less guess
+work for developers, which means happier, more productive developers.
+
+* Adhere to "Don't Repeat Yourself" (DRY) principles of code design and
+ organization. If you are copy-and-pasting code YOU ARE DOING SOMETHING WRONG.
+ If you find a block of code that you want to use multiple times, make a
+ function. If you find views that are identical except for a single value,
+ pull it out into a generic view that takes an option.
+
+* Whitespace is free. Don't be afraid to use it to separate blocks of code.
+ Use a single space to separate function params and string concatenation.
+
+* Use self-documenting variable names. $group_guids is better than $array.
+
+* Use "positive" variable names. Prefer `$enable = true` to `$disable = false`.
+
+* Functions returning an array should return an empty array instead of FALSE
+ on no results.
+
+* Functions not throwing an exception on error should return FALSE upon
+ failure.
+
+* Functions returning only boolean should be prefaced with is_ or has_ (eg,
+ elgg_is_logged_in(), elgg_has_access_to_entity()).
+
+* Ternary syntax is acceptable for single-line, non-embedded statements.
+
+* Use comments effectively. Good comments describe the "why." Good code
+ describes the "how." Ex:
+ Not a very useful comment:
+
+ // increment $i only when the entity is marked as active.
+ foreach($entities as $entity) {
+ if ($entity->active == TRUE) {
+ $i++;
+ }
+ }
+
+ Useful comment:
+
+ // find the next index for inserting a new active entity.
+ foreach($entities as $entity) {
+ if ($entity->active == TRUE) {
+ $i++;
+ }
+ }
+
+* Use commit messages effectively. Be concise and meaningful. Ex:
+ Not meaningful:
+ Small fix to groups.
+
+ Meaningful:
+ Fixes #1234: Added missing ) that caused a WSOD on group profile page
+ when logged out.
+
+* Commit effectively: Err on the side of atomic commits. One revision with
+ many changes is scary.
diff --git a/documentation/coding_standards/css_coding_standards.txt b/documentation/coding_standards/css_coding_standards.txt
new file mode 100644
index 000000000..195ca345b
--- /dev/null
+++ b/documentation/coding_standards/css_coding_standards.txt
@@ -0,0 +1,67 @@
+*** CSS CODING STANDARDS ***
+
+* Use shorthand where possible:
+ Bad:
+ background-color: #333333;
+ background-image: url(...);
+ background-repeat: repeat-x;
+ background-position: left 10px;
+ padding: 2px 9px 2px 9px;
+
+ Good:
+ background: #333 url(...) repeat-x left 10px;
+ padding: 2px 9px;
+
+* Use hyphens as separators in classes/ids, not underscores:
+ Bad:
+ .example_class
+
+ Good:
+ .example-class
+
+* One property per line
+ Bad:
+ color: white;font-size: smaller;
+
+ Good:
+ color: white;
+ font-size: smaller;
+
+* Property declarations should be spaced like so: `property: value;`
+ Bad:
+ color:value;
+ color :value;
+ color : value;
+
+ Good:
+ color: value;
+
+* Group vendor-prefixes for the same property together:
+* Longest vendor-prefixed version first:
+* Always include non-vendor-prefixed version:
+* Put an extra newline between vendor-prefixed groups and other properties:
+ Bad:
+ -moz-border-radius: 5px;
+ border: 1px solid #999999;
+ -webkit-border-radius: 5px;
+ width: auto;
+
+ Good:
+ border: 1px solid #999999;
+
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px;
+
+ width: auto;
+
+* Group declarations of subproperties:
+ Bad:
+ background-color: white;
+ color: #0054A7;
+ background-position: 2px -257px;
+
+ Good:
+ background-color: white;
+ background-position: 2px -257px;
+ color: #0054A7;
diff --git a/documentation/coding_standards/deprecation.txt b/documentation/coding_standards/deprecation.txt
new file mode 100644
index 000000000..370090138
--- /dev/null
+++ b/documentation/coding_standards/deprecation.txt
@@ -0,0 +1,36 @@
+*** DEPRECATING APIs ***
+
+Occasionally, functions and classes must be deprecated in favor of newer
+replacements. Since 3rd party plugin authors rely on a consistent API,
+backward compatibility must be maintained, but will not be maintained
+indefinitely as plugin authors are expected to properly update their
+plugins. In order to maintain backward compatibility, deprecated APIs will
+follow these guidelines:
+
+* Incompatible API changes cannot occur between bugfix versions
+ (1.6.0 - 1.6.1).
+
+* API changes between minor versions (1.6 - 1.7) must maintain backward
+ compatibility for at least 2 minor versions. (1.7 and 1.8. See
+ procedures, below.)
+
+* Bugfixes that change the API cannot be included in bugfix versions.
+
+* API changes between major versions (1.0 - 2.0) can occur without regard to
+ backward compatibility.
+
+The procedure for deprecating an API is as follows:
+
+* The first minor version (1.7) with a deprecated API must include a wrapper
+ function/class (or otherwise appropriate means) to maintain backward
+ compatibility, including any bugs in the original function/class.
+ This compatibility layer uses elgg_deprecated_notice('...', 1.7) to log
+ that the function is deprecated.
+
+* The second minor version (1.8) maintains the backward compatibility
+ layer, but elgg_deprecated_notice() will produce a visible warning.
+
+* The third minor version (1.9) removes the compatibility layer. Any use of
+ the deprecated API should be corrected before this.
+
+The general timeline for two minor releases is 8 to 12 months.
diff --git a/documentation/coding_standards/html_best_practices.txt b/documentation/coding_standards/html_best_practices.txt
new file mode 100644
index 000000000..ac2338a77
--- /dev/null
+++ b/documentation/coding_standards/html_best_practices.txt
@@ -0,0 +1 @@
+*** HTML BEST PRACTICES ***
diff --git a/documentation/coding_standards/javascript_best_practices.txt b/documentation/coding_standards/javascript_best_practices.txt
new file mode 100644
index 000000000..9ec1d0a19
--- /dev/null
+++ b/documentation/coding_standards/javascript_best_practices.txt
@@ -0,0 +1 @@
+*** JAVASCRIPT BEST PRACTICES ***
diff --git a/documentation/coding_standards/javascript_coding_standards.txt b/documentation/coding_standards/javascript_coding_standards.txt
new file mode 100644
index 000000000..9939e80ab
--- /dev/null
+++ b/documentation/coding_standards/javascript_coding_standards.txt
@@ -0,0 +1,13 @@
+*** JAVASCRIPT CODING STANDARDS ***
+
+* Same formatting standards as PHP.
+
+* All functions should be in the elgg namespace.
+
+* Function expressions should end with a semi-colon:
+
+ elgg.ui.toggles = function(event) {
+ event.preventDefault();
+ $(target).slideToggle('medium');
+ };
+
diff --git a/documentation/coding_standards/php_best_practices.txt b/documentation/coding_standards/php_best_practices.txt
new file mode 100644
index 000000000..9e4c63483
--- /dev/null
+++ b/documentation/coding_standards/php_best_practices.txt
@@ -0,0 +1 @@
+*** PHP BEST PRACTICES ***
diff --git a/documentation/coding_standards/php_coding_standards.txt b/documentation/coding_standards/php_coding_standards.txt
new file mode 100644
index 000000000..b7adc5dd9
--- /dev/null
+++ b/documentation/coding_standards/php_coding_standards.txt
@@ -0,0 +1,55 @@
+*** PHP CODING STANDARDS ***
+
+These are the coding standards for Elgg. All core development and bundled
+plugins are required to be in this format. Plugin developers are strongly
+encouraged to adopt these standards.
+
+* Unix line endings.
+
+* Hard tabs, 4 character tab spacing.
+
+* No PHP shortcut tags ( <? or <?= or <% ).
+
+* PHPDoc comments on functions and classes (all methods; declared properties
+ when appropriate).
+
+* Mandatory wrapped {}s around any code blocks.
+ Bad:
+ if (true)
+ foreach($arr as $elem)
+ echo $elem;
+
+ Good:
+ if (true) {
+ foreach ($arr as $elem) {
+ echo $elem;
+ }
+ }
+
+* Name standalone functions using underscore_character().
+
+* Name classes using CamelCase() and methods using lowerCamelCase().
+
+* Name globals and constants in ALL_CAPS (ACCESS_FRIENDS, $CONFIG).
+
+* Use underscores / camel case to separate standard English words in
+ functions, classes, and methods. (get_default_site(), ElggUser->isLoggedIn()).
+
+* Space functions like_this($required, $optional = TRUE).
+
+* Space keywords and constructs like this: if (FALSE) { ... }.
+
+* Correctly use spaces, quotes, and {}s in strings:
+ Bad (hard to read, misuse of quotes and {}s):
+ echo 'Hello, '.$name."! How is your {$time_of_day}?";
+
+ Good:
+ echo "Hello, $name! How is your $time_of_day?";
+
+* Line lengths should be reasonable. If you are writing lines over 100
+ characters on a line, please revise the code.
+
+* Use // or /* */ when commenting.
+
+* No closing PHP tag (?>) at EOF unless after a heredoc. (Avoids problems with
+ trailing whitespace. Required after heredoc by PHP.)
diff --git a/documentation/examples/actions/basic.php b/documentation/examples/actions/basic.php
new file mode 100644
index 000000000..926e11b79
--- /dev/null
+++ b/documentation/examples/actions/basic.php
@@ -0,0 +1,22 @@
+<?php
+/**
+ * Demonstrates adding an annotation through an action
+ *
+ * This action adds a rating annotation to an entity. If this was coming from
+ * a five-star rating tool, the rating would be a number between 0 and 5. The
+ * GUID of the entity being rating is also submitted to the action.
+ */
+
+$rating = get_input('rating');
+$guid = get_input('guid');
+
+$entity = get_entity($guid);
+if (!$entity) {
+ register_error(elgg_echo('rating:failure'));
+ forward(REFERER);
+}
+
+$entity->annotate('rating', $rating);
+
+system_message(elgg_echo('rating:success'));
+forward(REFERER);
diff --git a/documentation/examples/crontab.example b/documentation/examples/crontab.example
new file mode 100644
index 000000000..f25f5cb07
--- /dev/null
+++ b/documentation/examples/crontab.example
@@ -0,0 +1,28 @@
+# Crontab example.
+#
+# This file is an example of triggering Elgg cron events. It hits a URL to
+# trigger the events. For testing, you can simulate the cronjob by loading the
+# URL in a browser.
+#
+# See http://docs.elgg.org/wiki/Cron for more information
+#
+# @author Marcus Povey
+
+# Location of GET (see: http://docs.elgg.org/wiki/What_is_get)
+GET='/usr/bin/GET'
+
+# Location of your site (don't forget the trailing slash!)
+ELGG='http://www.example.com/'
+
+# The crontab
+# Don't edit below this line unless you know what you are doing
+@reboot $GET ${ELGG}cron/reboot/
+* * * * * $GET ${ELGG}cron/minute/
+*/5 * * * * $GET ${ELGG}cron/fiveminute/
+15,30,45,59 * * * * $GET ${ELGG}cron/fifteenmin/
+30,59 * * * * $GET ${ELGG}cron/halfhour/
+@hourly $GET ${ELGG}cron/hourly/
+@daily $GET ${ELGG}cron/daily/
+@weekly $GET ${ELGG}cron/weekly/
+@monthly $GET ${ELGG}cron/monthly/
+@yearly $GET ${ELGG}cron/yearly/
diff --git a/documentation/examples/events/advanced.php b/documentation/examples/events/advanced.php
new file mode 100644
index 000000000..73edea9da
--- /dev/null
+++ b/documentation/examples/events/advanced.php
@@ -0,0 +1,13 @@
+<?php
+/**
+ * This snippets demonstrates how returning false changes the normal operation
+ * of Elgg.
+ */
+
+elgg_register_event_handler('create', 'object', 'example_event_handler');
+
+function example_event_handler($event, $type, $object) {
+ // Don't allow any non-admin users to create objects
+ // Returning false from this function will halt the creation of the object.
+ return elgg_is_admin_logged_in();
+}
diff --git a/documentation/examples/events/all.php b/documentation/examples/events/all.php
new file mode 100644
index 000000000..0ad02c1d4
--- /dev/null
+++ b/documentation/examples/events/all.php
@@ -0,0 +1,30 @@
+<?php
+/**
+ * If you register an 'all' string for the event name, the handler function will
+ * be called for all events with that name, regardless of event type. The same
+ * can be done for the event type argument. Registering 'all' for both
+ * argyuments results in a handler being called for every event.
+ */
+
+elgg_register_event_handler('all', 'object', 'example_event_handler');
+
+// This function will be called for any event of type 'object'
+function example_event_handler($event, $type, $object) {
+ // check what sort of object is passed
+ if ($object instanceof ElggObject) {
+ $subtype = $object->getSubtype();
+
+ switch ($subtype) {
+ case 'blog':
+ case 'thewire':
+ case 'pages':
+ // prevent these object subtypes from being saved or changed
+ return false;
+ default:
+ return true;
+ }
+
+ }
+
+ return true;
+}
diff --git a/documentation/examples/events/basic.php b/documentation/examples/events/basic.php
new file mode 100644
index 000000000..ca2762344
--- /dev/null
+++ b/documentation/examples/events/basic.php
@@ -0,0 +1,17 @@
+<?php
+/**
+ * This snippet demonstrates how to register for an event. It dumps the
+ * parameters that the handler receives to the screen. The third argument
+ * of the handler function is an object that is related to the event. For
+ * the 'init', 'system' eveny, it is null.
+ */
+
+elgg_register_event_handler('init', 'system', 'example_event_handler');
+
+function example_event_handler($event, $type, $object) {
+ var_dump($event);
+ var_dump($type);
+ var_dump($object);
+
+ return true;
+}
diff --git a/documentation/examples/events/trigger.php b/documentation/examples/events/trigger.php
new file mode 100644
index 000000000..6ce3a76f0
--- /dev/null
+++ b/documentation/examples/events/trigger.php
@@ -0,0 +1,11 @@
+<?php
+/**
+ * These two snippets demonstrates triggering an event and how to register for
+ * that event.
+ */
+
+$object = new ElggObject();
+elgg_trigger_event('test', 'example', $object);
+
+// elsewhere a handler could be registered by saying
+elgg_register_event_handler('test', 'example', 'example_event_handler');
diff --git a/documentation/examples/hooks/advanced.php b/documentation/examples/hooks/advanced.php
new file mode 100644
index 000000000..ca036c46a
--- /dev/null
+++ b/documentation/examples/hooks/advanced.php
@@ -0,0 +1,28 @@
+<?php
+/**
+ * This snippet demonstrates how to change the value of a hook. The content
+ * passed into the hook is 'This is some Sample Content.'. After the two hook
+ * handlers are done, the new content is 'This is some $@mple Content.'.
+ */
+
+// the output:page hook is triggered by elgg_view_page().
+elgg_register_plugin_hook_handler('output', 'page', 'example_plugin_hook_handler', 600);
+elgg_register_plugin_hook_handler('output', 'page', 'example_plugin_hook_handler_2', 601);
+
+function example_plugin_hook_handler($hook, $type, $value, $params) {
+ // change a to @
+ $value = str_replace('a', '@', $value);
+
+ return $value;
+}
+
+function example_plugin_hook_handler_2($hook, $type, $value, $params) {
+ // change S to $
+ $value = str_replace('S', '$', $value);
+
+ return $value;
+}
+
+$content = 'This is some Sample Content.';
+
+echo elgg_view_page('Title', $content);
diff --git a/documentation/examples/hooks/all.php b/documentation/examples/hooks/all.php
new file mode 100644
index 000000000..76b562335
--- /dev/null
+++ b/documentation/examples/hooks/all.php
@@ -0,0 +1,12 @@
+<?php
+/**
+ * This snippet demonstrates how to register for multiple hooks with the same
+ * type.
+ */
+
+elgg_register_plugin_hook_handler('all', 'system', 'example_plugin_hook_handler');
+
+// This function will be called for any hook of type 'system'
+function example_plugin_hook_handler($hook, $type, $value, $params) {
+ // logic here.
+}
diff --git a/documentation/examples/hooks/basic.php b/documentation/examples/hooks/basic.php
new file mode 100644
index 000000000..734d9e884
--- /dev/null
+++ b/documentation/examples/hooks/basic.php
@@ -0,0 +1,17 @@
+<?php
+/**
+ * The handler for a plugin hook receives information about the hook (name and
+ * type), the current value for the hook, and parameters related to the hook.
+ */
+
+elgg_register_plugin_hook_handler('forward', '404', 'example_plugin_hook_handler');
+
+function example_plugin_hook_handler($hook, $type, $value, $params) {
+ var_dump($hook);
+ var_dump($type);
+ var_dump($value);
+ var_dump($params);
+
+ // we are not changing $value so return null
+ return null;
+}
diff --git a/documentation/examples/hooks/trigger.php b/documentation/examples/hooks/trigger.php
new file mode 100644
index 000000000..4216fd6c0
--- /dev/null
+++ b/documentation/examples/hooks/trigger.php
@@ -0,0 +1,14 @@
+<?php
+/**
+ * The current value for the hook is passed into the trigger function. Handlers
+ * can change this value. In this snippet, we check if the value of true was
+ * changed by the handler functions.
+ */
+
+$result = elgg_trigger_plugin_hook('get_status', 'example', null, true);
+
+if ($result) {
+ var_dump('Plugin hook says ok!');
+} else {
+ var_dump('Plugin hook says no.');
+}
diff --git a/documentation/examples/plugins/README.txt b/documentation/examples/plugins/README.txt
new file mode 100644
index 000000000..704f56598
--- /dev/null
+++ b/documentation/examples/plugins/README.txt
@@ -0,0 +1,5 @@
+Plugin Skeleton
+=========================
+This directory includes a plugin skeleton to be used as the starting point when
+creating a new plugin. Just create a new directory in /mod/ and copy the files
+and directories into it. Then update the manifest and start coding. \ No newline at end of file
diff --git a/documentation/examples/plugins/actions/.gitignore b/documentation/examples/plugins/actions/.gitignore
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/documentation/examples/plugins/actions/.gitignore
diff --git a/documentation/examples/plugins/languages/en.php b/documentation/examples/plugins/languages/en.php
new file mode 100644
index 000000000..35f838560
--- /dev/null
+++ b/documentation/examples/plugins/languages/en.php
@@ -0,0 +1,24 @@
+<?php
+/**
+ * The core language file is in /languages/en.php and each plugin has its
+ * language files in a languages directory. To change a string, copy the
+ * mapping into this file.
+ *
+ * For example, to change the blog Tools menu item
+ * from "Blog" to "Rantings", copy this pair:
+ * 'blog' => "Blog",
+ * into the $mapping array so that it looks like:
+ * 'blog' => "Rantings",
+ *
+ * Follow this pattern for any other string you want to change. Make sure this
+ * plugin is lower in the plugin list than any plugin that it is modifying.
+ *
+ * If you want to add languages other than English, name the file according to
+ * the language's ISO 639-1 code: http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes
+ */
+
+$mapping = array(
+ 'string:here' => 'Display string here',
+);
+
+add_translation('en', $mapping);
diff --git a/documentation/examples/plugins/manifest.xml b/documentation/examples/plugins/manifest.xml
new file mode 100644
index 000000000..e31624432
--- /dev/null
+++ b/documentation/examples/plugins/manifest.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin_manifest xmlns="http://www.elgg.org/plugin_manifest/1.8">
+ <name>My Plugin</name>
+ <author>My Name</author>
+ <version>1.0</version>
+ <description>This is a description of my plugin and its features.</description>
+ <website>http://www.elgg.org/</website>
+ <copyright>(C) My Name or Company 2012</copyright>
+ <license>GNU General Public License version 2</license>
+
+ <requires>
+ <type>elgg_release</type>
+ <version>1.8</version>
+ </requires>
+
+ <category>communication</category>
+
+</plugin_manifest>
diff --git a/documentation/examples/plugins/start.php b/documentation/examples/plugins/start.php
new file mode 100644
index 000000000..3af50ce38
--- /dev/null
+++ b/documentation/examples/plugins/start.php
@@ -0,0 +1,22 @@
+<?php
+/**
+ * Describe plugin here
+ */
+
+elgg_register_event_handler('init', 'system', 'my_plugin_init');
+
+function my_plugin_init() {
+ // Rename this function based on the name of your plugin and update the
+ // elgg_register_event_handler() call accordingly
+
+ // Register a script to handle (usually) a POST request (an action)
+ $base_dir = elgg_get_plugins_path() . 'my_plugin/actions/my_plugin';
+ elgg_register_action('my_plugin', "$base_dir/my_action.php");
+
+ // Extend the main CSS file
+ elgg_extend_view('css/elgg', 'my_plugin/css');
+
+ // Add a menu item to the main site menu
+ $item = new ElggMenuItem('my_plugin', elgg_echo('my_plugin:menu'), 'my_url');
+ elgg_register_menu_item('site', $item);
+}
diff --git a/documentation/examples/plugins/views/default/.gitignore b/documentation/examples/plugins/views/default/.gitignore
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/documentation/examples/plugins/views/default/.gitignore
diff --git a/documentation/info/config.php b/documentation/info/config.php
new file mode 100644
index 000000000..b45428477
--- /dev/null
+++ b/documentation/info/config.php
@@ -0,0 +1,430 @@
+<?php
+/**
+ * Stub info for $CONFIG global options.
+ *
+ * @tip Plugins should never use the $CONFIG array directly.
+ *
+ * @package Elgg.Core
+ * @subpackage Configuration
+ */
+
+/**
+ * Event information for the events subsystem.
+ *
+ * Events are added with {@link elgg_register_event_handler()} and
+ * can be removed in >= 1.8 with {@link elgg_unregister_event_handler()}.
+ *
+ * Events are stored as a multidimensional array in the format:
+ * <code>
+ * $CONFIG->events[str $event_name][str $event_type][int priority] = str callback_function
+ * </code>
+ *
+ * @global array $CONFIG->events
+ * @name $CONFIG->events
+ * @see events()
+ * @see elgg_register_event_handler()
+ * @see elgg_unregister_event_handler()
+ * @see elgg_trigger_event()
+ */
+$CONFIG->events;
+
+/**
+ * Plugin Hook information for the plugin hooks subsystem.
+ *
+ * Hooks are added with {@link elgg_register_plugin_hook_handler()} and
+ * can be removed in >= 1.8 with {@link elgg_unregister_plugin_hook_handler()}.
+ *
+ * Hooks are stored as a multidimensional array in the format:
+ * <code>
+ * $CONFIG->hooks[str $hook_name][str $hook_type][int priority] = str callback_function
+ * </code>
+ *
+ * @global array $CONFIG->hooks
+ * @see elgg_register_plugin_hook_handler()
+ * @see elgg_unregister_plugin_hook_handler()
+ * @see elgg_trigger_plugin_hook()
+ */
+$CONFIG->hooks;
+
+/**
+ * Paths to scan for autoloading languages.
+ *
+ * Languages are automatically loaded for the site or
+ * user's default language. Plugins can extend or override strings.
+ * language_paths is an array of paths to scan for PHP files matching
+ * the default language. The order of paths is determined by the plugin load order,
+ * with later entries overriding earlier. Language files within these paths are
+ * named as the two-letter ISO 639-1 country codes for the language they represent.
+ *
+ * Language paths are stored as array keys in the format:
+ * <code>
+ * $CONFIG->language_paths[str $language_path] = true
+ * </code>
+ *
+ * @link http://en.wikipedia.org/wiki/ISO_639-1
+ * @see register_language()
+ * @global array $CONFIG->language_paths
+ */
+$CONFIG->language_paths;
+
+
+/**
+ * String translations for the current language.
+ *
+ * Elgg uses a key-based system for string internationalization, which
+ * is accessed with {@link elgg_echo()}.
+ *
+ * Translations are stored as an array in the following format:
+ * <code>
+ * $CONFIG->translations[str $language_code][str $string_key] = str 'Translated Language String';
+ * </code>
+ *
+ * @see register_translation()
+ * @see elgg_echo()
+ * @global array $CONFIG->translations
+ */
+$CONFIG->translations;
+
+/**
+ * Stores input used by {@link set_input()} and {@link get_input()}.
+ *
+ * @global array $CONFIG->input
+ */
+$CONFIG->input;
+
+/**
+ * An array of metadata names to be used as tags.
+ *
+ * Because tags are simply names of meatdata, This is used
+ * in search to prevent data exposure by searching on
+ * arbitrary metadata.
+ *
+ * @global array $CONFIG->registered_tag_metadata_names
+ */
+$CONFIG->registered_tag_metadata_names;
+
+/**
+ * An associative array of page handlers and their function names.
+ *
+ * Page handlers must be registered by {@link elgg_register_page_handler()} and
+ * will be dispatched by {@link engine/handlers/pagehandler.php} to the
+ * proper function.
+ *
+ * @global array $CONFIG->pagehandler
+ */
+$CONFIG->pagehandler;
+
+/**
+ * An object holding valid widgets and their configurations.
+ *
+ * This object stores the valid context for widgets, and the handlers
+ * registered, as well as a description of the widget.
+ *
+ * Widgets are added with {@link add_widget_type()}.
+ *
+ * @global stdClass $CONFIG->widgets
+ */
+$CONFIG->widgets;
+
+/**
+ * The full path where Elgg is installed.
+ *
+ * @global string $CONFIG->path;
+ */
+$CONFIG->path;
+
+/**
+ * The full path for core views.
+ *
+ * @global string $CONFIG->viewpath
+ */
+$CONFIG->viewpath;
+
+/**
+ * The full path where plugins are stored.
+ *
+ * @global string $CONFIG->pluginspath
+ */
+$CONFIG->pluginspath;
+
+/**
+ * The full URL where Elgg is installed
+ *
+ * @global string $CONFIG->wwwroot
+ */
+$CONFIG->wwwroot;
+
+/**
+ * The full URL where Elgg is installed
+ *
+ * @global string $CONFIG->wwwroot
+ */
+$CONFIG->url;
+
+/**
+ * The name of the site as defined in the config table.
+ *
+ * @global string $CONFIG->sitename
+ */
+$CONFIG->sitename;
+
+/**
+ * The current language for either the site or the user.
+ *
+ * @global $CONFIG->language
+ */
+$CONFIG->language;
+
+/**
+ * Is the site fully installed
+ *
+ * @global bool $CONFIG->installed
+ */
+$CONFIG->installed;
+
+/**
+ * The guid of the current site object.
+ *
+ * @global int $CONFIG->site_id
+ */
+$CONFIG->site_id;
+
+/**
+ * The guid of the current site object.
+ *
+ * @global int $CONFIG->site_id
+ */
+$CONFIG->site_guid;
+
+/**
+ * The current site object.
+ *
+ * @global ElggSite $CONFIG->site
+ */
+$CONFIG->site;
+
+/**
+ * The full path to the data directory.
+ *
+ * @global string $CONFIG->dataroot
+ */
+$CONFIG->dataroot;
+
+/**
+ * Is simplecache enabled?
+ *
+ * @global string $CONFIG->simplecache_enabled
+ */
+$CONFIG->simplecache_enabled;
+
+/**
+ * Is the system cache enabled
+ *
+ * @global string $CONFIG->system_cache_enabled
+ */
+$CONFIG->system_cache_enabled;
+
+/**
+ * The site description from the current site object.
+ *
+ * @global string $CONFIG->sitedescription
+ */
+$CONFIG->sitedescription;
+
+/**
+ * The site email from the current site object.
+ *
+ * @global string $CONFIG->siteemail
+ */
+$CONFIG->siteemail;
+
+/**
+ * The current view type
+ *
+ * View types determin the location of view files that are used to draw pages.
+ * They are set system-wide by the $_REQUEST['view']. If a view type is manually
+ * set in settings.php or through a function hooking to the {@elgg_hook
+ *
+ * @warning This is the current view type used to determine where to load views.
+ * Don't confuse this with the current view.
+ *
+ * @global string $CONFIG->view
+ */
+$CONFIG->view;
+
+/**
+ * Default access as defined in the config table for the current site.
+ *
+ * @global string $CONFIG->default_access
+ */
+$CONFIG->default_access;
+
+/**
+ * Is registration enabled?
+ *
+ * @global bool $CONFIG->allow_registration
+ */
+$CONFIG->allow_registration;
+
+/**
+ * Is current site in walled garden mode?
+ *
+ * @global bool $CONFIG->walled_garden
+ */
+$CONFIG->walled_garden;
+
+/**
+ * Are users allow to enter their own default access levels
+ *
+ * @global bool $CONFIG->allow_user_default_access
+ */
+$CONFIG->allow_user_default_access;
+
+/**
+ * A list of feature URLs for the main site menu.
+ *
+ * These links are added via the admin interface.
+ *
+ * @global string $CONFIG->menu_items_featured_urls
+ */
+$CONFIG->menu_items_featured_urls;
+
+/**
+ * The custom menu items entered in the administration.
+ *
+ * @global string $CONFIG->menu_items_custom_items
+ */
+$CONFIG->menu_items_custom_items;
+
+/**
+ * A list of registered actions, their file locations, and access permissions.
+ *
+ * @global array $CONFIG->actions
+ */
+$CONFIG->actions;
+
+/**
+ * Holds information about views.
+ *
+ * @global object $CONFIG->views
+ */
+$CONFIG->views;
+
+/**
+ * A list of views to cache in the simple cache.
+ *
+ * @global object $CONFIG->views->simplecache
+ */
+$CONFIG->views->simplecache;
+
+/**
+ * A list of views and the top level views directory to search for the view in.
+ *
+ * @note Views are stored as the key and the top level view location is stored as the value.
+ * The current viewtype {@link $CONFIG->view} is used to determin which directory under the entry
+ * in $CONFIG->views->location to search. View names are automatically appened a '.php' extension.
+ *
+ * @global object $CONFIG->views->locations
+ */
+$CONFIG->views->locations;
+
+
+/**
+ * A list of valid view types as discovered.
+ *
+ * @global array $CONFIG->view_types
+ */
+$CONFIG->view_types;
+
+/**
+ * A list of plugins and their load order
+ *
+ * @global string $CONFIG->pluginlistcache
+ */
+$CONFIG->pluginlistcache;
+
+/**
+ * Holds URL handler information for ElggExtender objects.
+ *
+ * @global array $CONFIG->extender_url_handler
+ */
+$CONFIG->extender_url_handler;
+
+/**
+ * A list of registered entities and subtypes. Used in search.
+ *
+ * @global array $CONFIG->registered_entities
+ */
+$CONFIG->registered_entities;
+
+/**
+ * A list of URL handlers for {@link ElggEntity::getURL()}
+ *
+ * @global array $CONFIG->entity_url_handler
+ */
+$CONFIG->entity_url_handler;
+
+/**
+ * A list of entity types and subtypes that have metadata whose access permission
+ * can be changed independently of the main object. {@link register_metadata_as_indepenent()}
+ *
+ * @global string $CONFIG->independents
+ */
+$CONFIG->independents;
+
+/**
+ * Holds items for all submenus.
+ *
+ * @global string $CONFIG->submenu_items
+ */
+$CONFIG->submenu_items;
+
+/**
+ * Holds the service handlers as registered by {@register_service_handler()}
+ *
+ * @global array $CONFIG->servicehandler
+ */
+$CONFIG->servicehandler;
+
+/**
+ * A list of stop works for search. Not currently used.
+ *
+ * @global array $CONFIG->wordblacklist
+ * @todo currently unused.
+ */
+$CONFIG->wordblacklist;
+
+/**
+ * A list of menu contexts for menus registered with {@link add_menu()}. Not currently used.
+ *
+ * @global array $CONFIG->menucontexts
+ */
+$CONFIG->menucontexts;
+
+/**
+ * A list of registers and their children added via {@add_to_register()}. Used only for menus.
+ *
+ * @global string $CONFIG->registers
+ */
+$CONFIG->registers;
+
+/**
+ * A list of objects that can emit notifications. {@link register_notification_object()}
+ *
+ * @global array $CONFIG->register_objects
+ */
+$CONFIG->register_objects;
+
+/**
+ * Holds available group tools options. Added with {@link add_group_tool_option()}
+ *
+ * @global array $CONFIG->group_tool_options
+ */
+$CONFIG->group_tool_options;
+
+/**
+ * The last cache time for the current viewtype. Used in the generation of CSS and JS links.
+ *
+ * @global string $CONFIG->lastcache
+ */
+$CONFIG->lastcache; \ No newline at end of file
diff --git a/documentation/info/manifest.xml b/documentation/info/manifest.xml
new file mode 100644
index 000000000..4fd4be8ce
--- /dev/null
+++ b/documentation/info/manifest.xml
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin_manifest xmlns="http://www.elgg.org/plugin_manifest/1.8">
+ <name>My Plugin</name>
+ <author>Elgg</author>
+ <version>1.0</version>
+ <blurb>A concise description.</blurb>
+ <description>This is a longer, more interesting description of my plugin, its features, and other important information.</description>
+ <website>http://www.elgg.org/</website>
+ <repository>https://github.com/Elgg/Elgg</repository>
+ <bugtracker>https://github.com/Elgg/Elgg/issues</bugtracker>
+ <donations>http://elgg.org/supporter.php</donations>
+ <copyright>(C) Elgg 2011</copyright>
+ <license>GNU General Public License version 2</license>
+
+ <requires>
+ <type>elgg_version</type>
+ <version>2009030802</version>
+ </requires>
+
+ <requires>
+ <type>elgg_release</type>
+ <version>1.8</version>
+ </requires>
+
+ <screenshot>
+ <description>An example screenshot</description>
+ <path>graphics/plugin_ss1.png</path>
+ </screenshot>
+
+ <screenshot>
+ <description>Another screenshot</description>
+ <path>graphics/plugin_ss2.png</path>
+ </screenshot>
+
+ <category>admin</category>
+ <category>api</category>
+
+ <requires>
+ <type>php_extension</type>
+ <name>gd</name>
+ </requires>
+
+ <requires>
+ <type>php_ini</type>
+ <name>short_open_tag</name>
+ <value>off</value>
+ </requires>
+
+ <requires>
+ <type>php_extension</type>
+ <name>made_up</name>
+ <version>1.0</version>
+ </requires>
+
+ <requires>
+ <type>plugin</type>
+ <name>fake_plugin</name>
+ <version>1.0</version>
+ </requires>
+
+ <requires>
+ <type>plugin</type>
+ <name>profile</name>
+ <version>1.0</version>
+ </requires>
+
+ <requires>
+ <type>plugin</type>
+ <name>profile_api</name>
+ <version>1.3</version>
+ <comparison>lt</comparison>
+ </requires>
+
+ <requires>
+ <type>priority</type>
+ <priority>after</priority>
+ <plugin>blog</plugin>
+ </requires>
+
+ <conflicts>
+ <type>plugin</type>
+ <name>profile_api</name>
+ <version>1.0</version>
+ </conflicts>
+
+ <provides>
+ <type>plugin</type>
+ <name>profile_api</name>
+ <version>1.3</version>
+ </provides>
+
+ <provides>
+ <type>php_extension</type>
+ <name>curl</name>
+ <version>1.0</version>
+ </provides>
+
+</plugin_manifest>
diff --git a/engine/classes/APIException.php b/engine/classes/APIException.php
new file mode 100644
index 000000000..b6e1c347b
--- /dev/null
+++ b/engine/classes/APIException.php
@@ -0,0 +1,11 @@
+<?php
+
+/**
+ * API Exception Stub
+ *
+ * Generic parent class for API exceptions.
+ *
+ * @package Elgg.Core
+ * @subpackage Exceptions.Stub
+ */
+class APIException extends Exception {}
diff --git a/engine/classes/CallException.php b/engine/classes/CallException.php
new file mode 100644
index 000000000..22b8f14f5
--- /dev/null
+++ b/engine/classes/CallException.php
@@ -0,0 +1,10 @@
+<?php
+/**
+ * Call Exception Stub
+ *
+ * Generic parent class for Call exceptions
+ *
+ * @package Elgg.Core
+ * @subpackage Exceptions.Stub
+ */
+class CallException extends Exception {}
diff --git a/engine/classes/ClassException.php b/engine/classes/ClassException.php
new file mode 100644
index 000000000..7544f0ec9
--- /dev/null
+++ b/engine/classes/ClassException.php
@@ -0,0 +1,10 @@
+<?php
+/**
+ * Class Exception
+ *
+ * A generic parent class for Class exceptions
+ *
+ * @package Elgg.Core
+ * @subpackage Exceptions.Stub
+ */
+class ClassException extends Exception {}
diff --git a/engine/classes/ClassNotFoundException.php b/engine/classes/ClassNotFoundException.php
new file mode 100644
index 000000000..6a9bcd327
--- /dev/null
+++ b/engine/classes/ClassNotFoundException.php
@@ -0,0 +1,10 @@
+<?php
+/**
+ * Class not found
+ *
+ * Thrown when trying to load a class that doesn't exist.
+ *
+ * @package Elgg.Core
+ * @subpackage Exceptions
+ */
+class ClassNotFoundException extends ClassException {}
diff --git a/engine/classes/ConfigurationException.php b/engine/classes/ConfigurationException.php
new file mode 100644
index 000000000..3ace5dd4b
--- /dev/null
+++ b/engine/classes/ConfigurationException.php
@@ -0,0 +1,10 @@
+<?php
+/**
+ * Configuration exception
+ *
+ * A generic parent class for Configuration exceptions
+ *
+ * @package Elgg
+ * @subpackage Exceptions.Stub
+ */
+class ConfigurationException extends Exception {}
diff --git a/engine/classes/CronException.php b/engine/classes/CronException.php
new file mode 100644
index 000000000..86370ef31
--- /dev/null
+++ b/engine/classes/CronException.php
@@ -0,0 +1,10 @@
+<?php
+/**
+ * Cron exception
+ *
+ * A generic parent class for cron exceptions
+ *
+ * @package Elgg
+ * @subpackage Exceptions.Stub
+ */
+class CronException extends Exception {}
diff --git a/engine/classes/DataFormatException.php b/engine/classes/DataFormatException.php
new file mode 100644
index 000000000..0f28a0902
--- /dev/null
+++ b/engine/classes/DataFormatException.php
@@ -0,0 +1,9 @@
+<?php
+/**
+ * Data format exception
+ * An exception thrown when there is a problem in the format of some data.
+ *
+ * @package Elgg.Core
+ * @subpackage Exceptions.Stub
+ */
+class DataFormatException extends Exception {}
diff --git a/engine/classes/DatabaseException.php b/engine/classes/DatabaseException.php
new file mode 100644
index 000000000..6c8f57d7d
--- /dev/null
+++ b/engine/classes/DatabaseException.php
@@ -0,0 +1,10 @@
+<?php
+/**
+ * Database Exception
+ *
+ * A generic parent class for database exceptions
+ *
+ * @package Elgg.Core
+ * @subpackage Exceptions.Stub
+ */
+class DatabaseException extends Exception {}
diff --git a/engine/classes/ElggAccess.php b/engine/classes/ElggAccess.php
new file mode 100644
index 000000000..0aed477fc
--- /dev/null
+++ b/engine/classes/ElggAccess.php
@@ -0,0 +1,70 @@
+<?php
+/**
+ * Class used to determine if access is being ignored.
+ *
+ * @package Elgg.Core
+ * @subpackage Access
+ * @access private
+ * @see elgg_get_ignore_access()
+ *
+ * @todo I don't remember why this was required beyond scope concerns.
+ */
+class ElggAccess {
+ /**
+ * Bypass Elgg's access control if true.
+ * @var bool
+ */
+ private $ignore_access;
+
+ // @codingStandardsIgnoreStart
+ /**
+ * Get current ignore access setting.
+ *
+ * @return bool
+ * @deprecated 1.8 Use ElggAccess::getIgnoreAccess()
+ */
+ public function get_ignore_access() {
+ elgg_deprecated_notice('ElggAccess::get_ignore_access() is deprecated by ElggAccess::getIgnoreAccess()', 1.8);
+ return $this->getIgnoreAccess();
+ }
+ // @codingStandardsIgnoreEnd
+
+ /**
+ * Get current ignore access setting.
+ *
+ * @return bool
+ */
+ public function getIgnoreAccess() {
+ return $this->ignore_access;
+ }
+
+ // @codingStandardsIgnoreStart
+ /**
+ * Set ignore access.
+ *
+ * @param bool $ignore Ignore access
+ *
+ * @return bool Previous setting
+ *
+ * @deprecated 1.8 Use ElggAccess:setIgnoreAccess()
+ */
+ public function set_ignore_access($ignore = true) {
+ elgg_deprecated_notice('ElggAccess::set_ignore_access() is deprecated by ElggAccess::setIgnoreAccess()', 1.8);
+ return $this->setIgnoreAccess($ignore);
+ }
+ // @codingStandardsIgnoreEnd
+
+ /**
+ * Set ignore access.
+ *
+ * @param bool $ignore Ignore access
+ *
+ * @return bool Previous setting
+ */
+ public function setIgnoreAccess($ignore = true) {
+ $prev = $this->ignore_access;
+ $this->ignore_access = $ignore;
+
+ return $prev;
+ }
+}
diff --git a/engine/classes/ElggAnnotation.php b/engine/classes/ElggAnnotation.php
new file mode 100644
index 000000000..175e7049d
--- /dev/null
+++ b/engine/classes/ElggAnnotation.php
@@ -0,0 +1,133 @@
+<?php
+/**
+ * Elgg Annotations
+ *
+ * Annotations allow you to attach bits of information to entities.
+ * They are essentially the same as metadata, but with additional
+ * helper functions.
+ *
+ * @internal Annotations are stored in the annotations table.
+ *
+ * @package Elgg.Core
+ * @subpackage DataModel.Annotations
+ * @link http://docs.elgg.org/DataModel/Annotations
+ *
+ * @property string $value_type
+ * @property string $enabled
+ */
+class ElggAnnotation extends ElggExtender {
+
+ /**
+ * (non-PHPdoc)
+ *
+ * @see ElggData::initializeAttributes()
+ *
+ * @return void
+ */
+ protected function initializeAttributes() {
+ parent::initializeAttributes();
+
+ $this->attributes['type'] = 'annotation';
+ }
+
+ /**
+ * Construct a new annotation object
+ *
+ * @param mixed $id The annotation ID or a database row as stdClass object
+ */
+ function __construct($id = null) {
+ $this->initializeAttributes();
+
+ if (!empty($id)) {
+ // Create from db row
+ if ($id instanceof stdClass) {
+ $annotation = $id;
+
+ $objarray = (array) $annotation;
+ foreach ($objarray as $key => $value) {
+ $this->attributes[$key] = $value;
+ }
+ } else {
+ // get an ElggAnnotation object and copy its attributes
+ $annotation = elgg_get_annotation_from_id($id);
+ $this->attributes = $annotation->attributes;
+ }
+ }
+ }
+
+ /**
+ * Save this instance
+ *
+ * @return int an object id
+ *
+ * @throws IOException
+ */
+ function save() {
+ if ($this->id > 0) {
+ return update_annotation($this->id, $this->name, $this->value, $this->value_type,
+ $this->owner_guid, $this->access_id);
+ } else {
+ $this->id = create_annotation($this->entity_guid, $this->name, $this->value,
+ $this->value_type, $this->owner_guid, $this->access_id);
+
+ if (!$this->id) {
+ throw new IOException(elgg_echo('IOException:UnableToSaveNew', array(get_class())));
+ }
+ return $this->id;
+ }
+ }
+
+ /**
+ * Delete the annotation.
+ *
+ * @return bool
+ */
+ function delete() {
+ elgg_delete_river(array('annotation_id' => $this->id));
+ return elgg_delete_metastring_based_object_by_id($this->id, 'annotations');
+ }
+
+ /**
+ * Disable the annotation.
+ *
+ * @return bool
+ * @since 1.8
+ */
+ function disable() {
+ return elgg_set_metastring_based_object_enabled_by_id($this->id, 'no', 'annotations');
+ }
+
+ /**
+ * Enable the annotation.
+ *
+ * @return bool
+ * @since 1.8
+ */
+ function enable() {
+ return elgg_set_metastring_based_object_enabled_by_id($this->id, 'yes', 'annotations');
+ }
+
+ /**
+ * Get a url for this annotation.
+ *
+ * @return string
+ */
+ public function getURL() {
+ return get_annotation_url($this->id);
+ }
+
+ // SYSTEM LOG INTERFACE
+
+ /**
+ * For a given ID, return the object associated with it.
+ * This is used by the river functionality primarily.
+ * This is useful for checking access permissions etc on objects.
+ *
+ * @param int $id An annotation ID.
+ *
+ * @return ElggAnnotation
+ */
+ public function getObjectFromID($id) {
+ return elgg_get_annotation_from_id($id);
+ }
+}
diff --git a/engine/classes/ElggAttributeLoader.php b/engine/classes/ElggAttributeLoader.php
new file mode 100644
index 000000000..ffc80b02d
--- /dev/null
+++ b/engine/classes/ElggAttributeLoader.php
@@ -0,0 +1,248 @@
+<?php
+
+/**
+ * Loads ElggEntity attributes from DB or validates those passed in via constructor
+ *
+ * @access private
+ *
+ * @package Elgg.Core
+ * @subpackage DataModel
+ */
+class ElggAttributeLoader {
+
+ /**
+ * @var array names of attributes in all entities
+ */
+ protected static $primary_attr_names = array(
+ 'guid',
+ 'type',
+ 'subtype',
+ 'owner_guid',
+ 'container_guid',
+ 'site_guid',
+ 'access_id',
+ 'time_created',
+ 'time_updated',
+ 'last_action',
+ 'enabled',
+ );
+
+ /**
+ * @var array names of secondary attributes required for the entity
+ */
+ protected $secondary_attr_names = array();
+
+ /**
+ * @var string entity type (not class) required for fetched primaries
+ */
+ protected $required_type;
+
+ /**
+ * @var array
+ */
+ protected $initialized_attributes;
+
+ /**
+ * @var string class of object being loaded
+ */
+ protected $class;
+
+ /**
+ * @var bool should access control be considered when fetching entity?
+ */
+ public $requires_access_control = true;
+
+ /**
+ * @var callable function used to load attributes from {prefix}entities table
+ */
+ public $primary_loader = 'get_entity_as_row';
+
+ /**
+ * @var callable function used to load attributes from secondary table
+ */
+ public $secondary_loader = '';
+
+ /**
+ * @var callable function used to load all necessary attributes
+ */
+ public $full_loader = '';
+
+ /**
+ * Constructor
+ *
+ * @param string $class class of object being loaded
+ * @param string $required_type entity type this is being used to populate
+ * @param array $initialized_attrs attributes after initializeAttributes() has been run
+ * @throws InvalidArgumentException
+ */
+ public function __construct($class, $required_type, array $initialized_attrs) {
+ if (!is_string($class)) {
+ throw new InvalidArgumentException('$class must be a class name.');
+ }
+ $this->class = $class;
+
+ if (!is_string($required_type)) {
+ throw new InvalidArgumentException('$requiredType must be a system entity type.');
+ }
+ $this->required_type = $required_type;
+
+ $this->initialized_attributes = $initialized_attrs;
+ unset($initialized_attrs['tables_split'], $initialized_attrs['tables_loaded']);
+ $all_attr_names = array_keys($initialized_attrs);
+ $this->secondary_attr_names = array_diff($all_attr_names, self::$primary_attr_names);
+ }
+
+ /**
+ * Get primary attributes missing that are missing
+ *
+ * @param stdClass $row Database row
+ * @return array
+ */
+ protected function isMissingPrimaries($row) {
+ return array_diff(self::$primary_attr_names, array_keys($row)) !== array();
+ }
+
+ /**
+ * Get secondary attributes that are missing
+ *
+ * @param stdClass $row Database row
+ * @return array
+ */
+ protected function isMissingSecondaries($row) {
+ return array_diff($this->secondary_attr_names, array_keys($row)) !== array();
+ }
+
+ /**
+ * Check that the type is correct
+ *
+ * @param stdClass $row Database row
+ * @return void
+ * @throws InvalidClassException
+ */
+ protected function checkType($row) {
+ if ($row['type'] !== $this->required_type) {
+ $msg = elgg_echo('InvalidClassException:NotValidElggStar', array($row['guid'], $this->class));
+ throw new InvalidClassException($msg);
+ }
+ }
+
+ /**
+ * Get all required attributes for the entity, validating any that are passed in. Returns empty array
+ * if can't be loaded (Check $failure_reason).
+ *
+ * This function splits loading between "primary" attributes (those in {prefix}entities table) and
+ * "secondary" attributes (e.g. those in {prefix}objects_entity), but can load all at once if a
+ * combined loader is available.
+ *
+ * @param mixed $row a row loaded from DB (array or stdClass) or a GUID
+ * @return array will be empty if failed to load all attributes (access control or entity doesn't exist)
+ *
+ * @throws InvalidArgumentException|LogicException|IncompleteEntityException
+ */
+ public function getRequiredAttributes($row) {
+ if (!is_array($row) && !($row instanceof stdClass)) {
+ // assume row is the GUID
+ $row = array('guid' => $row);
+ }
+ $row = (array) $row;
+ if (empty($row['guid'])) {
+ throw new InvalidArgumentException('$row must be or contain a GUID');
+ }
+
+ // these must be present to support isFullyLoaded()
+ foreach (array('tables_split', 'tables_loaded') as $key) {
+ if (isset($this->initialized_attributes[$key])) {
+ $row[$key] = $this->initialized_attributes[$key];
+ }
+ }
+
+ $was_missing_primaries = $this->isMissingPrimaries($row);
+ $was_missing_secondaries = $this->isMissingSecondaries($row);
+
+ // some types have a function to load all attributes at once, it should be faster
+ if (($was_missing_primaries || $was_missing_secondaries) && is_callable($this->full_loader)) {
+ $fetched = (array) call_user_func($this->full_loader, $row['guid']);
+ if (!$fetched) {
+ return array();
+ }
+ $row = array_merge($row, $fetched);
+ $this->checkType($row);
+ } else {
+ if ($was_missing_primaries) {
+ if (!is_callable($this->primary_loader)) {
+ throw new LogicException('Primary attribute loader must be callable');
+ }
+ if ($this->requires_access_control) {
+ $fetched = (array) call_user_func($this->primary_loader, $row['guid']);
+ } else {
+ $ignoring_access = elgg_set_ignore_access();
+ $fetched = (array) call_user_func($this->primary_loader, $row['guid']);
+ elgg_set_ignore_access($ignoring_access);
+ }
+ if (!$fetched) {
+ return array();
+ }
+ $row = array_merge($row, $fetched);
+ }
+
+ // We must test type before trying to load the secondaries so that InvalidClassException
+ // gets thrown. Otherwise the secondary loader will fail and return false.
+ $this->checkType($row);
+
+ if ($was_missing_secondaries) {
+ if (!is_callable($this->secondary_loader)) {
+ throw new LogicException('Secondary attribute loader must be callable');
+ }
+ $fetched = (array) call_user_func($this->secondary_loader, $row['guid']);
+ if (!$fetched) {
+ if ($row['type'] === 'site') {
+ // A special case is needed for sites: When vanilla ElggEntities are created and
+ // saved, these are stored w/ type "site", but with no sites_entity row. These
+ // are probably only created in the unit tests.
+ // @todo Don't save vanilla ElggEntities with type "site"
+
+ $row = $this->filterAddedColumns($row);
+ $row['guid'] = (int) $row['guid'];
+ return $row;
+ }
+ throw new IncompleteEntityException("Secondary loader failed to return row for {$row['guid']}");
+ }
+ $row = array_merge($row, $fetched);
+ }
+ }
+
+ $row = $this->filterAddedColumns($row);
+
+ // Note: If there are still missing attributes, we're running on a 1.7 or earlier schema. We let
+ // this pass so the upgrades can run.
+
+ // guid needs to be an int https://github.com/elgg/elgg/issues/4111
+ $row['guid'] = (int) $row['guid'];
+
+ return $row;
+ }
+
+ /**
+ * Filter out keys returned by the query which should not appear in the entity's attributes
+ *
+ * @param array $row All columns from the query
+ * @return array Columns acceptable for the entity's attributes
+ */
+ protected function filterAddedColumns($row) {
+ // make an array with keys as acceptable attribute names
+ $acceptable_attrs = self::$primary_attr_names;
+ array_splice($acceptable_attrs, count($acceptable_attrs), 0, $this->secondary_attr_names);
+ $acceptable_attrs = array_combine($acceptable_attrs, $acceptable_attrs);
+
+ // @todo remove these when #4584 is in place
+ $acceptable_attrs['tables_split'] = true;
+ $acceptable_attrs['tables_loaded'] = true;
+
+ foreach ($row as $key => $val) {
+ if (!isset($acceptable_attrs[$key])) {
+ unset($row[$key]);
+ }
+ }
+ return $row;
+ }
+}
diff --git a/engine/classes/ElggAutoP.php b/engine/classes/ElggAutoP.php
new file mode 100644
index 000000000..05842d1b2
--- /dev/null
+++ b/engine/classes/ElggAutoP.php
@@ -0,0 +1,336 @@
+<?php
+
+/**
+ * Create wrapper P and BR elements in HTML depending on newlines. Useful when
+ * users use newlines to signal line and paragraph breaks. In all cases output
+ * should be well-formed markup.
+ *
+ * In DIV elements, Ps are only added when there would be at
+ * least two of them.
+ *
+ * @package Elgg.Core
+ * @subpackage Output
+ */
+class ElggAutoP {
+
+ public $encoding = 'UTF-8';
+
+ /**
+ * @var DOMDocument
+ */
+ protected $_doc = null;
+
+ /**
+ * @var DOMXPath
+ */
+ protected $_xpath = null;
+
+ protected $_blocks = 'address article area aside blockquote caption col colgroup dd
+ details div dl dt fieldset figure figcaption footer form h1 h2 h3 h4 h5 h6 header
+ hr hgroup legend map math menu nav noscript p pre section select style summary
+ table tbody td tfoot th thead tr ul ol option li';
+
+ /**
+ * @var array
+ */
+ protected $_inlines = 'a abbr audio b button canvas caption cite code command datalist
+ del dfn em embed i iframe img input ins kbd keygen label map mark meter object
+ output progress q rp rt ruby s samp script select small source span strong style
+ sub sup textarea time var video wbr';
+
+ /**
+ * Descend into these elements to add Ps
+ *
+ * @var array
+ */
+ protected $_descendList = 'article aside blockquote body details div footer form
+ header section';
+
+ /**
+ * Add Ps inside these elements
+ *
+ * @var array
+ */
+ protected $_alterList = 'article aside blockquote body details div footer header
+ section';
+
+ /** @var string */
+ protected $_unique = '';
+
+ /**
+ * Constructor
+ */
+ public function __construct() {
+ $this->_blocks = preg_split('@\\s+@', $this->_blocks);
+ $this->_descendList = preg_split('@\\s+@', $this->_descendList);
+ $this->_alterList = preg_split('@\\s+@', $this->_alterList);
+ $this->_inlines = preg_split('@\\s+@', $this->_inlines);
+ $this->_unique = md5(__FILE__);
+ }
+
+ /**
+ * Intance of class for singleton pattern.
+ * @var ElggAutoP
+ */
+ private static $instance;
+
+ /**
+ * Singleton pattern.
+ * @return ElggAutoP
+ */
+ public static function getInstance() {
+ $className = __CLASS__;
+ if (!(self::$instance instanceof $className)) {
+ self::$instance = new $className();
+ }
+ return self::$instance;
+ }
+
+ /**
+ * Create wrapper P and BR elements in HTML depending on newlines. Useful when
+ * users use newlines to signal line and paragraph breaks. In all cases output
+ * should be well-formed markup.
+ *
+ * In DIV, LI, TD, and TH elements, Ps are only added when their would be at
+ * least two of them.
+ *
+ * @param string $html snippet
+ * @return string|false output or false if parse error occurred
+ */
+ public function process($html) {
+ // normalize whitespace
+ $html = str_replace(array("\r\n", "\r"), "\n", $html);
+
+ // allows preserving entities untouched
+ $html = str_replace('&', $this->_unique . 'AMP', $html);
+
+ $this->_doc = new DOMDocument();
+
+ // parse to DOM, suppressing loadHTML warnings
+ // http://www.php.net/manual/en/domdocument.loadhtml.php#95463
+ libxml_use_internal_errors(true);
+
+ // Do not load entities. May be unnecessary, better safe than sorry
+ $disable_load_entities = libxml_disable_entity_loader(true);
+
+ if (!$this->_doc->loadHTML("<html><meta http-equiv='content-type' "
+ . "content='text/html; charset={$this->encoding}'><body>{$html}</body>"
+ . "</html>")) {
+
+ libxml_disable_entity_loader($disable_load_entities);
+ return false;
+ }
+
+ libxml_disable_entity_loader($disable_load_entities);
+
+ $this->_xpath = new DOMXPath($this->_doc);
+ // start processing recursively at the BODY element
+ $nodeList = $this->_xpath->query('//body[1]');
+ $this->addParagraphs($nodeList->item(0));
+
+ // serialize back to HTML
+ $html = $this->_doc->saveHTML();
+
+ // Note: we create <autop> elements, which will later be converted to paragraphs
+
+ // split AUTOPs into multiples at /\n\n+/
+ $html = preg_replace('/(' . $this->_unique . 'NL){2,}/', '</autop><autop>', $html);
+ $html = str_replace(array($this->_unique . 'BR', $this->_unique . 'NL', '<br>'),
+ '<br />',
+ $html);
+ $html = str_replace('<br /></autop>', '</autop>', $html);
+
+ // re-parse so we can handle new AUTOP elements
+
+ // Do not load entities. May be unnecessary, better safe than sorry
+ $disable_load_entities = libxml_disable_entity_loader(true);
+
+ if (!$this->_doc->loadHTML($html)) {
+ libxml_disable_entity_loader($disable_load_entities);
+ return false;
+ }
+
+ libxml_disable_entity_loader($disable_load_entities);
+
+ // must re-create XPath object after DOM load
+ $this->_xpath = new DOMXPath($this->_doc);
+
+ // strip AUTOPs that only have comments/whitespace
+ foreach ($this->_xpath->query('//autop') as $autop) {
+ /* @var DOMElement $autop */
+ $hasContent = false;
+ if (trim($autop->textContent) !== '') {
+ $hasContent = true;
+ } else {
+ foreach ($autop->childNodes as $node) {
+ if ($node->nodeType === XML_ELEMENT_NODE) {
+ $hasContent = true;
+ break;
+ }
+ }
+ }
+ if (!$hasContent) {
+ // mark to be later replaced w/ preg_replace (faster than moving nodes out)
+ $autop->setAttribute("r", "1");
+ }
+ }
+
+ // If a DIV contains a single AUTOP, remove it
+ foreach ($this->_xpath->query('//div') as $el) {
+ /* @var DOMElement $el */
+ $autops = $this->_xpath->query('./autop', $el);
+ if ($autops->length === 1) {
+ $firstAutop = $autops->item(0);
+ /* @var DOMElement $firstAutop */
+ $firstAutop->setAttribute("r", "1");
+ }
+ }
+
+ $html = $this->_doc->saveHTML();
+
+ // trim to the contents of BODY
+ $bodyStart = strpos($html, '<body>');
+ $bodyEnd = strpos($html, '</body>', $bodyStart + 6);
+ $html = substr($html, $bodyStart + 6, $bodyEnd - $bodyStart - 6);
+
+ // strip AUTOPs that should be removed
+ $html = preg_replace('@<autop r="1">(.*?)</autop>@', '\\1', $html);
+
+ // commit to converting AUTOPs to Ps
+ $html = str_replace('<autop>', "\n<p>", $html);
+ $html = str_replace('</autop>', "</p>\n", $html);
+
+ $html = str_replace('<br>', '<br />', $html);
+ $html = str_replace($this->_unique . 'AMP', '&', $html);
+ return $html;
+ }
+
+ /**
+ * Add P and BR elements as necessary
+ *
+ * @param DOMElement $el DOM element
+ * @return void
+ */
+ protected function addParagraphs(DOMElement $el) {
+ // no need to call recursively, just queue up
+ $elsToProcess = array($el);
+ $inlinesToProcess = array();
+ while ($el = array_shift($elsToProcess)) {
+ // if true, we can alter all child nodes, if not, we'll just call
+ // addParagraphs on each element in the descendInto list
+ $alterInline = in_array($el->nodeName, $this->_alterList);
+
+ // inside affected elements, we want to trim leading whitespace from
+ // the first text node
+ $ltrimFirstTextNode = true;
+
+ // should we open a new AUTOP element to move inline elements into?
+ $openP = true;
+ $autop = null;
+
+ // after BR, ignore a newline
+ $isFollowingBr = false;
+
+ $node = $el->firstChild;
+ while (null !== $node) {
+ if ($alterInline) {
+ if ($openP) {
+ $openP = false;
+ // create a P to move inline content into (this may be removed later)
+ $autop = $el->insertBefore($this->_doc->createElement('autop'), $node);
+ }
+ }
+
+ $isElement = ($node->nodeType === XML_ELEMENT_NODE);
+ if ($isElement) {
+ $isBlock = in_array($node->nodeName, $this->_blocks);
+ } else {
+ $isBlock = false;
+ }
+
+ if ($alterInline) {
+ $isText = ($node->nodeType === XML_TEXT_NODE);
+ $isLastInline = (! $node->nextSibling
+ || ($node->nextSibling->nodeType === XML_ELEMENT_NODE
+ && in_array($node->nextSibling->nodeName, $this->_blocks)));
+ if ($isElement) {
+ $isFollowingBr = ($node->nodeName === 'br');
+ }
+
+ if ($isText) {
+ $nodeText = $node->nodeValue;
+ if ($ltrimFirstTextNode) {
+ $nodeText = ltrim($nodeText);
+ $ltrimFirstTextNode = false;
+ }
+ if ($isFollowingBr && preg_match('@^[ \\t]*\\n[ \\t]*@', $nodeText, $m)) {
+ // if a user ends a line with <br>, don't add a second BR
+ $nodeText = substr($nodeText, strlen($m[0]));
+ }
+ if ($isLastInline) {
+ $nodeText = rtrim($nodeText);
+ }
+ $nodeText = str_replace("\n", $this->_unique . 'NL', $nodeText);
+ $tmpNode = $node;
+ $node = $node->nextSibling; // move loop to next node
+
+ // alter node in place, then move into AUTOP
+ $tmpNode->nodeValue = $nodeText;
+ $autop->appendChild($tmpNode);
+
+ continue;
+ }
+ }
+ if ($isBlock || ! $node->nextSibling) {
+ if ($isBlock) {
+ if (in_array($node->nodeName, $this->_descendList)) {
+ $elsToProcess[] = $node;
+ //$this->addParagraphs($node);
+ }
+ }
+ $openP = true;
+ $ltrimFirstTextNode = true;
+ }
+ if ($alterInline) {
+ if (! $isBlock) {
+ $tmpNode = $node;
+ if ($isElement && false !== strpos($tmpNode->textContent, "\n")) {
+ $inlinesToProcess[] = $tmpNode;
+ }
+ $node = $node->nextSibling;
+ $autop->appendChild($tmpNode);
+ continue;
+ }
+ }
+
+ $node = $node->nextSibling;
+ }
+ }
+
+ // handle inline nodes
+ // no need to recurse, just queue up
+ while ($el = array_shift($inlinesToProcess)) {
+ $ignoreLeadingNewline = false;
+ foreach ($el->childNodes as $node) {
+ if ($node->nodeType === XML_ELEMENT_NODE) {
+ if ($node->nodeValue === 'BR') {
+ $ignoreLeadingNewline = true;
+ } else {
+ $ignoreLeadingNewline = false;
+ if (false !== strpos($node->textContent, "\n")) {
+ $inlinesToProcess[] = $node;
+ }
+ }
+ continue;
+ } elseif ($node->nodeType === XML_TEXT_NODE) {
+ $text = $node->nodeValue;
+ if ($text[0] === "\n" && $ignoreLeadingNewline) {
+ $text = substr($text, 1);
+ $ignoreLeadingNewline = false;
+ }
+ $node->nodeValue = str_replace("\n", $this->_unique . 'BR', $text);
+ }
+ }
+ }
+ }
+}
diff --git a/engine/classes/ElggBatch.php b/engine/classes/ElggBatch.php
new file mode 100644
index 000000000..d810ea066
--- /dev/null
+++ b/engine/classes/ElggBatch.php
@@ -0,0 +1,433 @@
+<?php
+/**
+ * Efficiently run operations on batches of results for any function
+ * that supports an options array.
+ *
+ * This is usually used with elgg_get_entities() and friends,
+ * elgg_get_annotations(), and elgg_get_metadata().
+ *
+ * If you pass a valid PHP callback, all results will be run through that
+ * callback. You can still foreach() through the result set after. Valid
+ * PHP callbacks can be a string, an array, or a closure.
+ * {@link http://php.net/manual/en/language.pseudo-types.php}
+ *
+ * The callback function must accept 3 arguments: an entity, the getter
+ * used, and the options used.
+ *
+ * Results from the callback are stored in callbackResult. If the callback
+ * returns only booleans, callbackResults will be the combined result of
+ * all calls. If no entities are processed, callbackResults will be null.
+ *
+ * If the callback returns anything else, callbackresult will be an indexed
+ * array of whatever the callback returns. If returning error handling
+ * information, you should include enough information to determine which
+ * result you're referring to.
+ *
+ * Don't combine returning bools and returning something else.
+ *
+ * Note that returning false will not stop the foreach.
+ *
+ * @warning If your callback or foreach loop deletes or disable entities
+ * you MUST call setIncrementOffset(false) or set that when instantiating.
+ * This forces the offset to stay what it was in the $options array.
+ *
+ * @example
+ * <code>
+ * // using foreach
+ * $batch = new ElggBatch('elgg_get_entities', array());
+ * $batch->setIncrementOffset(false);
+ *
+ * foreach ($batch as $entity) {
+ * $entity->disable();
+ * }
+ *
+ * // using both a callback
+ * $callback = function($result, $getter, $options) {
+ * var_dump("Looking at annotation id: $result->id");
+ * return true;
+ * }
+ *
+ * $batch = new ElggBatch('elgg_get_annotations', array('guid' => 2), $callback);
+ * </code>
+ *
+ * @package Elgg.Core
+ * @subpackage DataModel
+ * @link http://docs.elgg.org/DataModel/ElggBatch
+ * @since 1.8
+ */
+class ElggBatch
+ implements Iterator {
+
+ /**
+ * The objects to interator over.
+ *
+ * @var array
+ */
+ private $results = array();
+
+ /**
+ * The function used to get results.
+ *
+ * @var mixed A string, array, or closure, or lamda function
+ */
+ private $getter = null;
+
+ /**
+ * The number of results to grab at a time.
+ *
+ * @var int
+ */
+ private $chunkSize = 25;
+
+ /**
+ * A callback function to pass results through.
+ *
+ * @var mixed A string, array, or closure, or lamda function
+ */
+ private $callback = null;
+
+ /**
+ * Start after this many results.
+ *
+ * @var int
+ */
+ private $offset = 0;
+
+ /**
+ * Stop after this many results.
+ *
+ * @var int
+ */
+ private $limit = 0;
+
+ /**
+ * Number of processed results.
+ *
+ * @var int
+ */
+ private $retrievedResults = 0;
+
+ /**
+ * The index of the current result within the current chunk
+ *
+ * @var int
+ */
+ private $resultIndex = 0;
+
+ /**
+ * The index of the current chunk
+ *
+ * @var int
+ */
+ private $chunkIndex = 0;
+
+ /**
+ * The number of results iterated through
+ *
+ * @var int
+ */
+ private $processedResults = 0;
+
+ /**
+ * Is the getter a valid callback
+ *
+ * @var bool
+ */
+ private $validGetter = null;
+
+ /**
+ * The result of running all entities through the callback function.
+ *
+ * @var mixed
+ */
+ public $callbackResult = null;
+
+ /**
+ * If false, offset will not be incremented. This is used for callbacks/loops that delete.
+ *
+ * @var bool
+ */
+ private $incrementOffset = true;
+
+ /**
+ * Entities that could not be instantiated during a fetch
+ *
+ * @var stdClass[]
+ */
+ private $incompleteEntities = array();
+
+ /**
+ * Total number of incomplete entities fetched
+ *
+ * @var int
+ */
+ private $totalIncompletes = 0;
+
+ /**
+ * Batches operations on any elgg_get_*() or compatible function that supports
+ * an options array.
+ *
+ * Instead of returning all objects in memory, it goes through $chunk_size
+ * objects, then requests more from the server. This avoids OOM errors.
+ *
+ * @param string $getter The function used to get objects. Usually
+ * an elgg_get_*() function, but can be any valid PHP callback.
+ * @param array $options The options array to pass to the getter function. If limit is
+ * not set, 10 is used as the default. In most cases that is not
+ * what you want.
+ * @param mixed $callback An optional callback function that all results will be passed
+ * to upon load. The callback needs to accept $result, $getter,
+ * $options.
+ * @param int $chunk_size The number of entities to pull in before requesting more.
+ * You have to balance this between running out of memory in PHP
+ * and hitting the db server too often.
+ * @param bool $inc_offset Increment the offset on each fetch. This must be false for
+ * callbacks that delete rows. You can set this after the
+ * object is created with {@see ElggBatch::setIncrementOffset()}.
+ */
+ public function __construct($getter, $options, $callback = null, $chunk_size = 25,
+ $inc_offset = true) {
+
+ $this->getter = $getter;
+ $this->options = $options;
+ $this->callback = $callback;
+ $this->chunkSize = $chunk_size;
+ $this->setIncrementOffset($inc_offset);
+
+ if ($this->chunkSize <= 0) {
+ $this->chunkSize = 25;
+ }
+
+ // store these so we can compare later
+ $this->offset = elgg_extract('offset', $options, 0);
+ $this->limit = elgg_extract('limit', $options, 10);
+
+ // if passed a callback, create a new ElggBatch with the same options
+ // and pass each to the callback.
+ if ($callback && is_callable($callback)) {
+ $batch = new ElggBatch($getter, $options, null, $chunk_size, $inc_offset);
+
+ $all_results = null;
+
+ foreach ($batch as $result) {
+ if (is_string($callback)) {
+ $result = $callback($result, $getter, $options);
+ } else {
+ $result = call_user_func_array($callback, array($result, $getter, $options));
+ }
+
+ if (!isset($all_results)) {
+ if ($result === true || $result === false || $result === null) {
+ $all_results = $result;
+ } else {
+ $all_results = array();
+ }
+ }
+
+ if (($result === true || $result === false || $result === null) && !is_array($all_results)) {
+ $all_results = $result && $all_results;
+ } else {
+ $all_results[] = $result;
+ }
+ }
+
+ $this->callbackResult = $all_results;
+ }
+ }
+
+ /**
+ * Tell the process that an entity was incomplete during a fetch
+ *
+ * @param stdClass $row
+ *
+ * @access private
+ */
+ public function reportIncompleteEntity(stdClass $row) {
+ $this->incompleteEntities[] = $row;
+ }
+
+ /**
+ * Fetches the next chunk of results
+ *
+ * @return bool
+ */
+ private function getNextResultsChunk() {
+
+ // always reset results.
+ $this->results = array();
+
+ if (!isset($this->validGetter)) {
+ $this->validGetter = is_callable($this->getter);
+ }
+
+ if (!$this->validGetter) {
+ return false;
+ }
+
+ $limit = $this->chunkSize;
+
+ // if someone passed limit = 0 they want everything.
+ if ($this->limit != 0) {
+ if ($this->retrievedResults >= $this->limit) {
+ return false;
+ }
+
+ // if original limit < chunk size, set limit to original limit
+ // else if the number of results we'll fetch if greater than the original limit
+ if ($this->limit < $this->chunkSize) {
+ $limit = $this->limit;
+ } elseif ($this->retrievedResults + $this->chunkSize > $this->limit) {
+ // set the limit to the number of results remaining in the original limit
+ $limit = $this->limit - $this->retrievedResults;
+ }
+ }
+
+ if ($this->incrementOffset) {
+ $offset = $this->offset + $this->retrievedResults;
+ } else {
+ $offset = $this->offset + $this->totalIncompletes;
+ }
+
+ $current_options = array(
+ 'limit' => $limit,
+ 'offset' => $offset,
+ '__ElggBatch' => $this,
+ );
+
+ $options = array_merge($this->options, $current_options);
+
+ $this->incompleteEntities = array();
+ $this->results = call_user_func_array($this->getter, array($options));
+
+ $num_results = count($this->results);
+ $num_incomplete = count($this->incompleteEntities);
+
+ $this->totalIncompletes += $num_incomplete;
+
+ if ($this->incompleteEntities) {
+ // pad the front of the results with nulls representing the incompletes
+ array_splice($this->results, 0, 0, array_pad(array(), $num_incomplete, null));
+ // ...and skip past them
+ reset($this->results);
+ for ($i = 0; $i < $num_incomplete; $i++) {
+ next($this->results);
+ }
+ }
+
+ if ($this->results) {
+ $this->chunkIndex++;
+
+ // let the system know we've jumped past the nulls
+ $this->resultIndex = $num_incomplete;
+
+ $this->retrievedResults += ($num_results + $num_incomplete);
+ if ($num_results == 0) {
+ // This fetch was *all* incompletes! We need to fetch until we can either
+ // offer at least one row to iterate over, or give up.
+ return $this->getNextResultsChunk();
+ }
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * Increment the offset from the original options array? Setting to
+ * false is required for callbacks that delete rows.
+ *
+ * @param bool $increment Set to false when deleting data
+ * @return void
+ */
+ public function setIncrementOffset($increment = true) {
+ $this->incrementOffset = (bool) $increment;
+ }
+
+ /**
+ * Implements Iterator
+ */
+
+ /**
+ * PHP Iterator Interface
+ *
+ * @see Iterator::rewind()
+ * @return void
+ */
+ public function rewind() {
+ $this->resultIndex = 0;
+ $this->retrievedResults = 0;
+ $this->processedResults = 0;
+
+ // only grab results if we haven't yet or we're crossing chunks
+ if ($this->chunkIndex == 0 || $this->limit > $this->chunkSize) {
+ $this->chunkIndex = 0;
+ $this->getNextResultsChunk();
+ }
+ }
+
+ /**
+ * PHP Iterator Interface
+ *
+ * @see Iterator::current()
+ * @return mixed
+ */
+ public function current() {
+ return current($this->results);
+ }
+
+ /**
+ * PHP Iterator Interface
+ *
+ * @see Iterator::key()
+ * @return int
+ */
+ public function key() {
+ return $this->processedResults;
+ }
+
+ /**
+ * PHP Iterator Interface
+ *
+ * @see Iterator::next()
+ * @return mixed
+ */
+ public function next() {
+ // if we'll be at the end.
+ if (($this->processedResults + 1) >= $this->limit && $this->limit > 0) {
+ $this->results = array();
+ return false;
+ }
+
+ // if we'll need new results.
+ if (($this->resultIndex + 1) >= $this->chunkSize) {
+ if (!$this->getNextResultsChunk()) {
+ $this->results = array();
+ return false;
+ }
+
+ $result = current($this->results);
+ } else {
+ // the function above resets the indexes, so only inc if not
+ // getting new set
+ $this->resultIndex++;
+ $result = next($this->results);
+ }
+
+ $this->processedResults++;
+ return $result;
+ }
+
+ /**
+ * PHP Iterator Interface
+ *
+ * @see Iterator::valid()
+ * @return bool
+ */
+ public function valid() {
+ if (!is_array($this->results)) {
+ return false;
+ }
+ $key = key($this->results);
+ return ($key !== NULL && $key !== FALSE);
+ }
+}
diff --git a/engine/classes/ElggCache.php b/engine/classes/ElggCache.php
new file mode 100644
index 000000000..909eab39b
--- /dev/null
+++ b/engine/classes/ElggCache.php
@@ -0,0 +1,247 @@
+<?php
+/**
+ * ElggCache The elgg cache superclass.
+ * This defines the interface for a cache (wherever that cache is stored).
+ *
+ * @package Elgg.Core
+ * @subpackage Cache
+ */
+abstract class ElggCache implements ArrayAccess {
+ /**
+ * Variables for the cache object.
+ *
+ * @var array
+ */
+ private $variables;
+
+ /**
+ * Set the constructor.
+ */
+ function __construct() {
+ $this->variables = array();
+ }
+
+ // @codingStandardsIgnoreStart
+ /**
+ * Set a cache variable.
+ *
+ * @param string $variable Name
+ * @param string $value Value
+ *
+ * @return void
+ *
+ * @deprecated 1.8 Use ElggCache:setVariable()
+ */
+ public function set_variable($variable, $value) {
+ elgg_deprecated_notice('ElggCache::set_variable() is deprecated by ElggCache::setVariable()', 1.8);
+ $this->setVariable($variable, $value);
+ }
+ // @codingStandardsIgnoreEnd
+
+ /**
+ * Set a cache variable.
+ *
+ * @param string $variable Name
+ * @param string $value Value
+ *
+ * @return void
+ */
+ public function setVariable($variable, $value) {
+ if (!is_array($this->variables)) {
+ $this->variables = array();
+ }
+
+ $this->variables[$variable] = $value;
+ }
+
+ // @codingStandardsIgnoreStart
+ /**
+ * Get variables for this cache.
+ *
+ * @param string $variable Name
+ *
+ * @return mixed The value or null;
+ *
+ * @deprecated 1.8 Use ElggCache::getVariable()
+ */
+ public function get_variable($variable) {
+ elgg_deprecated_notice('ElggCache::get_variable() is deprecated by ElggCache::getVariable()', 1.8);
+ return $this->getVariable($variable);
+ }
+ // @codingStandardsIgnoreEnd
+
+ /**
+ * Get variables for this cache.
+ *
+ * @param string $variable Name
+ *
+ * @return mixed The variable or null;
+ */
+ public function getVariable($variable) {
+ if (isset($this->variables[$variable])) {
+ return $this->variables[$variable];
+ }
+
+ return null;
+ }
+
+ /**
+ * Class member get overloading, returning key using $this->load defaults.
+ *
+ * @param string $key Name
+ *
+ * @return mixed
+ */
+ function __get($key) {
+ return $this->load($key);
+ }
+
+ /**
+ * Class member set overloading, setting a key using $this->save defaults.
+ *
+ * @param string $key Name
+ * @param mixed $value Value
+ *
+ * @return mixed
+ */
+ function __set($key, $value) {
+ return $this->save($key, $value);
+ }
+
+ /**
+ * Supporting isset, using $this->load() with default values.
+ *
+ * @param string $key The name of the attribute or metadata.
+ *
+ * @return bool
+ */
+ function __isset($key) {
+ return (bool)$this->load($key);
+ }
+
+ /**
+ * Supporting unsetting of magic attributes.
+ *
+ * @param string $key The name of the attribute or metadata.
+ *
+ * @return bool
+ */
+ function __unset($key) {
+ return $this->delete($key);
+ }
+
+ /**
+ * Save data in a cache.
+ *
+ * @param string $key Name
+ * @param string $data Value
+ *
+ * @return bool
+ */
+ abstract public function save($key, $data);
+
+ /**
+ * Load data from the cache using a given key.
+ *
+ * @todo $offset is a horrible variable name because it creates confusion
+ * with the ArrayAccess methods
+ *
+ * @param string $key Name
+ * @param int $offset Offset
+ * @param int $limit Limit
+ *
+ * @return mixed The stored data or false.
+ */
+ abstract public function load($key, $offset = 0, $limit = null);
+
+ /**
+ * Invalidate a key
+ *
+ * @param string $key Name
+ *
+ * @return bool
+ */
+ abstract public function delete($key);
+
+ /**
+ * Clear out all the contents of the cache.
+ *
+ * @return bool
+ */
+ abstract public function clear();
+
+ /**
+ * Add a key only if it doesn't already exist.
+ * Implemented simply here, if you extend this class and your caching engine
+ * provides a better way then override this accordingly.
+ *
+ * @param string $key Name
+ * @param string $data Value
+ *
+ * @return bool
+ */
+ public function add($key, $data) {
+ if (!isset($this[$key])) {
+ return $this->save($key, $data);
+ }
+
+ return false;
+ }
+
+ // ARRAY ACCESS INTERFACE //////////////////////////////////////////////////////////
+
+ /**
+ * Assigns a value for the specified key
+ *
+ * @see ArrayAccess::offsetSet()
+ *
+ * @param mixed $key The key (offset) to assign the value to.
+ * @param mixed $value The value to set.
+ *
+ * @return void
+ */
+ function offsetSet($key, $value) {
+ $this->save($key, $value);
+ }
+
+ /**
+ * Get the value for specified key
+ *
+ * @see ArrayAccess::offsetGet()
+ *
+ * @param mixed $key The key (offset) to retrieve.
+ *
+ * @return mixed
+ */
+ function offsetGet($key) {
+ return $this->load($key);
+ }
+
+ /**
+ * Unsets a key.
+ *
+ * @see ArrayAccess::offsetUnset()
+ *
+ * @param mixed $key The key (offset) to unset.
+ *
+ * @return void
+ */
+ function offsetUnset($key) {
+ if (isset($this->$key)) {
+ unset($this->$key);
+ }
+ }
+
+ /**
+ * Does key exist
+ *
+ * @see ArrayAccess::offsetExists()
+ *
+ * @param mixed $key A key (offset) to check for.
+ *
+ * @return bool
+ */
+ function offsetExists($key) {
+ return isset($this->$key);
+ }
+}
diff --git a/engine/classes/ElggCrypto.php b/engine/classes/ElggCrypto.php
new file mode 100644
index 000000000..317d371e4
--- /dev/null
+++ b/engine/classes/ElggCrypto.php
@@ -0,0 +1,208 @@
+<?php
+/**
+ * ElggCrypto
+ *
+ * @package Elgg.Core
+ * @subpackage Crypto
+ *
+ * @access private
+ */
+class ElggCrypto {
+
+ /**
+ * Character set for temp passwords (no risk of embedded profanity/glyphs that look similar)
+ */
+ const CHARS_PASSWORD = 'bcdfghjklmnpqrstvwxyz2346789';
+
+ /**
+ * Generate a string of highly randomized bytes (over the full 8-bit range).
+ *
+ * @param int $length Number of bytes needed
+ * @return string Random bytes
+ *
+ * @author George Argyros <argyros.george@gmail.com>
+ * @copyright 2012, George Argyros. All rights reserved.
+ * @license Modified BSD
+ * @link https://github.com/GeorgeArgyros/Secure-random-bytes-in-PHP/blob/master/srand.php Original
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of the <organization> nor the
+ * names of its contributors may be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL GEORGE ARGYROS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+ public function getRandomBytes($length) {
+ /**
+ * Our primary choice for a cryptographic strong randomness function is
+ * openssl_random_pseudo_bytes.
+ */
+ $SSLstr = '4'; // http://xkcd.com/221/
+ if (function_exists('openssl_random_pseudo_bytes')
+ && (version_compare(PHP_VERSION, '5.3.4') >= 0 || substr(PHP_OS, 0, 3) !== 'WIN')) {
+ $SSLstr = openssl_random_pseudo_bytes($length, $strong);
+ if ($strong) {
+ return $SSLstr;
+ }
+ }
+
+ /**
+ * If mcrypt extension is available then we use it to gather entropy from
+ * the operating system's PRNG. This is better than reading /dev/urandom
+ * directly since it avoids reading larger blocks of data than needed.
+ * Older versions of mcrypt_create_iv may be broken or take too much time
+ * to finish so we only use this function with PHP 5.3.7 and above.
+ * @see https://bugs.php.net/bug.php?id=55169
+ */
+ if (function_exists('mcrypt_create_iv')
+ && (version_compare(PHP_VERSION, '5.3.7') >= 0 || substr(PHP_OS, 0, 3) !== 'WIN')) {
+ $str = mcrypt_create_iv($length, MCRYPT_DEV_URANDOM);
+ if ($str !== false) {
+ return $str;
+ }
+ }
+
+ /**
+ * No build-in crypto randomness function found. We collect any entropy
+ * available in the PHP core PRNGs along with some filesystem info and memory
+ * stats. To make this data cryptographically strong we add data either from
+ * /dev/urandom or if its unavailable, we gather entropy by measuring the
+ * time needed to compute a number of SHA-1 hashes.
+ */
+ $str = '';
+ $bits_per_round = 2; // bits of entropy collected in each clock drift round
+ $msec_per_round = 400; // expected running time of each round in microseconds
+ $hash_len = 20; // SHA-1 Hash length
+ $total = $length; // total bytes of entropy to collect
+
+ $handle = @fopen('/dev/urandom', 'rb');
+ if ($handle && function_exists('stream_set_read_buffer')) {
+ @stream_set_read_buffer($handle, 0);
+ }
+
+ do {
+ $bytes = ($total > $hash_len) ? $hash_len : $total;
+ $total -= $bytes;
+
+ //collect any entropy available from the PHP system and filesystem
+ $entropy = rand() . uniqid(mt_rand(), true) . $SSLstr;
+ $entropy .= implode('', @fstat(@fopen(__FILE__, 'r')));
+ $entropy .= memory_get_usage() . getmypid();
+ $entropy .= serialize($_ENV) . serialize($_SERVER);
+ if (function_exists('posix_times')) {
+ $entropy .= serialize(posix_times());
+ }
+ if (function_exists('zend_thread_id')) {
+ $entropy .= zend_thread_id();
+ }
+
+ if ($handle) {
+ $entropy .= @fread($handle, $bytes);
+ } else {
+ // Measure the time that the operations will take on average
+ for ($i = 0; $i < 3; $i++) {
+ $c1 = microtime(true);
+ $var = sha1(mt_rand());
+ for ($j = 0; $j < 50; $j++) {
+ $var = sha1($var);
+ }
+ $c2 = microtime(true);
+ $entropy .= $c1 . $c2;
+ }
+
+ // Based on the above measurement determine the total rounds
+ // in order to bound the total running time.
+ $rounds = (int) ($msec_per_round * 50 / (int) (($c2 - $c1) * 1000000));
+
+ // Take the additional measurements. On average we can expect
+ // at least $bits_per_round bits of entropy from each measurement.
+ $iter = $bytes * (int) (ceil(8 / $bits_per_round));
+
+ for ($i = 0; $i < $iter; $i++) {
+ $c1 = microtime();
+ $var = sha1(mt_rand());
+ for ($j = 0; $j < $rounds; $j++) {
+ $var = sha1($var);
+ }
+ $c2 = microtime();
+ $entropy .= $c1 . $c2;
+ }
+ }
+
+ // We assume sha1 is a deterministic extractor for the $entropy variable.
+ $str .= sha1($entropy, true);
+
+ } while ($length > strlen($str));
+
+ if ($handle) {
+ @fclose($handle);
+ }
+
+ return substr($str, 0, $length);
+ }
+
+ /**
+ * Generate a random string of specified length.
+ *
+ * Uses supplied character list for generating the new string.
+ * If no character list provided - uses Base64 URL character set.
+ *
+ * @param int $length Desired length of the string
+ * @param string|null $chars Characters to be chosen from randomly. If not given, the Base64 URL
+ * charset will be used.
+ *
+ * @return string The random string
+ *
+ * @throws InvalidArgumentException
+ *
+ * @copyright Copyright (c) 2005-2013 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ *
+ * @see https://github.com/zendframework/zf2/blob/master/library/Zend/Math/Rand.php#L179
+ */
+ public static function getRandomString($length, $chars = null) {
+ if ($length < 1) {
+ throw new InvalidArgumentException('Length should be >= 1');
+ }
+
+ if (empty($chars)) {
+ $numBytes = ceil($length * 0.75);
+ $bytes = self::getRandomBytes($numBytes);
+ $string = substr(rtrim(base64_encode($bytes), '='), 0, $length);
+
+ // Base64 URL
+ return strtr($string, '+/', '-_');
+ }
+
+ $listLen = strlen($chars);
+
+ if ($listLen == 1) {
+ return str_repeat($chars, $length);
+ }
+
+ $bytes = self::getRandomBytes($length);
+ $pos = 0;
+ $result = '';
+ for ($i = 0; $i < $length; $i++) {
+ $pos = ($pos + ord($bytes[$i])) % $listLen;
+ $result .= $chars[$pos];
+ }
+
+ return $result;
+ }
+}
diff --git a/engine/classes/ElggData.php b/engine/classes/ElggData.php
new file mode 100644
index 000000000..4f843cde4
--- /dev/null
+++ b/engine/classes/ElggData.php
@@ -0,0 +1,309 @@
+<?php
+/**
+ * A generic class that contains shared code b/w
+ * ElggExtender, ElggEntity, and ElggRelationship
+ *
+ * @package Elgg.Core
+ * @subpackage DataModel
+ *
+ * @property int $owner_guid
+ * @property int $time_created
+ */
+abstract class ElggData implements
+ Loggable, // Can events related to this object class be logged
+ Iterator, // Override foreach behaviour
+ ArrayAccess, // Override for array access
+ Exportable
+{
+
+ /**
+ * The main attributes of an entity.
+ * Holds attributes to save to database
+ * This contains the site's main properties (id, etc)
+ * Blank entries for all database fields should be created by the constructor.
+ * Subclasses should add to this in their constructors.
+ * Any field not appearing in this will be viewed as a
+ */
+ protected $attributes = array();
+
+ // @codingStandardsIgnoreStart
+ /**
+ * Initialise the attributes array.
+ *
+ * This is vital to distinguish between metadata and base parameters.
+ *
+ * @param bool $pre18_api Compatibility for subclassing in 1.7 -> 1.8 change.
+ * Passing true (default) emits a deprecation notice.
+ * Passing false returns false. Core constructors always pass false.
+ * Does nothing either way since attributes are initialized by the time
+ * this is called.
+ * @return void
+ * @deprecated 1.8 Use initializeAttributes()
+ */
+ protected function initialise_attributes($pre18_api = true) {
+ if ($pre18_api) {
+ elgg_deprecated_notice('initialise_attributes() is deprecated by initializeAttributes()', 1.8);
+ }
+ }
+ // @codingStandardsIgnoreEnd
+
+ /**
+ * Initialize the attributes array.
+ *
+ * This is vital to distinguish between metadata and base parameters.
+ *
+ * @return void
+ */
+ protected function initializeAttributes() {
+ // Create attributes array if not already created
+ if (!is_array($this->attributes)) {
+ $this->attributes = array();
+ }
+
+ $this->attributes['time_created'] = NULL;
+ }
+
+ /**
+ * Return an attribute or a piece of metadata.
+ *
+ * @param string $name Name
+ *
+ * @return mixed
+ */
+ public function __get($name) {
+ return $this->get($name);
+ }
+
+ /**
+ * Set an attribute or a piece of metadata.
+ *
+ * @param string $name Name
+ * @param mixed $value Value
+ *
+ * @return mixed
+ */
+ public function __set($name, $value) {
+ return $this->set($name, $value);
+ }
+
+ /**
+ * Test if property is set either as an attribute or metadata.
+ *
+ * @tip Use isset($entity->property)
+ *
+ * @param string $name The name of the attribute or metadata.
+ *
+ * @return bool
+ */
+ function __isset($name) {
+ return $this->$name !== NULL;
+ }
+
+ /**
+ * Fetch the specified attribute
+ *
+ * @param string $name The attribute to fetch
+ *
+ * @return mixed The attribute, if it exists. Otherwise, null.
+ */
+ abstract protected function get($name);
+
+ /**
+ * Set the specified attribute
+ *
+ * @param string $name The attribute to set
+ * @param mixed $value The value to set it to
+ *
+ * @return bool The success of your set function?
+ */
+ abstract protected function set($name, $value);
+
+ /**
+ * Get a URL for this object
+ *
+ * @return string
+ */
+ abstract public function getURL();
+
+ /**
+ * Save this data to the appropriate database table.
+ *
+ * @return bool
+ */
+ abstract public function save();
+
+ /**
+ * Delete this data.
+ *
+ * @return bool
+ */
+ abstract public function delete();
+
+ /**
+ * Returns the UNIX epoch time that this entity was created
+ *
+ * @return int UNIX epoch time
+ */
+ public function getTimeCreated() {
+ return $this->time_created;
+ }
+
+ /*
+ * SYSTEM LOG INTERFACE
+ */
+
+ /**
+ * Return the class name of the object.
+ *
+ * @return string
+ */
+ public function getClassName() {
+ return get_class($this);
+ }
+
+ /**
+ * Return the GUID of the owner of this object.
+ *
+ * @return int
+ * @deprecated 1.8 Use getOwnerGUID() instead
+ */
+ public function getObjectOwnerGUID() {
+ elgg_deprecated_notice("getObjectOwnerGUID() was deprecated. Use getOwnerGUID().", 1.8);
+ return $this->owner_guid;
+ }
+
+ /*
+ * ITERATOR INTERFACE
+ */
+
+ /*
+ * This lets an entity's attributes be displayed using foreach as a normal array.
+ * Example: http://www.sitepoint.com/print/php5-standard-library
+ */
+ protected $valid = FALSE;
+
+ /**
+ * Iterator interface
+ *
+ * @see Iterator::rewind()
+ *
+ * @return void
+ */
+ public function rewind() {
+ $this->valid = (FALSE !== reset($this->attributes));
+ }
+
+ /**
+ * Iterator interface
+ *
+ * @see Iterator::current()
+ *
+ * @return mixed
+ */
+ public function current() {
+ return current($this->attributes);
+ }
+
+ /**
+ * Iterator interface
+ *
+ * @see Iterator::key()
+ *
+ * @return string
+ */
+ public function key() {
+ return key($this->attributes);
+ }
+
+ /**
+ * Iterator interface
+ *
+ * @see Iterator::next()
+ *
+ * @return void
+ */
+ public function next() {
+ $this->valid = (FALSE !== next($this->attributes));
+ }
+
+ /**
+ * Iterator interface
+ *
+ * @see Iterator::valid()
+ *
+ * @return bool
+ */
+ public function valid() {
+ return $this->valid;
+ }
+
+ /*
+ * ARRAY ACCESS INTERFACE
+ */
+
+ /*
+ * This lets an entity's attributes be accessed like an associative array.
+ * Example: http://www.sitepoint.com/print/php5-standard-library
+ */
+
+ /**
+ * Array access interface
+ *
+ * @see ArrayAccess::offsetSet()
+ *
+ * @param mixed $key Name
+ * @param mixed $value Value
+ *
+ * @return void
+ */
+ public function offsetSet($key, $value) {
+ if (array_key_exists($key, $this->attributes)) {
+ $this->attributes[$key] = $value;
+ }
+ }
+
+ /**
+ * Array access interface
+ *
+ * @see ArrayAccess::offsetGet()
+ *
+ * @param mixed $key Name
+ *
+ * @return mixed
+ */
+ public function offsetGet($key) {
+ if (array_key_exists($key, $this->attributes)) {
+ return $this->attributes[$key];
+ }
+ return null;
+ }
+
+ /**
+ * Array access interface
+ *
+ * @see ArrayAccess::offsetUnset()
+ *
+ * @param mixed $key Name
+ *
+ * @return void
+ */
+ public function offsetUnset($key) {
+ if (array_key_exists($key, $this->attributes)) {
+ // Full unsetting is dangerous for our objects
+ $this->attributes[$key] = "";
+ }
+ }
+
+ /**
+ * Array access interface
+ *
+ * @see ArrayAccess::offsetExists()
+ *
+ * @param int $offset Offset
+ *
+ * @return int
+ */
+ public function offsetExists($offset) {
+ return array_key_exists($offset, $this->attributes);
+ }
+}
diff --git a/engine/classes/ElggDiskFilestore.php b/engine/classes/ElggDiskFilestore.php
new file mode 100644
index 000000000..6e2354012
--- /dev/null
+++ b/engine/classes/ElggDiskFilestore.php
@@ -0,0 +1,417 @@
+<?php
+/**
+ * A filestore that uses disk as storage.
+ *
+ * @warning This should be used by a wrapper class
+ * like {@link ElggFile}.
+ *
+ * @package Elgg.Core
+ * @subpackage FileStore.Disk
+ * @link http://docs.elgg.org/DataModel/FileStore/Disk
+ */
+class ElggDiskFilestore extends ElggFilestore {
+ /**
+ * Directory root.
+ */
+ private $dir_root;
+
+ /**
+ * Default depth of file directory matrix
+ */
+ private $matrix_depth = 5;
+
+ /**
+ * Construct a disk filestore using the given directory root.
+ *
+ * @param string $directory_root Root directory, must end in "/"
+ */
+ public function __construct($directory_root = "") {
+ global $CONFIG;
+
+ if ($directory_root) {
+ $this->dir_root = $directory_root;
+ } else {
+ $this->dir_root = $CONFIG->dataroot;
+ }
+ }
+
+ /**
+ * Open a file for reading, writing, or both.
+ *
+ * @note All files are opened binary safe.
+ * @warning This will try to create the a directory if it doesn't exist,
+ * even in read-only mode.
+ *
+ * @param ElggFile $file The file to open
+ * @param string $mode read, write, or append.
+ *
+ * @throws InvalidParameterException
+ * @return resource File pointer resource
+ * @todo This really shouldn't try to create directories if not writing.
+ */
+ public function open(ElggFile $file, $mode) {
+ $fullname = $this->getFilenameOnFilestore($file);
+
+ // Split into path and name
+ $ls = strrpos($fullname, "/");
+ if ($ls === false) {
+ $ls = 0;
+ }
+
+ $path = substr($fullname, 0, $ls);
+ $name = substr($fullname, $ls);
+ // @todo $name is unused, remove it or do we need to fix something?
+
+ // Try and create the directory
+ try {
+ $this->makeDirectoryRoot($path);
+ } catch (Exception $e) {
+
+ }
+
+ if (($mode != 'write') && (!file_exists($fullname))) {
+ return false;
+ }
+
+ switch ($mode) {
+ case "read" :
+ $mode = "rb";
+ break;
+ case "write" :
+ $mode = "w+b";
+ break;
+ case "append" :
+ $mode = "a+b";
+ break;
+ default:
+ $msg = elgg_echo('InvalidParameterException:UnrecognisedFileMode', array($mode));
+ throw new InvalidParameterException($msg);
+ }
+
+ return fopen($fullname, $mode);
+
+ }
+
+ /**
+ * Write data to a file.
+ *
+ * @param resource $f File pointer resource
+ * @param mixed $data The data to write.
+ *
+ * @return bool
+ */
+ public function write($f, $data) {
+ return fwrite($f, $data);
+ }
+
+ /**
+ * Read data from a file.
+ *
+ * @param resource $f File pointer resource
+ * @param int $length The number of bytes to read
+ * @param int $offset The number of bytes to start after
+ *
+ * @return mixed Contents of file or false on fail.
+ */
+ public function read($f, $length, $offset = 0) {
+ if ($offset) {
+ $this->seek($f, $offset);
+ }
+
+ return fread($f, $length);
+ }
+
+ /**
+ * Close a file pointer
+ *
+ * @param resource $f A file pointer resource
+ *
+ * @return bool
+ */
+ public function close($f) {
+ return fclose($f);
+ }
+
+ /**
+ * Delete an ElggFile file.
+ *
+ * @param ElggFile $file File to delete
+ *
+ * @return bool
+ */
+ public function delete(ElggFile $file) {
+ $filename = $this->getFilenameOnFilestore($file);
+ if (file_exists($filename)) {
+ return unlink($filename);
+ } else {
+ return true;
+ }
+ }
+
+ /**
+ * Seek to the specified position.
+ *
+ * @param resource $f File resource
+ * @param int $position Position in bytes
+ *
+ * @return bool
+ */
+ public function seek($f, $position) {
+ return fseek($f, $position);
+ }
+
+ /**
+ * Return the current location of the internal pointer
+ *
+ * @param resource $f File pointer resource
+ *
+ * @return int|false
+ */
+ public function tell($f) {
+ return ftell($f);
+ }
+
+ /**
+ * Tests for end of file on a file pointer
+ *
+ * @param resource $f File pointer resource
+ *
+ * @return bool
+ */
+ public function eof($f) {
+ return feof($f);
+ }
+
+ /**
+ * Returns the file size of an ElggFile file.
+ *
+ * @param ElggFile $file File object
+ *
+ * @return int The file size
+ */
+ public function getFileSize(ElggFile $file) {
+ return filesize($this->getFilenameOnFilestore($file));
+ }
+
+ /**
+ * Get the filename as saved on disk for an ElggFile object
+ *
+ * Returns an empty string if no filename set
+ *
+ * @param ElggFile $file File object
+ *
+ * @return string The full path of where the file is stored
+ * @throws InvalidParameterException
+ */
+ public function getFilenameOnFilestore(ElggFile $file) {
+ $owner_guid = $file->getOwnerGuid();
+ if (!$owner_guid) {
+ $owner_guid = elgg_get_logged_in_user_guid();
+ }
+
+ if (!$owner_guid) {
+ $msg = elgg_echo('InvalidParameterException:MissingOwner',
+ array($file->getFilename(), $file->guid));
+ throw new InvalidParameterException($msg);
+ }
+
+ $filename = $file->getFilename();
+ if (!$filename) {
+ return '';
+ }
+
+ return $this->dir_root . $this->makeFileMatrix($owner_guid) . $filename;
+ }
+
+ /**
+ * Returns the contents of the ElggFile file.
+ *
+ * @param ElggFile $file File object
+ *
+ * @return string
+ */
+ public function grabFile(ElggFile $file) {
+ return file_get_contents($file->getFilenameOnFilestore());
+ }
+
+ /**
+ * Tests if an ElggFile file exists.
+ *
+ * @param ElggFile $file File object
+ *
+ * @return bool
+ */
+ public function exists(ElggFile $file) {
+ if (!$file->getFilename()) {
+ return false;
+ }
+ return file_exists($this->getFilenameOnFilestore($file));
+ }
+
+ /**
+ * Returns the size of all data stored under a directory in the disk store.
+ *
+ * @param string $prefix Optional/ The prefix to check under.
+ * @param string $container_guid The guid of the entity whose data you want to check.
+ *
+ * @return int|false
+ */
+ public function getSize($prefix = '', $container_guid) {
+ if ($container_guid) {
+ return get_dir_size($this->dir_root . $this->makeFileMatrix($container_guid) . $prefix);
+ } else {
+ return false;
+ }
+ }
+
+ // @codingStandardsIgnoreStart
+ /**
+ * Create a directory $dirroot
+ *
+ * @param string $dirroot The full path of the directory to create
+ *
+ * @throws IOException
+ * @return true
+ * @deprecated 1.8 Use ElggDiskFilestore::makeDirectoryRoot()
+ */
+ protected function make_directory_root($dirroot) {
+ elgg_deprecated_notice('ElggDiskFilestore::make_directory_root() is deprecated by ::makeDirectoryRoot()', 1.8);
+
+ return $this->makeDirectoryRoot($dirroot);
+ }
+ // @codingStandardsIgnoreEnd
+
+ /**
+ * Create a directory $dirroot
+ *
+ * @param string $dirroot The full path of the directory to create
+ *
+ * @throws IOException
+ * @return true
+ */
+ protected function makeDirectoryRoot($dirroot) {
+ if (!file_exists($dirroot)) {
+ if (!@mkdir($dirroot, 0700, true)) {
+ throw new IOException(elgg_echo('IOException:CouldNotMake', array($dirroot)));
+ }
+ }
+
+ return true;
+ }
+
+ // @codingStandardsIgnoreStart
+ /**
+ * Multibyte string tokeniser.
+ *
+ * Splits a string into an array. Will fail safely if mbstring is
+ * not installed.
+ *
+ * @param string $string String
+ * @param string $charset The charset, defaults to UTF8
+ *
+ * @return array
+ * @deprecated 1.8 Files are stored by date and guid; no need for this.
+ */
+ private function mb_str_split($string, $charset = 'UTF8') {
+ elgg_deprecated_notice('ElggDiskFilestore::mb_str_split() is deprecated.', 1.8);
+
+ if (is_callable('mb_substr')) {
+ $length = mb_strlen($string);
+ $array = array();
+
+ while ($length) {
+ $array[] = mb_substr($string, 0, 1, $charset);
+ $string = mb_substr($string, 1, $length, $charset);
+
+ $length = mb_strlen($string);
+ }
+
+ return $array;
+ } else {
+ return str_split($string);
+ }
+ }
+ // @codingStandardsIgnoreEnd
+
+ // @codingStandardsIgnoreStart
+ /**
+ * Construct a file path matrix for an entity.
+ *
+ * @param int $identifier The guide of the entity to store the data under.
+ *
+ * @return string The path where the entity's data will be stored.
+ * @deprecated 1.8 Use ElggDiskFilestore::makeFileMatrix()
+ */
+ protected function make_file_matrix($identifier) {
+ elgg_deprecated_notice('ElggDiskFilestore::make_file_matrix() is deprecated by ::makeFileMatrix()', 1.8);
+
+ return $this->makeFileMatrix($identifier);
+ }
+ // @codingStandardsIgnoreEnd
+
+ /**
+ * Construct a file path matrix for an entity.
+ *
+ * @param int $guid The guide of the entity to store the data under.
+ *
+ * @return string The path where the entity's data will be stored.
+ */
+ protected function makeFileMatrix($guid) {
+ $entity = get_entity($guid);
+
+ if (!($entity instanceof ElggEntity) || !$entity->time_created) {
+ return false;
+ }
+
+ $time_created = date('Y/m/d', $entity->time_created);
+
+ return "$time_created/$entity->guid/";
+ }
+
+ // @codingStandardsIgnoreStart
+ /**
+ * Construct a filename matrix.
+ *
+ * Generates a matrix using the entity's creation time and
+ * unique guid.
+ *
+ * File path matrixes are:
+ * YYYY/MM/DD/guid/
+ *
+ * @param int $guid The entity to contrust a matrix for
+ *
+ * @return string The
+ */
+ protected function user_file_matrix($guid) {
+ elgg_deprecated_notice('ElggDiskFilestore::user_file_matrix() is deprecated by ::makeFileMatrix()', 1.8);
+
+ return $this->makeFileMatrix($guid);
+ }
+ // @codingStandardsIgnoreEnd
+
+ /**
+ * Returns a list of attributes to save to the database when saving
+ * the ElggFile object using this file store.
+ *
+ * @return array
+ */
+ public function getParameters() {
+ return array("dir_root" => $this->dir_root);
+ }
+
+ /**
+ * Sets parameters that should be saved to database.
+ *
+ * @param array $parameters Set parameters to save to DB for this filestore.
+ *
+ * @return bool
+ */
+ public function setParameters(array $parameters) {
+ if (isset($parameters['dir_root'])) {
+ $this->dir_root = $parameters['dir_root'];
+ return true;
+ }
+
+ return false;
+ }
+}
diff --git a/engine/classes/ElggEntity.php b/engine/classes/ElggEntity.php
new file mode 100644
index 000000000..a563f6fad
--- /dev/null
+++ b/engine/classes/ElggEntity.php
@@ -0,0 +1,1770 @@
+<?php
+/**
+ * The parent class for all Elgg Entities.
+ *
+ * An ElggEntity is one of the basic data models in Elgg. It is the primary
+ * means of storing and retrieving data from the database. An ElggEntity
+ * represents one row of the entities table.
+ *
+ * The ElggEntity class handles CRUD operations for the entities table.
+ * ElggEntity should always be extended by another class to handle CRUD
+ * operations on the type-specific table.
+ *
+ * ElggEntity uses magic methods for get and set, so any property that isn't
+ * declared will be assumed to be metadata and written to the database
+ * as metadata on the object. All children classes must declare which
+ * properties are columns of the type table or they will be assumed
+ * to be metadata. See ElggObject::initialise_entities() for examples.
+ *
+ * Core supports 4 types of entities: ElggObject, ElggUser, ElggGroup, and
+ * ElggSite.
+ *
+ * @tip Most plugin authors will want to extend the ElggObject class
+ * instead of this class.
+ *
+ * @package Elgg.Core
+ * @subpackage DataModel.Entities
+ *
+ * @property string $type object, user, group, or site (read-only after save)
+ * @property string $subtype Further clarifies the nature of the entity (read-only after save)
+ * @property int $guid The unique identifier for this entity (read only)
+ * @property int $owner_guid The GUID of the creator of this entity
+ * @property int $container_guid The GUID of the entity containing this entity
+ * @property int $site_guid The GUID of the website this entity is associated with
+ * @property int $access_id Specifies the visibility level of this entity
+ * @property int $time_created A UNIX timestamp of when the entity was created (read-only, set on first save)
+ * @property int $time_updated A UNIX timestamp of when the entity was last updated (automatically updated on save)
+ * @property-read string $enabled
+ */
+abstract class ElggEntity extends ElggData implements
+ Notable, // Calendar interface
+ Locatable, // Geocoding interface
+ Importable // Allow import of data
+{
+
+ /**
+ * If set, overrides the value of getURL()
+ */
+ protected $url_override;
+
+ /**
+ * Icon override, overrides the value of getIcon().
+ */
+ protected $icon_override;
+
+ /**
+ * Holds metadata until entity is saved. Once the entity is saved,
+ * metadata are written immediately to the database.
+ */
+ protected $temp_metadata = array();
+
+ /**
+ * Holds annotations until entity is saved. Once the entity is saved,
+ * annotations are written immediately to the database.
+ */
+ protected $temp_annotations = array();
+
+ /**
+ * Holds private settings until entity is saved. Once the entity is saved,
+ * private settings are written immediately to the database.
+ */
+ protected $temp_private_settings = array();
+
+ /**
+ * Volatile data structure for this object, allows for storage of data
+ * in-memory that isn't sync'd back to the metadata table.
+ */
+ protected $volatile = array();
+
+ /**
+ * Initialize the attributes array.
+ *
+ * This is vital to distinguish between metadata and base parameters.
+ *
+ * @return void
+ */
+ protected function initializeAttributes() {
+ parent::initializeAttributes();
+
+ $this->attributes['guid'] = NULL;
+ $this->attributes['type'] = NULL;
+ $this->attributes['subtype'] = NULL;
+
+ $this->attributes['owner_guid'] = elgg_get_logged_in_user_guid();
+ $this->attributes['container_guid'] = elgg_get_logged_in_user_guid();
+
+ $this->attributes['site_guid'] = NULL;
+ $this->attributes['access_id'] = ACCESS_PRIVATE;
+ $this->attributes['time_created'] = NULL;
+ $this->attributes['time_updated'] = NULL;
+ $this->attributes['last_action'] = NULL;
+ $this->attributes['enabled'] = "yes";
+
+ // There now follows a bit of a hack
+ /* Problem: To speed things up, some objects are split over several tables,
+ * this means that it requires n number of database reads to fully populate
+ * an entity. This causes problems for caching and create events
+ * since it is not possible to tell whether a subclassed entity is complete.
+ *
+ * Solution: We have two counters, one 'tables_split' which tells whatever is
+ * interested how many tables are going to need to be searched in order to fully
+ * populate this object, and 'tables_loaded' which is how many have been
+ * loaded thus far.
+ *
+ * If the two are the same then this object is complete.
+ *
+ * Use: isFullyLoaded() to check
+ */
+ $this->attributes['tables_split'] = 1;
+ $this->attributes['tables_loaded'] = 0;
+ }
+
+ /**
+ * Clone an entity
+ *
+ * Resets the guid so that the entity can be saved as a distinct entity from
+ * the original. Creation time will be set when this new entity is saved.
+ * The owner and container guids come from the original entity. The clone
+ * method copies metadata but does not copy annotations or private settings.
+ *
+ * @note metadata will have its owner and access id set when the entity is saved
+ * and it will be the same as that of the entity.
+ *
+ * @return void
+ */
+ public function __clone() {
+ $orig_entity = get_entity($this->guid);
+ if (!$orig_entity) {
+ elgg_log("Failed to clone entity with GUID $this->guid", "ERROR");
+ return;
+ }
+
+ $metadata_array = elgg_get_metadata(array(
+ 'guid' => $this->guid,
+ 'limit' => 0
+ ));
+
+ $this->attributes['guid'] = "";
+
+ $this->attributes['subtype'] = $orig_entity->getSubtype();
+
+ // copy metadata over to new entity - slightly convoluted due to
+ // handling of metadata arrays
+ if (is_array($metadata_array)) {
+ // create list of metadata names
+ $metadata_names = array();
+ foreach ($metadata_array as $metadata) {
+ $metadata_names[] = $metadata['name'];
+ }
+ // arrays are stored with multiple enties per name
+ $metadata_names = array_unique($metadata_names);
+
+ // move the metadata over
+ foreach ($metadata_names as $name) {
+ $this->set($name, $orig_entity->$name);
+ }
+ }
+ }
+
+ /**
+ * Return the value of a property.
+ *
+ * If $name is defined in $this->attributes that value is returned, otherwise it will
+ * pull from the entity's metadata.
+ *
+ * Q: Why are we not using __get overload here?
+ * A: Because overload operators cause problems during subclassing, so we put the code here and
+ * create overloads in subclasses.
+ *
+ * @todo What problems are these?
+ *
+ * @warning Subtype is returned as an id rather than the subtype string. Use getSubtype()
+ * to get the subtype string.
+ *
+ * @param string $name Name
+ *
+ * @return mixed Returns the value of a given value, or null.
+ */
+ public function get($name) {
+ // See if its in our base attributes
+ if (array_key_exists($name, $this->attributes)) {
+ return $this->attributes[$name];
+ }
+
+ // No, so see if its in the meta data for this entity
+ $meta = $this->getMetaData($name);
+
+ // getMetaData returns NULL if $name is not found
+ return $meta;
+ }
+
+ /**
+ * Sets the value of a property.
+ *
+ * If $name is defined in $this->attributes that value is set, otherwise it is
+ * saved as metadata.
+ *
+ * @warning Metadata set this way will inherit the entity's owner and access ID. If you want
+ * to set metadata with a different owner, use create_metadata().
+ *
+ * @warning It is important that your class populates $this->attributes with keys
+ * for all base attributes, anything not in their gets set as METADATA.
+ *
+ * Q: Why are we not using __set overload here?
+ * A: Because overload operators cause problems during subclassing, so we put the code here and
+ * create overloads in subclasses.
+ *
+ * @todo What problems?
+ *
+ * @param string $name Name
+ * @param mixed $value Value
+ *
+ * @return bool
+ */
+ public function set($name, $value) {
+ if (array_key_exists($name, $this->attributes)) {
+ // Certain properties should not be manually changed!
+ switch ($name) {
+ case 'guid':
+ case 'time_updated':
+ case 'last_action':
+ return FALSE;
+ break;
+ default:
+ $this->attributes[$name] = $value;
+ break;
+ }
+ } else {
+ return $this->setMetaData($name, $value);
+ }
+
+ return TRUE;
+ }
+
+ /**
+ * Return the value of a piece of metadata.
+ *
+ * @param string $name Name
+ *
+ * @return mixed The value, or NULL if not found.
+ */
+ public function getMetaData($name) {
+ $guid = $this->getGUID();
+
+ if (! $guid) {
+ if (isset($this->temp_metadata[$name])) {
+ // md is returned as an array only if more than 1 entry
+ if (count($this->temp_metadata[$name]) == 1) {
+ return $this->temp_metadata[$name][0];
+ } else {
+ return $this->temp_metadata[$name];
+ }
+ } else {
+ return null;
+ }
+ }
+
+ // upon first cache miss, just load/cache all the metadata and retry.
+ // if this works, the rest of this function may not be needed!
+ $cache = elgg_get_metadata_cache();
+ if ($cache->isKnown($guid, $name)) {
+ return $cache->load($guid, $name);
+ } else {
+ $cache->populateFromEntities(array($guid));
+ // in case ignore_access was on, we have to check again...
+ if ($cache->isKnown($guid, $name)) {
+ return $cache->load($guid, $name);
+ }
+ }
+
+ $md = elgg_get_metadata(array(
+ 'guid' => $guid,
+ 'metadata_name' => $name,
+ 'limit' => 0,
+ ));
+
+ $value = null;
+
+ if ($md && !is_array($md)) {
+ $value = $md->value;
+ } elseif (count($md) == 1) {
+ $value = $md[0]->value;
+ } else if ($md && is_array($md)) {
+ $value = metadata_array_to_values($md);
+ }
+
+ $cache->save($guid, $name, $value);
+
+ return $value;
+ }
+
+ /**
+ * Unset a property from metadata or attribute.
+ *
+ * @warning If you use this to unset an attribute, you must save the object!
+ *
+ * @param string $name The name of the attribute or metadata.
+ *
+ * @return void
+ */
+ function __unset($name) {
+ if (array_key_exists($name, $this->attributes)) {
+ $this->attributes[$name] = "";
+ } else {
+ $this->deleteMetadata($name);
+ }
+ }
+
+ /**
+ * Set a piece of metadata.
+ *
+ * Plugin authors should use the magic methods or create_metadata().
+ *
+ * @warning The metadata will inherit the parent entity's owner and access ID.
+ * If you want to write metadata with a different owner, use create_metadata().
+ *
+ * @access private
+ *
+ * @param string $name Name of the metadata
+ * @param mixed $value Value of the metadata (doesn't support assoc arrays)
+ * @param string $value_type Types supported: integer and string. Will auto-identify if not set
+ * @param bool $multiple Allow multiple values for a single name (doesn't support assoc arrays)
+ *
+ * @return bool
+ */
+ public function setMetaData($name, $value, $value_type = null, $multiple = false) {
+
+ // normalize value to an array that we will loop over
+ // remove indexes if value already an array.
+ if (is_array($value)) {
+ $value = array_values($value);
+ } else {
+ $value = array($value);
+ }
+
+ // saved entity. persist md to db.
+ if ($this->guid) {
+ // if overwriting, delete first.
+ if (!$multiple) {
+ $options = array(
+ 'guid' => $this->getGUID(),
+ 'metadata_name' => $name,
+ 'limit' => 0
+ );
+ // @todo in 1.9 make this return false if can't add metadata
+ // https://github.com/elgg/elgg/issues/4520
+ //
+ // need to remove access restrictions right now to delete
+ // because this is the expected behavior
+ $ia = elgg_set_ignore_access(true);
+ if (false === elgg_delete_metadata($options)) {
+ return false;
+ }
+ elgg_set_ignore_access($ia);
+ }
+
+ // add new md
+ $result = true;
+ foreach ($value as $value_tmp) {
+ // at this point $value should be appended because it was cleared above if needed.
+ $md_id = create_metadata($this->getGUID(), $name, $value_tmp, $value_type,
+ $this->getOwnerGUID(), $this->getAccessId(), true);
+ if (!$md_id) {
+ return false;
+ }
+ }
+
+ return $result;
+ } else {
+ // unsaved entity. store in temp array
+ // returning single entries instead of an array of 1 element is decided in
+ // getMetaData(), just like pulling from the db.
+ //
+ // if overwrite, delete first
+ if (!$multiple || !isset($this->temp_metadata[$name])) {
+ $this->temp_metadata[$name] = array();
+ }
+
+ // add new md
+ $this->temp_metadata[$name] = array_merge($this->temp_metadata[$name], $value);
+ return true;
+ }
+ }
+
+ /**
+ * Deletes all metadata on this object (metadata.entity_guid = $this->guid).
+ * If you pass a name, only metadata matching that name will be deleted.
+ *
+ * @warning Calling this with no $name will clear all metadata on the entity.
+ *
+ * @param null|string $name The name of the metadata to remove.
+ * @return bool
+ * @since 1.8
+ */
+ public function deleteMetadata($name = null) {
+
+ if (!$this->guid) {
+ return false;
+ }
+
+ $options = array(
+ 'guid' => $this->guid,
+ 'limit' => 0
+ );
+ if ($name) {
+ $options['metadata_name'] = $name;
+ }
+
+ return elgg_delete_metadata($options);
+ }
+
+ /**
+ * Deletes all metadata owned by this object (metadata.owner_guid = $this->guid).
+ * If you pass a name, only metadata matching that name will be deleted.
+ *
+ * @param null|string $name The name of metadata to delete.
+ * @return bool
+ * @since 1.8
+ */
+ public function deleteOwnedMetadata($name = null) {
+ // access is turned off for this because they might
+ // no longer have access to an entity they created metadata on.
+ $ia = elgg_set_ignore_access(true);
+ $options = array(
+ 'metadata_owner_guid' => $this->guid,
+ 'limit' => 0
+ );
+ if ($name) {
+ $options['metadata_name'] = $name;
+ }
+
+ $r = elgg_delete_metadata($options);
+ elgg_set_ignore_access($ia);
+ return $r;
+ }
+
+ /**
+ * Remove metadata
+ *
+ * @warning Calling this with no or empty arguments will clear all metadata on the entity.
+ *
+ * @param string $name The name of the metadata to clear
+ * @return mixed bool
+ * @deprecated 1.8 Use deleteMetadata()
+ */
+ public function clearMetaData($name = '') {
+ elgg_deprecated_notice('ElggEntity->clearMetadata() is deprecated by ->deleteMetadata()', 1.8);
+ return $this->deleteMetadata($name);
+ }
+
+ /**
+ * Disables metadata for this entity, optionally based on name.
+ *
+ * @param string $name An options name of metadata to disable.
+ * @return bool
+ * @since 1.8
+ */
+ public function disableMetadata($name = '') {
+ $options = array(
+ 'guid' => $this->guid,
+ 'limit' => 0
+ );
+ if ($name) {
+ $options['metadata_name'] = $name;
+ }
+
+ return elgg_disable_metadata($options);
+ }
+
+ /**
+ * Enables metadata for this entity, optionally based on name.
+ *
+ * @warning Before calling this, you must use {@link access_show_hidden_entities()}
+ *
+ * @param string $name An options name of metadata to enable.
+ * @return bool
+ * @since 1.8
+ */
+ public function enableMetadata($name = '') {
+ $options = array(
+ 'guid' => $this->guid,
+ 'limit' => 0
+ );
+ if ($name) {
+ $options['metadata_name'] = $name;
+ }
+
+ return elgg_enable_metadata($options);
+ }
+
+ /**
+ * Get a piece of volatile (non-persisted) data on this entity.
+ *
+ * @param string $name The name of the volatile data
+ *
+ * @return mixed The value or NULL if not found.
+ */
+ public function getVolatileData($name) {
+ if (!is_array($this->volatile)) {
+ $this->volatile = array();
+ }
+
+ if (array_key_exists($name, $this->volatile)) {
+ return $this->volatile[$name];
+ } else {
+ return NULL;
+ }
+ }
+
+ /**
+ * Set a piece of volatile (non-persisted) data on this entity
+ *
+ * @param string $name Name
+ * @param mixed $value Value
+ *
+ * @return void
+ */
+ public function setVolatileData($name, $value) {
+ if (!is_array($this->volatile)) {
+ $this->volatile = array();
+ }
+
+ $this->volatile[$name] = $value;
+ }
+
+ /**
+ * Remove all relationships to and from this entity.
+ *
+ * @return true
+ * @todo This should actually return if it worked.
+ * @see ElggEntity::addRelationship()
+ * @see ElggEntity::removeRelationship()
+ */
+ public function deleteRelationships() {
+ remove_entity_relationships($this->getGUID());
+ remove_entity_relationships($this->getGUID(), "", true);
+ return true;
+ }
+
+ /**
+ * Remove all relationships to and from this entity.
+ *
+ * @return bool
+ * @see ElggEntity::addRelationship()
+ * @see ElggEntity::removeRelationship()
+ * @deprecated 1.8 Use ->deleteRelationship()
+ */
+ public function clearRelationships() {
+ elgg_deprecated_notice('ElggEntity->clearRelationships() is deprecated by ->deleteRelationships()', 1.8);
+ return $this->deleteRelationships();
+ }
+
+ /**
+ * Add a relationship between this an another entity.
+ *
+ * @tip Read the relationship like "$guid is a $relationship of this entity."
+ *
+ * @param int $guid Entity to link to.
+ * @param string $relationship The type of relationship.
+ *
+ * @return bool
+ * @see ElggEntity::removeRelationship()
+ * @see ElggEntity::clearRelationships()
+ */
+ public function addRelationship($guid, $relationship) {
+ return add_entity_relationship($this->getGUID(), $relationship, $guid);
+ }
+
+ /**
+ * Remove a relationship
+ *
+ * @param int $guid GUID of the entity to make a relationship with
+ * @param str $relationship Name of relationship
+ *
+ * @return bool
+ * @see ElggEntity::addRelationship()
+ * @see ElggEntity::clearRelationships()
+ */
+ public function removeRelationship($guid, $relationship) {
+ return remove_entity_relationship($this->getGUID(), $relationship, $guid);
+ }
+
+ /**
+ * Adds a private setting to this entity.
+ *
+ * Private settings are similar to metadata but will not
+ * be searched and there are fewer helper functions for them.
+ *
+ * @param string $name Name of private setting
+ * @param mixed $value Value of private setting
+ *
+ * @return bool
+ */
+ function setPrivateSetting($name, $value) {
+ if ((int) $this->guid > 0) {
+ return set_private_setting($this->getGUID(), $name, $value);
+ } else {
+ $this->temp_private_settings[$name] = $value;
+ return true;
+ }
+ }
+
+ /**
+ * Returns a private setting value
+ *
+ * @param string $name Name of the private setting
+ *
+ * @return mixed
+ */
+ function getPrivateSetting($name) {
+ if ((int) ($this->guid) > 0) {
+ return get_private_setting($this->getGUID(), $name);
+ } else {
+ if (isset($this->temp_private_settings[$name])) {
+ return $this->temp_private_settings[$name];
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Removes private setting
+ *
+ * @param string $name Name of the private setting
+ *
+ * @return bool
+ */
+ function removePrivateSetting($name) {
+ return remove_private_setting($this->getGUID(), $name);
+ }
+
+ /**
+ * Deletes all annotations on this object (annotations.entity_guid = $this->guid).
+ * If you pass a name, only annotations matching that name will be deleted.
+ *
+ * @warning Calling this with no or empty arguments will clear all annotations on the entity.
+ *
+ * @param null|string $name The annotations name to remove.
+ * @return bool
+ * @since 1.8
+ */
+ public function deleteAnnotations($name = null) {
+ $options = array(
+ 'guid' => $this->guid,
+ 'limit' => 0
+ );
+ if ($name) {
+ $options['annotation_name'] = $name;
+ }
+
+ return elgg_delete_annotations($options);
+ }
+
+ /**
+ * Deletes all annotations owned by this object (annotations.owner_guid = $this->guid).
+ * If you pass a name, only annotations matching that name will be deleted.
+ *
+ * @param null|string $name The name of annotations to delete.
+ * @return bool
+ * @since 1.8
+ */
+ public function deleteOwnedAnnotations($name = null) {
+ // access is turned off for this because they might
+ // no longer have access to an entity they created annotations on.
+ $ia = elgg_set_ignore_access(true);
+ $options = array(
+ 'annotation_owner_guid' => $this->guid,
+ 'limit' => 0
+ );
+ if ($name) {
+ $options['annotation_name'] = $name;
+ }
+
+ $r = elgg_delete_annotations($options);
+ elgg_set_ignore_access($ia);
+ return $r;
+ }
+
+ /**
+ * Disables annotations for this entity, optionally based on name.
+ *
+ * @param string $name An options name of annotations to disable.
+ * @return bool
+ * @since 1.8
+ */
+ public function disableAnnotations($name = '') {
+ $options = array(
+ 'guid' => $this->guid,
+ 'limit' => 0
+ );
+ if ($name) {
+ $options['annotation_name'] = $name;
+ }
+
+ return elgg_disable_annotations($options);
+ }
+
+ /**
+ * Enables annotations for this entity, optionally based on name.
+ *
+ * @warning Before calling this, you must use {@link access_show_hidden_entities()}
+ *
+ * @param string $name An options name of annotations to enable.
+ * @return bool
+ * @since 1.8
+ */
+ public function enableAnnotations($name = '') {
+ $options = array(
+ 'guid' => $this->guid,
+ 'limit' => 0
+ );
+ if ($name) {
+ $options['annotation_name'] = $name;
+ }
+
+ return elgg_enable_annotations($options);
+ }
+
+ /**
+ * Helper function to return annotation calculation results
+ *
+ * @param string $name The annotation name.
+ * @param string $calculation A valid MySQL function to run its values through
+ * @return mixed
+ */
+ private function getAnnotationCalculation($name, $calculation) {
+ $options = array(
+ 'guid' => $this->getGUID(),
+ 'annotation_name' => $name,
+ 'annotation_calculation' => $calculation
+ );
+
+ return elgg_get_annotations($options);
+ }
+
+ /**
+ * Adds an annotation to an entity.
+ *
+ * @warning By default, annotations are private.
+ *
+ * @warning Annotating an unsaved entity more than once with the same name
+ * will only save the last annotation.
+ *
+ * @param string $name Annotation name
+ * @param mixed $value Annotation value
+ * @param int $access_id Access ID
+ * @param int $owner_id GUID of the annotation owner
+ * @param string $vartype The type of annotation value
+ *
+ * @return bool
+ */
+ function annotate($name, $value, $access_id = ACCESS_PRIVATE, $owner_id = 0, $vartype = "") {
+ if ((int) $this->guid > 0) {
+ return create_annotation($this->getGUID(), $name, $value, $vartype, $owner_id, $access_id);
+ } else {
+ $this->temp_annotations[$name] = $value;
+ }
+ return true;
+ }
+
+ /**
+ * Returns an array of annotations.
+ *
+ * @param string $name Annotation name
+ * @param int $limit Limit
+ * @param int $offset Offset
+ * @param string $order Order by time: asc or desc
+ *
+ * @return array
+ */
+ function getAnnotations($name, $limit = 50, $offset = 0, $order = "asc") {
+ if ((int) ($this->guid) > 0) {
+
+ $options = array(
+ 'guid' => $this->guid,
+ 'annotation_name' => $name,
+ 'limit' => $limit,
+ 'offset' => $offset,
+ );
+
+ if ($order != 'asc') {
+ $options['reverse_order_by'] = true;
+ }
+
+ return elgg_get_annotations($options);
+ } else if (isset($this->temp_annotations[$name])) {
+ return array($this->temp_annotations[$name]);
+ } else {
+ return array();
+ }
+ }
+
+ /**
+ * Remove an annotation or all annotations for this entity.
+ *
+ * @warning Calling this method with no or an empty argument will remove
+ * all annotations on the entity.
+ *
+ * @param string $name Annotation name
+ * @return bool
+ * @deprecated 1.8 Use ->deleteAnnotations()
+ */
+ function clearAnnotations($name = "") {
+ elgg_deprecated_notice('ElggEntity->clearAnnotations() is deprecated by ->deleteAnnotations()', 1.8);
+ return $this->deleteAnnotations($name);
+ }
+
+ /**
+ * Count annotations.
+ *
+ * @param string $name The type of annotation.
+ *
+ * @return int
+ */
+ function countAnnotations($name = "") {
+ return $this->getAnnotationCalculation($name, 'count');
+ }
+
+ /**
+ * Get the average of an integer type annotation.
+ *
+ * @param string $name Annotation name
+ *
+ * @return int
+ */
+ function getAnnotationsAvg($name) {
+ return $this->getAnnotationCalculation($name, 'avg');
+ }
+
+ /**
+ * Get the sum of integer type annotations of a given name.
+ *
+ * @param string $name Annotation name
+ *
+ * @return int
+ */
+ function getAnnotationsSum($name) {
+ return $this->getAnnotationCalculation($name, 'sum');
+ }
+
+ /**
+ * Get the minimum of integer type annotations of given name.
+ *
+ * @param string $name Annotation name
+ *
+ * @return int
+ */
+ function getAnnotationsMin($name) {
+ return $this->getAnnotationCalculation($name, 'min');
+ }
+
+ /**
+ * Get the maximum of integer type annotations of a given name.
+ *
+ * @param string $name Annotation name
+ *
+ * @return int
+ */
+ function getAnnotationsMax($name) {
+ return $this->getAnnotationCalculation($name, 'max');
+ }
+
+ /**
+ * Count the number of comments attached to this entity.
+ *
+ * @return int Number of comments
+ * @since 1.8.0
+ */
+ function countComments() {
+ $params = array('entity' => $this);
+ $num = elgg_trigger_plugin_hook('comments:count', $this->getType(), $params);
+
+ if (is_int($num)) {
+ return $num;
+ } else {
+ return $this->getAnnotationCalculation('generic_comment', 'count');
+ }
+ }
+
+ /**
+ * Gets an array of entities with a relationship to this entity.
+ *
+ * @param string $relationship Relationship type (eg "friends")
+ * @param bool $inverse Is this an inverse relationship?
+ * @param int $limit Number of elements to return
+ * @param int $offset Indexing offset
+ *
+ * @return array|false An array of entities or false on failure
+ */
+ function getEntitiesFromRelationship($relationship, $inverse = false, $limit = 50, $offset = 0) {
+ return elgg_get_entities_from_relationship(array(
+ 'relationship' => $relationship,
+ 'relationship_guid' => $this->getGUID(),
+ 'inverse_relationship' => $inverse,
+ 'limit' => $limit,
+ 'offset' => $offset
+ ));
+ }
+
+ /**
+ * Gets the number of of entities from a specific relationship type
+ *
+ * @param string $relationship Relationship type (eg "friends")
+ * @param bool $inverse_relationship Invert relationship
+ *
+ * @return int|false The number of entities or false on failure
+ */
+ function countEntitiesFromRelationship($relationship, $inverse_relationship = FALSE) {
+ return elgg_get_entities_from_relationship(array(
+ 'relationship' => $relationship,
+ 'relationship_guid' => $this->getGUID(),
+ 'inverse_relationship' => $inverse_relationship,
+ 'count' => TRUE
+ ));
+ }
+
+ /**
+ * Can a user edit this entity.
+ *
+ * @param int $user_guid The user GUID, optionally (default: logged in user)
+ *
+ * @return bool
+ */
+ function canEdit($user_guid = 0) {
+ return can_edit_entity($this->getGUID(), $user_guid);
+ }
+
+ /**
+ * Can a user edit metadata on this entity
+ *
+ * @param ElggMetadata $metadata The piece of metadata to specifically check
+ * @param int $user_guid The user GUID, optionally (default: logged in user)
+ *
+ * @return bool
+ */
+ function canEditMetadata($metadata = null, $user_guid = 0) {
+ return can_edit_entity_metadata($this->getGUID(), $user_guid, $metadata);
+ }
+
+ /**
+ * Can a user add an entity to this container
+ *
+ * @param int $user_guid The user.
+ * @param string $type The type of entity we're looking to write
+ * @param string $subtype The subtype of the entity we're looking to write
+ *
+ * @return bool
+ */
+ public function canWriteToContainer($user_guid = 0, $type = 'all', $subtype = 'all') {
+ return can_write_to_container($user_guid, $this->guid, $type, $subtype);
+ }
+
+ /**
+ * Can a user comment on an entity?
+ *
+ * @tip Can be overridden by registering for the permissions_check:comment,
+ * <entity type> plugin hook.
+ *
+ * @param int $user_guid User guid (default is logged in user)
+ *
+ * @return bool
+ */
+ public function canComment($user_guid = 0) {
+ if ($user_guid == 0) {
+ $user_guid = elgg_get_logged_in_user_guid();
+ }
+ $user = get_entity($user_guid);
+
+ // By default, we don't take a position of whether commenting is allowed
+ // because it is handled by the subclasses of ElggEntity
+ $params = array('entity' => $this, 'user' => $user);
+ return elgg_trigger_plugin_hook('permissions_check:comment', $this->type, $params, null);
+ }
+
+ /**
+ * Can a user annotate an entity?
+ *
+ * @tip Can be overridden by registering for the permissions_check:annotate,
+ * <entity type> plugin hook.
+ *
+ * @tip If you want logged out users to annotate an object, do not call
+ * canAnnotate(). It's easier than using the plugin hook.
+ *
+ * @param int $user_guid User guid (default is logged in user)
+ * @param string $annotation_name The name of the annotation (default is unspecified)
+ *
+ * @return bool
+ */
+ public function canAnnotate($user_guid = 0, $annotation_name = '') {
+ if ($user_guid == 0) {
+ $user_guid = elgg_get_logged_in_user_guid();
+ }
+ $user = get_entity($user_guid);
+
+ $return = true;
+ if (!$user) {
+ $return = false;
+ }
+
+ $params = array(
+ 'entity' => $this,
+ 'user' => $user,
+ 'annotation_name' => $annotation_name,
+ );
+ return elgg_trigger_plugin_hook('permissions_check:annotate', $this->type, $params, $return);
+ }
+
+ /**
+ * Returns the access_id.
+ *
+ * @return int The access ID
+ */
+ public function getAccessID() {
+ return $this->get('access_id');
+ }
+
+ /**
+ * Returns the guid.
+ *
+ * @return int|null GUID
+ */
+ public function getGUID() {
+ return $this->get('guid');
+ }
+
+ /**
+ * Returns the entity type
+ *
+ * @return string Entity type
+ */
+ public function getType() {
+ return $this->get('type');
+ }
+
+ /**
+ * Returns the entity subtype string
+ *
+ * @note This returns a string. If you want the id, use ElggEntity::subtype.
+ *
+ * @return string The entity subtype
+ */
+ public function getSubtype() {
+ // If this object hasn't been saved, then return the subtype string.
+ if (!((int) $this->guid > 0)) {
+ return $this->get('subtype');
+ }
+
+ return get_subtype_from_id($this->get('subtype'));
+ }
+
+ /**
+ * Get the guid of the entity's owner.
+ *
+ * @return int The owner GUID
+ */
+ public function getOwnerGUID() {
+ return $this->owner_guid;
+ }
+
+ /**
+ * Return the guid of the entity's owner.
+ *
+ * @return int The owner GUID
+ * @deprecated 1.8 Use getOwnerGUID()
+ */
+ public function getOwner() {
+ elgg_deprecated_notice("ElggEntity::getOwner deprecated for ElggEntity::getOwnerGUID", 1.8);
+ return $this->getOwnerGUID();
+ }
+
+ /**
+ * Gets the ElggEntity that owns this entity.
+ *
+ * @return ElggEntity The owning entity
+ */
+ public function getOwnerEntity() {
+ return get_entity($this->owner_guid);
+ }
+
+ /**
+ * Set the container for this object.
+ *
+ * @param int $container_guid The ID of the container.
+ *
+ * @return bool
+ */
+ public function setContainerGUID($container_guid) {
+ $container_guid = (int)$container_guid;
+
+ return $this->set('container_guid', $container_guid);
+ }
+
+ /**
+ * Set the container for this object.
+ *
+ * @param int $container_guid The ID of the container.
+ *
+ * @return bool
+ * @deprecated 1.8 use setContainerGUID()
+ */
+ public function setContainer($container_guid) {
+ elgg_deprecated_notice("ElggObject::setContainer deprecated for ElggEntity::setContainerGUID", 1.8);
+ $container_guid = (int)$container_guid;
+
+ return $this->set('container_guid', $container_guid);
+ }
+
+ /**
+ * Gets the container GUID for this entity.
+ *
+ * @return int
+ */
+ public function getContainerGUID() {
+ return $this->get('container_guid');
+ }
+
+ /**
+ * Gets the container GUID for this entity.
+ *
+ * @return int
+ * @deprecated 1.8 Use getContainerGUID()
+ */
+ public function getContainer() {
+ elgg_deprecated_notice("ElggObject::getContainer deprecated for ElggEntity::getContainerGUID", 1.8);
+ return $this->get('container_guid');
+ }
+
+ /**
+ * Get the container entity for this object.
+ *
+ * @return ElggEntity
+ * @since 1.8.0
+ */
+ public function getContainerEntity() {
+ return get_entity($this->getContainerGUID());
+ }
+
+ /**
+ * Returns the UNIX epoch time that this entity was last updated
+ *
+ * @return int UNIX epoch time
+ */
+ public function getTimeUpdated() {
+ return $this->get('time_updated');
+ }
+
+ /**
+ * Returns the URL for this entity
+ *
+ * @return string The URL
+ * @see register_entity_url_handler()
+ * @see ElggEntity::setURL()
+ */
+ public function getURL() {
+ if (!empty($this->url_override)) {
+ return $this->url_override;
+ }
+ return get_entity_url($this->getGUID());
+ }
+
+ /**
+ * Overrides the URL returned by getURL()
+ *
+ * @warning This override exists only for the life of the object.
+ *
+ * @param string $url The new item URL
+ *
+ * @return string The URL
+ */
+ public function setURL($url) {
+ $this->url_override = $url;
+ return $url;
+ }
+
+ /**
+ * Get the URL for this entity's icon
+ *
+ * Plugins can register for the 'entity:icon:url', <type> plugin hook
+ * to customize the icon for an entity.
+ *
+ * @param string $size Size of the icon: tiny, small, medium, large
+ *
+ * @return string The URL
+ * @since 1.8.0
+ */
+ public function getIconURL($size = 'medium') {
+ $size = elgg_strtolower($size);
+
+ if (isset($this->icon_override[$size])) {
+ elgg_deprecated_notice("icon_override on an individual entity is deprecated", 1.8);
+ return $this->icon_override[$size];
+ }
+
+ $type = $this->getType();
+ $params = array(
+ 'entity' => $this,
+ 'size' => $size,
+ );
+
+ $url = elgg_trigger_plugin_hook('entity:icon:url', $type, $params, null);
+ if ($url == null) {
+ $url = "_graphics/icons/default/$size.png";
+ }
+
+ return elgg_normalize_url($url);
+ }
+
+ /**
+ * Returns a URL for the entity's icon.
+ *
+ * @param string $size Either 'large', 'medium', 'small' or 'tiny'
+ *
+ * @return string The url or false if no url could be worked out.
+ * @deprecated Use getIconURL()
+ */
+ public function getIcon($size = 'medium') {
+ elgg_deprecated_notice("getIcon() deprecated by getIconURL()", 1.8);
+ return $this->getIconURL($size);
+ }
+
+ /**
+ * Set an icon override for an icon and size.
+ *
+ * @warning This override exists only for the life of the object.
+ *
+ * @param string $url The url of the icon.
+ * @param string $size The size its for.
+ *
+ * @return bool
+ * @deprecated 1.8 See getIconURL() for the plugin hook to use
+ */
+ public function setIcon($url, $size = 'medium') {
+ elgg_deprecated_notice("icon_override on an individual entity is deprecated", 1.8);
+
+ $url = sanitise_string($url);
+ $size = sanitise_string($size);
+
+ if (!$this->icon_override) {
+ $this->icon_override = array();
+ }
+ $this->icon_override[$size] = $url;
+
+ return true;
+ }
+
+ /**
+ * Tests to see whether the object has been fully loaded.
+ *
+ * @return bool
+ */
+ public function isFullyLoaded() {
+ return ! ($this->attributes['tables_loaded'] < $this->attributes['tables_split']);
+ }
+
+ /**
+ * Save an entity.
+ *
+ * @return bool|int
+ * @throws IOException
+ */
+ public function save() {
+ $guid = $this->getGUID();
+ if ($guid > 0) {
+
+ // See #5600. This ensures the lower level can_edit_entity() check will use a
+ // fresh entity from the DB so it sees the persisted owner_guid
+ _elgg_disable_caching_for_entity($guid);
+
+ $ret = update_entity(
+ $guid,
+ $this->get('owner_guid'),
+ $this->get('access_id'),
+ $this->get('container_guid'),
+ $this->get('time_created')
+ );
+
+ _elgg_enable_caching_for_entity($guid);
+ _elgg_cache_entity($this);
+
+ return $ret;
+ } else {
+ // Create a new entity (nb: using attribute array directly
+ // 'cos set function does something special!)
+ $this->attributes['guid'] = create_entity($this->attributes['type'],
+ $this->attributes['subtype'], $this->attributes['owner_guid'],
+ $this->attributes['access_id'], $this->attributes['site_guid'],
+ $this->attributes['container_guid']);
+
+ if (!$this->attributes['guid']) {
+ throw new IOException(elgg_echo('IOException:BaseEntitySaveFailed'));
+ }
+
+ // Save any unsaved metadata
+ // @todo How to capture extra information (access id etc)
+ if (sizeof($this->temp_metadata) > 0) {
+ foreach ($this->temp_metadata as $name => $value) {
+ $this->$name = $value;
+ unset($this->temp_metadata[$name]);
+ }
+ }
+
+ // Save any unsaved annotations.
+ if (sizeof($this->temp_annotations) > 0) {
+ foreach ($this->temp_annotations as $name => $value) {
+ $this->annotate($name, $value);
+ unset($this->temp_annotations[$name]);
+ }
+ }
+
+ // Save any unsaved private settings.
+ if (sizeof($this->temp_private_settings) > 0) {
+ foreach ($this->temp_private_settings as $name => $value) {
+ $this->setPrivateSetting($name, $value);
+ unset($this->temp_private_settings[$name]);
+ }
+ }
+
+ // set the subtype to id now rather than a string
+ $this->attributes['subtype'] = get_subtype_id($this->attributes['type'],
+ $this->attributes['subtype']);
+
+ _elgg_cache_entity($this);
+
+ return $this->attributes['guid'];
+ }
+ }
+
+ /**
+ * Loads attributes from the entities table into the object.
+ *
+ * @param mixed $guid GUID of entity or stdClass object from entities table
+ *
+ * @return bool
+ */
+ protected function load($guid) {
+ if ($guid instanceof stdClass) {
+ $row = $guid;
+ } else {
+ $row = get_entity_as_row($guid);
+ }
+
+ if ($row) {
+ // Create the array if necessary - all subclasses should test before creating
+ if (!is_array($this->attributes)) {
+ $this->attributes = array();
+ }
+
+ // Now put these into the attributes array as core values
+ $objarray = (array) $row;
+ foreach ($objarray as $key => $value) {
+ $this->attributes[$key] = $value;
+ }
+
+ // Increment the portion counter
+ if (!$this->isFullyLoaded()) {
+ $this->attributes['tables_loaded']++;
+ }
+
+ // guid needs to be an int https://github.com/elgg/elgg/issues/4111
+ $this->attributes['guid'] = (int)$this->attributes['guid'];
+
+ // Cache object handle
+ if ($this->attributes['guid']) {
+ _elgg_cache_entity($this);
+ }
+
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Disable this entity.
+ *
+ * Disabled entities are not returned by getter functions.
+ * To enable an entity, use {@link enable_entity()}.
+ *
+ * Recursively disabling an entity will disable all entities
+ * owned or contained by the parent entity.
+ *
+ * @internal Disabling an entity sets the 'enabled' column to 'no'.
+ *
+ * @param string $reason Optional reason
+ * @param bool $recursive Recursively disable all contained entities?
+ *
+ * @return bool
+ * @see enable_entity()
+ * @see ElggEntity::enable()
+ */
+ public function disable($reason = "", $recursive = true) {
+ if ($r = disable_entity($this->get('guid'), $reason, $recursive)) {
+ $this->attributes['enabled'] = 'no';
+ }
+
+ return $r;
+ }
+
+ /**
+ * Enable an entity
+ *
+ * @warning Disabled entities can't be loaded unless
+ * {@link access_show_hidden_entities(true)} has been called.
+ *
+ * @see enable_entity()
+ * @see access_show_hiden_entities()
+ * @return bool
+ */
+ public function enable() {
+ if ($r = enable_entity($this->get('guid'))) {
+ $this->attributes['enabled'] = 'yes';
+ }
+
+ return $r;
+ }
+
+ /**
+ * Is this entity enabled?
+ *
+ * @return boolean
+ */
+ public function isEnabled() {
+ if ($this->enabled == 'yes') {
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Delete this entity.
+ *
+ * @param bool $recursive Whether to delete all the entities contained by this entity
+ *
+ * @return bool
+ */
+ public function delete($recursive = true) {
+ return delete_entity($this->get('guid'), $recursive);
+ }
+
+ /*
+ * LOCATABLE INTERFACE
+ */
+
+ /**
+ * Gets the 'location' metadata for the entity
+ *
+ * @return string The location
+ */
+ public function getLocation() {
+ return $this->location;
+ }
+
+ /**
+ * Sets the 'location' metadata for the entity
+ *
+ * @todo Unimplemented
+ *
+ * @param string $location String representation of the location
+ *
+ * @return bool
+ */
+ public function setLocation($location) {
+ $this->location = $location;
+ return true;
+ }
+
+ /**
+ * Set latitude and longitude metadata tags for a given entity.
+ *
+ * @param float $lat Latitude
+ * @param float $long Longitude
+ *
+ * @return bool
+ * @todo Unimplemented
+ */
+ public function setLatLong($lat, $long) {
+ $this->set('geo:lat', $lat);
+ $this->set('geo:long', $long);
+
+ return true;
+ }
+
+ /**
+ * Return the entity's latitude.
+ *
+ * @return float
+ * @todo Unimplemented
+ */
+ public function getLatitude() {
+ return (float)$this->get('geo:lat');
+ }
+
+ /**
+ * Return the entity's longitude
+ *
+ * @return float
+ */
+ public function getLongitude() {
+ return (float)$this->get('geo:long');
+ }
+
+ /*
+ * NOTABLE INTERFACE
+ */
+
+ /**
+ * Set the time and duration of an object
+ *
+ * @param int $hour If ommitted, now is assumed.
+ * @param int $minute If ommitted, now is assumed.
+ * @param int $second If ommitted, now is assumed.
+ * @param int $day If ommitted, now is assumed.
+ * @param int $month If ommitted, now is assumed.
+ * @param int $year If ommitted, now is assumed.
+ * @param int $duration Duration of event, remainder of the day is assumed.
+ *
+ * @return true
+ * @todo Unimplemented
+ */
+ public function setCalendarTimeAndDuration($hour = NULL, $minute = NULL, $second = NULL,
+ $day = NULL, $month = NULL, $year = NULL, $duration = NULL) {
+
+ $start = mktime($hour, $minute, $second, $month, $day, $year);
+ $end = $start + abs($duration);
+ if (!$duration) {
+ $end = get_day_end($day, $month, $year);
+ }
+
+ $this->calendar_start = $start;
+ $this->calendar_end = $end;
+
+ return true;
+ }
+
+ /**
+ * Returns the start timestamp.
+ *
+ * @return int
+ * @todo Unimplemented
+ */
+ public function getCalendarStartTime() {
+ return (int)$this->calendar_start;
+ }
+
+ /**
+ * Returns the end timestamp.
+ *
+ * @todo Unimplemented
+ *
+ * @return int
+ */
+ public function getCalendarEndTime() {
+ return (int)$this->calendar_end;
+ }
+
+ /*
+ * EXPORTABLE INTERFACE
+ */
+
+ /**
+ * Returns an array of fields which can be exported.
+ *
+ * @return array
+ */
+ public function getExportableValues() {
+ return array(
+ 'guid',
+ 'type',
+ 'subtype',
+ 'time_created',
+ 'time_updated',
+ 'container_guid',
+ 'owner_guid',
+ 'site_guid'
+ );
+ }
+
+ /**
+ * Export this class into an array of ODD Elements containing all necessary fields.
+ * Override if you wish to return more information than can be found in
+ * $this->attributes (shouldn't happen)
+ *
+ * @return array
+ */
+ public function export() {
+ $tmp = array();
+
+ // Generate uuid
+ $uuid = guid_to_uuid($this->getGUID());
+
+ // Create entity
+ $odd = new ODDEntity(
+ $uuid,
+ $this->attributes['type'],
+ get_subtype_from_id($this->attributes['subtype'])
+ );
+
+ $tmp[] = $odd;
+
+ $exportable_values = $this->getExportableValues();
+
+ // Now add its attributes
+ foreach ($this->attributes as $k => $v) {
+ $meta = NULL;
+
+ if (in_array($k, $exportable_values)) {
+ switch ($k) {
+ case 'guid': // Dont use guid in OpenDD
+ case 'type': // Type and subtype already taken care of
+ case 'subtype':
+ break;
+
+ case 'time_created': // Created = published
+ $odd->setAttribute('published', date("r", $v));
+ break;
+
+ case 'site_guid': // Container
+ $k = 'site_uuid';
+ $v = guid_to_uuid($v);
+ $meta = new ODDMetaData($uuid . "attr/$k/", $uuid, $k, $v);
+ break;
+
+ case 'container_guid': // Container
+ $k = 'container_uuid';
+ $v = guid_to_uuid($v);
+ $meta = new ODDMetaData($uuid . "attr/$k/", $uuid, $k, $v);
+ break;
+
+ case 'owner_guid': // Convert owner guid to uuid, this will be stored in metadata
+ $k = 'owner_uuid';
+ $v = guid_to_uuid($v);
+ $meta = new ODDMetaData($uuid . "attr/$k/", $uuid, $k, $v);
+ break;
+
+ default:
+ $meta = new ODDMetaData($uuid . "attr/$k/", $uuid, $k, $v);
+ }
+
+ // set the time of any metadata created
+ if ($meta) {
+ $meta->setAttribute('published', date("r", $this->time_created));
+ $tmp[] = $meta;
+ }
+ }
+ }
+
+ // Now we do something a bit special.
+ /*
+ * This provides a rendered view of the entity to foreign sites.
+ */
+
+ elgg_set_viewtype('default');
+ $view = elgg_view_entity($this, array('full_view' => true));
+ elgg_set_viewtype();
+
+ $tmp[] = new ODDMetaData($uuid . "volatile/renderedentity/", $uuid,
+ 'renderedentity', $view, 'volatile');
+
+ return $tmp;
+ }
+
+ /*
+ * IMPORTABLE INTERFACE
+ */
+
+ /**
+ * Import data from an parsed ODD xml data array.
+ *
+ * @param ODD $data XML data
+ *
+ * @return true
+ *
+ * @throws InvalidParameterException
+ */
+ public function import(ODD $data) {
+ if (!($data instanceof ODDEntity)) {
+ throw new InvalidParameterException(elgg_echo('InvalidParameterException:UnexpectedODDClass'));
+ }
+
+ // Set type and subtype
+ $this->attributes['type'] = $data->getAttribute('class');
+ $this->attributes['subtype'] = $data->getAttribute('subclass');
+
+ // Set owner
+ $this->attributes['owner_guid'] = elgg_get_logged_in_user_guid(); // Import as belonging to importer.
+
+ // Set time
+ $this->attributes['time_created'] = strtotime($data->getAttribute('published'));
+ $this->attributes['time_updated'] = time();
+
+ return true;
+ }
+
+ /*
+ * SYSTEM LOG INTERFACE
+ */
+
+ /**
+ * Return an identification for the object for storage in the system log.
+ * This id must be an integer.
+ *
+ * @return int
+ */
+ public function getSystemLogID() {
+ return $this->getGUID();
+ }
+
+ /**
+ * For a given ID, return the object associated with it.
+ * This is used by the river functionality primarily.
+ *
+ * This is useful for checking access permissions etc on objects.
+ *
+ * @param int $id GUID.
+ *
+ * @todo How is this any different or more useful than get_entity($guid)
+ * or new ElggEntity($guid)?
+ *
+ * @return int GUID
+ */
+ public function getObjectFromID($id) {
+ return get_entity($id);
+ }
+
+ /**
+ * Returns tags for this entity.
+ *
+ * @warning Tags must be registered by {@link elgg_register_tag_metadata_name()}.
+ *
+ * @param array $tag_names Optionally restrict by tag metadata names.
+ *
+ * @return array
+ */
+ public function getTags($tag_names = NULL) {
+ if ($tag_names && !is_array($tag_names)) {
+ $tag_names = array($tag_names);
+ }
+
+ $valid_tags = elgg_get_registered_tag_metadata_names();
+ $entity_tags = array();
+
+ foreach ($valid_tags as $tag_name) {
+ if (is_array($tag_names) && !in_array($tag_name, $tag_names)) {
+ continue;
+ }
+
+ if ($tags = $this->$tag_name) {
+ // if a single tag, metadata returns a string.
+ // if multiple tags, metadata returns an array.
+ if (is_array($tags)) {
+ $entity_tags = array_merge($entity_tags, $tags);
+ } else {
+ $entity_tags[] = $tags;
+ }
+ }
+ }
+
+ return $entity_tags;
+ }
+}
diff --git a/engine/classes/ElggExtender.php b/engine/classes/ElggExtender.php
new file mode 100644
index 000000000..25aba354f
--- /dev/null
+++ b/engine/classes/ElggExtender.php
@@ -0,0 +1,214 @@
+<?php
+/**
+ * The base class for ElggEntity extenders.
+ *
+ * Extenders allow you to attach extended information to an
+ * ElggEntity. Core supports two: ElggAnnotation and ElggMetadata.
+ *
+ * Saving the extender data to database is handled by the child class.
+ *
+ * @tip Plugin authors would probably want to extend either ElggAnnotation
+ * or ElggMetadata instead of this class.
+ *
+ * @package Elgg.Core
+ * @subpackage DataModel.Extender
+ * @link http://docs.elgg.org/DataModel/Extenders
+ * @see ElggAnnotation
+ * @see ElggMetadata
+ *
+ * @property string $type annotation or metadata (read-only after save)
+ * @property int $id The unique identifier (read-only)
+ * @property int $entity_guid The GUID of the entity that this extender describes
+ * @property int $access_id Specifies the visibility level of this extender
+ * @property string $name The name of this extender
+ * @property mixed $value The value of the extender (int or string)
+ * @property int $time_created A UNIX timestamp of when the extender was created (read-only, set on first save)
+ */
+abstract class ElggExtender extends ElggData {
+
+ /**
+ * (non-PHPdoc)
+ *
+ * @see ElggData::initializeAttributes()
+ *
+ * @return void
+ */
+ protected function initializeAttributes() {
+ parent::initializeAttributes();
+
+ $this->attributes['type'] = NULL;
+ }
+
+ /**
+ * Returns an attribute
+ *
+ * @param string $name Name
+ *
+ * @return mixed
+ */
+ protected function get($name) {
+ if (array_key_exists($name, $this->attributes)) {
+ // Sanitise value if necessary
+ if ($name == 'value') {
+ switch ($this->attributes['value_type']) {
+ case 'integer' :
+ return (int)$this->attributes['value'];
+ break;
+
+ //case 'tag' :
+ //case 'file' :
+ case 'text' :
+ return ($this->attributes['value']);
+ break;
+
+ default :
+ $msg = elgg_echo('InstallationException:TypeNotSupported', array(
+ $this->attributes['value_type']));
+
+ throw new InstallationException($msg);
+ break;
+ }
+ }
+
+ return $this->attributes[$name];
+ }
+ return null;
+ }
+
+ /**
+ * Set an attribute
+ *
+ * @param string $name Name
+ * @param mixed $value Value
+ * @param string $value_type Value type
+ *
+ * @return boolean
+ */
+ protected function set($name, $value, $value_type = "") {
+ $this->attributes[$name] = $value;
+ if ($name == 'value') {
+ $this->attributes['value_type'] = detect_extender_valuetype($value, $value_type);
+ }
+
+ return true;
+ }
+
+ /**
+ * Get the GUID of the extender's owner entity.
+ *
+ * @return int The owner GUID
+ */
+ public function getOwnerGUID() {
+ return $this->owner_guid;
+ }
+
+ /**
+ * Return the guid of the entity's owner.
+ *
+ * @return int The owner GUID
+ * @deprecated 1.8 Use getOwnerGUID
+ */
+ public function getOwner() {
+ elgg_deprecated_notice("ElggExtender::getOwner deprecated for ElggExtender::getOwnerGUID", 1.8);
+ return $this->getOwnerGUID();
+ }
+
+ /**
+ * Get the entity that owns this extender
+ *
+ * @return ElggEntity
+ */
+ public function getOwnerEntity() {
+ return get_entity($this->owner_guid);
+ }
+
+ /**
+ * Get the entity this describes.
+ *
+ * @return ElggEntity The entity
+ */
+ public function getEntity() {
+ return get_entity($this->entity_guid);
+ }
+
+ /**
+ * Returns if a user can edit this extended data.
+ *
+ * @param int $user_guid The GUID of the user (defaults to currently logged in user)
+ *
+ * @return bool
+ */
+ public function canEdit($user_guid = 0) {
+ return can_edit_extender($this->id, $this->type, $user_guid);
+ }
+
+ /*
+ * EXPORTABLE INTERFACE
+ */
+
+ /**
+ * Return an array of fields which can be exported.
+ *
+ * @return array
+ */
+ public function getExportableValues() {
+ return array(
+ 'id',
+ 'entity_guid',
+ 'name',
+ 'value',
+ 'value_type',
+ 'owner_guid',
+ 'type',
+ );
+ }
+
+ /**
+ * Export this object
+ *
+ * @return array
+ */
+ public function export() {
+ $uuid = get_uuid_from_object($this);
+
+ $meta = new ODDMetaData($uuid, guid_to_uuid($this->entity_guid), $this->attributes['name'],
+ $this->attributes['value'], $this->attributes['type'], guid_to_uuid($this->owner_guid));
+ $meta->setAttribute('published', date("r", $this->time_created));
+
+ return $meta;
+ }
+
+ /*
+ * SYSTEM LOG INTERFACE
+ */
+
+ /**
+ * Return an identification for the object for storage in the system log.
+ * This id must be an integer.
+ *
+ * @return int
+ */
+ public function getSystemLogID() {
+ return $this->id;
+ }
+
+ /**
+ * Return a type of extension.
+ *
+ * @return string
+ */
+ public function getType() {
+ return $this->type;
+ }
+
+ /**
+ * Return a subtype. For metadata & annotations this is the 'name' and
+ * for relationship this is the relationship type.
+ *
+ * @return string
+ */
+ public function getSubtype() {
+ return $this->name;
+ }
+
+}
diff --git a/engine/classes/ElggFile.php b/engine/classes/ElggFile.php
new file mode 100644
index 000000000..23080834b
--- /dev/null
+++ b/engine/classes/ElggFile.php
@@ -0,0 +1,440 @@
+<?php
+
+/**
+ * This class represents a physical file.
+ *
+ * Create a new ElggFile object and specify a filename, and optionally a
+ * FileStore (if one isn't specified then the default is assumed.)
+ *
+ * Open the file using the appropriate mode, and you will be able to
+ * read and write to the file.
+ *
+ * Optionally, you can also call the file's save() method, this will
+ * turn the file into an entity in the system and permit you to do
+ * things like attach tags to the file etc. This is not done automatically
+ * since there are many occasions where you may want access to file data
+ * on datastores using the ElggFile interface but do not want to create
+ * an Entity reference to it in the system (temporary files for example).
+ *
+ * @class ElggFile
+ * @package Elgg.Core
+ * @subpackage DataModel.File
+ */
+class ElggFile extends ElggObject {
+ /** Filestore */
+ private $filestore;
+
+ /** File handle used to identify this file in a filestore. Created by open. */
+ private $handle;
+
+ /**
+ * Set subtype to 'file'.
+ *
+ * @return void
+ */
+ protected function initializeAttributes() {
+ parent::initializeAttributes();
+
+ $this->attributes['subtype'] = "file";
+ }
+
+ /**
+ * Loads an ElggFile entity.
+ *
+ * @param int $guid GUID of the ElggFile object
+ */
+ public function __construct($guid = null) {
+ parent::__construct($guid);
+
+ // Set default filestore
+ $this->filestore = $this->getFilestore();
+ }
+
+ /**
+ * Set the filename of this file.
+ *
+ * @param string $name The filename.
+ *
+ * @return void
+ */
+ public function setFilename($name) {
+ $this->filename = $name;
+ }
+
+ /**
+ * Return the filename.
+ *
+ * @return string
+ */
+ public function getFilename() {
+ return $this->filename;
+ }
+
+ /**
+ * Return the filename of this file as it is/will be stored on the
+ * filestore, which may be different to the filename.
+ *
+ * @return string
+ */
+ public function getFilenameOnFilestore() {
+ return $this->filestore->getFilenameOnFilestore($this);
+ }
+
+ /**
+ * Return the size of the filestore associated with this file
+ *
+ * @param string $prefix Storage prefix
+ * @param int $container_guid The container GUID of the checked filestore
+ *
+ * @return int
+ */
+ public function getFilestoreSize($prefix = '', $container_guid = 0) {
+ if (!$container_guid) {
+ $container_guid = $this->container_guid;
+ }
+ $fs = $this->getFilestore();
+ // @todo add getSize() to ElggFilestore
+ return $fs->getSize($prefix, $container_guid);
+ }
+
+ /**
+ * Get the mime type of the file.
+ *
+ * @return string
+ */
+ public function getMimeType() {
+ if ($this->mimetype) {
+ return $this->mimetype;
+ }
+
+ // @todo Guess mimetype if not here
+ }
+
+ /**
+ * Set the mime type of the file.
+ *
+ * @param string $mimetype The mimetype
+ *
+ * @return bool
+ */
+ public function setMimeType($mimetype) {
+ return $this->mimetype = $mimetype;
+ }
+
+ /**
+ * Detects mime types based on filename or actual file.
+ *
+ * @param mixed $file The full path of the file to check. For uploaded files, use tmp_name.
+ * @param mixed $default A default. Useful to pass what the browser thinks it is.
+ * @since 1.7.12
+ *
+ * @note If $file is provided, this may be called statically
+ *
+ * @return mixed Detected type on success, false on failure.
+ */
+ public function detectMimeType($file = null, $default = null) {
+ if (!$file) {
+ if (isset($this) && $this->filename) {
+ $file = $this->filename;
+ } else {
+ return false;
+ }
+ }
+
+ $mime = false;
+
+ // for PHP5 folks.
+ if (function_exists('finfo_file') && defined('FILEINFO_MIME_TYPE')) {
+ $resource = finfo_open(FILEINFO_MIME_TYPE);
+ if ($resource) {
+ $mime = finfo_file($resource, $file);
+ }
+ }
+
+ // for everyone else.
+ if (!$mime && function_exists('mime_content_type')) {
+ $mime = mime_content_type($file);
+ }
+
+ // default
+ if (!$mime) {
+ return $default;
+ }
+
+ return $mime;
+ }
+
+ /**
+ * Set the optional file description.
+ *
+ * @param string $description The description.
+ *
+ * @return bool
+ */
+ public function setDescription($description) {
+ $this->description = $description;
+ }
+
+ /**
+ * Open the file with the given mode
+ *
+ * @param string $mode Either read/write/append
+ *
+ * @return resource File handler
+ *
+ * @throws IOException|InvalidParameterException
+ */
+ public function open($mode) {
+ if (!$this->getFilename()) {
+ throw new IOException(elgg_echo('IOException:MissingFileName'));
+ }
+
+ // See if file has already been saved
+ // seek on datastore, parameters and name?
+
+ // Sanity check
+ if (
+ ($mode != "read") &&
+ ($mode != "write") &&
+ ($mode != "append")
+ ) {
+ $msg = elgg_echo('InvalidParameterException:UnrecognisedFileMode', array($mode));
+ throw new InvalidParameterException($msg);
+ }
+
+ // Get the filestore
+ $fs = $this->getFilestore();
+
+ // Ensure that we save the file details to object store
+ //$this->save();
+
+ // Open the file handle
+ $this->handle = $fs->open($this, $mode);
+
+ return $this->handle;
+ }
+
+ /**
+ * Write data.
+ *
+ * @param string $data The data
+ *
+ * @return bool
+ */
+ public function write($data) {
+ $fs = $this->getFilestore();
+
+ return $fs->write($this->handle, $data);
+ }
+
+ /**
+ * Read data.
+ *
+ * @param int $length Amount to read.
+ * @param int $offset The offset to start from.
+ *
+ * @return mixed Data or false
+ */
+ public function read($length, $offset = 0) {
+ $fs = $this->getFilestore();
+
+ return $fs->read($this->handle, $length, $offset);
+ }
+
+ /**
+ * Gets the full contents of this file.
+ *
+ * @return mixed The file contents.
+ */
+ public function grabFile() {
+ $fs = $this->getFilestore();
+ return $fs->grabFile($this);
+ }
+
+ /**
+ * Close the file and commit changes
+ *
+ * @return bool
+ */
+ public function close() {
+ $fs = $this->getFilestore();
+
+ if ($fs->close($this->handle)) {
+ $this->handle = NULL;
+
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Delete this file.
+ *
+ * @return bool
+ */
+ public function delete() {
+ $fs = $this->getFilestore();
+
+ $result = $fs->delete($this);
+
+ if ($this->getGUID() && $result) {
+ $result = parent::delete();
+ }
+
+ return $result;
+ }
+
+ /**
+ * Seek a position in the file.
+ *
+ * @param int $position Position in bytes
+ *
+ * @return bool
+ */
+ public function seek($position) {
+ $fs = $this->getFilestore();
+
+ // @todo add seek() to ElggFilestore
+ return $fs->seek($this->handle, $position);
+ }
+
+ /**
+ * Return the current position of the file.
+ *
+ * @return int The file position
+ */
+ public function tell() {
+ $fs = $this->getFilestore();
+
+ return $fs->tell($this->handle);
+ }
+
+ /**
+ * Return the size of the file in bytes.
+ *
+ * @return int
+ */
+ public function size() {
+ return $this->filestore->getFileSize($this);
+ }
+
+ /**
+ * Return a boolean value whether the file handle is at the end of the file
+ *
+ * @return bool
+ */
+ public function eof() {
+ $fs = $this->getFilestore();
+
+ return $fs->eof($this->handle);
+ }
+
+ /**
+ * Returns if the file exists
+ *
+ * @return bool
+ */
+ public function exists() {
+ $fs = $this->getFilestore();
+
+ return $fs->exists($this);
+ }
+
+ /**
+ * Set a filestore.
+ *
+ * @param ElggFilestore $filestore The file store.
+ *
+ * @return void
+ */
+ public function setFilestore(ElggFilestore $filestore) {
+ $this->filestore = $filestore;
+ }
+
+ /**
+ * Return a filestore suitable for saving this file.
+ * This filestore is either a pre-registered filestore,
+ * a filestore as recorded in metadata or the system default.
+ *
+ * @return ElggFilestore
+ *
+ * @throws ClassNotFoundException
+ */
+ protected function getFilestore() {
+ // Short circuit if already set.
+ if ($this->filestore) {
+ return $this->filestore;
+ }
+
+ // ask for entity specific filestore
+ // saved as filestore::className in metadata.
+ // need to get all filestore::* metadata because the rest are "parameters" that
+ // get passed to filestore::setParameters()
+ if ($this->guid) {
+ $options = array(
+ 'guid' => $this->guid,
+ 'where' => array("n.string LIKE 'filestore::%'"),
+ );
+
+ $mds = elgg_get_metadata($options);
+
+ $parameters = array();
+ foreach ($mds as $md) {
+ list($foo, $name) = explode("::", $md->name);
+ if ($name == 'filestore') {
+ $filestore = $md->value;
+ }
+ $parameters[$name] = $md->value;
+ }
+ }
+
+ // need to check if filestore is set because this entity is loaded in save()
+ // before the filestore metadata is saved.
+ if (isset($filestore)) {
+ if (!class_exists($filestore)) {
+ $msg = elgg_echo('ClassNotFoundException:NotFoundNotSavedWithFile',
+ array($filestore, $this->guid));
+ throw new ClassNotFoundException($msg);
+ }
+
+ $this->filestore = new $filestore();
+ $this->filestore->setParameters($parameters);
+ // @todo explain why $parameters will always be set here (PhpStorm complains)
+ }
+
+ // this means the entity hasn't been saved so fallback to default
+ if (!$this->filestore) {
+ $this->filestore = get_default_filestore();
+ }
+
+ return $this->filestore;
+ }
+
+ /**
+ * Save the file
+ *
+ * Write the file's data to the filestore and save
+ * the corresponding entity.
+ *
+ * @see ElggObject::save()
+ *
+ * @return bool
+ */
+ public function save() {
+ if (!parent::save()) {
+ return false;
+ }
+
+ // Save datastore metadata
+ $params = $this->filestore->getParameters();
+ foreach ($params as $k => $v) {
+ $this->setMetaData("filestore::$k", $v);
+ }
+
+ // Now make a note of the filestore class
+ $this->setMetaData("filestore::filestore", get_class($this->filestore));
+
+ return true;
+ }
+}
diff --git a/engine/classes/ElggFileCache.php b/engine/classes/ElggFileCache.php
new file mode 100644
index 000000000..94143f777
--- /dev/null
+++ b/engine/classes/ElggFileCache.php
@@ -0,0 +1,230 @@
+<?php
+/**
+ * ElggFileCache
+ * Store cached data in a file store.
+ *
+ * @package Elgg.Core
+ * @subpackage Caches
+ */
+class ElggFileCache extends ElggCache {
+ /**
+ * Set the Elgg cache.
+ *
+ * @param string $cache_path The cache path.
+ * @param int $max_age Maximum age in seconds, 0 if no limit.
+ * @param int $max_size Maximum size of cache in seconds, 0 if no limit.
+ *
+ * @throws ConfigurationException
+ */
+ function __construct($cache_path, $max_age = 0, $max_size = 0) {
+ $this->setVariable("cache_path", $cache_path);
+ $this->setVariable("max_age", $max_age);
+ $this->setVariable("max_size", $max_size);
+
+ if ($cache_path == "") {
+ throw new ConfigurationException(elgg_echo('ConfigurationException:NoCachePath'));
+ }
+ }
+
+ // @codingStandardsIgnoreStart
+ /**
+ * Create and return a handle to a file.
+ *
+ * @deprecated 1.8 Use ElggFileCache::createFile()
+ *
+ * @param string $filename Filename to save as
+ * @param string $rw Write mode
+ *
+ * @return mixed
+ */
+ protected function create_file($filename, $rw = "rb") {
+ elgg_deprecated_notice('ElggFileCache::create_file() is deprecated by ::createFile()', 1.8);
+
+ return $this->createFile($filename, $rw);
+ }
+ // @codingStandardsIgnoreEnd
+
+ /**
+ * Create and return a handle to a file.
+ *
+ * @param string $filename Filename to save as
+ * @param string $rw Write mode
+ *
+ * @return mixed
+ */
+ protected function createFile($filename, $rw = "rb") {
+ // Create a filename matrix
+ $matrix = "";
+ $depth = strlen($filename);
+ if ($depth > 5) {
+ $depth = 5;
+ }
+
+ // Create full path
+ $path = $this->getVariable("cache_path") . $matrix;
+ if (!is_dir($path)) {
+ mkdir($path, 0700, true);
+ }
+
+ // Open the file
+ if ((!file_exists($path . $filename)) && ($rw == "rb")) {
+ return false;
+ }
+
+ return fopen($path . $filename, $rw);
+ }
+
+ // @codingStandardsIgnoreStart
+ /**
+ * Create a sanitised filename for the file.
+ *
+ * @deprecated 1.8 Use ElggFileCache::sanitizeFilename()
+ *
+ * @param string $filename The filename
+ *
+ * @return string
+ */
+ protected function sanitise_filename($filename) {
+ // @todo : Writeme
+
+ return $filename;
+ }
+ // @codingStandardsIgnoreEnd
+
+ /**
+ * Create a sanitised filename for the file.
+ *
+ * @param string $filename The filename
+ *
+ * @return string
+ */
+ protected function sanitizeFilename($filename) {
+ // @todo : Writeme
+
+ return $filename;
+ }
+
+ /**
+ * Save a key
+ *
+ * @param string $key Name
+ * @param string $data Value
+ *
+ * @return boolean
+ */
+ public function save($key, $data) {
+ $f = $this->createFile($this->sanitizeFilename($key), "wb");
+ if ($f) {
+ $result = fwrite($f, $data);
+ fclose($f);
+
+ return $result;
+ }
+
+ return false;
+ }
+
+ /**
+ * Load a key
+ *
+ * @param string $key Name
+ * @param int $offset Offset
+ * @param int $limit Limit
+ *
+ * @return string
+ */
+ public function load($key, $offset = 0, $limit = null) {
+ $f = $this->createFile($this->sanitizeFilename($key));
+ if ($f) {
+ if (!$limit) {
+ $limit = -1;
+ }
+
+ $data = stream_get_contents($f, $limit, $offset);
+
+ fclose($f);
+
+ return $data;
+ }
+
+ return false;
+ }
+
+ /**
+ * Invalidate a given key.
+ *
+ * @param string $key Name
+ *
+ * @return bool
+ */
+ public function delete($key) {
+ $dir = $this->getVariable("cache_path");
+
+ if (file_exists($dir . $key)) {
+ return unlink($dir . $key);
+ }
+ return TRUE;
+ }
+
+ /**
+ * Delete all files in the directory of this file cache
+ *
+ * @return void
+ */
+ public function clear() {
+ $dir = $this->getVariable("cache_path");
+
+ $exclude = array(".", "..");
+
+ $files = scandir($dir);
+ if (!$files) {
+ return;
+ }
+
+ foreach ($files as $f) {
+ if (!in_array($f, $exclude)) {
+ unlink($dir . $f);
+ }
+ }
+ }
+
+ /**
+ * Preform cleanup and invalidates cache upon object destruction
+ *
+ * @throws IOException
+ */
+ public function __destruct() {
+ // @todo Check size and age, clean up accordingly
+ $size = 0;
+ $dir = $this->getVariable("cache_path");
+
+ // Short circuit if both size and age are unlimited
+ if (($this->getVariable("max_age") == 0) && ($this->getVariable("max_size") == 0)) {
+ return;
+ }
+
+ $exclude = array(".", "..");
+
+ $files = scandir($dir);
+ if (!$files) {
+ throw new IOException(elgg_echo('IOException:NotDirectory', array($dir)));
+ }
+
+ // Perform cleanup
+ foreach ($files as $f) {
+ if (!in_array($f, $exclude)) {
+ $stat = stat($dir . $f);
+
+ // Add size
+ $size .= $stat['size'];
+
+ // Is this older than my maximum date?
+ if (($this->getVariable("max_age") > 0) && (time() - $stat['mtime'] > $this->getVariable("max_age"))) {
+ unlink($dir . $f);
+ }
+
+ // @todo Size
+ }
+ }
+ }
+}
diff --git a/engine/classes/ElggFilestore.php b/engine/classes/ElggFilestore.php
new file mode 100644
index 000000000..16430feac
--- /dev/null
+++ b/engine/classes/ElggFilestore.php
@@ -0,0 +1,139 @@
+<?php
+/**
+ * This class defines the interface for all elgg data repositories.
+ *
+ * @package Elgg.Core
+ * @subpackage DataStorage
+ * @class ElggFilestore
+ */
+abstract class ElggFilestore {
+ /**
+ * Attempt to open the file $file for storage or writing.
+ *
+ * @param ElggFile $file A file
+ * @param string $mode "read", "write", "append"
+ *
+ * @return mixed A handle to the opened file or false on error.
+ */
+ abstract public function open(ElggFile $file, $mode);
+
+ /**
+ * Write data to a given file handle.
+ *
+ * @param mixed $f The file handle - exactly what this is depends on the file system
+ * @param string $data The binary string of data to write
+ *
+ * @return int Number of bytes written.
+ */
+ abstract public function write($f, $data);
+
+ /**
+ * Read data from a filestore.
+ *
+ * @param mixed $f The file handle
+ * @param int $length Length in bytes to read.
+ * @param int $offset The optional offset.
+ *
+ * @return mixed String of data or false on error.
+ */
+ abstract public function read($f, $length, $offset = 0);
+
+ /**
+ * Seek a given position within a file handle.
+ *
+ * @param mixed $f The file handle.
+ * @param int $position The position.
+ *
+ * @return void
+ */
+ abstract public function seek($f, $position);
+
+ /**
+ * Return a whether the end of a file has been reached.
+ *
+ * @param mixed $f The file handle.
+ *
+ * @return boolean
+ */
+ abstract public function eof($f);
+
+ /**
+ * Return the current position in an open file.
+ *
+ * @param mixed $f The file handle.
+ *
+ * @return int
+ */
+ abstract public function tell($f);
+
+ /**
+ * Close a given file handle.
+ *
+ * @param mixed $f The file handle
+ *
+ * @return bool
+ */
+ abstract public function close($f);
+
+ /**
+ * Delete the file associated with a given file handle.
+ *
+ * @param ElggFile $file The file
+ *
+ * @return bool
+ */
+ abstract public function delete(ElggFile $file);
+
+ /**
+ * Return the size in bytes for a given file.
+ *
+ * @param ElggFile $file The file
+ *
+ * @return int
+ */
+ abstract public function getFileSize(ElggFile $file);
+
+ /**
+ * Return the filename of a given file as stored on the filestore.
+ *
+ * @param ElggFile $file The file
+ *
+ * @return string
+ */
+ abstract public function getFilenameOnFilestore(ElggFile $file);
+
+ /**
+ * Get the filestore's creation parameters as an associative array.
+ * Used for serialisation and for storing the creation details along side a file object.
+ *
+ * @return array
+ */
+ abstract public function getParameters();
+
+ /**
+ * Set the parameters from the associative array produced by $this->getParameters().
+ *
+ * @param array $parameters A list of parameters
+ *
+ * @return bool
+ */
+ abstract public function setParameters(array $parameters);
+
+ /**
+ * Get the contents of the whole file.
+ *
+ * @param mixed $file The file handle.
+ *
+ * @return mixed The file contents.
+ */
+ abstract public function grabFile(ElggFile $file);
+
+ /**
+ * Return whether a file physically exists or not.
+ *
+ * @param ElggFile $file The file
+ *
+ * @return bool
+ */
+ abstract public function exists(ElggFile $file);
+}
diff --git a/engine/classes/ElggGroup.php b/engine/classes/ElggGroup.php
new file mode 100644
index 000000000..7e69b7a84
--- /dev/null
+++ b/engine/classes/ElggGroup.php
@@ -0,0 +1,393 @@
+<?php
+
+/**
+ * Class representing a container for other elgg entities.
+ *
+ * @package Elgg.Core
+ * @subpackage Groups
+ *
+ * @property string $name A short name that captures the purpose of the group
+ * @property string $description A longer body of content that gives more details about the group
+ */
+class ElggGroup extends ElggEntity
+ implements Friendable {
+
+ /**
+ * Sets the type to group.
+ *
+ * @return void
+ */
+ protected function initializeAttributes() {
+ parent::initializeAttributes();
+
+ $this->attributes['type'] = "group";
+ $this->attributes['name'] = NULL;
+ $this->attributes['description'] = NULL;
+ $this->attributes['tables_split'] = 2;
+ }
+
+ /**
+ * Construct a new group entity, optionally from a given guid value.
+ *
+ * @param mixed $guid If an int, load that GUID.
+ * If an entity table db row, then will load the rest of the data.
+ *
+ * @throws IOException|InvalidParameterException if there was a problem creating the group.
+ */
+ function __construct($guid = null) {
+ $this->initializeAttributes();
+
+ // compatibility for 1.7 api.
+ $this->initialise_attributes(false);
+
+ if (!empty($guid)) {
+ // Is $guid is a entity table DB row
+ if ($guid instanceof stdClass) {
+ // Load the rest
+ if (!$this->load($guid)) {
+ $msg = elgg_echo('IOException:FailedToLoadGUID', array(get_class(), $guid->guid));
+ throw new IOException($msg);
+ }
+ } else if ($guid instanceof ElggGroup) {
+ // $guid is an ElggGroup so this is a copy constructor
+ elgg_deprecated_notice('This type of usage of the ElggGroup constructor was deprecated. Please use the clone method.', 1.7);
+
+ foreach ($guid->attributes as $key => $value) {
+ $this->attributes[$key] = $value;
+ }
+ } else if ($guid instanceof ElggEntity) {
+ // @todo why separate from else
+ throw new InvalidParameterException(elgg_echo('InvalidParameterException:NonElggGroup'));
+ } else if (is_numeric($guid)) {
+ // $guid is a GUID so load entity
+ if (!$this->load($guid)) {
+ throw new IOException(elgg_echo('IOException:FailedToLoadGUID', array(get_class(), $guid)));
+ }
+ } else {
+ throw new InvalidParameterException(elgg_echo('InvalidParameterException:UnrecognisedValue'));
+ }
+ }
+ }
+
+ /**
+ * Add an ElggObject to this group.
+ *
+ * @param ElggObject $object The object.
+ *
+ * @return bool
+ */
+ public function addObjectToGroup(ElggObject $object) {
+ return add_object_to_group($this->getGUID(), $object->getGUID());
+ }
+
+ /**
+ * Remove an object from the containing group.
+ *
+ * @param int $guid The guid of the object.
+ *
+ * @return bool
+ */
+ public function removeObjectFromGroup($guid) {
+ return remove_object_from_group($this->getGUID(), $guid);
+ }
+
+ /**
+ * Returns an attribute or metadata.
+ *
+ * @see ElggEntity::get()
+ *
+ * @param string $name Name
+ *
+ * @return mixed
+ */
+ public function get($name) {
+ if ($name == 'username') {
+ return 'group:' . $this->getGUID();
+ }
+ return parent::get($name);
+ }
+
+ /**
+ * Start friendable compatibility block:
+ *
+ * public function addFriend($friend_guid);
+ public function removeFriend($friend_guid);
+ public function isFriend();
+ public function isFriendsWith($user_guid);
+ public function isFriendOf($user_guid);
+ public function getFriends($subtype = "", $limit = 10, $offset = 0);
+ public function getFriendsOf($subtype = "", $limit = 10, $offset = 0);
+ public function getObjects($subtype="", $limit = 10, $offset = 0);
+ public function getFriendsObjects($subtype = "", $limit = 10, $offset = 0);
+ public function countObjects($subtype = "");
+ */
+
+ /**
+ * For compatibility with Friendable.
+ *
+ * Join a group when you friend ElggGroup.
+ *
+ * @param int $friend_guid The GUID of the user joining the group.
+ *
+ * @return bool
+ */
+ public function addFriend($friend_guid) {
+ return $this->join(get_entity($friend_guid));
+ }
+
+ /**
+ * For compatibility with Friendable
+ *
+ * Leave group when you unfriend ElggGroup.
+ *
+ * @param int $friend_guid The GUID of the user leaving.
+ *
+ * @return bool
+ */
+ public function removeFriend($friend_guid) {
+ return $this->leave(get_entity($friend_guid));
+ }
+
+ /**
+ * For compatibility with Friendable
+ *
+ * Friending a group adds you as a member
+ *
+ * @return bool
+ */
+ public function isFriend() {
+ return $this->isMember();
+ }
+
+ /**
+ * For compatibility with Friendable
+ *
+ * @param int $user_guid The GUID of a user to check.
+ *
+ * @return bool
+ */
+ public function isFriendsWith($user_guid) {
+ return $this->isMember($user_guid);
+ }
+
+ /**
+ * For compatibility with Friendable
+ *
+ * @param int $user_guid The GUID of a user to check.
+ *
+ * @return bool
+ */
+ public function isFriendOf($user_guid) {
+ return $this->isMember($user_guid);
+ }
+
+ /**
+ * For compatibility with Friendable
+ *
+ * @param string $subtype The GUID of a user to check.
+ * @param int $limit Limit
+ * @param int $offset Offset
+ *
+ * @return bool
+ */
+ public function getFriends($subtype = "", $limit = 10, $offset = 0) {
+ return get_group_members($this->getGUID(), $limit, $offset);
+ }
+
+ /**
+ * For compatibility with Friendable
+ *
+ * @param string $subtype The GUID of a user to check.
+ * @param int $limit Limit
+ * @param int $offset Offset
+ *
+ * @return bool
+ */
+ public function getFriendsOf($subtype = "", $limit = 10, $offset = 0) {
+ return get_group_members($this->getGUID(), $limit, $offset);
+ }
+
+ /**
+ * Get objects contained in this group.
+ *
+ * @param string $subtype Entity subtype
+ * @param int $limit Limit
+ * @param int $offset Offset
+ *
+ * @return array|false
+ */
+ public function getObjects($subtype = "", $limit = 10, $offset = 0) {
+ // @todo are we deprecating this method, too?
+ return get_objects_in_group($this->getGUID(), $subtype, 0, 0, "", $limit, $offset, false);
+ }
+
+ /**
+ * For compatibility with Friendable
+ *
+ * @param string $subtype Entity subtype
+ * @param int $limit Limit
+ * @param int $offset Offset
+ *
+ * @return array|false
+ */
+ public function getFriendsObjects($subtype = "", $limit = 10, $offset = 0) {
+ // @todo are we deprecating this method, too?
+ return get_objects_in_group($this->getGUID(), $subtype, 0, 0, "", $limit, $offset, false);
+ }
+
+ /**
+ * For compatibility with Friendable
+ *
+ * @param string $subtype Subtype of entities
+ *
+ * @return array|false
+ */
+ public function countObjects($subtype = "") {
+ // @todo are we deprecating this method, too?
+ return get_objects_in_group($this->getGUID(), $subtype, 0, 0, "", 10, 0, true);
+ }
+
+ /**
+ * End friendable compatibility block
+ */
+
+ /**
+ * Get a list of group members.
+ *
+ * @param int $limit Limit
+ * @param int $offset Offset
+ * @param bool $count Count
+ *
+ * @return mixed
+ */
+ public function getMembers($limit = 10, $offset = 0, $count = false) {
+ return get_group_members($this->getGUID(), $limit, $offset, 0, $count);
+ }
+
+ /**
+ * Returns whether the current group is public membership or not.
+ *
+ * @return bool
+ */
+ public function isPublicMembership() {
+ if ($this->membership == ACCESS_PUBLIC) {
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Return whether a given user is a member of this group or not.
+ *
+ * @param ElggUser $user The user
+ *
+ * @return bool
+ */
+ public function isMember($user = null) {
+ if (!($user instanceof ElggUser)) {
+ $user = elgg_get_logged_in_user_entity();
+ }
+ if (!($user instanceof ElggUser)) {
+ return false;
+ }
+ return is_group_member($this->getGUID(), $user->getGUID());
+ }
+
+ /**
+ * Join an elgg user to this group.
+ *
+ * @param ElggUser $user User
+ *
+ * @return bool
+ */
+ public function join(ElggUser $user) {
+ return join_group($this->getGUID(), $user->getGUID());
+ }
+
+ /**
+ * Remove a user from the group.
+ *
+ * @param ElggUser $user User
+ *
+ * @return bool
+ */
+ public function leave(ElggUser $user) {
+ return leave_group($this->getGUID(), $user->getGUID());
+ }
+
+ /**
+ * Load the ElggGroup data from the database
+ *
+ * @param mixed $guid GUID of an ElggGroup entity or database row from entity table
+ *
+ * @return bool
+ */
+ protected function load($guid) {
+ $attr_loader = new ElggAttributeLoader(get_class(), 'group', $this->attributes);
+ $attr_loader->requires_access_control = !($this instanceof ElggPlugin);
+ $attr_loader->secondary_loader = 'get_group_entity_as_row';
+
+ $attrs = $attr_loader->getRequiredAttributes($guid);
+ if (!$attrs) {
+ return false;
+ }
+
+ $this->attributes = $attrs;
+ $this->attributes['tables_loaded'] = 2;
+ _elgg_cache_entity($this);
+
+ return true;
+ }
+
+ /**
+ * Override the save function.
+ *
+ * @return bool
+ */
+ public function save() {
+ // Save generic stuff
+ if (!parent::save()) {
+ return false;
+ }
+
+ // Now save specific stuff
+
+ _elgg_disable_caching_for_entity($this->guid);
+ $ret = create_group_entity($this->get('guid'), $this->get('name'), $this->get('description'));
+ _elgg_enable_caching_for_entity($this->guid);
+
+ return $ret;
+ }
+
+ // EXPORTABLE INTERFACE ////////////////////////////////////////////////////////////
+
+ /**
+ * Return an array of fields which can be exported.
+ *
+ * @return array
+ */
+ public function getExportableValues() {
+ return array_merge(parent::getExportableValues(), array(
+ 'name',
+ 'description',
+ ));
+ }
+
+ /**
+ * Can a user comment on this group?
+ *
+ * @see ElggEntity::canComment()
+ *
+ * @param int $user_guid User guid (default is logged in user)
+ * @return bool
+ * @since 1.8.0
+ */
+ public function canComment($user_guid = 0) {
+ $result = parent::canComment($user_guid);
+ if ($result !== null) {
+ return $result;
+ }
+ return false;
+ }
+}
diff --git a/engine/classes/ElggGroupItemVisibility.php b/engine/classes/ElggGroupItemVisibility.php
new file mode 100644
index 000000000..2c7e2abb4
--- /dev/null
+++ b/engine/classes/ElggGroupItemVisibility.php
@@ -0,0 +1,93 @@
+<?php
+
+/**
+ * Determines if otherwise visible items should be hidden from a user due to group
+ * policy or visibility.
+ *
+ * @class ElggGroupItemVisibility
+ * @package Elgg.Core
+ * @subpackage Groups
+ *
+ * @access private
+ */
+class ElggGroupItemVisibility {
+
+ const REASON_MEMBERSHIP = 'membershiprequired';
+ const REASON_LOGGEDOUT = 'loggedinrequired';
+ const REASON_NOACCESS = 'noaccess';
+
+ /**
+ * @var bool
+ */
+ public $shouldHideItems = false;
+
+ /**
+ * @var string
+ */
+ public $reasonHidden = '';
+
+ /**
+ * Determine visibility of items within a container for the current user
+ *
+ * @param int $container_guid GUID of a container (may/may not be a group)
+ *
+ * @return ElggGroupItemVisibility
+ *
+ * @todo Make this faster, considering it must run for every river item.
+ */
+ static public function factory($container_guid) {
+ // cache because this may be called repeatedly during river display, and
+ // due to need to check group visibility, cache will be disabled for some
+ // get_entity() calls
+ static $cache = array();
+
+ $ret = new ElggGroupItemVisibility();
+
+ if (!$container_guid) {
+ return $ret;
+ }
+
+ $user = elgg_get_logged_in_user_entity();
+ $user_guid = $user ? $user->guid : 0;
+
+ $container_guid = (int) $container_guid;
+
+ $cache_key = "$container_guid|$user_guid";
+ if (empty($cache[$cache_key])) {
+ // compute
+
+ $container = get_entity($container_guid);
+ $is_visible = (bool) $container;
+
+ if (!$is_visible) {
+ // see if it *really* exists...
+ $prev_access = elgg_set_ignore_access();
+ $container = get_entity($container_guid);
+ elgg_set_ignore_access($prev_access);
+ }
+
+ if ($container && $container instanceof ElggGroup) {
+ /* @var ElggGroup $container */
+
+ if ($is_visible) {
+ if (!$container->isPublicMembership()) {
+ if ($user) {
+ if (!$container->isMember($user) && !$user->isAdmin()) {
+ $ret->shouldHideItems = true;
+ $ret->reasonHidden = self::REASON_MEMBERSHIP;
+ }
+ } else {
+ $ret->shouldHideItems = true;
+ $ret->reasonHidden = self::REASON_LOGGEDOUT;
+ }
+ }
+ } else {
+ $ret->shouldHideItems = true;
+ $ret->reasonHidden = self::REASON_NOACCESS;
+ }
+ }
+ $cache[$cache_key] = $ret;
+ }
+ return $cache[$cache_key];
+ }
+}
diff --git a/engine/classes/ElggHMACCache.php b/engine/classes/ElggHMACCache.php
new file mode 100644
index 000000000..c2f468815
--- /dev/null
+++ b/engine/classes/ElggHMACCache.php
@@ -0,0 +1,99 @@
+<?php
+/**
+ * ElggHMACCache
+ * Store cached data in a temporary database, only used by the HMAC stuff.
+ *
+ * @package Elgg.Core
+ * @subpackage HMAC
+ */
+class ElggHMACCache extends ElggCache {
+ /**
+ * Set the Elgg cache.
+ *
+ * @param int $max_age Maximum age in seconds, 0 if no limit.
+ */
+ function __construct($max_age = 0) {
+ $this->setVariable("max_age", $max_age);
+ }
+
+ /**
+ * Save a key
+ *
+ * @param string $key Name
+ * @param string $data Value
+ *
+ * @return boolean
+ */
+ public function save($key, $data) {
+ global $CONFIG;
+
+ $key = sanitise_string($key);
+ $time = time();
+
+ $query = "INSERT into {$CONFIG->dbprefix}hmac_cache (hmac, ts) VALUES ('$key', '$time')";
+ return insert_data($query);
+ }
+
+ /**
+ * Load a key
+ *
+ * @param string $key Name
+ * @param int $offset Offset
+ * @param int $limit Limit
+ *
+ * @return string
+ */
+ public function load($key, $offset = 0, $limit = null) {
+ global $CONFIG;
+
+ $key = sanitise_string($key);
+
+ $row = get_data_row("SELECT * from {$CONFIG->dbprefix}hmac_cache where hmac='$key'");
+ if ($row) {
+ return $row->hmac;
+ }
+
+ return false;
+ }
+
+ /**
+ * Invalidate a given key.
+ *
+ * @param string $key Name
+ *
+ * @return bool
+ */
+ public function delete($key) {
+ global $CONFIG;
+
+ $key = sanitise_string($key);
+
+ return delete_data("DELETE from {$CONFIG->dbprefix}hmac_cache where hmac='$key'");
+ }
+
+ /**
+ * Clear out all the contents of the cache.
+ *
+ * Not currently implemented in this cache type.
+ *
+ * @return true
+ */
+ public function clear() {
+ return true;
+ }
+
+ /**
+ * Clean out old stuff.
+ *
+ */
+ public function __destruct() {
+ global $CONFIG;
+
+ $time = time();
+ $age = (int)$this->getVariable("max_age");
+
+ $expires = $time - $age;
+
+ delete_data("DELETE from {$CONFIG->dbprefix}hmac_cache where ts<$expires");
+ }
+}
diff --git a/engine/classes/ElggLRUCache.php b/engine/classes/ElggLRUCache.php
new file mode 100644
index 000000000..f51af2ed7
--- /dev/null
+++ b/engine/classes/ElggLRUCache.php
@@ -0,0 +1,181 @@
+<?php
+
+/**
+ * Least Recently Used Cache
+ *
+ * A fixed sized cache that removes the element used last when it reaches its
+ * size limit.
+ *
+ * Based on https://github.com/cash/LRUCache
+ *
+ * @access private
+ *
+ * @package Elgg.Core
+ * @subpackage Cache
+ */
+class ElggLRUCache implements ArrayAccess {
+ /** @var int */
+ protected $maximumSize;
+
+ /**
+ * The front of the array contains the LRU element
+ *
+ * @var array
+ */
+ protected $data = array();
+
+ /**
+ * Create a LRU Cache
+ *
+ * @param int $size The size of the cache
+ * @throws InvalidArgumentException
+ */
+ public function __construct($size) {
+ if (!is_int($size) || $size <= 0) {
+ throw new InvalidArgumentException();
+ }
+ $this->maximumSize = $size;
+ }
+
+ /**
+ * Get the value cached with this key
+ *
+ * @param int|string $key The key. Strings that are ints are cast to ints.
+ * @param mixed $default The value to be returned if key not found. (Optional)
+ * @return mixed
+ */
+ public function get($key, $default = null) {
+ if (isset($this->data[$key])) {
+ $this->recordAccess($key);
+ return $this->data[$key];
+ } else {
+ return $default;
+ }
+ }
+
+ /**
+ * Add something to the cache
+ *
+ * @param int|string $key The key. Strings that are ints are cast to ints.
+ * @param mixed $value The value to cache
+ * @return void
+ */
+ public function set($key, $value) {
+ if (isset($this->data[$key])) {
+ $this->data[$key] = $value;
+ $this->recordAccess($key);
+ } else {
+ $this->data[$key] = $value;
+ if ($this->size() > $this->maximumSize) {
+ // remove least recently used element (front of array)
+ reset($this->data);
+ unset($this->data[key($this->data)]);
+ }
+ }
+ }
+
+ /**
+ * Get the number of elements in the cache
+ *
+ * @return int
+ */
+ public function size() {
+ return count($this->data);
+ }
+
+ /**
+ * Does the cache contain an element with this key
+ *
+ * @param int|string $key The key
+ * @return boolean
+ */
+ public function containsKey($key) {
+ return isset($this->data[$key]);
+ }
+
+ /**
+ * Remove the element with this key.
+ *
+ * @param int|string $key The key
+ * @return mixed Value or null if not set
+ */
+ public function remove($key) {
+ if (isset($this->data[$key])) {
+ $value = $this->data[$key];
+ unset($this->data[$key]);
+ return $value;
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Clear the cache
+ *
+ * @return void
+ */
+ public function clear() {
+ $this->data = array();
+ }
+
+ /**
+ * Moves the element from current position to end of array
+ *
+ * @param int|string $key The key
+ * @return void
+ */
+ protected function recordAccess($key) {
+ $value = $this->data[$key];
+ unset($this->data[$key]);
+ $this->data[$key] = $value;
+ }
+
+ /**
+ * Assigns a value for the specified key
+ *
+ * @see ArrayAccess::offsetSet()
+ *
+ * @param int|string $key The key to assign the value to.
+ * @param mixed $value The value to set.
+ * @return void
+ */
+ public function offsetSet($key, $value) {
+ $this->set($key, $value);
+ }
+
+ /**
+ * Get the value for specified key
+ *
+ * @see ArrayAccess::offsetGet()
+ *
+ * @param int|string $key The key to retrieve.
+ * @return mixed
+ */
+ public function offsetGet($key) {
+ return $this->get($key);
+ }
+
+ /**
+ * Unsets a key.
+ *
+ * @see ArrayAccess::offsetUnset()
+ *
+ * @param int|string $key The key to unset.
+ * @return void
+ */
+ public function offsetUnset($key) {
+ $this->remove($key);
+ }
+
+ /**
+ * Does key exist?
+ *
+ * @see ArrayAccess::offsetExists()
+ *
+ * @param int|string $key A key to check for.
+ * @return boolean
+ */
+ public function offsetExists($key) {
+ return $this->containsKey($key);
+ }
+}
diff --git a/engine/classes/ElggMemcache.php b/engine/classes/ElggMemcache.php
new file mode 100644
index 000000000..91d50ab89
--- /dev/null
+++ b/engine/classes/ElggMemcache.php
@@ -0,0 +1,203 @@
+<?php
+/**
+ * Memcache wrapper class.
+ *
+ * @package Elgg.Core
+ * @subpackage Memcache
+ */
+class ElggMemcache extends ElggSharedMemoryCache {
+ /**
+ * Minimum version of memcached needed to run
+ *
+ */
+ private static $MINSERVERVERSION = '1.1.12';
+
+ /**
+ * Memcache object
+ */
+ private $memcache;
+
+ /**
+ * Expiry of saved items (default timeout after a day to prevent anything getting too stale)
+ */
+ private $expires = 86400;
+
+ /**
+ * The version of memcache running
+ */
+ private $version = 0;
+
+ /**
+ * Connect to memcache.
+ *
+ * @param string $namespace The namespace for this cache to write to -
+ * note, namespaces of the same name are shared!
+ *
+ * @throws ConfigurationException
+ */
+ function __construct($namespace = 'default') {
+ global $CONFIG;
+
+ $this->setNamespace($namespace);
+
+ // Do we have memcache?
+ if (!class_exists('Memcache')) {
+ throw new ConfigurationException('PHP memcache module not installed, you must install php5-memcache');
+ }
+
+ // Create memcache object
+ $this->memcache = new Memcache;
+
+ // Now add servers
+ if (!$CONFIG->memcache_servers) {
+ throw new ConfigurationException('No memcache servers defined, please populate the $CONFIG->memcache_servers variable');
+ }
+
+ if (is_callable(array($this->memcache, 'addServer'))) {
+ foreach ($CONFIG->memcache_servers as $server) {
+ if (is_array($server)) {
+ $this->memcache->addServer(
+ $server[0],
+ isset($server[1]) ? $server[1] : 11211,
+ isset($server[2]) ? $server[2] : FALSE,
+ isset($server[3]) ? $server[3] : 1,
+ isset($server[4]) ? $server[4] : 1,
+ isset($server[5]) ? $server[5] : 15,
+ isset($server[6]) ? $server[6] : TRUE
+ );
+
+ } else {
+ $this->memcache->addServer($server, 11211);
+ }
+ }
+ } else {
+ // don't use elgg_echo() here because most of the config hasn't been loaded yet
+ // and it caches the language, which is hard coded in $CONFIG->language as en.
+ // overriding it with real values later has no effect because it's already cached.
+ elgg_log("This version of the PHP memcache API doesn't support multiple servers.", 'ERROR');
+
+ $server = $CONFIG->memcache_servers[0];
+ if (is_array($server)) {
+ $this->memcache->connect($server[0], $server[1]);
+ } else {
+ $this->memcache->addServer($server, 11211);
+ }
+ }
+
+ // Get version
+ $this->version = $this->memcache->getVersion();
+ if (version_compare($this->version, ElggMemcache::$MINSERVERVERSION, '<')) {
+ $msg = vsprintf('Memcache needs at least version %s to run, you are running %s',
+ array(ElggMemcache::$MINSERVERVERSION,
+ $this->version
+ ));
+
+ throw new ConfigurationException($msg);
+ }
+
+ // Set some defaults
+ if (isset($CONFIG->memcache_expires)) {
+ $this->expires = $CONFIG->memcache_expires;
+ }
+ }
+
+ /**
+ * Set the default expiry.
+ *
+ * @param int $expires The lifetime as a unix timestamp or time from now. Defaults forever.
+ *
+ * @return void
+ */
+ public function setDefaultExpiry($expires = 0) {
+ $this->expires = $expires;
+ }
+
+ /**
+ * Combine a key with the namespace.
+ * Memcache can only accept <250 char key. If the given key is too long it is shortened.
+ *
+ * @param string $key The key
+ *
+ * @return string The new key.
+ */
+ private function makeMemcacheKey($key) {
+ $prefix = $this->getNamespace() . ":";
+
+ if (strlen($prefix . $key) > 250) {
+ $key = md5($key);
+ }
+
+ return $prefix . $key;
+ }
+
+ /**
+ * Saves a name and value to the cache
+ *
+ * @param string $key Name
+ * @param string $data Value
+ * @param integer $expires Expires (in seconds)
+ *
+ * @return bool
+ */
+ public function save($key, $data, $expires = null) {
+ $key = $this->makeMemcacheKey($key);
+
+ if ($expires === null) {
+ $expires = $this->expires;
+ }
+
+ $result = $this->memcache->set($key, $data, null, $expires);
+ if ($result === false) {
+ elgg_log("MEMCACHE: FAILED TO SAVE $key", 'ERROR');
+ }
+
+ return $result;
+ }
+
+ /**
+ * Retrieves data.
+ *
+ * @param string $key Name of data to retrieve
+ * @param int $offset Offset
+ * @param int $limit Limit
+ *
+ * @return mixed
+ */
+ public function load($key, $offset = 0, $limit = null) {
+ $key = $this->makeMemcacheKey($key);
+
+ $result = $this->memcache->get($key);
+ if ($result === false) {
+ elgg_log("MEMCACHE: FAILED TO LOAD $key", 'ERROR');
+ }
+
+ return $result;
+ }
+
+ /**
+ * Delete data
+ *
+ * @param string $key Name of data
+ *
+ * @return bool
+ */
+ public function delete($key) {
+ $key = $this->makeMemcacheKey($key);
+
+ return $this->memcache->delete($key, 0);
+ }
+
+ /**
+ * Clears the entire cache?
+ *
+ * @todo write or remove.
+ *
+ * @return true
+ */
+ public function clear() {
+ // DISABLE clearing for now - you must use delete on a specific key.
+ return true;
+
+ // @todo Namespaces as in #532
+ }
+}
diff --git a/engine/classes/ElggMenuBuilder.php b/engine/classes/ElggMenuBuilder.php
new file mode 100644
index 000000000..b463143d8
--- /dev/null
+++ b/engine/classes/ElggMenuBuilder.php
@@ -0,0 +1,291 @@
+<?php
+/**
+ * Elgg Menu Builder
+ *
+ * @package Elgg.Core
+ * @subpackage Navigation
+ * @since 1.8.0
+ */
+class ElggMenuBuilder {
+
+ /**
+ * @var ElggMenuItem[]
+ */
+ protected $menu = array();
+
+ protected $selected = null;
+
+ /**
+ * ElggMenuBuilder constructor
+ *
+ * @param ElggMenuItem[] $menu Array of ElggMenuItem objects
+ */
+ public function __construct(array $menu) {
+ $this->menu = $menu;
+ }
+
+ /**
+ * Get a prepared menu array
+ *
+ * @param mixed $sort_by Method to sort the menu by. @see ElggMenuBuilder::sort()
+ * @return array
+ */
+ public function getMenu($sort_by = 'text') {
+
+ $this->selectFromContext();
+
+ $this->selected = $this->findSelected();
+
+ $this->setupSections();
+
+ $this->setupTrees();
+
+ $this->sort($sort_by);
+
+ return $this->menu;
+ }
+
+ /**
+ * Get the selected menu item
+ *
+ * @return ElggMenuItem
+ */
+ public function getSelected() {
+ return $this->selected;
+ }
+
+ /**
+ * Select menu items for the current context
+ *
+ * @return void
+ */
+ protected function selectFromContext() {
+ if (!isset($this->menu)) {
+ $this->menu = array();
+ return;
+ }
+
+ // get menu items for this context
+ $selected_menu = array();
+ foreach ($this->menu as $menu_item) {
+ if (!is_object($menu_item)) {
+ elgg_log("A non-object was passed to ElggMenuBuilder", "ERROR");
+ continue;
+ }
+ if ($menu_item->inContext()) {
+ $selected_menu[] = $menu_item;
+ }
+ }
+
+ $this->menu = $selected_menu;
+ }
+
+ /**
+ * Group the menu items into sections
+ *
+ * @return void
+ */
+ protected function setupSections() {
+ $sectioned_menu = array();
+ foreach ($this->menu as $menu_item) {
+ if (!isset($sectioned_menu[$menu_item->getSection()])) {
+ $sectioned_menu[$menu_item->getSection()] = array();
+ }
+ $sectioned_menu[$menu_item->getSection()][] = $menu_item;
+ }
+ $this->menu = $sectioned_menu;
+ }
+
+ /**
+ * Create trees for each menu section
+ *
+ * @internal The tree is doubly linked (parent and children links)
+ * @return void
+ */
+ protected function setupTrees() {
+ $menu_tree = array();
+
+ foreach ($this->menu as $key => $section) {
+ $parents = array();
+ $children = array();
+ // divide base nodes from children
+ foreach ($section as $menu_item) {
+ /* @var ElggMenuItem $menu_item */
+ $parent_name = $menu_item->getParentName();
+ if (!$parent_name) {
+ $parents[$menu_item->getName()] = $menu_item;
+ } else {
+ $children[] = $menu_item;
+ }
+ }
+
+ // attach children to parents
+ $iteration = 0;
+ $current_gen = $parents;
+ $next_gen = null;
+ while (count($children) && $iteration < 5) {
+ foreach ($children as $index => $menu_item) {
+ $parent_name = $menu_item->getParentName();
+ if (array_key_exists($parent_name, $current_gen)) {
+ $next_gen[$menu_item->getName()] = $menu_item;
+ if (!in_array($menu_item, $current_gen[$parent_name]->getData('children'))) {
+ $current_gen[$parent_name]->addChild($menu_item);
+ $menu_item->setParent($current_gen[$parent_name]);
+ }
+ unset($children[$index]);
+ }
+ }
+ $current_gen = $next_gen;
+ $iteration += 1;
+ }
+
+ // convert keys to indexes for first level of tree
+ $parents = array_values($parents);
+
+ $menu_tree[$key] = $parents;
+ }
+
+ $this->menu = $menu_tree;
+ }
+
+ /**
+ * Find the menu item that is currently selected
+ *
+ * @return ElggMenuItem
+ */
+ protected function findSelected() {
+
+ // do we have a selected menu item already
+ foreach ($this->menu as $menu_item) {
+ if ($menu_item->getSelected()) {
+ return $menu_item;
+ }
+ }
+
+ // scan looking for a selected item
+ foreach ($this->menu as $menu_item) {
+ if ($menu_item->getHref()) {
+ if (elgg_http_url_is_identical(current_page_url(), $menu_item->getHref())) {
+ $menu_item->setSelected(true);
+ return $menu_item;
+ }
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * Sort the menu sections and trees
+ *
+ * @param mixed $sort_by Sort type as string or php callback
+ * @return void
+ */
+ protected function sort($sort_by) {
+
+ // sort sections
+ ksort($this->menu);
+
+ switch ($sort_by) {
+ case 'text':
+ $sort_callback = array('ElggMenuBuilder', 'compareByText');
+ break;
+ case 'name':
+ $sort_callback = array('ElggMenuBuilder', 'compareByName');
+ break;
+ case 'priority':
+ $sort_callback = array('ElggMenuBuilder', 'compareByWeight');
+ break;
+ case 'register':
+ // use registration order - usort breaks this
+ return;
+ break;
+ default:
+ if (is_callable($sort_by)) {
+ $sort_callback = $sort_by;
+ } else {
+ return;
+ }
+ break;
+ }
+
+ // sort each section
+ foreach ($this->menu as $index => $section) {
+ foreach ($section as $key => $node) {
+ $section[$key]->setData('original_order', $key);
+ }
+ usort($section, $sort_callback);
+ $this->menu[$index] = $section;
+
+ // depth first traversal of tree
+ foreach ($section as $root) {
+ $stack = array();
+ array_push($stack, $root);
+ while (!empty($stack)) {
+ $node = array_pop($stack);
+ /* @var ElggMenuItem $node */
+ $node->sortChildren($sort_callback);
+ $children = $node->getChildren();
+ if ($children) {
+ $stack = array_merge($stack, $children);
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Compare two menu items by their display text
+ *
+ * @param ElggMenuItem $a Menu item
+ * @param ElggMenuItem $b Menu item
+ * @return bool
+ */
+ public static function compareByText($a, $b) {
+ $at = $a->getText();
+ $bt = $b->getText();
+
+ $result = strnatcmp($at, $bt);
+ if ($result === 0) {
+ return $a->getData('original_order') - $b->getData('original_order');
+ }
+ return $result;
+ }
+
+ /**
+ * Compare two menu items by their identifiers
+ *
+ * @param ElggMenuItem $a Menu item
+ * @param ElggMenuItem $b Menu item
+ * @return bool
+ */
+ public static function compareByName($a, $b) {
+ $an = $a->getName();
+ $bn = $b->getName();
+
+ $result = strcmp($an, $bn);
+ if ($result === 0) {
+ return $a->getData('original_order') - $b->getData('original_order');
+ }
+ return $result;
+ }
+
+ /**
+ * Compare two menu items by their priority
+ *
+ * @param ElggMenuItem $a Menu item
+ * @param ElggMenuItem $b Menu item
+ * @return bool
+ *
+ * @todo change name to compareByPriority
+ */
+ public static function compareByWeight($a, $b) {
+ $aw = $a->getWeight();
+ $bw = $b->getWeight();
+
+ if ($aw == $bw) {
+ return $a->getData('original_order') - $b->getData('original_order');
+ }
+ return $aw - $bw;
+ }
+}
diff --git a/engine/classes/ElggMenuItem.php b/engine/classes/ElggMenuItem.php
new file mode 100644
index 000000000..81ce6c099
--- /dev/null
+++ b/engine/classes/ElggMenuItem.php
@@ -0,0 +1,590 @@
+<?php
+/**
+ * Elgg Menu Item
+ *
+ * To create a menu item that is not a link, pass false for $href.
+ *
+ * @package Elgg.Core
+ * @subpackage Navigation
+ * @since 1.8.0
+ */
+class ElggMenuItem {
+
+ /**
+ * @var array Non-rendered data about the menu item
+ */
+ protected $data = array(
+ // string Identifier of the menu
+ 'name' => '',
+
+ // array Page contexts this menu item should appear on
+ 'contexts' => array('all'),
+
+ // string Menu section identifier
+ 'section' => 'default',
+
+ // int Smaller priorities float to the top
+ 'priority' => 100,
+
+ // bool Is this the currently selected menu item
+ 'selected' => false,
+
+ // string Identifier of this item's parent
+ 'parent_name' => '',
+
+ // ElggMenuItem The parent object or null
+ 'parent' => null,
+
+ // array Array of children objects or empty array
+ 'children' => array(),
+
+ // array Classes to apply to the li tag
+ 'itemClass' => array(),
+
+ // array Classes to apply to the anchor tag
+ 'linkClass' => array(),
+ );
+
+ /**
+ * @var string The menu display string
+ */
+ protected $text;
+
+ /**
+ * @var string The menu url
+ */
+ protected $href = null;
+
+ /**
+ * @var string Tooltip
+ */
+ protected $title = false;
+
+ /**
+ * @var string The string to display if link is clicked
+ */
+ protected $confirm = '';
+
+
+ /**
+ * ElggMenuItem constructor
+ *
+ * @param string $name Identifier of the menu item
+ * @param string $text Display text of the menu item
+ * @param string $href URL of the menu item (false if not a link)
+ */
+ public function __construct($name, $text, $href) {
+ //$this->name = $name;
+ $this->text = $text;
+ if ($href) {
+ $this->href = elgg_normalize_url($href);
+ } else {
+ $this->href = $href;
+ }
+
+ $this->data['name'] = $name;
+ }
+
+ /**
+ * ElggMenuItem factory method
+ *
+ * This static method creates an ElggMenuItem from an associative array.
+ * Required keys are name, text, and href.
+ *
+ * @param array $options Option array of key value pairs
+ *
+ * @return ElggMenuItem or NULL on error
+ */
+ public static function factory($options) {
+ if (!isset($options['name']) || !isset($options['text'])) {
+ return NULL;
+ }
+ if (!isset($options['href'])) {
+ $options['href'] = '';
+ }
+
+ $item = new ElggMenuItem($options['name'], $options['text'], $options['href']);
+ unset($options['name']);
+ unset($options['text']);
+ unset($options['href']);
+
+ // special catch in case someone uses context rather than contexts
+ if (isset($options['context'])) {
+ $options['contexts'] = $options['context'];
+ unset($options['context']);
+ }
+
+ // make sure contexts is set correctly
+ if (isset($options['contexts'])) {
+ $item->setContext($options['contexts']);
+ unset($options['contexts']);
+ }
+
+ if (isset($options['link_class'])) {
+ $item->setLinkClass($options['link_class']);
+ unset($options['link_class']);
+ }
+
+ if (isset($options['item_class'])) {
+ $item->setItemClass($options['item_class']);
+ unset($options['item_class']);
+ }
+
+ if (isset($options['data']) && is_array($options['data'])) {
+ $item->setData($options['data']);
+ unset($options['data']);
+ }
+
+ foreach ($options as $key => $value) {
+ if (isset($item->data[$key])) {
+ $item->data[$key] = $value;
+ } else {
+ $item->$key = $value;
+ }
+ }
+
+ return $item;
+ }
+
+ /**
+ * Set a data key/value pair or a set of key/value pairs
+ *
+ * This method allows storage of arbitrary data with this menu item. The
+ * data can be used for sorting, custom rendering, or any other use.
+ *
+ * @param mixed $key String key or an associative array of key/value pairs
+ * @param mixed $value The value if $key is a string
+ * @return void
+ */
+ public function setData($key, $value = null) {
+ if (is_array($key)) {
+ $this->data += $key;
+ } else {
+ $this->data[$key] = $value;
+ }
+ }
+
+ /**
+ * Get stored data
+ *
+ * @param string $key The key for the requested key/value pair
+ * @return mixed
+ */
+ public function getData($key) {
+ if (isset($this->data[$key])) {
+ return $this->data[$key];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Set the identifier of the menu item
+ *
+ * @param string $name Unique identifier
+ * @return void
+ */
+ public function setName($name) {
+ $this->data['name'] = $name;
+ }
+
+ /**
+ * Get the identifier of the menu item
+ *
+ * @return string
+ */
+ public function getName() {
+ return $this->data['name'];
+ }
+
+ /**
+ * Set the display text of the menu item
+ *
+ * @param string $text The display text
+ * @return void
+ */
+ public function setText($text) {
+ $this->text = $text;
+ }
+
+ /**
+ * Get the display text of the menu item
+ *
+ * @return string
+ */
+ public function getText() {
+ return $this->text;
+ }
+
+ /**
+ * Set the URL of the menu item
+ *
+ * @param string $href URL or false if not a link
+ * @return void
+ */
+ public function setHref($href) {
+ $this->href = $href;
+ }
+
+ /**
+ * Get the URL of the menu item
+ *
+ * @return string
+ */
+ public function getHref() {
+ return $this->href;
+ }
+
+ /**
+ * Set the contexts that this menu item is available for
+ *
+ * @param array $contexts An array of context strings
+ * @return void
+ */
+ public function setContext($contexts) {
+ if (is_string($contexts)) {
+ $contexts = array($contexts);
+ }
+ $this->data['contexts'] = $contexts;
+ }
+
+ /**
+ * Get an array of context strings
+ *
+ * @return array
+ */
+ public function getContext() {
+ return $this->data['contexts'];
+ }
+
+ /**
+ * Should this menu item be used given the current context
+ *
+ * @param string $context A context string (default is empty string for
+ * current context stack).
+ * @return bool
+ */
+ public function inContext($context = '') {
+ if ($context) {
+ return in_array($context, $this->data['contexts']);
+ }
+
+ if (in_array('all', $this->data['contexts'])) {
+ return true;
+ }
+
+ foreach ($this->data['contexts'] as $context) {
+ if (elgg_in_context($context)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Set the selected flag
+ *
+ * @param bool $state Selected state (default is true)
+ * @return void
+ */
+ public function setSelected($state = true) {
+ $this->data['selected'] = $state;
+ }
+
+ /**
+ * Get selected state
+ *
+ * @return bool
+ */
+ public function getSelected() {
+ return $this->data['selected'];
+ }
+
+ /**
+ * Set the tool tip text
+ *
+ * @param string $text The text of the tool tip
+ * @return void
+ */
+ public function setTooltip($text) {
+ $this->title = $text;
+ }
+
+ /**
+ * Get the tool tip text
+ *
+ * @return string
+ */
+ public function getTooltip() {
+ return $this->title;
+ }
+
+ /**
+ * Set the confirm text shown when link is clicked
+ *
+ * @param string $text The text to show
+ * @return void
+ */
+ public function setConfirmText($text) {
+ $this->confirm = $text;
+ }
+
+ /**
+ * Get the confirm text
+ *
+ * @return string
+ */
+ public function getConfirmText() {
+ return $this->confirm;
+ }
+
+ /**
+ * Set the anchor class
+ *
+ * @param mixed $class An array of class names, or a single string class name.
+ * @return void
+ */
+ public function setLinkClass($class) {
+ if (!is_array($class)) {
+ $this->data['linkClass'] = array($class);
+ } else {
+ $this->data['linkClass'] = $class;
+ }
+ }
+
+ /**
+ * Get the anchor classes as text
+ *
+ * @return string
+ */
+ public function getLinkClass() {
+ return implode(' ', $this->data['linkClass']);
+ }
+
+ /**
+ * Add a link class
+ *
+ * @param mixed $class An array of class names, or a single string class name.
+ * @return void
+ */
+ public function addLinkClass($class) {
+ if (!is_array($class)) {
+ $this->data['linkClass'][] = $class;
+ } else {
+ $this->data['linkClass'] += $class;
+ }
+ }
+
+ /**
+ * Set the li classes
+ *
+ * @param mixed $class An array of class names, or a single string class name.
+ * @return void
+ */
+ public function setItemClass($class) {
+ if (!is_array($class)) {
+ $this->data['itemClass'] = array($class);
+ } else {
+ $this->data['itemClass'] = $class;
+ }
+ }
+
+ /**
+ * Get the li classes as text
+ *
+ * @return string
+ */
+ public function getItemClass() {
+ // allow people to specify name with underscores and colons
+ $name = strtolower($this->getName());
+ $name = str_replace('_', '-', $name);
+ $name = str_replace(':', '-', $name);
+ $name = str_replace(' ', '-', $name);
+
+ $class = implode(' ', $this->data['itemClass']);
+ if ($class) {
+ return "elgg-menu-item-$name $class";
+ } else {
+ return "elgg-menu-item-$name";
+ }
+ }
+
+ /**
+ * Set the priority of the menu item
+ *
+ * @param int $priority The smaller numbers mean higher priority (1 before 100)
+ * @return void
+ * @deprecated
+ */
+ public function setWeight($priority) {
+ $this->data['priority'] = $priority;
+ }
+
+ /**
+ * Get the priority of the menu item
+ *
+ * @return int
+ * @deprecated
+ */
+ public function getWeight() {
+ return $this->data['priority'];
+ }
+
+ /**
+ * Set the priority of the menu item
+ *
+ * @param int $priority The smaller numbers mean higher priority (1 before 100)
+ * @return void
+ */
+ public function setPriority($priority) {
+ $this->data['priority'] = $priority;
+ }
+
+ /**
+ * Get the priority of the menu item
+ *
+ * @return int
+ */
+ public function getPriority() {
+ return $this->data['priority'];
+ }
+
+ /**
+ * Set the section identifier
+ *
+ * @param string $section The identifier of the section
+ * @return void
+ */
+ public function setSection($section) {
+ $this->data['section'] = $section;
+ }
+
+ /**
+ * Get the section identifier
+ *
+ * @return string
+ */
+ public function getSection() {
+ return $this->data['section'];
+ }
+
+ /**
+ * Set the parent identifier
+ *
+ * @param string $name The identifier of the parent ElggMenuItem
+ * @return void
+ */
+ public function setParentName($name) {
+ $this->data['parent_name'] = $name;
+ }
+
+ /**
+ * Get the parent identifier
+ *
+ * @return string
+ */
+ public function getParentName() {
+ return $this->data['parent_name'];
+ }
+
+ /**
+ * Set the parent menu item
+ *
+ * @param ElggMenuItem $parent The parent of this menu item
+ * @return void
+ */
+ public function setParent($parent) {
+ $this->data['parent'] = $parent;
+ }
+
+ /**
+ * Get the parent menu item
+ *
+ * @return ElggMenuItem or null
+ */
+ public function getParent() {
+ return $this->data['parent'];
+ }
+
+ /**
+ * Add a child menu item
+ *
+ * @param ElggMenuItem $item A child menu item
+ * @return void
+ */
+ public function addChild($item) {
+ $this->data['children'][] = $item;
+ }
+
+ /**
+ * Set the menu item's children
+ *
+ * @param array $children Array of ElggMenuItems
+ * @return void
+ */
+ public function setChildren($children) {
+ $this->data['children'] = $children;
+ }
+
+ /**
+ * Get the children menu items
+ *
+ * @return array
+ */
+ public function getChildren() {
+ return $this->data['children'];
+ }
+
+ /**
+ * Sort the children
+ *
+ * @param string $sortFunction A function that is passed to usort()
+ * @return void
+ */
+ public function sortChildren($sortFunction) {
+ foreach ($this->data['children'] as $key => $node) {
+ $this->data['children'][$key]->data['original_order'] = $key;
+ }
+ usort($this->data['children'], $sortFunction);
+ }
+
+ /**
+ * Get the menu item content (usually a link)
+ *
+ * @param array $vars Options to pass to output/url if a link
+ * @return string
+ * @todo View code in a model. How do we feel about that?
+ */
+ public function getContent(array $vars = array()) {
+
+ if ($this->href === false) {
+ return $this->text;
+ }
+
+ $defaults = get_object_vars($this);
+ unset($defaults['data']);
+
+ $vars += $defaults;
+
+ if ($this->data['linkClass']) {
+ if (isset($vars['class'])) {
+ $vars['class'] = $vars['class'] . ' ' . $this->getLinkClass();
+ } else {
+ $vars['class'] = $this->getLinkClass();
+ }
+ }
+
+ if (!isset($vars['rel']) && !isset($vars['is_trusted'])) {
+ $vars['is_trusted'] = true;
+ }
+
+ if ($this->confirm) {
+ $vars['confirm'] = $this->confirm;
+ return elgg_view('output/confirmlink', $vars);
+ } else {
+ unset($vars['confirm']);
+ }
+
+ return elgg_view('output/url', $vars);
+ }
+}
diff --git a/engine/classes/ElggMetadata.php b/engine/classes/ElggMetadata.php
new file mode 100644
index 000000000..3a8e2d817
--- /dev/null
+++ b/engine/classes/ElggMetadata.php
@@ -0,0 +1,158 @@
+<?php
+
+/**
+ * ElggMetadata
+ * This class describes metadata that can be attached to ElggEntities.
+ *
+ * @package Elgg.Core
+ * @subpackage Metadata
+ *
+ * @property string $value_type
+ * @property int $owner_guid
+ * @property string $enabled
+ */
+class ElggMetadata extends ElggExtender {
+
+ /**
+ * (non-PHPdoc)
+ *
+ * @see ElggData::initializeAttributes()
+ *
+ * @return void
+ */
+ protected function initializeAttributes() {
+ parent::initializeAttributes();
+
+ $this->attributes['type'] = "metadata";
+ }
+
+ /**
+ * Construct a metadata object
+ *
+ * @param mixed $id ID of metadata or a database row as stdClass object
+ */
+ function __construct($id = null) {
+ $this->initializeAttributes();
+
+ if (!empty($id)) {
+ // Create from db row
+ if ($id instanceof stdClass) {
+ $metadata = $id;
+
+ $objarray = (array) $metadata;
+ foreach ($objarray as $key => $value) {
+ $this->attributes[$key] = $value;
+ }
+ } else {
+ // get an ElggMetadata object and copy its attributes
+ $metadata = elgg_get_metadata_from_id($id);
+ $this->attributes = $metadata->attributes;
+ }
+ }
+ }
+
+ /**
+ * Determines whether or not the user can edit this piece of metadata
+ *
+ * @param int $user_guid The GUID of the user (defaults to currently logged in user)
+ *
+ * @return bool Depending on permissions
+ */
+ function canEdit($user_guid = 0) {
+ if ($entity = get_entity($this->get('entity_guid'))) {
+ return $entity->canEditMetadata($this, $user_guid);
+ }
+ return false;
+ }
+
+ /**
+ * Save metadata object
+ *
+ * @return int|bool the metadata object id or true if updated
+ *
+ * @throws IOException
+ */
+ function save() {
+ if ($this->id > 0) {
+ return update_metadata($this->id, $this->name, $this->value,
+ $this->value_type, $this->owner_guid, $this->access_id);
+ } else {
+ $this->id = create_metadata($this->entity_guid, $this->name, $this->value,
+ $this->value_type, $this->owner_guid, $this->access_id);
+
+ if (!$this->id) {
+ throw new IOException(elgg_echo('IOException:UnableToSaveNew', array(get_class())));
+ }
+ return $this->id;
+ }
+ }
+
+ /**
+ * Delete the metadata
+ *
+ * @return bool
+ */
+ function delete() {
+ $success = elgg_delete_metastring_based_object_by_id($this->id, 'metadata');
+ if ($success) {
+ // we mark unknown here because this deletes only one value
+ // under this name, and there may be others remaining.
+ elgg_get_metadata_cache()->markUnknown($this->entity_guid, $this->name);
+ }
+ return $success;
+ }
+
+ /**
+ * Disable the metadata
+ *
+ * @return bool
+ * @since 1.8
+ */
+ function disable() {
+ $success = elgg_set_metastring_based_object_enabled_by_id($this->id, 'no', 'metadata');
+ if ($success) {
+ // we mark unknown here because this disables only one value
+ // under this name, and there may be others remaining.
+ elgg_get_metadata_cache()->markUnknown($this->entity_guid, $this->name);
+ }
+ return $success;
+ }
+
+ /**
+ * Enable the metadata
+ *
+ * @return bool
+ * @since 1.8
+ */
+ function enable() {
+ $success = elgg_set_metastring_based_object_enabled_by_id($this->id, 'yes', 'metadata');
+ if ($success) {
+ elgg_get_metadata_cache()->markUnknown($this->entity_guid, $this->name);
+ }
+ return $success;
+ }
+
+ /**
+ * Get a url for this item of metadata.
+ *
+ * @return string
+ */
+ public function getURL() {
+ return get_metadata_url($this->id);
+ }
+
+ // SYSTEM LOG INTERFACE ////////////////////////////////////////////////////////////
+
+ /**
+ * For a given ID, return the object associated with it.
+ * This is used by the river functionality primarily.
+ * This is useful for checking access permissions etc on objects.
+ *
+ * @param int $id Metadata ID
+ *
+ * @return ElggMetadata
+ */
+ public function getObjectFromID($id) {
+ return elgg_get_metadata_from_id($id);
+ }
+}
diff --git a/engine/classes/ElggObject.php b/engine/classes/ElggObject.php
new file mode 100644
index 000000000..aeaa3ba5c
--- /dev/null
+++ b/engine/classes/ElggObject.php
@@ -0,0 +1,216 @@
+<?php
+/**
+ * Elgg Object
+ *
+ * Elgg objects are the most common means of storing information in the database.
+ * They are a child class of ElggEntity, so receive all the benefits of the Entities,
+ * but also include a title and description field.
+ *
+ * An ElggObject represents a row from the objects_entity table, as well
+ * as the related row in the entities table as represented by the parent
+ * ElggEntity object.
+ *
+ * @internal Title and description are stored in the objects_entity table.
+ *
+ * @package Elgg.Core
+ * @subpackage DataModel.Object
+ *
+ * @property string $title The title, name, or summary of this object
+ * @property string $description The body, description, or content of the object
+ * @property array $tags Array of tags that describe the object
+ */
+class ElggObject extends ElggEntity {
+
+ /**
+ * Initialise the attributes array to include the type,
+ * title, and description.
+ *
+ * @return void
+ */
+ protected function initializeAttributes() {
+ parent::initializeAttributes();
+
+ $this->attributes['type'] = "object";
+ $this->attributes['title'] = NULL;
+ $this->attributes['description'] = NULL;
+ $this->attributes['tables_split'] = 2;
+ }
+
+ /**
+ * Load or create a new ElggObject.
+ *
+ * If no arguments are passed, create a new entity.
+ *
+ * If an argument is passed, attempt to load a full ElggObject entity.
+ * Arguments can be:
+ * - The GUID of an object entity.
+ * - A DB result object from the entities table with a guid property
+ *
+ * @param mixed $guid If an int, load that GUID. If a db row, then will attempt to
+ * load the rest of the data.
+ *
+ * @throws IOException If passed an incorrect guid
+ * @throws InvalidParameterException If passed an Elgg* Entity that isn't an ElggObject
+ */
+ function __construct($guid = null) {
+ $this->initializeAttributes();
+
+ // compatibility for 1.7 api.
+ $this->initialise_attributes(false);
+
+ if (!empty($guid)) {
+ // Is $guid is a DB row from the entity table
+ if ($guid instanceof stdClass) {
+ // Load the rest
+ if (!$this->load($guid)) {
+ $msg = elgg_echo('IOException:FailedToLoadGUID', array(get_class(), $guid->guid));
+ throw new IOException($msg);
+ }
+ } else if ($guid instanceof ElggObject) {
+ // $guid is an ElggObject so this is a copy constructor
+ elgg_deprecated_notice('This type of usage of the ElggObject constructor was deprecated. Please use the clone method.', 1.7);
+
+ foreach ($guid->attributes as $key => $value) {
+ $this->attributes[$key] = $value;
+ }
+ } else if ($guid instanceof ElggEntity) {
+ // @todo remove - do not need separate exception
+ throw new InvalidParameterException(elgg_echo('InvalidParameterException:NonElggObject'));
+ } else if (is_numeric($guid)) {
+ // $guid is a GUID so load
+ if (!$this->load($guid)) {
+ throw new IOException(elgg_echo('IOException:FailedToLoadGUID', array(get_class(), $guid)));
+ }
+ } else {
+ throw new InvalidParameterException(elgg_echo('InvalidParameterException:UnrecognisedValue'));
+ }
+ }
+ }
+
+ /**
+ * Loads the full ElggObject when given a guid.
+ *
+ * @param mixed $guid GUID of an ElggObject or the stdClass object from entities table
+ *
+ * @return bool
+ * @throws InvalidClassException
+ */
+ protected function load($guid) {
+ $attr_loader = new ElggAttributeLoader(get_class(), 'object', $this->attributes);
+ $attr_loader->requires_access_control = !($this instanceof ElggPlugin);
+ $attr_loader->secondary_loader = 'get_object_entity_as_row';
+
+ $attrs = $attr_loader->getRequiredAttributes($guid);
+ if (!$attrs) {
+ return false;
+ }
+
+ $this->attributes = $attrs;
+ $this->attributes['tables_loaded'] = 2;
+ _elgg_cache_entity($this);
+
+ return true;
+ }
+
+ /**
+ * Saves object-specific attributes.
+ *
+ * @internal Object attributes are saved in the objects_entity table.
+ *
+ * @return bool
+ */
+ public function save() {
+ // Save ElggEntity attributes
+ if (!parent::save()) {
+ return false;
+ }
+
+ // Save ElggObject-specific attributes
+
+ _elgg_disable_caching_for_entity($this->guid);
+ $ret = create_object_entity($this->get('guid'), $this->get('title'), $this->get('description'));
+ _elgg_enable_caching_for_entity($this->guid);
+
+ return $ret;
+ }
+
+ /**
+ * Return sites that this object is a member of
+ *
+ * Site membership is determined by relationships and not site_guid.d
+ *
+ * @todo This should be moved to ElggEntity
+ * @todo Unimplemented
+ *
+ * @param string $subtype Optionally, the subtype of result we want to limit to
+ * @param int $limit The number of results to return
+ * @param int $offset Any indexing offset
+ *
+ * @return array|false
+ */
+ function getSites($subtype = "", $limit = 10, $offset = 0) {
+ return get_site_objects($this->getGUID(), $subtype, $limit, $offset);
+ }
+
+ /**
+ * Add this object to a site
+ *
+ * @param int $site_guid The guid of the site to add it to
+ *
+ * @return bool
+ */
+ function addToSite($site_guid) {
+ return add_site_object($this->getGUID(), $site_guid);
+ }
+
+ /*
+ * EXPORTABLE INTERFACE
+ */
+
+ /**
+ * Return an array of fields which can be exported.
+ *
+ * @return array
+ */
+ public function getExportableValues() {
+ return array_merge(parent::getExportableValues(), array(
+ 'title',
+ 'description',
+ ));
+ }
+
+ /**
+ * Can a user comment on this object?
+ *
+ * @see ElggEntity::canComment()
+ *
+ * @param int $user_guid User guid (default is logged in user)
+ * @return bool
+ * @since 1.8.0
+ */
+ public function canComment($user_guid = 0) {
+ $result = parent::canComment($user_guid);
+ if ($result !== null) {
+ return $result;
+ }
+
+ if ($user_guid == 0) {
+ $user_guid = elgg_get_logged_in_user_guid();
+ }
+
+ // must be logged in to comment
+ if (!$user_guid) {
+ return false;
+ }
+
+ // must be member of group
+ if (elgg_instanceof($this->getContainerEntity(), 'group')) {
+ if (!$this->getContainerEntity()->canWriteToContainer($user_guid)) {
+ return false;
+ }
+ }
+
+ // no checks on read access since a user cannot see entities outside his access
+ return true;
+ }
+}
diff --git a/engine/classes/ElggPAM.php b/engine/classes/ElggPAM.php
new file mode 100644
index 000000000..f07095fc1
--- /dev/null
+++ b/engine/classes/ElggPAM.php
@@ -0,0 +1,105 @@
+<?php
+/**
+ * ElggPAM Pluggable Authentication Module
+ *
+ * @package Elgg.Core
+ * @subpackage Authentication
+ */
+class ElggPAM {
+ /**
+ * @var string PAM policy type: user, api or plugin-defined policies
+ */
+ protected $policy;
+
+ /**
+ * @var array Failure mesages
+ */
+ protected $messages;
+
+ /**
+ * ElggPAM constructor
+ *
+ * @param string $policy PAM policy type: user, api, or plugin-defined policies
+ */
+ public function __construct($policy) {
+ $this->policy = $policy;
+ $this->messages = array('sufficient' => array(), 'required' => array());
+ }
+
+ /**
+ * Authenticate a set of credentials against a policy
+ * This function will process all registered PAM handlers or stop when the first
+ * handler fails. A handler fails by either returning false or throwing an
+ * exception. The advantage of throwing an exception is that it returns a message
+ * that can be passed to the user. The processing order of the handlers is
+ * determined by the order that they were registered.
+ *
+ * If $credentials are provided, the PAM handler should authenticate using the
+ * provided credentials. If not, then credentials should be prompted for or
+ * otherwise retrieved (eg from the HTTP header or $_SESSION).
+ *
+ * @param array $credentials Credentials array dependant on policy type
+ * @return bool
+ */
+ public function authenticate($credentials = array()) {
+ global $_PAM_HANDLERS;
+
+ if (!isset($_PAM_HANDLERS[$this->policy]) ||
+ !is_array($_PAM_HANDLERS[$this->policy])) {
+ return false;
+ }
+
+ $authenticated = false;
+
+ foreach ($_PAM_HANDLERS[$this->policy] as $k => $v) {
+ $handler = $v->handler;
+ if (!is_callable($handler)) {
+ continue;
+ }
+ /* @var callable $handler */
+
+ $importance = $v->importance;
+
+ try {
+ // Execute the handler
+ // @todo don't assume $handler is a global function
+ $result = call_user_func($handler, $credentials);
+ if ($result) {
+ $authenticated = true;
+ } elseif ($result === false) {
+ if ($importance == 'required') {
+ $this->messages['required'][] = "$handler:failed";
+ return false;
+ } else {
+ $this->messages['sufficient'][] = "$handler:failed";
+ }
+ }
+ } catch (Exception $e) {
+ if ($importance == 'required') {
+ $this->messages['required'][] = $e->getMessage();
+ return false;
+ } else {
+ $this->messages['sufficient'][] = $e->getMessage();
+ }
+ }
+ }
+
+ return $authenticated;
+ }
+
+ /**
+ * Get a failure message to display to user
+ *
+ * @return string
+ */
+ public function getFailureMessage() {
+ $message = elgg_echo('auth:nopams');
+ if (!empty($this->messages['required'])) {
+ $message = $this->messages['required'][0];
+ } elseif (!empty($this->messages['sufficient'])) {
+ $message = $this->messages['sufficient'][0];
+ }
+
+ return elgg_trigger_plugin_hook('fail', 'auth', $this->messages, $message);
+ }
+}
diff --git a/engine/classes/ElggPlugin.php b/engine/classes/ElggPlugin.php
new file mode 100644
index 000000000..545b9a53c
--- /dev/null
+++ b/engine/classes/ElggPlugin.php
@@ -0,0 +1,1006 @@
+<?php
+/**
+ * Stores site-side plugin settings as private data.
+ *
+ * This class is currently a stub, allowing a plugin to
+ * save settings in an object's private settings for each site.
+ *
+ * @package Elgg.Core
+ * @subpackage Plugins.Settings
+ */
+class ElggPlugin extends ElggObject {
+ private $package;
+ private $manifest;
+
+ private $path;
+ private $pluginID;
+ private $errorMsg = '';
+
+ /**
+ * Set subtype to 'plugin'
+ *
+ * @return void
+ */
+ protected function initializeAttributes() {
+ parent::initializeAttributes();
+
+ $this->attributes['subtype'] = "plugin";
+
+ // plugins must be public.
+ $this->access_id = ACCESS_PUBLIC;
+ }
+
+ /**
+ * Loads the plugin by GUID or path.
+ *
+ * @warning Unlike other ElggEntity objects, you cannot null instantiate
+ * ElggPlugin. You must point it to an actual plugin GUID or location.
+ *
+ * @param mixed $plugin The GUID of the ElggPlugin object or the path of the plugin to load.
+ *
+ * @throws PluginException
+ */
+ public function __construct($plugin) {
+ if (!$plugin) {
+ throw new PluginException(elgg_echo('PluginException:NullInstantiated'));
+ }
+
+ // ElggEntity can be instantiated with a guid or an object.
+ // @todo plugins w/id 12345
+ if (is_numeric($plugin) || is_object($plugin)) {
+ parent::__construct($plugin);
+ $this->path = elgg_get_plugins_path() . $this->getID();
+ } else {
+ $plugin_path = elgg_get_plugins_path();
+
+ // not a full path, so assume an id
+ // use the default path
+ if (strpos($plugin, $plugin_path) !== 0) {
+ $plugin = $plugin_path . $plugin;
+ }
+
+ // path checking is done in the package
+ $plugin = sanitise_filepath($plugin);
+ $this->path = $plugin;
+ $path_parts = explode('/', rtrim($plugin, '/'));
+ $plugin_id = array_pop($path_parts);
+ $this->pluginID = $plugin_id;
+
+ // check if we're loading an existing plugin
+ $existing_plugin = elgg_get_plugin_from_id($this->pluginID);
+ $existing_guid = null;
+
+ if ($existing_plugin) {
+ $existing_guid = $existing_plugin->guid;
+ }
+
+ // load the rest of the plugin
+ parent::__construct($existing_guid);
+ }
+
+ _elgg_cache_plugin_by_id($this);
+ }
+
+ /**
+ * Save the plugin object. Make sure required values exist.
+ *
+ * @see ElggObject::save()
+ * @return bool
+ */
+ public function save() {
+ // own by the current site so users can be deleted without affecting plugins
+ $site = get_config('site');
+ $this->attributes['site_guid'] = $site->guid;
+ $this->attributes['owner_guid'] = $site->guid;
+ $this->attributes['container_guid'] = $site->guid;
+ $this->attributes['title'] = $this->pluginID;
+
+ if (parent::save()) {
+ // make sure we have a priority
+ $priority = $this->getPriority();
+ if ($priority === FALSE || $priority === NULL) {
+ return $this->setPriority('last');
+ }
+ } else {
+ return false;
+ }
+ }
+
+
+ // Plugin ID and path
+
+ /**
+ * Returns the ID (dir name) of this plugin
+ *
+ * @return string
+ */
+ public function getID() {
+ return $this->title;
+ }
+
+ /**
+ * Returns the manifest's name if available, otherwise the ID.
+ *
+ * @return string
+ * @since 1.8.1
+ */
+ public function getFriendlyName() {
+ $manifest = $this->getManifest();
+ if ($manifest) {
+ return $manifest->getName();
+ }
+
+ return $this->getID();
+ }
+
+ /**
+ * Returns the plugin's full path with trailing slash.
+ *
+ * @return string
+ */
+ public function getPath() {
+ return sanitise_filepath($this->path);
+ }
+
+ /**
+ * Sets the location of this plugin.
+ *
+ * @param string $id The path to the plugin's dir.
+ * @return bool
+ */
+ public function setID($id) {
+ return $this->attributes['title'] = $id;
+ }
+
+ /**
+ * Returns an array of available markdown files for this plugin
+ *
+ * @return array
+ */
+ public function getAvailableTextFiles() {
+ $filenames = $this->getPackage()->getTextFilenames();
+
+ $files = array();
+ foreach ($filenames as $filename) {
+ if ($this->canReadFile($filename)) {
+ $files[$filename] = "$this->path/$filename";
+ }
+ }
+
+ return $files;
+ }
+
+ // Load Priority
+
+ /**
+ * Gets the plugin's load priority.
+ *
+ * @return int
+ */
+ public function getPriority() {
+ $name = elgg_namespace_plugin_private_setting('internal', 'priority');
+ return $this->$name;
+ }
+
+ /**
+ * Sets the priority of the plugin
+ *
+ * @param mixed $priority The priority to set. One of +1, -1, first, last, or a number.
+ * If given a number, this will displace all plugins at that number
+ * and set their priorities +1
+ * @param mixed $site_guid Optional site GUID.
+ * @return bool
+ */
+ public function setPriority($priority, $site_guid = null) {
+ if (!$this->guid) {
+ return false;
+ }
+
+ $db_prefix = get_config('dbprefix');
+ $name = elgg_namespace_plugin_private_setting('internal', 'priority');
+ // if no priority assume a priority of 1
+ $old_priority = (int) $this->getPriority();
+ $old_priority = (!$old_priority) ? 1 : $old_priority;
+ $max_priority = elgg_get_max_plugin_priority();
+
+ // can't use switch here because it's not strict and
+ // php evaluates +1 == 1
+ if ($priority === '+1') {
+ $priority = $old_priority + 1;
+ } elseif ($priority === '-1') {
+ $priority = $old_priority - 1;
+ } elseif ($priority === 'first') {
+ $priority = 1;
+ } elseif ($priority === 'last') {
+ $priority = $max_priority;
+ }
+
+ // should be a number by now
+ if ($priority > 0) {
+ if (!is_numeric($priority)) {
+ return false;
+ }
+
+ // there's nothing above the max.
+ if ($priority > $max_priority) {
+ $priority = $max_priority;
+ }
+
+ // there's nothing below 1.
+ if ($priority < 1) {
+ $priority = 1;
+ }
+
+ if ($priority > $old_priority) {
+ $op = '-';
+ $where = "CAST(value as unsigned) BETWEEN $old_priority AND $priority";
+ } else {
+ $op = '+';
+ $where = "CAST(value as unsigned) BETWEEN $priority AND $old_priority";
+ }
+
+ // displace the ones affected by this change
+ $q = "UPDATE {$db_prefix}private_settings
+ SET value = CAST(value as unsigned) $op 1
+ WHERE entity_guid != $this->guid
+ AND name = '$name'
+ AND $where";
+
+ if (!update_data($q)) {
+ return false;
+ }
+
+ // set this priority
+ if ($this->set($name, $priority)) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ return false;
+ }
+
+
+ // Plugin settings
+
+ /**
+ * Returns a plugin setting
+ *
+ * @param string $name The setting name
+ * @return mixed
+ */
+ public function getSetting($name) {
+ return $this->$name;
+ }
+
+ /**
+ * Returns an array of all settings saved for this plugin.
+ *
+ * @note Unlike user settings, plugin settings are not namespaced.
+ *
+ * @return array An array of key/value pairs.
+ */
+ public function getAllSettings() {
+ if (!$this->guid) {
+ return false;
+ }
+
+ $db_prefix = elgg_get_config('dbprefix');
+ // need to remove all namespaced private settings.
+ $us_prefix = elgg_namespace_plugin_private_setting('user_setting', '', $this->getID());
+ $is_prefix = elgg_namespace_plugin_private_setting('internal', '', $this->getID());
+
+ // Get private settings for user
+ $q = "SELECT * FROM {$db_prefix}private_settings
+ WHERE entity_guid = $this->guid
+ AND name NOT LIKE '$us_prefix%'
+ AND name NOT LIKE '$is_prefix%'";
+
+ $private_settings = get_data($q);
+
+ $return = array();
+
+ if ($private_settings) {
+ foreach ($private_settings as $setting) {
+ $return[$setting->name] = $setting->value;
+ }
+ }
+
+ return $return;
+ }
+
+ /**
+ * Set a plugin setting for the plugin
+ *
+ * @todo This will only work once the plugin has a GUID.
+ *
+ * @param string $name The name to set
+ * @param string $value The value to set
+ *
+ * @return bool
+ */
+ public function setSetting($name, $value) {
+ if (!$this->guid) {
+ return false;
+ }
+
+ return $this->set($name, $value);
+ }
+
+ /**
+ * Removes a plugin setting name and value.
+ *
+ * @param string $name The setting name to remove
+ *
+ * @return bool
+ */
+ public function unsetSetting($name) {
+ return remove_private_setting($this->guid, $name);
+ }
+
+ /**
+ * Removes all settings for this plugin.
+ *
+ * @todo Should be a better way to do this without dropping to raw SQL.
+ * @todo If we could namespace the plugin settings this would be cleaner.
+ * @return bool
+ */
+ public function unsetAllSettings() {
+ $db_prefix = get_config('dbprefix');
+
+ $us_prefix = elgg_namespace_plugin_private_setting('user_setting', '', $this->getID());
+ $is_prefix = elgg_namespace_plugin_private_setting('internal', '', $this->getID());
+
+ $q = "DELETE FROM {$db_prefix}private_settings
+ WHERE entity_guid = $this->guid
+ AND name NOT LIKE '$us_prefix%'
+ AND name NOT LIKE '$is_prefix%'";
+
+ return delete_data($q);
+ }
+
+
+ // User settings
+
+ /**
+ * Returns a user's setting for this plugin
+ *
+ * @param string $name The setting name
+ * @param int $user_guid The user GUID
+ *
+ * @return mixed The setting string value or false
+ */
+ public function getUserSetting($name, $user_guid = null) {
+ $user_guid = (int)$user_guid;
+
+ if ($user_guid) {
+ $user = get_entity($user_guid);
+ } else {
+ $user = elgg_get_logged_in_user_entity();
+ }
+
+ if (!($user instanceof ElggUser)) {
+ return false;
+ }
+
+ $name = elgg_namespace_plugin_private_setting('user_setting', $name, $this->getID());
+ return get_private_setting($user->guid, $name);
+ }
+
+ /**
+ * Returns an array of all user settings saved for this plugin for the user.
+ *
+ * @note Plugin settings are saved with a prefix. This removes that prefix.
+ *
+ * @param int $user_guid The user GUID. Defaults to logged in.
+ * @return array An array of key/value pairs.
+ */
+ public function getAllUserSettings($user_guid = null) {
+ $user_guid = (int)$user_guid;
+
+ if ($user_guid) {
+ $user = get_entity($user_guid);
+ } else {
+ $user = elgg_get_logged_in_user_entity();
+ }
+
+ if (!($user instanceof ElggUser)) {
+ return false;
+ }
+
+ $db_prefix = elgg_get_config('dbprefix');
+ // send an empty name so we just get the first part of the namespace
+ $ps_prefix = elgg_namespace_plugin_private_setting('user_setting', '', $this->getID());
+ $ps_prefix_len = strlen($ps_prefix);
+
+ // Get private settings for user
+ $q = "SELECT * FROM {$db_prefix}private_settings
+ WHERE entity_guid = {$user->guid}
+ AND name LIKE '$ps_prefix%'";
+
+ $private_settings = get_data($q);
+
+ $return = array();
+
+ if ($private_settings) {
+ foreach ($private_settings as $setting) {
+ $name = substr($setting->name, $ps_prefix_len);
+ $value = $setting->value;
+
+ $return[$name] = $value;
+ }
+ }
+
+ return $return;
+ }
+
+ /**
+ * Sets a user setting for a plugin
+ *
+ * @param string $name The setting name
+ * @param string $value The setting value
+ * @param int $user_guid The user GUID
+ *
+ * @return mixed The new setting ID or false
+ */
+ public function setUserSetting($name, $value, $user_guid = null) {
+ $user_guid = (int)$user_guid;
+
+ if ($user_guid) {
+ $user = get_entity($user_guid);
+ } else {
+ $user = elgg_get_logged_in_user_entity();
+ }
+
+ if (!($user instanceof ElggUser)) {
+ return false;
+ }
+
+ // Hook to validate setting
+ // note: this doesn't pass the namespaced name
+ $value = elgg_trigger_plugin_hook('usersetting', 'plugin', array(
+ 'user' => $user,
+ 'plugin' => $this,
+ 'plugin_id' => $this->getID(),
+ 'name' => $name,
+ 'value' => $value
+ ), $value);
+
+ // set the namespaced name.
+ $name = elgg_namespace_plugin_private_setting('user_setting', $name, $this->getID());
+
+ return set_private_setting($user->guid, $name, $value);
+ }
+
+
+ /**
+ * Removes a user setting name and value.
+ *
+ * @param string $name The user setting name
+ * @param int $user_guid The user GUID
+ * @return bool
+ */
+ public function unsetUserSetting($name, $user_guid = null) {
+ $user_guid = (int)$user_guid;
+
+ if ($user_guid) {
+ $user = get_entity($user_guid);
+ } else {
+ $user = elgg_get_logged_in_user_entity();
+ }
+
+ if (!($user instanceof ElggUser)) {
+ return false;
+ }
+
+ // set the namespaced name.
+ $name = elgg_namespace_plugin_private_setting('user_setting', $name, $this->getID());
+
+ return remove_private_setting($user->guid, $name);
+ }
+
+ /**
+ * Removes all User Settings for this plugin
+ *
+ * Use {@link removeAllUsersSettings()} to remove all user
+ * settings for all users. (Note the plural 'Users'.)
+ *
+ * @param int $user_guid The user GUID to remove user settings.
+ * @return bool
+ */
+ public function unsetAllUserSettings($user_guid) {
+ $db_prefix = get_config('dbprefix');
+ $ps_prefix = elgg_namespace_plugin_private_setting('user_setting', '', $this->getID());
+
+ $q = "DELETE FROM {$db_prefix}private_settings
+ WHERE entity_guid = $user_guid
+ AND name LIKE '$ps_prefix%'";
+
+ return delete_data($q);
+ }
+
+ /**
+ * Removes this plugin's user settings for all users.
+ *
+ * Use {@link removeAllUserSettings()} if you just want to remove
+ * settings for a single user.
+ *
+ * @return bool
+ */
+ public function unsetAllUsersSettings() {
+ $db_prefix = get_config('dbprefix');
+ $ps_prefix = elgg_namespace_plugin_private_setting('user_setting', '', $this->getID());
+
+ $q = "DELETE FROM {$db_prefix}private_settings
+ WHERE name LIKE '$ps_prefix%'";
+
+ return delete_data($q);
+ }
+
+
+ // validation
+
+ /**
+ * Returns if the plugin is complete, meaning has all required files
+ * and Elgg can read them and they make sense.
+ *
+ * @todo bad name? This could be confused with isValid() from ElggPluginPackage.
+ *
+ * @return bool
+ */
+ public function isValid() {
+ if (!$this->getID()) {
+ $this->errorMsg = elgg_echo('ElggPlugin:NoId', array($this->guid));
+ return false;
+ }
+
+ if (!$this->getPackage() instanceof ElggPluginPackage) {
+ $this->errorMsg = elgg_echo('ElggPlugin:NoPluginPackagePackage', array($this->getID(), $this->guid));
+ return false;
+ }
+
+ if (!$this->getPackage()->isValid()) {
+ $this->errorMsg = $this->getPackage()->getError();
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Is this plugin active?
+ *
+ * @param int $site_guid Optional site guid.
+ * @return bool
+ */
+ public function isActive($site_guid = null) {
+ if (!$this->guid) {
+ return false;
+ }
+
+ if ($site_guid) {
+ $site = get_entity($site_guid);
+ } else {
+ $site = get_config('site');
+ }
+
+ if (!($site instanceof ElggSite)) {
+ return false;
+ }
+
+ return check_entity_relationship($this->guid, 'active_plugin', $site->guid);
+ }
+
+ /**
+ * Checks if this plugin can be activated on the current
+ * Elgg installation.
+ *
+ * @todo remove $site_guid param or implement it
+ *
+ * @param mixed $site_guid Optional site guid
+ * @return bool
+ */
+ public function canActivate($site_guid = null) {
+ if ($this->getPackage()) {
+ $result = $this->getPackage()->isValid() && $this->getPackage()->checkDependencies();
+ if (!$result) {
+ $this->errorMsg = $this->getPackage()->getError();
+ }
+
+ return $result;
+ }
+
+ return false;
+ }
+
+
+ // activating and deactivating
+
+ /**
+ * Actives the plugin for the current site.
+ *
+ * @param mixed $site_guid Optional site GUID.
+ * @return bool
+ */
+ public function activate($site_guid = null) {
+ if ($this->isActive($site_guid)) {
+ return false;
+ }
+
+ if (!$this->canActivate()) {
+ return false;
+ }
+
+ // set in the db, now perform tasks and emit events
+ if ($this->setStatus(true, $site_guid)) {
+ // emit an event. returning false will make this not be activated.
+ // we need to do this after it's been fully activated
+ // or the deactivate will be confused.
+ $params = array(
+ 'plugin_id' => $this->pluginID,
+ 'plugin_entity' => $this
+ );
+
+ $return = elgg_trigger_event('activate', 'plugin', $params);
+
+ // if there are any on_enable functions, start the plugin now and run them
+ // Note: this will not run re-run the init hooks!
+ if ($return) {
+ if ($this->canReadFile('activate.php')) {
+ $flags = ELGG_PLUGIN_INCLUDE_START | ELGG_PLUGIN_REGISTER_CLASSES |
+ ELGG_PLUGIN_REGISTER_LANGUAGES | ELGG_PLUGIN_REGISTER_VIEWS;
+
+ $this->start($flags);
+
+ $return = $this->includeFile('activate.php');
+ }
+ }
+
+ if ($return === false) {
+ $this->deactivate($site_guid);
+ }
+
+ return $return;
+ }
+
+ return false;
+ }
+
+ /**
+ * Deactivates the plugin.
+ *
+ * @param mixed $site_guid Optional site GUID.
+ * @return bool
+ */
+ public function deactivate($site_guid = null) {
+ if (!$this->isActive($site_guid)) {
+ return false;
+ }
+
+ // emit an event. returning false will cause this to not be deactivated.
+ $params = array(
+ 'plugin_id' => $this->pluginID,
+ 'plugin_entity' => $this
+ );
+
+ $return = elgg_trigger_event('deactivate', 'plugin', $params);
+
+ // run any deactivate code
+ if ($return) {
+ if ($this->canReadFile('deactivate.php')) {
+ $return = $this->includeFile('deactivate.php');
+ }
+ }
+
+ if ($return === false) {
+ return false;
+ } else {
+ return $this->setStatus(false, $site_guid);
+ }
+ }
+
+ /**
+ * Start the plugin.
+ *
+ * @param int $flags Start flags for the plugin. See the constants in lib/plugins.php for details.
+ * @return true
+ * @throws PluginException
+ */
+ public function start($flags) {
+ //if (!$this->canActivate()) {
+ // return false;
+ //}
+
+ // include classes
+ if ($flags & ELGG_PLUGIN_REGISTER_CLASSES) {
+ $this->registerClasses();
+ }
+
+ // include start file
+ if ($flags & ELGG_PLUGIN_INCLUDE_START) {
+ $this->includeFile('start.php');
+ }
+
+ // include views
+ if ($flags & ELGG_PLUGIN_REGISTER_VIEWS) {
+ $this->registerViews();
+ }
+
+ // include languages
+ if ($flags & ELGG_PLUGIN_REGISTER_LANGUAGES) {
+ $this->registerLanguages();
+ }
+
+ return true;
+ }
+
+
+ // start helpers
+
+ /**
+ * Includes one of the plugins files
+ *
+ * @param string $filename The name of the file
+ *
+ * @throws PluginException
+ * @return mixed The return value of the included file (or 1 if there is none)
+ */
+ protected function includeFile($filename) {
+ // This needs to be here to be backwards compatible for 1.0-1.7.
+ // They expect the global config object to be available in start.php.
+ if ($filename == 'start.php') {
+ global $CONFIG;
+ }
+
+ $filepath = "$this->path/$filename";
+
+ if (!$this->canReadFile($filename)) {
+ $msg = elgg_echo('ElggPlugin:Exception:CannotIncludeFile',
+ array($filename, $this->getID(), $this->guid, $this->path));
+ throw new PluginException($msg);
+ }
+
+ return include $filepath;
+ }
+
+ /**
+ * Checks whether a plugin file with the given name exists
+ *
+ * @param string $filename The name of the file
+ * @return bool
+ */
+ protected function canReadFile($filename) {
+ return is_readable($this->path . '/' . $filename);
+ }
+
+ /**
+ * Registers the plugin's views
+ *
+ * @throws PluginException
+ * @return true
+ */
+ protected function registerViews() {
+ $view_dir = "$this->path/views/";
+
+ // plugins don't have to have views.
+ if (!is_dir($view_dir)) {
+ return true;
+ }
+
+ // but if they do, they have to be readable
+ $handle = opendir($view_dir);
+ if (!$handle) {
+ $msg = elgg_echo('ElggPlugin:Exception:CannotRegisterViews',
+ array($this->getID(), $this->guid, $view_dir));
+ throw new PluginException($msg);
+ }
+
+ while (FALSE !== ($view_type = readdir($handle))) {
+ $view_type_dir = $view_dir . $view_type;
+
+ if ('.' !== substr($view_type, 0, 1) && is_dir($view_type_dir)) {
+ if (autoregister_views('', $view_type_dir, $view_dir, $view_type)) {
+ elgg_register_viewtype($view_type);
+ } else {
+ $msg = elgg_echo('ElggPlugin:Exception:CannotRegisterViews',
+ array($this->getID(), $view_type_dir));
+ throw new PluginException($msg);
+ }
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * Registers the plugin's languages
+ *
+ * @throws PluginException
+ * @return true
+ */
+ protected function registerLanguages() {
+ $languages_path = "$this->path/languages";
+
+ // don't need to have classes
+ if (!is_dir($languages_path)) {
+ return true;
+ }
+
+ // but need to have working ones.
+ if (!register_translations($languages_path)) {
+ $msg = elgg_echo('ElggPlugin:Exception:CannotRegisterLanguages',
+ array($this->getID(), $this->guid, $languages_path));
+ throw new PluginException($msg);
+ }
+
+ return true;
+ }
+
+ /**
+ * Registers the plugin's classes
+ *
+ * @throws PluginException
+ * @return true
+ */
+ protected function registerClasses() {
+ $classes_path = "$this->path/classes";
+
+ // don't need to have classes
+ if (!is_dir($classes_path)) {
+ return true;
+ }
+
+ elgg_register_classes($classes_path);
+
+ return true;
+ }
+
+
+ // generic helpers and overrides
+
+ /**
+ * Get a value from private settings.
+ *
+ * @param string $name Name
+ *
+ * @return mixed
+ */
+ public function get($name) {
+ // rewrite for old and inaccurate plugin:setting
+ if (strstr($name, 'plugin:setting:')) {
+ $msg = 'Direct access of user settings is deprecated. Use ElggPlugin->getUserSetting()';
+ elgg_deprecated_notice($msg, 1.8);
+ $name = str_replace('plugin:setting:', '', $name);
+ $name = elgg_namespace_plugin_private_setting('user_setting', $name);
+ }
+
+ // See if its in our base attribute
+ if (array_key_exists($name, $this->attributes)) {
+ return $this->attributes[$name];
+ }
+
+ // No, so see if its in the private data store.
+ // get_private_setting() returns false if it doesn't exist
+ $meta = $this->getPrivateSetting($name);
+
+ if ($meta === false) {
+ // Can't find it, so return null
+ return NULL;
+ }
+
+ return $meta;
+ }
+
+ /**
+ * Save a value as private setting or attribute.
+ *
+ * Attributes include title and description.
+ *
+ * @param string $name Name
+ * @param mixed $value Value
+ *
+ * @return bool
+ */
+ public function set($name, $value) {
+ if (array_key_exists($name, $this->attributes)) {
+ // Check that we're not trying to change the guid!
+ if ((array_key_exists('guid', $this->attributes)) && ($name == 'guid')) {
+ return false;
+ }
+
+ $this->attributes[$name] = $value;
+
+ return true;
+ } else {
+ // Hook to validate setting
+ $value = elgg_trigger_plugin_hook('setting', 'plugin', array(
+ 'plugin_id' => $this->pluginID,
+ 'plugin' => $this,
+ 'name' => $name,
+ 'value' => $value
+ ), $value);
+
+ return $this->setPrivateSetting($name, $value);
+ }
+ }
+
+ /**
+ * Sets the plugin to active or inactive for $site_guid.
+ *
+ * @param bool $active Set to active or inactive
+ * @param mixed $site_guid Int for specific site, null for current site.
+ *
+ * @return bool
+ */
+ private function setStatus($active, $site_guid = null) {
+ if (!$this->guid) {
+ return false;
+ }
+
+ if ($site_guid) {
+ $site = get_entity($site_guid);
+
+ if (!($site instanceof ElggSite)) {
+ return false;
+ }
+ } else {
+ $site = get_config('site');
+ }
+
+ if ($active) {
+ return add_entity_relationship($this->guid, 'active_plugin', $site->guid);
+ } else {
+ return remove_entity_relationship($this->guid, 'active_plugin', $site->guid);
+ }
+ }
+
+ /**
+ * Returns the last error message registered.
+ *
+ * @return string|null
+ */
+ public function getError() {
+ return $this->errorMsg;
+ }
+
+ /**
+ * Returns this plugin's ElggPluginManifest object
+ *
+ * @return ElggPluginManifest
+ */
+ public function getManifest() {
+ if ($this->manifest instanceof ElggPluginManifest) {
+ return $this->manifest;
+ }
+
+ try {
+ $this->manifest = $this->getPackage()->getManifest();
+ } catch (Exception $e) {
+ elgg_log("Failed to load manifest for plugin $this->guid. " . $e->getMessage(), 'WARNING');
+ $this->errorMsg = $e->getmessage();
+ }
+
+ return $this->manifest;
+ }
+
+ /**
+ * Returns this plugin's ElggPluginPackage object
+ *
+ * @return ElggPluginPackage
+ */
+ public function getPackage() {
+ if ($this->package instanceof ElggPluginPackage) {
+ return $this->package;
+ }
+
+ try {
+ $this->package = new ElggPluginPackage($this->path, false);
+ } catch (Exception $e) {
+ elgg_log("Failed to load package for $this->guid. " . $e->getMessage(), 'WARNING');
+ $this->errorMsg = $e->getmessage();
+ }
+
+ return $this->package;
+ }
+}
diff --git a/engine/classes/ElggPluginManifest.php b/engine/classes/ElggPluginManifest.php
new file mode 100644
index 000000000..6912c2b08
--- /dev/null
+++ b/engine/classes/ElggPluginManifest.php
@@ -0,0 +1,656 @@
+<?php
+/**
+ * Parses Elgg manifest.xml files.
+ *
+ * Normalizes the values from the ElggManifestParser object.
+ *
+ * This requires an ElggPluginManifestParser class implementation
+ * as $this->parser.
+ *
+ * To add new parser versions, name them ElggPluginManifestParserXX
+ * where XX is the version specified in the top-level <plugin_manifest>
+ * tag's XML namespace.
+ *
+ * @package Elgg.Core
+ * @subpackage Plugins
+ * @since 1.8
+ */
+class ElggPluginManifest {
+
+ /**
+ * The parser object
+ */
+ protected $parser;
+
+ /**
+ * The root for plugin manifest namespaces.
+ * This is in the format http://www.elgg.org/plugin_manifest/<version>
+ */
+ protected $namespace_root = 'http://www.elgg.org/plugin_manifest/';
+
+ /**
+ * The expected structure of a plugins requires element
+ */
+ private $depsStructPlugin = array(
+ 'type' => '',
+ 'name' => '',
+ 'version' => '',
+ 'comparison' => 'ge'
+ );
+
+ /**
+ * The expected structure of a priority element
+ */
+ private $depsStructPriority = array(
+ 'type' => '',
+ 'priority' => '',
+ 'plugin' => ''
+ );
+
+ /*
+ * The expected structure of elgg_version and elgg_release requires element
+ */
+ private $depsStructElgg = array(
+ 'type' => '',
+ 'version' => '',
+ 'comparison' => 'ge'
+ );
+
+ /**
+ * The expected structure of a requires php_ini dependency element
+ */
+ private $depsStructPhpIni = array(
+ 'type' => '',
+ 'name' => '',
+ 'value' => '',
+ 'comparison' => '='
+ );
+
+ /**
+ * The expected structure of a requires php_extension dependency element
+ */
+ private $depsStructPhpExtension = array(
+ 'type' => '',
+ 'name' => '',
+ 'version' => '',
+ 'comparison' => '='
+ );
+
+ /**
+ * The expected structure of a conflicts depedency element
+ */
+ private $depsConflictsStruct = array(
+ 'type' => '',
+ 'name' => '',
+ 'version' => '',
+ 'comparison' => '='
+ );
+
+ /**
+ * The expected structure of a provides dependency element.
+ */
+ private $depsProvidesStruct = array(
+ 'type' => '',
+ 'name' => '',
+ 'version' => ''
+ );
+
+ /**
+ * The expected structure of a screenshot element
+ */
+ private $screenshotStruct = array(
+ 'description' => '',
+ 'path' => ''
+ );
+
+ /**
+ * The API version of the manifest.
+ *
+ * @var int
+ */
+ protected $apiVersion;
+
+ /**
+ * The optional plugin id this manifest belongs to.
+ *
+ * @var string
+ */
+ protected $pluginID;
+
+ /**
+ * Load a manifest file, XmlElement or path to manifest.xml file
+ *
+ * @param mixed $manifest A string, XmlElement, or path of a manifest file.
+ * @param string $plugin_id Optional ID of the owning plugin. Used to
+ * fill in some values automatically.
+ */
+ public function __construct($manifest, $plugin_id = null) {
+ if ($plugin_id) {
+ $this->pluginID = $plugin_id;
+ }
+
+ // see if we need to construct the xml object.
+ if ($manifest instanceof ElggXMLElement) {
+ $manifest_obj = $manifest;
+ } else {
+ if (substr(trim($manifest), 0, 1) == '<') {
+ // this is a string
+ $raw_xml = $manifest;
+ } elseif (is_file($manifest)) {
+ // this is a file
+ $raw_xml = file_get_contents($manifest);
+ }
+
+ $manifest_obj = xml_to_object($raw_xml);
+ }
+
+ if (!$manifest_obj) {
+ throw new PluginException(elgg_echo('PluginException:InvalidManifest',
+ array($this->getPluginID())));
+ }
+
+ // set manifest api version
+ if (isset($manifest_obj->attributes['xmlns'])) {
+ $namespace = $manifest_obj->attributes['xmlns'];
+ $version = str_replace($this->namespace_root, '', $namespace);
+ } else {
+ $version = 1.7;
+ }
+
+ $this->apiVersion = $version;
+
+ $parser_class_name = 'ElggPluginManifestParser' . str_replace('.', '', $this->apiVersion);
+
+ // @todo currently the autoloader freaks out if a class doesn't exist.
+ try {
+ $class_exists = class_exists($parser_class_name);
+ } catch (Exception $e) {
+ $class_exists = false;
+ }
+
+ if ($class_exists) {
+ $this->parser = new $parser_class_name($manifest_obj, $this);
+ } else {
+ throw new PluginException(elgg_echo('PluginException:NoAvailableParser',
+ array($this->apiVersion, $this->getPluginID())));
+ }
+
+ if (!$this->parser->parse()) {
+ throw new PluginException(elgg_echo('PluginException:ParserError',
+ array($this->apiVersion, $this->getPluginID())));
+ }
+
+ return true;
+ }
+
+ /**
+ * Returns the API version in use.
+ *
+ * @return int
+ */
+ public function getApiVersion() {
+ return $this->apiVersion;
+ }
+
+ /**
+ * Returns the plugin ID.
+ *
+ * @return string
+ */
+ public function getPluginID() {
+ if ($this->pluginID) {
+ return $this->pluginID;
+ } else {
+ return elgg_echo('unknown');
+ }
+ }
+
+ /**
+ * Returns the manifest array.
+ *
+ * Used for backward compatibility. Specific
+ * methods should be called instead.
+ *
+ * @return array
+ */
+ public function getManifest() {
+ return $this->parser->getManifest();
+ }
+
+ /***************************************
+ * Parsed and Normalized Manifest Data *
+ ***************************************/
+
+ /**
+ * Returns the plugin name
+ *
+ * @return string
+ */
+ public function getName() {
+ $name = $this->parser->getAttribute('name');
+
+ if (!$name && $this->pluginID) {
+ $name = ucwords(str_replace('_', ' ', $this->pluginID));
+ }
+
+ return $name;
+ }
+
+
+ /**
+ * Return the description
+ *
+ * @return string
+ */
+ public function getDescription() {
+ return $this->parser->getAttribute('description');
+ }
+
+ /**
+ * Return the short description
+ *
+ * @return string
+ */
+ public function getBlurb() {
+ $blurb = $this->parser->getAttribute('blurb');
+
+ if (!$blurb) {
+ $blurb = elgg_get_excerpt($this->getDescription());
+ }
+
+ return $blurb;
+ }
+
+ /**
+ * Returns the license
+ *
+ * @return string
+ */
+ public function getLicense() {
+ // license vs licence. Use license.
+ $en_us = $this->parser->getAttribute('license');
+ if ($en_us) {
+ return $en_us;
+ } else {
+ return $this->parser->getAttribute('licence');
+ }
+ }
+
+ /**
+ * Returns the repository url
+ *
+ * @return string
+ */
+ public function getRepositoryURL() {
+ return $this->parser->getAttribute('repository');
+ }
+
+ /**
+ * Returns the bug tracker page
+ *
+ * @return string
+ */
+ public function getBugTrackerURL() {
+ return $this->parser->getAttribute('bugtracker');
+ }
+
+ /**
+ * Returns the donations page
+ *
+ * @return string
+ */
+ public function getDonationsPageURL() {
+ return $this->parser->getAttribute('donations');
+ }
+
+ /**
+ * Returns the version of the plugin.
+ *
+ * @return float
+ */
+ public function getVersion() {
+ return $this->parser->getAttribute('version');
+ }
+
+ /**
+ * Returns the plugin author.
+ *
+ * @return string
+ */
+ public function getAuthor() {
+ return $this->parser->getAttribute('author');
+ }
+
+ /**
+ * Return the copyright
+ *
+ * @return string
+ */
+ public function getCopyright() {
+ return $this->parser->getAttribute('copyright');
+ }
+
+ /**
+ * Return the website
+ *
+ * @return string
+ */
+ public function getWebsite() {
+ return $this->parser->getAttribute('website');
+ }
+
+ /**
+ * Return the categories listed for this plugin
+ *
+ * @return array
+ */
+ public function getCategories() {
+ $bundled_plugins = array('blog', 'bookmarks', 'categories',
+ 'custom_index', 'dashboard', 'developers', 'diagnostics',
+ 'embed', 'externalpages', 'file', 'garbagecollector',
+ 'groups', 'htmlawed', 'invitefriends', 'likes',
+ 'logbrowser', 'logrotate', 'members', 'messageboard',
+ 'messages', 'notifications', 'oauth_api', 'pages', 'profile',
+ 'reportedcontent', 'search', 'tagcloud', 'thewire', 'tinymce',
+ 'twitter', 'twitter_api', 'uservalidationbyemail', 'zaudio',
+ );
+
+ $cats = $this->parser->getAttribute('category');
+
+ if (!$cats) {
+ $cats = array();
+ }
+
+ if (in_array('bundled', $cats) && !in_array($this->getPluginID(), $bundled_plugins)) {
+ unset($cats[array_search('bundled', $cats)]);
+ }
+
+ return $cats;
+ }
+
+ /**
+ * Return the screenshots listed.
+ *
+ * @return array
+ */
+ public function getScreenshots() {
+ $ss = $this->parser->getAttribute('screenshot');
+
+ if (!$ss) {
+ $ss = array();
+ }
+
+ $normalized = array();
+ foreach ($ss as $s) {
+ $normalized[] = $this->buildStruct($this->screenshotStruct, $s);
+ }
+
+ return $normalized;
+ }
+
+ /**
+ * Return the list of provides by this plugin.
+ *
+ * @return array
+ */
+ public function getProvides() {
+ // normalize for 1.7
+ if ($this->getApiVersion() < 1.8) {
+ $provides = array();
+ } else {
+ $provides = $this->parser->getAttribute('provides');
+ }
+
+ if (!$provides) {
+ $provides = array();
+ }
+
+ // always provide ourself if we can
+ if ($this->pluginID) {
+ $provides[] = array(
+ 'type' => 'plugin',
+ 'name' => $this->getPluginID(),
+ 'version' => $this->getVersion()
+ );
+ }
+
+ $normalized = array();
+ foreach ($provides as $provide) {
+ $normalized[] = $this->buildStruct($this->depsProvidesStruct, $provide);
+ }
+
+ return $normalized;
+ }
+
+ /**
+ * Returns the dependencies listed.
+ *
+ * @return array
+ */
+ public function getRequires() {
+ // rewrite the 1.7 style elgg_version as a real requires.
+ if ($this->apiVersion < 1.8) {
+ $elgg_version = $this->parser->getAttribute('elgg_version');
+ if ($elgg_version) {
+ $reqs = array(
+ array(
+ 'type' => 'elgg_version',
+ 'version' => $elgg_version,
+ 'comparison' => 'ge'
+ )
+ );
+ } else {
+ $reqs = array();
+ }
+ } else {
+ $reqs = $this->parser->getAttribute('requires');
+ }
+
+ if (!$reqs) {
+ $reqs = array();
+ }
+
+ $normalized = array();
+ foreach ($reqs as $req) {
+ $normalized[] = $this->normalizeDep($req);
+ }
+
+ return $normalized;
+ }
+
+ /**
+ * Returns the suggests elements.
+ *
+ * @return array
+ */
+ public function getSuggests() {
+ $suggests = $this->parser->getAttribute('suggests');
+
+ if (!$suggests) {
+ $suggests = array();
+ }
+
+ $normalized = array();
+ foreach ($suggests as $suggest) {
+ $normalized[] = $this->normalizeDep($suggest);
+ }
+
+ return $normalized;
+ }
+
+ /**
+ * Normalizes a dependency array using the defined structs.
+ * Can be used with either requires or suggests.
+ *
+ * @param array $dep A dependency array.
+ * @return array The normalized deps array.
+ */
+ private function normalizeDep($dep) {
+ switch ($dep['type']) {
+ case 'elgg_version':
+ case 'elgg_release':
+ $struct = $this->depsStructElgg;
+ break;
+
+ case 'plugin':
+ $struct = $this->depsStructPlugin;
+ break;
+
+ case 'priority':
+ $struct = $this->depsStructPriority;
+ break;
+
+ case 'php_extension':
+ $struct = $this->depsStructPhpExtension;
+ break;
+
+ case 'php_ini':
+ $struct = $this->depsStructPhpIni;
+
+ // also normalize boolean values
+ if (isset($dep['value'])) {
+ switch (strtolower($dep['value'])) {
+ case 'yes':
+ case 'true':
+ case 'on':
+ case 1:
+ $dep['value'] = 1;
+ break;
+
+ case 'no':
+ case 'false':
+ case 'off':
+ case 0:
+ case '':
+ $dep['value'] = 0;
+ break;
+ }
+ }
+ break;
+ default:
+ // unrecognized so we just return the raw dependency
+ return $dep;
+ }
+
+ $normalized_dep = $this->buildStruct($struct, $dep);
+
+ // normalize comparison operators
+ if (isset($normalized_dep['comparison'])) {
+ switch ($normalized_dep['comparison']) {
+ case '<':
+ $normalized_dep['comparison'] = 'lt';
+ break;
+
+ case '<=':
+ $normalized_dep['comparison'] = 'le';
+ break;
+
+ case '>':
+ $normalized_dep['comparison'] = 'gt';
+ break;
+
+ case '>=':
+ $normalized_dep['comparison'] = 'ge';
+ break;
+
+ case '==':
+ case 'eq':
+ $normalized_dep['comparison'] = '=';
+ break;
+
+ case '<>':
+ case 'ne':
+ $normalized_dep['comparison'] = '!=';
+ break;
+ }
+ }
+
+ return $normalized_dep;
+ }
+
+ /**
+ * Returns the conflicts listed
+ *
+ * @return array
+ */
+ public function getConflicts() {
+ // normalize for 1.7
+ if ($this->getApiVersion() < 1.8) {
+ $conflicts = array();
+ } else {
+ $conflicts = $this->parser->getAttribute('conflicts');
+ }
+
+ if (!$conflicts) {
+ $conflicts = array();
+ }
+
+ $normalized = array();
+
+ foreach ($conflicts as $conflict) {
+ $normalized[] = $this->buildStruct($this->depsConflictsStruct, $conflict);
+ }
+
+ return $normalized;
+ }
+
+ /**
+ * Should this plugin be activated when Elgg is installed
+ *
+ * @return bool
+ */
+ public function getActivateOnInstall() {
+ $activate = $this->parser->getAttribute('activate_on_install');
+ switch (strtolower($activate)) {
+ case 'yes':
+ case 'true':
+ case 'on':
+ case 1:
+ return true;
+
+ case 'no':
+ case 'false':
+ case 'off':
+ case 0:
+ case '':
+ return false;
+ }
+ }
+
+ /**
+ * Normalizes an array into the structure specified
+ *
+ * @param array $struct The struct to normalize $element to.
+ * @param array $array The array
+ *
+ * @return array
+ */
+ protected function buildStruct(array $struct, array $array) {
+ $return = array();
+
+ foreach ($struct as $index => $default) {
+ $return[$index] = elgg_extract($index, $array, $default);
+ }
+
+ return $return;
+ }
+
+ /**
+ * Returns a category's friendly name. This can be localized by
+ * defining the string 'admin:plugins:category:<category>'. If no
+ * localization is found, returns the category with _ and - converted to ' '
+ * and then ucwords()'d.
+ *
+ * @param str $category The category as defined in the manifest.
+ * @return str A human-readable category
+ */
+ static public function getFriendlyCategory($category) {
+ $cat_raw_string = "admin:plugins:category:$category";
+ $cat_display_string = elgg_echo($cat_raw_string);
+ if ($cat_display_string == $cat_raw_string) {
+ $category = str_replace(array('-', '_'), ' ', $category);
+ $cat_display_string = ucwords($category);
+ }
+ return $cat_display_string;
+ }
+}
diff --git a/engine/classes/ElggPluginManifestParser.php b/engine/classes/ElggPluginManifestParser.php
new file mode 100644
index 000000000..af152b561
--- /dev/null
+++ b/engine/classes/ElggPluginManifestParser.php
@@ -0,0 +1,102 @@
+<?php
+/**
+ * Parent class for manifest parsers.
+ *
+ * Converts manifest.xml files or strings to an array.
+ *
+ * This should be extended by a class that does the actual work
+ * to convert based on the manifest.xml version.
+ *
+ * This class only parses XML to an XmlEntity object and
+ * an array. The array should be used primarily to extract
+ * information since it is quicker to parse once and store
+ * values from the XmlElement object than to parse the object
+ * each time.
+ *
+ * The array should be an exact representation of the manifest.xml
+ * file or string. Any normalization needs to be done in the
+ * calling class / function.
+ *
+ * @package Elgg.Core
+ * @subpackage Plugins
+ * @since 1.8
+ */
+abstract class ElggPluginManifestParser {
+ /**
+ * The XmlElement object
+ *
+ * @var XmlElement
+ */
+ protected $manifestObject;
+
+ /**
+ * The manifest array
+ *
+ * @var array
+ */
+ protected $manifest;
+
+ /**
+ * All valid manifest attributes with default values.
+ *
+ * @var array
+ */
+ protected $validAttributes;
+
+ /**
+ * The object we're doing parsing for.
+ *
+ * @var object
+ */
+ protected $caller;
+
+ /**
+ * Loads the manifest XML to be parsed.
+ *
+ * @param ElggXmlElement $xml The Manifest XML object to be parsed
+ * @param object $caller The object calling this parser.
+ */
+ public function __construct(ElggXMLElement $xml, $caller) {
+ $this->manifestObject = $xml;
+ $this->caller = $caller;
+ }
+
+ /**
+ * Returns the manifest XML object
+ *
+ * @return XmlElement
+ */
+ public function getManifestObject() {
+ return $this->manifestObject;
+ }
+
+ /**
+ * Return the parsed manifest array
+ *
+ * @return array
+ */
+ public function getManifest() {
+ return $this->manifest;
+ }
+
+ /**
+ * Return an attribute in the manifest.
+ *
+ * @param string $name Attribute name
+ * @return mixed
+ */
+ public function getAttribute($name) {
+ if (in_array($name, $this->validAttributes) && isset($this->manifest[$name])) {
+ return $this->manifest[$name];
+ }
+
+ return false;
+ }
+
+ /**
+ * Parse the XML object into an array
+ *
+ * @return bool
+ */
+ abstract public function parse();
+}
diff --git a/engine/classes/ElggPluginManifestParser17.php b/engine/classes/ElggPluginManifestParser17.php
new file mode 100644
index 000000000..5658ee804
--- /dev/null
+++ b/engine/classes/ElggPluginManifestParser17.php
@@ -0,0 +1,82 @@
+<?php
+/**
+ * Plugin manifest.xml parser for Elgg 1.7 and lower.
+ *
+ * @package Elgg.Core
+ * @subpackage Plugins
+ * @since 1.8
+ */
+class ElggPluginManifestParser17 extends ElggPluginManifestParser {
+ /**
+ * The valid top level attributes and defaults for a 1.7 manifest
+ */
+ protected $validAttributes = array(
+ 'author', 'version', 'description', 'website',
+ 'copyright', 'license', 'licence', 'elgg_version',
+
+ // were never really used and not enforced in code.
+ 'requires', 'recommends', 'conflicts',
+
+ // not a 1.7 field, but we need it
+ 'name',
+ );
+
+ /**
+ * Parse a manifest object from 1.7 or earlier.
+ *
+ * @return void
+ */
+ public function parse() {
+ if (!isset($this->manifestObject->children)) {
+ return false;
+ }
+
+ $elements = array();
+
+ foreach ($this->manifestObject->children as $element) {
+ $key = $element->attributes['key'];
+ $value = $element->attributes['value'];
+
+ // create arrays if multiple fields are set
+ if (array_key_exists($key, $elements)) {
+ if (!is_array($elements[$key])) {
+ $orig = $elements[$key];
+ $elements[$key] = array($orig);
+ }
+
+ $elements[$key][] = $value;
+ } else {
+ $elements[$key] = $value;
+ }
+ }
+
+ if ($elements && !array_key_exists('name', $elements)) {
+ $elements['name'] = $this->caller->getName();
+ }
+
+ $this->manifest = $elements;
+
+ if (!$this->manifest) {
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Return an attribute in the manifest.
+ *
+ * Overrides ElggPluginManifestParser::getAttribute() because before 1.8
+ * there were no rules...weeeeeeeee!
+ *
+ * @param string $name Attribute name
+ * @return mixed
+ */
+ public function getAttribute($name) {
+ if (isset($this->manifest[$name])) {
+ return $this->manifest[$name];
+ }
+
+ return false;
+ }
+}
diff --git a/engine/classes/ElggPluginManifestParser18.php b/engine/classes/ElggPluginManifestParser18.php
new file mode 100644
index 000000000..3b753f17b
--- /dev/null
+++ b/engine/classes/ElggPluginManifestParser18.php
@@ -0,0 +1,97 @@
+<?php
+/**
+ * Plugin manifest.xml parser for Elgg 1.8 and above.
+ *
+ * @package Elgg.Core
+ * @subpackage Plugins
+ * @since 1.8
+ */
+class ElggPluginManifestParser18 extends ElggPluginManifestParser {
+ /**
+ * The valid top level attributes and defaults for a 1.8 manifest array.
+ *
+ * @var array
+ */
+ protected $validAttributes = array(
+ 'name', 'author', 'version', 'blurb', 'description','website',
+ 'repository', 'bugtracker', 'donations', 'copyright', 'license',
+ 'requires', 'suggests', 'conflicts', 'provides',
+ 'screenshot', 'category', 'activate_on_install'
+ );
+
+ /**
+ * Required attributes for a valid 1.8 manifest
+ *
+ * @var array
+ */
+ protected $requiredAttributes = array(
+ 'name', 'author', 'version', 'description', 'requires'
+ );
+
+ /**
+ * Parse a manifest object from 1.8 and later
+ *
+ * @return void
+ */
+ public function parse() {
+ $parsed = array();
+ foreach ($this->manifestObject->children as $element) {
+ switch ($element->name) {
+ // single elements
+ case 'blurb':
+ case 'description':
+ case 'name':
+ case 'author':
+ case 'version':
+ case 'website':
+ case 'copyright':
+ case 'license':
+ case 'repository':
+ case 'bugtracker':
+ case 'donations':
+ case 'activate_on_install':
+ $parsed[$element->name] = $element->content;
+ break;
+
+ // arrays
+ case 'category':
+ $parsed[$element->name][] = $element->content;
+ break;
+
+ // 3d arrays
+ case 'screenshot':
+ case 'provides':
+ case 'conflicts':
+ case 'requires':
+ case 'suggests':
+ if (!isset($element->children)) {
+ return false;
+ }
+
+ $info = array();
+ foreach ($element->children as $child_element) {
+ $info[$child_element->name] = $child_element->content;
+ }
+
+ $parsed[$element->name][] = $info;
+ break;
+ }
+ }
+
+ // check we have all the required fields
+ foreach ($this->requiredAttributes as $attr) {
+ if (!array_key_exists($attr, $parsed)) {
+ throw new PluginException(elgg_echo('PluginException:ParserErrorMissingRequiredAttribute',
+ array($attr, $this->caller->getPluginID())));
+ }
+ }
+
+ $this->manifest = $parsed;
+
+ if (!$this->manifest) {
+ return false;
+ }
+
+ return true;
+ }
+}
diff --git a/engine/classes/ElggPluginPackage.php b/engine/classes/ElggPluginPackage.php
new file mode 100644
index 000000000..37eb4bf4d
--- /dev/null
+++ b/engine/classes/ElggPluginPackage.php
@@ -0,0 +1,640 @@
+<?php
+/**
+ * Manages plugin packages under mod.
+ *
+ * @todo This should eventually be merged into ElggPlugin.
+ * Currently ElggPlugin objects are only used to get and save
+ * plugin settings and user settings, so not every plugin
+ * has an ElggPlugin object. It's not implemented in ElggPlugin
+ * right now because of conflicts with at least the constructor,
+ * enable(), disable(), and private settings.
+ *
+ * Around 1.9 or so we should each plugin over to using
+ * ElggPlugin and merge ElggPluginPackage and ElggPlugin.
+ *
+ * @package Elgg.Core
+ * @subpackage Plugins
+ * @since 1.8
+ */
+class ElggPluginPackage {
+
+ /**
+ * The required files in the package
+ *
+ * @var array
+ */
+ private $requiredFiles = array(
+ 'start.php', 'manifest.xml'
+ );
+
+ /**
+ * The optional files that can be read and served through the markdown page handler
+ * @var array
+ */
+ private $textFiles = array(
+ 'README.txt', 'CHANGES.txt',
+ 'INSTALL.txt', 'COPYRIGHT.txt', 'LICENSE.txt',
+
+ 'README', 'README.md', 'README.markdown'
+ );
+
+ /**
+ * Valid types for provides.
+ *
+ * @var array
+ */
+ private $providesSupportedTypes = array(
+ 'plugin', 'php_extension'
+ );
+
+ /**
+ * The type of requires/conflicts supported
+ *
+ * @var array
+ */
+ private $depsSupportedTypes = array(
+ 'elgg_version', 'elgg_release', 'php_extension', 'php_ini', 'plugin', 'priority',
+ );
+
+ /**
+ * An invalid plugin error.
+ */
+ private $errorMsg = '';
+
+ /**
+ * Any dependencies messages
+ */
+ private $depsMsgs = array();
+
+ /**
+ * The plugin's manifest object
+ *
+ * @var ElggPluginManifest
+ */
+ protected $manifest;
+
+ /**
+ * The plugin's full path
+ *
+ * @var string
+ */
+ protected $path;
+
+ /**
+ * Is the plugin valid?
+ *
+ * @var mixed Bool after validation check, null before.
+ */
+ protected $valid = null;
+
+ /**
+ * The plugin ID (dir name)
+ *
+ * @var string
+ */
+ protected $id;
+
+ /**
+ * Load a plugin package from mod/$id or by full path.
+ *
+ * @param string $plugin The ID (directory name) or full path of the plugin.
+ * @param bool $validate Automatically run isValid()?
+ *
+ * @throws PluginException
+ */
+ public function __construct($plugin, $validate = true) {
+ $plugin_path = elgg_get_plugins_path();
+ // @todo wanted to avoid another is_dir() call here.
+ // should do some profiling to see how much it affects
+ if (strpos($plugin, $plugin_path) === 0 || is_dir($plugin)) {
+ // this is a path
+ $path = sanitise_filepath($plugin);
+
+ // the id is the last element of the array
+ $path_array = explode('/', trim($path, '/'));
+ $id = array_pop($path_array);
+ } else {
+ // this is a plugin id
+ // strict plugin names
+ if (preg_match('/[^a-z0-9\.\-_]/i', $plugin)) {
+ throw new PluginException(elgg_echo('PluginException:InvalidID', array($plugin)));
+ }
+
+ $path = "{$plugin_path}$plugin/";
+ $id = $plugin;
+ }
+
+ if (!is_dir($path)) {
+ throw new PluginException(elgg_echo('PluginException:InvalidPath', array($path)));
+ }
+
+ $this->path = $path;
+ $this->id = $id;
+
+ if ($validate && !$this->isValid()) {
+ if ($this->errorMsg) {
+ throw new PluginException(elgg_echo('PluginException:InvalidPlugin:Details',
+ array($plugin, $this->errorMsg)));
+ } else {
+ throw new PluginException(elgg_echo('PluginException:InvalidPlugin', array($plugin)));
+ }
+ }
+
+ return true;
+ }
+
+ /********************************
+ * Validation and sanity checks *
+ ********************************/
+
+ /**
+ * Checks if this is a valid Elgg plugin.
+ *
+ * Checks for requires files as defined at the start of this
+ * class. Will check require manifest fields via ElggPluginManifest
+ * for Elgg 1.8 plugins.
+ *
+ * @note This doesn't check dependencies or conflicts.
+ * Use {@link ElggPluginPackage::canActivate()} or
+ * {@link ElggPluginPackage::checkDependencies()} for that.
+ *
+ * @return bool
+ */
+ public function isValid() {
+ if (isset($this->valid)) {
+ return $this->valid;
+ }
+
+ // check required files.
+ $have_req_files = true;
+ foreach ($this->requiredFiles as $file) {
+ if (!is_readable($this->path . $file)) {
+ $have_req_files = false;
+ $this->errorMsg =
+ elgg_echo('ElggPluginPackage:InvalidPlugin:MissingFile', array($file));
+ break;
+ }
+ }
+
+ // check required files
+ if (!$have_req_files) {
+ return $this->valid = false;
+ }
+
+ // check for valid manifest.
+ if (!$this->loadManifest()) {
+ return $this->valid = false;
+ }
+
+ // can't require or conflict with yourself or something you provide.
+ // make sure provides are all valid.
+ if (!$this->isSaneDeps()) {
+ return $this->valid = false;
+ }
+
+ return $this->valid = true;
+ }
+
+ /**
+ * Check the plugin doesn't require or conflict with itself
+ * or something provides. Also check that it only list
+ * valid provides. Deps are checked in checkDependencies()
+ *
+ * @note Plugins always provide themselves.
+ *
+ * @todo Don't let them require and conflict the same thing
+ *
+ * @return bool
+ */
+ private function isSaneDeps() {
+ // protection against plugins with no manifest file
+ if (!$this->getManifest()) {
+ return false;
+ }
+
+ // Note: $conflicts and $requires are not unused. They're called dynamically
+ $conflicts = $this->getManifest()->getConflicts();
+ $requires = $this->getManifest()->getRequires();
+ $provides = $this->getManifest()->getProvides();
+
+ foreach ($provides as $provide) {
+ // only valid provide types
+ if (!in_array($provide['type'], $this->providesSupportedTypes)) {
+ $this->errorMsg =
+ elgg_echo('ElggPluginPackage:InvalidPlugin:InvalidProvides', array($provide['type']));
+ return false;
+ }
+
+ // doesn't conflict or require any of its provides
+ $name = $provide['name'];
+ foreach (array('conflicts', 'requires') as $dep_type) {
+ foreach (${$dep_type} as $dep) {
+ if (!in_array($dep['type'], $this->depsSupportedTypes)) {
+ $this->errorMsg =
+ elgg_echo('ElggPluginPackage:InvalidPlugin:InvalidDependency', array($dep['type']));
+ return false;
+ }
+
+ // make sure nothing is providing something it conflicts or requires.
+ if (isset($dep['name']) && $dep['name'] == $name) {
+ $version_compare = version_compare($provide['version'], $dep['version'], $dep['comparison']);
+
+ if ($version_compare) {
+ $this->errorMsg =
+ elgg_echo('ElggPluginPackage:InvalidPlugin:CircularDep',
+ array($dep['type'], $dep['name'], $this->id));
+
+ return false;
+ }
+ }
+ }
+ }
+ }
+
+ return true;
+ }
+
+
+ /************
+ * Manifest *
+ ************/
+
+ /**
+ * Returns a parsed manifest file.
+ *
+ * @return ElggPluginManifest
+ */
+ public function getManifest() {
+ if (!$this->manifest) {
+ if (!$this->loadManifest()) {
+ return false;
+ }
+ }
+
+ return $this->manifest;
+ }
+
+ /**
+ * Loads the manifest into this->manifest as an
+ * ElggPluginManifest object.
+ *
+ * @return bool
+ */
+ private function loadManifest() {
+ $file = $this->path . 'manifest.xml';
+
+ try {
+ $this->manifest = new ElggPluginManifest($file, $this->id);
+ } catch (Exception $e) {
+ $this->errorMsg = $e->getMessage();
+ return false;
+ }
+
+ if ($this->manifest instanceof ElggPluginManifest) {
+ return true;
+ }
+
+ $this->errorMsg = elgg_echo('unknown_error');
+ return false;
+ }
+
+ /****************
+ * Readme Files *
+ ***************/
+
+ /**
+ * Returns an array of present and readable text files
+ *
+ * @return array
+ */
+ public function getTextFilenames() {
+ return $this->textFiles;
+ }
+
+ /***********************
+ * Dependencies system *
+ ***********************/
+
+ /**
+ * Returns if the Elgg system meets the plugin's dependency
+ * requirements. This includes both requires and conflicts.
+ *
+ * Full reports can be requested. The results are returned
+ * as an array of arrays in the form array(
+ * 'type' => requires|conflicts,
+ * 'dep' => array( dependency array ),
+ * 'status' => bool if depedency is met,
+ * 'comment' => optional comment to display to the user.
+ * )
+ *
+ * @param bool $full_report Return a full report.
+ * @return bool|array
+ */
+ public function checkDependencies($full_report = false) {
+ // Note: $conflicts and $requires are not unused. They're called dynamically
+ $requires = $this->getManifest()->getRequires();
+ $conflicts = $this->getManifest()->getConflicts();
+
+ $enabled_plugins = elgg_get_plugins('active');
+ $this_id = $this->getID();
+ $report = array();
+
+ // first, check if any active plugin conflicts with us.
+ foreach ($enabled_plugins as $plugin) {
+ $temp_conflicts = array();
+ $temp_manifest = $plugin->getManifest();
+ if ($temp_manifest instanceof ElggPluginManifest) {
+ $temp_conflicts = $plugin->getManifest()->getConflicts();
+ }
+ foreach ($temp_conflicts as $conflict) {
+ if ($conflict['type'] == 'plugin' && $conflict['name'] == $this_id) {
+ $result = $this->checkDepPlugin($conflict, $enabled_plugins, false);
+
+ // rewrite the conflict to show the originating plugin
+ $conflict['name'] = $plugin->getManifest()->getName();
+
+ if (!$full_report && !$result['status']) {
+ $this->errorMsg = "Conflicts with plugin \"{$plugin->getManifest()->getName()}\".";
+ return $result['status'];
+ } else {
+ $report[] = array(
+ 'type' => 'conflicted',
+ 'dep' => $conflict,
+ 'status' => $result['status'],
+ 'value' => $this->getManifest()->getVersion()
+ );
+ }
+ }
+ }
+ }
+
+ $check_types = array('requires', 'conflicts');
+
+ if ($full_report) {
+ // Note: $suggests is not unused. It's called dynamically
+ $suggests = $this->getManifest()->getSuggests();
+ $check_types[] = 'suggests';
+ }
+
+ foreach ($check_types as $dep_type) {
+ $inverse = ($dep_type == 'conflicts') ? true : false;
+
+ foreach (${$dep_type} as $dep) {
+ switch ($dep['type']) {
+ case 'elgg_version':
+ $result = $this->checkDepElgg($dep, get_version(), $inverse);
+ break;
+
+ case 'elgg_release':
+ $result = $this->checkDepElgg($dep, get_version(true), $inverse);
+ break;
+
+ case 'plugin':
+ $result = $this->checkDepPlugin($dep, $enabled_plugins, $inverse);
+ break;
+
+ case 'priority':
+ $result = $this->checkDepPriority($dep, $enabled_plugins, $inverse);
+ break;
+
+ case 'php_extension':
+ $result = $this->checkDepPhpExtension($dep, $inverse);
+ break;
+
+ case 'php_ini':
+ $result = $this->checkDepPhpIni($dep, $inverse);
+ break;
+ }
+
+ // unless we're doing a full report, break as soon as we fail.
+ if (!$full_report && !$result['status']) {
+ $this->errorMsg = "Missing dependencies.";
+ return $result['status'];
+ } else {
+ // build report element and comment
+ $report[] = array(
+ 'type' => $dep_type,
+ 'dep' => $dep,
+ 'status' => $result['status'],
+ 'value' => $result['value']
+ );
+ }
+ }
+ }
+
+ if ($full_report) {
+ // add provides to full report
+ $provides = $this->getManifest()->getProvides();
+
+ foreach ($provides as $provide) {
+ $report[] = array(
+ 'type' => 'provides',
+ 'dep' => $provide,
+ 'status' => true,
+ 'value' => ''
+ );
+ }
+
+ return $report;
+ }
+
+ return true;
+ }
+
+ /**
+ * Checks if $plugins meets the requirement by $dep.
+ *
+ * @param array $dep An Elgg manifest.xml deps array
+ * @param array $plugins A list of plugins as returned by elgg_get_plugins();
+ * @param bool $inverse Inverse the results to use as a conflicts.
+ * @return bool
+ */
+ private function checkDepPlugin(array $dep, array $plugins, $inverse = false) {
+ $r = elgg_check_plugins_provides('plugin', $dep['name'], $dep['version'], $dep['comparison']);
+
+ if ($inverse) {
+ $r['status'] = !$r['status'];
+ }
+
+ return $r;
+ }
+
+ /**
+ * Checks if $plugins meets the requirement by $dep.
+ *
+ * @param array $dep An Elgg manifest.xml deps array
+ * @param array $plugins A list of plugins as returned by elgg_get_plugins();
+ * @param bool $inverse Inverse the results to use as a conflicts.
+ * @return bool
+ */
+ private function checkDepPriority(array $dep, array $plugins, $inverse = false) {
+ // grab the ElggPlugin using this package.
+ $plugin_package = elgg_get_plugin_from_id($this->getID());
+ $plugin_priority = $plugin_package->getPriority();
+ $test_plugin = elgg_get_plugin_from_id($dep['plugin']);
+
+ // If this isn't a plugin or the plugin isn't installed or active
+ // priority doesn't matter. Use requires to check if a plugin is active.
+ if (!$plugin_package || !$test_plugin || !$test_plugin->isActive()) {
+ return array(
+ 'status' => true,
+ 'value' => 'uninstalled'
+ );
+ }
+
+ $test_plugin_priority = $test_plugin->getPriority();
+
+ switch ($dep['priority']) {
+ case 'before':
+ $status = $plugin_priority < $test_plugin_priority;
+ break;
+
+ case 'after':
+ $status = $plugin_priority > $test_plugin_priority;
+ break;
+
+ default;
+ $status = false;
+ }
+
+ // get the current value
+ if ($plugin_priority < $test_plugin_priority) {
+ $value = 'before';
+ } else {
+ $value = 'after';
+ }
+
+ if ($inverse) {
+ $status = !$status;
+ }
+
+ return array(
+ 'status' => $status,
+ 'value' => $value
+ );
+ }
+
+ /**
+ * Checks if $elgg_version meets the requirement by $dep.
+ *
+ * @param array $dep An Elgg manifest.xml deps array
+ * @param array $elgg_version An Elgg version (either YYYYMMDDXX or X.Y.Z)
+ * @param bool $inverse Inverse the result to use as a conflicts.
+ * @return bool
+ */
+ private function checkDepElgg(array $dep, $elgg_version, $inverse = false) {
+ $status = version_compare($elgg_version, $dep['version'], $dep['comparison']);
+
+ if ($inverse) {
+ $status = !$status;
+ }
+
+ return array(
+ 'status' => $status,
+ 'value' => $elgg_version
+ );
+ }
+
+ /**
+ * Checks if the PHP extension in $dep is loaded.
+ *
+ * @todo Can this be merged with the plugin checker?
+ *
+ * @param array $dep An Elgg manifest.xml deps array
+ * @param bool $inverse Inverse the result to use as a conflicts.
+ * @return array An array in the form array(
+ * 'status' => bool
+ * 'value' => string The version provided
+ * )
+ */
+ private function checkDepPhpExtension(array $dep, $inverse = false) {
+ $name = $dep['name'];
+ $version = $dep['version'];
+ $comparison = $dep['comparison'];
+
+ // not enabled.
+ $status = extension_loaded($name);
+
+ // enabled. check version.
+ $ext_version = phpversion($name);
+
+ if ($status) {
+ // some extensions (like gd) don't provide versions. neat.
+ // don't check version info and return a lie.
+ if ($ext_version && $version) {
+ $status = version_compare($ext_version, $version, $comparison);
+ }
+
+ if (!$ext_version) {
+ $ext_version = '???';
+ }
+ }
+
+ // some php extensions can be emulated, so check provides.
+ if ($status == false) {
+ $provides = elgg_check_plugins_provides('php_extension', $name, $version, $comparison);
+ $status = $provides['status'];
+ $ext_version = $provides['value'];
+ }
+
+ if ($inverse) {
+ $status = !$status;
+ }
+
+ return array(
+ 'status' => $status,
+ 'value' => $ext_version
+ );
+ }
+
+ /**
+ * Check if the PHP ini setting satisfies $dep.
+ *
+ * @param array $dep An Elgg manifest.xml deps array
+ * @param bool $inverse Inverse the result to use as a conflicts.
+ * @return bool
+ */
+ private function checkDepPhpIni($dep, $inverse = false) {
+ $name = $dep['name'];
+ $value = $dep['value'];
+ $comparison = $dep['comparison'];
+
+ // ini_get() normalizes truthy values to 1 but falsey values to 0 or ''.
+ // version_compare() considers '' < 0, so normalize '' to 0.
+ // ElggPluginManifest normalizes all bool values and '' to 1 or 0.
+ $setting = ini_get($name);
+
+ if ($setting === '') {
+ $setting = 0;
+ }
+
+ $status = version_compare($setting, $value, $comparison);
+
+ if ($inverse) {
+ $status = !$status;
+ }
+
+ return array(
+ 'status' => $status,
+ 'value' => $setting
+ );
+ }
+
+ /**
+ * Returns the Plugin ID
+ *
+ * @return string
+ */
+ public function getID() {
+ return $this->id;
+ }
+
+ /**
+ * Returns the last error message.
+ *
+ * @return string
+ */
+ public function getError() {
+ return $this->errorMsg;
+ }
+}
diff --git a/engine/classes/ElggPriorityList.php b/engine/classes/ElggPriorityList.php
new file mode 100644
index 000000000..416df885c
--- /dev/null
+++ b/engine/classes/ElggPriorityList.php
@@ -0,0 +1,366 @@
+<?php
+/**
+ * Iterate over elements in a specific priority.
+ *
+ * $pl = new ElggPriorityList();
+ * $pl->add('Element 0');
+ * $pl->add('Element 10', 10);
+ * $pl->add('Element -10', -10);
+ *
+ * foreach ($pl as $priority => $element) {
+ * var_dump("$priority => $element");
+ * }
+ *
+ * Yields:
+ * -10 => Element -10
+ * 0 => Element 0
+ * 10 => Element 10
+ *
+ * Collisions on priority are handled by inserting the element at or as close to the
+ * requested priority as possible:
+ *
+ * $pl = new ElggPriorityList();
+ * $pl->add('Element 5', 5);
+ * $pl->add('Colliding element 5', 5);
+ * $pl->add('Another colliding element 5', 5);
+ *
+ * foreach ($pl as $priority => $element) {
+ * var_dump("$priority => $element");
+ * }
+ *
+ * Yields:
+ * 5 => 'Element 5',
+ * 6 => 'Colliding element 5',
+ * 7 => 'Another colliding element 5'
+ *
+ * You can do priority lookups by element:
+ *
+ * $pl = new ElggPriorityList();
+ * $pl->add('Element 0');
+ * $pl->add('Element -5', -5);
+ * $pl->add('Element 10', 10);
+ * $pl->add('Element -10', -10);
+ *
+ * $priority = $pl->getPriority('Element -5');
+ *
+ * Or element lookups by priority.
+ * $element = $pl->getElement(-5);
+ *
+ * To remove elements, pass the element.
+ * $pl->remove('Element -10');
+ *
+ * To check if an element exists:
+ * $pl->contains('Element -5');
+ *
+ * To move an element:
+ * $pl->move('Element -5', -3);
+ *
+ * ElggPriorityList only tracks priority. No checking is done in ElggPriorityList for duplicates or
+ * updating. If you need to track this use objects and an external map:
+ *
+ * function elgg_register_something($id, $display_name, $location, $priority = 500) {
+ * // $id => $element.
+ * static $map = array();
+ * static $list;
+ *
+ * if (!$list) {
+ * $list = new ElggPriorityList();
+ * }
+ *
+ * // update if already registered.
+ * if (isset($map[$id])) {
+ * $element = $map[$id];
+ * // move it first because we have to pass the original element.
+ * if (!$list->move($element, $priority)) {
+ * return false;
+ * }
+ * $element->display_name = $display_name;
+ * $element->location = $location;
+ * } else {
+ * $element = new stdClass();
+ * $element->display_name = $display_name;
+ * $element->location = $location;
+ * if (!$list->add($element, $priority)) {
+ * return false;
+ * }
+ * $map[$id] = $element;
+ * }
+ *
+ * return true;
+ * }
+ *
+ * @package Elgg.Core
+ * @subpackage Helpers
+ */
+class ElggPriorityList
+ implements Iterator, Countable {
+
+ /**
+ * The list of elements
+ *
+ * @var array
+ */
+ private $elements = array();
+
+ /**
+ * Create a new priority list.
+ *
+ * @param array $elements An optional array of priorities => element
+ */
+ public function __construct(array $elements = array()) {
+ if ($elements) {
+ foreach ($elements as $priority => $element) {
+ $this->add($element, $priority);
+ }
+ }
+ }
+
+ /**
+ * Adds an element to the list.
+ *
+ * @warning This returns the priority at which the element was added, which can be 0. Use
+ * !== false to check for success.
+ *
+ * @param mixed $element The element to add to the list.
+ * @param mixed $priority Priority to add the element. In priority collisions, the original element
+ * maintains its priority and the new element is to the next available
+ * slot, taking into consideration all previously registered elements.
+ * Negative elements are accepted.
+ * @param bool $exact unused
+ * @return int The priority of the added element.
+ * @todo remove $exact or implement it. Note we use variable name strict below.
+ */
+ public function add($element, $priority = null, $exact = false) {
+ if ($priority !== null && !is_numeric($priority)) {
+ return false;
+ } else {
+ $priority = $this->getNextPriority($priority);
+ }
+
+ $this->elements[$priority] = $element;
+ $this->sorted = false;
+ return $priority;
+ }
+
+ /**
+ * Removes an element from the list.
+ *
+ * @warning The element must have the same attributes / values. If using $strict, it must have
+ * the same types. array(10) will fail in strict against array('10') (str vs int).
+ *
+ * @param mixed $element The element to remove from the list
+ * @param bool $strict Whether to check the type of the element match
+ * @return bool
+ */
+ public function remove($element, $strict = false) {
+ $index = array_search($element, $this->elements, $strict);
+ if ($index !== false) {
+ unset($this->elements[$index]);
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * Move an existing element to a new priority.
+ *
+ * @param mixed $element The element to move
+ * @param int $new_priority The new priority for the element
+ * @param bool $strict Whether to check the type of the element match
+ * @return bool
+ */
+ public function move($element, $new_priority, $strict = false) {
+ $new_priority = (int) $new_priority;
+
+ $current_priority = $this->getPriority($element, $strict);
+ if ($current_priority === false) {
+ return false;
+ }
+
+ if ($current_priority == $new_priority) {
+ return true;
+ }
+
+ // move the actual element so strict operations still work
+ $element = $this->getElement($current_priority);
+ unset($this->elements[$current_priority]);
+ return $this->add($element, $new_priority);
+ }
+
+ /**
+ * Returns the elements
+ *
+ * @return array
+ */
+ public function getElements() {
+ $this->sortIfUnsorted();
+ return $this->elements;
+ }
+
+ /**
+ * Sort the elements optionally by a callback function.
+ *
+ * If no user function is provided the elements are sorted by priority registered.
+ *
+ * The callback function should accept the array of elements as the first
+ * argument and should return a sorted array.
+ *
+ * This function can be called multiple times.
+ *
+ * @param callback $callback The callback for sorting. Numeric sorting is the default.
+ * @return bool
+ */
+ public function sort($callback = null) {
+ if (!$callback) {
+ ksort($this->elements, SORT_NUMERIC);
+ } else {
+ $sorted = call_user_func($callback, $this->elements);
+
+ if (!$sorted) {
+ return false;
+ }
+
+ $this->elements = $sorted;
+ }
+
+ $this->sorted = true;
+ return true;
+ }
+
+ /**
+ * Sort the elements if they haven't been sorted yet.
+ *
+ * @return bool
+ */
+ private function sortIfUnsorted() {
+ if (!$this->sorted) {
+ return $this->sort();
+ }
+ }
+
+ /**
+ * Returns the next priority available.
+ *
+ * @param int $near Make the priority as close to $near as possible.
+ * @return int
+ */
+ public function getNextPriority($near = 0) {
+ $near = (int) $near;
+
+ while (array_key_exists($near, $this->elements)) {
+ $near++;
+ }
+
+ return $near;
+ }
+
+ /**
+ * Returns the priority of an element if it exists in the list.
+ *
+ * @warning This can return 0 if the element's priority is 0.
+ *
+ * @param mixed $element The element to check for.
+ * @param bool $strict Use strict checking?
+ * @return mixed False if the element doesn't exists, the priority if it does.
+ */
+ public function getPriority($element, $strict = false) {
+ return array_search($element, $this->elements, $strict);
+ }
+
+ /**
+ * Returns the element at $priority.
+ *
+ * @param int $priority The priority
+ * @return mixed The element or false on fail.
+ */
+ public function getElement($priority) {
+ return (isset($this->elements[$priority])) ? $this->elements[$priority] : false;
+ }
+
+ /**
+ * Returns if the list contains $element.
+ *
+ * @param mixed $element The element to check.
+ * @param bool $strict Use strict checking?
+ * @return bool
+ */
+ public function contains($element, $strict = false) {
+ return $this->getPriority($element, $strict) !== false;
+ }
+
+
+ /**********************
+ * Interface methods *
+ **********************/
+
+ /**
+ * Iterator
+ */
+
+ /**
+ * PHP Iterator Interface
+ *
+ * @see Iterator::rewind()
+ * @return void
+ */
+ public function rewind() {
+ $this->sortIfUnsorted();
+ return reset($this->elements);
+ }
+
+ /**
+ * PHP Iterator Interface
+ *
+ * @see Iterator::current()
+ * @return mixed
+ */
+ public function current() {
+ $this->sortIfUnsorted();
+ return current($this->elements);
+ }
+
+ /**
+ * PHP Iterator Interface
+ *
+ * @see Iterator::key()
+ * @return int
+ */
+ public function key() {
+ $this->sortIfUnsorted();
+ return key($this->elements);
+ }
+
+ /**
+ * PHP Iterator Interface
+ *
+ * @see Iterator::next()
+ * @return mixed
+ */
+ public function next() {
+ $this->sortIfUnsorted();
+ return next($this->elements);
+ }
+
+ /**
+ * PHP Iterator Interface
+ *
+ * @see Iterator::valid()
+ * @return bool
+ */
+ public function valid() {
+ $this->sortIfUnsorted();
+ $key = key($this->elements);
+ return ($key !== NULL && $key !== FALSE);
+ }
+
+ /**
+ * Countable interface
+ *
+ * @see Countable::count()
+ * @return int
+ */
+ public function count() {
+ return count($this->elements);
+ }
+} \ No newline at end of file
diff --git a/engine/classes/ElggRelationship.php b/engine/classes/ElggRelationship.php
new file mode 100644
index 000000000..d2e88882a
--- /dev/null
+++ b/engine/classes/ElggRelationship.php
@@ -0,0 +1,231 @@
+<?php
+/**
+ * Relationship class.
+ *
+ * @package Elgg.Core
+ * @subpackage Core
+ *
+ * @property int $id The unique identifier (read-only)
+ * @property int $guid_one The GUID of the subject of the relationship
+ * @property string $relationship The name of the relationship
+ * @property int $guid_two The GUID of the object of the relationship
+ * @property int $time_created A UNIX timestamp of when the relationship was created (read-only, set on first save)
+ */
+class ElggRelationship extends ElggData implements
+ Importable
+{
+
+ /**
+ * Create a relationship object, optionally from a given id value or row.
+ *
+ * @param mixed $id ElggRelationship id, database row, or null for new relationship
+ */
+ function __construct($id = null) {
+ $this->initializeAttributes();
+
+ if (!empty($id)) {
+ if ($id instanceof stdClass) {
+ $relationship = $id; // Create from db row
+ } else {
+ $relationship = get_relationship($id);
+ }
+
+ if ($relationship) {
+ $objarray = (array) $relationship;
+ foreach ($objarray as $key => $value) {
+ $this->attributes[$key] = $value;
+ }
+ }
+ }
+ }
+
+ /**
+ * Class member get overloading
+ *
+ * @param string $name Name
+ *
+ * @return mixed
+ */
+ function get($name) {
+ if (array_key_exists($name, $this->attributes)) {
+ return $this->attributes[$name];
+ }
+
+ return null;
+ }
+
+ /**
+ * Class member set overloading
+ *
+ * @param string $name Name
+ * @param mixed $value Value
+ *
+ * @return mixed
+ */
+ function set($name, $value) {
+ $this->attributes[$name] = $value;
+ return true;
+ }
+
+ /**
+ * Save the relationship
+ *
+ * @return int the relationship id
+ * @throws IOException
+ */
+ public function save() {
+ if ($this->id > 0) {
+ delete_relationship($this->id);
+ }
+
+ $this->id = add_entity_relationship($this->guid_one, $this->relationship, $this->guid_two);
+ if (!$this->id) {
+ throw new IOException(elgg_echo('IOException:UnableToSaveNew', array(get_class())));
+ }
+
+ return $this->id;
+ }
+
+ /**
+ * Delete a given relationship.
+ *
+ * @return bool
+ */
+ public function delete() {
+ return delete_relationship($this->id);
+ }
+
+ /**
+ * Get a URL for this relationship.
+ *
+ * @return string
+ */
+ public function getURL() {
+ return get_relationship_url($this->id);
+ }
+
+ // EXPORTABLE INTERFACE ////////////////////////////////////////////////////////////
+
+ /**
+ * Return an array of fields which can be exported.
+ *
+ * @return array
+ */
+ public function getExportableValues() {
+ return array(
+ 'id',
+ 'guid_one',
+ 'relationship',
+ 'guid_two'
+ );
+ }
+
+ /**
+ * Export this relationship
+ *
+ * @return array
+ */
+ public function export() {
+ $uuid = get_uuid_from_object($this);
+ $relationship = new ODDRelationship(
+ guid_to_uuid($this->guid_one),
+ $this->relationship,
+ guid_to_uuid($this->guid_two)
+ );
+
+ $relationship->setAttribute('uuid', $uuid);
+
+ return $relationship;
+ }
+
+ // IMPORTABLE INTERFACE ////////////////////////////////////////////////////////////
+
+ /**
+ * Import a relationship
+ *
+ * @param ODD $data ODD data
+
+ * @return bool
+ * @throws ImportException|InvalidParameterException
+ */
+ public function import(ODD $data) {
+ if (!($data instanceof ODDRelationship)) {
+ throw new InvalidParameterException(elgg_echo('InvalidParameterException:UnexpectedODDClass'));
+ }
+
+ $uuid_one = $data->getAttribute('uuid1');
+ $uuid_two = $data->getAttribute('uuid2');
+
+ // See if this entity has already been imported, if so then we need to link to it
+ $entity1 = get_entity_from_uuid($uuid_one);
+ $entity2 = get_entity_from_uuid($uuid_two);
+ if (($entity1) && ($entity2)) {
+ // Set the item ID
+ $this->attributes['guid_one'] = $entity1->getGUID();
+ $this->attributes['guid_two'] = $entity2->getGUID();
+
+ // Map verb to relationship
+ //$verb = $data->getAttribute('verb');
+ //$relationship = get_relationship_from_verb($verb);
+ $relationship = $data->getAttribute('type');
+
+ if ($relationship) {
+ $this->attributes['relationship'] = $relationship;
+ // save
+ $result = $this->save();
+ if (!$result) {
+ throw new ImportException(elgg_echo('ImportException:ProblemSaving', array(get_class())));
+ }
+
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ // SYSTEM LOG INTERFACE ////////////////////////////////////////////////////////////
+
+ /**
+ * Return an identification for the object for storage in the system log.
+ * This id must be an integer.
+ *
+ * @return int
+ */
+ public function getSystemLogID() {
+ return $this->id;
+ }
+
+ /**
+ * For a given ID, return the object associated with it.
+ * This is used by the river functionality primarily.
+ * This is useful for checking access permissions etc on objects.
+ *
+ * @param int $id ID
+ *
+ * @return ElggRelationship
+ */
+ public function getObjectFromID($id) {
+ return get_relationship($id);
+ }
+
+ /**
+ * Return a type of the object - eg. object, group, user, relationship, metadata, annotation etc
+ *
+ * @return string 'relationship'
+ */
+ public function getType() {
+ return 'relationship';
+ }
+
+ /**
+ * Return a subtype. For metadata & annotations this is the 'name' and for relationship this
+ * is the relationship type.
+ *
+ * @return string
+ */
+ public function getSubtype() {
+ return $this->relationship;
+ }
+
+}
diff --git a/engine/classes/ElggRiverItem.php b/engine/classes/ElggRiverItem.php
new file mode 100644
index 000000000..d3d09cd91
--- /dev/null
+++ b/engine/classes/ElggRiverItem.php
@@ -0,0 +1,115 @@
+<?php
+/**
+ * River item class.
+ *
+ * @package Elgg.Core
+ * @subpackage Core
+ *
+ * @property int $id The unique identifier (read-only)
+ * @property int $subject_guid The GUID of the actor
+ * @property int $object_guid The GUID of the object
+ * @property int $annotation_id The ID of the annotation involved in the action
+ * @property string $type The type of one of the entities involved in the action
+ * @property string $subtype The subtype of one of the entities involved in the action
+ * @property string $action_type The name of the action
+ * @property string $view The view for displaying this river item
+ * @property int $access_id The visibility of the river item
+ * @property int $posted UNIX timestamp when the action occurred
+ */
+class ElggRiverItem {
+ public $id;
+ public $subject_guid;
+ public $object_guid;
+ public $annotation_id;
+ public $type;
+ public $subtype;
+ public $action_type;
+ public $access_id;
+ public $view;
+ public $posted;
+
+ /**
+ * Construct a river item object given a database row.
+ *
+ * @param stdClass $object Object obtained from database
+ */
+ function __construct($object) {
+ if (!($object instanceof stdClass)) {
+ // throw exception
+ }
+
+ // the casting is to support typed serialization like json
+ $int_types = array('id', 'subject_guid', 'object_guid', 'annotation_id', 'access_id', 'posted');
+ foreach ($object as $key => $value) {
+ if (in_array($key, $int_types)) {
+ $this->$key = (int)$value;
+ } else {
+ $this->$key = $value;
+ }
+ }
+ }
+
+ /**
+ * Get the subject of this river item
+ *
+ * @return ElggEntity
+ */
+ public function getSubjectEntity() {
+ return get_entity($this->subject_guid);
+ }
+
+ /**
+ * Get the object of this river item
+ *
+ * @return ElggEntity
+ */
+ public function getObjectEntity() {
+ return get_entity($this->object_guid);
+ }
+
+ /**
+ * Get the Annotation for this river item
+ *
+ * @return ElggAnnotation
+ */
+ public function getAnnotation() {
+ return elgg_get_annotation_from_id($this->annotation_id);
+ }
+
+ /**
+ * Get the view used to display this river item
+ *
+ * @return string
+ */
+ public function getView() {
+ return $this->view;
+ }
+
+ /**
+ * Get the time this activity was posted
+ *
+ * @return int
+ */
+ public function getPostedTime() {
+ return (int)$this->posted;
+ }
+
+ /**
+ * Get the type of the object
+ *
+ * @return string 'river'
+ */
+ public function getType() {
+ return 'river';
+ }
+
+ /**
+ * Get the subtype of the object
+ *
+ * @return string 'item'
+ */
+ public function getSubtype() {
+ return 'item';
+ }
+
+}
diff --git a/engine/classes/ElggSession.php b/engine/classes/ElggSession.php
new file mode 100644
index 000000000..9750f063e
--- /dev/null
+++ b/engine/classes/ElggSession.php
@@ -0,0 +1,153 @@
+<?php
+/**
+ * Magic session class.
+ * This class is intended to extend the $_SESSION magic variable by providing an API hook
+ * to plug in other values.
+ *
+ * Primarily this is intended to provide a way of supplying "logged in user"
+ * details without touching the session (which can cause problems when
+ * accessed server side).
+ *
+ * If a value is present in the session then that value is returned, otherwise
+ * a plugin hook 'session:get', '$var' is called, where $var is the variable
+ * being requested.
+ *
+ * Setting values will store variables in the session in the normal way.
+ *
+ * LIMITATIONS: You can not access multidimensional arrays
+ *
+ * @package Elgg.Core
+ * @subpackage Sessions
+ */
+class ElggSession implements ArrayAccess {
+ /** Local cache of trigger retrieved variables */
+ private static $__localcache;
+
+ /**
+ * Test if property is set either as an attribute or metadata.
+ *
+ * @param string $key The name of the attribute or metadata.
+ *
+ * @return bool
+ */
+ function __isset($key) {
+ return $this->offsetExists($key);
+ }
+
+ /**
+ * Set a value, go straight to session.
+ *
+ * @param string $key Name
+ * @param mixed $value Value
+ *
+ * @return void
+ */
+ function offsetSet($key, $value) {
+ $_SESSION[$key] = $value;
+ }
+
+ /**
+ * Get a variable from either the session, or if its not in the session
+ * attempt to get it from an api call.
+ *
+ * @see ArrayAccess::offsetGet()
+ *
+ * @param mixed $key Name
+ *
+ * @return mixed
+ */
+ function offsetGet($key) {
+ if (!ElggSession::$__localcache) {
+ ElggSession::$__localcache = array();
+ }
+
+ if (isset($_SESSION[$key])) {
+ return $_SESSION[$key];
+ }
+
+ if (isset(ElggSession::$__localcache[$key])) {
+ return ElggSession::$__localcache[$key];
+ }
+
+ $value = NULL;
+ $value = elgg_trigger_plugin_hook('session:get', $key, NULL, $value);
+
+ ElggSession::$__localcache[$key] = $value;
+
+ return ElggSession::$__localcache[$key];
+ }
+
+ /**
+ * Unset a value from the cache and the session.
+ *
+ * @see ArrayAccess::offsetUnset()
+ *
+ * @param mixed $key Name
+ *
+ * @return void
+ */
+ function offsetUnset($key) {
+ unset(ElggSession::$__localcache[$key]);
+ unset($_SESSION[$key]);
+ }
+
+ /**
+ * Return whether the value is set in either the session or the cache.
+ *
+ * @see ArrayAccess::offsetExists()
+ *
+ * @param int $offset Offset
+ *
+ * @return bool
+ */
+ function offsetExists($offset) {
+ if (isset(ElggSession::$__localcache[$offset])) {
+ return true;
+ }
+
+ if (isset($_SESSION[$offset])) {
+ return true;
+ }
+
+ if ($this->offsetGet($offset)) {
+ return true;
+ }
+
+ return false;
+ }
+
+
+ /**
+ * Alias to ::offsetGet()
+ *
+ * @param string $key Name
+ *
+ * @return mixed
+ */
+ function get($key) {
+ return $this->offsetGet($key);
+ }
+
+ /**
+ * Alias to ::offsetSet()
+ *
+ * @param string $key Name
+ * @param mixed $value Value
+ *
+ * @return void
+ */
+ function set($key, $value) {
+ $this->offsetSet($key, $value);
+ }
+
+ /**
+ * Alias to offsetUnset()
+ *
+ * @param string $key Name
+ *
+ * @return void
+ */
+ function del($key) {
+ $this->offsetUnset($key);
+ }
+}
diff --git a/engine/classes/ElggSharedMemoryCache.php b/engine/classes/ElggSharedMemoryCache.php
new file mode 100644
index 000000000..f5f11d2c7
--- /dev/null
+++ b/engine/classes/ElggSharedMemoryCache.php
@@ -0,0 +1,40 @@
+<?php
+/**
+ * Shared memory cache description.
+ * Extends ElggCache with functions useful to shared memory
+ * style caches (static variables, memcache etc)
+ *
+ * @package Elgg.Core
+ * @subpackage Cache
+ */
+abstract class ElggSharedMemoryCache extends ElggCache {
+ /**
+ * Namespace variable used to keep various bits of the cache
+ * separate.
+ *
+ * @var string
+ */
+ private $namespace;
+
+ /**
+ * Set the namespace of this cache.
+ * This is useful for cache types (like memcache or static variables) where there is one large
+ * flat area of memory shared across all instances of the cache.
+ *
+ * @param string $namespace Namespace for cache
+ *
+ * @return void
+ */
+ public function setNamespace($namespace = "default") {
+ $this->namespace = $namespace;
+ }
+
+ /**
+ * Get the namespace currently defined.
+ *
+ * @return string
+ */
+ public function getNamespace() {
+ return $this->namespace;
+ }
+}
diff --git a/engine/classes/ElggSite.php b/engine/classes/ElggSite.php
new file mode 100644
index 000000000..dd996fe98
--- /dev/null
+++ b/engine/classes/ElggSite.php
@@ -0,0 +1,455 @@
+<?php
+/**
+ * A Site entity.
+ *
+ * ElggSite represents a single site entity.
+ *
+ * An ElggSite object is an ElggEntity child class with the subtype
+ * of "site." It is created upon installation and hold all the
+ * information about a site:
+ * - name
+ * - description
+ * - url
+ *
+ * Every ElggEntity (except ElggSite) belongs to a site.
+ *
+ * @internal ElggSite represents a single row from the sites_entity
+ * table, as well as the corresponding ElggEntity row from the entities table.
+ *
+ * @warning Multiple site support isn't fully developed.
+ *
+ * @package Elgg.Core
+ * @subpackage DataMode.Site
+ * @link http://docs.elgg.org/DataModel/Sites
+ *
+ * @property string $name The name or title of the website
+ * @property string $description A motto, mission statement, or description of the website
+ * @property string $url The root web address for the site, including trailing slash
+ */
+class ElggSite extends ElggEntity {
+
+ /**
+ * Initialise the attributes array.
+ * This is vital to distinguish between metadata and base parameters.
+ *
+ * Place your base parameters here.
+ *
+ * @return void
+ */
+ protected function initializeAttributes() {
+ parent::initializeAttributes();
+
+ $this->attributes['type'] = "site";
+ $this->attributes['name'] = NULL;
+ $this->attributes['description'] = NULL;
+ $this->attributes['url'] = NULL;
+ $this->attributes['tables_split'] = 2;
+ }
+
+ /**
+ * Load or create a new ElggSite.
+ *
+ * If no arguments are passed, create a new entity.
+ *
+ * If an argument is passed attempt to load a full Site entity. Arguments
+ * can be:
+ * - The GUID of a site entity.
+ * - A URL as stored in ElggSite->url
+ * - A DB result object with a guid property
+ *
+ * @param mixed $guid If an int, load that GUID. If a db row then will
+ * load the rest of the data.
+ *
+ * @throws IOException If passed an incorrect guid
+ * @throws InvalidParameterException If passed an Elgg* Entity that isn't an ElggSite
+ */
+ function __construct($guid = null) {
+ $this->initializeAttributes();
+
+ // compatibility for 1.7 api.
+ $this->initialise_attributes(false);
+
+ if (!empty($guid)) {
+ // Is $guid is a DB entity table row
+ if ($guid instanceof stdClass) {
+ // Load the rest
+ if (!$this->load($guid)) {
+ $msg = elgg_echo('IOException:FailedToLoadGUID', array(get_class(), $guid->guid));
+ throw new IOException($msg);
+ }
+ } else if ($guid instanceof ElggSite) {
+ // $guid is an ElggSite so this is a copy constructor
+ elgg_deprecated_notice('This type of usage of the ElggSite constructor was deprecated. Please use the clone method.', 1.7);
+
+ foreach ($guid->attributes as $key => $value) {
+ $this->attributes[$key] = $value;
+ }
+ } else if ($guid instanceof ElggEntity) {
+ // @todo remove and just use else clause
+ throw new InvalidParameterException(elgg_echo('InvalidParameterException:NonElggSite'));
+ } else if (strpos($guid, "http") !== false) {
+ // url so retrieve by url
+ $guid = get_site_by_url($guid);
+ foreach ($guid->attributes as $key => $value) {
+ $this->attributes[$key] = $value;
+ }
+ } else if (is_numeric($guid)) {
+ // $guid is a GUID so load
+ if (!$this->load($guid)) {
+ throw new IOException(elgg_echo('IOException:FailedToLoadGUID', array(get_class(), $guid)));
+ }
+ } else {
+ throw new InvalidParameterException(elgg_echo('InvalidParameterException:UnrecognisedValue'));
+ }
+ }
+ }
+
+ /**
+ * Loads the full ElggSite when given a guid.
+ *
+ * @param mixed $guid GUID of ElggSite entity or database row object
+ *
+ * @return bool
+ * @throws InvalidClassException
+ */
+ protected function load($guid) {
+ $attr_loader = new ElggAttributeLoader(get_class(), 'site', $this->attributes);
+ $attr_loader->requires_access_control = !($this instanceof ElggPlugin);
+ $attr_loader->secondary_loader = 'get_site_entity_as_row';
+
+ $attrs = $attr_loader->getRequiredAttributes($guid);
+ if (!$attrs) {
+ return false;
+ }
+
+ $this->attributes = $attrs;
+ $this->attributes['tables_loaded'] = 2;
+ _elgg_cache_entity($this);
+
+ return true;
+ }
+
+ /**
+ * Saves site-specific attributes.
+ *
+ * @internal Site attributes are saved in the sites_entity table.
+ *
+ * @return bool
+ */
+ public function save() {
+ global $CONFIG;
+
+ // Save generic stuff
+ if (!parent::save()) {
+ return false;
+ }
+
+ // make sure the site guid is set (if not, set to self)
+ if (!$this->get('site_guid')) {
+ $guid = $this->get('guid');
+ update_data("UPDATE {$CONFIG->dbprefix}entities SET site_guid=$guid
+ WHERE guid=$guid");
+ }
+
+ // Now save specific stuff
+ return create_site_entity($this->get('guid'), $this->get('name'),
+ $this->get('description'), $this->get('url'));
+ }
+
+ /**
+ * Delete the site.
+ *
+ * @note You cannot delete the current site.
+ *
+ * @return bool
+ * @throws SecurityException
+ */
+ public function delete() {
+ global $CONFIG;
+ if ($CONFIG->site->getGUID() == $this->guid) {
+ throw new SecurityException('SecurityException:deletedisablecurrentsite');
+ }
+
+ return parent::delete();
+ }
+
+ /**
+ * Disable the site
+ *
+ * @note You cannot disable the current site.
+ *
+ * @param string $reason Optional reason for disabling
+ * @param bool $recursive Recursively disable all contained entities?
+ *
+ * @return bool
+ * @throws SecurityException
+ */
+ public function disable($reason = "", $recursive = true) {
+ global $CONFIG;
+
+ if ($CONFIG->site->getGUID() == $this->guid) {
+ throw new SecurityException('SecurityException:deletedisablecurrentsite');
+ }
+
+ return parent::disable($reason, $recursive);
+ }
+
+ /**
+ * Gets an array of ElggUser entities who are members of the site.
+ *
+ * @param array $options An associative array for key => value parameters
+ * accepted by elgg_get_entities(). Common parameters
+ * include 'limit', and 'offset'.
+ * Note: this was $limit before version 1.8
+ * @param int $offset Offset @deprecated parameter
+ *
+ * @todo remove $offset in 2.0
+ *
+ * @return array of ElggUsers
+ */
+ public function getMembers($options = array(), $offset = 0) {
+ if (!is_array($options)) {
+ elgg_deprecated_notice("ElggSite::getMembers uses different arguments!", 1.8);
+ $options = array(
+ 'limit' => $options,
+ 'offset' => $offset,
+ );
+ }
+
+ $defaults = array(
+ 'site_guids' => ELGG_ENTITIES_ANY_VALUE,
+ 'relationship' => 'member_of_site',
+ 'relationship_guid' => $this->getGUID(),
+ 'inverse_relationship' => TRUE,
+ 'type' => 'user',
+ );
+
+ $options = array_merge($defaults, $options);
+
+ return elgg_get_entities_from_relationship($options);
+ }
+
+ /**
+ * List the members of this site
+ *
+ * @param array $options An associative array for key => value parameters
+ * accepted by elgg_list_entities(). Common parameters
+ * include 'full_view', 'limit', and 'offset'.
+ *
+ * @return string
+ * @since 1.8.0
+ */
+ public function listMembers($options = array()) {
+ $defaults = array(
+ 'site_guids' => ELGG_ENTITIES_ANY_VALUE,
+ 'relationship' => 'member_of_site',
+ 'relationship_guid' => $this->getGUID(),
+ 'inverse_relationship' => TRUE,
+ 'type' => 'user',
+ );
+
+ $options = array_merge($defaults, $options);
+
+ return elgg_list_entities_from_relationship($options);
+ }
+
+ /**
+ * Adds a user to the site.
+ *
+ * @param int $user_guid GUID
+ *
+ * @return bool
+ */
+ public function addUser($user_guid) {
+ return add_site_user($this->getGUID(), $user_guid);
+ }
+
+ /**
+ * Removes a user from the site.
+ *
+ * @param int $user_guid GUID
+ *
+ * @return bool
+ */
+ public function removeUser($user_guid) {
+ return remove_site_user($this->getGUID(), $user_guid);
+ }
+
+ /**
+ * Returns an array of ElggObject entities that belong to the site.
+ *
+ * @warning This only returns objects that have been explicitly added to the
+ * site through addObject()
+ *
+ * @param string $subtype Entity subtype
+ * @param int $limit Limit
+ * @param int $offset Offset
+ *
+ * @return array
+ */
+ public function getObjects($subtype = "", $limit = 10, $offset = 0) {
+ return get_site_objects($this->getGUID(), $subtype, $limit, $offset);
+ }
+
+ /**
+ * Adds an object to the site.
+ *
+ * @param int $object_guid GUID
+ *
+ * @return bool
+ */
+ public function addObject($object_guid) {
+ return add_site_object($this->getGUID(), $object_guid);
+ }
+
+ /**
+ * Remvoes an object from the site.
+ *
+ * @param int $object_guid GUID
+ *
+ * @return bool
+ */
+ public function removeObject($object_guid) {
+ return remove_site_object($this->getGUID(), $object_guid);
+ }
+
+ /**
+ * Get the collections associated with a site.
+ *
+ * @param string $subtype Subtype
+ * @param int $limit Limit
+ * @param int $offset Offset
+ *
+ * @return unknown
+ * @deprecated 1.8 Was never implemented
+ */
+ public function getCollections($subtype = "", $limit = 10, $offset = 0) {
+ elgg_deprecated_notice("ElggSite::getCollections() is deprecated", 1.8);
+ get_site_collections($this->getGUID(), $subtype, $limit, $offset);
+ }
+
+ /*
+ * EXPORTABLE INTERFACE
+ */
+
+ /**
+ * Return an array of fields which can be exported.
+ *
+ * @return array
+ */
+ public function getExportableValues() {
+ return array_merge(parent::getExportableValues(), array(
+ 'name',
+ 'description',
+ 'url',
+ ));
+ }
+
+ /**
+ * Halts bootup and redirects to the site front page
+ * if site is in walled garden mode, no user is logged in,
+ * and the URL is not a public page.
+ *
+ * @link http://docs.elgg.org/Tutorials/WalledGarden
+ *
+ * @return void
+ * @since 1.8.0
+ */
+ public function checkWalledGarden() {
+ global $CONFIG;
+
+ // command line calls should not invoke the walled garden check
+ if (PHP_SAPI === 'cli') {
+ return;
+ }
+
+ if ($CONFIG->walled_garden) {
+ if ($CONFIG->default_access == ACCESS_PUBLIC) {
+ $CONFIG->default_access = ACCESS_LOGGED_IN;
+ }
+ elgg_register_plugin_hook_handler(
+ 'access:collections:write',
+ 'user',
+ '_elgg_walled_garden_remove_public_access');
+
+ if (!elgg_is_logged_in()) {
+ // hook into the index system call at the highest priority
+ elgg_register_plugin_hook_handler('index', 'system', 'elgg_walled_garden_index', 1);
+
+ if (!$this->isPublicPage()) {
+ if (!elgg_is_xhr()) {
+ $_SESSION['last_forward_from'] = current_page_url();
+ }
+ register_error(elgg_echo('loggedinrequired'));
+ forward();
+ }
+ }
+ }
+ }
+
+ /**
+ * Returns if a URL is public for this site when in Walled Garden mode.
+ *
+ * Pages are registered to be public by {@elgg_plugin_hook public_pages walled_garden}.
+ *
+ * @param string $url Defaults to the current URL.
+ *
+ * @return bool
+ * @since 1.8.0
+ */
+ public function isPublicPage($url = '') {
+ global $CONFIG;
+
+ if (empty($url)) {
+ $url = current_page_url();
+
+ // do not check against URL queries
+ if ($pos = strpos($url, '?')) {
+ $url = substr($url, 0, $pos);
+ }
+ }
+
+ // always allow index page
+ if ($url == elgg_get_site_url($this->guid)) {
+ return TRUE;
+ }
+
+ // default public pages
+ $defaults = array(
+ 'walled_garden/.*',
+ 'login',
+ 'action/login',
+ 'register',
+ 'action/register',
+ 'forgotpassword',
+ 'resetpassword',
+ 'action/user/requestnewpassword',
+ 'action/user/passwordreset',
+ 'action/security/refreshtoken',
+ 'ajax/view/js/languages',
+ 'upgrade\.php',
+ 'xml-rpc\.php',
+ 'mt/mt-xmlrpc\.cgi',
+ 'css/.*',
+ 'js/.*',
+ 'cache/css/.*',
+ 'cache/js/.*',
+ 'cron/.*',
+ 'services/.*',
+ );
+
+ // include a hook for plugin authors to include public pages
+ $plugins = elgg_trigger_plugin_hook('public_pages', 'walled_garden', NULL, array());
+
+ // allow public pages
+ foreach (array_merge($defaults, $plugins) as $public) {
+ $pattern = "`^{$CONFIG->url}$public/*$`i";
+ if (preg_match($pattern, $url)) {
+ return TRUE;
+ }
+ }
+
+ // non-public page
+ return FALSE;
+ }
+}
diff --git a/engine/classes/ElggStaticVariableCache.php b/engine/classes/ElggStaticVariableCache.php
new file mode 100644
index 000000000..9c14fdfba
--- /dev/null
+++ b/engine/classes/ElggStaticVariableCache.php
@@ -0,0 +1,96 @@
+<?php
+/**
+ * ElggStaticVariableCache
+ * Dummy cache which stores values in a static array. Using this makes future
+ * replacements to other caching back ends (eg memcache) much easier.
+ *
+ * @package Elgg.Core
+ * @subpackage Cache
+ */
+class ElggStaticVariableCache extends ElggSharedMemoryCache {
+ /**
+ * The cache.
+ *
+ * @var array
+ */
+ private static $__cache;
+
+ /**
+ * Create the variable cache.
+ *
+ * This function creates a variable cache in a static variable in
+ * memory, optionally with a given namespace (to avoid overlap).
+ *
+ * @param string $namespace The namespace for this cache to write to.
+ * @warning namespaces of the same name are shared!
+ */
+ function __construct($namespace = 'default') {
+ $this->setNamespace($namespace);
+ $this->clear();
+ }
+
+ /**
+ * Save a key
+ *
+ * @param string $key Name
+ * @param string $data Value
+ *
+ * @return boolean
+ */
+ public function save($key, $data) {
+ $namespace = $this->getNamespace();
+
+ ElggStaticVariableCache::$__cache[$namespace][$key] = $data;
+
+ return true;
+ }
+
+ /**
+ * Load a key
+ *
+ * @param string $key Name
+ * @param int $offset Offset
+ * @param int $limit Limit
+ *
+ * @return string
+ */
+ public function load($key, $offset = 0, $limit = null) {
+ $namespace = $this->getNamespace();
+
+ if (isset(ElggStaticVariableCache::$__cache[$namespace][$key])) {
+ return ElggStaticVariableCache::$__cache[$namespace][$key];
+ }
+
+ return false;
+ }
+
+ /**
+ * Invalidate a given key.
+ *
+ * @param string $key Name
+ *
+ * @return bool
+ */
+ public function delete($key) {
+ $namespace = $this->getNamespace();
+
+ unset(ElggStaticVariableCache::$__cache[$namespace][$key]);
+
+ return true;
+ }
+
+ /**
+ * Clears the cache for a particular namespace
+ *
+ * @return void
+ */
+ public function clear() {
+ $namespace = $this->getNamespace();
+
+ if (!isset(ElggStaticVariableCache::$__cache)) {
+ ElggStaticVariableCache::$__cache = array();
+ }
+
+ ElggStaticVariableCache::$__cache[$namespace] = array();
+ }
+}
diff --git a/engine/classes/ElggTranslit.php b/engine/classes/ElggTranslit.php
new file mode 100644
index 000000000..b4bf87797
--- /dev/null
+++ b/engine/classes/ElggTranslit.php
@@ -0,0 +1,269 @@
+<?php
+/**
+ * Elgg Transliterate
+ *
+ * For creating "friendly titles" for URLs
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.doctrine-project.org>.
+ *
+ * @package Elgg.Core
+ * @author Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @author Jonathan H. Wage <jonwage@gmail.com>
+ * @author Steve Clay <steve@mrclay.org>
+ *
+ * @access private Plugin authors should not use this directly
+ */
+class ElggTranslit {
+
+ /**
+ * Create a version of a string for embedding in a URL
+ *
+ * @param string $string A UTF-8 string
+ * @param string $separator The character to separate words with
+ * @return string
+ */
+ static public function urlize($string, $separator = '-') {
+ // Iñtërnâtiônàlizætiøn, AND 日本語!
+
+ // try to force combined chars because the translit map and others expect it
+ if (self::hasNormalizerSupport()) {
+ $nfc = normalizer_normalize($string);
+ if (is_string($nfc)) {
+ $string = $nfc;
+ }
+ }
+ // Internationalization, AND 日本語!
+ $string = self::transliterateAscii($string);
+
+ // allow HTML tags in titles
+ $string = preg_replace('~<([a-zA-Z][^>]*)>~', ' $1 ', $string);
+
+ // more substitutions
+ // @todo put these somewhere else
+ $string = strtr($string, array(
+ // currency
+ "\xE2\x82\xAC" /* € */ => ' E ',
+ "\xC2\xA3" /* £ */ => ' GBP ',
+ ));
+
+ // remove all ASCII except 0-9a-zA-Z, hyphen, underscore, and whitespace
+ // note: "x" modifier did not work with this pattern.
+ $string = preg_replace('~['
+ . '\x00-\x08' // control chars
+ . '\x0b\x0c' // vert tab, form feed
+ . '\x0e-\x1f' // control chars
+ . '\x21-\x2c' // ! ... ,
+ . '\x2e\x2f' // . slash
+ . '\x3a-\x40' // : ... @
+ . '\x5b-\x5e' // [ ... ^
+ . '\x60' // `
+ . '\x7b-\x7f' // { ... DEL
+ . ']~', '', $string);
+ $string = strtr($string, '', '');
+
+ // internationalization, and 日本語!
+ // note: not using elgg_strtolower to keep this class portable
+ $string = is_callable('mb_strtolower')
+ ? mb_strtolower($string, 'UTF-8')
+ : strtolower($string);
+
+ // split by ASCII chars not in 0-9a-zA-Z
+ // note: we cannot use [^0-9a-zA-Z] because that matches multibyte chars.
+ // note: "x" modifier did not work with this pattern.
+ $pattern = '~['
+ . '\x00-\x2f' // controls ... slash
+ . '\x3a-\x40' // : ... @
+ . '\x5b-\x60' // [ ... `
+ . '\x7b-\x7f' // { ... DEL
+ . ']+~x';
+
+ // ['internationalization', 'and', '日本語']
+ $words = preg_split($pattern, $string, -1, PREG_SPLIT_NO_EMPTY);
+
+ // ['internationalization', 'and', '%E6%97%A5%E6%9C%AC%E8%AA%9E']
+ $words = array_map('urlencode', $words);
+
+ // internationalization-and-%E6%97%A5%E6%9C%AC%E8%AA%9E
+ return implode($separator, $words);
+ }
+
+ /**
+ * Transliterate Western multibyte chars to ASCII
+ *
+ * @param string $utf8 a UTF-8 string
+ * @return string
+ */
+ static public function transliterateAscii($utf8) {
+ static $map = null;
+ if (!preg_match('/[\x80-\xff]/', $utf8)) {
+ return $utf8;
+ }
+ if (null === $map) {
+ $map = self::getAsciiTranslitMap();
+ }
+ return strtr($utf8, $map);
+ }
+
+ /**
+ * Get array of UTF-8 (NFC) character replacements.
+ *
+ * @return array
+ */
+ static public function getAsciiTranslitMap() {
+ return array(
+ // Decompositions for Latin-1 Supplement
+ "\xC2\xAA" /* ª */ => 'a', "\xC2\xBA" /* º */ => 'o', "\xC3\x80" /* À */ => 'A',
+ "\xC3\x81" /* à */ => 'A', "\xC3\x82" /* Â */ => 'A', "\xC3\x83" /* Ã */ => 'A',
+ "\xC3\x84" /* Ä */ => 'A', "\xC3\x85" /* Å */ => 'A', "\xC3\x86" /* Æ */ => 'AE',
+ "\xC3\x87" /* Ç */ => 'C', "\xC3\x88" /* È */ => 'E', "\xC3\x89" /* É */ => 'E',
+ "\xC3\x8A" /* Ê */ => 'E', "\xC3\x8B" /* Ë */ => 'E', "\xC3\x8C" /* Ì */ => 'I',
+ "\xC3\x8D" /* Ã */ => 'I', "\xC3\x8E" /* ÃŽ */ => 'I', "\xC3\x8F" /* Ã */ => 'I',
+ "\xC3\x90" /* à */ => 'D', "\xC3\x91" /* Ñ */ => 'N', "\xC3\x92" /* Ò */ => 'O',
+ "\xC3\x93" /* Ó */ => 'O', "\xC3\x94" /* Ô */ => 'O', "\xC3\x95" /* Õ */ => 'O',
+ "\xC3\x96" /* Ö */ => 'O', "\xC3\x99" /* Ù */ => 'U', "\xC3\x9A" /* Ú */ => 'U',
+ "\xC3\x9B" /* Û */ => 'U', "\xC3\x9C" /* Ü */ => 'U', "\xC3\x9D" /* à */ => 'Y',
+ "\xC3\x9E" /* Þ */ => 'TH', "\xC3\x9F" /* ß */ => 'ss', "\xC3\xA0" /* à */ => 'a',
+ "\xC3\xA1" /* á */ => 'a', "\xC3\xA2" /* â */ => 'a', "\xC3\xA3" /* ã */ => 'a',
+ "\xC3\xA4" /* ä */ => 'a', "\xC3\xA5" /* å */ => 'a', "\xC3\xA6" /* æ */ => 'ae',
+ "\xC3\xA7" /* ç */ => 'c', "\xC3\xA8" /* è */ => 'e', "\xC3\xA9" /* é */ => 'e',
+ "\xC3\xAA" /* ê */ => 'e', "\xC3\xAB" /* ë */ => 'e', "\xC3\xAC" /* ì */ => 'i',
+ "\xC3\xAD" /* í */ => 'i', "\xC3\xAE" /* î */ => 'i', "\xC3\xAF" /* ï */ => 'i',
+ "\xC3\xB0" /* ð */ => 'd', "\xC3\xB1" /* ñ */ => 'n', "\xC3\xB2" /* ò */ => 'o',
+ "\xC3\xB3" /* ó */ => 'o', "\xC3\xB4" /* ô */ => 'o', "\xC3\xB5" /* õ */ => 'o',
+ "\xC3\xB6" /* ö */ => 'o', "\xC3\xB8" /* ø */ => 'o', "\xC3\xB9" /* ù */ => 'u',
+ "\xC3\xBA" /* ú */ => 'u', "\xC3\xBB" /* û */ => 'u', "\xC3\xBC" /* ü */ => 'u',
+ "\xC3\xBD" /* ý */ => 'y', "\xC3\xBE" /* þ */ => 'th', "\xC3\xBF" /* ÿ */ => 'y',
+ "\xC3\x98" /* Ø */ => 'O',
+ // Decompositions for Latin Extended-A
+ "\xC4\x80" /* Ä€ */ => 'A', "\xC4\x81" /* Ä */ => 'a', "\xC4\x82" /* Ä‚ */ => 'A',
+ "\xC4\x83" /* ă */ => 'a', "\xC4\x84" /* Ą */ => 'A', "\xC4\x85" /* ą */ => 'a',
+ "\xC4\x86" /* Ć */ => 'C', "\xC4\x87" /* ć */ => 'c', "\xC4\x88" /* Ĉ */ => 'C',
+ "\xC4\x89" /* ĉ */ => 'c', "\xC4\x8A" /* Ċ */ => 'C', "\xC4\x8B" /* ċ */ => 'c',
+ "\xC4\x8C" /* ÄŒ */ => 'C', "\xC4\x8D" /* Ä */ => 'c', "\xC4\x8E" /* ÄŽ */ => 'D',
+ "\xC4\x8F" /* Ä */ => 'd', "\xC4\x90" /* Ä */ => 'D', "\xC4\x91" /* Ä‘ */ => 'd',
+ "\xC4\x92" /* Ä’ */ => 'E', "\xC4\x93" /* Ä“ */ => 'e', "\xC4\x94" /* Ä” */ => 'E',
+ "\xC4\x95" /* Ä• */ => 'e', "\xC4\x96" /* Ä– */ => 'E', "\xC4\x97" /* Ä— */ => 'e',
+ "\xC4\x98" /* Ę */ => 'E', "\xC4\x99" /* ę */ => 'e', "\xC4\x9A" /* Ě */ => 'E',
+ "\xC4\x9B" /* Ä› */ => 'e', "\xC4\x9C" /* Äœ */ => 'G', "\xC4\x9D" /* Ä */ => 'g',
+ "\xC4\x9E" /* Äž */ => 'G', "\xC4\x9F" /* ÄŸ */ => 'g', "\xC4\xA0" /* Ä  */ => 'G',
+ "\xC4\xA1" /* ġ */ => 'g', "\xC4\xA2" /* Ģ */ => 'G', "\xC4\xA3" /* ģ */ => 'g',
+ "\xC4\xA4" /* Ĥ */ => 'H', "\xC4\xA5" /* ĥ */ => 'h', "\xC4\xA6" /* Ħ */ => 'H',
+ "\xC4\xA7" /* ħ */ => 'h', "\xC4\xA8" /* Ĩ */ => 'I', "\xC4\xA9" /* ĩ */ => 'i',
+ "\xC4\xAA" /* Ī */ => 'I', "\xC4\xAB" /* ī */ => 'i', "\xC4\xAC" /* Ĭ */ => 'I',
+ "\xC4\xAD" /* ĭ */ => 'i', "\xC4\xAE" /* Į */ => 'I', "\xC4\xAF" /* į */ => 'i',
+ "\xC4\xB0" /* İ */ => 'I', "\xC4\xB1" /* ı */ => 'i', "\xC4\xB2" /* IJ */ => 'IJ',
+ "\xC4\xB3" /* ij */ => 'ij', "\xC4\xB4" /* Ĵ */ => 'J', "\xC4\xB5" /* ĵ */ => 'j',
+ "\xC4\xB6" /* Ķ */ => 'K', "\xC4\xB7" /* ķ */ => 'k', "\xC4\xB8" /* ĸ */ => 'k',
+ "\xC4\xB9" /* Ĺ */ => 'L', "\xC4\xBA" /* ĺ */ => 'l', "\xC4\xBB" /* Ļ */ => 'L',
+ "\xC4\xBC" /* ļ */ => 'l', "\xC4\xBD" /* Ľ */ => 'L', "\xC4\xBE" /* ľ */ => 'l',
+ "\xC4\xBF" /* Ŀ */ => 'L', "\xC5\x80" /* ŀ */ => 'l', "\xC5\x81" /* Š*/ => 'L',
+ "\xC5\x82" /* ł */ => 'l', "\xC5\x83" /* Ń */ => 'N', "\xC5\x84" /* ń */ => 'n',
+ "\xC5\x85" /* Ņ */ => 'N', "\xC5\x86" /* ņ */ => 'n', "\xC5\x87" /* Ň */ => 'N',
+ "\xC5\x88" /* ň */ => 'n', "\xC5\x89" /* ʼn */ => 'N', "\xC5\x8A" /* Ŋ */ => 'n',
+ "\xC5\x8B" /* ŋ */ => 'N', "\xC5\x8C" /* Ō */ => 'O', "\xC5\x8D" /* Š*/ => 'o',
+ "\xC5\x8E" /* ÅŽ */ => 'O', "\xC5\x8F" /* Å */ => 'o', "\xC5\x90" /* Å */ => 'O',
+ "\xC5\x91" /* Å‘ */ => 'o', "\xC5\x92" /* Å’ */ => 'OE', "\xC5\x93" /* Å“ */ => 'oe',
+ "\xC5\x94" /* Å” */ => 'R', "\xC5\x95" /* Å• */ => 'r', "\xC5\x96" /* Å– */ => 'R',
+ "\xC5\x97" /* ŗ */ => 'r', "\xC5\x98" /* Ř */ => 'R', "\xC5\x99" /* ř */ => 'r',
+ "\xC5\x9A" /* Ś */ => 'S', "\xC5\x9B" /* ś */ => 's', "\xC5\x9C" /* Ŝ */ => 'S',
+ "\xC5\x9D" /* Å */ => 's', "\xC5\x9E" /* Åž */ => 'S', "\xC5\x9F" /* ÅŸ */ => 's',
+ "\xC5\xA0" /* Š */ => 'S', "\xC5\xA1" /* š */ => 's', "\xC5\xA2" /* Ţ */ => 'T',
+ "\xC5\xA3" /* ţ */ => 't', "\xC5\xA4" /* Ť */ => 'T', "\xC5\xA5" /* ť */ => 't',
+ "\xC5\xA6" /* Ŧ */ => 'T', "\xC5\xA7" /* ŧ */ => 't', "\xC5\xA8" /* Ũ */ => 'U',
+ "\xC5\xA9" /* ũ */ => 'u', "\xC5\xAA" /* Ū */ => 'U', "\xC5\xAB" /* ū */ => 'u',
+ "\xC5\xAC" /* Ŭ */ => 'U', "\xC5\xAD" /* ŭ */ => 'u', "\xC5\xAE" /* Ů */ => 'U',
+ "\xC5\xAF" /* ů */ => 'u', "\xC5\xB0" /* Ű */ => 'U', "\xC5\xB1" /* ű */ => 'u',
+ "\xC5\xB2" /* Ų */ => 'U', "\xC5\xB3" /* ų */ => 'u', "\xC5\xB4" /* Ŵ */ => 'W',
+ "\xC5\xB5" /* ŵ */ => 'w', "\xC5\xB6" /* Ŷ */ => 'Y', "\xC5\xB7" /* ŷ */ => 'y',
+ "\xC5\xB8" /* Ÿ */ => 'Y', "\xC5\xB9" /* Ź */ => 'Z', "\xC5\xBA" /* ź */ => 'z',
+ "\xC5\xBB" /* Ż */ => 'Z', "\xC5\xBC" /* ż */ => 'z', "\xC5\xBD" /* Ž */ => 'Z',
+ "\xC5\xBE" /* ž */ => 'z', "\xC5\xBF" /* ſ */ => 's',
+ // Decompositions for Latin Extended-B
+ "\xC8\x98" /* Ș */ => 'S', "\xC8\x99" /* ș */ => 's',
+ "\xC8\x9A" /* Èš */ => 'T', "\xC8\x9B" /* È› */ => 't',
+ // unmarked
+ "\xC6\xA0" /* Æ  */ => 'O', "\xC6\xA1" /* Æ¡ */ => 'o',
+ "\xC6\xAF" /* Ư */ => 'U', "\xC6\xB0" /* ư */ => 'u',
+ // grave accent
+ "\xE1\xBA\xA6" /* Ầ */ => 'A', "\xE1\xBA\xA7" /* ầ */ => 'a',
+ "\xE1\xBA\xB0" /* Ằ */ => 'A', "\xE1\xBA\xB1" /* ằ */ => 'a',
+ "\xE1\xBB\x80" /* Ề */ => 'E', "\xE1\xBB\x81" /* Ỡ*/ => 'e',
+ "\xE1\xBB\x92" /* Ồ */ => 'O', "\xE1\xBB\x93" /* ồ */ => 'o',
+ "\xE1\xBB\x9C" /* Ờ */ => 'O', "\xE1\xBB\x9D" /* Ỡ*/ => 'o',
+ "\xE1\xBB\xAA" /* Ừ */ => 'U', "\xE1\xBB\xAB" /* ừ */ => 'u',
+ "\xE1\xBB\xB2" /* Ỳ */ => 'Y', "\xE1\xBB\xB3" /* ỳ */ => 'y',
+ // hook
+ "\xE1\xBA\xA2" /* Ả */ => 'A', "\xE1\xBA\xA3" /* ả */ => 'a',
+ "\xE1\xBA\xA8" /* Ẩ */ => 'A', "\xE1\xBA\xA9" /* ẩ */ => 'a',
+ "\xE1\xBA\xB2" /* Ẳ */ => 'A', "\xE1\xBA\xB3" /* ẳ */ => 'a',
+ "\xE1\xBA\xBA" /* Ẻ */ => 'E', "\xE1\xBA\xBB" /* ẻ */ => 'e',
+ "\xE1\xBB\x82" /* Ể */ => 'E', "\xE1\xBB\x83" /* ể */ => 'e',
+ "\xE1\xBB\x88" /* Ỉ */ => 'I', "\xE1\xBB\x89" /* ỉ */ => 'i',
+ "\xE1\xBB\x8E" /* Ỏ */ => 'O', "\xE1\xBB\x8F" /* Ỡ*/ => 'o',
+ "\xE1\xBB\x94" /* Ổ */ => 'O', "\xE1\xBB\x95" /* ổ */ => 'o',
+ "\xE1\xBB\x9E" /* Ở */ => 'O', "\xE1\xBB\x9F" /* ở */ => 'o',
+ "\xE1\xBB\xA6" /* Ủ */ => 'U', "\xE1\xBB\xA7" /* ủ */ => 'u',
+ "\xE1\xBB\xAC" /* Ử */ => 'U', "\xE1\xBB\xAD" /* ử */ => 'u',
+ "\xE1\xBB\xB6" /* á»¶ */ => 'Y', "\xE1\xBB\xB7" /* á»· */ => 'y',
+ // tilde
+ "\xE1\xBA\xAA" /* Ẫ */ => 'A', "\xE1\xBA\xAB" /* ẫ */ => 'a',
+ "\xE1\xBA\xB4" /* Ẵ */ => 'A', "\xE1\xBA\xB5" /* ẵ */ => 'a',
+ "\xE1\xBA\xBC" /* Ẽ */ => 'E', "\xE1\xBA\xBD" /* ẽ */ => 'e',
+ "\xE1\xBB\x84" /* Ễ */ => 'E', "\xE1\xBB\x85" /* ễ */ => 'e',
+ "\xE1\xBB\x96" /* á»– */ => 'O', "\xE1\xBB\x97" /* á»— */ => 'o',
+ "\xE1\xBB\xA0" /* Ỡ */ => 'O', "\xE1\xBB\xA1" /* ỡ */ => 'o',
+ "\xE1\xBB\xAE" /* Ữ */ => 'U', "\xE1\xBB\xAF" /* ữ */ => 'u',
+ "\xE1\xBB\xB8" /* Ỹ */ => 'Y', "\xE1\xBB\xB9" /* ỹ */ => 'y',
+ // acute accent
+ "\xE1\xBA\xA4" /* Ấ */ => 'A', "\xE1\xBA\xA5" /* ấ */ => 'a',
+ "\xE1\xBA\xAE" /* Ắ */ => 'A', "\xE1\xBA\xAF" /* ắ */ => 'a',
+ "\xE1\xBA\xBE" /* Ế */ => 'E', "\xE1\xBA\xBF" /* ế */ => 'e',
+ "\xE1\xBB\x90" /* Ỡ*/ => 'O', "\xE1\xBB\x91" /* ố */ => 'o',
+ "\xE1\xBB\x9A" /* Ớ */ => 'O', "\xE1\xBB\x9B" /* ớ */ => 'o',
+ "\xE1\xBB\xA8" /* Ứ */ => 'U', "\xE1\xBB\xA9" /* ứ */ => 'u',
+ // dot below
+ "\xE1\xBA\xA0" /* Ạ */ => 'A', "\xE1\xBA\xA1" /* ạ */ => 'a',
+ "\xE1\xBA\xAC" /* Ậ */ => 'A', "\xE1\xBA\xAD" /* ậ */ => 'a',
+ "\xE1\xBA\xB6" /* Ặ */ => 'A', "\xE1\xBA\xB7" /* ặ */ => 'a',
+ "\xE1\xBA\xB8" /* Ẹ */ => 'E', "\xE1\xBA\xB9" /* ẹ */ => 'e',
+ "\xE1\xBB\x86" /* Ệ */ => 'E', "\xE1\xBB\x87" /* ệ */ => 'e',
+ "\xE1\xBB\x8A" /* Ị */ => 'I', "\xE1\xBB\x8B" /* ị */ => 'i',
+ "\xE1\xBB\x8C" /* Ọ */ => 'O', "\xE1\xBB\x8D" /* Ỡ*/ => 'o',
+ "\xE1\xBB\x98" /* Ộ */ => 'O', "\xE1\xBB\x99" /* ộ */ => 'o',
+ "\xE1\xBB\xA2" /* Ợ */ => 'O', "\xE1\xBB\xA3" /* ợ */ => 'o',
+ "\xE1\xBB\xA4" /* Ụ */ => 'U', "\xE1\xBB\xA5" /* ụ */ => 'u',
+ "\xE1\xBB\xB0" /* á»° */ => 'U', "\xE1\xBB\xB1" /* á»± */ => 'u',
+ "\xE1\xBB\xB4" /* Ỵ */ => 'Y', "\xE1\xBB\xB5" /* ỵ */ => 'y',
+ );
+ }
+
+ /**
+ * Tests that "normalizer_normalize" exists and works
+ *
+ * @return bool
+ */
+ static public function hasNormalizerSupport() {
+ static $ret = null;
+ if (null === $ret) {
+ $form_c = "\xC3\x85"; // 'LATIN CAPITAL LETTER A WITH RING ABOVE' (U+00C5)
+ $form_d = "A\xCC\x8A"; // A followed by 'COMBINING RING ABOVE' (U+030A)
+ $ret = (function_exists('normalizer_normalize')
+ && $form_c === normalizer_normalize($form_d));
+ }
+ return $ret;
+ }
+}
diff --git a/engine/classes/ElggUser.php b/engine/classes/ElggUser.php
new file mode 100644
index 000000000..6163f9b62
--- /dev/null
+++ b/engine/classes/ElggUser.php
@@ -0,0 +1,588 @@
+<?php
+/**
+ * ElggUser
+ *
+ * Representation of a "user" in the system.
+ *
+ * @package Elgg.Core
+ * @subpackage DataModel.User
+ *
+ * @property string $name The display name that the user will be known by in the network
+ * @property string $username The short, reference name for the user in the network
+ * @property string $email The email address to which Elgg will send email notifications
+ * @property string $language The language preference of the user (ISO 639-1 formatted)
+ * @property string $banned 'yes' if the user is banned from the network, 'no' otherwise
+ * @property string $admin 'yes' if the user is an administrator of the network, 'no' otherwise
+ * @property string $password The hashed password of the user
+ * @property string $salt The salt used to secure the password before hashing
+ */
+class ElggUser extends ElggEntity
+ implements Friendable {
+
+ /**
+ * Initialise the attributes array.
+ * This is vital to distinguish between metadata and base parameters.
+ *
+ * Place your base parameters here.
+ *
+ * @return void
+ */
+ protected function initializeAttributes() {
+ parent::initializeAttributes();
+
+ $this->attributes['type'] = "user";
+ $this->attributes['name'] = NULL;
+ $this->attributes['username'] = NULL;
+ $this->attributes['password'] = NULL;
+ $this->attributes['salt'] = NULL;
+ $this->attributes['email'] = NULL;
+ $this->attributes['language'] = NULL;
+ $this->attributes['code'] = NULL;
+ $this->attributes['banned'] = "no";
+ $this->attributes['admin'] = 'no';
+ $this->attributes['prev_last_action'] = NULL;
+ $this->attributes['last_login'] = NULL;
+ $this->attributes['prev_last_login'] = NULL;
+ $this->attributes['tables_split'] = 2;
+ }
+
+ /**
+ * Construct a new user entity, optionally from a given id value.
+ *
+ * @param mixed $guid If an int, load that GUID.
+ * If an entity table db row then will load the rest of the data.
+ *
+ * @throws Exception if there was a problem creating the user.
+ */
+ function __construct($guid = null) {
+ $this->initializeAttributes();
+
+ // compatibility for 1.7 api.
+ $this->initialise_attributes(false);
+
+ if (!empty($guid)) {
+ // Is $guid is a DB entity row
+ if ($guid instanceof stdClass) {
+ // Load the rest
+ if (!$this->load($guid)) {
+ $msg = elgg_echo('IOException:FailedToLoadGUID', array(get_class(), $guid->guid));
+ throw new IOException($msg);
+ }
+ } else if (is_string($guid)) {
+ // $guid is a username
+ $user = get_user_by_username($guid);
+ if ($user) {
+ foreach ($user->attributes as $key => $value) {
+ $this->attributes[$key] = $value;
+ }
+ }
+ } else if ($guid instanceof ElggUser) {
+ // $guid is an ElggUser so this is a copy constructor
+ elgg_deprecated_notice('This type of usage of the ElggUser constructor was deprecated. Please use the clone method.', 1.7);
+
+ foreach ($guid->attributes as $key => $value) {
+ $this->attributes[$key] = $value;
+ }
+ } else if ($guid instanceof ElggEntity) {
+ // @todo why have a special case here
+ throw new InvalidParameterException(elgg_echo('InvalidParameterException:NonElggUser'));
+ } else if (is_numeric($guid)) {
+ // $guid is a GUID so load entity
+ if (!$this->load($guid)) {
+ throw new IOException(elgg_echo('IOException:FailedToLoadGUID', array(get_class(), $guid)));
+ }
+ } else {
+ throw new InvalidParameterException(elgg_echo('InvalidParameterException:UnrecognisedValue'));
+ }
+ }
+ }
+
+ /**
+ * Load the ElggUser data from the database
+ *
+ * @param mixed $guid ElggUser GUID or stdClass database row from entity table
+ *
+ * @return bool
+ */
+ protected function load($guid) {
+ $attr_loader = new ElggAttributeLoader(get_class(), 'user', $this->attributes);
+ $attr_loader->secondary_loader = 'get_user_entity_as_row';
+
+ $attrs = $attr_loader->getRequiredAttributes($guid);
+ if (!$attrs) {
+ return false;
+ }
+
+ $this->attributes = $attrs;
+ $this->attributes['tables_loaded'] = 2;
+ _elgg_cache_entity($this);
+
+ return true;
+ }
+
+ /**
+ * Saves this user to the database.
+ *
+ * @return bool
+ */
+ public function save() {
+ // Save generic stuff
+ if (!parent::save()) {
+ return false;
+ }
+
+ // Now save specific stuff
+ _elgg_disable_caching_for_entity($this->guid);
+ $ret = create_user_entity($this->get('guid'), $this->get('name'), $this->get('username'),
+ $this->get('password'), $this->get('salt'), $this->get('email'), $this->get('language'),
+ $this->get('code'));
+ _elgg_enable_caching_for_entity($this->guid);
+
+ return $ret;
+ }
+
+ /**
+ * User specific override of the entity delete method.
+ *
+ * @return bool
+ */
+ public function delete() {
+ global $USERNAME_TO_GUID_MAP_CACHE, $CODE_TO_GUID_MAP_CACHE;
+
+ // clear cache
+ if (isset($USERNAME_TO_GUID_MAP_CACHE[$this->username])) {
+ unset($USERNAME_TO_GUID_MAP_CACHE[$this->username]);
+ }
+ if (isset($CODE_TO_GUID_MAP_CACHE[$this->code])) {
+ unset($CODE_TO_GUID_MAP_CACHE[$this->code]);
+ }
+
+ clear_user_files($this);
+
+ // Delete entity
+ return parent::delete();
+ }
+
+ /**
+ * Ban this user.
+ *
+ * @param string $reason Optional reason
+ *
+ * @return bool
+ */
+ public function ban($reason = "") {
+ return ban_user($this->guid, $reason);
+ }
+
+ /**
+ * Unban this user.
+ *
+ * @return bool
+ */
+ public function unban() {
+ return unban_user($this->guid);
+ }
+
+ /**
+ * Is this user banned or not?
+ *
+ * @return bool
+ */
+ public function isBanned() {
+ return $this->banned == 'yes';
+ }
+
+ /**
+ * Is this user admin?
+ *
+ * @return bool
+ */
+ public function isAdmin() {
+
+ // for backward compatibility we need to pull this directly
+ // from the attributes instead of using the magic methods.
+ // this can be removed in 1.9
+ // return $this->admin == 'yes';
+ return $this->attributes['admin'] == 'yes';
+ }
+
+ /**
+ * Make the user an admin
+ *
+ * @return bool
+ */
+ public function makeAdmin() {
+ // If already saved, use the standard function.
+ if ($this->guid && !make_user_admin($this->guid)) {
+ return FALSE;
+ }
+
+ // need to manually set attributes since they've already been loaded.
+ $this->attributes['admin'] = 'yes';
+
+ return TRUE;
+ }
+
+ /**
+ * Remove the admin flag for user
+ *
+ * @return bool
+ */
+ public function removeAdmin() {
+ // If already saved, use the standard function.
+ if ($this->guid && !remove_user_admin($this->guid)) {
+ return FALSE;
+ }
+
+ // need to manually set attributes since they've already been loaded.
+ $this->attributes['admin'] = 'no';
+
+ return TRUE;
+ }
+
+ /**
+ * Get sites that this user is a member of
+ *
+ * @param string $subtype Optionally, the subtype of result we want to limit to
+ * @param int $limit The number of results to return
+ * @param int $offset Any indexing offset
+ *
+ * @return array
+ */
+ function getSites($subtype = "", $limit = 10, $offset = 0) {
+ return get_user_sites($this->getGUID(), $subtype, $limit, $offset);
+ }
+
+ /**
+ * Add this user to a particular site
+ *
+ * @param int $site_guid The guid of the site to add it to
+ *
+ * @return bool
+ */
+ function addToSite($site_guid) {
+ return add_site_user($site_guid, $this->getGUID());
+ }
+
+ /**
+ * Remove this user from a particular site
+ *
+ * @param int $site_guid The guid of the site to remove it from
+ *
+ * @return bool
+ */
+ function removeFromSite($site_guid) {
+ return remove_site_user($site_guid, $this->getGUID());
+ }
+
+ /**
+ * Adds a user as a friend
+ *
+ * @param int $friend_guid The GUID of the user to add
+ *
+ * @return bool
+ */
+ function addFriend($friend_guid) {
+ return user_add_friend($this->getGUID(), $friend_guid);
+ }
+
+ /**
+ * Removes a user as a friend
+ *
+ * @param int $friend_guid The GUID of the user to remove
+ *
+ * @return bool
+ */
+ function removeFriend($friend_guid) {
+ return user_remove_friend($this->getGUID(), $friend_guid);
+ }
+
+ /**
+ * Determines whether or not this user is a friend of the currently logged in user
+ *
+ * @return bool
+ */
+ function isFriend() {
+ return $this->isFriendOf(elgg_get_logged_in_user_guid());
+ }
+
+ /**
+ * Determines whether this user is friends with another user
+ *
+ * @param int $user_guid The GUID of the user to check against
+ *
+ * @return bool
+ */
+ function isFriendsWith($user_guid) {
+ return user_is_friend($this->getGUID(), $user_guid);
+ }
+
+ /**
+ * Determines whether or not this user is another user's friend
+ *
+ * @param int $user_guid The GUID of the user to check against
+ *
+ * @return bool
+ */
+ function isFriendOf($user_guid) {
+ return user_is_friend($user_guid, $this->getGUID());
+ }
+
+ /**
+ * Gets this user's friends
+ *
+ * @param string $subtype Optionally, the user subtype (leave blank for all)
+ * @param int $limit The number of users to retrieve
+ * @param int $offset Indexing offset, if any
+ *
+ * @return array|false Array of ElggUser, or false, depending on success
+ */
+ function getFriends($subtype = "", $limit = 10, $offset = 0) {
+ return get_user_friends($this->getGUID(), $subtype, $limit, $offset);
+ }
+
+ /**
+ * Gets users who have made this user a friend
+ *
+ * @param string $subtype Optionally, the user subtype (leave blank for all)
+ * @param int $limit The number of users to retrieve
+ * @param int $offset Indexing offset, if any
+ *
+ * @return array|false Array of ElggUser, or false, depending on success
+ */
+ function getFriendsOf($subtype = "", $limit = 10, $offset = 0) {
+ return get_user_friends_of($this->getGUID(), $subtype, $limit, $offset);
+ }
+
+ /**
+ * Lists the user's friends
+ *
+ * @param string $subtype Optionally, the user subtype (leave blank for all)
+ * @param int $limit The number of users to retrieve
+ * @param array $vars Display variables for the user view
+ *
+ * @return string Rendered list of friends
+ * @since 1.8.0
+ */
+ function listFriends($subtype = "", $limit = 10, array $vars = array()) {
+ $defaults = array(
+ 'type' => 'user',
+ 'relationship' => 'friend',
+ 'relationship_guid' => $this->guid,
+ 'limit' => $limit,
+ 'full_view' => false,
+ );
+
+ $options = array_merge($defaults, $vars);
+
+ if ($subtype) {
+ $options['subtype'] = $subtype;
+ }
+
+ return elgg_list_entities_from_relationship($options);
+ }
+
+ /**
+ * Gets the user's groups
+ *
+ * @param string $subtype Optionally, the subtype of user to filter to (leave blank for all)
+ * @param int $limit The number of groups to retrieve
+ * @param int $offset Indexing offset, if any
+ *
+ * @return array|false Array of ElggGroup, or false, depending on success
+ */
+ function getGroups($subtype = "", $limit = 10, $offset = 0) {
+ $options = array(
+ 'type' => 'group',
+ 'relationship' => 'member',
+ 'relationship_guid' => $this->guid,
+ 'limit' => $limit,
+ 'offset' => $offset,
+ );
+
+ if ($subtype) {
+ $options['subtype'] = $subtype;
+ }
+
+ return elgg_get_entities_from_relationship($options);
+ }
+
+ /**
+ * Lists the user's groups
+ *
+ * @param string $subtype Optionally, the user subtype (leave blank for all)
+ * @param int $limit The number of users to retrieve
+ * @param int $offset Indexing offset, if any
+ *
+ * @return string
+ */
+ function listGroups($subtype = "", $limit = 10, $offset = 0) {
+ $options = array(
+ 'type' => 'group',
+ 'relationship' => 'member',
+ 'relationship_guid' => $this->guid,
+ 'limit' => $limit,
+ 'offset' => $offset,
+ 'full_view' => false,
+ );
+
+ if ($subtype) {
+ $options['subtype'] = $subtype;
+ }
+
+ return elgg_list_entities_from_relationship($options);
+ }
+
+ /**
+ * Get an array of ElggObject owned by this user.
+ *
+ * @param string $subtype The subtype of the objects, if any
+ * @param int $limit Number of results to return
+ * @param int $offset Any indexing offset
+ *
+ * @return array|false
+ */
+ public function getObjects($subtype = "", $limit = 10, $offset = 0) {
+ $params = array(
+ 'type' => 'object',
+ 'subtype' => $subtype,
+ 'owner_guid' => $this->getGUID(),
+ 'limit' => $limit,
+ 'offset' => $offset
+ );
+ return elgg_get_entities($params);
+ }
+
+ /**
+ * Get an array of ElggObjects owned by this user's friends.
+ *
+ * @param string $subtype The subtype of the objects, if any
+ * @param int $limit Number of results to return
+ * @param int $offset Any indexing offset
+ *
+ * @return array|false
+ */
+ public function getFriendsObjects($subtype = "", $limit = 10, $offset = 0) {
+ return get_user_friends_objects($this->getGUID(), $subtype, $limit, $offset);
+ }
+
+ /**
+ * Counts the number of ElggObjects owned by this user
+ *
+ * @param string $subtype The subtypes of the objects, if any
+ *
+ * @return int The number of ElggObjects
+ */
+ public function countObjects($subtype = "") {
+ return count_user_objects($this->getGUID(), $subtype);
+ }
+
+ /**
+ * Get the collections associated with a user.
+ *
+ * @param string $subtype Optionally, the subtype of result we want to limit to
+ * @param int $limit The number of results to return
+ * @param int $offset Any indexing offset
+ *
+ * @return array|false
+ */
+ public function getCollections($subtype = "", $limit = 10, $offset = 0) {
+ elgg_deprecated_notice("ElggUser::getCollections() has been deprecated", 1.8);
+ return false;
+ }
+
+ /**
+ * Get a user's owner GUID
+ *
+ * Returns it's own GUID if the user is not owned.
+ *
+ * @return int
+ */
+ function getOwnerGUID() {
+ if ($this->owner_guid == 0) {
+ return $this->guid;
+ }
+
+ return $this->owner_guid;
+ }
+
+ /**
+ * If a user's owner is blank, return its own GUID as the owner
+ *
+ * @return int User GUID
+ * @deprecated 1.8 Use getOwnerGUID()
+ */
+ function getOwner() {
+ elgg_deprecated_notice("ElggUser::getOwner deprecated for ElggUser::getOwnerGUID", 1.8);
+ $this->getOwnerGUID();
+ }
+
+ // EXPORTABLE INTERFACE ////////////////////////////////////////////////////////////
+
+ /**
+ * Return an array of fields which can be exported.
+ *
+ * @return array
+ */
+ public function getExportableValues() {
+ return array_merge(parent::getExportableValues(), array(
+ 'name',
+ 'username',
+ 'language',
+ ));
+ }
+
+ /**
+ * Need to catch attempts to make a user an admin. Remove for 1.9
+ *
+ * @param string $name Name
+ * @param mixed $value Value
+ *
+ * @return bool
+ */
+ public function __set($name, $value) {
+ if ($name == 'admin' || $name == 'siteadmin') {
+ elgg_deprecated_notice('The admin/siteadmin metadata are not longer used. Use ElggUser->makeAdmin() and ElggUser->removeAdmin().', 1.7);
+
+ if ($value == 'yes' || $value == '1') {
+ $this->makeAdmin();
+ } else {
+ $this->removeAdmin();
+ }
+ }
+ return parent::__set($name, $value);
+ }
+
+ /**
+ * Need to catch attempts to test user for admin. Remove for 1.9
+ *
+ * @param string $name Name
+ *
+ * @return bool
+ */
+ public function __get($name) {
+ if ($name == 'admin' || $name == 'siteadmin') {
+ elgg_deprecated_notice('The admin/siteadmin metadata are not longer used. Use ElggUser->isAdmin().', 1.7);
+ return $this->isAdmin();
+ }
+
+ return parent::__get($name);
+ }
+
+ /**
+ * Can a user comment on this user?
+ *
+ * @see ElggEntity::canComment()
+ *
+ * @param int $user_guid User guid (default is logged in user)
+ * @return bool
+ * @since 1.8.0
+ */
+ public function canComment($user_guid = 0) {
+ $result = parent::canComment($user_guid);
+ if ($result !== null) {
+ return $result;
+ }
+ return false;
+ }
+}
diff --git a/engine/classes/ElggVolatileMetadataCache.php b/engine/classes/ElggVolatileMetadataCache.php
new file mode 100644
index 000000000..4acda7cee
--- /dev/null
+++ b/engine/classes/ElggVolatileMetadataCache.php
@@ -0,0 +1,355 @@
+<?php
+/**
+ * ElggVolatileMetadataCache
+ * In memory cache of known metadata values stored by entity.
+ *
+ * @package Elgg.Core
+ * @subpackage Cache
+ *
+ * @access private
+ */
+class ElggVolatileMetadataCache {
+
+ /**
+ * The cached values (or null for known to be empty). If the portion of the cache
+ * is synchronized, missing values are assumed to indicate that values do not
+ * exist in storage, otherwise, we don't know what's there.
+ *
+ * @var array
+ */
+ protected $values = array();
+
+ /**
+ * Does the cache know that it contains all names fetch-able from storage?
+ * The keys are entity GUIDs and either the value exists (true) or it's not set.
+ *
+ * @var array
+ */
+ protected $isSynchronized = array();
+
+ /**
+ * @var null|bool
+ */
+ protected $ignoreAccess = null;
+
+ /**
+ * Cache metadata for an entity
+ *
+ * @param int $entity_guid The GUID of the entity
+ * @param array $values The metadata values to cache
+ * @return void
+ */
+ public function saveAll($entity_guid, array $values) {
+ if (!$this->getIgnoreAccess()) {
+ $this->values[$entity_guid] = $values;
+ $this->isSynchronized[$entity_guid] = true;
+ }
+ }
+
+ /**
+ * Get the metadata for an entity
+ *
+ * @param int $entity_guid The GUID of the entity
+ * @return array
+ */
+ public function loadAll($entity_guid) {
+ if (isset($this->values[$entity_guid])) {
+ return $this->values[$entity_guid];
+ } else {
+ return array();
+ }
+ }
+
+ /**
+ * Declare that there may be fetch-able metadata names in storage that this
+ * cache doesn't know about
+ *
+ * @param int $entity_guid The GUID of the entity
+ * @return void
+ */
+ public function markOutOfSync($entity_guid) {
+ unset($this->isSynchronized[$entity_guid]);
+ }
+
+ /**
+ * Have all the metadata for this entity been cached?
+ *
+ * @param int $entity_guid The GUID of the entity
+ * @return bool
+ */
+ public function isSynchronized($entity_guid) {
+ return isset($this->isSynchronized[$entity_guid]);
+ }
+
+ /**
+ * Cache a piece of metadata
+ *
+ * @param int $entity_guid The GUID of the entity
+ * @param string $name The metadata name
+ * @param array|int|string|null $value The metadata value. null means it is
+ * known that there is no fetch-able
+ * metadata under this name
+ * @param bool $allow_multiple Can the metadata be an array
+ * @return void
+ */
+ public function save($entity_guid, $name, $value, $allow_multiple = false) {
+ if ($this->getIgnoreAccess()) {
+ // we don't know if what gets saves here will be available to user once
+ // access control returns, hence it's best to forget :/
+ $this->markUnknown($entity_guid, $name);
+ } else {
+ if ($allow_multiple) {
+ if ($this->isKnown($entity_guid, $name)) {
+ $existing = $this->load($entity_guid, $name);
+ if ($existing !== null) {
+ $existing = (array) $existing;
+ $existing[] = $value;
+ $value = $existing;
+ }
+ } else {
+ // we don't know whether there are unknown values, so it's
+ // safest to leave that assumption
+ $this->markUnknown($entity_guid, $name);
+ return;
+ }
+ }
+ $this->values[$entity_guid][$name] = $value;
+ }
+ }
+
+ /**
+ * Warning: You should always call isKnown() beforehand to verify that this
+ * function's return value should be trusted (otherwise a null return value
+ * is ambiguous).
+ *
+ * @param int $entity_guid The GUID of the entity
+ * @param string $name The metadata name
+ * @return array|string|int|null null = value does not exist
+ */
+ public function load($entity_guid, $name) {
+ if (isset($this->values[$entity_guid]) && array_key_exists($name, $this->values[$entity_guid])) {
+ return $this->values[$entity_guid][$name];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Forget about this metadata entry. We don't want to try to guess what the
+ * next fetch from storage will return
+ *
+ * @param int $entity_guid The GUID of the entity
+ * @param string $name The metadata name
+ * @return void
+ */
+ public function markUnknown($entity_guid, $name) {
+ unset($this->values[$entity_guid][$name]);
+ $this->markOutOfSync($entity_guid);
+ }
+
+ /**
+ * If true, load() will return an accurate value for this name
+ *
+ * @param int $entity_guid The GUID of the entity
+ * @param string $name The metadata name
+ * @return bool
+ */
+ public function isKnown($entity_guid, $name) {
+ if (isset($this->isSynchronized[$entity_guid])) {
+ return true;
+ } else {
+ return (isset($this->values[$entity_guid]) && array_key_exists($name, $this->values[$entity_guid]));
+ }
+
+ }
+
+ /**
+ * Declare that metadata under this name is known to be not fetch-able from storage
+ *
+ * @param int $entity_guid The GUID of the entity
+ * @param string $name The metadata name
+ * @return array
+ */
+ public function markEmpty($entity_guid, $name) {
+ $this->values[$entity_guid][$name] = null;
+ }
+
+ /**
+ * Forget about all metadata for an entity
+ *
+ * @param int $entity_guid The GUID of the entity
+ * @return void
+ */
+ public function clear($entity_guid) {
+ $this->values[$entity_guid] = array();
+ $this->markOutOfSync($entity_guid);
+ }
+
+ /**
+ * Clear entire cache and mark all entities as out of sync
+ *
+ * @return void
+ */
+ public function flush() {
+ $this->values = array();
+ $this->isSynchronized = array();
+ }
+
+ /**
+ * Use this value instead of calling elgg_get_ignore_access(). By default that
+ * function will be called.
+ *
+ * This setting makes this component a little more loosely-coupled.
+ *
+ * @param bool $ignore Whether to ignore access or not
+ * @return void
+ */
+ public function setIgnoreAccess($ignore) {
+ $this->ignoreAccess = (bool) $ignore;
+ }
+
+ /**
+ * Tell the cache to call elgg_get_ignore_access() to determing access status.
+ *
+ * @return void
+ */
+ public function unsetIgnoreAccess() {
+ $this->ignoreAccess = null;
+ }
+
+ /**
+ * Get the ignore access value
+ *
+ * @return bool
+ */
+ protected function getIgnoreAccess() {
+ if (null === $this->ignoreAccess) {
+ return elgg_get_ignore_access();
+ } else {
+ return $this->ignoreAccess;
+ }
+ }
+
+ /**
+ * Invalidate based on options passed to the global *_metadata functions
+ *
+ * @param string $action Action performed on metadata. "delete", "disable", or "enable"
+ * @param array $options Options passed to elgg_(delete|disable|enable)_metadata
+ * "guid" if given, invalidation will be limited to this entity
+ * "metadata_name" if given, invalidation will be limited to metadata with this name
+ * @return void
+ */
+ public function invalidateByOptions($action, array $options) {
+ // remove as little as possible, optimizing for common cases
+ if (empty($options['guid'])) {
+ // safest to clear everything unless we want to make this even more complex :(
+ $this->flush();
+ } else {
+ if (empty($options['metadata_name'])) {
+ // safest to clear the whole entity
+ $this->clear($options['guid']);
+ } else {
+ switch ($action) {
+ case 'delete':
+ $this->markEmpty($options['guid'], $options['metadata_name']);
+ break;
+ default:
+ $this->markUnknown($options['guid'], $options['metadata_name']);
+ }
+ }
+ }
+ }
+
+ /**
+ * Populate the cache from a set of entities
+ *
+ * @param int|array $guids Array of or single GUIDs
+ * @return void
+ */
+ public function populateFromEntities($guids) {
+ if (empty($guids)) {
+ return;
+ }
+ if (!is_array($guids)) {
+ $guids = array($guids);
+ }
+ $guids = array_unique($guids);
+
+ // could be useful at some point in future
+ //$guids = $this->filterMetadataHeavyEntities($guids);
+
+ $db_prefix = elgg_get_config('dbprefix');
+ $options = array(
+ 'guids' => $guids,
+ 'limit' => 0,
+ 'callback' => false,
+ 'joins' => array(
+ "JOIN {$db_prefix}metastrings v ON n_table.value_id = v.id",
+ "JOIN {$db_prefix}metastrings n ON n_table.name_id = n.id",
+ ),
+ 'selects' => array('n.string AS name', 'v.string AS value'),
+ 'order_by' => 'n_table.entity_guid, n_table.time_created ASC',
+
+ // @todo don't know why this is necessary
+ 'wheres' => array(get_access_sql_suffix('n_table')),
+ );
+ $data = elgg_get_metadata($options);
+
+ // build up metadata for each entity, save when GUID changes (or data ends)
+ $last_guid = null;
+ $metadata = array();
+ $last_row_idx = count($data) - 1;
+ foreach ($data as $i => $row) {
+ $name = $row->name;
+ $value = ($row->value_type === 'text') ? $row->value : (int) $row->value;
+ $guid = $row->entity_guid;
+ if ($guid !== $last_guid) {
+ if ($last_guid) {
+ $this->saveAll($last_guid, $metadata);
+ }
+ $metadata = array();
+ }
+ if (isset($metadata[$name])) {
+ $metadata[$name] = (array) $metadata[$name];
+ $metadata[$name][] = $value;
+ } else {
+ $metadata[$name] = $value;
+ }
+ if (($i == $last_row_idx)) {
+ $this->saveAll($guid, $metadata);
+ }
+ $last_guid = $guid;
+ }
+ }
+
+ /**
+ * Filter out entities whose concatenated metadata values (INTs casted as string)
+ * exceed a threshold in characters. This could be used to avoid overpopulating the
+ * cache if RAM usage becomes an issue.
+ *
+ * @param array $guids GUIDs of entities to examine
+ * @param int $limit Limit in characters of all metadata (with ints casted to strings)
+ * @return array
+ */
+ public function filterMetadataHeavyEntities(array $guids, $limit = 1024000) {
+ $db_prefix = elgg_get_config('dbprefix');
+
+ $options = array(
+ 'guids' => $guids,
+ 'limit' => 0,
+ 'callback' => false,
+ 'joins' => "JOIN {$db_prefix}metastrings v ON n_table.value_id = v.id",
+ 'selects' => array('SUM(LENGTH(v.string)) AS bytes'),
+ 'order_by' => 'n_table.entity_guid, n_table.time_created ASC',
+ 'group_by' => 'n_table.entity_guid',
+ );
+ $data = elgg_get_metadata($options);
+ // don't cache if metadata for entity is over 10MB (or rolled INT)
+ foreach ($data as $row) {
+ if ($row->bytes > $limit || $row->bytes < 0) {
+ array_splice($guids, array_search($row->entity_guid, $guids), 1);
+ }
+ }
+ return $guids;
+ }
+}
diff --git a/engine/classes/ElggWidget.php b/engine/classes/ElggWidget.php
new file mode 100644
index 000000000..66191bf47
--- /dev/null
+++ b/engine/classes/ElggWidget.php
@@ -0,0 +1,245 @@
+<?php
+
+/**
+ * ElggWidget
+ *
+ * Stores metadata in private settings rather than as ElggMetadata
+ *
+ * @package Elgg.Core
+ * @subpackage Widgets
+ *
+ * @property-read string $handler internal, do not use
+ * @property-read string $column internal, do not use
+ * @property-read string $order internal, do not use
+ * @property-read string $context internal, do not use
+ */
+class ElggWidget extends ElggObject {
+
+ /**
+ * Set subtype to widget.
+ *
+ * @return void
+ */
+ protected function initializeAttributes() {
+ parent::initializeAttributes();
+
+ $this->attributes['subtype'] = "widget";
+ }
+
+ /**
+ * Override entity get and sets in order to save data to private data store.
+ *
+ * @param string $name Name
+ *
+ * @return mixed
+ */
+ public function get($name) {
+ // See if its in our base attribute
+ if (array_key_exists($name, $this->attributes)) {
+ return $this->attributes[$name];
+ }
+
+ // No, so see if its in the private data store.
+ $meta = $this->getPrivateSetting($name);
+ if ($meta) {
+ return $meta;
+ }
+
+ // Can't find it, so return null
+ return null;
+ }
+
+ /**
+ * Override entity get and sets in order to save data to private data store.
+ *
+ * @param string $name Name
+ * @param string $value Value
+ *
+ * @return bool
+ */
+ public function set($name, $value) {
+ if (array_key_exists($name, $this->attributes)) {
+ // Check that we're not trying to change the guid!
+ if ((array_key_exists('guid', $this->attributes)) && ($name == 'guid')) {
+ return false;
+ }
+
+ $this->attributes[$name] = $value;
+ } else {
+ return $this->setPrivateSetting($name, $value);
+ }
+
+ return true;
+ }
+
+ /**
+ * Set the widget context
+ *
+ * @param string $context The widget context
+ * @return bool
+ * @since 1.8.0
+ */
+ public function setContext($context) {
+ return $this->setPrivateSetting('context', $context);
+ }
+
+ /**
+ * Get the widget context
+ *
+ * @return string
+ * @since 1.8.0
+ */
+ public function getContext() {
+ return $this->getPrivateSetting('context');
+ }
+
+ /**
+ * Get the title of the widget
+ *
+ * @return string
+ * @since 1.8.0
+ */
+ public function getTitle() {
+ $title = $this->title;
+ if (!$title) {
+ global $CONFIG;
+ $title = $CONFIG->widgets->handlers[$this->handler]->name;
+ }
+ return $title;
+ }
+
+ /**
+ * Move the widget
+ *
+ * @param int $column The widget column
+ * @param int $rank Zero-based rank from the top of the column
+ * @return void
+ * @since 1.8.0
+ */
+ public function move($column, $rank) {
+ $options = array(
+ 'type' => 'object',
+ 'subtype' => 'widget',
+ 'container_guid' => $this->container_guid,
+ 'limit' => false,
+ 'private_setting_name_value_pairs' => array(
+ array('name' => 'context', 'value' => $this->getContext()),
+ array('name' => 'column', 'value' => $column)
+ )
+ );
+ $widgets = elgg_get_entities_from_private_settings($options);
+ if (!$widgets) {
+ $this->column = (int)$column;
+ $this->order = 0;
+ return;
+ }
+
+ usort($widgets, create_function('$a,$b','return (int)$a->order > (int)$b->order;'));
+
+ // remove widgets from inactive plugins
+ $widget_types = elgg_get_widget_types($this->context);
+ $inactive_widgets = array();
+ foreach ($widgets as $index => $widget) {
+ if (!array_key_exists($widget->handler, $widget_types)) {
+ $inactive_widgets[] = $widget;
+ unset($widgets[$index]);
+ }
+ }
+
+ $bottom_rank = count($widgets);
+ if ($column == $this->column) {
+ $bottom_rank--;
+ }
+
+ if ($rank == 0) {
+ // top of the column
+ $this->order = reset($widgets)->order - 10;
+ } elseif ($rank == $bottom_rank) {
+ // bottom of the column of active widgets
+ $this->order = end($widgets)->order + 10;
+ } else {
+ // reorder widgets
+
+ // remove the widget that's being moved from the array
+ foreach ($widgets as $index => $widget) {
+ if ($widget->guid == $this->guid) {
+ unset($widgets[$index]);
+ }
+ }
+
+ // split the array in two and recombine with the moved widget in middle
+ $before = array_slice($widgets, 0, $rank);
+ array_push($before, $this);
+ $after = array_slice($widgets, $rank);
+ $widgets = array_merge($before, $after);
+ ksort($widgets);
+ $order = 0;
+ foreach ($widgets as $widget) {
+ $widget->order = $order;
+ $order += 10;
+ }
+ }
+
+ // put inactive widgets at the bottom
+ if ($inactive_widgets) {
+ $bottom = 0;
+ foreach ($widgets as $widget) {
+ if ($widget->order > $bottom) {
+ $bottom = $widget->order;
+ }
+ }
+ $bottom += 10;
+ foreach ($inactive_widgets as $widget) {
+ $widget->order = $bottom;
+ $bottom += 10;
+ }
+ }
+
+ $this->column = $column;
+ }
+
+ /**
+ * Saves the widget's settings
+ *
+ * Plugins can override the save mechanism using the plugin hook:
+ * 'widget_settings', <widget handler identifier>. The widget and
+ * the parameters are passed. The plugin hook handler should return
+ * true to indicate that it has successfully saved the settings.
+ *
+ * @warning The values in the parameter array cannot be arrays
+ *
+ * @param array $params An array of name => value parameters
+ *
+ * @return bool
+ * @since 1.8.0
+ */
+ public function saveSettings($params) {
+ if (!$this->canEdit()) {
+ return false;
+ }
+
+ // plugin hook handlers should return true to indicate the settings have
+ // been saved so that default code does not run
+ $hook_params = array(
+ 'widget' => $this,
+ 'params' => $params
+ );
+ if (elgg_trigger_plugin_hook('widget_settings', $this->handler, $hook_params, false) == true) {
+ return true;
+ }
+
+ if (is_array($params) && count($params) > 0) {
+ foreach ($params as $name => $value) {
+ if (is_array($value)) {
+ // private settings cannot handle arrays
+ return false;
+ } else {
+ $this->$name = $value;
+ }
+ }
+ $this->save();
+ }
+
+ return true;
+ }
+}
diff --git a/engine/classes/ElggXMLElement.php b/engine/classes/ElggXMLElement.php
new file mode 100644
index 000000000..cbd3fc5ce
--- /dev/null
+++ b/engine/classes/ElggXMLElement.php
@@ -0,0 +1,131 @@
+<?php
+/**
+ * A parser for XML that uses SimpleXMLElement
+ *
+ * @package Elgg.Core
+ * @subpackage XML
+ */
+class ElggXMLElement {
+ /**
+ * @var SimpleXMLElement
+ */
+ private $_element;
+
+ /**
+ * Creates an ElggXMLParser from a string or existing SimpleXMLElement
+ *
+ * @param string|SimpleXMLElement $xml The XML to parse
+ */
+ public function __construct($xml) {
+ if ($xml instanceof SimpleXMLElement) {
+ $this->_element = $xml;
+ } else {
+ // do not load entities
+ $disable_load_entities = libxml_disable_entity_loader(true);
+
+ $this->_element = new SimpleXMLElement($xml);
+
+ libxml_disable_entity_loader($disable_load_entities);
+ }
+ }
+
+ /**
+ * @return string The name of the element
+ */
+ public function getName() {
+ return $this->_element->getName();
+ }
+
+ /**
+ * @return string[] The attributes
+ */
+ public function getAttributes() {
+ //include namespace declarations as attributes
+ $xmlnsRaw = $this->_element->getNamespaces();
+ $xmlns = array();
+ foreach ($xmlnsRaw as $key => $val) {
+ $label = 'xmlns' . ($key ? ":$key" : $key);
+ $xmlns[$label] = $val;
+ }
+ //get attributes and merge with namespaces
+ $attrRaw = $this->_element->attributes();
+ $attr = array();
+ foreach ($attrRaw as $key => $val) {
+ $attr[$key] = $val;
+ }
+ $attr = array_merge((array) $xmlns, (array) $attr);
+ $result = array();
+ foreach ($attr as $key => $val) {
+ $result[$key] = (string) $val;
+ }
+ return $result;
+ }
+
+ /**
+ * @return string CData
+ */
+ public function getContent() {
+ return (string) $this->_element;
+ }
+
+ /**
+ * @return ElggXMLElement[] Child elements
+ */
+ public function getChildren() {
+ $children = $this->_element->children();
+ $result = array();
+ foreach ($children as $val) {
+ $result[] = new ElggXMLElement($val);
+ }
+
+ return $result;
+ }
+
+ /**
+ * Override ->
+ *
+ * @param string $name Property name
+ * @return mixed
+ */
+ function __get($name) {
+ switch ($name) {
+ case 'name':
+ return $this->getName();
+ break;
+ case 'attributes':
+ return $this->getAttributes();
+ break;
+ case 'content':
+ return $this->getContent();
+ break;
+ case 'children':
+ return $this->getChildren();
+ break;
+ }
+ return null;
+ }
+
+ /**
+ * Override isset
+ *
+ * @param string $name Property name
+ * @return boolean
+ */
+ function __isset($name) {
+ switch ($name) {
+ case 'name':
+ return $this->getName() !== null;
+ break;
+ case 'attributes':
+ return $this->getAttributes() !== null;
+ break;
+ case 'content':
+ return $this->getContent() !== null;
+ break;
+ case 'children':
+ return $this->getChildren() !== null;
+ break;
+ }
+ return false;
+ }
+}
diff --git a/engine/classes/ErrorResult.php b/engine/classes/ErrorResult.php
new file mode 100644
index 000000000..afad4c740
--- /dev/null
+++ b/engine/classes/ErrorResult.php
@@ -0,0 +1,54 @@
+<?php
+/**
+ * ErrorResult
+ * The error result class.
+ *
+ * @package Elgg.Core
+ * @subpackage WebServicesAPI
+ */
+class ErrorResult extends GenericResult {
+ // Fail with no specific code
+ public static $RESULT_FAIL = -1 ;
+
+ public static $RESULT_FAIL_APIKEY_DISABLED = -30;
+ public static $RESULT_FAIL_APIKEY_INACTIVE = -31;
+ public static $RESULT_FAIL_APIKEY_INVALID = -32;
+
+ // Invalid, expired or missing auth token
+ public static $RESULT_FAIL_AUTHTOKEN = -20;
+
+ /**
+ * A new error result
+ *
+ * @param string $message Message
+ * @param int $code Error Code
+ * @param Exception $exception Exception object
+ *
+ * @return void
+ */
+ public function __construct($message, $code = "", Exception $exception = NULL) {
+ if ($code == "") {
+ $code = ErrorResult::$RESULT_FAIL;
+ }
+
+ if ($exception != NULL) {
+ $this->setResult($exception->__toString());
+ }
+
+ $this->setStatusCode($code, $message);
+ }
+
+ /**
+ * Get a new instance of the ErrorResult.
+ *
+ * @param string $message Message
+ * @param int $code Code
+ * @param Exception $exception Optional exception for generating a stack trace.
+ *
+ * @return ErrorResult
+ */
+ public static function getInstance($message, $code = "", Exception $exception = NULL) {
+ // Return a new error object.
+ return new ErrorResult($message, $code, $exception);
+ }
+}
diff --git a/engine/classes/ExportException.php b/engine/classes/ExportException.php
new file mode 100644
index 000000000..ae8a8e41b
--- /dev/null
+++ b/engine/classes/ExportException.php
@@ -0,0 +1,9 @@
+<?php
+/**
+ * Export exception
+ *
+ * @package Elgg.Core
+ * @subpackage Exception
+ *
+ */
+class ExportException extends DataFormatException {}
diff --git a/engine/classes/Exportable.php b/engine/classes/Exportable.php
new file mode 100644
index 000000000..0c1ea5282
--- /dev/null
+++ b/engine/classes/Exportable.php
@@ -0,0 +1,23 @@
+<?php
+/**
+ * Define an interface for all ODD exportable objects.
+ *
+ * @package Elgg.Core
+ * @subpackage ODD
+ */
+interface Exportable {
+ /**
+ * This must take the contents of the object and convert it to exportable ODD
+ *
+ * @return object or array of objects.
+ */
+ public function export();
+
+ /**
+ * Return a list of all fields that can be exported.
+ * This should be used as the basis for the values returned by export()
+ *
+ * @return array
+ */
+ public function getExportableValues();
+}
diff --git a/engine/classes/Friendable.php b/engine/classes/Friendable.php
new file mode 100644
index 000000000..c308b4598
--- /dev/null
+++ b/engine/classes/Friendable.php
@@ -0,0 +1,104 @@
+<?php
+/**
+ * An interface for objects that behave as elements within a social network that have a profile.
+ *
+ * @package Elgg.Core
+ * @subpackage SocialModel.Friendable
+ */
+interface Friendable {
+ /**
+ * Adds a user as a friend
+ *
+ * @param int $friend_guid The GUID of the user to add
+ *
+ * @return bool
+ */
+ public function addFriend($friend_guid);
+
+ /**
+ * Removes a user as a friend
+ *
+ * @param int $friend_guid The GUID of the user to remove
+ *
+ * @return bool
+ */
+ public function removeFriend($friend_guid);
+
+ /**
+ * Determines whether or not the current user is a friend of this entity
+ *
+ * @return bool
+ */
+ public function isFriend();
+
+ /**
+ * Determines whether or not this entity is friends with a particular entity
+ *
+ * @param int $user_guid The GUID of the entity this entity may or may not be friends with
+ *
+ * @return bool
+ */
+ public function isFriendsWith($user_guid);
+
+ /**
+ * Determines whether or not a foreign entity has made this one a friend
+ *
+ * @param int $user_guid The GUID of the foreign entity
+ *
+ * @return bool
+ */
+ public function isFriendOf($user_guid);
+
+ /**
+ * Returns this entity's friends
+ *
+ * @param string $subtype The subtype of entity to return
+ * @param int $limit The number of entities to return
+ * @param int $offset Indexing offset
+ *
+ * @return array|false
+ */
+ public function getFriends($subtype = "", $limit = 10, $offset = 0);
+
+ /**
+ * Returns entities that have made this entity a friend
+ *
+ * @param string $subtype The subtype of entity to return
+ * @param int $limit The number of entities to return
+ * @param int $offset Indexing offset
+ *
+ * @return array|false
+ */
+ public function getFriendsOf($subtype = "", $limit = 10, $offset = 0);
+
+ /**
+ * Returns objects in this entity's container
+ *
+ * @param string $subtype The subtype of entity to return
+ * @param int $limit The number of entities to return
+ * @param int $offset Indexing offset
+ *
+ * @return array|false
+ */
+ public function getObjects($subtype = "", $limit = 10, $offset = 0);
+
+ /**
+ * Returns objects in the containers of this entity's friends
+ *
+ * @param string $subtype The subtype of entity to return
+ * @param int $limit The number of entities to return
+ * @param int $offset Indexing offset
+ *
+ * @return array|false
+ */
+ public function getFriendsObjects($subtype = "", $limit = 10, $offset = 0);
+
+ /**
+ * Returns the number of object entities in this entity's container
+ *
+ * @param string $subtype The subtype of entity to count
+ *
+ * @return int
+ */
+ public function countObjects($subtype = "");
+}
diff --git a/engine/classes/GenericResult.php b/engine/classes/GenericResult.php
new file mode 100644
index 000000000..e42e924d1
--- /dev/null
+++ b/engine/classes/GenericResult.php
@@ -0,0 +1,125 @@
+<?php
+/**
+ * GenericResult Result superclass.
+ *
+ * @package Elgg.Core
+ * @subpackage WebServicesAPI
+ */
+abstract class GenericResult {
+ /**
+ * The status of the result.
+ * @var int
+ */
+ private $status_code;
+
+ /**
+ * Message returned along with the status which is almost always an error message.
+ * This must be human readable, understandable and localised.
+ * @var string
+ */
+ private $message;
+
+ /**
+ * Result store.
+ * Attach result specific informaton here.
+ *
+ * @var mixed. Should probably be an object of some sort.
+ */
+ private $result;
+
+ /**
+ * Set a status code and optional message.
+ *
+ * @param int $status The status code.
+ * @param string $message The message.
+ *
+ * @return void
+ */
+ protected function setStatusCode($status, $message = "") {
+ $this->status_code = $status;
+ $this->message = $message;
+ }
+
+ /**
+ * Set the result.
+ *
+ * @param mixed $result The result
+ *
+ * @return void
+ */
+ protected function setResult($result) {
+ $this->result = $result;
+ }
+
+ /**
+ * Return the current status code
+ *
+ * @return string
+ */
+ protected function getStatusCode() {
+ return $this->status_code;
+ }
+
+ /**
+ * Return the current status message
+ *
+ * @return string
+ */
+ protected function getStatusMessage() {
+ return $this->message;
+ }
+
+ /**
+ * Return the current result
+ *
+ * @return string
+ */
+ protected function getResult() {
+ return $this->result;
+ }
+
+ /**
+ * Serialise to a standard class.
+ *
+ * DEVNOTE: The API is only interested in data, we can not easily serialise
+ * custom classes without the need for 1) the other side being PHP, 2) you need to have the class
+ * definition installed, 3) its the right version!
+ *
+ * Therefore, I'm not bothering.
+ *
+ * Override this to include any more specific information, however api results
+ * should be attached to the class using setResult().
+ *
+ * if $CONFIG->debug is set then additional information about the runtime environment and
+ * authentication will be returned.
+ *
+ * @return stdClass Object containing the serialised result.
+ */
+ public function export() {
+ global $ERRORS, $CONFIG, $_PAM_HANDLERS_MSG;
+
+ $result = new stdClass;
+
+ $result->status = $this->getStatusCode();
+ if ($this->getStatusMessage() != "") {
+ $result->message = $this->getStatusMessage();
+ }
+
+ $resultdata = $this->getResult();
+ if (isset($resultdata)) {
+ $result->result = $resultdata;
+ }
+
+ if (isset($CONFIG->debug)) {
+ if (count($ERRORS)) {
+ $result->runtime_errors = $ERRORS;
+ }
+
+ if (count($_PAM_HANDLERS_MSG)) {
+ $result->pam = $_PAM_HANDLERS_MSG;
+ }
+ }
+
+ return $result;
+ }
+}
diff --git a/engine/classes/IOException.php b/engine/classes/IOException.php
new file mode 100644
index 000000000..57403f44c
--- /dev/null
+++ b/engine/classes/IOException.php
@@ -0,0 +1,9 @@
+<?php
+/**
+ * IOException
+ * An IO Exception, throw when an IO Exception occurs. Subclass for specific IO Exceptions.
+ *
+ * @package Elgg.Core
+ * @subpackage Exception
+ */
+class IOException extends Exception {}
diff --git a/engine/classes/ImportException.php b/engine/classes/ImportException.php
new file mode 100644
index 000000000..909c599d5
--- /dev/null
+++ b/engine/classes/ImportException.php
@@ -0,0 +1,8 @@
+<?php
+/**
+ * Import exception
+ *
+ * @package Elgg.Core
+ * @subpackage Exception
+ */
+class ImportException extends DataFormatException {}
diff --git a/engine/classes/Importable.php b/engine/classes/Importable.php
new file mode 100644
index 000000000..23b2ce2c8
--- /dev/null
+++ b/engine/classes/Importable.php
@@ -0,0 +1,19 @@
+<?php
+/**
+ * Define an interface for all ODD importable objects.
+ *
+ * @package Elgg.Core
+ * @subpackage DataModel.Importable
+ */
+interface Importable {
+ /**
+ * Accepts an array of data to import, this data is parsed from the XML produced by export.
+ * The function should return the constructed object data, or NULL.
+ *
+ * @param ODD $data Data in ODD format
+ *
+ * @return bool
+ * @throws ImportException if there was a critical error importing data.
+ */
+ public function import(ODD $data);
+}
diff --git a/engine/classes/IncompleteEntityException.php b/engine/classes/IncompleteEntityException.php
new file mode 100644
index 000000000..8c86edcc6
--- /dev/null
+++ b/engine/classes/IncompleteEntityException.php
@@ -0,0 +1,10 @@
+<?php
+/**
+ * IncompleteEntityException
+ * Thrown when constructing an entity that is missing its secondary entity table
+ *
+ * @package Elgg.Core
+ * @subpackage Exception
+ * @access private
+ */
+class IncompleteEntityException extends Exception {}
diff --git a/engine/classes/InstallationException.php b/engine/classes/InstallationException.php
new file mode 100644
index 000000000..1dad6c1e5
--- /dev/null
+++ b/engine/classes/InstallationException.php
@@ -0,0 +1,9 @@
+<?php
+/**
+ * InstallationException
+ * Thrown when there is a major problem with the installation.
+ *
+ * @package Elgg.Core
+ * @subpackage Exception
+ */
+class InstallationException extends ConfigurationException {}
diff --git a/engine/classes/InvalidClassException.php b/engine/classes/InvalidClassException.php
new file mode 100644
index 000000000..12f353b9a
--- /dev/null
+++ b/engine/classes/InvalidClassException.php
@@ -0,0 +1,9 @@
+<?php
+/**
+ * InvalidClassException
+ * An invalid class Exception, throw when a class is invalid.
+ *
+ * @package Elgg.Core
+ * @subpackage Exception
+ */
+class InvalidClassException extends ClassException {}
diff --git a/engine/classes/InvalidParameterException.php b/engine/classes/InvalidParameterException.php
new file mode 100644
index 000000000..fbc9bffc9
--- /dev/null
+++ b/engine/classes/InvalidParameterException.php
@@ -0,0 +1,9 @@
+<?php
+/**
+ * InvalidParameterException
+ * A parameter is invalid.
+ *
+ * @package Elgg.Core
+ * @subpackage Exception
+ */
+class InvalidParameterException extends CallException {}
diff --git a/engine/classes/Locatable.php b/engine/classes/Locatable.php
new file mode 100644
index 000000000..7287d9798
--- /dev/null
+++ b/engine/classes/Locatable.php
@@ -0,0 +1,49 @@
+<?php
+
+/**
+ * Define an interface for geo-tagging entities.
+ *
+ * @package Elgg.Core
+ * @subpackage SocialModel.Locatable
+ */
+interface Locatable {
+ /**
+ * Set a location text
+ *
+ * @param string $location Textual representation of location
+ *
+ * @return bool
+ */
+ public function setLocation($location);
+
+ /**
+ * Set latitude and longitude tags for a given entity.
+ *
+ * @param float $lat Latitude
+ * @param float $long Longitude
+ *
+ * @return bool
+ */
+ public function setLatLong($lat, $long);
+
+ /**
+ * Get the contents of the ->geo:lat field.
+ *
+ * @return int
+ */
+ public function getLatitude();
+
+ /**
+ * Get the contents of the ->geo:lat field.
+ *
+ * @return int
+ */
+ public function getLongitude();
+
+ /**
+ * Get the ->location metadata.
+ *
+ * @return string
+ */
+ public function getLocation();
+}
diff --git a/engine/classes/Loggable.php b/engine/classes/Loggable.php
new file mode 100644
index 000000000..b9e8bf26b
--- /dev/null
+++ b/engine/classes/Loggable.php
@@ -0,0 +1,65 @@
+<?php
+/**
+ * Interface that provides an interface which must be implemented by all objects wishing to be
+ * recorded in the system log (and by extension the river).
+ *
+ * This interface defines a set of methods that permit the system log functions to
+ * hook in and retrieve the necessary information and to identify what events can
+ * actually be logged.
+ *
+ * To have events involving your object to be logged simply implement this interface.
+ *
+ * @package Elgg.Core
+ * @subpackage DataModel.Loggable
+ */
+interface Loggable {
+ /**
+ * Return an identification for the object for storage in the system log.
+ * This id must be an integer.
+ *
+ * @return int
+ */
+ public function getSystemLogID();
+
+ /**
+ * Return the class name of the object.
+ * Added as a function because get_class causes errors for some reason.
+ *
+ * @return string
+ */
+ public function getClassName();
+
+ /**
+ * Return the type of the object - eg. object, group, user, relationship, metadata, annotation etc
+ *
+ * @return string
+ */
+ public function getType();
+
+ /**
+ * Return a subtype. For metadata & annotations this is the 'name' and for relationship this is the
+ * relationship type.
+ *
+ * @return string
+ */
+ public function getSubtype();
+
+ /**
+ * For a given ID, return the object associated with it.
+ * This is used by the river functionality primarily.
+ * This is useful for checking access permissions etc on objects.
+ *
+ * @param int $id GUID of an entity
+ *
+ * @return ElggEntity
+ */
+ public function getObjectFromID($id);
+
+ /**
+ * Return the GUID of the owner of this object.
+ *
+ * @return int
+ * @deprecated 1.8 Use getOwnerGUID() instead
+ */
+ public function getObjectOwnerGUID();
+}
diff --git a/engine/classes/LoginException.php b/engine/classes/LoginException.php
new file mode 100644
index 000000000..7546fa36f
--- /dev/null
+++ b/engine/classes/LoginException.php
@@ -0,0 +1,10 @@
+<?php
+/**
+ * Login Exception Stub
+ *
+ * Generic parent class for login exceptions.
+ *
+ * @package Elgg.Core
+ * @subpackage Exceptions.Stub
+ */
+class LoginException extends Exception {}
diff --git a/engine/classes/NotImplementedException.php b/engine/classes/NotImplementedException.php
new file mode 100644
index 000000000..d1decf75c
--- /dev/null
+++ b/engine/classes/NotImplementedException.php
@@ -0,0 +1,10 @@
+<?php
+/**
+ * NotImplementedException
+ * Thrown when a method or function has not been implemented, primarily used
+ * in development... you should not see these!
+ *
+ * @package Elgg.Core
+ * @subpackage Exception
+ */
+class NotImplementedException extends CallException {}
diff --git a/engine/classes/Notable.php b/engine/classes/Notable.php
new file mode 100644
index 000000000..0c21af27d
--- /dev/null
+++ b/engine/classes/Notable.php
@@ -0,0 +1,41 @@
+<?php
+/**
+ * Calendar interface for events.
+ *
+ * @package Elgg.Core
+ * @subpackage DataModel.Notable
+ *
+ * @todo Implement or remove.
+ */
+interface Notable {
+ /**
+ * Calendar functionality.
+ * This function sets the time of an object on a calendar listing.
+ *
+ * @param int $hour If ommitted, now is assumed.
+ * @param int $minute If ommitted, now is assumed.
+ * @param int $second If ommitted, now is assumed.
+ * @param int $day If ommitted, now is assumed.
+ * @param int $month If ommitted, now is assumed.
+ * @param int $year If ommitted, now is assumed.
+ * @param int $duration Duration of event, remainder of the day is assumed.
+ *
+ * @return bool
+ */
+ public function setCalendarTimeAndDuration($hour = NULL, $minute = NULL, $second = NULL,
+ $day = NULL, $month = NULL, $year = NULL, $duration = NULL);
+
+ /**
+ * Return the start timestamp.
+ *
+ * @return int
+ */
+ public function getCalendarStartTime();
+
+ /**
+ * Return the end timestamp.
+ *
+ * @return int
+ */
+ public function getCalendarEndTime();
+}
diff --git a/engine/classes/NotificationException.php b/engine/classes/NotificationException.php
new file mode 100644
index 000000000..71c742f17
--- /dev/null
+++ b/engine/classes/NotificationException.php
@@ -0,0 +1,8 @@
+<?php
+/**
+ * Notification exception.
+ *
+ * @package Elgg.Core
+ * @subpackage Exception
+ */
+class NotificationException extends Exception {}
diff --git a/engine/classes/ODD.php b/engine/classes/ODD.php
new file mode 100644
index 000000000..fa5b616fc
--- /dev/null
+++ b/engine/classes/ODD.php
@@ -0,0 +1,131 @@
+<?php
+/**
+ * Open Data Definition (ODD) superclass.
+ *
+ * @package Elgg.Core
+ * @subpackage ODD
+ */
+abstract class ODD {
+ /**
+ * Attributes.
+ */
+ private $attributes = array();
+
+ /**
+ * Optional body.
+ */
+ private $body;
+
+ /**
+ * Construct an ODD document with initial values.
+ */
+ public function __construct() {
+ $this->body = "";
+ }
+
+ /**
+ * Returns an array of attributes
+ *
+ * @return array
+ */
+ public function getAttributes() {
+ return $this->attributes;
+ }
+
+ /**
+ * Sets an attribute
+ *
+ * @param string $key Name
+ * @param mixed $value Value
+ *
+ * @return void
+ */
+ public function setAttribute($key, $value) {
+ $this->attributes[$key] = $value;
+ }
+
+ /**
+ * Returns an attribute
+ *
+ * @param string $key Name
+ *
+ * @return mixed
+ */
+ public function getAttribute($key) {
+ if (isset($this->attributes[$key])) {
+ return $this->attributes[$key];
+ }
+
+ return NULL;
+ }
+
+ /**
+ * Sets the body of the ODD.
+ *
+ * @param mixed $value Value
+ *
+ * @return void
+ */
+ public function setBody($value) {
+ $this->body = $value;
+ }
+
+ /**
+ * Gets the body of the ODD.
+ *
+ * @return mixed
+ */
+ public function getBody() {
+ return $this->body;
+ }
+
+ /**
+ * Set the published time.
+ *
+ * @param int $time Unix timestamp
+ *
+ * @return void
+ */
+ public function setPublished($time) {
+ $this->attributes['published'] = date("r", $time);
+ }
+
+ /**
+ * Return the published time as a unix timestamp.
+ *
+ * @return int or false on failure.
+ */
+ public function getPublishedAsTime() {
+ return strtotime($this->attributes['published']);
+ }
+
+ /**
+ * For serialisation, implement to return a string name of the tag eg "header" or "metadata".
+ *
+ * @return string
+ */
+ abstract protected function getTagName();
+
+ /**
+ * Magic function to generate valid ODD XML for this item.
+ *
+ * @return string
+ */
+ public function __toString() {
+ // Construct attributes
+ $attr = "";
+ foreach ($this->attributes as $k => $v) {
+ $attr .= ($v != "") ? "$k=\"$v\" " : "";
+ }
+
+ $body = $this->getBody();
+ $tag = $this->getTagName();
+
+ $end = "/>";
+ if ($body != "") {
+ $end = "><![CDATA[$body]]></{$tag}>";
+ }
+
+ return "<{$tag} $attr" . $end . "\n";
+ }
+}
diff --git a/engine/classes/ODDDocument.php b/engine/classes/ODDDocument.php
new file mode 100644
index 000000000..540c35a3b
--- /dev/null
+++ b/engine/classes/ODDDocument.php
@@ -0,0 +1,202 @@
+<?php
+/**
+ * This class is used during import and export to construct.
+ *
+ * @package Elgg.Core
+ * @subpackage ODD
+ */
+class ODDDocument implements Iterator {
+ /**
+ * ODD Version
+ *
+ * @var string
+ */
+ private $ODDSupportedVersion = "1.0";
+
+ /**
+ * Elements of the document.
+ */
+ private $elements;
+
+ /**
+ * Optional wrapper factory.
+ */
+ private $wrapperfactory;
+
+ /**
+ * Create a new ODD Document.
+ *
+ * @param array $elements Elements to add
+ *
+ * @return void
+ */
+ public function __construct(array $elements = NULL) {
+ if ($elements) {
+ if (is_array($elements)) {
+ $this->elements = $elements;
+ } else {
+ $this->addElement($elements);
+ }
+ } else {
+ $this->elements = array();
+ }
+ }
+
+ /**
+ * Return the version of ODD being used.
+ *
+ * @return string
+ */
+ public function getVersion() {
+ return $this->ODDSupportedVersion;
+ }
+
+ /**
+ * Returns the number of elements
+ *
+ * @return int
+ */
+ public function getNumElements() {
+ return count($this->elements);
+ }
+
+ /**
+ * Add an element
+ *
+ * @param ODD $element An ODD element
+ *
+ * @return void
+ */
+ public function addElement(ODD $element) {
+ if (!is_array($this->elements)) {
+ $this->elements = array();
+ }
+ $this->elements[] = $element;
+ }
+
+ /**
+ * Add multiple elements at once
+ *
+ * @param array $elements Array of ODD elements
+ *
+ * @return void
+ */
+ public function addElements(array $elements) {
+ foreach ($elements as $element) {
+ $this->addElement($element);
+ }
+ }
+
+ /**
+ * Return all elements
+ *
+ * @return array
+ */
+ public function getElements() {
+ return $this->elements;
+ }
+
+ /**
+ * Set an optional wrapper factory to optionally embed the ODD document in another format.
+ *
+ * @param ODDWrapperFactory $factory The factory
+ *
+ * @return void
+ */
+ public function setWrapperFactory(ODDWrapperFactory $factory) {
+ $this->wrapperfactory = $factory;
+ }
+
+ /**
+ * Magic function to generate valid ODD XML for this item.
+ *
+ * @return string
+ */
+ public function __toString() {
+ $xml = "";
+
+ if ($this->wrapperfactory) {
+ // A wrapper has been provided
+ $wrapper = $this->wrapperfactory->getElementWrapper($this); // Get the wrapper for this element
+
+ $xml = $wrapper->wrap($this); // Wrap this element (and subelements)
+ } else {
+ // Output begin tag
+ $generated = date("r");
+ $xml .= "<odd version=\"{$this->ODDSupportedVersion}\" generated=\"$generated\">\n";
+
+ // Get XML for elements
+ foreach ($this->elements as $element) {
+ $xml .= "$element";
+ }
+
+ // Output end tag
+ $xml .= "</odd>\n";
+ }
+
+ return $xml;
+ }
+
+ // ITERATOR INTERFACE //////////////////////////////////////////////////////////////
+ /*
+ * This lets an entity's attributes be displayed using foreach as a normal array.
+ * Example: http://www.sitepoint.com/print/php5-standard-library
+ */
+
+ private $valid = FALSE;
+
+ /**
+ * Iterator interface
+ *
+ * @see Iterator::rewind()
+ *
+ * @return void
+ */
+ function rewind() {
+ $this->valid = (FALSE !== reset($this->elements));
+ }
+
+ /**
+ * Iterator interface
+ *
+ * @see Iterator::current()
+ *
+ * @return void
+ */
+ function current() {
+ return current($this->elements);
+ }
+
+ /**
+ * Iterator interface
+ *
+ * @see Iterator::key()
+ *
+ * @return void
+ */
+ function key() {
+ return key($this->elements);
+ }
+
+ /**
+ * Iterator interface
+ *
+ * @see Iterator::next()
+ *
+ * @return void
+ */
+ function next() {
+ $this->valid = (FALSE !== next($this->elements));
+ }
+
+ /**
+ * Iterator interface
+ *
+ * @see Iterator::valid()
+ *
+ * @return void
+ */
+ function valid() {
+ return $this->valid;
+ }
+}
diff --git a/engine/classes/ODDEntity.php b/engine/classes/ODDEntity.php
new file mode 100644
index 000000000..e9bb5da6a
--- /dev/null
+++ b/engine/classes/ODDEntity.php
@@ -0,0 +1,34 @@
+<?php
+
+/**
+ * ODD Entity class.
+ *
+ * @package Elgg.Core
+ * @subpackage ODD
+ */
+class ODDEntity extends ODD {
+
+ /**
+ * New ODD Entity
+ *
+ * @param string $uuid A universally unique ID
+ * @param string $class Class
+ * @param string $subclass Subclass
+ */
+ function __construct($uuid, $class, $subclass = "") {
+ parent::__construct();
+
+ $this->setAttribute('uuid', $uuid);
+ $this->setAttribute('class', $class);
+ $this->setAttribute('subclass', $subclass);
+ }
+
+ /**
+ * Returns entity.
+ *
+ * @return 'entity'
+ */
+ protected function getTagName() {
+ return "entity";
+ }
+}
diff --git a/engine/classes/ODDMetaData.php b/engine/classes/ODDMetaData.php
new file mode 100644
index 000000000..09b653582
--- /dev/null
+++ b/engine/classes/ODDMetaData.php
@@ -0,0 +1,39 @@
+<?php
+/**
+ * ODD Metadata class.
+ *
+ * @package Elgg.Core
+ * @subpackage ODD
+ */
+class ODDMetaData extends ODD {
+
+ /**
+ * New ODD metadata
+ *
+ * @param string $uuid Unique ID
+ * @param string $entity_uuid Another unique ID
+ * @param string $name Name
+ * @param string $value Value
+ * @param string $type Type
+ * @param string $owner_uuid Owner ID
+ */
+ function __construct($uuid, $entity_uuid, $name, $value, $type = "", $owner_uuid = "") {
+ parent::__construct();
+
+ $this->setAttribute('uuid', $uuid);
+ $this->setAttribute('entity_uuid', $entity_uuid);
+ $this->setAttribute('name', $name);
+ $this->setAttribute('type', $type);
+ $this->setAttribute('owner_uuid', $owner_uuid);
+ $this->setBody($value);
+ }
+
+ /**
+ * Returns 'metadata'
+ *
+ * @return string 'metadata'
+ */
+ protected function getTagName() {
+ return "metadata";
+ }
+}
diff --git a/engine/classes/ODDRelationship.php b/engine/classes/ODDRelationship.php
new file mode 100644
index 000000000..8b1fe217b
--- /dev/null
+++ b/engine/classes/ODDRelationship.php
@@ -0,0 +1,33 @@
+<?php
+/**
+ * ODD Relationship class.
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+class ODDRelationship extends ODD {
+
+ /**
+ * New ODD Relationship
+ *
+ * @param string $uuid1 First UUID
+ * @param string $type Type of telationship
+ * @param string $uuid2 Second UUId
+ */
+ function __construct($uuid1, $type, $uuid2) {
+ parent::__construct();
+
+ $this->setAttribute('uuid1', $uuid1);
+ $this->setAttribute('type', $type);
+ $this->setAttribute('uuid2', $uuid2);
+ }
+
+ /**
+ * Returns 'relationship'
+ *
+ * @return string 'relationship'
+ */
+ protected function getTagName() {
+ return "relationship";
+ }
+}
diff --git a/engine/classes/PluginException.php b/engine/classes/PluginException.php
new file mode 100644
index 000000000..a74303695
--- /dev/null
+++ b/engine/classes/PluginException.php
@@ -0,0 +1,11 @@
+<?php
+/**
+ * PluginException
+ *
+ * A plugin Exception, thrown when an Exception occurs relating to the plugin mechanism.
+ * Subclass for specific plugin Exceptions.
+ *
+ * @package Elgg.Core
+ * @subpackage Exception
+ */
+class PluginException extends Exception {}
diff --git a/engine/classes/RegistrationException.php b/engine/classes/RegistrationException.php
new file mode 100644
index 000000000..5246efc25
--- /dev/null
+++ b/engine/classes/RegistrationException.php
@@ -0,0 +1,9 @@
+<?php
+/**
+ * RegistrationException
+ * Could not register a new user for whatever reason.
+ *
+ * @package Elgg.Core
+ * @subpackage Exceptions
+ */
+class RegistrationException extends InstallationException {}
diff --git a/engine/classes/SecurityException.php b/engine/classes/SecurityException.php
new file mode 100644
index 000000000..3b6382f9e
--- /dev/null
+++ b/engine/classes/SecurityException.php
@@ -0,0 +1,10 @@
+<?php
+/**
+ * SecurityException
+ * An Security Exception, throw when a Security Exception occurs. Subclass for
+ * specific Security Execeptions (access problems etc)
+ *
+ * @package Elgg.Core
+ * @subpackage Exception
+ */
+class SecurityException extends Exception {}
diff --git a/engine/classes/SuccessResult.php b/engine/classes/SuccessResult.php
new file mode 100644
index 000000000..ab5468ad8
--- /dev/null
+++ b/engine/classes/SuccessResult.php
@@ -0,0 +1,34 @@
+<?php
+/**
+ * SuccessResult
+ * Generic success result class, extend if you want to do something special.
+ *
+ * @package Elgg.Core
+ * @subpackage WebServicesAPI
+ */
+class SuccessResult extends GenericResult {
+ // Do not change this from 0
+ public static $RESULT_SUCCESS = 0;
+
+ /**
+ * A new success result
+ *
+ * @param string $result The result
+ */
+ public function __construct($result) {
+ $this->setResult($result);
+ $this->setStatusCode(SuccessResult::$RESULT_SUCCESS);
+ }
+
+ /**
+ * Returns a new instance of this class
+ *
+ * @param unknown $result A result of some kind?
+ *
+ * @return SuccessResult
+ */
+ public static function getInstance($result) {
+ // Return a new error object.
+ return new SuccessResult($result);
+ }
+}
diff --git a/engine/classes/XMLRPCArrayParameter.php b/engine/classes/XMLRPCArrayParameter.php
new file mode 100644
index 000000000..a8edccba7
--- /dev/null
+++ b/engine/classes/XMLRPCArrayParameter.php
@@ -0,0 +1,56 @@
+<?php
+
+/**
+ * An array containing other XMLRPCParameter objects.
+ *
+ * @package Elgg.Core
+ * @subpackage XMLRPC
+ *
+ */
+class XMLRPCArrayParameter extends XMLRPCParameter
+{
+ /**
+ * Construct an array.
+ *
+ * @param array $parameters Optional array of parameters, if not provided
+ * then addField must be used.
+ */
+ function __construct($parameters = NULL) {
+ parent::__construct();
+
+ if (is_array($parameters)) {
+ foreach ($parameters as $v) {
+ $this->addField($v);
+ }
+ }
+ }
+
+ /**
+ * Add a field to the container.
+ *
+ * @param XMLRPCParameter $value The value.
+ *
+ * @return void
+ */
+ public function addField(XMLRPCParameter $value) {
+ if (!is_array($this->value)) {
+ $this->value = array();
+ }
+
+ $this->value[] = $value;
+ }
+
+ /**
+ * Converts XML array to string
+ *
+ * @return string
+ */
+ function __toString() {
+ $params = "";
+ foreach ($this->value as $value) {
+ $params .= "$value";
+ }
+
+ return "<array><data>$params</data></array>";
+ }
+}
diff --git a/engine/classes/XMLRPCBase64Parameter.php b/engine/classes/XMLRPCBase64Parameter.php
new file mode 100644
index 000000000..7db0a761c
--- /dev/null
+++ b/engine/classes/XMLRPCBase64Parameter.php
@@ -0,0 +1,28 @@
+<?php
+/**
+ * A base 64 encoded blob of binary.
+ *
+ * @package Elgg.Core
+ * @subpackage XMLRPC
+ */
+class XMLRPCBase64Parameter extends XMLRPCParameter {
+ /**
+ * Construct a base64 encoded block
+ *
+ * @param string $blob Unencoded binary blob
+ */
+ function __construct($blob) {
+ parent::__construct();
+
+ $this->value = base64_encode($blob);
+ }
+
+ /**
+ * Convert to string
+ *
+ * @return string
+ */
+ function __toString() {
+ return "<value><base64>{$value}</base64></value>";
+ }
+}
diff --git a/engine/classes/XMLRPCBoolParameter.php b/engine/classes/XMLRPCBoolParameter.php
new file mode 100644
index 000000000..607841cb8
--- /dev/null
+++ b/engine/classes/XMLRPCBoolParameter.php
@@ -0,0 +1,30 @@
+<?php
+/**
+ * A boolean.
+ *
+ * @package Elgg.Core
+ * @subpackage XMLRPC
+ */
+class XMLRPCBoolParameter extends XMLRPCParameter {
+
+ /**
+ * New bool parameter
+ *
+ * @param bool $value Value
+ */
+ function __construct($value) {
+ parent::__construct();
+
+ $this->value = (bool)$value;
+ }
+
+ /**
+ * Convert to string
+ *
+ * @return string
+ */
+ function __toString() {
+ $code = ($this->value) ? "1" : "0";
+ return "<value><boolean>{$code}</boolean></value>";
+ }
+}
diff --git a/engine/classes/XMLRPCCall.php b/engine/classes/XMLRPCCall.php
new file mode 100644
index 000000000..fd28f1e3e
--- /dev/null
+++ b/engine/classes/XMLRPCCall.php
@@ -0,0 +1,62 @@
+<?php
+/**
+ * An XMLRPC call
+ *
+ * @package Elgg.Core
+ * @subpackage XMLRPC
+ */
+class XMLRPCCall {
+ /** Method name */
+ private $methodname;
+
+ /** Parameters */
+ private $params;
+
+ /**
+ * Construct a new XML RPC Call
+ *
+ * @param string $xml XML
+ */
+ function __construct($xml) {
+ $this->parse($xml);
+ }
+
+ /**
+ * Return the method name associated with the call.
+ *
+ * @return string
+ */
+ public function getMethodName() { return $this->methodname; }
+
+ /**
+ * Return the parameters.
+ * Returns a nested array of XmlElement.
+ *
+ * @see XmlElement
+ * @return array
+ */
+ public function getParameters() { return $this->params; }
+
+ /**
+ * Parse the xml into its components according to spec.
+ * This first version is a little primitive.
+ *
+ * @param string $xml XML
+ *
+ * @return void
+ */
+ private function parse($xml) {
+ $xml = xml_to_object($xml);
+
+ // sanity check
+ if ((isset($xml->name)) && (strcasecmp($xml->name, "methodCall") != 0)) {
+ throw new CallException(elgg_echo('CallException:NotRPCCall'));
+ }
+
+ // method name
+ $this->methodname = $xml->children[0]->content;
+
+ // parameters
+ $this->params = $xml->children[1]->children;
+ }
+}
diff --git a/engine/classes/XMLRPCDateParameter.php b/engine/classes/XMLRPCDateParameter.php
new file mode 100644
index 000000000..93bbbd8f5
--- /dev/null
+++ b/engine/classes/XMLRPCDateParameter.php
@@ -0,0 +1,33 @@
+<?php
+/**
+ * An ISO8601 data and time.
+ *
+ * @package Elgg.Core
+ * @subpackage XMLRPC
+ */
+class XMLRPCDateParameter extends XMLRPCParameter {
+ /**
+ * Construct a date
+ *
+ * @param int $timestamp The unix timestamp, or blank for "now".
+ */
+ function __construct($timestamp = 0) {
+ parent::__construct();
+
+ $this->value = $timestamp;
+
+ if (!$timestamp) {
+ $this->value = time();
+ }
+ }
+
+ /**
+ * Convert to string
+ *
+ * @return string
+ */
+ function __toString() {
+ $value = date('c', $this->value);
+ return "<value><dateTime.iso8601>{$value}</dateTime.iso8601></value>";
+ }
+}
diff --git a/engine/classes/XMLRPCDoubleParameter.php b/engine/classes/XMLRPCDoubleParameter.php
new file mode 100644
index 000000000..b7834650e
--- /dev/null
+++ b/engine/classes/XMLRPCDoubleParameter.php
@@ -0,0 +1,29 @@
+<?php
+/**
+ * A double precision signed floating point number.
+ *
+ * @package Elgg.Core
+ * @subpackage XMLRPC
+ */
+class XMLRPCDoubleParameter extends XMLRPCParameter {
+
+ /**
+ * New XML Double
+ *
+ * @param int $value Value
+ */
+ function __construct($value) {
+ parent::__construct();
+
+ $this->value = (float)$value;
+ }
+
+ /**
+ * Convert to string
+ *
+ * @return string
+ */
+ function __toString() {
+ return "<value><double>{$this->value}</double></value>";
+ }
+}
diff --git a/engine/classes/XMLRPCErrorResponse.php b/engine/classes/XMLRPCErrorResponse.php
new file mode 100644
index 000000000..425c075cc
--- /dev/null
+++ b/engine/classes/XMLRPCErrorResponse.php
@@ -0,0 +1,36 @@
+<?php
+
+/**
+ * XMLRPC Error Response
+ *
+ * @package Elgg.Core
+ * @subpackage XMLRPC
+ */
+class XMLRPCErrorResponse extends XMLRPCResponse {
+ /**
+ * Set the error response and error code.
+ *
+ * @param string $message The message
+ * @param int $code Error code (default = system error as defined by
+ * http://xmlrpc-epi.sourceforge.net/specs/rfc.fault_codes.php)
+ */
+ function __construct($message, $code = -32400) {
+ $this->addParameter(
+ new XMLRPCStructParameter(
+ array (
+ 'faultCode' => new XMLRPCIntParameter($code),
+ 'faultString' => new XMLRPCStringParameter($message)
+ )
+ )
+ );
+ }
+
+ /**
+ * Output to XML.
+ *
+ * @return string
+ */
+ public function __toString() {
+ return "<methodResponse><fault><value>{$this->parameters[0]}</value></fault></methodResponse>";
+ }
+}
diff --git a/engine/classes/XMLRPCIntParameter.php b/engine/classes/XMLRPCIntParameter.php
new file mode 100644
index 000000000..0fc146165
--- /dev/null
+++ b/engine/classes/XMLRPCIntParameter.php
@@ -0,0 +1,29 @@
+<?php
+/**
+ * An Integer.
+ *
+ * @package Elgg.Core
+ * @subpackage XMLRPC
+ */
+class XMLRPCIntParameter extends XMLRPCParameter {
+
+ /**
+ * A new XML int
+ *
+ * @param int $value Value
+ */
+ function __construct($value) {
+ parent::__construct();
+
+ $this->value = (int)$value;
+ }
+
+ /**
+ * Convert to string
+ *
+ * @return string
+ */
+ function __toString() {
+ return "<value><i4>{$this->value}</i4></value>";
+ }
+}
diff --git a/engine/classes/XMLRPCParameter.php b/engine/classes/XMLRPCParameter.php
new file mode 100644
index 000000000..ffbad8082
--- /dev/null
+++ b/engine/classes/XMLRPCParameter.php
@@ -0,0 +1,16 @@
+<?php
+/**
+ * Superclass for all RPC parameters.
+ *
+ * @package Elgg.Core
+ * @subpackage XMLRPC
+ */
+abstract class XMLRPCParameter {
+ protected $value;
+
+ /**
+ * Set initial values
+ */
+ function __construct() { }
+
+}
diff --git a/engine/classes/XMLRPCResponse.php b/engine/classes/XMLRPCResponse.php
new file mode 100644
index 000000000..a6256d385
--- /dev/null
+++ b/engine/classes/XMLRPCResponse.php
@@ -0,0 +1,71 @@
+<?php
+
+/**
+ * XML-RPC Response.
+ *
+ * @package Elgg.Core
+ * @subpackage XMLRPC
+ */
+abstract class XMLRPCResponse {
+ /** An array of parameters */
+ protected $parameters = array();
+
+ /**
+ * Add a parameter here.
+ *
+ * @param XMLRPCParameter $param The parameter.
+ *
+ * @return void
+ */
+ public function addParameter(XMLRPCParameter $param) {
+ if (!is_array($this->parameters)) {
+ $this->parameters = array();
+ }
+
+ $this->parameters[] = $param;
+ }
+
+ /**
+ * Add an integer
+ *
+ * @param int $value Value
+ *
+ * @return void
+ */
+ public function addInt($value) {
+ $this->addParameter(new XMLRPCIntParameter($value));
+ }
+
+ /**
+ * Add a string
+ *
+ * @param string $value Value
+ *
+ * @return void
+ */
+ public function addString($value) {
+ $this->addParameter(new XMLRPCStringParameter($value));
+ }
+
+ /**
+ * Add a double
+ *
+ * @param int $value Value
+ *
+ * @return void
+ */
+ public function addDouble($value) {
+ $this->addParameter(new XMLRPCDoubleParameter($value));
+ }
+
+ /**
+ * Add a boolean
+ *
+ * @param bool $value Value
+ *
+ * @return void
+ */
+ public function addBoolean($value) {
+ $this->addParameter(new XMLRPCBoolParameter($value));
+ }
+}
diff --git a/engine/classes/XMLRPCStringParameter.php b/engine/classes/XMLRPCStringParameter.php
new file mode 100644
index 000000000..35b28214b
--- /dev/null
+++ b/engine/classes/XMLRPCStringParameter.php
@@ -0,0 +1,30 @@
+<?php
+/**
+ * A string.
+ *
+ * @package Elgg.Core
+ * @subpackage XMLRPC
+ */
+class XMLRPCStringParameter extends XMLRPCParameter {
+
+ /**
+ * A new XML string
+ *
+ * @param string $value Value
+ */
+ function __construct($value) {
+ parent::__construct();
+
+ $this->value = $value;
+ }
+
+ /**
+ * Convert to XML string
+ *
+ * @return string
+ */
+ function __toString() {
+ $value = htmlentities($this->value);
+ return "<value><string>{$value}</string></value>";
+ }
+}
diff --git a/engine/classes/XMLRPCStructParameter.php b/engine/classes/XMLRPCStructParameter.php
new file mode 100644
index 000000000..694ddf5df
--- /dev/null
+++ b/engine/classes/XMLRPCStructParameter.php
@@ -0,0 +1,55 @@
+<?php
+
+/**
+ * A structure containing other XMLRPCParameter objects.
+ *
+ * @package Elgg.Core
+ * @subpackage XMLRPC
+ */
+class XMLRPCStructParameter extends XMLRPCParameter {
+ /**
+ * Construct a struct.
+ *
+ * @param array $parameters Optional associated array of parameters, if
+ * not provided then addField must be used.
+ */
+ function __construct($parameters = NULL) {
+ parent::__construct();
+
+ if (is_array($parameters)) {
+ foreach ($parameters as $k => $v) {
+ $this->addField($k, $v);
+ }
+ }
+ }
+
+ /**
+ * Add a field to the container.
+ *
+ * @param string $name The name of the field.
+ * @param XMLRPCParameter $value The value.
+ *
+ * @return void
+ */
+ public function addField($name, XMLRPCParameter $value) {
+ if (!is_array($this->value)) {
+ $this->value = array();
+ }
+
+ $this->value[$name] = $value;
+ }
+
+ /**
+ * Convert to string
+ *
+ * @return string
+ */
+ function __toString() {
+ $params = "";
+ foreach ($this->value as $k => $v) {
+ $params .= "<member><name>$k</name>$v</member>";
+ }
+
+ return "<value><struct>$params</struct></value>";
+ }
+}
diff --git a/engine/classes/XMLRPCSuccessResponse.php b/engine/classes/XMLRPCSuccessResponse.php
new file mode 100644
index 000000000..e02e82c5c
--- /dev/null
+++ b/engine/classes/XMLRPCSuccessResponse.php
@@ -0,0 +1,22 @@
+<?php
+/**
+ * Success Response
+ *
+ * @package Elgg.Core
+ * @subpackage XMLRPC
+ */
+class XMLRPCSuccessResponse extends XMLRPCResponse {
+ /**
+ * Output to XML.
+ *
+ * @return string
+ */
+ public function __toString() {
+ $params = "";
+ foreach ($this->parameters as $param) {
+ $params .= "<param>$param</param>\n";
+ }
+
+ return "<methodResponse><params>$params</params></methodResponse>";
+ }
+}
diff --git a/engine/classes/XmlElement.php b/engine/classes/XmlElement.php
new file mode 100644
index 000000000..280bba664
--- /dev/null
+++ b/engine/classes/XmlElement.php
@@ -0,0 +1,20 @@
+<?php
+/**
+ * A class representing an XML element for import.
+ *
+ * @package Elgg.Core
+ * @subpackage XML
+ */
+class XmlElement {
+ /** The name of the element */
+ public $name;
+
+ /** The attributes */
+ public $attributes;
+
+ /** CData */
+ public $content;
+
+ /** Child elements */
+ public $children;
+};
diff --git a/engine/handlers/action_handler.php b/engine/handlers/action_handler.php
index fa5a40a7a..bcad110b2 100644
--- a/engine/handlers/action_handler.php
+++ b/engine/handlers/action_handler.php
@@ -1,20 +1,20 @@
-<?php
-
- /**
- * Elgg action handler
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
- /**
- * Load Elgg framework
- */
- require_once("../start.php");
- $action = get_input("action");
- action($action);
-
-?>
+<?php
+/**
+ * Action handler.
+ *
+ * This file dispatches actions. It is called via a URL rewrite in .htaccess
+ * from http://site/action/. Anything after 'action/' is considered the action
+ * and will be passed to {@link action()}.
+ *
+ * @warning This sets the input named 'action' to the current action. When calling
+ * an action, get_input('action') will always return the action name.
+ *
+ * @package Elgg.Core
+ * @subpackage Actions
+ * @link http://docs.elgg.org/Tutorials/Actions
+ */
+
+require_once(dirname(dirname(__FILE__)) . "/start.php");
+
+$action = get_input("action");
+action($action);
diff --git a/engine/handlers/cache_handler.php b/engine/handlers/cache_handler.php
new file mode 100644
index 000000000..36fc665bb
--- /dev/null
+++ b/engine/handlers/cache_handler.php
@@ -0,0 +1,105 @@
+<?php
+/**
+ * Cache handler.
+ *
+ * External access to cached CSS and JavaScript views. The cached file URLS
+ * should be of the form: cache/<type>/<viewtype>/<name/of/view>.<unique_id>.<type> where
+ * type is either css or js, view is the name of the cached view, and
+ * unique_id is an identifier that is updated every time the cache is flushed.
+ * The simplest way to maintain a unique identifier is to use the lastcache
+ * variable in Elgg's config object.
+ *
+ * @see elgg_register_simplecache_view()
+ *
+ * @package Elgg.Core
+ * @subpackage Cache
+ */
+
+// Get dataroot
+require_once(dirname(dirname(__FILE__)) . '/settings.php');
+$mysql_dblink = mysql_connect($CONFIG->dbhost, $CONFIG->dbuser, $CONFIG->dbpass, true);
+if (!$mysql_dblink) {
+ echo 'Cache error: unable to connect to database server';
+ exit;
+}
+
+if (!mysql_select_db($CONFIG->dbname, $mysql_dblink)) {
+ echo 'Cache error: unable to connect to Elgg database';
+ exit;
+}
+
+$query = "select name, value from {$CONFIG->dbprefix}datalists
+ where name in ('dataroot', 'simplecache_enabled')";
+
+$result = mysql_query($query, $mysql_dblink);
+if (!$result) {
+ echo 'Cache error: unable to get the data root';
+ exit;
+}
+while ($row = mysql_fetch_object($result)) {
+ ${$row->name} = $row->value;
+}
+mysql_free_result($result);
+
+
+$dirty_request = $_GET['request'];
+// only alphanumeric characters plus /, ., and _ and no '..'
+$filter = array("options" => array("regexp" => "/^(\.?[_a-zA-Z0-9\/]+)+$/"));
+$request = filter_var($dirty_request, FILTER_VALIDATE_REGEXP, $filter);
+if (!$request || !$simplecache_enabled) {
+ echo 'Cache error: bad request';
+ exit;
+}
+
+// testing showed regex to be marginally faster than array / string functions over 100000 reps
+// it won't make a difference in real life and regex is easier to read.
+// <type>/<viewtype>/<name/of/view.and.dots>.<ts>.<type>
+$regex = '|([^/]+)/([^/]+)/(.+)\.([^\.]+)\.([^.]+)$|';
+preg_match($regex, $request, $matches);
+
+$type = $matches[1];
+$viewtype = $matches[2];
+$view = $matches[3];
+$ts = $matches[4];
+
+// If is the same ETag, content didn't changed.
+$etag = $ts;
+if (isset($_SERVER['HTTP_IF_NONE_MATCH']) && trim($_SERVER['HTTP_IF_NONE_MATCH']) == "\"$etag\"") {
+ header("HTTP/1.1 304 Not Modified");
+ exit;
+}
+
+switch ($type) {
+ case 'css':
+ header("Content-type: text/css", true);
+ $view = "css/$view";
+ break;
+ case 'js':
+ header('Content-type: text/javascript', true);
+ $view = "js/$view";
+ break;
+}
+
+header('Expires: ' . gmdate('D, d M Y H:i:s \G\M\T', strtotime("+6 months")), true);
+header("Pragma: public", true);
+header("Cache-Control: public", true);
+header("ETag: \"$etag\"");
+
+$filename = $dataroot . 'views_simplecache/' . md5($viewtype . $view);
+
+if (file_exists($filename)) {
+ readfile($filename);
+} else {
+ // someone trying to access a non-cached file or a race condition with cache flushing
+ mysql_close($mysql_dblink);
+ require_once(dirname(dirname(__FILE__)) . "/start.php");
+
+ global $CONFIG;
+ if (!in_array($view, $CONFIG->views->simplecache)) {
+ header("HTTP/1.1 404 Not Found");
+ exit;
+ }
+
+ elgg_set_viewtype($viewtype);
+ echo elgg_view($view);
+}
diff --git a/engine/handlers/cron_handler.php b/engine/handlers/cron_handler.php
deleted file mode 100644
index 639884da4..000000000
--- a/engine/handlers/cron_handler.php
+++ /dev/null
@@ -1,39 +0,0 @@
-<?php
- /**
- * Elgg Cron handler.
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
-
- // Load Elgg engine
- require_once("../start.php");
- global $CONFIG;
-
- // Get basic parameters
- $period = get_input('period');
- if (!$period) throw new CronException(sprintf(elgg_echo('CronException:unknownperiod'), $period));
-
- // Get a list of parameters
- $params = array();
- $params['time'] = time();
-
- foreach ($CONFIG->input as $k => $v)
- $params[$k] = $v;
-
- // Trigger hack
- $std_out = ""; // Data to return to
- $old_stdout = "";
- ob_start();
-
- $old_stdout = trigger_plugin_hook('cron', $period, $params, $old_stdout);
-
- $std_out = ob_get_clean();
-
- // Return event
- echo $std_out . $old_stdout;
-?> \ No newline at end of file
diff --git a/engine/handlers/export_handler.php b/engine/handlers/export_handler.php
new file mode 100644
index 000000000..aa5214c23
--- /dev/null
+++ b/engine/handlers/export_handler.php
@@ -0,0 +1,118 @@
+<?php
+/**
+ * Export handler.
+ *
+ * @package Elgg.Core
+ * @subpackage Export
+ */
+
+require_once(dirname(dirname(__FILE__)) . "/start.php");
+
+
+// Get input values, these will be mapped via modrewrite
+$guid = get_input("guid"); // guid of the entity
+
+// For attributes eg http://example.com/odd/73/attr/owner_uuid/
+// or http://example.com/odd/73/metadata/86/
+$type = get_input("type"); // attr, metadata, annotation, relationship
+$id_or_name = get_input("idname"); // Either a number or the key name (if attribute)
+
+$body = "";
+$title = "";
+
+// Only export the GUID
+if (($guid != "") && ($type == "") && ($id_or_name == "")) {
+ $entity = get_entity($guid);
+
+ if (!$entity) {
+ $query = elgg_echo('InvalidParameterException:GUIDNotFound', array($guid));
+ throw new InvalidParameterException($query);
+ }
+
+ $title = "GUID:$guid";
+ $body = elgg_view("export/entity", array("entity" => $entity, "uuid" => guid_to_uuid($guid)));
+
+ // Export an individual attribute
+} else if (($guid != "") && ($type != "") && ($id_or_name != "")) {
+ // Get a uuid
+ $entity = get_entity($guid);
+ if (!$entity) {
+ $msg = elgg_echo('InvalidParameterException:GUIDNotFound', array($guid));
+ throw new InvalidParameterException($msg);
+ }
+
+ $uuid = guid_to_uuid($entity->getGUID()) . "$type/$id_or_name/";
+
+ switch ($type) {
+ case 'attr' : // @todo: Do this better? - This is a bit of a hack...
+ $v = $entity->get($id_or_name);
+ if (!$v) {
+ $msg = elgg_echo('InvalidParameterException:IdNotExistForGUID', array($id_or_name, $guid));
+ throw new InvalidParameterException($msg);
+ }
+
+ $m = new ElggMetadata();
+
+ $m->value = $v;
+ $m->name = $id_or_name;
+ $m->entity_guid = $guid;
+ $m->time_created = $entity->time_created;
+ $m->time_updated = $entity->time_updated;
+ $m->owner_guid = $entity->owner_guid;
+ $m->id = $id_or_name;
+ $m->type = "attr";
+ break;
+ case 'metadata' :
+ $m = elgg_get_metadata_from_id($id_or_name);
+ break;
+ case 'annotation' :
+ $m = elgg_get_annotation_from_id($id_or_name);
+ break;
+ case 'relationship' :
+ $r = get_relationship($id_or_name);
+ break;
+ case 'volatile' :
+ $m = elgg_trigger_plugin_hook('volatile', 'metadata', array(
+ 'guid' => $guid,
+ 'varname' => $id_or_name,
+ ));
+ break;
+
+ default :
+ $msg = elgg_echo('InvalidParameterException:CanNotExportType', array($type));
+ throw new InvalidParameterException($msg);
+ }
+
+ // Render metadata or relationship
+ if ((!$m) && (!$r)) {
+ throw new InvalidParameterException(elgg_echo('InvalidParameterException:NoDataFound'));
+ }
+
+ // Exporting metadata?
+ if ($m) {
+ if ($m->entity_guid != $entity->guid) {
+ throw new InvalidParameterException(elgg_echo('InvalidParameterException:DoesNotBelong'));
+ }
+
+ $title = "$type:$id_or_name";
+ $body = elgg_view("export/metadata", array("metadata" => $m, "uuid" => $uuid));
+ }
+
+ // Exporting relationship
+ if ($r) {
+ if (($r->guid_one != $entity->guid) && ($r->guid_two != $entity->guid)) {
+ throw new InvalidParameterException(elgg_echo('InvalidParameterException:DoesNotBelongOrRefer'));
+ }
+
+ $title = "$type:$id_or_name";
+ $body = elgg_view("export/relationship", array("relationship" => $r, "uuid" => $uuid));
+ }
+
+ // Something went wrong
+} else {
+ throw new InvalidParameterException(elgg_echo('InvalidParameterException:MissingParameter'));
+}
+
+$content = elgg_view_title($title) . $body;
+$body = elgg_view_layout('one_sidebar', array('content' => $content));
+echo elgg_view_page($title, $body);
diff --git a/engine/handlers/page_handler.php b/engine/handlers/page_handler.php
new file mode 100644
index 000000000..1ed295b7d
--- /dev/null
+++ b/engine/handlers/page_handler.php
@@ -0,0 +1,48 @@
+<?php
+/**
+ * Pages handler.
+ *
+ * This file dispatches pages. It is called via a URL rewrite in .htaccess
+ * from http://site/handler/page1/page2. The first element after site/ is
+ * the page handler name as registered by {@link elgg_register_page_handler()}.
+ * The rest of the string is sent to {@link page_handler()}.
+ *
+ * Note that the following handler names are reserved by elgg and should not be
+ * registered by any plugins:
+ * * action
+ * * cache
+ * * services
+ * * export
+ * * mt
+ * * xml-rpc.php
+ * * rewrite.php
+ * * tag (deprecated, reserved for backwards compatibility)
+ * * pg (deprecated, reserved for backwards compatibility)
+ *
+ * {@link page_handler()} explodes the pages string by / and sends it to
+ * the page handler function as registered by {@link elgg_register_page_handler()}.
+ * If a valid page handler isn't found, plugins have a chance to provide a 404.
+ *
+ * @package Elgg.Core
+ * @subpackage PageHandler
+ * @link http://docs.elgg.org/Tutorials/PageHandlers
+ */
+
+
+// Permanent redirect to pg-less urls
+$url = $_SERVER['REQUEST_URI'];
+$new_url = preg_replace('#/pg/#', '/', $url, 1);
+
+if ($url !== $new_url) {
+ header("HTTP/1.1 301 Moved Permanently");
+ header("Location: $new_url");
+}
+
+require_once(dirname(dirname(__FILE__)) . "/start.php");
+
+$handler = get_input('handler');
+$page = get_input('page');
+
+if (!page_handler($handler, $page)) {
+ forward('', '404');
+}
diff --git a/engine/handlers/pagehandler.php b/engine/handlers/pagehandler.php
deleted file mode 100644
index 35286286b..000000000
--- a/engine/handlers/pagehandler.php
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-
- /**
- * Elgg page handler
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
-
- // Load Elgg engine
- require_once("../start.php");
-
- // Get input
- $handler = get_input('handler');
- $page = get_input('page');
-
- // Call the page handler functions
- if (!page_handler($handler, $page)) {
- forward();
- }
-
-?> \ No newline at end of file
diff --git a/engine/handlers/service_handler.php b/engine/handlers/service_handler.php
new file mode 100644
index 000000000..9cfcd230f
--- /dev/null
+++ b/engine/handlers/service_handler.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Services handler.
+ *
+ * This file dispatches requests to web services. It is called via a URL rewrite
+ * in .htaccess from http://site/services/api/handler/response_format/request.
+ * The first element after 'services/api/' is the service handler name as
+ * registered by {@link register_service_handler()}.
+ *
+ * The remaining string is then passed to the {@link service_handler()}
+ * which explodes by /, extracts the first element as the response format
+ * (viewtype), and then passes the remaining array to the service handler
+ * function registered by {@link register_service_handler()}.
+ *
+ * If a service handler isn't found, a 404 header is sent.
+ *
+ * @package Elgg.Core
+ * @subpackage WebServices
+ * @link http://docs.elgg.org/Tutorials/WebServices
+ */
+
+require_once(dirname(dirname(__FILE__)) . "/start.php");
+
+$handler = get_input('handler');
+$request = get_input('request');
+
+service_handler($handler, $request);
diff --git a/engine/handlers/xml-rpc_handler.php b/engine/handlers/xml-rpc_handler.php
index 82801a56f..2ee29e5b7 100644
--- a/engine/handlers/xml-rpc_handler.php
+++ b/engine/handlers/xml-rpc_handler.php
@@ -1,48 +1,44 @@
<?php
- /**
- * Elgg XML-RPC handler.
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
-
- // Load Elgg engine
- require_once("../start.php");
- global $CONFIG;
-
- // Register the error handler
- error_reporting(E_ALL);
- set_error_handler('__php_xmlrpc_error_handler');
-
- // Register a default exception handler
- set_exception_handler('__php_xmlrpc_exception_handler');
-
- // Set some defaults
- $result = null;
- set_input('view', 'xml'); // Set default view regardless
-
- // Get the post data
- $input = get_post_data();
-
- if ($input)
- {
- // Parse structures from xml
- $call = new XMLRPCCall($input);
-
- // Process call
- $result = trigger_xmlrpc_handler($call);
- }
- else
- throw new CallException(elgg_echo('xmlrpc:noinputdata'));
-
- if (!($result instanceof XMLRPCResponse))
- throw new APIException(elgg_echo('APIException:ApiResultUnknown'));
-
- // Output result
- page_draw("XML-RPC", elgg_view("xml-rpc/output", array('result' => $result)));
-
-?> \ No newline at end of file
+/**
+ * XML-RPC handler.
+ *
+ * @warning This is very old code. Does it work at all?
+ *
+ * @package Elgg.Core
+ * @subpackage XMLRPC
+ * @link http://docs.elgg.org/Tutorials/XMLRPC
+ * @todo Does this work?
+ */
+
+require_once(dirname(dirname(__FILE__)) . "/start.php");
+
+// Register the error handler
+error_reporting(E_ALL);
+set_error_handler('_php_xmlrpc_error_handler');
+
+// Register a default exception handler
+set_exception_handler('_php_xmlrpc_exception_handler');
+
+// Set some defaults
+$result = null;
+set_input('view', 'xml'); // Set default view regardless
+
+// Get the post data
+$input = get_post_data();
+
+if ($input) {
+ // Parse structures from xml
+ $call = new XMLRPCCall($input);
+
+ // Process call
+ $result = trigger_xmlrpc_handler($call);
+} else {
+ throw new CallException(elgg_echo('xmlrpc:noinputdata'));
+}
+
+if (!($result instanceof XMLRPCResponse)) {
+ throw new APIException(elgg_echo('APIException:ApiResultUnknown'));
+}
+
+// Output result
+echo elgg_view_page("XML-RPC", elgg_view("xml-rpc/output", array('result' => $result)));
diff --git a/engine/lib/access.php b/engine/lib/access.php
index 77f234dc9..de0693ea8 100644
--- a/engine/lib/access.php
+++ b/engine/lib/access.php
@@ -1,456 +1,1078 @@
-<?php
-
- /**
- * Elgg access permissions
- * For users, objects, collections and all metadata
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
-
- /**
- * Get the list of access restrictions the given user is allowed to see on this site
- *
- * @uses get_access_array
- * @param int $user_id User ID; defaults to currently logged in user
- * @param int $site_id Site ID; defaults to current site
- * @param boolean $flush If set to true, will refresh the access list from the database
- * @return string A list of access collections suitable for injection in an SQL call
- */
- function get_access_list($user_id = 0, $site_id = 0, $flush = false) {
-
- global $CONFIG, $init_finished, $SESSION;
- static $access_list;
-
- if (!isset($access_list) || !$init_finished)
- $access_list = array();
-
- if ($user_id == 0) $user_id = $SESSION['id'];
- if (($site_id == 0) && (isset($CONFIG->site_id))) $site_id = $CONFIG->site_id;
- $user_id = (int) $user_id;
- $site_id = (int) $site_id;
-
- if (isset($access_list[$user_id])) return $access_list[$user_id];
-
- $access_list[$user_id] = "(" . implode(",",get_access_array($user_id, $site_id, $flush)) . ")";
-
- return $access_list[$user_id];
-
- }
-
- /**
- * Gets an array of access restrictions the given user is allowed to see on this site
- *
- * @param int $user_id User ID; defaults to currently logged in user
- * @param int $site_id Site ID; defaults to current site
- * @param boolean $flush If set to true, will refresh the access list from the database
- * @return array An array of access collections suitable for injection in an SQL call
- */
- function get_access_array($user_id = 0, $site_id = 0, $flush = false) {
-
- global $CONFIG, $init_finished;
- static $access_array, $acm, $ac; // Caches. $ac* flag whether we have executed a query previously, and stop it being run again if no data is returned.
-
- if (!isset($access_array) || (!isset($init_finished)) || (!$init_finished))
- $access_array = array();
-
- if ($user_id == 0) $user_id = get_loggedin_userid();
-
- if (($site_id == 0) && (isset($CONFIG->site_guid))) $site_id = $CONFIG->site_guid;
- $user_id = (int) $user_id;
- $site_id = (int) $site_id;
-
- if (empty($access_array[$user_id]) || $flush == true) {
-
- $query = "SELECT am.access_collection_id FROM {$CONFIG->dbprefix}access_collection_membership am ";
- $query .= " LEFT JOIN {$CONFIG->dbprefix}access_collections ag ON ag.id = am.access_collection_id ";
- $query .= " WHERE am.user_guid = {$user_id} AND (ag.site_guid = {$site_id} OR ag.site_guid = 0)";
-
- $tmp_access_array = array(ACCESS_PUBLIC);
- if (isloggedin()) {
- $tmp_access_array[] = ACCESS_LOGGED_IN;
-
- // The following can only return sensible data if the user is logged in.
-
- if ($collections = get_data($query)) {
- foreach($collections as $collection)
- if (!empty($collection->access_collection_id)) $tmp_access_array[] = $collection->access_collection_id;
-
+<?php
+/**
+ * Functions for Elgg's access system for entities, metadata, and annotations.
+ *
+ * Access is generally saved in the database as access_id. This corresponds to
+ * one of the ACCESS_* constants defined in {@link elgglib.php} or the ID of an
+ * access collection.
+ *
+ * @package Elgg.Core
+ * @subpackage Access
+ * @link http://docs.elgg.org/Access
+ */
+
+/**
+ * Return an ElggCache static variable cache for the access caches
+ *
+ * @staticvar ElggStaticVariableCache $access_cache
+ * @return \ElggStaticVariableCache
+ * @access private
+ */
+function _elgg_get_access_cache() {
+ /**
+ * A default filestore cache using the dataroot.
+ */
+ static $access_cache;
+
+ if (!$access_cache) {
+ $access_cache = new ElggStaticVariableCache('access');
+ }
+
+ return $access_cache;
+}
+
+/**
+ * Return a string of access_ids for $user_id appropriate for inserting into an SQL IN clause.
+ *
+ * @uses get_access_array
+ *
+ * @link http://docs.elgg.org/Access
+ * @see get_access_array()
+ *
+ * @param int $user_id User ID; defaults to currently logged in user
+ * @param int $site_id Site ID; defaults to current site
+ * @param bool $flush If set to true, will refresh the access list from the
+ * database rather than using this function's cache.
+ *
+ * @return string A list of access collections suitable for using in an SQL call
+ * @access private
+ */
+function get_access_list($user_id = 0, $site_id = 0, $flush = false) {
+ global $CONFIG, $init_finished;
+ $cache = _elgg_get_access_cache();
+
+ if ($flush) {
+ $cache->clear();
+ }
+
+ if ($user_id == 0) {
+ $user_id = elgg_get_logged_in_user_guid();
+ }
+
+ if (($site_id == 0) && (isset($CONFIG->site_id))) {
+ $site_id = $CONFIG->site_id;
+ }
+ $user_id = (int) $user_id;
+ $site_id = (int) $site_id;
+
+ $hash = $user_id . $site_id . 'get_access_list';
+
+ if ($cache[$hash]) {
+ return $cache[$hash];
+ }
+
+ $access_array = get_access_array($user_id, $site_id, $flush);
+ $access = "(" . implode(",", $access_array) . ")";
+
+ if ($init_finished) {
+ $cache[$hash] = $access;
+ }
+
+ return $access;
+}
+
+/**
+ * Returns an array of access IDs a user is permitted to see.
+ *
+ * Can be overridden with the 'access:collections:read', 'user' plugin hook.
+ *
+ * This returns a list of all the collection ids a user owns or belongs
+ * to plus public and logged in access levels. If the user is an admin, it includes
+ * the private access level.
+ *
+ * @internal this is only used in core for creating the SQL where clause when
+ * retrieving content from the database. The friends access level is handled by
+ * get_access_sql_suffix().
+ *
+ * @see get_write_access_array() for the access levels that a user can write to.
+ *
+ * @param int $user_id User ID; defaults to currently logged in user
+ * @param int $site_id Site ID; defaults to current site
+ * @param bool $flush If set to true, will refresh the access ids from the
+ * database rather than using this function's cache.
+ *
+ * @return array An array of access collections ids
+ */
+function get_access_array($user_id = 0, $site_id = 0, $flush = false) {
+ global $CONFIG, $init_finished;
+
+ $cache = _elgg_get_access_cache();
+
+ if ($flush) {
+ $cache->clear();
+ }
+
+ if ($user_id == 0) {
+ $user_id = elgg_get_logged_in_user_guid();
+ }
+
+ if (($site_id == 0) && (isset($CONFIG->site_guid))) {
+ $site_id = $CONFIG->site_guid;
+ }
+
+ $user_id = (int) $user_id;
+ $site_id = (int) $site_id;
+
+ $hash = $user_id . $site_id . 'get_access_array';
+
+ if ($cache[$hash]) {
+ $access_array = $cache[$hash];
+ } else {
+ $access_array = array(ACCESS_PUBLIC);
+
+ // The following can only return sensible data if the user is logged in.
+ if (elgg_is_logged_in()) {
+ $access_array[] = ACCESS_LOGGED_IN;
+
+ // Get ACL memberships
+ $query = "SELECT am.access_collection_id"
+ . " FROM {$CONFIG->dbprefix}access_collection_membership am"
+ . " LEFT JOIN {$CONFIG->dbprefix}access_collections ag ON ag.id = am.access_collection_id"
+ . " WHERE am.user_guid = $user_id AND (ag.site_guid = $site_id OR ag.site_guid = 0)";
+
+ $collections = get_data($query);
+ if ($collections) {
+ foreach ($collections as $collection) {
+ if (!empty($collection->access_collection_id)) {
+ $access_array[] = (int)$collection->access_collection_id;
}
-
- $query = "SELECT ag.id FROM {$CONFIG->dbprefix}access_collections ag ";
- $query .= " WHERE ag.owner_guid = {$user_id} AND (ag.site_guid = {$site_id} OR ag.site_guid = 0)";
-
- if ($collections = get_data($query)) {
- foreach($collections as $collection)
- if (!empty($collection->id)) $tmp_access_array[] = $collection->id;
+ }
+ }
+
+ // Get ACLs owned.
+ $query = "SELECT ag.id FROM {$CONFIG->dbprefix}access_collections ag ";
+ $query .= "WHERE ag.owner_guid = $user_id AND (ag.site_guid = $site_id OR ag.site_guid = 0)";
+
+ $collections = get_data($query);
+ if ($collections) {
+ foreach ($collections as $collection) {
+ if (!empty($collection->id)) {
+ $access_array[] = (int)$collection->id;
}
-
-
- global $is_admin;
-
- if (isset($is_admin) && $is_admin == true) {
- $tmp_access_array[] = ACCESS_PRIVATE;
- }
-
- $access_array[$user_id] = $tmp_access_array;
- }
- else
- return $tmp_access_array; // No user id logged in so we can only access public info
-
-
- } else {
- $tmp_access_array = $access_array[$user_id];
- }
-
- return $access_array[$user_id];
-
- }
-
- /**
- * Override the default behaviour and allow results to show hidden entities as well.
- * THIS IS A HACK.
- *
- * TODO: Replace this with query object!
- */
- $ENTITY_SHOW_HIDDEN_OVERRIDE = false;
-
- /**
- * This will be replaced. Do not use in plugins!
- *
- * @param bool $show
- */
- function access_show_hidden_entities($show_hidden)
- {
- global $ENTITY_SHOW_HIDDEN_OVERRIDE;
- $ENTITY_SHOW_HIDDEN_OVERRIDE = $show_hidden;
+ }
+ }
+
+ $ignore_access = elgg_check_access_overrides($user_id);
+
+ if ($ignore_access == true) {
+ $access_array[] = ACCESS_PRIVATE;
+ }
}
+
+ if ($init_finished) {
+ $cache[$hash] = $access_array;
+ }
+ }
+
+ $options = array(
+ 'user_id' => $user_id,
+ 'site_id' => $site_id
+ );
+
+ return elgg_trigger_plugin_hook('access:collections:read', 'user', $options, $access_array);
+}
+
+/**
+ * Gets the default access permission.
+ *
+ * This returns the default access level for the site or optionally for the user.
+ *
+ * @param ElggUser $user Get the user's default access. Defaults to logged in user.
+ *
+ * @return int default access id (see ACCESS defines in elgglib.php)
+ * @link http://docs.elgg.org/Access
+ */
+function get_default_access(ElggUser $user = null) {
+ global $CONFIG;
+
+ if (!$CONFIG->allow_user_default_access) {
+ return $CONFIG->default_access;
+ }
+
+ if (!($user) && (!$user = elgg_get_logged_in_user_entity())) {
+ return $CONFIG->default_access;
+ }
+
+ if (false !== ($default_access = $user->getPrivateSetting('elgg_default_access'))) {
+ return $default_access;
+ } else {
+ return $CONFIG->default_access;
+ }
+}
+
+/**
+ * Allow disabled entities and metadata to be returned by getter functions
+ *
+ * @todo Replace this with query object!
+ * @global bool $ENTITY_SHOW_HIDDEN_OVERRIDE
+ * @access private
+ */
+$ENTITY_SHOW_HIDDEN_OVERRIDE = false;
+
+/**
+ * Show or hide disabled entities.
+ *
+ * @param bool $show_hidden Show disabled entities.
+ * @return void
+ * @access private
+ */
+function access_show_hidden_entities($show_hidden) {
+ global $ENTITY_SHOW_HIDDEN_OVERRIDE;
+ $ENTITY_SHOW_HIDDEN_OVERRIDE = $show_hidden;
+}
+
+/**
+ * Return current status of showing disabled entities.
+ *
+ * @return bool
+ * @access private
+ */
+function access_get_show_hidden_status() {
+ global $ENTITY_SHOW_HIDDEN_OVERRIDE;
+ return $ENTITY_SHOW_HIDDEN_OVERRIDE;
+}
+
+/**
+ * Returns the SQL where clause for a table with a access_id and enabled columns.
+ *
+ * This handles returning where clauses for ACCESS_FRIENDS and the currently
+ * unused block and filter lists in addition to using get_access_list() for
+ * access collections and the standard access levels.
+ *
+ * @param string $table_prefix Optional table. prefix for the access code.
+ * @param int $owner The guid to check access for. Defaults to logged in user.
+ *
+ * @return string The SQL for a where clause
+ * @access private
+ */
+function get_access_sql_suffix($table_prefix = '', $owner = null) {
+ global $ENTITY_SHOW_HIDDEN_OVERRIDE, $CONFIG;
+
+ $sql = "";
+ $friends_bit = "";
+ $enemies_bit = "";
+
+ if ($table_prefix) {
+ $table_prefix = sanitise_string($table_prefix) . ".";
+ }
+
+ if (!isset($owner)) {
+ $owner = elgg_get_logged_in_user_guid();
+ }
+
+ if (!$owner) {
+ $owner = -1;
+ }
+
+ $ignore_access = elgg_check_access_overrides($owner);
+ $access = get_access_list($owner);
+
+ if ($ignore_access) {
+ $sql = " (1 = 1) ";
+ } else if ($owner != -1) {
+ // we have an entity's guid and auto check for friend relationships
+ $friends_bit = "{$table_prefix}access_id = " . ACCESS_FRIENDS . "
+ AND {$table_prefix}owner_guid IN (
+ SELECT guid_one FROM {$CONFIG->dbprefix}entity_relationships
+ WHERE relationship='friend' AND guid_two=$owner
+ )";
+
+ $friends_bit = '(' . $friends_bit . ') OR ';
+
+ // @todo untested and unsupported at present
+ if ((isset($CONFIG->user_block_and_filter_enabled)) && ($CONFIG->user_block_and_filter_enabled)) {
+ // check to see if the user is in the entity owner's block list
+ // or if the entity owner is in the user's filter list
+ // if so, disallow access
+ $enemies_bit = get_access_restriction_sql('elgg_block_list', "{$table_prefix}owner_guid", $owner, false);
+ $enemies_bit = '('
+ . $enemies_bit
+ . ' AND ' . get_access_restriction_sql('elgg_filter_list', $owner, "{$table_prefix}owner_guid", false)
+ . ')';
+ }
+ }
+
+ if (empty($sql)) {
+ $sql = " $friends_bit ({$table_prefix}access_id IN {$access}
+ OR ({$table_prefix}owner_guid = {$owner})
+ OR (
+ {$table_prefix}access_id = " . ACCESS_PRIVATE . "
+ AND {$table_prefix}owner_guid = $owner
+ )
+ )";
+ }
+
+ if ($enemies_bit) {
+ $sql = "$enemies_bit AND ($sql)";
+ }
+
+ if (!$ENTITY_SHOW_HIDDEN_OVERRIDE) {
+ $sql .= " and {$table_prefix}enabled='yes'";
+ }
+
+ return '(' . $sql . ')';
+}
+
+/**
+ * Get the where clause for an access restriction based on annotations
+ *
+ * Returns an SQL fragment that is true (or optionally false) if the given user has
+ * added an annotation with the given name to the given entity.
+ *
+ * @warning this is a private function for an untested capability and will likely
+ * be removed from a future version of Elgg.
+ *
+ * @param string $annotation_name Name of the annotation
+ * @param string $entity_guid SQL GUID of entity the annotation is attached to.
+ * @param string $owner_guid SQL string that evaluates to the GUID of the annotation owner
+ * @param boolean $exists If true, returns BOOL if the annotation exists
+ *
+ * @return string An SQL fragment suitable for inserting into a WHERE clause
+ * @access private
+ */
+function get_access_restriction_sql($annotation_name, $entity_guid, $owner_guid, $exists) {
+ global $CONFIG;
+
+ if ($exists) {
+ $not = '';
+ } else {
+ $not = 'NOT';
+ }
+
+ $sql = <<<END
+$not EXISTS (SELECT * FROM {$CONFIG->dbprefix}annotations a
+INNER JOIN {$CONFIG->dbprefix}metastrings ms ON (a.name_id = ms.id)
+WHERE ms.string = '$annotation_name'
+AND a.entity_guid = $entity_guid
+AND a.owner_guid = $owner_guid)
+END;
+ return $sql;
+}
+
+/**
+ * Can a user access an entity.
+ *
+ * @warning If a logged in user doesn't have access to an entity, the
+ * core engine will not load that entity.
+ *
+ * @tip This is mostly useful for checking if a user other than the logged in
+ * user has access to an entity that is currently loaded.
+ *
+ * @todo This function would be much more useful if we could pass the guid of the
+ * entity to test access for. We need to be able to tell whether the entity exists
+ * and whether the user has access to the entity.
+ *
+ * @param ElggEntity $entity The entity to check access for.
+ * @param ElggUser $user Optionally user to check access for. Defaults to
+ * logged in user (which is a useless default).
+ *
+ * @return bool
+ * @link http://docs.elgg.org/Access
+ */
+function has_access_to_entity($entity, $user = null) {
+ global $CONFIG;
+
+ if (!isset($user)) {
+ $access_bit = get_access_sql_suffix("e");
+ } else {
+ $access_bit = get_access_sql_suffix("e", $user->getGUID());
+ }
+
+ $query = "SELECT guid from {$CONFIG->dbprefix}entities e WHERE e.guid = " . $entity->getGUID();
+ // Add access controls
+ $query .= " AND " . $access_bit;
+ if (get_data($query)) {
+ return true;
+ } else {
+ return false;
+ }
+}
+
+/**
+ * Returns an array of access permissions that the user is allowed to save content with.
+ * Permissions returned are of the form (id => 'name').
+ *
+ * Example return value in English:
+ * array(
+ * 0 => 'Private',
+ * -2 => 'Friends',
+ * 1 => 'Logged in users',
+ * 2 => 'Public',
+ * 34 => 'My favorite friends',
+ * );
+ *
+ * Plugin hook of 'access:collections:write', 'user'
+ *
+ * @warning this only returns access collections that the user owns plus the
+ * standard access levels. It does not return access collections that the user
+ * belongs to such as the access collection for a group.
+ *
+ * @param int $user_id The user's GUID.
+ * @param int $site_id The current site.
+ * @param bool $flush If this is set to true, this will ignore a cached access array
+ *
+ * @return array List of access permissions
+ * @link http://docs.elgg.org/Access
+ */
+function get_write_access_array($user_id = 0, $site_id = 0, $flush = false) {
+ global $CONFIG, $init_finished;
+ $cache = _elgg_get_access_cache();
+
+ if ($flush) {
+ $cache->clear();
+ }
+
+ if ($user_id == 0) {
+ $user_id = elgg_get_logged_in_user_guid();
+ }
+
+ if (($site_id == 0) && (isset($CONFIG->site_id))) {
+ $site_id = $CONFIG->site_id;
+ }
+
+ $user_id = (int) $user_id;
+ $site_id = (int) $site_id;
+
+ $hash = $user_id . $site_id . 'get_write_access_array';
+
+ if ($cache[$hash]) {
+ $access_array = $cache[$hash];
+ } else {
+ // @todo is there such a thing as public write access?
+ $access_array = array(
+ ACCESS_PRIVATE => elgg_echo("PRIVATE"),
+ ACCESS_FRIENDS => elgg_echo("access:friends:label"),
+ ACCESS_LOGGED_IN => elgg_echo("LOGGED_IN"),
+ ACCESS_PUBLIC => elgg_echo("PUBLIC")
+ );
- /**
- * This will be replaced. Do not use in plugins!
- */
- function access_get_show_hidden_status()
- {
- global $ENTITY_SHOW_HIDDEN_OVERRIDE;
- return $ENTITY_SHOW_HIDDEN_OVERRIDE;
+ $query = "SELECT ag.* FROM {$CONFIG->dbprefix}access_collections ag ";
+ $query .= " WHERE (ag.site_guid = $site_id OR ag.site_guid = 0)";
+ $query .= " AND (ag.owner_guid = $user_id)";
+
+ $collections = get_data($query);
+ if ($collections) {
+ foreach ($collections as $collection) {
+ $access_array[$collection->id] = $collection->name;
+ }
+ }
+
+ if ($init_finished) {
+ $cache[$hash] = $access_array;
+ }
+ }
+
+ $options = array(
+ 'user_id' => $user_id,
+ 'site_id' => $site_id
+ );
+ return elgg_trigger_plugin_hook('access:collections:write', 'user',
+ $options, $access_array);
+}
+
+/**
+ * Can the user change this access collection?
+ *
+ * Use the plugin hook of 'access:collections:write', 'user' to change this.
+ * @see get_write_access_array() for details on the hook.
+ *
+ * Respects access control disabling for admin users and {@see elgg_set_ignore_access()}
+ *
+ * @see get_write_access_array()
+ *
+ * @param int $collection_id The collection id
+ * @param mixed $user_guid The user GUID to check for. Defaults to logged in user.
+ * @return bool
+ */
+function can_edit_access_collection($collection_id, $user_guid = null) {
+ if ($user_guid) {
+ $user = get_entity((int) $user_guid);
+ } else {
+ $user = elgg_get_logged_in_user_entity();
+ }
+
+ $collection = get_access_collection($collection_id);
+
+ if (!($user instanceof ElggUser) || !$collection) {
+ return false;
+ }
+
+ $write_access = get_write_access_array($user->getGUID(), 0, true);
+
+ // don't ignore access when checking users.
+ if ($user_guid) {
+ return array_key_exists($collection_id, $write_access);
+ } else {
+ return elgg_get_ignore_access() || array_key_exists($collection_id, $write_access);
+ }
+}
+
+/**
+ * Creates a new access collection.
+ *
+ * Access colletions allow plugins and users to create granular access
+ * for entities.
+ *
+ * Triggers plugin hook 'access:collections:addcollection', 'collection'
+ *
+ * @internal Access collections are stored in the access_collections table.
+ * Memberships to collections are in access_collections_membership.
+ *
+ * @param string $name The name of the collection.
+ * @param int $owner_guid The GUID of the owner (default: currently logged in user).
+ * @param int $site_guid The GUID of the site (default: current site).
+ *
+ * @return int|false The collection ID if successful and false on failure.
+ * @link http://docs.elgg.org/Access/Collections
+ * @see update_access_collection()
+ * @see delete_access_collection()
+ */
+function create_access_collection($name, $owner_guid = 0, $site_guid = 0) {
+ global $CONFIG;
+
+ $name = trim($name);
+ if (empty($name)) {
+ return false;
+ }
+
+ if ($owner_guid == 0) {
+ $owner_guid = elgg_get_logged_in_user_guid();
+ }
+ if (($site_guid == 0) && (isset($CONFIG->site_guid))) {
+ $site_guid = $CONFIG->site_guid;
+ }
+ $name = sanitise_string($name);
+
+ $q = "INSERT INTO {$CONFIG->dbprefix}access_collections
+ SET name = '{$name}',
+ owner_guid = {$owner_guid},
+ site_guid = {$site_guid}";
+ $id = insert_data($q);
+ if (!$id) {
+ return false;
+ }
+
+ $params = array(
+ 'collection_id' => $id
+ );
+
+ if (!elgg_trigger_plugin_hook('access:collections:addcollection', 'collection', $params, true)) {
+ return false;
+ }
+
+ return $id;
+}
+
+/**
+ * Updates the membership in an access collection.
+ *
+ * @warning Expects a full list of all members that should
+ * be part of the access collection
+ *
+ * @note This will run all hooks associated with adding or removing
+ * members to access collections.
+ *
+ * @param int $collection_id The ID of the collection.
+ * @param array $members Array of member GUIDs
+ *
+ * @return bool
+ * @link http://docs.elgg.org/Access/Collections
+ * @see add_user_to_access_collection()
+ * @see remove_user_from_access_collection()
+ */
+function update_access_collection($collection_id, $members) {
+ $acl = get_access_collection($collection_id);
+
+ if (!$acl) {
+ return false;
+ }
+ $members = (is_array($members)) ? $members : array();
+
+ $cur_members = get_members_of_access_collection($collection_id, true);
+ $cur_members = (is_array($cur_members)) ? $cur_members : array();
+
+ $remove_members = array_diff($cur_members, $members);
+ $add_members = array_diff($members, $cur_members);
+
+ $result = true;
+
+ foreach ($add_members as $guid) {
+ $result = $result && add_user_to_access_collection($guid, $collection_id);
+ }
+
+ foreach ($remove_members as $guid) {
+ $result = $result && remove_user_from_access_collection($guid, $collection_id);
+ }
+
+ return $result;
+}
+
+/**
+ * Deletes a specified access collection and its membership.
+ *
+ * @param int $collection_id The collection ID
+ *
+ * @return bool
+ * @link http://docs.elgg.org/Access/Collections
+ * @see create_access_collection()
+ * @see update_access_collection()
+ */
+function delete_access_collection($collection_id) {
+ global $CONFIG;
+
+ $collection_id = (int) $collection_id;
+ $params = array('collection_id' => $collection_id);
+
+ if (!elgg_trigger_plugin_hook('access:collections:deletecollection', 'collection', $params, true)) {
+ return false;
+ }
+
+ // Deleting membership doesn't affect result of deleting ACL.
+ $q = "DELETE FROM {$CONFIG->dbprefix}access_collection_membership
+ WHERE access_collection_id = {$collection_id}";
+ delete_data($q);
+
+ $q = "DELETE FROM {$CONFIG->dbprefix}access_collections
+ WHERE id = {$collection_id}";
+ $result = delete_data($q);
+
+ return (bool)$result;
+}
+
+/**
+ * Get a specified access collection
+ *
+ * @note This doesn't return the members of an access collection,
+ * just the database row of the actual collection.
+ *
+ * @see get_members_of_access_collection()
+ *
+ * @param int $collection_id The collection ID
+ *
+ * @return object|false
+ */
+function get_access_collection($collection_id) {
+ global $CONFIG;
+ $collection_id = (int) $collection_id;
+
+ $query = "SELECT * FROM {$CONFIG->dbprefix}access_collections WHERE id = {$collection_id}";
+ $get_collection = get_data_row($query);
+
+ return $get_collection;
+}
+
+/**
+ * Adds a user to an access collection.
+ *
+ * Triggers the 'access:collections:add_user', 'collection' plugin hook.
+ *
+ * @param int $user_guid The GUID of the user to add
+ * @param int $collection_id The ID of the collection to add them to
+ *
+ * @return bool
+ * @see update_access_collection()
+ * @see remove_user_from_access_collection()
+ * @link http://docs.elgg.org/Access/Collections
+ */
+function add_user_to_access_collection($user_guid, $collection_id) {
+ global $CONFIG;
+
+ $collection_id = (int) $collection_id;
+ $user_guid = (int) $user_guid;
+ $user = get_user($user_guid);
+
+ $collection = get_access_collection($collection_id);
+
+ if (!($user instanceof Elgguser) || !$collection) {
+ return false;
+ }
+
+ $params = array(
+ 'collection_id' => $collection_id,
+ 'user_guid' => $user_guid
+ );
+
+ $result = elgg_trigger_plugin_hook('access:collections:add_user', 'collection', $params, true);
+ if ($result == false) {
+ return false;
+ }
+
+ // if someone tries to insert the same data twice, we do a no-op on duplicate key
+ $q = "INSERT INTO {$CONFIG->dbprefix}access_collection_membership
+ SET access_collection_id = $collection_id, user_guid = $user_guid
+ ON DUPLICATE KEY UPDATE user_guid = user_guid";
+ $result = insert_data($q);
+
+ return $result !== false;
+}
+
+/**
+ * Removes a user from an access collection.
+ *
+ * Triggers the 'access:collections:remove_user', 'collection' plugin hook.
+ *
+ * @param int $user_guid The user GUID
+ * @param int $collection_id The access collection ID
+ *
+ * @return bool
+ * @see update_access_collection()
+ * @see remove_user_from_access_collection()
+ * @link http://docs.elgg.org/Access/Collections
+ */
+function remove_user_from_access_collection($user_guid, $collection_id) {
+ global $CONFIG;
+
+ $collection_id = (int) $collection_id;
+ $user_guid = (int) $user_guid;
+ $user = get_user($user_guid);
+
+ $collection = get_access_collection($collection_id);
+
+ if (!($user instanceof Elgguser) || !$collection) {
+ return false;
+ }
+
+ $params = array(
+ 'collection_id' => $collection_id,
+ 'user_guid' => $user_guid
+ );
+
+ if (!elgg_trigger_plugin_hook('access:collections:remove_user', 'collection', $params, true)) {
+ return false;
+ }
+
+ $q = "DELETE FROM {$CONFIG->dbprefix}access_collection_membership
+ WHERE access_collection_id = {$collection_id}
+ AND user_guid = {$user_guid}";
+
+ return (bool)delete_data($q);
+}
+
+/**
+ * Returns an array of database row objects of the access collections owned by $owner_guid.
+ *
+ * @param int $owner_guid The entity guid
+ * @param int $site_guid The GUID of the site (default: current site).
+ *
+ * @return array|false
+ * @see add_access_collection()
+ * @see get_members_of_access_collection()
+ * @link http://docs.elgg.org/Access/Collections
+ */
+function get_user_access_collections($owner_guid, $site_guid = 0) {
+ global $CONFIG;
+ $owner_guid = (int) $owner_guid;
+ $site_guid = (int) $site_guid;
+
+ if (($site_guid == 0) && (isset($CONFIG->site_guid))) {
+ $site_guid = $CONFIG->site_guid;
+ }
+
+ $query = "SELECT * FROM {$CONFIG->dbprefix}access_collections
+ WHERE owner_guid = {$owner_guid}
+ AND site_guid = {$site_guid}";
+
+ $collections = get_data($query);
+
+ return $collections;
+}
+
+/**
+ * Get all of members of an access collection
+ *
+ * @param int $collection The collection's ID
+ * @param bool $idonly If set to true, will only return the members' GUIDs (default: false)
+ *
+ * @return array ElggUser guids or entities if successful, false if not
+ * @see add_user_to_access_collection()
+ * @see http://docs.elgg.org/Access/Collections
+ */
+function get_members_of_access_collection($collection, $idonly = FALSE) {
+ global $CONFIG;
+ $collection = (int)$collection;
+
+ if (!$idonly) {
+ $query = "SELECT e.* FROM {$CONFIG->dbprefix}access_collection_membership m"
+ . " JOIN {$CONFIG->dbprefix}entities e ON e.guid = m.user_guid"
+ . " WHERE m.access_collection_id = {$collection}";
+ $collection_members = get_data($query, "entity_row_to_elggstar");
+ } else {
+ $query = "SELECT e.guid FROM {$CONFIG->dbprefix}access_collection_membership m"
+ . " JOIN {$CONFIG->dbprefix}entities e ON e.guid = m.user_guid"
+ . " WHERE m.access_collection_id = {$collection}";
+ $collection_members = get_data($query);
+ if (!$collection_members) {
+ return FALSE;
+ }
+ foreach ($collection_members as $key => $val) {
+ $collection_members[$key] = $val->guid;
}
-
- /**
- * Add access restriction sql code to a given query.
- *
- * Note that if this code is executed in privileged mode it will return blank.
- *
- * TODO: DELETE once Query classes are fully integrated
- *
- * @param string $table_prefix Optional xxx. prefix for the access code.
- */
- function get_access_sql_suffix($table_prefix = "")
- {
- global $ENTITY_SHOW_HIDDEN_OVERRIDE;
-
- $sql = "";
-
- if ($table_prefix)
- $table_prefix = sanitise_string($table_prefix) . ".";
-
- $access = get_access_list();
-
- $owner = get_loggedin_userid();
- if (!$owner) $owner = -1;
-
- global $is_admin;
-
- if (isset($is_admin) && $is_admin == true) {
- $sql = " (1 = 1) ";
- }
-
- if (empty($sql))
- $sql = " ({$table_prefix}access_id in {$access} or ({$table_prefix}access_id = " . ACCESS_PRIVATE . " and {$table_prefix}owner_guid = $owner))";
-
- if (!$ENTITY_SHOW_HIDDEN_OVERRIDE)
- $sql .= " and {$table_prefix}enabled='yes'";
-
- return $sql;
- }
-
- /**
- * Returns an array of access permissions that the specified user is allowed to save objects with.
- * Permissions are of the form ('id' => 'Description')
- *
- * @param int $user_id The user's GUID.
- * @param int $site_id The current site.
- * @param true|false $flush If this is set to true, this will shun any cached version
- * @return array List of access permissions=
- */
- function get_write_access_array($user_id = 0, $site_id = 0, $flush = false) {
-
- global $CONFIG;
- static $access_array;
-
- if ($user_id == 0) $user_id = get_loggedin_userid();
- if (($site_id == 0) && (isset($CONFIG->site_id))) $site_id = $CONFIG->site_id;
- $user_id = (int) $user_id;
- $site_id = (int) $site_id;
-
- if (empty($access_array[$user_id]) || $flush == true) {
-
- $query = "SELECT ag.* FROM {$CONFIG->dbprefix}access_collections ag ";
- $query .= " WHERE (ag.site_guid = {$site_id} OR ag.site_guid = 0)";
- $query .= " AND (ag.owner_guid = {$user_id})";
- $query .= " AND ag.id >= 3";
-
- $tmp_access_array = array(0 => elgg_echo("PRIVATE"), 1 => elgg_echo("LOGGED_IN"), 2 => elgg_echo("PUBLIC"));
- if ($collections = get_data($query)) {
- foreach($collections as $collection)
- $tmp_access_array[$collection->id] = $collection->name;
- }
-
- $access_array[$user_id] = $tmp_access_array;
-
- } else {
- $tmp_access_array = $access_array[$user_id];
- }
-
- $tmp_access_array = trigger_plugin_hook('access:collections:write','user',array('user_id' => $user_id, 'site_id' => $site_id),$tmp_access_array);
-
- return $tmp_access_array;
-
- }
-
- /**
- * Creates a new access control collection owned by the specified user.
- *
- * @param string $name The name of the collection.
- * @param int $owner_guid The GUID of the owner (default: currently logged in user).
- * @param int $site_guid The GUID of the site (default: current site).
- * @return int|false Depending on success (the collection ID if successful).
- */
- function create_access_collection($name, $owner_guid = 0, $site_guid = 0) {
-
- global $CONFIG;
-
- $name = trim($name);
- if (empty($name)) return false;
-
- if ($user_id == 0) $user_id = get_loggedin_userid();
- if (($site_id == 0) && (isset($CONFIG->site_guid))) $site_id = $CONFIG->site_guid;
- $name = sanitise_string($name);
-
- return insert_data("insert into {$CONFIG->dbprefix}access_collections set name = '{$name}', owner_guid = {$owner_guid}, site_guid = {$site_id}");
-
- }
-
- /**
- * Updates the membership in an access collection.
- *
- * @param int $collection_id The ID of the collection.
- * @param array $members Array of member GUIDs
- * @return true|false Depending on success
- */
- function update_access_collection($collection_id, $members) {
-
- global $CONFIG;
- $collection_id = (int) $collection_id;
-
- $collections = get_write_access_array();
-
- if (array_key_exists($collection_id, $collections)) {
-
- delete_data("delete from {$CONFIG->dbprefix}access_collection_membership where access_collection_id = {$collection_id}");
-
- if (is_array($members) && sizeof($members) > 0) {
- foreach($members as $member) {
- $member = (int) $member;
- if (get_user($member))
- insert_data("insert into {$CONFIG->dbprefix}access_collection_membership set access_collection_id = {$collection_id}, user_guid = {$member}");
- }
- return true;
- }
-
- }
-
- return false;
- }
-
- /**
- * Deletes a specified access collection
- *
- * @param int $collection_id The collection ID
- * @return true|false Depending on success
- */
- function delete_access_collection($collection_id) {
-
- $collection_id = (int) $collection_id;
- $collections = get_write_access_array();
- if (array_key_exists($collection_id, $collections)) {
- global $CONFIG;
- delete_data("delete from {$CONFIG->dbprefix}access_collection_membership where access_collection_id = {$collection_id}");
- delete_data("delete from {$CONFIG->dbprefix}access_collections where id = {$collection_id}");
- return true;
- } else {
- return false;
- }
-
- }
-
- /**
- * Get a specified access collection
- *
- * @param int $collection_id The collection ID
- * @return array|false Depending on success
- */
- function get_access_collection($collection_id) {
-
- $collection_id = (int) $collection_id;
- global $CONFIG;
- $get_collection = get_data_row("SELECT * FROM {$CONFIG->dbprefix}access_collections WHERE id = {$collection_id}");
-
- return $get_collection;
-
- }
-
- /**
- * Adds a user to the specified user collection
- *
- * @param int $user_guid The GUID of the user to add
- * @param int $collection_id The ID of the collection to add them to
- * @return true|false Depending on success
- */
- function add_user_to_access_collection($user_guid, $collection_id) {
-
- $collection_id = (int) $collection_id;
- $user_guid = (int) $user_guid;
- $collections = get_write_access_array();
-
- if (!($collection = get_access_collection($collection_id)))
- return false;
-
- if ((array_key_exists($collection_id, $collections) || $collection->owner_guid == 0)
- && $user = get_user($user_guid)) {
-
- global $CONFIG;
- try {
- insert_data("insert into {$CONFIG->dbprefix}access_collection_membership set access_collection_id = {$collection_id}, user_guid = {$user_guid}");
- } catch (DatabaseException $e) {}
- return true;
-
- }
-
- return false;
-
- }
-
- /**
- * Removes a user from an access collection
- *
- * @param int $user_guid The user GUID
- * @param int $collection_id The access collection ID
- * @return true|false Depending on success
- */
- function remove_user_from_access_collection($user_guid, $collection_id) {
-
- $collection_id = (int) $collection_id;
- $user_guid = (int) $user_guid;
- $collections = get_write_access_array();
-
- if (!($collection = get_access_collection($collection_id)))
- return false;
-
- if ((array_key_exists($collection_id, $collections) || $collection->owner_guid == 0) && $user = get_user($user_guid)) {
-
- global $CONFIG;
- delete_data("delete from {$CONFIG->dbprefix}access_collection_membership where access_collection_id = {$collection_id} and user_guid = {$user_guid}");
- return true;
-
- }
-
- return false;
-
- }
-
- /**
- * Get all of a users collections
- *
- * @param int $owner_guid The user ID
- * @return true|false Depending on success
- */
- function get_user_access_collections($owner_guid) {
-
- $owner_guid = (int) $owner_guid;
-
- global $CONFIG;
-
- $collections = get_data("SELECT * FROM {$CONFIG->dbprefix}access_collections WHERE owner_guid = {$owner_guid}");
-
- return $collections;
-
- }
-
- /**
- * Get all of members of a friend collection
- *
- * @param int $collection The collection's ID
- * @param true|false $idonly If set to true, will only return the members' IDs (default: false)
- * @return ElggUser entities if successful, false if not
- */
- function get_members_of_access_collection($collection, $idonly = false) {
-
- $collection = (int)$collection;
-
- global $CONFIG;
-
- if (!$idonly) {
- $query = "SELECT e.* FROM {$CONFIG->dbprefix}access_collection_membership m JOIN {$CONFIG->dbprefix}entities e ON e.guid = m.user_guid WHERE m.access_collection_id = {$collection}";
- $collection_members = get_data($query, "entity_row_to_elggstar");
- } else {
- $query = "SELECT e.guid FROM {$CONFIG->dbprefix}access_collection_membership m JOIN {$CONFIG->dbprefix}entities e ON e.guid = m.user_guid WHERE m.access_collection_id = {$collection}";
- $collection_members = get_data($query);
- foreach($collection_members as $key => $val)
- $collection_members[$key] = $val->guid;
- }
-
- return $collection_members;
-
- }
-
- /**
- * Displays a user's access collections, using the friends/collections view
- *
- * @param int $owner_guid The GUID of the owning user
- * @return string A formatted rendition of the collections
- */
- function elgg_view_access_collections($owner_guid) {
-
- if ($collections = get_user_access_collections($owner_guid)) {
-
- foreach($collections as $key => $collection) {
- $collections[$key]->members = get_members_of_access_collection($collection->id, true);
- $collections[$key]->entities = get_user_friends($owner_guid,"",9999);
- }
-
- }
-
- return elgg_view('friends/collections',array('collections' => $collections));
-
- }
-
- global $init_finished;
- $init_finished = false;
-
- /**
- * A quick and dirty way to make sure the access permissions have been correctly set up
- *
- */
- function access_init() {
- global $init_finished;
- $init_finished = true;
- }
-
- // This function will let us know when 'init' has finished
- register_elgg_event_handler('init','system','access_init',9999);
-
-?> \ No newline at end of file
+ }
+
+ return $collection_members;
+}
+
+/**
+ * Return entities based upon access id.
+ *
+ * @param array $options Any options accepted by {@link elgg_get_entities()} and
+ * access_id => int The access ID of the entity.
+ *
+ * @see elgg_get_entities()
+ * @return mixed If count, int. If not count, array. false on errors.
+ * @since 1.7.0
+ */
+function elgg_get_entities_from_access_id(array $options = array()) {
+ // restrict the resultset to access collection provided
+ if (!isset($options['access_id'])) {
+ return FALSE;
+ }
+
+ // @todo add support for an array of collection_ids
+ $where = "e.access_id = '{$options['access_id']}'";
+ if (isset($options['wheres'])) {
+ if (is_array($options['wheres'])) {
+ $options['wheres'][] = $where;
+ } else {
+ $options['wheres'] = array($options['wheres'], $where);
+ }
+ } else {
+ $options['wheres'] = array($where);
+ }
+
+ // return entities with the desired options
+ return elgg_get_entities($options);
+}
+
+/**
+ * Lists entities from an access collection
+ *
+ * @param array $options See elgg_list_entities() and elgg_get_entities_from_access_id()
+ *
+ * @see elgg_list_entities()
+ * @see elgg_get_entities_from_access_id()
+ *
+ * @return string
+ */
+function elgg_list_entities_from_access_id(array $options = array()) {
+ return elgg_list_entities($options, 'elgg_get_entities_from_access_id');
+}
+
+/**
+ * Return the name of an ACCESS_* constant or a access collection,
+ * but only if the user has write access on that ACL.
+ *
+ * @warning This function probably doesn't work how it's meant to.
+ *
+ * @param int $entity_access_id The entity's access id
+ *
+ * @return string 'Public', 'Private', etc.
+ * @since 1.7.0
+ * @todo I think this probably wants get_access_array() instead of get_write_access_array(),
+ * but those two functions return different types of arrays.
+ */
+function get_readable_access_level($entity_access_id) {
+ $access = (int) $entity_access_id;
+
+ //get the access level for object in readable string
+ $options = get_write_access_array();
+
+ if (array_key_exists($access, $options)) {
+ return $options[$access];
+ }
+
+ // return 'Limited' if the user does not have access to the access collection
+ return elgg_echo('access:limited:label');
+}
+
+/**
+ * Set if entity access system should be ignored.
+ *
+ * The access system will not return entities in any getter
+ * functions if the user doesn't have access.
+ *
+ * @internal For performance reasons this is done at the database access clause level.
+ *
+ * @tip Use this to access entities in automated scripts
+ * when no user is logged in.
+ *
+ * @note This clears the access cache.
+ *
+ * @warning This will not show disabled entities.
+ * Use {@link access_show_hidden_entities()} to access disabled entities.
+ *
+ * @param bool $ignore If true, disables all access checks.
+ *
+ * @return bool Previous ignore_access setting.
+ * @since 1.7.0
+ * @see http://docs.elgg.org/Access/IgnoreAccess
+ * @see elgg_get_ignore_access()
+ */
+function elgg_set_ignore_access($ignore = true) {
+ $cache = _elgg_get_access_cache();
+ $cache->clear();
+ $elgg_access = elgg_get_access_object();
+ return $elgg_access->setIgnoreAccess($ignore);
+}
+
+/**
+ * Get current ignore access setting.
+ *
+ * @return bool
+ * @since 1.7.0
+ * @see http://docs.elgg.org/Access/IgnoreAccess
+ * @see elgg_set_ignore_access()
+ */
+function elgg_get_ignore_access() {
+ return elgg_get_access_object()->getIgnoreAccess();
+}
+
+/**
+ * Decides if the access system should be ignored for a user.
+ *
+ * Returns true (meaning ignore access) if either of these 2 conditions are true:
+ * 1) an admin user guid is passed to this function.
+ * 2) {@link elgg_get_ignore_access()} returns true.
+ *
+ * @see elgg_set_ignore_access()
+ *
+ * @param int $user_guid The user to check against.
+ *
+ * @return bool
+ * @since 1.7.0
+ */
+function elgg_check_access_overrides($user_guid = 0) {
+ if (!$user_guid || $user_guid <= 0) {
+ $is_admin = false;
+ } else {
+ $is_admin = elgg_is_admin_user($user_guid);
+ }
+
+ return ($is_admin || elgg_get_ignore_access());
+}
+
+/**
+ * Returns the ElggAccess object.
+ *
+ * // @todo comment is incomplete
+ * This is used to
+ *
+ * @return ElggAccess
+ * @since 1.7.0
+ * @access private
+ */
+function elgg_get_access_object() {
+ static $elgg_access;
+
+ if (!$elgg_access) {
+ $elgg_access = new ElggAccess();
+ }
+
+ return $elgg_access;
+}
+
+/**
+ * A flag to set if Elgg's access initialization is finished.
+ *
+ * @global bool $init_finished
+ * @access private
+ * @todo This is required to tell the access system to start caching because
+ * calls are made while in ignore access mode and before the user is logged in.
+ */
+$init_finished = false;
+
+/**
+ * A quick and dirty way to make sure the access permissions have been correctly set up
+ *
+ * @elgg_event_handler init system
+ * @todo Invesigate
+ *
+ * @return void
+ */
+function access_init() {
+ global $init_finished;
+ $init_finished = true;
+}
+
+/**
+ * Overrides the access system if appropriate.
+ *
+ * Allows admin users and calls after {@link elgg_set_ignore_access} to
+ * bypass the access system.
+ *
+ * Registered for the 'permissions_check', 'all' and the
+ * 'container_permissions_check', 'all' plugin hooks.
+ *
+ * Returns true to override the access system or null if no change is needed.
+ *
+ * @param string $hook
+ * @param string $type
+ * @param bool $value
+ * @param array $params
+ * @return true|null
+ * @access private
+ */
+function elgg_override_permissions($hook, $type, $value, $params) {
+ $user = elgg_extract('user', $params);
+ if ($user) {
+ $user_guid = $user->getGUID();
+ } else {
+ $user_guid = elgg_get_logged_in_user_guid();
+ }
+
+ // don't do this so ignore access still works with no one logged in
+ //if (!$user instanceof ElggUser) {
+ // return false;
+ //}
+
+ // check for admin
+ if ($user_guid && elgg_is_admin_user($user_guid)) {
+ return true;
+ }
+
+ // check access overrides
+ if ((elgg_check_access_overrides($user_guid))) {
+ return true;
+ }
+
+ // consult other hooks
+ return NULL;
+}
+
+/**
+ * Runs unit tests for the entities object.
+ *
+ * @param string $hook
+ * @param string $type
+ * @param array $value
+ * @param array $params
+ * @return array
+ *
+ * @access private
+ */
+function access_test($hook, $type, $value, $params) {
+ global $CONFIG;
+
+ $value[] = $CONFIG->path . 'engine/tests/api/access_collections.php';
+ return $value;
+}
+
+// Tell the access functions the system has booted, plugins are loaded,
+// and the user is logged in so it can start caching
+elgg_register_event_handler('ready', 'system', 'access_init');
+
+// For overrided permissions
+elgg_register_plugin_hook_handler('permissions_check', 'all', 'elgg_override_permissions');
+elgg_register_plugin_hook_handler('container_permissions_check', 'all', 'elgg_override_permissions');
+
+elgg_register_plugin_hook_handler('unit_test', 'system', 'access_test'); \ No newline at end of file
diff --git a/engine/lib/actions.php b/engine/lib/actions.php
index 8935a324a..8047914ac 100644
--- a/engine/lib/actions.php
+++ b/engine/lib/actions.php
@@ -1,227 +1,549 @@
-<?php
-
- /**
- * Elgg actions
- * Allows system modules to specify actions
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
-
- // Action setting and run *************************************************
-
- /**
- * Loads an action script, if it exists, then forwards elsewhere
- *
- * @param string $action The requested action
- * @param string $forwarder Optionally, the location to forward to
- */
-
- function action($action, $forwarder = "") {
-
- global $CONFIG;
-
- $query = parse_url($_SERVER['REQUEST_URI']);
- if (isset($query['query'])) {
- $query = $query['query'];
- $query = rawurldecode($query);
- $query = explode('&',$query);
- if (sizeof($query) > 0) {
- foreach($query as $queryelement) {
- $vals = explode('=',$queryelement);
- if (sizeof($vals) > 1) {
- set_input(trim($vals[0]),trim($vals[1]));
- }
- }
- }
- }
-
- $forwarder = str_replace($CONFIG->url, "", $forwarder);
- $forwarder = str_replace("http://", "", $forwarder);
- $forwarder = str_replace("@", "", $forwarder);
-
- if (substr($forwarder,0,1) == "/") {
- $forwarder = substr($forwarder,1);
- }
-
- if (isset($CONFIG->actions[$action])) {
- if (
- (isadminloggedin()) ||
- (!$CONFIG->actions[$action]['admin'])
- ) {
- if ($CONFIG->actions[$action]['public'] || $_SESSION['id'] != -1) {
-
- // Trigger action event TODO: This is only called before the primary action is called. We need to rethink actions for 1.5
- $event_result = true;
- $event_result = trigger_plugin_hook('action', $action, null, $event_result);
-
- // Include action
- if ($event_result) // Event_result being false doesn't produce an error - since i assume this will be handled in the hook itself. TODO make this better!
- {
- if (@include($CONFIG->actions[$action]['file'])) {
- } else {
- register_error(sprintf(elgg_echo('actionundefined'),$action));
- }
- }
- } else {
- register_error(elgg_echo('actionloggedout'));
- }
- }
- } else {
- register_error(sprintf(elgg_echo('actionundefined'),$action));
- }
- forward($CONFIG->url . $forwarder);
-
- }
-
- /**
- * Registers a particular action in memory
- *
- * @param string $action The name of the action (eg "register", "account/settings/save")
- * @param boolean $public Can this action be accessed by people not logged into the system?
- * @param string $filename Optionally, the filename where this action is located
- * @param boolean $admin_only Whether this action is only available to admin users.
- */
-
- function register_action($action, $public = false, $filename = "", $admin_only = false) {
- global $CONFIG;
-
- if (!isset($CONFIG->actions)) {
- $CONFIG->actions = array();
- }
-
- if (empty($filename)) {
- $path = "";
- if (isset($CONFIG->path)) $path = $CONFIG->path;
-
- $filename = $path . "actions/" . $action . ".php";
- }
-
- $CONFIG->actions[$action] = array('file' => $filename, 'public' => $public, 'admin' => $admin_only);
- return true;
- }
-
- /**
- * Actions to perform on initialisation
- *
- * @param string $event Events API required parameters
- * @param string $object_type Events API required parameters
- * @param string $object Events API required parameters
- */
-
- function actions_init($event, $object_type, $object) {
- register_action("error");
- return true;
- }
-
- /**
- * Action gatekeeper.
- * This function verifies form input for security features (like a generated token), and forwards
- * the page if they are invalid.
- *
- * Place at the head of actions.
- */
- function action_gatekeeper()
- {
- $token = get_input('__elgg_token');
- $ts = get_input('__elgg_ts');
- $session_id = session_id();
-
- if (($token) && ($ts) && ($session_id))
- {
- // generate token, check with input and forward if invalid
- $generated_token = generate_action_token($ts);
-
- // Validate token
- if (strcmp($token, $generated_token)==0)
- {
- $hour = 60*60;
- $now = time();
-
- // Validate time to ensure its not crazy
- if (($ts>$now-$hour) && ($ts<$now+$hour))
- {
- $returnval = true; // We have already got this far, so unless anything else says something to the contry we assume we're ok
-
- $returnval = trigger_plugin_hook('action_gatekeeper:permissions:check', 'all', array(
- 'token' => $token,
- 'time' => $ts
- ), $returnval);
-
- if ($returnval)
- return true;
- else
- register_error(elgg_echo('actiongatekeeper:pluginprevents'));
- }
- else
- register_error(elgg_echo('actiongatekeeper:timeerror'));
- }
- else
- register_error(elgg_echo('actiongatekeeper:tokeninvalid'));
- }
- else
- register_error(elgg_echo('actiongatekeeper:missingfields'));
-
- forward();
- exit;
- }
-
- /**
- * Generate a token for the current user suitable for being placed in a hidden field in action forms.
- *
- * @param int $timestamp Unix timestamp
- */
- function generate_action_token($timestamp)
- {
- // Get input values
- $site_secret = get_site_secret();
-
- // Current session id
- $session_id = session_id();
-
- // Get user agent
- $ua = $_SERVER['HTTP_USER_AGENT'];
-
- // Session token
- $st = $_SESSION['__elgg_session'];
-
- if (($site_secret) && ($session_id))
- return md5($site_secret.$timestamp.$session_id.$ua.$st);
-
- return false;
- }
-
- /**
- * Initialise the site secret.
- *
- */
- function init_site_secret()
- {
- $secret = md5(rand().microtime());
- if (datalist_set('__site_secret__', $secret))
- return $secret;
-
- return false;
- }
-
- /**
- * Retrieve the site secret.
- *
- */
- function get_site_secret()
- {
- $secret = datalist_get('__site_secret__');
- if (!$secret) $secret = init_site_secret();
-
- return $secret;
- }
-
- // Register some actions ***************************************************
-
- register_elgg_event_handler("init","system","actions_init");
-
-?> \ No newline at end of file
+<?php
+/**
+ * Elgg Actions
+ *
+ * Actions are one of the primary controllers (The C in MVC) in Elgg. They are
+ * registered by {@link register_elgg_action()} and are called by URL
+ * http://elggsite.org/action/action_name. For URLs, a rewrite rule in
+ * .htaccess passes the action name to engine/handlers/action_handler.php,
+ * which dispatches the request for the action.
+ *
+ * An action name must be registered to a file in the system. Core actions are
+ * found in /actions/ and plugin actions are usually under /mod/<plugin>/actions/.
+ * It is recommended that actions be namespaced to avoid collisions.
+ *
+ * All actions require security tokens. Using the {@elgg_view input/form} view
+ * will automatically add tokens as hidden inputs as will the elgg_view_form()
+ * function. To manually add hidden inputs, use the {@elgg_view input/securitytoken} view.
+ *
+ * To include security tokens for actions called via GET, use
+ * {@link elgg_add_security_tokens_to_url()} or specify is_action as true when
+ * using {@lgg_view output/url}.
+ *
+ * Action tokens can be manually generated by using {@link generate_action_token()}.
+ *
+ * @tip When registered, actions can be restricted to logged in or admin users.
+ *
+ * @tip Action URLs should be called with a trailing / to prevent 301 redirects.
+ *
+ * @package Elgg.Core
+ * @subpackage Actions
+ * @link http://docs.elgg.org/Actions
+ * @link http://docs.elgg.org/Actions/Tokens
+ */
+
+/**
+ * Perform an action.
+ *
+ * This function executes the action with name $action as registered
+ * by {@link elgg_register_action()}.
+ *
+ * The plugin hook 'action', $action_name will be triggered before the action
+ * is executed. If a handler returns false, it will prevent the action script
+ * from being called.
+ *
+ * @note If an action isn't registered in the system or is registered
+ * to an unavailable file the user will be forwarded to the site front
+ * page and an error will be emitted via {@link register_error()}.
+ *
+ * @warning All actions require {@link http://docs.elgg.org/Actions/Tokens Action Tokens}.
+ *
+ * @param string $action The requested action
+ * @param string $forwarder Optionally, the location to forward to
+ *
+ * @link http://docs.elgg.org/Actions
+ * @see elgg_register_action()
+ *
+ * @return void
+ * @access private
+ */
+function action($action, $forwarder = "") {
+ global $CONFIG;
+
+ $action = rtrim($action, '/');
+
+ // @todo REMOVE THESE ONCE #1509 IS IN PLACE.
+ // Allow users to disable plugins without a token in order to
+ // remove plugins that are incompatible.
+ // Logout for convenience.
+ // file/download (see #2010)
+ $exceptions = array(
+ 'admin/plugins/disable',
+ 'logout',
+ 'file/download',
+ );
+
+ if (!in_array($action, $exceptions)) {
+ action_gatekeeper($action);
+ }
+
+ $forwarder = str_replace(elgg_get_site_url(), "", $forwarder);
+ $forwarder = str_replace("http://", "", $forwarder);
+ $forwarder = str_replace("@", "", $forwarder);
+ if (substr($forwarder, 0, 1) == "/") {
+ $forwarder = substr($forwarder, 1);
+ }
+
+ if (!isset($CONFIG->actions[$action])) {
+ register_error(elgg_echo('actionundefined', array($action)));
+ } elseif (!elgg_is_admin_logged_in() && ($CONFIG->actions[$action]['access'] === 'admin')) {
+ register_error(elgg_echo('actionunauthorized'));
+ } elseif (!elgg_is_logged_in() && ($CONFIG->actions[$action]['access'] !== 'public')) {
+ register_error(elgg_echo('actionloggedout'));
+ } else {
+ // Returning falsy doesn't produce an error
+ // We assume this will be handled in the hook itself.
+ if (elgg_trigger_plugin_hook('action', $action, null, true)) {
+ if (!include($CONFIG->actions[$action]['file'])) {
+ register_error(elgg_echo('actionnotfound', array($action)));
+ }
+ }
+ }
+
+ $forwarder = empty($forwarder) ? REFERER : $forwarder;
+ forward($forwarder);
+}
+
+/**
+ * Registers an action.
+ *
+ * Actions are registered to a script in the system and are executed
+ * either by the URL http://elggsite.org/action/action_name/.
+ *
+ * $filename must be the full path of the file to register, or a path relative
+ * to the core actions/ dir.
+ *
+ * Actions should be namedspaced for your plugin. Example:
+ * <code>
+ * elgg_register_action('myplugin/save_settings', ...);
+ * </code>
+ *
+ * @tip Put action files under the actions/<plugin_name> directory of your plugin.
+ *
+ * @tip You don't need to include engine/start.php in your action files.
+ *
+ * @internal Actions are saved in $CONFIG->actions as an array in the form:
+ * <code>
+ * array(
+ * 'file' => '/location/to/file.php',
+ * 'access' => 'public', 'logged_in', or 'admin'
+ * )
+ * </code>
+ *
+ * @param string $action The name of the action (eg "register", "account/settings/save")
+ * @param string $filename Optionally, the filename where this action is located. If not specified,
+ * will assume the action is in elgg/actions/<action>.php
+ * @param string $access Who is allowed to execute this action: public, logged_in, admin.
+ * (default: logged_in)
+ *
+ * @see action()
+ * @see http://docs.elgg.org/Actions
+ *
+ * @return bool
+ */
+function elgg_register_action($action, $filename = "", $access = 'logged_in') {
+ global $CONFIG;
+
+ // plugins are encouraged to call actions with a trailing / to prevent 301
+ // redirects but we store the actions without it
+ $action = rtrim($action, '/');
+
+ if (!isset($CONFIG->actions)) {
+ $CONFIG->actions = array();
+ }
+
+ if (empty($filename)) {
+ $path = "";
+ if (isset($CONFIG->path)) {
+ $path = $CONFIG->path;
+ }
+
+ $filename = $path . "actions/" . $action . ".php";
+ }
+
+ $CONFIG->actions[$action] = array(
+ 'file' => $filename,
+ 'access' => $access,
+ );
+ return true;
+}
+
+/**
+ * Unregisters an action
+ *
+ * @param string $action Action name
+ * @return bool
+ * @since 1.8.1
+ */
+function elgg_unregister_action($action) {
+ global $CONFIG;
+
+ if (isset($CONFIG->actions[$action])) {
+ unset($CONFIG->actions[$action]);
+ return true;
+ } else {
+ return false;
+ }
+}
+
+/**
+ * Is the token timestamp within acceptable range?
+ *
+ * @param int $ts timestamp from the CSRF token
+ *
+ * @return bool
+ */
+function _elgg_validate_token_timestamp($ts) {
+ $action_token_timeout = elgg_get_config('action_token_timeout');
+ // default is 2 hours
+ $timeout = ($action_token_timeout !== null) ? $action_token_timeout : 2;
+
+ $hour = 60 * 60;
+ $timeout = $timeout * $hour;
+ $now = time();
+
+ // Validate time to ensure its not crazy
+ return ($timeout == 0 || ($ts > $now - $timeout) && ($ts < $now + $timeout));
+}
+
+/**
+ * Validate an action token.
+ *
+ * Calls to actions will automatically validate tokens. If tokens are not
+ * present or invalid, the action will be denied and the user will be redirected.
+ *
+ * Plugin authors should never have to manually validate action tokens.
+ *
+ * @param bool $visibleerrors Emit {@link register_error()} errors on failure?
+ * @param mixed $token The token to test against. Default: $_REQUEST['__elgg_token']
+ * @param mixed $ts The time stamp to test against. Default: $_REQUEST['__elgg_ts']
+ *
+ * @return bool
+ * @see generate_action_token()
+ * @link http://docs.elgg.org/Actions/Tokens
+ * @access private
+ */
+function validate_action_token($visibleerrors = TRUE, $token = NULL, $ts = NULL) {
+ if (!$token) {
+ $token = get_input('__elgg_token');
+ }
+
+ if (!$ts) {
+ $ts = get_input('__elgg_ts');
+ }
+
+ $session_id = session_id();
+
+ if (($token) && ($ts) && ($session_id)) {
+ // generate token, check with input and forward if invalid
+ $required_token = generate_action_token($ts);
+
+ // Validate token
+ if ($token == $required_token) {
+
+ if (_elgg_validate_token_timestamp($ts)) {
+ // We have already got this far, so unless anything
+ // else says something to the contrary we assume we're ok
+ $returnval = true;
+
+ $returnval = elgg_trigger_plugin_hook('action_gatekeeper:permissions:check', 'all', array(
+ 'token' => $token,
+ 'time' => $ts
+ ), $returnval);
+
+ if ($returnval) {
+ return true;
+ } else if ($visibleerrors) {
+ register_error(elgg_echo('actiongatekeeper:pluginprevents'));
+ }
+ } else if ($visibleerrors) {
+ // this is necessary because of #5133
+ if (elgg_is_xhr()) {
+ register_error(elgg_echo('js:security:token_refresh_failed', array(elgg_get_site_url())));
+ } else {
+ register_error(elgg_echo('actiongatekeeper:timeerror'));
+ }
+ }
+ } else if ($visibleerrors) {
+ // this is necessary because of #5133
+ if (elgg_is_xhr()) {
+ register_error(elgg_echo('js:security:token_refresh_failed', array(elgg_get_site_url())));
+ } else {
+ register_error(elgg_echo('actiongatekeeper:tokeninvalid'));
+ }
+ }
+ } else {
+ if (! empty($_SERVER['CONTENT_LENGTH']) && empty($_POST)) {
+ // The size of $_POST or uploaded file has exceed the size limit
+ $error_msg = elgg_trigger_plugin_hook('action_gatekeeper:upload_exceeded_msg', 'all', array(
+ 'post_size' => $_SERVER['CONTENT_LENGTH'],
+ 'visible_errors' => $visibleerrors,
+ ), elgg_echo('actiongatekeeper:uploadexceeded'));
+ } else {
+ $error_msg = elgg_echo('actiongatekeeper:missingfields');
+ }
+ if ($visibleerrors) {
+ register_error($error_msg);
+ }
+ }
+
+ return FALSE;
+}
+
+/**
+ * Validates the presence of action tokens.
+ *
+ * This function is called for all actions. If action tokens are missing,
+ * the user will be forwarded to the site front page and an error emitted.
+ *
+ * This function verifies form input for security features (like a generated token),
+ * and forwards if they are invalid.
+ *
+ * @param string $action The action being performed
+ *
+ * @return mixed True if valid or redirects.
+ * @access private
+ */
+function action_gatekeeper($action) {
+ if ($action === 'login') {
+ if (validate_action_token(false)) {
+ return true;
+ }
+
+ $token = get_input('__elgg_token');
+ $ts = (int)get_input('__elgg_ts');
+ if ($token && _elgg_validate_token_timestamp($ts)) {
+ // The tokens are present and the time looks valid: this is probably a mismatch due to the
+ // login form being on a different domain.
+ register_error(elgg_echo('actiongatekeeper:crosssitelogin'));
+
+
+ forward('login', 'csrf');
+ }
+
+ // let the validator send an appropriate msg
+ validate_action_token();
+
+ } elseif (validate_action_token()) {
+ return true;
+ }
+
+ forward(REFERER, 'csrf');
+}
+
+/**
+ * Generate an action token.
+ *
+ * Action tokens are based on timestamps as returned by {@link time()}.
+ * They are valid for one hour.
+ *
+ * Action tokens should be passed to all actions name __elgg_ts and __elgg_token.
+ *
+ * @warning Action tokens are required for all actions.
+ *
+ * @param int $timestamp Unix timestamp
+ *
+ * @see @elgg_view input/securitytoken
+ * @see @elgg_view input/form
+ * @example actions/manual_tokens.php
+ *
+ * @return string|false
+ * @access private
+ */
+function generate_action_token($timestamp) {
+ $site_secret = get_site_secret();
+ $session_id = session_id();
+ // Session token
+ $st = $_SESSION['__elgg_session'];
+
+ if (($site_secret) && ($session_id)) {
+ return md5($site_secret . $timestamp . $session_id . $st);
+ }
+
+ return FALSE;
+}
+
+/**
+ * Initialise the site secret (32 bytes: "z" to indicate format + 186-bit key in Base64 URL).
+ *
+ * Used during installation and saves as a datalist.
+ *
+ * Note: Old secrets were hex encoded.
+ *
+ * @return mixed The site secret hash or false
+ * @access private
+ * @todo Move to better file.
+ */
+function init_site_secret() {
+ $secret = 'z' . ElggCrypto::getRandomString(31);
+
+ if (datalist_set('__site_secret__', $secret)) {
+ return $secret;
+ }
+
+ return FALSE;
+}
+
+/**
+ * Returns the site secret.
+ *
+ * Used to generate difficult to guess hashes for sessions and action tokens.
+ *
+ * @return string Site secret.
+ * @access private
+ * @todo Move to better file.
+ */
+function get_site_secret() {
+ $secret = datalist_get('__site_secret__');
+ if (!$secret) {
+ $secret = init_site_secret();
+ }
+
+ return $secret;
+}
+
+/**
+ * Get the strength of the site secret
+ *
+ * @return string "strong", "moderate", or "weak"
+ * @access private
+ */
+function _elgg_get_site_secret_strength() {
+ $secret = get_site_secret();
+ if ($secret[0] !== 'z') {
+ $rand_max = getrandmax();
+ if ($rand_max < pow(2, 16)) {
+ return 'weak';
+ }
+ if ($rand_max < pow(2, 32)) {
+ return 'moderate';
+ }
+ }
+ return 'strong';
+}
+
+/**
+ * Check if an action is registered and its script exists.
+ *
+ * @param string $action Action name
+ *
+ * @return bool
+ * @since 1.8.0
+ */
+function elgg_action_exists($action) {
+ global $CONFIG;
+
+ return (isset($CONFIG->actions[$action]) && file_exists($CONFIG->actions[$action]['file']));
+}
+
+/**
+ * Checks whether the request was requested via ajax
+ *
+ * @return bool whether page was requested via ajax
+ * @since 1.8.0
+ */
+function elgg_is_xhr() {
+ return isset($_SERVER['HTTP_X_REQUESTED_WITH'])
+ && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest' ||
+ get_input('X-Requested-With') === 'XMLHttpRequest';
+}
+
+/**
+ * Catch calls to forward() in ajax request and force an exit.
+ *
+ * Forces response is json of the following form:
+ * <pre>
+ * {
+ * "current_url": "the.url.we/were/coming/from",
+ * "forward_url": "the.url.we/were/going/to",
+ * "system_messages": {
+ * "messages": ["msg1", "msg2", ...],
+ * "errors": ["err1", "err2", ...]
+ * },
+ * "status": -1 //or 0 for success if there are no error messages present
+ * }
+ * </pre>
+ * where "system_messages" is all message registers at the point of forwarding
+ *
+ * @param string $hook
+ * @param string $type
+ * @param string $reason
+ * @param array $params
+ * @return void
+ * @access private
+ */
+function ajax_forward_hook($hook, $type, $reason, $params) {
+ if (elgg_is_xhr()) {
+ // always pass the full structure to avoid boilerplate JS code.
+ $params = array(
+ 'output' => '',
+ 'status' => 0,
+ 'system_messages' => array(
+ 'error' => array(),
+ 'success' => array()
+ )
+ );
+
+ //grab any data echo'd in the action
+ $output = ob_get_clean();
+
+ //Avoid double-encoding in case data is json
+ $json = json_decode($output);
+ if (isset($json)) {
+ $params['output'] = $json;
+ } else {
+ $params['output'] = $output;
+ }
+
+ //Grab any system messages so we can inject them via ajax too
+ $system_messages = system_messages(NULL, "");
+
+ if (isset($system_messages['success'])) {
+ $params['system_messages']['success'] = $system_messages['success'];
+ }
+
+ if (isset($system_messages['error'])) {
+ $params['system_messages']['error'] = $system_messages['error'];
+ $params['status'] = -1;
+ }
+
+ // Check the requester can accept JSON responses, if not fall back to
+ // returning JSON in a plain-text response. Some libraries request
+ // JSON in an invisible iframe which they then read from the iframe,
+ // however some browsers will not accept the JSON MIME type.
+ if (stripos($_SERVER['HTTP_ACCEPT'], 'application/json') === FALSE) {
+ header("Content-type: text/plain");
+ } else {
+ header("Content-type: application/json");
+ }
+
+ echo json_encode($params);
+ exit;
+ }
+}
+
+/**
+ * Buffer all output echo'd directly in the action for inclusion in the returned JSON.
+ * @return void
+ * @access private
+ */
+function ajax_action_hook() {
+ if (elgg_is_xhr()) {
+ ob_start();
+ }
+}
+
+/**
+ * Initialize some ajaxy actions features
+ * @access private
+ */
+function actions_init() {
+ elgg_register_action('security/refreshtoken', '', 'public');
+
+ elgg_register_simplecache_view('js/languages/en');
+
+ elgg_register_plugin_hook_handler('action', 'all', 'ajax_action_hook');
+ elgg_register_plugin_hook_handler('forward', 'all', 'ajax_forward_hook');
+}
+
+elgg_register_event_handler('init', 'system', 'actions_init');
diff --git a/engine/lib/activity.php b/engine/lib/activity.php
deleted file mode 100644
index 818d16a4b..000000000
--- a/engine/lib/activity.php
+++ /dev/null
@@ -1,154 +0,0 @@
-<?php
- /**
- * Elgg activity stream.
- * Functions for listening for and generating the rich activity stream from the
- * system log.
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
-
- /**
- * Construct and execute the query required for the activity stream.
- *
- * @param int $limit Limit the query.
- * @param int $offset Execute from the given object
- * @param mixed $type A type, or array of types to look for. Note: This is how they appear in the SYSTEM LOG.
- * @param mixed $subtype A subtype, or array of types to look for. Note: This is how they appear in the SYSTEM LOG.
- * @param mixed $owner_guid The guid or a collection of GUIDs
- * @param string $owner_relationship If defined, the relationship between $owner_guid and the entity owner_guid - so "is $owner_guid $owner_relationship with $entity->owner_guid"
- * @return array An array of system log entries.
- */
- function get_activity_stream_data($limit = 10, $offset = 0, $type = "", $subtype = "", $owner_guid = "", $owner_relationship = "")
- {
- global $CONFIG;
-
- $limit = (int)$limit;
- $offset = (int)$offset;
-
- if ($type) {
- if (!is_array($type))
- $type = array(sanitise_string($type));
- else
- foreach ($type as $k => $v)
- $type[$k] = sanitise_string($v);
- }
-
- if ($subtype) {
- if (!is_array($subtype))
- $subtype = array(sanitise_string($subtype));
- else
- foreach ($subtype as $k => $v)
- $subtype[$k] = sanitise_string($v);
- }
-
- if ($owner_guid) {
- if (is_array($owner_guid))
- foreach ($owner_guid as $k => $v)
- $owner_guid[$k] = (int)$v;
- else
- $owner_guid = array((int)$owner_guid);
- }
-
- $owner_relationship = sanitise_string($owner_relationship);
-
- // Get a list of possible views
- $activity_events= array();
- $activity_views = array_merge(elgg_view_tree('activity', 'default'), elgg_view_tree('river', 'default')); // Join activity with river
-
- $done = array();
-
- foreach ($activity_views as $view)
- {
- $fragments = explode('/', $view);
- $tmp = explode('/',$view, 2);
- $tmp = $tmp[1];
-
- if ((isset($fragments[0])) && (($fragments[0] == 'river') || ($fragments[0] == 'activity'))
- && (!in_array($tmp, $done)))
- {
- if (isset($fragments[1]))
- {
- $f = array();
- for ($n = 1; $n < count($fragments); $n++)
- {
- $val = sanitise_string($fragments[$n]);
- switch($n)
- {
- case 1: $key = 'type'; break;
- case 2: $key = 'subtype'; break;
- case 3: $key = 'event'; break;
- }
- $f[$key] = $val;
- }
-
- // Filter result based on parameters
- $add = true;
- if ($type) {
- if (!in_array($f['type'], $type)) $add = false;
- }
- if (($add) && ($subtype)) {
- if (!in_array($f['subtype'], $subtype)) $add = false;
- }
- if (($add) && ($event)) {
- if (!in_array($f['event'], $event)) $add = false;
- }
-
- if ($add)
- $activity_events[] = $f;
- }
-
- $done[] = $tmp;
- }
-
-
- }
-
- $n = 0;
- foreach ($activity_events as $details)
- {
- // Get what we're talking about
-
- if ($details['subtype'] == 'default') $details['subtype'] = '';
-
- if (($details['type']) && ($details['event'])) {
- if ($n>0) $obj_query .= " or ";
-
- $access = "";
- if ($details['type']!='relationship')
- $access = " and " . get_access_sql_suffix('sl');
-
- $obj_query .= "( sl.object_type='{$details['type']}' and sl.object_subtype='{$details['subtype']}' and sl.event='{$details['event']}' $access )";
-
- $n++;
- }
-
- }
-
- // User
- if ((count($owner_guid)) && ($owner_guid[0]!=0)) {
- $user = " and sl.performed_by_guid in (".implode(',', $owner_guid).")";
-
- if ($owner_relationship)
- {
- $friendsarray = "";
- if ($friends = get_entities_from_relationship($owner_relationship,$owner_guid[0],false,"user",$subtype,0,"time_created desc",9999)) {
- $friendsarray = array();
- foreach($friends as $friend) {
- $friendsarray[] = $friend->getGUID();
- }
-
- $user = " and sl.performed_by_guid in (".implode(',', $friendsarray).")";
- }
-
- }
- }
-
- $query = "SELECT sl.* from {$CONFIG->dbprefix}system_log sl where 1 $user and ($obj_query) order by sl.time_created desc limit $offset, $limit";
- return get_data($query);
- }
-?> \ No newline at end of file
diff --git a/engine/lib/admin.php b/engine/lib/admin.php
index 1c44d80a5..f36f29668 100644
--- a/engine/lib/admin.php
+++ b/engine/lib/admin.php
@@ -1,176 +1,663 @@
-<?php
- /**
- * Elgg admin functions.
- * Functions for adding and manipulating options on the admin panel.
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
-
-
- /**
- * Register an admin page with the admin panel.
- * This function extends the view "admin/main" with the provided view. This view should provide a description
- * and either a control or a link to.
- *
- * Usage:
- * - To add a control to the main admin panel then extend admin/main
- * - To add a control to a new page create a page which renders a view admin/subpage (where subpage is your new page -
- * nb. some pages already exist that you can extend), extend the main view to point to it, and add controls to your
- * new view.
- *
- * At the moment this is essentially a wrapper around extend_view.
- *
- * @param string $new_admin_view The view associated with the control you're adding
- * @param string $view The view to extend, by default this is 'admin/main'.
- * @param int $priority Optional priority to govern the appearance in the list.
- */
- function extend_elgg_admin_page( $new_admin_view, $view = 'admin/main', $priority = 500)
- {
- return extend_view($view, $new_admin_view, $priority);
- }
-
- /**
- * Initialise the admin page.
- */
- function admin_init()
- {
- // Add plugin main menu option (last)
- extend_elgg_admin_page('admin/main_opt/statistics', 'admin/main');
- extend_elgg_admin_page('admin/main_opt/site', 'admin/main');
- extend_elgg_admin_page('admin/main_opt/user', 'admin/main');
- extend_elgg_admin_page('admin/main_opt/plugins', 'admin/main', 999); // Always last
-
- register_action('admin/user/ban', false, "", true);
- register_action('admin/user/unban', false, "", true);
- register_action('admin/user/delete', false, "", true);
- register_action('admin/user/resetpassword', false, "", true);
- register_action('admin/user/makeadmin', false, "", true);
-
- // Register some actions
- register_action('admin/site/update_basic', false, "", true); // Register basic site admin action
-
- // Page handler
- register_page_handler('admin','admin_settings_page_handler');
-
- if (isadminloggedin()) {
- global $is_admin;
- $is_admin = true;
- }
-
- }
-
- function admin_pagesetup() {
-
- if (get_context() == 'admin') {
-
- global $CONFIG;
- add_submenu_item(elgg_echo('admin:statistics'), $CONFIG->wwwroot . 'pg/admin/statistics/');
- add_submenu_item(elgg_echo('admin:site'), $CONFIG->wwwroot . 'pg/admin/site/');
- add_submenu_item(elgg_echo('admin:user'), $CONFIG->wwwroot . 'pg/admin/user/');
- add_submenu_item(elgg_echo('admin:plugins'), $CONFIG->wwwroot . 'pg/admin/plugins/');
-
- }
-
- }
-
- function admin_settings_page_handler($page)
- {
- global $CONFIG;
-
- $path = $CONFIG->path . "admin/index.php";
-
- if ($page[0])
- {
- switch ($page[0])
- {
- case 'user' : $path = $CONFIG->path . "admin/user.php"; break;
- case 'statistics' : $path = $CONFIG->path . "admin/statistics.php"; break;
- case 'plugins' : $path = $CONFIG->path . "admin/plugins.php"; break;
- case 'site' : $path = $CONFIG->path . "admin/site.php"; break;
- }
- }
-
- if ($page[1])
- set_input('username', $page[1]);
-
- include($path);
- }
-
-
- /**
- * Admin permissions system
- *
- * @return true|null True if the current user is an admin.
- */
- function admin_permissions($hook, $type, $returnval, $params) {
-
- if (is_array($params) && !empty($params['user']) && $params['user'] instanceof ElggUser) {
- $admin = $params['user']->admin;
- if ($admin) {
- return true;
- }
- }
-
- }
-
- /**
- * Write a persistent message to the administrator's notification window.
- *
- * Currently this writes a message to the admin store, we may want to come up with another way at some point.
- *
- * @param string $subject Subject of the message
- * @param string $message Body of the message
- */
- function send_admin_message($subject, $message)
- {
- $subject = sanitise_string($subject);
- $message = sanitise_string($message);
-
- if (($subject) && ($message))
- {
- $admin_message = new ElggObject();
- $admin_message->subtype = 'admin_message';
- $admin_message->access_id = ACCESS_PUBLIC;
- $admin_message->title = $subject;
- $admin_message->description = $message;
-
- return $admin_message->save();
- }
-
- return false;
- }
-
- /**
- * List all admin messages.
- *
- * @param int $limit Limit
- */
- function list_admin_messages($limit = 10)
- {
- return list_entities('object','admin_message',0,$limit);
- }
-
- /**
- * Remove an admin message.
- *
- * @param int $guid The
- */
- function clear_admin_message($guid)
- {
- return delete_entity($guid);
- }
-
- /// Register init functions
- register_elgg_event_handler('init','system','admin_init');
- register_elgg_event_handler('pagesetup','system','admin_pagesetup');
-
- // Register a plugin hook for permissions
- register_plugin_hook('permissions_check','all','admin_permissions');
- register_plugin_hook('container_permissions_check','all','admin_permissions');
-
-?>
+<?php
+/**
+ * Elgg admin functions.
+ *
+ * Admin menu items
+ * Elgg has a convenience function for adding menu items to the sidebar of the
+ * admin area. @see elgg_register_admin_menu_item()
+ *
+ * Admin pages
+ * Plugins no not need to provide their own page handler to add a page to the
+ * admin area. A view placed at admin/<section>/<subsection> can be access
+ * at http://example.org/admin/<section>/<subsection>. The title of the page
+ * will be elgg_echo('admin:<section>:<subsection>'). For an example of how to
+ * add a page to the admin area, see the diagnostics plugin.
+ *
+ * Admin notices
+ * System messages (success and error messages) are used in both the main site
+ * and the admin area. There is a special presistent message for the admin area
+ * called an admin notice. It should be used when a plugin requires an
+ * administrator to take an action. An example is the categories plugin
+ * requesting that the administrator set site categories after the plugin has
+ * been activated. @see elgg_add_admin_notice()
+ *
+ *
+ * @package Elgg.Core
+ * @subpackage Admin
+ */
+
+/**
+ * Get the admin users
+ *
+ * @param array $options Options array, @see elgg_get_entities() for parameters
+ *
+ * @return mixed Array of admin users or false on failure. If a count, returns int.
+ * @since 1.8.0
+ */
+function elgg_get_admins(array $options = array()) {
+ global $CONFIG;
+
+ if (isset($options['joins'])) {
+ if (!is_array($options['joins'])) {
+ $options['joins'] = array($options['joins']);
+ }
+ $options['joins'][] = "join {$CONFIG->dbprefix}users_entity u on e.guid=u.guid";
+ } else {
+ $options['joins'] = array("join {$CONFIG->dbprefix}users_entity u on e.guid=u.guid");
+ }
+
+ if (isset($options['wheres'])) {
+ if (!is_array($options['wheres'])) {
+ $options['wheres'] = array($options['wheres']);
+ }
+ $options['wheres'][] = "u.admin = 'yes'";
+ } else {
+ $options['wheres'][] = "u.admin = 'yes'";
+ }
+
+ return elgg_get_entities($options);
+}
+
+/**
+ * Write a persistent message to the admin view.
+ * Useful to alert the admin to take a certain action.
+ * The id is a unique ID that can be cleared once the admin
+ * completes the action.
+ *
+ * eg: add_admin_notice('twitter_services_no_api',
+ * 'Before your users can use Twitter services on this site, you must set up
+ * the Twitter API key in the <a href="link">Twitter Services Settings</a>');
+ *
+ * @param string $id A unique ID that your plugin can remember
+ * @param string $message Body of the message
+ *
+ * @return bool
+ * @since 1.8.0
+ */
+function elgg_add_admin_notice($id, $message) {
+ if ($id && $message) {
+ if (elgg_admin_notice_exists($id)) {
+ return false;
+ }
+
+ // need to handle when no one is logged in
+ $old_ia = elgg_set_ignore_access(true);
+
+ $admin_notice = new ElggObject();
+ $admin_notice->subtype = 'admin_notice';
+ // admins can see ACCESS_PRIVATE but no one else can.
+ $admin_notice->access_id = ACCESS_PRIVATE;
+ $admin_notice->admin_notice_id = $id;
+ $admin_notice->description = $message;
+
+ $result = $admin_notice->save();
+
+ elgg_set_ignore_access($old_ia);
+
+ return (bool)$result;
+ }
+
+ return false;
+}
+
+/**
+ * Remove an admin notice by ID.
+ *
+ * eg In actions/twitter_service/save_settings:
+ * if (is_valid_twitter_api_key()) {
+ * delete_admin_notice('twitter_services_no_api');
+ * }
+ *
+ * @param string $id The unique ID assigned in add_admin_notice()
+ *
+ * @return bool
+ * @since 1.8.0
+ */
+function elgg_delete_admin_notice($id) {
+ if (!$id) {
+ return FALSE;
+ }
+ $result = TRUE;
+ $notices = elgg_get_entities_from_metadata(array(
+ 'metadata_name' => 'admin_notice_id',
+ 'metadata_value' => $id
+ ));
+
+ if ($notices) {
+ // in case a bad plugin adds many, let it remove them all at once.
+ foreach ($notices as $notice) {
+ $result = ($result && $notice->delete());
+ }
+ return $result;
+ }
+ return FALSE;
+}
+
+/**
+ * Get admin notices. An admin must be logged in since the notices are private.
+ *
+ * @param int $limit Limit
+ *
+ * @return array Array of admin notices
+ * @since 1.8.0
+ */
+function elgg_get_admin_notices($limit = 10) {
+ return elgg_get_entities_from_metadata(array(
+ 'type' => 'object',
+ 'subtype' => 'admin_notice',
+ 'limit' => $limit
+ ));
+}
+
+/**
+ * Check if an admin notice is currently active.
+ *
+ * @param string $id The unique ID used to register the notice.
+ *
+ * @return bool
+ * @since 1.8.0
+ */
+function elgg_admin_notice_exists($id) {
+ $old_ia = elgg_set_ignore_access(true);
+ $notice = elgg_get_entities_from_metadata(array(
+ 'type' => 'object',
+ 'subtype' => 'admin_notice',
+ 'metadata_name_value_pair' => array('name' => 'admin_notice_id', 'value' => $id)
+ ));
+ elgg_set_ignore_access($old_ia);
+
+ return ($notice) ? TRUE : FALSE;
+}
+
+/**
+ * Add an admin area section or child section.
+ * This is a wrapper for elgg_register_menu_item().
+ *
+ * Used in conjuction with http://elgg.org/admin/section_id/child_section style
+ * page handler. See the documentation at the top of this file for more details
+ * on that.
+ *
+ * The text of the menu item is obtained from elgg_echo(admin:$parent_id:$menu_id)
+ *
+ * This function handles registering the parent if it has not been registered.
+ *
+ * @param string $section The menu section to add to
+ * @param string $menu_id The unique ID of section
+ * @param string $parent_id If a child section, the parent section id
+ * @param int $priority The menu item priority
+ *
+ * @return bool
+ * @since 1.8.0
+ */
+function elgg_register_admin_menu_item($section, $menu_id, $parent_id = NULL, $priority = 100) {
+
+ // make sure parent is registered
+ if ($parent_id && !elgg_is_menu_item_registered('page', $parent_id)) {
+ elgg_register_admin_menu_item($section, $parent_id);
+ }
+
+ // in the admin section parents never have links
+ if ($parent_id) {
+ $href = "admin/$parent_id/$menu_id";
+ } else {
+ $href = NULL;
+ }
+
+ $name = $menu_id;
+ if ($parent_id) {
+ $name = "$parent_id:$name";
+ }
+
+ return elgg_register_menu_item('page', array(
+ 'name' => $name,
+ 'href' => $href,
+ 'text' => elgg_echo("admin:$name"),
+ 'context' => 'admin',
+ 'parent_name' => $parent_id,
+ 'priority' => $priority,
+ 'section' => $section
+ ));
+}
+
+/**
+ * Initialize the admin backend.
+ * @return void
+ * @access private
+ */
+function admin_init() {
+ elgg_register_action('admin/user/ban', '', 'admin');
+ elgg_register_action('admin/user/unban', '', 'admin');
+ elgg_register_action('admin/user/delete', '', 'admin');
+ elgg_register_action('admin/user/resetpassword', '', 'admin');
+ elgg_register_action('admin/user/makeadmin', '', 'admin');
+ elgg_register_action('admin/user/removeadmin', '', 'admin');
+
+ elgg_register_action('admin/site/update_basic', '', 'admin');
+ elgg_register_action('admin/site/update_advanced', '', 'admin');
+ elgg_register_action('admin/site/flush_cache', '', 'admin');
+ elgg_register_action('admin/site/unlock_upgrade', '', 'admin');
+ elgg_register_action('admin/site/regenerate_secret', '', 'admin');
+
+ elgg_register_action('admin/menu/save', '', 'admin');
+
+ elgg_register_action('admin/delete_admin_notice', '', 'admin');
+
+ elgg_register_action('profile/fields/reset', '', 'admin');
+ elgg_register_action('profile/fields/add', '', 'admin');
+ elgg_register_action('profile/fields/edit', '', 'admin');
+ elgg_register_action('profile/fields/delete', '', 'admin');
+ elgg_register_action('profile/fields/reorder', '', 'admin');
+
+ elgg_register_simplecache_view('css/admin');
+ elgg_register_simplecache_view('js/admin');
+ $url = elgg_get_simplecache_url('js', 'admin');
+ elgg_register_js('elgg.admin', $url);
+ elgg_register_js('jquery.jeditable', 'vendors/jquery/jquery.jeditable.mini.js');
+
+ // administer
+ // dashboard
+ elgg_register_menu_item('page', array(
+ 'name' => 'dashboard',
+ 'href' => 'admin/dashboard',
+ 'text' => elgg_echo('admin:dashboard'),
+ 'context' => 'admin',
+ 'priority' => 10,
+ 'section' => 'administer'
+ ));
+ // statistics
+ elgg_register_admin_menu_item('administer', 'statistics', null, 20);
+ elgg_register_admin_menu_item('administer', 'overview', 'statistics');
+ elgg_register_admin_menu_item('administer', 'server', 'statistics');
+
+ // users
+ elgg_register_admin_menu_item('administer', 'users', null, 20);
+ elgg_register_admin_menu_item('administer', 'online', 'users', 10);
+ elgg_register_admin_menu_item('administer', 'admins', 'users', 20);
+ elgg_register_admin_menu_item('administer', 'newest', 'users', 30);
+ elgg_register_admin_menu_item('administer', 'add', 'users', 40);
+
+ // configure
+ // plugins
+ elgg_register_menu_item('page', array(
+ 'name' => 'plugins',
+ 'href' => 'admin/plugins',
+ 'text' => elgg_echo('admin:plugins'),
+ 'context' => 'admin',
+ 'priority' => 75,
+ 'section' => 'configure'
+ ));
+
+ // settings
+ elgg_register_admin_menu_item('configure', 'appearance', null, 50);
+ elgg_register_admin_menu_item('configure', 'settings', null, 100);
+ elgg_register_admin_menu_item('configure', 'basic', 'settings', 10);
+ elgg_register_admin_menu_item('configure', 'advanced', 'settings', 20);
+ elgg_register_admin_menu_item('configure', 'advanced/site_secret', 'settings', 25);
+ elgg_register_admin_menu_item('configure', 'menu_items', 'appearance', 30);
+ elgg_register_admin_menu_item('configure', 'profile_fields', 'appearance', 40);
+ // default widgets is added via an event handler elgg_default_widgets_init() in widgets.php
+ // because it requires additional setup.
+
+ // plugin settings are added in elgg_admin_add_plugin_settings_menu() via the admin page handler
+ // for performance reasons.
+
+ // we want plugin settings menu items to be sorted alphabetical
+ if (elgg_in_context('admin')) {
+ elgg_register_plugin_hook_handler('prepare', 'menu:page', 'elgg_admin_sort_page_menu');
+ }
+
+ if (elgg_is_admin_logged_in()) {
+ elgg_register_menu_item('topbar', array(
+ 'name' => 'administration',
+ 'href' => 'admin',
+ 'text' => elgg_view_icon('settings') . elgg_echo('admin'),
+ 'priority' => 100,
+ 'section' => 'alt',
+ ));
+ }
+
+ // widgets
+ $widgets = array('online_users', 'new_users', 'content_stats', 'admin_welcome', 'control_panel');
+ foreach ($widgets as $widget) {
+ elgg_register_widget_type(
+ $widget,
+ elgg_echo("admin:widget:$widget"),
+ elgg_echo("admin:widget:$widget:help"),
+ 'admin'
+ );
+ }
+
+ // automatic adding of widgets for admin
+ elgg_register_event_handler('make_admin', 'user', 'elgg_add_admin_widgets');
+
+ elgg_register_page_handler('admin', 'admin_page_handler');
+ elgg_register_page_handler('admin_plugin_screenshot', 'admin_plugin_screenshot_page_handler');
+ elgg_register_page_handler('admin_plugin_text_file', 'admin_markdown_page_handler');
+}
+
+/**
+ * Create the plugin settings page menu.
+ *
+ * This is done in a separate function called from the admin
+ * page handler because of performance concerns.
+ *
+ * @return void
+ * @access private
+ * @since 1.8.0
+ */
+function elgg_admin_add_plugin_settings_menu() {
+
+ $active_plugins = elgg_get_plugins('active');
+ if (!$active_plugins) {
+ // nothing added because no items
+ return;
+ }
+
+ foreach ($active_plugins as $plugin) {
+ $plugin_id = $plugin->getID();
+ $settings_view_old = 'settings/' . $plugin_id . '/edit';
+ $settings_view_new = 'plugins/' . $plugin_id . '/settings';
+ if (elgg_view_exists($settings_view_new) || elgg_view_exists($settings_view_old)) {
+ elgg_register_menu_item('page', array(
+ 'name' => $plugin_id,
+ 'href' => "admin/plugin_settings/$plugin_id",
+ 'text' => $plugin->getManifest()->getName(),
+ 'parent_name' => 'settings',
+ 'context' => 'admin',
+ 'section' => 'configure',
+ ));
+ }
+ }
+}
+
+/**
+ * Sort the plugin settings menu items
+ *
+ * @param string $hook
+ * @param string $type
+ * @param array $return
+ * @param array $params
+ *
+ * @return void
+ * @since 1.8.0
+ * @access private
+ */
+function elgg_admin_sort_page_menu($hook, $type, $return, $params) {
+ $configure_items = $return['configure'];
+ /* @var ElggMenuItem[] $configure_items */
+ foreach ($configure_items as $menu_item) {
+ if ($menu_item->getName() == 'settings') {
+ $settings = $menu_item;
+ }
+ }
+
+ // keep the basic and advanced settings at the top
+ /* @var ElggMenuItem $settings */
+ $children = $settings->getChildren();
+ $site_settings = array_splice($children, 0, 2);
+ usort($children, array('ElggMenuBuilder', 'compareByText'));
+ array_splice($children, 0, 0, $site_settings);
+ $settings->setChildren($children);
+}
+
+/**
+ * Handles any set up required for administration pages
+ *
+ * @return void
+ * @access private
+ */
+function admin_pagesetup() {
+ if (elgg_in_context('admin')) {
+ $url = elgg_get_simplecache_url('css', 'admin');
+ elgg_register_css('elgg.admin', $url);
+ elgg_load_css('elgg.admin');
+ elgg_unregister_css('elgg');
+
+ // setup footer menu
+ elgg_register_menu_item('admin_footer', array(
+ 'name' => 'faq',
+ 'text' => elgg_echo('admin:footer:faq'),
+ 'href' => 'http://docs.elgg.org/wiki/Category:Administration_FAQ',
+ ));
+
+ elgg_register_menu_item('admin_footer', array(
+ 'name' => 'manual',
+ 'text' => elgg_echo('admin:footer:manual'),
+ 'href' => 'http://docs.elgg.org/wiki/Administration_Manual',
+ ));
+
+ elgg_register_menu_item('admin_footer', array(
+ 'name' => 'community_forums',
+ 'text' => elgg_echo('admin:footer:community_forums'),
+ 'href' => 'http://community.elgg.org/groups/all/',
+ ));
+
+ elgg_register_menu_item('admin_footer', array(
+ 'name' => 'blog',
+ 'text' => elgg_echo('admin:footer:blog'),
+ 'href' => 'http://blog.elgg.org/',
+ ));
+ }
+}
+
+/**
+ * Handle admin pages. Expects corresponding views as admin/section/subsection
+ *
+ * @param array $page Array of pages
+ *
+ * @return bool
+ * @access private
+ */
+function admin_page_handler($page) {
+
+ admin_gatekeeper();
+ elgg_admin_add_plugin_settings_menu();
+ elgg_set_context('admin');
+
+ elgg_unregister_css('elgg');
+ elgg_load_js('elgg.admin');
+ elgg_load_js('jquery.jeditable');
+
+ // default to dashboard
+ if (!isset($page[0]) || empty($page[0])) {
+ $page = array('dashboard');
+ }
+
+ // was going to fix this in the page_handler() function but
+ // it's commented to explicitly return a string if there's a trailing /
+ if (empty($page[count($page) - 1])) {
+ array_pop($page);
+ }
+
+ $vars = array('page' => $page);
+
+ // special page for plugin settings since we create the form for them
+ if ($page[0] == 'plugin_settings') {
+ if (isset($page[1]) && (elgg_view_exists("settings/{$page[1]}/edit") ||
+ elgg_view_exists("plugins/{$page[1]}/settings"))) {
+
+ $view = 'admin/plugin_settings';
+ $plugin = elgg_get_plugin_from_id($page[1]);
+ $vars['plugin'] = $plugin;
+
+ $title = elgg_echo("admin:{$page[0]}");
+ } else {
+ forward('', '404');
+ }
+ } else {
+ $view = 'admin/' . implode('/', $page);
+ $title = elgg_echo("admin:{$page[0]}");
+ if (count($page) > 1) {
+ $title .= ' : ' . elgg_echo('admin:' . implode(':', $page));
+ }
+ }
+
+ // gets content and prevents direct access to 'components' views
+ if ($page[0] == 'components' || !($content = elgg_view($view, $vars))) {
+ $title = elgg_echo('admin:unknown_section');
+ $content = elgg_echo('admin:unknown_section');
+ }
+
+ $body = elgg_view_layout('admin', array('content' => $content, 'title' => $title));
+ echo elgg_view_page($title, $body, 'admin');
+ return true;
+}
+
+/**
+ * Serves up screenshots for plugins from
+ * admin_plugin_screenshot/<plugin_id>/<size>/<ss_name>.<ext>
+ *
+ * @param array $pages The pages array
+ * @return bool
+ * @access private
+ */
+function admin_plugin_screenshot_page_handler($pages) {
+ // only admins can use this for security
+ admin_gatekeeper();
+
+ $plugin_id = elgg_extract(0, $pages);
+ // only thumbnail or full.
+ $size = elgg_extract(1, $pages, 'thumbnail');
+
+ // the rest of the string is the filename
+ $filename_parts = array_slice($pages, 2);
+ $filename = implode('/', $filename_parts);
+ $filename = sanitise_filepath($filename, false);
+
+ $plugin = new ElggPlugin($plugin_id);
+ if (!$plugin) {
+ $file = elgg_get_root_path() . '_graphics/icons/default/medium.png';
+ } else {
+ $file = $plugin->getPath() . $filename;
+ if (!file_exists($file)) {
+ $file = elgg_get_root_path() . '_graphics/icons/default/medium.png';
+ }
+ }
+
+ header("Content-type: image/jpeg");
+
+ // resize to 100x100 for thumbnails
+ switch ($size) {
+ case 'thumbnail':
+ echo get_resized_image_from_existing_file($file, 100, 100, true);
+ break;
+
+ case 'full':
+ default:
+ echo file_get_contents($file);
+ break;
+ }
+ return true;
+}
+
+/**
+ * Formats and serves out markdown files from plugins.
+ *
+ * URLs in format like admin_plugin_text_file/<plugin_id>/filename.ext
+ *
+ * The only valid files are:
+ * * README.txt
+ * * CHANGES.txt
+ * * INSTALL.txt
+ * * COPYRIGHT.txt
+ * * LICENSE.txt
+ *
+ * @param array $pages
+ * @return bool
+ * @access private
+ */
+function admin_markdown_page_handler($pages) {
+ admin_gatekeeper();
+
+ elgg_set_context('admin');
+
+ elgg_unregister_css('elgg');
+ elgg_load_js('elgg.admin');
+ elgg_load_js('jquery.jeditable');
+ elgg_load_library('elgg:markdown');
+
+ $plugin_id = elgg_extract(0, $pages);
+ $plugin = elgg_get_plugin_from_id($plugin_id);
+ $filename = elgg_extract(1, $pages);
+
+ $error = false;
+ if (!$plugin) {
+ $error = elgg_echo('admin:plugins:markdown:unknown_plugin');
+ $body = elgg_view_layout('admin', array('content' => $error, 'title' => $error));
+ echo elgg_view_page($error, $body, 'admin');
+ return true;
+ }
+
+ $text_files = $plugin->getAvailableTextFiles();
+
+ if (!array_key_exists($filename, $text_files)) {
+ $error = elgg_echo('admin:plugins:markdown:unknown_file');
+ }
+
+ $file = $text_files[$filename];
+ $file_contents = file_get_contents($file);
+
+ if (!$file_contents) {
+ $error = elgg_echo('admin:plugins:markdown:unknown_file');
+ }
+
+ if ($error) {
+ $title = $error;
+ $body = elgg_view_layout('admin', array('content' => $error, 'title' => $title));
+ echo elgg_view_page($title, $body, 'admin');
+ return true;
+ }
+
+ $title = $plugin->getManifest()->getName() . ": $filename";
+ $text = Markdown($file_contents);
+
+ $body = elgg_view_layout('admin', array(
+ // setting classes here because there's no way to pass classes
+ // to the layout
+ 'content' => '<div class="elgg-markdown">' . $text . '</div>',
+ 'title' => $title
+ ));
+
+ echo elgg_view_page($title, $body, 'admin');
+ return true;
+}
+
+/**
+ * Adds default admin widgets to the admin dashboard.
+ *
+ * @param string $event
+ * @param string $type
+ * @param ElggUser $user
+ *
+ * @return null|true
+ * @access private
+ */
+function elgg_add_admin_widgets($event, $type, $user) {
+ elgg_set_ignore_access(true);
+
+ // check if the user already has widgets
+ if (elgg_get_widgets($user->getGUID(), 'admin')) {
+ return true;
+ }
+
+ // In the form column => array of handlers in order, top to bottom
+ $adminWidgets = array(
+ 1 => array('control_panel', 'admin_welcome'),
+ 2 => array('online_users', 'new_users', 'content_stats'),
+ );
+
+ foreach ($adminWidgets as $column => $handlers) {
+ foreach ($handlers as $position => $handler) {
+ $guid = elgg_create_widget($user->getGUID(), $handler, 'admin');
+ if ($guid) {
+ $widget = get_entity($guid);
+ /* @var ElggWidget $widget */
+ $widget->move($column, $position);
+ }
+ }
+ }
+ elgg_set_ignore_access(false);
+}
+
+elgg_register_event_handler('init', 'system', 'admin_init');
+elgg_register_event_handler('pagesetup', 'system', 'admin_pagesetup', 1000);
diff --git a/engine/lib/annotations.php b/engine/lib/annotations.php
index 7a9f2e3c6..5e9b530de 100644
--- a/engine/lib/annotations.php
+++ b/engine/lib/annotations.php
@@ -1,879 +1,618 @@
-<?php
- /**
- * Elgg annotations
- * Functions to manage object annotations.
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd <info@elgg.com>
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
-
- /**
- * Include the ElggExtender superclass
- *
- */
- require_once('extender.php');
-
- /**
- * ElggAnnotation
- *
- * An annotation is similar to metadata each entity can contain more than one of each annotation.
- *
- * @package Elgg
- * @subpackage Core
- * @author Curverider Ltd <info@elgg.com>
- */
- class ElggAnnotation extends ElggExtender
- {
-
- /**
- * Construct a new site object, optionally from a given id value or db row.
- *
- * @param mixed $id
- */
- function __construct($id = null)
- {
- $this->attributes = array();
-
- if (!empty($id)) {
- if ($id instanceof stdClass)
- $annotation = $id;
- else
- $annotation = get_annotation($id);
-
- if ($annotation) {
- $objarray = (array) $annotation;
- foreach($objarray as $key => $value) {
- $this->attributes[$key] = $value;
- }
- $this->attributes['type'] = "annotation";
- }
- }
- }
-
- /**
- * Class member get overloading
- *
- * @param string $name
- * @return mixed
- */
- function __get($name) {
- return $this->get($name);
- }
-
- /**
- * Class member set overloading
- *
- * @param string $name
- * @param mixed $value
- * @return void
- */
- function __set($name, $value) {
- return $this->set($name, $value);
- }
-
- /**
- * Save this instance
- *
- * @return int an object id
- */
- function save()
- {
- if ($this->id > 0)
- return update_annotation($this->id, $this->name, $this->value, $this->value_type, $this->owner_guid, $this->access_id);
- else
- {
- $this->id = create_annotation($this->entity_guid, $this->name, $this->value, $this->value_type, $this->owner_guid, $this->access_id);
- if (!$this->id) throw new IOException(sprintf(elgg_new('IOException:UnableToSaveNew'), get_class()));
- return $this->id;
- }
- }
-
- /**
- * Delete a given site.
- */
- function delete()
- {
- return delete_annotation($this->id);
- }
-
- /**
- * Get a url for this annotation.
- *
- * @return string
- */
- public function getURL() { return get_annotation_url($this->guid); }
-
- // SYSTEM LOG INTERFACE ////////////////////////////////////////////////////////////
-
- /**
- * For a given ID, return the object associated with it.
- * This is used by the river functionality primarily.
- * This is useful for checking access permissions etc on objects.
- */
- public function getObjectFromID($id) { return get_annotation($id); }
- }
-
- /**
- * Convert a database row to a new ElggAnnotation
- *
- * @param stdClass $row
- * @return stdClass or ElggAnnotation
- */
- function row_to_elggannotation($row)
- {
- if (!($row instanceof stdClass))
- return $row;
-
- return new ElggAnnotation($row);
- }
-
- /**
- * Get a specific annotation.
- *
- * @param int $annotation_id
- */
- function get_annotation($annotation_id)
- {
- global $CONFIG;
-
- $annotation_id = (int) $annotation_id;
- $access = get_access_sql_suffix("a");
-
- return row_to_elggannotation(get_data_row("SELECT a.*, n.string as name, v.string as value from {$CONFIG->dbprefix}annotations a JOIN {$CONFIG->dbprefix}metastrings n on a.name_id = n.id JOIN {$CONFIG->dbprefix}metastrings v on a.value_id = v.id where a.id=$annotation_id and $access"));
- }
-
- /**
- * Create a new annotation.
- *
- * @param int $entity_guid
- * @param string $name
- * @param string $value
- * @param string $value_type
- * @param int $owner_guid
- * @param int $access_id
- */
- function create_annotation($entity_guid, $name, $value, $value_type, $owner_guid, $access_id = ACCESS_PRIVATE)
- {
- global $CONFIG;
-
- $result = false;
-
- $entity_guid = (int)$entity_guid;
- //$name = sanitise_string(trim($name));
- //$value = sanitise_string(trim($value));
- $value_type = detect_extender_valuetype($value, sanitise_string(trim($value_type)));
-
- $owner_guid = (int)$owner_guid;
- if ($owner_guid==0) $owner_guid = get_loggedin_userid();
-
- $access_id = (int)$access_id;
-
- $time = time();
-
- // Add the metastring
- $value = add_metastring($value);
- if (!$value) return false;
-
- $name = add_metastring($name);
- if (!$name) return false;
-
- $entity = get_entity($entity_guid);
-
- if (trigger_elgg_event('annotate',$entity->type,$entity)) {
- system_log($entity, 'annotate');
-
- // If ok then add it
- $result = insert_data("INSERT into {$CONFIG->dbprefix}annotations (entity_guid, name_id, value_id, value_type, owner_guid, time_created, access_id) VALUES ($entity_guid,'$name',$value,'$value_type', $owner_guid, $time, $access_id)");
- if ($result!==false) {
- $obj = get_annotation($result);
- if (trigger_elgg_event('create', 'annotation', $obj)) {
- return true;
- } else {
- delete_annotation($result);
- }
- }
- }
-
- return $result;
- }
-
- /**
- * Update an annotation.
- *
- * @param int $annotation_id
- * @param string $name
- * @param string $value
- * @param string $value_type
- * @param int $owner_guid
- * @param int $access_id
- */
- function update_annotation($annotation_id, $name, $value, $value_type, $owner_guid, $access_id)
- {
- global $CONFIG;
-
- $annotation_id = (int)$annotation_id;
- $name = (trim($name));
- $value = (trim($value));
- $value_type = detect_extender_valuetype($value, sanitise_string(trim($value_type)));
-
- $owner_guid = (int)$owner_guid;
- if ($owner_guid==0) $owner_guid = get_loggedin_userid();
-
- $access_id = (int)$access_id;
-
- $access = get_access_sql_suffix();
-
- // Add the metastring
- $value = add_metastring($value);
- if (!$value) return false;
-
- $name = add_metastring($name);
- if (!$name) return false;
-
- // If ok then add it
- $result = update_data("UPDATE {$CONFIG->dbprefix}annotations set value_id='$value', value_type='$value_type', access_id=$access_id, owner_guid=$owner_guid where id=$annotation_id and name_id='$name' and $access");
- if ($result!==false) {
- $obj = get_annotation($annotation_id);
- if (trigger_elgg_event('update', 'annotation', $obj)) {
- return true;
- } else {
- delete_annotation($annotation_id);
- }
- }
-
- return $result;
- }
-
- /**
- * Get a list of annotations for a given object/user/annotation type.
- *
- * @param int|array $entity_guid
- * @param string $entity_type
- * @param string $entity_subtype
- * @param string $name
- * @param mixed $value
- * @param int|array $owner_guid
- * @param int $limit
- * @param int $offset
- * @param string $order_by
- */
- function get_annotations($entity_guid = 0, $entity_type = "", $entity_subtype = "", $name = "", $value = "", $owner_guid = 0, $limit = 10, $offset = 0, $order_by = "asc")
- {
- global $CONFIG;
-
- if (is_array($entity_guid)) {
- if (sizeof($entity_guid) > 0) {
- foreach($entity_guid as $key => $val) {
- $entity_guid[$key] = (int) $val;
- }
- } else {
- $entity_guid = 0;
- }
- } else {
- $entity_guid = (int)$entity_guid;
- }
- $entity_type = sanitise_string($entity_type);
- $entity_subtype = get_subtype_id($entity_type, $entity_subtype);
- if ($name)
- {
- $name = get_metastring_id($name);
-
- if ($name === false)
- $name = 0;
- }
- if ($value != "") $value = get_metastring_id($value);
- if (is_array($owner_guid)) {
- if (sizeof($owner_guid) > 0) {
- foreach($owner_guid as $key => $val) {
- $owner_guid[$key] = (int) $val;
- }
- } else {
- $owner_guid = 0;
- }
- } else {
- $owner_guid = (int)$owner_guid;
- }
- $limit = (int)$limit;
- $offset = (int)$offset;
- if($order_by == 'asc')
- $order_by = "a.time_created asc";
-
- if($order_by == 'desc')
- $order_by = "a.time_created desc";
-
- $where = array();
-
- if ($entity_guid != 0 && !is_array($entity_guid)) {
- $where[] = "a.entity_guid=$entity_guid";
- } else if (is_array($entity_guid)) {
- $where[] = "a.entity_guid in (". implode(",",$entity_guid) . ")";
- }
-
- if ($entity_type != "")
- $where[] = "e.type='$entity_type'";
-
- if ($entity_subtype != "")
- $where[] = "e.subtype='$entity_subtype'";
-
- if ($owner_guid != 0 && !is_array($owner_guid)) {
- $where[] = "a.owner_guid=$owner_guid";
- } else {
- if (is_array($owner_guid))
- $where[] = "a.owner_guid in (" . implode(",",$owner_guid) . ")";
- }
-
- if ($name !== "")
- $where[] = "a.name_id='$name'";
-
- if ($value != "")
- $where[] = "a.value_id='$value'";
-
- $query = "SELECT a.*, n.string as name, v.string as value from {$CONFIG->dbprefix}annotations a JOIN {$CONFIG->dbprefix}entities e on a.entity_guid = e.guid JOIN {$CONFIG->dbprefix}metastrings v on a.value_id=v.id JOIN {$CONFIG->dbprefix}metastrings n on a.name_id = n.id where ";
- foreach ($where as $w)
- $query .= " $w and ";
- $query .= get_access_sql_suffix("a"); // Add access controls
- $query .= " order by $order_by limit $offset,$limit"; // Add order and limit
- return get_data($query, "row_to_elggannotation");
-
- }
-
- /**
- * Return a list of entities which are annotated with a specific annotation.
- * These can be ordered by when the annotation was created/updated.
- *
- * @param string $entity_type Type of entity.
- * @param string $entity_subtype Subtype of entity.
- * @param string $name Name of annotation.
- * @param string $value Value of annotation.
- * @param int $owner_guid Owner.
- * @param int $group_guid Group container. Currently this is only supported if $entity_type == 'object'
- * @param int $limit Maximum number of results to return.
- * @param int $offset Place to start.
- * @param string $order_by How to order results.
- * @param boolean $count Whether to count entities rather than return them
- */
- function get_entities_from_annotations($entity_type = "", $entity_subtype = "", $name = "", $value = "", $owner_guid = 0, $group_guid = 0, $limit = 10, $offset = 0, $order_by = "asc", $count = false)
- {
- global $CONFIG;
-
- $entity_type = sanitise_string($entity_type);
- $entity_subtype = get_subtype_id($entity_type, $entity_subtype);
- if ($name)
- {
- $name = get_metastring_id($name);
-
- if ($name === false)
- $name = 0;
- }
- if ($value != "") $value = get_metastring_id($value);
- if (is_array($owner_guid)) {
- if (sizeof($owner_guid) > 0) {
- foreach($owner_guid as $key => $val) {
- $owner_guid[$key] = (int) $val;
- }
- } else {
- $owner_guid = 0;
- }
- } else {
- $owner_guid = (int)$owner_guid;
- }
- $group_guid = (int)$group_guid;
-
- $limit = (int)$limit;
- $offset = (int)$offset;
- if($order_by == 'asc')
- $order_by = "maxtime asc";
-
- if($order_by == 'desc')
- $order_by = "maxtime desc";
-
- $where = array();
-
- if ($entity_type != "")
- $where[] = "e.type='$entity_type'";
-
- if ($entity_subtype != "")
- $where[] = "e.subtype='$entity_subtype'";
-
- if ($owner_guid != 0 && !is_array($owner_guid)) {
- $where[] = "a.owner_guid=$owner_guid";
- } else {
- if (is_array($owner_guid))
- $where[] = "a.owner_guid in (" . implode(",",$owner_guid) . ")";
- }
-
- if (($group_guid != 0) && ($entity_type=='object'))
- $where[] = "e.container_guid = $group_guid";
-
- if ($name !== "")
- $where[] = "a.name_id='$name'";
-
- if ($value != "")
- $where[] = "a.value_id='$value'";
-
-
- if ($count) {
- $query = "SELECT count(distinct e.guid) as total ";
- } else {
- $query = "SELECT e.*, max(a.time_created) as maxtime ";
- }
- $query .= "from {$CONFIG->dbprefix}annotations a JOIN {$CONFIG->dbprefix}entities e on e.guid = a.entity_guid ";
- if ($value != "")
- $query .= " JOIN {$CONFIG->dbprefix}metastrings v on a.value_id=v.id";
-
- if (($group_guid != 0) && ($entity_type=='object')) $query .= "JOIN {$CONFIG->dbprefix}objects_entity o on o.guid = e.guid";
- $query .= " where";
-
- foreach ($where as $w)
- $query .= " $w and ";
- $query .= get_access_sql_suffix("a"); // Add access controls
- $query .= ' and ' . get_access_sql_suffix("e"); // Add access controls
-
- if ($count) {
- $row = get_data_row($query);
- return $row->total;
- } else {
- $query .= " group by a.entity_guid order by $order_by limit $offset,$limit"; // Add order and limit
- return get_data($query, "entity_row_to_elggstar");
- }
- }
-
- /**
- * Lists entities
- *
- * @see elgg_view_entity_list
- *
- * @param string $entity_type Type of entity.
- * @param string $entity_subtype Subtype of entity.
- * @param string $name Name of annotation.
- * @param string $value Value of annotation.
- * @param int $limit Maximum number of results to return.
- * @param int $owner_guid Owner.
- * @param int $group_guid Group container. Currently this is only supported if $entity_type == 'object'
- * @param boolean $asc Whether to list in ascending or descending order (default: desc)
- * @param boolean $fullview Whether to display the entities in full
- * @param boolean $viewtypetoggle Determines whether or not the 'gallery' view can be displayed (default: no)
- * @return string Formatted entity list
- */
- function list_entities_from_annotations($entity_type = "", $entity_subtype = "", $name = "", $value = "", $limit = 10, $owner_guid = 0, $group_guid = 0, $asc = false, $fullview = true, $viewtypetoggle = false) {
-
- if ($asc) {
- $asc = "asc";
- } else {
- $asc = "desc";
- }
- $count = get_entities_from_annotations($entity_type, $entity_subtype, $name, $value, $owner_guid, $group_guid, null, null, $asc, true);
- $offset = (int) get_input("offset",0);
- $entities = get_entities_from_annotations($entity_type, $entity_subtype, $name, $value, $owner_guid, $group_guid, $limit, $offset, $asc);
-
- return elgg_view_entity_list($entities, $count, $offset, $limit, $fullview, $viewtypetoggle);
-
- }
-
- /**
- * Returns a human-readable list of annotations on a particular entity.
- *
- * @param int $entity_guid The entity GUID
- * @param string $name The name of the kind of annotation
- * @param int $limit The number of annotations to display at once
- * @param true|false $asc Whether or not the annotations are displayed in ascending order. (Default: true)
- * @return string HTML (etc) version of the annotation list
- */
- function list_annotations($entity_guid, $name = "", $limit = 25, $asc = true) {
-
- if ($asc) {
- $asc = "asc";
- } else {
- $asc = "desc";
- }
- $count = count_annotations($entity_guid, "", "", $name);
- $offset = (int) get_input("annoff",0);
- $annotations = get_annotations($entity_guid, "", "", $name, "", "", $limit, $offset, $asc);
-
- return elgg_view_annotation_list($annotations, $count, $offset, $limit);
-
- }
-
- /**
- * Return the sum of a given integer annotation.
- *
- * @param $entity_guid int
- * @param $entity_type string
- * @param $entity_subtype string
- * @param $name string
- */
- function get_annotations_sum($entity_guid, $entity_type = "", $entity_subtype = "", $name = "")
- {
- return __get_annotations_calculate_x("sum", $entity_guid, $entity_type, $entity_subtype, $name);
- }
-
- /**
- * Return the max of a given integer annotation.
- *
- * @param $entity_guid int
- * @param $entity_type string
- * @param $entity_subtype string
- * @param $name string
- */
- function get_annotations_max($entity_guid, $entity_type = "", $entity_subtype = "", $name = "")
- {
- return __get_annotations_calculate_x("max", $entity_guid, $entity_type, $entity_subtype, $name);
- }
-
- /**
- * Return the minumum of a given integer annotation.
- *
- * @param $entity_guid int
- * @param $entity_type string
- * @param $entity_subtype string
- * @param $name string
- */
- function get_annotations_min($entity_guid, $entity_type = "", $entity_subtype = "", $name = "")
- {
- return __get_annotations_calculate_x("min", $entity_guid, $entity_type, $entity_subtype, $name);
- }
-
- /**
- * Return the average of a given integer annotation.
- *
- * @param $entity_guid int
- * @param $entity_type string
- * @param $entity_subtype string
- * @param $name string
- */
- function get_annotations_avg($entity_guid, $entity_type = "", $entity_subtype = "", $name = "")
- {
- return __get_annotations_calculate_x("avg", $entity_guid, $entity_type, $entity_subtype, $name);
- }
-
- /**
- * Count the number of annotations based on search parameters
- *
- * @param int $entity_guid
- * @param string $entity_type
- * @param string $entity_subtype
- * @param string $name
- */
- function count_annotations($entity_guid = 0, $entity_type = "", $entity_subtype = "", $name = "", $value = "", $value_type = "", $owner_guid = 0)
- {
- return __get_annotations_calculate_x("count", $entity_guid, $entity_type, $entity_subtype, $name);
- }
-
- /**
- * Perform a mathmatical calculation on integer annotations.
- *
- * @param $sum string
- * @param $entity_id int
- * @param $entity_type string
- * @param $entity_subtype string
- * @param $name string
- */
- function __get_annotations_calculate_x($sum = "avg", $entity_guid, $entity_type = "", $entity_subtype = "", $name = "")
- {
- global $CONFIG;
-
- $sum = sanitise_string($sum);
- $entity_guid = (int)$entity_guid;
- $entity_type = sanitise_string($entity_type);
- $entity_subtype = get_subtype_id($entity_type, $entity_subtype);
- $name = get_metastring_id($name);
-
- if (empty($name)) return 0;
-
- $where = array();
-
- if ($entity_guid)
- $where[] = "e.guid=$entity_guid";
- if ($entity_type!="")
- $where[] = "e.type='$entity_type'";
- if ($entity_subtype)
- $where[] = "e.subtype=$entity_subtype";
- if ($name!="")
- $where[] = "a.name_id='$name'";
-
- if ($sum != "count")
- $where[] = "a.value_type='integer'"; // Limit on integer types
-
- $query = "SELECT $sum(ms.string) as sum from {$CONFIG->dbprefix}annotations a JOIN {$CONFIG->dbprefix}entities e on a.entity_guid = e.guid JOIN {$CONFIG->dbprefix}metastrings ms on a.value_id=ms.id WHERE ";
- foreach ($where as $w)
- $query .= " $w and ";
- $query .= get_access_sql_suffix("a"); // now add access
- $query .= ' and ' . get_access_sql_suffix("e"); // now add access
-
- $row = get_data_row($query);
- if ($row)
- return $row->sum;
-
- return false;
- }
-
- /**
- * Get entities ordered by a mathematical calculation
- *
- * @param $sum string
- * @param $entity_type string
- * @param $entity_subtype string
- * @param $name string
- * @param $mdname string
- * @param $mdvalue string
- * @param $limit int
- * @param string $orderdir Default: asc - the sort order
- * @return unknown
- */
- function __get_entities_from_annotations_calculate_x($sum = "sum", $entity_type = "", $entity_subtype = "", $name = "", $mdname = '', $mdvalue = '', $owner_guid = 0, $limit = 10, $offset = 0, $orderdir = 'desc', $count = false)
- {
- global $CONFIG;
-
- $sum = sanitise_string($sum);
- $entity_type = sanitise_string($entity_type);
- $entity_subtype = get_subtype_id($entity_type, $entity_subtype);
- $name = get_metastring_id($name);
- $limit = (int) $limit;
- $offset = (int) $offset;
- $owner_guid = (int) $owner_guid;
- if (!empty($mdname) && !empty($mdvalue)) {
- $meta_n = get_metastring_id($mdname);
- $meta_v = get_metastring_id($mdvalue);
- }
-
- if (empty($name)) return 0;
-
- $where = array();
-
- if ($entity_type!="")
- $where[] = "e.type='$entity_type'";
- if ($owner_guid > 0)
- $where[] = "e.container_guid = $owner_guid";
- if ($entity_subtype)
- $where[] = "e.subtype=$entity_subtype";
- if ($name!="")
- $where[] = "a.name_id='$name'";
-
- if (!empty($mdname) && !empty($mdvalue)) {
- if ($mdname!="")
- $where[] = "m.name_id='$meta_n'";
- if ($mdvalue!="")
- $where[] = "m.value_id='$meta_v'";
- }
-
- if ($sum != "count")
- $where[] = "a.value_type='integer'"; // Limit on integer types
-
- if (!$count) {
- $query = "SELECT distinct e.*, $sum(ms.string) as sum ";
- } else {
- $query = "SELECT count(distinct e.guid) as num, $sum(ms.string) as sum ";
- }
- $query .= " from {$CONFIG->dbprefix}entities e JOIN {$CONFIG->dbprefix}annotations a on a.entity_guid = e.guid JOIN {$CONFIG->dbprefix}metastrings ms on a.value_id=ms.id ";
-
- if (!empty($mdname) && !empty($mdvalue)) {
- $query .= " JOIN {$CONFIG->dbprefix}metadata m on m.entity_guid = e.guid ";
- }
-
- $query .= " WHERE ";
- foreach ($where as $w)
- $query .= " $w and ";
- $query .= get_access_sql_suffix("a"); // now add access
- $query .= ' and ' . get_access_sql_suffix("e"); // now add access
- if (!$count) $query .= ' group by e.guid';
-
- if (!$count) {
- $query .= ' order by sum ' . $orderdir;
- $query .= ' limit ' . $offset . ' , ' . $limit;
- return get_data($query, "entity_row_to_elggstar");
- } else {
- if ($row = get_data_row($query)) {
- return $row->num;
- }
- }
- return false;
- }
-
- /**
- * Returns entities ordered by the sum of an annotation
- *
- * @param unknown_type $entity_type
- * @param unknown_type $entity_subtype
- * @param unknown_type $name
- * @param string $mdname
- * @param string $mdvalue
- * @param unknown_type $owner_guid
- * @param int $limit
- * @param int $offset
- * @param true|false $count
- * @return unknown
- */
- function get_entities_from_annotation_count($entity_type = "", $entity_subtype = "", $name = "", $mdname = '', $mdvalue = '', $owner_guid = 0, $limit = 10, $offset = 0, $orderdir = 'desc', $count = false) {
- return __get_entities_from_annotations_calculate_x('sum',$entity_type,$entity_subtype,$name,$mdname, $mdvalue, $owner_guid,$limit, $offset, $orderdir, $count);
- }
-
- /**
- * Lists entities by the totals of a particular kind of annotation
- *
- * @param string $entity_type Type of entity.
- * @param string $entity_subtype Subtype of entity.
- * @param string $name Name of annotation.
- * @param int $limit Maximum number of results to return.
- * @param int $owner_guid Owner.
- * @param int $group_guid Group container. Currently this is only supported if $entity_type == 'object'
- * @param boolean $asc Whether to list in ascending or descending order (default: desc)
- * @param boolean $fullview Whether to display the entities in full
- * @param boolean $viewtypetoggle Determines whether or not the 'gallery' view can be displayed (default: no)
- * @return string Formatted entity list
- */
- function list_entities_from_annotation_count($entity_type = "", $entity_subtype = "", $name = "", $limit = 10, $owner_guid = 0, $group_guid = 0, $asc = false, $fullview = true, $viewtypetoggle = false, $pagination = true, $orderdir = 'desc') {
-
- if ($asc) {
- $asc = "asc";
- } else {
- $asc = "desc";
- }
-
- $offset = (int) get_input("offset",0);
- $count = get_entities_from_annotation_count($entity_type, $entity_subtype, $name, '', '', $owner_guid, $limit, $offset, $orderdir, true);
- $entities = get_entities_from_annotation_count($entity_type, $entity_subtype, $name, '', '', $owner_guid, $limit, $offset, $orderdir, false);
-
- return elgg_view_entity_list($entities, $count, $offset, $limit, $fullview, $viewtypetoggle, $pagination);
-
- }
-
- /**
- * Lists entities by the totals of a particular kind of annotation AND the value of a piece of metadata
- *
- * @param string $entity_type Type of entity.
- * @param string $entity_subtype Subtype of entity.
- * @param string $name Name of annotation.
- * @param string $mdname Metadata name
- * @param string $mdvalue Metadata value
- * @param int $limit Maximum number of results to return.
- * @param int $owner_guid Owner.
- * @param int $group_guid Group container. Currently this is only supported if $entity_type == 'object'
- * @param boolean $asc Whether to list in ascending or descending order (default: desc)
- * @param boolean $fullview Whether to display the entities in full
- * @param boolean $viewtypetoggle Determines whether or not the 'gallery' view can be displayed (default: no)
- * @return string Formatted entity list
- */
- function list_entities_from_annotation_count_by_metadata($entity_type = "", $entity_subtype = "", $name = "", $mdname = '', $mdvalue = '', $limit = 10, $owner_guid = 0, $group_guid = 0, $asc = false, $fullview = true, $viewtypetoggle = false, $pagination = true, $orderdir = 'desc') {
-
- if ($asc) {
- $asc = "asc";
- } else {
- $asc = "desc";
- }
-
- $offset = (int) get_input("offset",0);
- $count = get_entities_from_annotation_count($entity_type, $entity_subtype, $name, $mdname, $mdvalue, $owner_guid, $limit, $offset, $orderdir, true);
- $entities = get_entities_from_annotation_count($entity_type, $entity_subtype, $name, $mdname, $mdvalue, $owner_guid, $limit, $offset, $orderdir, false);
-
- return elgg_view_entity_list($entities, $count, $offset, $limit, $fullview, $viewtypetoggle, $pagination);
-
- }
-
- /**
- * Delete a given annotation.
- *
- * @param $id int The id
- */
- function delete_annotation($id)
- {
- global $CONFIG;
-
- $id = (int)$id;
-
- $access = get_access_sql_suffix();
-
- return delete_data("DELETE from {$CONFIG->dbprefix}annotations where id=$id and $access");
- }
-
- /**
- * Clear all the annotations for a given entity, assuming you have access to that metadata.
- *
- * @param int $guid
- */
- function clear_annotations($guid, $name = "")
- {
- global $CONFIG;
-
- $guid = (int)$guid;
-
- if (!empty($name))
- $name = get_metastring_id($name);
-
- $entity_guid = (int) $guid;
- if ($entity = get_entity($entity_guid)) {
- if ($entity->canEdit()) {
-
- $where = array();
-
- if ($name != "")
- $where[] = " name_id='$name'";
-
- $query = "DELETE from {$CONFIG->dbprefix}annotations where entity_guid=$guid ";
- foreach ($where as $w)
- $query .= " and $w";
-
- return delete_data($query);
-
- }
- }
- }
-
- /**
- * Handler called by trigger_plugin_hook on the "export" event.
- */
- function export_annotation_plugin_hook($hook, $entity_type, $returnvalue, $params)
- {
- // Sanity check values
- if ((!is_array($params)) && (!isset($params['guid'])))
- throw new InvalidParameterException(elgg_echo('InvalidParameterException:GUIDNotForExport'));
-
- if (!is_array($returnvalue))
- throw new InvalidParameterException(elgg_echo('InvalidParameterException:NonArrayReturnValue'));
-
- $guid = (int)$params['guid'];
- $name = $params['name'];
-
- $result = get_annotations($guid);
-
- if ($result)
- {
- foreach ($result as $r)
- $returnvalue[] = $r->export();
- }
-
- return $returnvalue;
- }
-
- /**
- * Get the URL for this item of metadata, by default this links to the export handler in the current view.
- *
- * @param int $id
- */
- function get_annotation_url($id)
- {
- $id = (int)$id;
-
- if ($extender = get_annotation($id)) {
- return get_extender_url($extender);
- }
- return false;
- }
-
-
- /**
- * Register an annotation url handler.
- *
- * @param string $function_name The function.
- * @param string $extender_name The name, default 'all'.
- */
- function register_annotation_url_handler($function_name, $extender_name = "all") {
- return register_extender_url_handler($function_name, 'annotation', $extender_name);
- }
-
- /** Register the hook */
- register_plugin_hook("export", "all", "export_annotation_plugin_hook", 2);
-?> \ No newline at end of file
+<?php
+/**
+ * Elgg annotations
+ * Functions to manage object annotations.
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+/**
+ * Convert a database row to a new ElggAnnotation
+ *
+ * @param stdClass $row Db row result object
+ *
+ * @return ElggAnnotation
+ * @access private
+ */
+function row_to_elggannotation($row) {
+ if (!($row instanceof stdClass)) {
+ // @todo should throw in this case?
+ return $row;
+ }
+
+ return new ElggAnnotation($row);
+}
+
+/**
+ * Get a specific annotation by its id.
+ * If you want multiple annotation objects, use
+ * {@link elgg_get_annotations()}.
+ *
+ * @param int $id The id of the annotation object being retrieved.
+ *
+ * @return ElggAnnotation|false
+ */
+function elgg_get_annotation_from_id($id) {
+ return elgg_get_metastring_based_object_from_id($id, 'annotations');
+}
+
+/**
+ * Deletes an annotation using its ID.
+ *
+ * @param int $id The annotation ID to delete.
+ * @return bool
+ */
+function elgg_delete_annotation_by_id($id) {
+ $annotation = elgg_get_annotation_from_id($id);
+ if (!$annotation) {
+ return false;
+ }
+ return $annotation->delete();
+}
+
+/**
+ * Create a new annotation.
+ *
+ * @param int $entity_guid Entity Guid
+ * @param string $name Name of annotation
+ * @param string $value Value of annotation
+ * @param string $value_type Type of value (default is auto detection)
+ * @param int $owner_guid Owner of annotation (default is logged in user)
+ * @param int $access_id Access level of annotation
+ *
+ * @return int|bool id on success or false on failure
+ */
+function create_annotation($entity_guid, $name, $value, $value_type = '',
+$owner_guid = 0, $access_id = ACCESS_PRIVATE) {
+ global $CONFIG;
+
+ $result = false;
+
+ $entity_guid = (int)$entity_guid;
+ //$name = sanitise_string(trim($name));
+ //$value = sanitise_string(trim($value));
+ $value_type = detect_extender_valuetype($value, sanitise_string(trim($value_type)));
+
+ $owner_guid = (int)$owner_guid;
+ if ($owner_guid == 0) {
+ $owner_guid = elgg_get_logged_in_user_guid();
+ }
+
+ $access_id = (int)$access_id;
+ $time = time();
+
+ // Add the metastring
+ $value = add_metastring($value);
+ if (!$value) {
+ return false;
+ }
+
+ $name = add_metastring($name);
+ if (!$name) {
+ return false;
+ }
+
+ $entity = get_entity($entity_guid);
+
+ if (elgg_trigger_event('annotate', $entity->type, $entity)) {
+ // If ok then add it
+ $result = insert_data("INSERT into {$CONFIG->dbprefix}annotations
+ (entity_guid, name_id, value_id, value_type, owner_guid, time_created, access_id) VALUES
+ ($entity_guid,'$name',$value,'$value_type', $owner_guid, $time, $access_id)");
+
+ if ($result !== false) {
+ $obj = elgg_get_annotation_from_id($result);
+ if (elgg_trigger_event('create', 'annotation', $obj)) {
+ return $result;
+ } else {
+ // plugin returned false to reject annotation
+ elgg_delete_annotation_by_id($result);
+ return FALSE;
+ }
+ }
+ }
+
+ return $result;
+}
+
+/**
+ * Update an annotation.
+ *
+ * @param int $annotation_id Annotation ID
+ * @param string $name Name of annotation
+ * @param string $value Value of annotation
+ * @param string $value_type Type of value
+ * @param int $owner_guid Owner of annotation
+ * @param int $access_id Access level of annotation
+ *
+ * @return bool
+ */
+function update_annotation($annotation_id, $name, $value, $value_type, $owner_guid, $access_id) {
+ global $CONFIG;
+
+ $annotation_id = (int)$annotation_id;
+ $name = (trim($name));
+ $value = (trim($value));
+ $value_type = detect_extender_valuetype($value, sanitise_string(trim($value_type)));
+
+ $owner_guid = (int)$owner_guid;
+ if ($owner_guid == 0) {
+ $owner_guid = elgg_get_logged_in_user_guid();
+ }
+
+ $access_id = (int)$access_id;
+
+ $access = get_access_sql_suffix();
+
+ // Add the metastring
+ $value = add_metastring($value);
+ if (!$value) {
+ return false;
+ }
+
+ $name = add_metastring($name);
+ if (!$name) {
+ return false;
+ }
+
+ // If ok then add it
+ $result = update_data("UPDATE {$CONFIG->dbprefix}annotations
+ set name_id='$name', value_id='$value', value_type='$value_type', access_id=$access_id, owner_guid=$owner_guid
+ where id=$annotation_id and $access");
+
+ if ($result !== false) {
+ // @todo add plugin hook that sends old and new annotation information before db access
+ $obj = elgg_get_annotation_from_id($annotation_id);
+ elgg_trigger_event('update', 'annotation', $obj);
+ }
+
+ return $result;
+}
+
+/**
+ * Returns annotations. Accepts all elgg_get_entities() options for entity
+ * restraints.
+ *
+ * @see elgg_get_entities
+ *
+ * @param array $options Array in format:
+ *
+ * annotation_names => NULL|ARR Annotation names
+ * annotation_values => NULL|ARR Annotation values
+ * annotation_ids => NULL|ARR annotation ids
+ * annotation_case_sensitive => BOOL Overall Case sensitive
+ * annotation_owner_guids => NULL|ARR guids for annotation owners
+ * annotation_created_time_lower => INT Lower limit for created time.
+ * annotation_created_time_upper => INT Upper limit for created time.
+ * annotation_calculation => STR Perform the MySQL function on the annotation values returned.
+ * Do not confuse this "annotation_calculation" option with the
+ * "calculation" option to elgg_get_entities_from_annotation_calculation().
+ * The "annotation_calculation" option causes this function to
+ * return the result of performing a mathematical calculation on
+ * all annotations that match the query instead of ElggAnnotation
+ * objects.
+ * See the docs for elgg_get_entities_from_annotation_calculation()
+ * for the proper use of the "calculation" option.
+ *
+ *
+ * @return ElggAnnotation[]|mixed
+ * @since 1.8.0
+ */
+function elgg_get_annotations(array $options = array()) {
+
+ // @todo remove support for count shortcut - see #4393
+ if (isset($options['__egefac']) && $options['__egefac']) {
+ unset($options['__egefac']);
+ } else {
+ // support shortcut of 'count' => true for 'annotation_calculation' => 'count'
+ if (isset($options['count']) && $options['count']) {
+ $options['annotation_calculation'] = 'count';
+ unset($options['count']);
+ }
+ }
+
+ $options['metastring_type'] = 'annotations';
+ return elgg_get_metastring_based_objects($options);
+}
+
+/**
+ * Deletes annotations based on $options.
+ *
+ * @warning Unlike elgg_get_annotations() this will not accept an empty options array!
+ * This requires at least one constraint: annotation_owner_guid(s),
+ * annotation_name(s), annotation_value(s), or guid(s) must be set.
+ *
+ * @param array $options An options array. {@See elgg_get_annotations()}
+ * @return bool|null true on success, false on failure, null if no annotations to delete.
+ * @since 1.8.0
+ */
+function elgg_delete_annotations(array $options) {
+ if (!elgg_is_valid_options_for_batch_operation($options, 'annotations')) {
+ return false;
+ }
+
+ $options['metastring_type'] = 'annotations';
+ return elgg_batch_metastring_based_objects($options, 'elgg_batch_delete_callback', false);
+}
+
+/**
+ * Disables annotations based on $options.
+ *
+ * @warning Unlike elgg_get_annotations() this will not accept an empty options array!
+ *
+ * @param array $options An options array. {@See elgg_get_annotations()}
+ * @return bool|null true on success, false on failure, null if no annotations disabled.
+ * @since 1.8.0
+ */
+function elgg_disable_annotations(array $options) {
+ if (!elgg_is_valid_options_for_batch_operation($options, 'annotations')) {
+ return false;
+ }
+
+ // if we can see hidden (disabled) we need to use the offset
+ // otherwise we risk an infinite loop if there are more than 50
+ $inc_offset = access_get_show_hidden_status();
+
+ $options['metastring_type'] = 'annotations';
+ return elgg_batch_metastring_based_objects($options, 'elgg_batch_disable_callback', $inc_offset);
+}
+
+/**
+ * Enables annotations based on $options.
+ *
+ * @warning Unlike elgg_get_annotations() this will not accept an empty options array!
+ *
+ * @warning In order to enable annotations, you must first use
+ * {@link access_show_hidden_entities()}.
+ *
+ * @param array $options An options array. {@See elgg_get_annotations()}
+ * @return bool|null true on success, false on failure, null if no metadata enabled.
+ * @since 1.8.0
+ */
+function elgg_enable_annotations(array $options) {
+ if (!$options || !is_array($options)) {
+ return false;
+ }
+
+ $options['metastring_type'] = 'annotations';
+ return elgg_batch_metastring_based_objects($options, 'elgg_batch_enable_callback');
+}
+
+/**
+ * Returns a rendered list of annotations with pagination.
+ *
+ * @param array $options Annotation getter and display options.
+ * {@see elgg_get_annotations()} and {@see elgg_list_entities()}.
+ *
+ * @return string The list of entities
+ * @since 1.8.0
+ */
+function elgg_list_annotations($options) {
+ $defaults = array(
+ 'limit' => 25,
+ 'offset' => (int) max(get_input('annoff', 0), 0),
+ );
+
+ $options = array_merge($defaults, $options);
+
+ return elgg_list_entities($options, 'elgg_get_annotations', 'elgg_view_annotation_list');
+}
+
+/**
+ * Entities interfaces
+ */
+
+/**
+ * Returns entities based upon annotations. Also accepts all options available
+ * to elgg_get_entities() and elgg_get_entities_from_metadata().
+ *
+ * Entity creation time is selected as maxtime. To sort based upon
+ * this, pass 'order_by' => 'maxtime asc' || 'maxtime desc'
+ *
+ * @see elgg_get_entities
+ * @see elgg_get_entities_from_metadata
+ *
+ * @param array $options Array in format:
+ *
+ * annotation_names => NULL|ARR annotations names
+ *
+ * annotation_values => NULL|ARR annotations values
+ *
+ * annotation_name_value_pairs => NULL|ARR (name = 'name', value => 'value',
+ * 'operator' => '=', 'case_sensitive' => TRUE) entries.
+ * Currently if multiple values are sent via an array (value => array('value1', 'value2')
+ * the pair's operator will be forced to "IN".
+ *
+ * annotation_name_value_pairs_operator => NULL|STR The operator to use for combining
+ * (name = value) OPERATOR (name = value); default AND
+ *
+ * annotation_case_sensitive => BOOL Overall Case sensitive
+ *
+ * order_by_annotation => NULL|ARR (array('name' => 'annotation_text1', 'direction' => ASC|DESC,
+ * 'as' => text|integer),
+ *
+ * Also supports array('name' => 'annotation_text1')
+ *
+ * annotation_owner_guids => NULL|ARR guids for annotaiton owners
+ *
+ * @return mixed If count, int. If not count, array. false on errors.
+ * @since 1.7.0
+ */
+function elgg_get_entities_from_annotations(array $options = array()) {
+ $defaults = array(
+ 'annotation_names' => ELGG_ENTITIES_ANY_VALUE,
+ 'annotation_values' => ELGG_ENTITIES_ANY_VALUE,
+ 'annotation_name_value_pairs' => ELGG_ENTITIES_ANY_VALUE,
+
+ 'annotation_name_value_pairs_operator' => 'AND',
+ 'annotation_case_sensitive' => TRUE,
+ 'order_by_annotation' => array(),
+
+ 'annotation_created_time_lower' => ELGG_ENTITIES_ANY_VALUE,
+ 'annotation_created_time_upper' => ELGG_ENTITIES_ANY_VALUE,
+
+ 'annotation_owner_guids' => ELGG_ENTITIES_ANY_VALUE,
+
+ 'order_by' => 'maxtime desc',
+ 'group_by' => 'a.entity_guid'
+ );
+
+ $options = array_merge($defaults, $options);
+
+ $singulars = array('annotation_name', 'annotation_value',
+ 'annotation_name_value_pair', 'annotation_owner_guid');
+
+ $options = elgg_normalise_plural_options_array($options, $singulars);
+ $options = elgg_entities_get_metastrings_options('annotation', $options);
+
+ if (!$options) {
+ return false;
+ }
+
+ // special sorting for annotations
+ //@todo overrides other sorting
+ $options['selects'][] = "max(n_table.time_created) as maxtime";
+ $options['group_by'] = 'n_table.entity_guid';
+
+ $time_wheres = elgg_get_entity_time_where_sql('a', $options['annotation_created_time_upper'],
+ $options['annotation_created_time_lower']);
+
+ if ($time_wheres) {
+ $options['wheres'] = array_merge($options['wheres'], $time_wheres);
+ }
+
+ return elgg_get_entities_from_metadata($options);
+}
+
+/**
+ * Returns a viewable list of entities from annotations.
+ *
+ * @param array $options Options array
+ *
+ * @see elgg_get_entities_from_annotations()
+ * @see elgg_list_entities()
+ *
+ * @return string
+ */
+function elgg_list_entities_from_annotations($options = array()) {
+ return elgg_list_entities($options, 'elgg_get_entities_from_annotations');
+}
+
+/**
+ * Get entities ordered by a mathematical calculation on annotation values
+ *
+ * @param array $options An options array:
+ * 'calculation' => The calculation to use. Must be a valid MySQL function.
+ * Defaults to sum. Result selected as 'annotation_calculation'.
+ * Don't confuse this "calculation" option with the
+ * "annotation_calculation" option to elgg_get_annotations().
+ * This "calculation" option is applied to each entity's set of
+ * annotations and is selected as annotation_calculation for that row.
+ * See the docs for elgg_get_annotations() for proper use of the
+ * "annotation_calculation" option.
+ * 'order_by' => The order for the sorting. Defaults to 'annotation_calculation desc'.
+ * 'annotation_names' => The names of annotations on the entity.
+ * 'annotation_values' => The values of annotations on the entity.
+ *
+ * 'metadata_names' => The name of metadata on the entity.
+ * 'metadata_values' => The value of metadata on the entitiy.
+ *
+ * @return mixed If count, int. If not count, array. false on errors.
+ */
+function elgg_get_entities_from_annotation_calculation($options) {
+ $db_prefix = elgg_get_config('dbprefix');
+ $defaults = array(
+ 'calculation' => 'sum',
+ 'order_by' => 'annotation_calculation desc'
+ );
+
+ $options = array_merge($defaults, $options);
+
+ $function = sanitize_string(elgg_extract('calculation', $options, 'sum', false));
+
+ // you must cast this as an int or it sorts wrong.
+ $options['selects'][] = 'e.*';
+ $options['selects'][] = "$function(cast(a_msv.string as signed)) as annotation_calculation";
+
+ // need our own join to get the values because the lower level functions don't
+ // add all the joins if it's a different callback.
+ $options['joins'][] = "JOIN {$db_prefix}metastrings a_msv ON n_table.value_id = a_msv.id";
+
+ // don't need access control because it's taken care of by elgg_get_annotations.
+ $options['group_by'] = 'n_table.entity_guid';
+
+ $options['callback'] = 'entity_row_to_elggstar';
+
+ // see #4393
+ // @todo remove after the 'count' shortcut is removed from elgg_get_annotations()
+ $options['__egefac'] = true;
+
+ return elgg_get_annotations($options);
+}
+
+/**
+ * List entities from an annotation calculation.
+ *
+ * @see elgg_get_entities_from_annotation_calculation()
+ *
+ * @param array $options An options array.
+ *
+ * @return string
+ */
+function elgg_list_entities_from_annotation_calculation($options) {
+ $defaults = array(
+ 'calculation' => 'sum',
+ 'order_by' => 'annotation_calculation desc'
+ );
+ $options = array_merge($defaults, $options);
+
+ return elgg_list_entities($options, 'elgg_get_entities_from_annotation_calculation');
+}
+
+/**
+ * Export the annotations for the specified entity
+ *
+ * @param string $hook 'export'
+ * @param string $type 'all'
+ * @param mixed $returnvalue Default return value
+ * @param mixed $params Parameters determining what annotations to export
+ *
+ * @elgg_plugin_hook export all
+ *
+ * @return array
+ * @throws InvalidParameterException
+ * @access private
+ */
+function export_annotation_plugin_hook($hook, $type, $returnvalue, $params) {
+ // Sanity check values
+ if ((!is_array($params)) && (!isset($params['guid']))) {
+ throw new InvalidParameterException(elgg_echo('InvalidParameterException:GUIDNotForExport'));
+ }
+
+ if (!is_array($returnvalue)) {
+ throw new InvalidParameterException(elgg_echo('InvalidParameterException:NonArrayReturnValue'));
+ }
+
+ $guid = (int)$params['guid'];
+ $options = array('guid' => $guid, 'limit' => 0);
+ if (isset($params['name'])) {
+ $options['annotation_name'] = $params['name'];
+ }
+
+ $result = elgg_get_annotations($options);
+
+ if ($result) {
+ foreach ($result as $r) {
+ $returnvalue[] = $r->export();
+ }
+ }
+
+ return $returnvalue;
+}
+
+/**
+ * Get the URL for this item of metadata, by default this links to the
+ * export handler in the current view.
+ *
+ * @param int $id Annotation id
+ *
+ * @return mixed
+ */
+function get_annotation_url($id) {
+ $id = (int)$id;
+
+ if ($extender = elgg_get_annotation_from_id($id)) {
+ return get_extender_url($extender);
+ }
+ return false;
+}
+
+/**
+ * Check to see if a user has already created an annotation on an object
+ *
+ * @param int $entity_guid Entity guid
+ * @param string $annotation_type Type of annotation
+ * @param int $owner_guid Defaults to logged in user.
+ *
+ * @return bool
+ * @since 1.8.0
+ */
+function elgg_annotation_exists($entity_guid, $annotation_type, $owner_guid = NULL) {
+ global $CONFIG;
+
+ if (!$owner_guid && !($owner_guid = elgg_get_logged_in_user_guid())) {
+ return FALSE;
+ }
+
+ $entity_guid = sanitize_int($entity_guid);
+ $owner_guid = sanitize_int($owner_guid);
+ $annotation_type = sanitize_string($annotation_type);
+
+ $sql = "SELECT a.id FROM {$CONFIG->dbprefix}annotations a" .
+ " JOIN {$CONFIG->dbprefix}metastrings m ON a.name_id = m.id" .
+ " WHERE a.owner_guid = $owner_guid AND a.entity_guid = $entity_guid" .
+ " AND m.string = '$annotation_type'";
+
+ if (get_data_row($sql)) {
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+/**
+ * Return the URL for a comment
+ *
+ * @param ElggAnnotation $comment The comment object
+ * @return string
+ * @access private
+ */
+function elgg_comment_url_handler(ElggAnnotation $comment) {
+ $entity = $comment->getEntity();
+ if ($entity) {
+ return $entity->getURL() . '#item-annotation-' . $comment->id;
+ }
+ return "";
+}
+
+/**
+ * Register an annotation url handler.
+ *
+ * @param string $extender_name The name, default 'all'.
+ * @param string $function_name The function.
+ *
+ * @return string
+ */
+function elgg_register_annotation_url_handler($extender_name = "all", $function_name) {
+ return elgg_register_extender_url_handler('annotation', $extender_name, $function_name);
+}
+
+/**
+ * Register annotation unit tests
+ *
+ * @param string $hook
+ * @param string $type
+ * @param array $value
+ * @param array $params
+ * @return array
+ * @access private
+ */
+function annotations_test($hook, $type, $value, $params) {
+ global $CONFIG;
+ $value[] = $CONFIG->path . 'engine/tests/api/annotations.php';
+ return $value;
+}
+
+/**
+ * Initialize the annotation library
+ * @access private
+ */
+function elgg_annotations_init() {
+ elgg_register_annotation_url_handler('generic_comment', 'elgg_comment_url_handler');
+
+ elgg_register_plugin_hook_handler("export", "all", "export_annotation_plugin_hook", 2);
+ elgg_register_plugin_hook_handler('unit_test', 'system', 'annotations_test');
+}
+
+elgg_register_event_handler('init', 'system', 'elgg_annotations_init');
diff --git a/engine/lib/api.php b/engine/lib/api.php
deleted file mode 100644
index 5a754e99a..000000000
--- a/engine/lib/api.php
+++ /dev/null
@@ -1,1221 +0,0 @@
-<?php
- /**
- * Elgg API
- * Functions and objects which make up the API engine.
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd <info@elgg.com>
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
-
- // Result classes /////////////////////////////////////////////////////////////////////////
-
- /**
- * GenericResult Result superclass.
- *
- * @author Curverider Ltd <info@elgg.com>
- * @package Elgg
- * @subpackage Core
- */
- abstract class GenericResult
- {
- /**
- * The status of the result.
- * @var int
- */
- private $status_code;
-
- /**
- * Message returned along with the status which is almost always an error message.
- * This must be human readable, understandable and localised.
- * @var string
- */
- private $message;
-
- /**
- * Result store.
- * Attach result specific informaton here.
- *
- * @var mixed. Should probably be an object of some sort.
- */
- private $result;
-
- /**
- * Set a status code and optional message.
- *
- * @param int $status The status code.
- * @param string $message The message.
- */
- protected function setStatusCode($status, $message = "")
- {
- $this->status_code = $status;
- $this->message = $message;
- }
-
- /**
- * Set the result.
- *
- * @param mixed $result
- */
- protected function setResult($result) { $this->result = $result; }
-
- protected function getStatusCode() { return $this->status_code; }
- protected function getStatusMessage() { return $this->message; }
- protected function getResult() { return $this->result; }
-
- /**
- * Serialise to a standard class.
- *
- * DEVNOTE: The API is only interested in data, we can not easily serialise
- * custom classes without the need for 1) the other side being PHP, 2) you need to have the class
- * definition installed, 3) its the right version!
- *
- * Therefore, I'm not bothering.
- *
- * Override this to include any more specific information, however api results should be attached to the
- * class using setResult().
- *
- * if $CONFIG->debug is set then additional information about the runtime environment and authentication will be
- * returned.
- *
- * @return stdClass Object containing the serialised result.
- */
- public function export()
- {
- global $ERRORS, $CONFIG, $_PAM_HANDLERS_MSG;
-
- $result = new stdClass;
-
- $result->status = $this->getStatusCode();
- if ($this->getStatusMessage()!="") $result->message = $this->getStatusMessage();
-
- $resultdata = $this->getResult();
- if (isset($resultdata)) $result->result = $resultdata;
-
- if ((isset($CONFIG->debug)) && ($CONFIG->debug == true))
- {
- if (count($ERRORS))
- $result->runtime_errors = $ERRORS;
-
- if (count($_PAM_HANDLERS_MSG))
- $result->pam = $_PAM_HANDLERS_MSG;
- }
-
- return $result;
- }
- }
-
- /**
- * SuccessResult
- * Generic success result class, extend if you want to do something special.
- *
- * @author Curverider Ltd <info@elgg.com>
- * @package Elgg
- * @subpackage Core
- */
- class SuccessResult extends GenericResult
- {
- public static $RESULT_SUCCESS = 0; // Do not change this from 0
-
- public function SuccessResult($result)
- {
- $this->setResult($result);
- $this->setStatusCode(SuccessResult::$RESULT_SUCCESS);
- }
-
- public static function getInstance($result)
- {
- // Return a new error object.
- return new SuccessResult($result);
- }
- }
-
- /**
- * ErrorResult
- * The error result class.
- *
- * @author Curverider Ltd <info@elgg.com>
- * @package Elgg
- * @subpackage Core
- */
- class ErrorResult extends GenericResult
- {
- public static $RESULT_FAIL = -1 ; // Fail with no specific code
-
- public static $RESULT_FAIL_APIKEY_DISABLED = -30;
- public static $RESULT_FAIL_APIKEY_INACTIVE = -31;
- public static $RESULT_FAIL_APIKEY_INVALID = -32;
-
- public static $RESULT_FAIL_AUTHTOKEN = -20; // Invalid, expired or missing auth token
-
- public function ErrorResult($message, $code = "", Exception $exception = NULL)
- {
- if ($code == "")
- $code = GenericResult::$RESULT_FAIL;
-
- if ($exception!=NULL)
- $this->setResult($exception->__toString());
-
- $this->setStatusCode($code, $message);
- }
-
- /**
- * Get a new instance of the ErrorResult.
- *
- * @param string $message
- * @param int $code
- * @param Exception $exception Optional exception for generating a stack trace.
- */
- public static function getInstance($message, $code = "", Exception $exception = NULL)
- {
- // Return a new error object.
- return new ErrorResult($message, $code, $exception);
- }
- }
-
- // Caching of HMACs ///////////////////////////////////////////////////////////////////////
-
- /**
- * ElggHMACCache
- * Store cached data in a temporary database, only used by the HMAC stuff.
- *
- * @author Curverider Ltd <info@elgg.com>
- * @package Elgg
- * @subpackage API
- */
- class ElggHMACCache extends ElggCache
- {
- /**
- * Set the Elgg cache.
- *
- * @param int $max_age Maximum age in seconds, 0 if no limit.
- */
- function __construct($max_age = 0)
- {
- $this->set_variable("max_age", $max_age);
- }
-
- /**
- * Save a key
- *
- * @param string $key
- * @param string $data
- * @return boolean
- */
- public function save($key, $data)
- {
- global $CONFIG;
-
- $key = sanitise_string($key);
- $time = time();
-
- return insert_data("INSERT into {$CONFIG->dbprefix}hmac_cache (hmac, ts) VALUES ('$key', '$time')");
- }
-
- /**
- * Load a key
- *
- * @param string $key
- * @param int $offset
- * @param int $limit
- * @return string
- */
- public function load($key, $offset = 0, $limit = null)
- {
- global $CONFIG;
-
- $key = sanitise_string($key);
-
- $row = get_data_row("SELECT * from {$CONFIG->dbprefix}hmac_cache where hmac='$key'");
- if ($row)
- return $row->hmac;
-
- return false;
- }
-
- /**
- * Invalidate a given key.
- *
- * @param string $key
- * @return bool
- */
- public function delete($key)
- {
- global $CONFIG;
-
- $key = sanitise_string($key);
-
- return delete_data("DELETE from {$CONFIG->dbprefix}hmac_cache where hmac='$key'");
- }
-
- /**
- * Clear out all the contents of the cache.
- *
- * Not currently implemented in this cache type.
- */
- public function clear() { return true; }
-
- /**
- * Clean out old stuff.
- *
- */
- public function __destruct()
- {
- global $CONFIG;
-
- $time = time();
- $age = (int)$this->get_variable("max_age");
-
- $expires = $time-$age;
-
- delete_data("DELETE from {$CONFIG->dbprefix}hmac_cache where ts<$expires");
- }
- }
-
- // API Call functions /////////////////////////////////////////////////////////////////////
-
- /**
- * An array holding methods.
- * The structure of this is
- * $METHODS = array (
- * "api.method" => array (
- * "function" = 'my_function_callback'
- * "call_method" = 'GET' | 'POST'
- * "parameters" = array (
- * "variable" = array ( // NB, the order is the same as defined by your function callback
- * type => 'int' | 'bool' | 'float' | 'string'
- * required => true (default) | false
- * )
- * )
- * "require_auth_token" => true (default) | false
- * "description" => "Some human readable description"
- * )
- * )
- */
- $METHODS = array();
-
- /**
- * Get the request method.
- */
- function get_call_method()
- {
- return $_SERVER['REQUEST_METHOD'];
- }
-
- /**
- * This function analyses all expected parameters for a given method, returning them in an associated array from
- * input.
- *
- * This ensures that they are sanitised and that no superfluous commands are registered. It also means that
- * hmacs work through the page handler.
- *
- * @param string $method The method
- * @return Array containing commands and values, including method and api
- */
- function get_parameters_for_method($method)
- {
- global $CONFIG, $METHODS;
-
- $method = sanitise_string($method);
- $sanitised = array();
-
- foreach ($CONFIG->input as $k => $v)
- {
- if ((isset($METHODS[$method]['parameters'][$k])) || ($k == 'auth_token') || ($k == 'method'))
- $sanitised[$k] = get_input($k); // Make things go through the sanitiser
- }
-
- return $sanitised;
- }
-
- /**
- * Obtain a token for a user.
- *
- * @param string $username The username
- * @param string $password The password
- */
- function obtain_user_token($username, $password)
- {
- global $CONFIG;
-
- $site = $CONFIG->site_id;
- $user = get_user_by_username($username);
- $time = time();
- $time += 60*60;
- $token = md5(rand(). microtime() . $username . $password . $time . $site);
-
- if (!$user) return false;
-
- if (insert_data("INSERT into {$CONFIG->dbprefix}users_apisessions (user_guid, site_guid, token, expires) values ({$user->guid}, $site, '$token', '$time') on duplicate key update token='$token', expires='$time'"))
- return $token;
-
- return false;
- }
-
- /**
- * Validate a token against a given site.
- *
- * A token registered with one site can not be used from a different apikey(site), so be aware of this
- * during development.
- *
- * @param int $site The ID of the site
- * @param string $token The Token.
- * @return mixed The user id attached to the token or false.
- */
- function validate_user_token($site, $token)
- {
- global $CONFIG;
-
- $site = (int)$site;
- $token = sanitise_string($token);
-
- if (!$site) throw new ConfigurationException(elgg_echo('ConfigurationException:NoSiteID'));
-
- $time = time();
-
- $user = get_data_row("SELECT * from {$CONFIG->dbprefix}users_apisessions where token='$token' and site_guid=$site and $time < expires");
- if ($user)
- return $user->user_guid;
-
- return false;
- }
-
- /**
- * Expose an arbitrary function as an api call.
- *
- * Limitations: Currently can not expose functions which expect objects.
- *
- * @param string $method The api name to expose this as, eg "myapi.dosomething"
- * @param string $function Your function callback.
- * @param array $parameters Optional list of parameters in the same order as in your function, with optional parameters last.
- * This array should be in the format
- * "variable" = array (
- * type => 'int' | 'bool' | 'float' | 'string' | 'array'
- * required => true (default) | false
- * )
- * @param string $description Optional human readable description of the function.
- * @param string $call_method Define what call method should be used for this function.
- * @param bool $require_auth_token Whether this requires a user authentication token or not (default is true).
- * @param bool $anonymous Can anonymous (non-authenticated in any way) users execute this call.
- * @return bool
- */
- function expose_function($method, $function, array $parameters = NULL, $description = "", $call_method = "GET", $require_auth_token = true, $anonymous = false)
- {
- global $METHODS;
-
- if (
- ($method!="") &&
- ($function!="")
- )
- {
- $METHODS[$method] = array();
-
- $METHODS[$method]["function"] = $function;
-
- if ($parameters!=NULL)
- $METHODS[$method]["parameters"] = $parameters;
-
- $call_method = strtoupper($call_method);
- switch ($call_method)
- {
- case 'POST' : $METHODS[$method]["call_method"] = 'POST'; break;
- case 'GET' : $METHODS[$method]["call_method"] = 'GET'; break;
- default :
- throw new InvalidParameterException(sprintf(elgg_echo('InvalidParameterException:UnrecognisedMethod'), $method));
- }
-
- $METHODS[$method]["description"] = $description;
-
- $METHODS[$method]["require_auth_token"] = $require_auth_token;
-
- $METHODS[$method]["anonymous"] = $anonymous;
-
- return true;
- }
-
- return false;
- }
-
- /**
- * Executes a method.
- * A method is a function which you have previously exposed using expose_function.
- *
- * @param string $method Method, e.g. "foo.bar"
- * @param array $parameters Array of parameters in the format "variable" => "value", thse will be sanitised before being fed to your handler.
- * @param string $token The authentication token to authorise this method call.
- * @return GenericResult The result of the execution.
- * @throws APIException, SecurityException
- */
- function execute_method($method, array $parameters, $token = "")
- {
- global $METHODS, $CONFIG;
-
- // Sanity check
- $method = sanitise_string($method);
- $token = sanitise_string($token);
-
- // See if we can find the method handler
- if ((isset($METHODS[$method]["function"])) && (is_callable($METHODS[$method]["function"])))
- {
- // See if this is being made with the right call method
- if (strcmp(get_call_method(), $METHODS[$method]["call_method"])==0)
- {
- $serialised_parameters = "";
-
-
- // If we have parameters then we need to sanitise the parameters.
- if ((isset($METHODS[$method]["parameters"])) && (is_array($METHODS[$method]["parameters"])))
- {
- foreach ($METHODS[$method]["parameters"] as $key => $value)
- {
- if (
- (is_array($value)) // Check that this is an array
- && (isset($value['type'])) // Check we have a type defined
- )
- {
- // Check that the variable is present in the request
-
- if (
- (!isset($parameters[$key])) && // No parameter
- ((!isset($value['required'])) || ($value['required']!=true)) // and not optional
- )
- throw new APIException(sprintf(elgg_echo('APIException:MissingParameterInMethod'), $key, $method));
- else
- {
- // Avoid debug error
- if (isset($parameters[$key]))
- {
- // Set variables casting to type.
- switch (strtolower($value['type']))
- {
- case 'int':
- case 'integer' : $serialised_parameters .= "," . (int)trim($parameters[$key]); break;
- case 'bool':
- case 'boolean':
- if (strcasecmp(trim($parameters[$key]), "false")==0)
- $parameters[$key]='';
-
- $serialised_parameters .= "," . (bool)trim($parameters[$key]);
- break;
- case 'string': $serialised_parameters .= ",'" . (string)mysql_real_escape_string(trim($parameters[$key])) . "'";
- break;
- case 'float': $serialised_parameters .= "," . (float)trim($parameters[$key]);
- break;
- case 'array':
- $array = "array(";
-
- if (is_array($parameters[$key]))
- {
- foreach ($parameters[$key] as $k => $v)
- {
- $k = sanitise_string($k);
- $v = sanitise_string($v);
-
- $array .= "'$k'=>'$v',";
- }
-
- $array = trim($array,",");
- }
- else
- throw APIException(sprintf(elgg_echo('APIException:ParameterNotArray'), $key));
-
- $array .= ")";
-
- $serialised_parameters .= $array;
- break;
-
- default : throw new APIException(sprintf(elgg_echo('APIException:UnrecognisedTypeCast'), $value['type'], $key, $method));
- }
- }
- }
- }
- else
- throw new APIException(sprintf(elgg_echo('APIException:InvalidParameter'), $key, $method));
- }
- }
-
- // Execute function: Construct function and calling parameters
- $function = $METHODS[$method]["function"];
- $serialised_parameters = trim($serialised_parameters, ", ");
-
- $result = eval("return $function($serialised_parameters);");
-
- // Sanity check result
- if ($result instanceof GenericResult) // If this function returns an api result itself, just return it
- return $result;
-
- if ($result === FALSE)
- throw new APIException(sprintf(elgg_echo('APIException:FunctionParseError'), $function, $serialised_parameters));
-
- if ($result === NULL)
- throw new APIException(sprintf(elgg_echo('APIException:FunctionNoReturn'), $function, $serialised_parameters)); // If no value
-
- return SuccessResult::getInstance($result); // Otherwise assume that the call was successful and return it as a success object.
-
- }
- else
- throw new CallException(sprintf(elgg_echo('CallException:InvalidCallMethod'), $method, $METHODS[$method]["call_method"]));
- }
-
- // Return an error if not found
- throw new APIException(sprintf(elgg_echo('APIException:MethodCallNotImplemented'), $method));
- }
-
- // System functions ///////////////////////////////////////////////////////////////////////
-
- /**
- * Simple api to return a list of all api's installed on the system.
- */
- function list_all_apis()
- {
- global $METHODS;
- return $METHODS;
- }
-
- // Expose some system api functions
- expose_function("system.api.list", "list_all_apis", NULL, elgg_echo("system.api.list"), "GET", false);
-
- /**
- * The auth.gettoken API.
- * This API call lets a user log in, returning an authentication token which can be used
- * in leu of a username and password login from then on.
- *
- * @param string username Username
- * @param string password Clear text password
- */
- function auth_gettoken($username, $password)
- {
- if (authenticate($username, $password))
- {
- $token = obtain_user_token($username, $password);
- if ($token)
- return $token;
- }
-
- throw new SecurityException(elgg_echo('SecurityException:authenticationfailed'));
- }
-
- // The authentication token api
- expose_function("auth.gettoken", "auth_gettoken", array(
- "username" => array (
- 'type' => 'string'
- ),
- "password" => array (
- 'type' => 'string'
- )
- ), elgg_echo('auth.gettoken'), "GET", false, false);
-
-
- // PAM AUTH HMAC functions ////////////////////////////////////////////////////////////////
-
- /**
- * Map various algorithms to their PHP equivs.
- * This also gives us an easy way to disable algorithms.
- *
- * @param string $algo The algorithm
- * @return string The php algorithm
- * @throws APIException if an algorithm is not supported.
- */
- function map_api_hash($algo)
- {
- $algo = strtolower(sanitise_string($algo));
- $supported_algos = array(
- "md5" => "md5", // TODO: Consider phasing this out
- "sha" => "sha1", // alias for sha1
- "sha1" => "sha1",
- "sha256" => "sha256"
- );
-
- if (array_key_exists($algo, $supported_algos))
- return $supported_algos[$algo];
-
- throw new APIException(sprintf(elgg_echo('APIException:AlgorithmNotSupported'), $algo));
- }
-
- /**
- * Calculate the HMAC for the query.
- * This function signs an api request using the information provided and is then verified by
- * searunner.
- *
- * @param $algo string The HMAC algorithm used as stored in X-Searunner-hmac-algo.
- * @param $time string String representation of unix time as stored in X-Searunner-time.
- * @param $api_key string Your api key.
- * @param $secret string Your secret key.
- * @param $get_variables string URLEncoded string representation of the get variable parameters, eg "format=php&method=searunner.test".
- * @param $post_hash string Optional sha1 hash of the post data.
- * @return string The HMAC string.
- */
- function calculate_hmac($algo, $time, $api_key, $secret_key, $get_variables, $post_hash = "")
- {
- global $CONFIG;
-
- if ((isset($CONFIG)) && ($CONFIG->debug))
- error_log("HMAC Parts: $algo, $time, $api_key, $secret_key, $get_variables, $post_hash");
-
- $ctx = hash_init(map_api_hash($algo), HASH_HMAC, $secret_key);
-
- hash_update($ctx, trim($time));
- hash_update($ctx, trim($api_key));
- hash_update($ctx, trim($get_variables));
- if (trim($post_hash)!="") hash_update($ctx, trim($post_hash));
-
- return hash_final($ctx);
- }
-
- /**
- * Calculate a hash for some post data.
- *
- * TODO: Work out how to handle really large bits of data.
- *
- * @param $postdata string The post data.
- * @param $algo string The algorithm used.
- * @return string The hash.
- */
- function calculate_posthash($postdata, $algo)
- {
- $ctx = hash_init(map_api_hash($algo));
-
- hash_update($ctx, $postdata);
-
- return hash_final($ctx);
- }
-
- /**
- * This function will do two things. Firstly it verifys that a $hmac hasn't been seen before, and
- * secondly it will add the given hmac to the cache.
- *
- * @param $hmac The hmac string.
- * @return bool True if replay detected, false if not.
- */
- function cache_hmac_check_replay($hmac)
- {
- $cache = new ElggHMACCache(90000); // cache lifetime is 25 hours (see time window in get_and_validate_api_headers() )
-
- if (!$cache->load($hmac))
- {
- $cache->save($hmac, $hmac);
-
- return false;
- }
-
- return true;
- }
-
- /**
- * Find an API User's details based on the provided public api key. These users are not users in the traditional sense.
- *
- * @param int $site_guid The GUID of the site.
- * @param string $api_key The API Key
- * @return mixed stdClass representing the database row or false.
- */
- function get_api_user($site_guid, $api_key)
- {
- global $CONFIG;
-
- $api_key = sanitise_string($api_key);
- $site_guid = (int)$site_guid;
-
- return get_data_row("SELECT * from {$CONFIG->dbprefix}api_users where api_key='$api_key' and site_guid=$site_guid and active=1");
- }
-
- /**
- * Revoke an api user key.
- *
- * @param int $site_guid The GUID of the site.
- * @param string $api_key The API Key (public).
- */
- function remove_api_user($site_guid, $api_key)
- {
- global $CONFIG;
-
- $keypair = get_api_user($site_guid, $api_key);
- if ($keypair)
- return delete_data("DELETE from {$CONFIG->dbprefix}api_users where id={$keypair->id}");
-
- return false;
- }
-
- /**
- * Generate a new API user for a site, returning a new keypair on success.
- *
- * @param int $site_guid The GUID of the site.
- */
- function create_api_user($site_guid)
- {
- global $CONFIG;
-
- $site_guid = (int)$site_guid;
-
- $public = sha1(rand().$site_guid.microtime());
- $secret = sha1(rand().$site_guid.microtime().$public);
-
- if (insert_data("INSERT into {$CONFIG->dbprefix}api_users (site_guid, api_key, secret) values ($site_guid, '$public', '$secret')"))
- return get_api_user($site_guid, $public);
-
- return false;
- }
-
- /**
- * This function looks at the super-global variable $_SERVER and extracts the various
- * header variables needed to pass to the validation functions after performing basic validation.
- *
- * @return stdClass Containing all the values.
- * @throws APIException Detailing any error.
- */
- function get_and_validate_api_headers()
- {
- $result = new stdClass;
-
- $result->method = get_call_method();
- if (($result->method != "GET") && ($result->method!= "POST")) // Only allow these methods
- throw new APIException(elgg_echo('APIException:NotGetOrPost'));
-
- $result->api_key = $_SERVER['HTTP_X_ELGG_APIKEY'];
- if ($result->api_key == "")
- throw new APIException(elgg_echo('APIException:MissingAPIKey'));
-
- $result->hmac = $_SERVER['HTTP_X_ELGG_HMAC'];
- if ($result->hmac == "")
- throw new APIException(elgg_echo('APIException:MissingHmac'));
-
- $result->hmac_algo = $_SERVER['HTTP_X_ELGG_HMAC_ALGO'];
- if ($result->hmac_algo == "")
- throw new APIException(elgg_echo('APIException:MissingHmacAlgo'));
-
- $result->time = $_SERVER['HTTP_X_ELGG_TIME'];
- if ($result->time == "")
- throw new APIException(elgg_echo('APIException:MissingTime'));
- if (($result->time<(microtime(true)-86400.00)) || ($result->time>(microtime(true)+86400.00))) // Basic timecheck, think about making this smaller if we get loads of users and the cache gets really big.
- throw new APIException(elgg_echo('APIException:TemporalDrift'));
-
- $result->get_variables = get_parameters_for_method(get_input('method')); //$_SERVER['QUERY_STRING'];
- if ($result->get_variables == "")
- throw new APIException(elgg_echo('APIException:NoQueryString'));
-
- if ($result->method=="POST")
- {
- $result->posthash = $_SERVER['HTTP_X_ELGG_POSTHASH'];
- if ($result->posthash == "")
- throw new APIException(elgg_echo('APIException:MissingPOSTHash'));
-
- $result->posthash_algo = $_SERVER['HTTP_X_ELGG_POSTHASH_ALGO'];
- if ($result->posthash_algo == "")
- throw new APIException(elgg_echo('APIException:MissingPOSTAlgo'));
-
- $result->content_type = $_SERVER['CONTENT_TYPE'];
- if ($result->content_type == "")
- throw new APIException(elgg_echo('APIException:MissingContentType'));
- }
-
- return $result;
- }
-
- /**
- * Return a sanitised form of the POST data sent to the script
- *
- * @return string
- */
- function get_post_data()
- {
- global $GLOBALS;
-
- return $GLOBALS['HTTP_RAW_POST_DATA'];
- }
-
- // PAM functions //////////////////////////////////////////////////////////////////////////
-
- /**
- * Function that examines whether an authentication token is present returning true if it is, OR the requested
- * method doesn't require one.
- *
- * If a token is present and a validated user id is returned, that user is logged in to the current session.
- *
- * @param unknown_type $credentials
- */
- function pam_auth_usertoken($credentials = NULL)
- {
- global $METHODS, $CONFIG;
-
- $method = get_input('method');
- $token = get_input('auth_token');
-
- $validated_userid = validate_user_token($CONFIG->site_id, $token);
-
- if ($validated_userid) {
- $u = get_entity($validated_userid);
- if (!$u) return false; // Could we get the user?
- if ( (!$u instanceof ElggUser)) return false; // Not an elgg user
- if ($u->isBanned()) return false; // User is banned
- if (!login($u)) return false; // Fail if we couldn't log the user in
-
- }
-
- if ((!$METHODS[$method]["require_auth_token"]) || ($validated_userid) || (isloggedin())) {
- return true;
- } else
- throw new SecurityException(elgg_echo('SecurityException:AuthTokenExpired'), ErrorResult::$RESULT_FAIL_AUTHTOKEN);
-
- return false;
- }
-
- /**
- * Test to see whether a given function has been declared as anonymous access (it doesn't require any auth token)
- *
- * @param unknown_type $credentials
- */
- function pam_auth_anonymous_method($credentials = NULL)
- {
- global $METHODS, $CONFIG;
-
- $method = get_input('method');
-
- if ((isset($METHODS[$method]["anonymous"])) && ($METHODS[$method]["anonymous"]))
- return true;
-
- return false;
- }
-
- /**
- * See if the user has a valid login sesson.
- */
- function pam_auth_session($credentials = NULL)
- {
- return isloggedin();
- }
-
- /**
- * Secure authentication through headers and HMAC.
- */
- function pam_auth_hmac($credentials = NULL)
- {
- global $CONFIG;
-
- $api_header = get_and_validate_api_headers(); // Get api header
- $api_user = get_api_user($CONFIG->site_id, $api_header->api_key); // Pull API user details
-
- if ($api_user)
- {
- // Get the secret key
- $secret_key = $api_user->secret;
-
- // Serialise parameters
- $encoded_params = array();
- foreach ($api_header->get_variables as $k => $v)
- $encoded_params[] = urlencode($k).'='.urlencode($v);
- $params = implode('&', $encoded_params);
-
- // Validate HMAC
- $hmac = calculate_hmac($api_header->hmac_algo,
- $api_header->time,
- $api_header->api_key,
- $secret_key,
- $params,
- $api_header->method == 'POST' ? $api_header->posthash : "");
-
- if ((strcmp(
- $api_header->hmac,
- $hmac
- )==0) && ($api_header->hmac) && ($hmac))
- {
- // Now make sure this is not a replay
- if (!cache_hmac_check_replay($hmac))
- {
-
- // Validate post data
- if ($api_header->method=="POST")
- {
- $postdata = get_post_data();
- $calculated_posthash = calculate_posthash($postdata, $api_header->posthash_algo);
-
- if (strcmp($api_header->posthash, $calculated_posthash)!=0)
- throw new SecurityException(sprintf(elgg_echo('SecurityException:InvalidPostHash'), $calculated_posthash, $api_header->posthash));
- }
-
- // If we've passed all the checks so far then we can be reasonably certain that the request is authentic, so return this fact to the PAM engine.
- return true;
- }
- else
- throw new SecurityException(elgg_echo('SecurityException:DupePacket'));
- }
- else
- throw new SecurityException("HMAC is invalid. {$api_header->hmac} != [calc]$hmac = {$api_header->hmac_algo}(**SECRET KEY**, time:{$api_header->time}, apikey:{$api_header->api_key}, get_vars:{$params}" . ($api_header->method=="POST"? "posthash:$api_header->posthash}" : ")"));
- }
- else
- throw new SecurityException(elgg_echo('SecurityException:InvalidAPIKey'),ErrorResult::$RESULT_FAIL_APIKEY_INVALID);
-
- return false;
- }
-
- /**
- * A bit of a hack. Basically, this combines session and hmac, so that one of them must evaluate to true in order
- * to proceed.
- *
- * This ensures that this and auth_token are evaluated separately.
- *
- * @param unknown_type $credentials
- */
- function pam_auth_session_or_hmac($credentials = NULL)
- {
- if (pam_auth_session($credentials))
- return true;
-
- if (pam_auth_hmac($credentials))
- return true;
-
- return false;
- }
-
- // Client api functions ///////////////////////////////////////////////////////////////////
-
- $APICLIENT_LAST_CALL = NULL;
- $APICLIENT_LAST_CALL_RAW = "";
- $APICLIENT_LAST_ERROR = NULL;
-
- /**
- * Utility function to serialise a header array into its text representation.
- *
- * @param $headers array The array of headers "key" => "value"
- * @return string
- */
- function serialise_api_headers(array $headers)
- {
- $headers_str = "";
-
- foreach ($headers as $k => $v)
- $headers_str .= trim($k) . ": " . trim($v) . "\r\n";
-
- return trim($headers_str);
- }
-
- /**
- * Send a raw API call to an elgg api endpoint.
- *
- * @param array $keys The api keys.
- * @param string $url URL of the endpoint.
- * @param array $call Associated array of "variable" => "value"
- * @param string $method GET or POST
- * @param string $post_data The post data
- * @param string $content_type The content type
- * @return stdClass The unserialised response object
- */
- function send_api_call(array $keys, $url, array $call, $method = 'GET', $post_data = '', $content_type = 'application/octet-stream')
- {
- global $APICLIENT_LAST_CALL, $APICLIENT_LAST_CALL_RAW, $APICLIENT_LAST_ERROR, $CONFIG;
-
- $headers = array();
- $encoded_params = array();
-
- $method = strtoupper($method);
- switch (strtoupper($method))
- {
- case 'GET' :
- case 'POST' : break;
- default: throw new NotImplementedException(sprintf(elgg_echo('NotImplementedException:CallMethodNotImplemented'), $method));
- }
-
- // Time
- $time = microtime(true);
-
- // URL encode all the parameters, ensuring auth_token (if present) is at the end!
- foreach ($call as $k => $v){
- if ($k!='auth_token')
- $encoded_params[] = urlencode($k).'='.urlencode($v);
- }
- if ($call['auth_token'])
- $encoded_params[] = urlencode('auth_token').'='.urlencode($call['auth_token']);
-
- $params = implode('&', $encoded_params);
-
- // Put together the query string
- $url = $url . "?" . $params;
-
- // Construct headers
- $posthash = "";
- if ($method == 'POST') $posthash = calculate_posthash($post_data, 'md5');
-
- if ((isset($keys['public'])) && (isset($keys['private'])))
- {
- $headers['X-Elgg-apikey'] = $keys['public'];
- $headers['X-Elgg-time'] = $time;
- $headers['X-Elgg-hmac-algo'] = 'sha1';
- $headers['X-Elgg-hmac'] = calculate_hmac('sha1',
- $time,
- $keys['public'],
- $keys['private'],
- $params,
- $posthash
- );
- }
- if ($method == 'POST')
- {
- $headers['X-Elgg-posthash'] = $posthash;
- $headers['X-Elgg-posthash-algo'] = 'md5';
-
- $headers['Content-type'] = $content_type;
- $headers['Content-Length'] = strlen($post_data);
- }
-
- // Opt array
- $http_opts = array(
- 'method' => $method,
- 'header' => serialise_api_headers($headers)
- );
- if ($method == 'POST') $http_opts['content'] = $post_data;
-
- $opts = array('http' => $http_opts);
-
- // Send context
- $context = stream_context_create($opts);
-
- // Send the query and get the result and decode.
- if ((isset($CONFIG->debug)) && ($CONFIG->debug))
- error_log("APICALL: $url");
- $APICLIENT_LAST_CALL_RAW = file_get_contents($url, false, $context);
-
- $APICLIENT_LAST_CALL = unserialize($APICLIENT_LAST_CALL_RAW);
-
- if (($APICLIENT_LAST_CALL) && ($APICLIENT_LAST_CALL->status!=0))
- $APICLIENT_LAST_ERROR = $APICLIENT_LAST_CALL;
-
- return $APICLIENT_LAST_CALL;
- }
-
- /**
- * Send a GET call
- *
- * @param string $url URL of the endpoint.
- * @param array $call Associated array of "variable" => "value"
- * @param array $keys The keys dependant on chosen authentication method
- * @return stdClass The unserialised response object
- */
- function send_api_get_call($url, array $call, array $keys) { return send_api_call($keys, $url, $call); }
-
- /**
- * Send a GET call
- *
- * @param string $url URL of the endpoint.
- * @param array $call Associated array of "variable" => "value"
- * @param array $keys The keys dependant on chosen authentication method
- * @param string $post_data The post data
- * @param string $content_type The content type
- * @return stdClass The unserialised response object
- */
- function send_api_post_call($url, array $call, array $keys, $post_data, $content_type = 'application/octet-stream') { return send_api_call($keys, $url, $call, 'POST', $post_data, $content_type); }
-
- /**
- * Return a key array suitable for the API client using the standard authentication method based on api-keys and secret keys.
- *
- * @param string $secret_key Your secret key
- * @param string $api_key Your api key
- */
- function get_standard_api_key_array($secret_key, $api_key) { return array('public' => $api_key, 'private' => $api_key); }
-
- // Error handler functions ////////////////////////////////////////////////////////////////
-
- /** Define a global array of errors */
- $ERRORS = array();
-
- /**
- * PHP Error handler function.
- * This function acts as a wrapper to catch and report PHP error messages.
- *
- * @see http://uk3.php.net/set-error-handler
- * @param unknown_type $errno
- * @param unknown_type $errmsg
- * @param unknown_type $filename
- * @param unknown_type $linenum
- * @param unknown_type $vars
- */
- function __php_api_error_handler($errno, $errmsg, $filename, $linenum, $vars)
- {
- global $ERRORS;
-
- $error = date("Y-m-d H:i:s (T)") . ": \"" . $errmsg . "\" in file " . $filename . " (line " . $linenum . ")";
-
- switch ($errno) {
- case E_USER_ERROR:
- error_log("ERROR: " . $error);
- $ERRORS[] = "ERROR: " .$error;
-
- // Since this is a fatal error, we want to stop any further execution but do so gracefully.
- throw new Exception("ERROR: " . $error);
- break;
-
- case E_WARNING :
- case E_USER_WARNING :
- error_log("WARNING: " . $error);
- $ERRORS[] = "WARNING: " .$error;
- break;
-
- default:
- error_log("DEBUG: " . $error);
- $ERRORS[] = "DEBUG: " .$error;
- }
- }
-
- /**
- * PHP Exception handler.
- * This is a generic exception handler for PHP exceptions. This will catch any
- * uncaught exception and return it as an ErrorResult in the requested format.
- *
- * @param Exception $exception
- */
- function __php_api_exception_handler($exception) {
-
- error_log("*** FATAL EXCEPTION (API) *** : " . $exception);
-
- page_draw($exception->getMessage(), elgg_view("api/output",
- array('result' => ErrorResult::getInstance(
- $exception->getMessage(),
- $exception->getCode() == 0 ? ErrorResult::$RESULT_FAIL : $exception->getCode(),
- $exception)
- ))
- );
- }
-
- // Initialisation & pagehandler ///////////////////////////////////////////////////////////
-
- /**
- * Initialise the API subsystem.
- *
- */
- function api_init()
- {
- // Register a page handler, so we can have nice URLs
- register_page_handler('api','api_endpoint_handler');
- }
-
- /**
- * Register a page handler for the various API endpoints.
- *
- * @param array $page
- */
- function api_endpoint_handler($page)
- {
- global $CONFIG;
-
- // Which view
- if ($page[1])
- {
- elgg_set_viewtype($page[1]);
-
- }
-
- // Which endpoint
- if ($page[0])
- {
- switch ($page[0])
- {
- case 'rest' :
- default : include($CONFIG->path . "services/api/rest.php");
- }
- }
- }
-
-
- register_elgg_event_handler('init','system','api_init');
-
-?> \ No newline at end of file
diff --git a/engine/lib/cache.php b/engine/lib/cache.php
index 191c7c004..3116c1a9b 100644
--- a/engine/lib/cache.php
+++ b/engine/lib/cache.php
@@ -1,437 +1,453 @@
<?php
- /**
- * Elgg cache
- * Cache file interface for caching data.
- *
- * @package Elgg
- * @subpackage API
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd <info@elgg.com>
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
+/**
+ * Elgg cache
+ * Cache file interface for caching data.
+ *
+ * @package Elgg.Core
+ * @subpackage Cache
+ */
+
+/* Filepath Cache */
+
+/**
+ * Returns an ElggCache object suitable for caching system information
+ *
+ * @todo Can this be done in a cleaner way?
+ * @todo Swap to memcache etc?
+ *
+ * @return ElggFileCache
+ */
+function elgg_get_system_cache() {
+ global $CONFIG;
/**
- * ElggCache The elgg cache superclass.
- * This defines the interface for a cache (wherever that cache is stored).
- *
- * @author Curverider Ltd <info@elgg.com>
- * @package Elgg
- * @subpackage API
+ * A default filestore cache using the dataroot.
*/
- abstract class ElggCache implements
- ArrayAccess // Override for array access
- {
- /**
- * Variables for the cache object.
- *
- * @var array
- */
- private $variables;
-
- /**
- * Set the constructor.
- */
- function __construct() { $this->variables = array(); }
-
- /**
- * Set a cache variable.
- *
- * @param string $variable
- * @param string $value
- */
- public function set_variable($variable, $value)
- {
- if (!is_array($this->variables))
- $this->variables = array();
-
- $this->variables[$variable] = $value;
- }
-
- /**
- * Get variables for this cache.
- *
- * @param string $variable
- * @return mixed The variable or null;
- */
- public function get_variable($variable)
- {
- if (isset($this->variables[$variable]))
- return $this->variables[$variable];
-
- return null;
- }
-
- /**
- * Class member get overloading, returning key using $this->load defaults.
- *
- * @param string $key
- * @return mixed
- */
- function __get($key) { return $this->load($key); }
-
- /**
- * Class member set overloading, setting a key using $this->save defaults.
- *
- * @param string $key
- * @param mixed $value
- * @return mixed
- */
- function __set($key, $value) { return $this->save($key, $value); }
-
- /**
- * Supporting isset, using $this->load() with default values.
- *
- * @param string $key The name of the attribute or metadata.
- * @return bool
- */
- function __isset($key) { return (bool)$this->load($key); }
-
- /**
- * Supporting unsetting of magic attributes.
- *
- * @param string $key The name of the attribute or metadata.
- */
- function __unset($key) { return $this->delete($key); }
-
- /**
- * Save data in a cache.
- *
- * @param string $key
- * @param string $data
- * @return bool
- */
- abstract public function save($key, $data);
-
- /**
- * Load data from the cache using a given key.
- *
- * @param string $key
- * @param int $offset
- * @param int $limit
- * @return mixed The stored data or false.
- */
- abstract public function load($key, $offset = 0, $limit = null);
-
- /**
- * Invalidate a key
- *
- * @param string $key
- * @return bool
- */
- abstract public function delete($key);
-
- /**
- * Clear out all the contents of the cache.
- *
- */
- abstract public function clear();
-
- /**
- * Add a key only if it doesn't already exist.
- * Implemented simply here, if you extend this class and your caching engine provides a better way then
- * override this accordingly.
- *
- * @param string $key
- * @param string $data
- * @return bool
- */
- public function add($key, $data)
- {
- if (!isset($this[$key]))
- return $this->save($key, $data);
-
- return false;
- }
-
- // ARRAY ACCESS INTERFACE //////////////////////////////////////////////////////////
- function offsetSet($key, $value)
- {
- $this->save($key, $value);
- }
-
- function offsetGet($key)
- {
- return $this->load($key);
- }
-
- function offsetUnset($key)
- {
- if ( isset($this->key) ) {
- unset($this->key);
- }
- }
-
- function offsetExists($offset)
- {
- return isset($this->$offset);
- }
+ static $FILE_PATH_CACHE;
+
+ if (!$FILE_PATH_CACHE) {
+ $FILE_PATH_CACHE = new ElggFileCache($CONFIG->dataroot . 'system_cache/');
}
-
- /**
- * Shared memory cache description.
- * Extends ElggCache with functions useful to shared memory style caches (static variables, memcache etc)
- */
- abstract class ElggSharedMemoryCache extends ElggCache
- {
- /**
- * Namespace variable used to keep various bits of the cache
- * separate.
- *
- * @var string
- */
- private $namespace;
-
- /**
- * Set the namespace of this cache.
- * This is useful for cache types (like memcache or static variables) where there is one large
- * flat area of memory shared across all instances of the cache.
- *
- * @param string $namespace
- */
- public function setNamespace($namespace = "default") { $this->namespace = $namespace; }
- /**
- * Get the namespace currently defined.
- *
- * @return string
- */
- public function getNamespace() { return $this->namespace; }
+
+ return $FILE_PATH_CACHE;
+}
+
+/**
+ * Reset the system cache by deleting the caches
+ *
+ * @return void
+ */
+function elgg_reset_system_cache() {
+ $cache = elgg_get_system_cache();
+ $cache->clear();
+}
+
+/**
+ * Saves a system cache.
+ *
+ * @param string $type The type or identifier of the cache
+ * @param string $data The data to be saved
+ * @return bool
+ */
+function elgg_save_system_cache($type, $data) {
+ global $CONFIG;
+
+ if ($CONFIG->system_cache_enabled) {
+ $cache = elgg_get_system_cache();
+ return $cache->save($type, $data);
}
-
- /**
- * ElggStaticVariableCache
- * Dummy cache which stores values in a static array. Using this makes future replacements to other caching back
- * ends (eg memcache) much easier.
- *
- * @author Curverider Ltd <info@elgg.com>
- * @package Elgg
- * @subpackage API
- */
- class ElggStaticVariableCache extends ElggSharedMemoryCache
- {
- /**
- * The cache.
- *
- * @var unknown_type
- */
- private static $__cache;
-
- /**
- * Create the variable cache.
- *
- * This function creates a variable cache in a static variable in memory, optionally with a given namespace (to avoid overlap).
- *
- * @param string $namespace The namespace for this cache to write to - note, namespaces of the same name are shared!
- */
- function __construct($namespace = 'default')
- {
- $this->setNamespace($namespace);
- $this->clear();
- }
-
- public function save($key, $data)
- {
- $namespace = $this->getNamespace();
-
- ElggStaticVariableCache::$__cache[$namespace][$key] = $data;
-
- return true;
- }
-
- public function load($key, $offset = 0, $limit = null)
- {
- $namespace = $this->getNamespace();
-
- if (isset(ElggStaticVariableCache::$__cache[$namespace][$key]))
- return ElggStaticVariableCache::$__cache[$namespace][$key];
-
- return false;
- }
-
- public function delete($key)
- {
- $namespace = $this->getNamespace();
-
- unset(ElggStaticVariableCache::$__cache[$namespace][$key]);
-
- return true;
- }
-
- public function clear()
- {
- $namespace = $this->getNamespace();
-
- if (!isset(ElggStaticVariableCache::$__cache))
- ElggStaticVariableCache::$__cache = array();
-
- //if (!isset(ElggStaticVariableCache::$__cache[$namespace]))
- ElggStaticVariableCache::$__cache[$namespace] = array();
+
+ return false;
+}
+
+/**
+ * Retrieve the contents of a system cache.
+ *
+ * @param string $type The type of cache to load
+ * @return string
+ */
+function elgg_load_system_cache($type) {
+ global $CONFIG;
+
+ if ($CONFIG->system_cache_enabled) {
+ $cache = elgg_get_system_cache();
+ $cached_data = $cache->load($type);
+
+ if ($cached_data) {
+ return $cached_data;
}
}
+
+ return NULL;
+}
+
+/**
+ * Enables the system disk cache.
+ *
+ * Uses the 'system_cache_enabled' datalist with a boolean value.
+ * Resets the system cache.
+ *
+ * @return void
+ */
+function elgg_enable_system_cache() {
+ global $CONFIG;
+
+ datalist_set('system_cache_enabled', 1);
+ $CONFIG->system_cache_enabled = 1;
+ elgg_reset_system_cache();
+}
+
+/**
+ * Disables the system disk cache.
+ *
+ * Uses the 'system_cache_enabled' datalist with a boolean value.
+ * Resets the system cache.
+ *
+ * @return void
+ */
+function elgg_disable_system_cache() {
+ global $CONFIG;
+
+ datalist_set('system_cache_enabled', 0);
+ $CONFIG->system_cache_enabled = 0;
+ elgg_reset_system_cache();
+}
+
+/** @todo deprecate in Elgg 1.9 **/
+
+/**
+ * @access private
+ */
+function elgg_get_filepath_cache() {
+ return elgg_get_system_cache();
+}
+/**
+ * @access private
+ */
+function elgg_filepath_cache_reset() {
+ elgg_reset_system_cache();
+}
+/**
+ * @access private
+ */
+function elgg_filepath_cache_save($type, $data) {
+ return elgg_save_system_cache($type, $data);
+}
+/**
+ * @access private
+ */
+function elgg_filepath_cache_load($type) {
+ return elgg_load_system_cache($type);
+}
+/**
+ * @access private
+ */
+function elgg_enable_filepath_cache() {
+ elgg_enable_system_cache();
+}
+/**
+ * @access private
+ */
+function elgg_disable_filepath_cache() {
+ elgg_disable_system_cache();
+}
+
+/* Simplecache */
+
+/**
+ * Registers a view to simple cache.
+ *
+ * Simple cache is a caching mechanism that saves the output of
+ * views and its extensions into a file. If the view is called
+ * by the {@link simplecache/view.php} file, the Elgg framework will
+ * not be loaded and the contents of the view will returned
+ * from file.
+ *
+ * @warning Simple cached views must take no parameters and return
+ * the same content no matter who is logged in.
+ *
+ * @example
+ * $blog_js = elgg_get_simplecache_url('js', 'blog/save_draft');
+ * elgg_register_simplecache_view('js/blog/save_draft');
+ * elgg_register_js('elgg.blog', $blog_js);
+ * elgg_load_js('elgg.blog');
+ *
+ * @param string $viewname View name
+ *
+ * @return void
+ * @link http://docs.elgg.org/Views/Simplecache
+ * @see elgg_regenerate_simplecache()
+ * @since 1.8.0
+ */
+function elgg_register_simplecache_view($viewname) {
+ global $CONFIG;
+
+ if (!isset($CONFIG->views)) {
+ $CONFIG->views = new stdClass;
+ }
+
+ if (!isset($CONFIG->views->simplecache)) {
+ $CONFIG->views->simplecache = array();
+ }
+
+ $CONFIG->views->simplecache[] = $viewname;
+}
+
+/**
+ * Get the URL for the cached file
+ *
+ * @warning You must register the view with elgg_register_simplecache_view()
+ * for caching to work. See elgg_register_simplecache_view() for a full example.
+ *
+ * @param string $type The file type: css or js
+ * @param string $view The view name
+ * @return string
+ * @since 1.8.0
+ */
+function elgg_get_simplecache_url($type, $view) {
+ global $CONFIG;
+ $lastcache = (int)$CONFIG->lastcache;
+ $viewtype = elgg_get_viewtype();
+ elgg_register_simplecache_view("$type/$view");// see #5302
+ if (elgg_is_simplecache_enabled()) {
+ $url = elgg_get_site_url() . "cache/$type/$viewtype/$view.$lastcache.$type";
+ } else {
+ $url = elgg_get_site_url() . "$type/$view.$lastcache.$type";
+ $elements = array("view" => $viewtype);
+ $url = elgg_http_add_url_query_elements($url, $elements);
+ }
- /**
- * ElggFileCache
- * Store cached data in a file store.
- *
- * @author Curverider Ltd <info@elgg.com>
- * @package Elgg
- * @subpackage API
- */
- class ElggFileCache extends ElggCache
- {
- /**
- * Set the Elgg cache.
- *
- * @param string $cache_path The cache path.
- * @param int $max_age Maximum age in seconds, 0 if no limit.
- * @param int $max_size Maximum size of cache in seconds, 0 if no limit.
- */
- function __construct($cache_path, $max_age = 0, $max_size = 0)
- {
- $this->set_variable("cache_path", $cache_path);
- $this->set_variable("max_age", $max_age);
- $this->set_variable("max_size", $max_size);
-
- if ($cache_path=="") throw new ConfigurationException(elgg_echo('ConfigurationException:NoCachePath'));
- }
-
- /**
- * Create and return a handle to a file.
- *
- * @param string $filename
- * @param string $rw
- */
- protected function create_file($filename, $rw = "rb")
- {
- // Create a filename matrix
- $matrix = "";
- $depth = strlen($filename);
- if ($depth > 5) $depth = 5;
-
- // for ($n = 0; $n < $depth; $n++)
- // $matrix .= $filename[$n] . "/";
-
- // Create full path
- $path = $this->get_variable("cache_path") . $matrix;
-
- // if (!mkdir($path, 0700, true)) throw new IOException("Could not make $path");
-
- // Open the file
- if ((!file_exists($path . $filename)) && ($rw=="rb")) return false;
-
- return fopen($path . $filename, $rw);
- }
-
- /**
- * Create a sanitised filename for the file.
- *
- * @param string $filename
- */
- protected function sanitise_filename($filename)
- {
- // TODO : Writeme
-
- return $filename;
- }
-
- /**
- * Save a key
- *
- * @param string $key
- * @param string $data
- * @return boolean
- */
- public function save($key, $data)
- {
- $f = $this->create_file($this->sanitise_filename($key), "wb");
- if ($f)
- {
- $result = fwrite($f, $data);
- fclose($f);
-
- return $result;
+ return $url;
+}
+
+/**
+ * Regenerates the simple cache.
+ *
+ * @warning This does not invalidate the cache, but actively rebuilds it.
+ *
+ * @param string $viewtype Optional viewtype to regenerate. Defaults to all valid viewtypes.
+ *
+ * @return void
+ * @see elgg_register_simplecache_view()
+ * @since 1.8.0
+ */
+function elgg_regenerate_simplecache($viewtype = NULL) {
+ global $CONFIG;
+
+ if (!isset($CONFIG->views->simplecache) || !is_array($CONFIG->views->simplecache)) {
+ return;
+ }
+
+ $lastcached = time();
+
+ // @todo elgg_view() checks if the page set is done (isset($CONFIG->pagesetupdone)) and
+ // triggers an event if it's not. Calling elgg_view() here breaks submenus
+ // (at least) because the page setup hook is called before any
+ // contexts can be correctly set (since this is called before page_handler()).
+ // To avoid this, lie about $CONFIG->pagehandlerdone to force
+ // the trigger correctly when the first view is actually being output.
+ $CONFIG->pagesetupdone = TRUE;
+
+ if (!file_exists($CONFIG->dataroot . 'views_simplecache')) {
+ mkdir($CONFIG->dataroot . 'views_simplecache');
+ }
+
+ if (isset($viewtype)) {
+ $viewtypes = array($viewtype);
+ } else {
+ $viewtypes = $CONFIG->view_types;
+ }
+
+ $original_viewtype = elgg_get_viewtype();
+
+ // disable error reporting so we don't cache problems
+ $old_debug = elgg_get_config('debug');
+ elgg_set_config('debug', null);
+
+ foreach ($viewtypes as $viewtype) {
+ elgg_set_viewtype($viewtype);
+ foreach ($CONFIG->views->simplecache as $view) {
+ $viewcontents = elgg_view($view);
+ $viewname = md5(elgg_get_viewtype() . $view);
+ if ($handle = fopen($CONFIG->dataroot . 'views_simplecache/' . $viewname, 'w')) {
+ fwrite($handle, $viewcontents);
+ fclose($handle);
}
-
- return false;
}
-
- /**
- * Load a key
- *
- * @param string $key
- * @param int $offset
- * @param int $limit
- * @return string
- */
- public function load($key, $offset = 0, $limit = null)
- {
- $f = $this->create_file($this->sanitise_filename($key));
- if ($f)
- {
- fseek($f, $offset);
- $data = stream_get_contents($f, $limit, $offset);
- fclose($f);
-
- return $data;
+
+ datalist_set("simplecache_lastupdate_$viewtype", $lastcached);
+ datalist_set("simplecache_lastcached_$viewtype", $lastcached);
+ }
+
+ elgg_set_config('debug', $old_debug);
+ elgg_set_viewtype($original_viewtype);
+
+ // needs to be set for links in html head
+ $CONFIG->lastcache = $lastcached;
+
+ unset($CONFIG->pagesetupdone);
+}
+
+/**
+ * Is simple cache enabled
+ *
+ * @return bool
+ * @since 1.8.0
+ */
+function elgg_is_simplecache_enabled() {
+ if (elgg_get_config('simplecache_enabled')) {
+ return true;
+ }
+
+ return false;
+}
+
+/**
+ * Enables the simple cache.
+ *
+ * @access private
+ * @see elgg_register_simplecache_view()
+ * @return void
+ * @since 1.8.0
+ */
+function elgg_enable_simplecache() {
+ global $CONFIG;
+
+ datalist_set('simplecache_enabled', 1);
+ $CONFIG->simplecache_enabled = 1;
+ elgg_regenerate_simplecache();
+}
+
+/**
+ * Disables the simple cache.
+ *
+ * @warning Simplecache is also purged when disabled.
+ *
+ * @access private
+ * @see elgg_register_simplecache_view()
+ * @return void
+ * @since 1.8.0
+ */
+function elgg_disable_simplecache() {
+ global $CONFIG;
+ if ($CONFIG->simplecache_enabled) {
+ datalist_set('simplecache_enabled', 0);
+ $CONFIG->simplecache_enabled = 0;
+
+ // purge simple cache
+ if ($handle = opendir($CONFIG->dataroot . 'views_simplecache')) {
+ while (false !== ($file = readdir($handle))) {
+ if ($file != "." && $file != "..") {
+ unlink($CONFIG->dataroot . 'views_simplecache/' . $file);
+ }
}
-
- return false;
+ closedir($handle);
}
-
- /**
- * Invalidate a given key.
- *
- * @param string $key
- * @return bool
- */
- public function delete($key)
- {
- $dir = $this->get_variable("cache_path");
-
- return unlink($dir.$f);
+ }
+}
+
+/**
+ * Deletes all cached views in the simplecache and sets the lastcache and
+ * lastupdate time to 0 for every valid viewtype.
+ *
+ * @return bool
+ * @since 1.7.4
+ */
+function elgg_invalidate_simplecache() {
+ global $CONFIG;
+
+ if (!isset($CONFIG->views->simplecache) || !is_array($CONFIG->views->simplecache)) {
+ return false;
+ }
+
+ $handle = opendir($CONFIG->dataroot . 'views_simplecache');
+
+ if (!$handle) {
+ return false;
+ }
+
+ // remove files.
+ $return = true;
+ while (false !== ($file = readdir($handle))) {
+ if ($file != "." && $file != "..") {
+ $return &= unlink($CONFIG->dataroot . 'views_simplecache/' . $file);
}
-
- public function clear()
- {
- // TODO : writeme
+ }
+ closedir($handle);
+
+ // reset cache times
+ $viewtypes = $CONFIG->view_types;
+
+ if (!is_array($viewtypes)) {
+ return false;
+ }
+
+ foreach ($viewtypes as $viewtype) {
+ $return &= datalist_set("simplecache_lastupdate_$viewtype", 0);
+ $return &= datalist_set("simplecache_lastcached_$viewtype", 0);
+ }
+
+ return $return;
+}
+
+/**
+ * @see elgg_reset_system_cache()
+ * @access private
+ */
+function _elgg_load_cache() {
+ global $CONFIG;
+
+ $CONFIG->system_cache_loaded = false;
+
+ $CONFIG->views = new stdClass();
+ $data = elgg_load_system_cache('view_locations');
+ if (!is_string($data)) {
+ return;
+ }
+ $CONFIG->views->locations = unserialize($data);
+
+ $data = elgg_load_system_cache('view_types');
+ if (!is_string($data)) {
+ return;
+ }
+ $CONFIG->view_types = unserialize($data);
+
+ $CONFIG->system_cache_loaded = true;
+}
+
+/**
+ * @access private
+ */
+function _elgg_cache_init() {
+ global $CONFIG;
+
+ $viewtype = elgg_get_viewtype();
+
+ // Regenerate the simple cache if expired.
+ // Don't do it on upgrade because upgrade does it itself.
+ // @todo - move into function and perhaps run off init system event
+ if (!defined('UPGRADING')) {
+ $lastupdate = datalist_get("simplecache_lastupdate_$viewtype");
+ $lastcached = datalist_get("simplecache_lastcached_$viewtype");
+ if ($lastupdate == 0 || $lastcached < $lastupdate) {
+ elgg_regenerate_simplecache($viewtype);
+ $lastcached = datalist_get("simplecache_lastcached_$viewtype");
}
-
- public function __destruct()
- {
- // TODO: Check size and age, clean up accordingly
- $size = 0;
- $dir = $this->get_variable("cache_path");
-
- // Short circuit if both size and age are unlimited
- if (($this->get_variable("max_age")==0) && ($this->get_variable("max_size")==0))
- return;
-
- $exclude = array(".","..");
-
- $files = scandir($dir);
- if (!$files) throw new IOException(sprintf(elgg_echo('IOException:NotDirectory'), $dir));
-
- // Perform cleanup
- foreach ($files as $f)
- {
- if (!in_array($f, $exclude))
- {
- $stat = stat($dir.$f);
-
- // Add size
- $size .= $stat['size'];
-
- // Is this older than my maximum date?
- if (($this->get_variable("max_age")>0) && (time() - $stat['mtime'] > $this->get_variable("max_age")))
- unlink($dir.$f);
-
-
-
- // TODO: Size
-
- }
- }
+ $CONFIG->lastcache = $lastcached;
+ }
+
+ // cache system data if enabled and not loaded
+ if ($CONFIG->system_cache_enabled && !$CONFIG->system_cache_loaded) {
+ elgg_save_system_cache('view_locations', serialize($CONFIG->views->locations));
+ elgg_save_system_cache('view_types', serialize($CONFIG->view_types));
+ }
+
+ if ($CONFIG->system_cache_enabled && !$CONFIG->i18n_loaded_from_cache) {
+ reload_all_translations();
+ foreach ($CONFIG->translations as $lang => $map) {
+ elgg_save_system_cache("$lang.lang", serialize($map));
}
}
-
-?> \ No newline at end of file
+}
+
+elgg_register_event_handler('ready', 'system', '_elgg_cache_init');
diff --git a/engine/lib/calendar.php b/engine/lib/calendar.php
index 7b121cc49..e6f95934c 100644
--- a/engine/lib/calendar.php
+++ b/engine/lib/calendar.php
@@ -1,496 +1,573 @@
<?php
+/**
+ * Elgg calendar / entity / event functions.
+ *
+ * @package Elgg.Core
+ * @subpackage Calendar
+ *
+ * @todo Implement or remove
+ */
- /**
- * Elgg calendar / entity / event functions.
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
-
- /**
- * Calendar interface for events.
- *
- */
- interface Notable {
-
- /**
- * Calendar functionality.
- * This function sets the time of an object on a calendar listing.
- *
- * @param int $hour If ommitted, now is assumed.
- * @param int $minute If ommitted, now is assumed.
- * @param int $second If ommitted, now is assumed.
- * @param int $day If ommitted, now is assumed.
- * @param int $month If ommitted, now is assumed.
- * @param int $year If ommitted, now is assumed.
- * @param int $duration Duration of event, remainder of the day is assumed.
- */
- public function setCalendarTimeAndDuration($hour = NULL, $minute = NULL, $second = NULL, $day = NULL, $month = NULL, $year = NULL, $duration = NULL);
-
- /**
- * Return the start timestamp.
- */
- public function getCalendarStartTime();
-
- /**
- * Return the end timestamp.
- */
- public function getCalendarEndTime();
- }
-
- /**
- * Return a timestamp for the start of a given day (defaults today).
- *
- */
- function get_day_start($day = null, $month = null, $year = null) { return mktime(0,0,0,$month,$day,$year); }
-
- /**
- * Return a timestamp for the end of a given day (defaults today).
- *
- */
- function get_day_end($day = null, $month = null, $year = null) { return mktime(23,59,59,$month,$day,$year); }
-
- /**
- * Return the notable entities for a given time period.
- *
- * @param int $start_time The start time as a unix timestamp.
- * @param int $end_time The end time as a unix timestamp.
- * @param string $type The type of entity (eg "user", "object" etc)
- * @param string $subtype The arbitrary subtype of the entity
- * @param int $owner_guid The GUID of the owning user
- * @param string $order_by The field to order by; by default, time_created desc
- * @param int $limit The number of entities to return; 10 by default
- * @param int $offset The indexing offset, 0 by default
- * @param boolean $count Set to true to get a count rather than the entities themselves (limits and offsets don't apply in this context). Defaults to false.
- * @param int $site_guid The site to get entities for. Leave as 0 (default) for the current site; -1 for all sites.
- * @param int|array $container_guid The container or containers to get entities from (default: all containers).
- */
- function get_notable_entities($start_time, $end_time, $type = "", $subtype = "", $owner_guid = 0, $order_by = "asc", $limit = 10, $offset = 0, $count = false, $site_guid = 0, $container_guid = null)
- {
- global $CONFIG;
-
- if ($subtype === false || $subtype === null || $subtype === 0)
- return false;
-
- $start_time = (int)$start_time;
- $end_time = (int)$end_time;
- $order_by = sanitise_string($order_by);
- $limit = (int)$limit;
- $offset = (int)$offset;
- $site_guid = (int) $site_guid;
- if ($site_guid == 0)
- $site_guid = $CONFIG->site_guid;
-
- $where = array();
-
- if (is_array($type)) {
- $tempwhere = "";
- if (sizeof($type))
- foreach($type as $typekey => $subtypearray) {
- foreach($subtypearray as $subtypeval) {
+/**
+ * Return a timestamp for the start of a given day (defaults today).
+ *
+ * @param int $day Day
+ * @param int $month Month
+ * @param int $year Year
+ *
+ * @return int
+ * @access private
+ */
+function get_day_start($day = null, $month = null, $year = null) {
+ return mktime(0, 0, 0, $month, $day, $year);
+}
+
+/**
+ * Return a timestamp for the end of a given day (defaults today).
+ *
+ * @param int $day Day
+ * @param int $month Month
+ * @param int $year Year
+ *
+ * @return int
+ * @access private
+ */
+function get_day_end($day = null, $month = null, $year = null) {
+ return mktime(23, 59, 59, $month, $day, $year);
+}
+
+/**
+ * Return the notable entities for a given time period.
+ *
+ * @todo this function also accepts an array(type => subtypes) for 3rd arg. Should we document this?
+ *
+ * @param int $start_time The start time as a unix timestamp.
+ * @param int $end_time The end time as a unix timestamp.
+ * @param string $type The type of entity (eg "user", "object" etc)
+ * @param string $subtype The arbitrary subtype of the entity
+ * @param int $owner_guid The GUID of the owning user
+ * @param string $order_by The field to order by; by default, time_created desc
+ * @param int $limit The number of entities to return; 10 by default
+ * @param int $offset The indexing offset, 0 by default
+ * @param boolean $count Set to true to get a count instead of entities. Defaults to false.
+ * @param int $site_guid Site to get entities for. Default 0 = current site. -1 = any.
+ * @param mixed $container_guid Container or containers to get entities from (default: any).
+ *
+ * @return array|false
+ * @access private
+ */
+function get_notable_entities($start_time, $end_time, $type = "", $subtype = "", $owner_guid = 0,
+$order_by = "asc", $limit = 10, $offset = 0, $count = false, $site_guid = 0,
+$container_guid = null) {
+ global $CONFIG;
+
+ if ($subtype === false || $subtype === null || $subtype === 0) {
+ return false;
+ }
+
+ $start_time = (int)$start_time;
+ $end_time = (int)$end_time;
+ $order_by = sanitise_string($order_by);
+ $limit = (int)$limit;
+ $offset = (int)$offset;
+ $site_guid = (int) $site_guid;
+ if ($site_guid == 0) {
+ $site_guid = $CONFIG->site_guid;
+ }
+
+ $where = array();
+
+ if (is_array($type)) {
+ $tempwhere = "";
+ if (sizeof($type)) {
+ foreach ($type as $typekey => $subtypearray) {
+ foreach ($subtypearray as $subtypeval) {
$typekey = sanitise_string($typekey);
if (!empty($subtypeval)) {
$subtypeval = (int) get_subtype_id($typekey, $subtypeval);
} else {
$subtypeval = 0;
}
- if (!empty($tempwhere)) $tempwhere .= " or ";
+ if (!empty($tempwhere)) {
+ $tempwhere .= " or ";
+ }
$tempwhere .= "(e.type = '{$typekey}' and e.subtype = {$subtypeval})";
- }
+ }
}
- if (!empty($tempwhere)) $where[] = "({$tempwhere})";
-
- } else {
-
- $type = sanitise_string($type);
- $subtype = get_subtype_id($type, $subtype);
-
- if ($type != "")
- $where[] = "e.type='$type'";
- if ($subtype!=="")
- $where[] = "e.subtype=$subtype";
-
}
+ if (!empty($tempwhere)) {
+ $where[] = "({$tempwhere})";
+ }
+ } else {
+ $type = sanitise_string($type);
+ $subtype = get_subtype_id($type, $subtype);
- if ($owner_guid != "") {
- if (!is_array($owner_guid)) {
- $owner_array = array($owner_guid);
- $owner_guid = (int) $owner_guid;
- $where[] = "e.owner_guid = '$owner_guid'";
- } else if (sizeof($owner_guid) > 0) {
- $owner_array = array_map('sanitise_int', $owner_guid);
- // Cast every element to the owner_guid array to int
- $owner_guid = implode(",",$owner_guid); //
- $where[] = "e.owner_guid in ({$owner_guid})" ; //
- }
- if (is_null($container_guid)) {
- $container_guid = $owner_array;
- }
+ if ($type != "") {
+ $where[] = "e.type='$type'";
}
-
- if ($site_guid > 0)
- $where[] = "e.site_guid = {$site_guid}";
-
- if (!is_null($container_guid)) {
- if (is_array($container_guid)) {
- foreach($container_guid as $key => $val) $container_guid[$key] = (int) $val;
- $where[] = "e.container_guid in (" . implode(",",$container_guid) . ")";
- } else {
- $container_guid = (int) $container_guid;
- $where[] = "e.container_guid = {$container_guid}";
- }
- }
-
- // Add the calendar stuff
- $cal_join = "
- JOIN {$CONFIG->dbprefix}metadata cal_start on e.guid=cal_start.entity_guid
- JOIN {$CONFIG->dbprefix}metastrings cal_start_name on cal_start.name_id=cal_start_name.id
- JOIN {$CONFIG->dbprefix}metastrings cal_start_value on cal_start.value_id=cal_start_value.id
-
- JOIN {$CONFIG->dbprefix}metadata cal_end on e.guid=cal_end.entity_guid
- JOIN {$CONFIG->dbprefix}metastrings cal_end_name on cal_end.name_id=cal_end_name.id
- JOIN {$CONFIG->dbprefix}metastrings cal_end_value on cal_end.value_id=cal_end_value.id
- ";
- $where[] = "cal_start_name.string='calendar_start'";
- $where[] = "cal_start_value.string>=$start_time";
- $where[] = "cal_end_name.string='calendar_end'";
- $where[] = "cal_end_value.string <= $end_time";
-
-
- if (!$count) {
- $query = "SELECT e.* from {$CONFIG->dbprefix}entities e $cal_join where ";
- } else {
- $query = "SELECT count(e.guid) as total from {$CONFIG->dbprefix}entities e $cal_join where ";
+
+ if ($subtype !== "") {
+ $where[] = "e.subtype=$subtype";
}
- foreach ($where as $w)
- $query .= " $w and ";
-
- $query .= get_access_sql_suffix('e'); // Add access controls
-
- if (!$count) {
- $query .= " order by n.calendar_start $order_by";
- if ($limit) $query .= " limit $offset, $limit"; // Add order and limit
- $dt = get_data($query, "entity_row_to_elggstar");
- return $dt;
- } else {
- $total = get_data_row($query);
- return $total->total;
+ }
+
+ if ($owner_guid != "") {
+ if (!is_array($owner_guid)) {
+ $owner_array = array($owner_guid);
+ $owner_guid = (int) $owner_guid;
+ $where[] = "e.owner_guid = '$owner_guid'";
+ } else if (sizeof($owner_guid) > 0) {
+ $owner_array = array_map('sanitise_int', $owner_guid);
+ // Cast every element to the owner_guid array to int
+ $owner_guid = implode(",", $owner_guid);
+ $where[] = "e.owner_guid in ({$owner_guid})";
+ }
+ if (is_null($container_guid)) {
+ $container_guid = $owner_array;
}
-
- }
-
- /**
- * Return the notable entities for a given time period based on an item of metadata.
- *
- * @param int $start_time The start time as a unix timestamp.
- * @param int $end_time The end time as a unix timestamp.
- * @param mixed $meta_name
- * @param mixed $meta_value
- * @param string $entity_type The type of entity to look for, eg 'site' or 'object'
- * @param string $entity_subtype The subtype of the entity.
- * @param int $limit
- * @param int $offset
- * @param string $order_by Optional ordering.
- * @param int $site_guid The site to get entities for. Leave as 0 (default) for the current site; -1 for all sites.
- * @param true|false $count If set to true, returns the total number of entities rather than a list. (Default: false)
- *
- * @return int|array A list of entities, or a count if $count is set to true
- */
- function get_notable_entities_from_metadata($start_time, $end_time, $meta_name, $meta_value = "", $entity_type = "", $entity_subtype = "", $owner_guid = 0, $limit = 10, $offset = 0, $order_by = "", $site_guid = 0, $count = false)
- {
- global $CONFIG;
-
- $meta_n = get_metastring_id($meta_name);
- $meta_v = get_metastring_id($meta_value);
-
- $start_time = (int)$start_time;
- $end_time = (int)$end_time;
- $entity_type = sanitise_string($entity_type);
- $entity_subtype = get_subtype_id($entity_type, $entity_subtype);
- $limit = (int)$limit;
- $offset = (int)$offset;
- if ($order_by == "") $order_by = "e.time_created desc";
- $order_by = sanitise_string($order_by);
- $site_guid = (int) $site_guid;
- if ((is_array($owner_guid) && (count($owner_guid)))) {
- foreach($owner_guid as $key => $guid) {
- $owner_guid[$key] = (int) $guid;
+ }
+
+ if ($site_guid > 0) {
+ $where[] = "e.site_guid = {$site_guid}";
+ }
+
+ if (!is_null($container_guid)) {
+ if (is_array($container_guid)) {
+ foreach ($container_guid as $key => $val) {
+ $container_guid[$key] = (int) $val;
}
+ $where[] = "e.container_guid in (" . implode(",", $container_guid) . ")";
} else {
- $owner_guid = (int) $owner_guid;
+ $container_guid = (int) $container_guid;
+ $where[] = "e.container_guid = {$container_guid}";
}
- if ($site_guid == 0)
- $site_guid = $CONFIG->site_guid;
-
- //$access = get_access_list();
-
- $where = array();
-
- if ($entity_type!="")
- $where[] = "e.type='$entity_type'";
- if ($entity_subtype)
- $where[] = "e.subtype=$entity_subtype";
- if ($meta_name!="")
- $where[] = "m.name_id='$meta_n'";
- if ($meta_value!="")
- $where[] = "m.value_id='$meta_v'";
- if ($site_guid > 0)
- $where[] = "e.site_guid = {$site_guid}";
- if (is_array($owner_guid)) {
- $where[] = "e.container_guid in (".implode(",",$owner_guid).")";
- } else if ($owner_guid > 0)
- $where[] = "e.container_guid = {$owner_guid}";
-
- // Add the calendar stuff
- $cal_join = "
- JOIN {$CONFIG->dbprefix}metadata cal_start on e.guid=cal_start.entity_guid
- JOIN {$CONFIG->dbprefix}metastrings cal_start_name on cal_start.name_id=cal_start_name.id
- JOIN {$CONFIG->dbprefix}metastrings cal_start_value on cal_start.value_id=cal_start_value.id
-
- JOIN {$CONFIG->dbprefix}metadata cal_end on e.guid=cal_end.entity_guid
- JOIN {$CONFIG->dbprefix}metastrings cal_end_name on cal_end.name_id=cal_end_name.id
- JOIN {$CONFIG->dbprefix}metastrings cal_end_value on cal_end.value_id=cal_end_value.id
- ";
- $where[] = "cal_start_name.string='calendar_start'";
- $where[] = "cal_start_value.string>=$start_time";
- $where[] = "cal_end_name.string='calendar_end'";
- $where[] = "cal_end_value.string <= $end_time";
-
- if (!$count) {
- $query = "SELECT distinct e.* ";
- } else {
- $query = "SELECT count(distinct e.guid) as total ";
+ }
+
+ // Add the calendar stuff
+ $cal_join = "
+ JOIN {$CONFIG->dbprefix}metadata cal_start on e.guid=cal_start.entity_guid
+ JOIN {$CONFIG->dbprefix}metastrings cal_start_name on cal_start.name_id=cal_start_name.id
+ JOIN {$CONFIG->dbprefix}metastrings cal_start_value on cal_start.value_id=cal_start_value.id
+
+ JOIN {$CONFIG->dbprefix}metadata cal_end on e.guid=cal_end.entity_guid
+ JOIN {$CONFIG->dbprefix}metastrings cal_end_name on cal_end.name_id=cal_end_name.id
+ JOIN {$CONFIG->dbprefix}metastrings cal_end_value on cal_end.value_id=cal_end_value.id
+ ";
+ $where[] = "cal_start_name.string='calendar_start'";
+ $where[] = "cal_start_value.string>=$start_time";
+ $where[] = "cal_end_name.string='calendar_end'";
+ $where[] = "cal_end_value.string <= $end_time";
+
+
+ if (!$count) {
+ $query = "SELECT e.* from {$CONFIG->dbprefix}entities e $cal_join where ";
+ } else {
+ $query = "SELECT count(e.guid) as total from {$CONFIG->dbprefix}entities e $cal_join where ";
+ }
+ foreach ($where as $w) {
+ $query .= " $w and ";
+ }
+
+ $query .= get_access_sql_suffix('e'); // Add access controls
+
+ if (!$count) {
+ $query .= " order by n.calendar_start $order_by";
+ // Add order and limit
+ if ($limit) {
+ $query .= " limit $offset, $limit";
}
-
- $query .= "from {$CONFIG->dbprefix}entities e JOIN {$CONFIG->dbprefix}metadata m on e.guid = m.entity_guid $cal_join where";
- foreach ($where as $w)
- $query .= " $w and ";
- $query .= get_access_sql_suffix("e"); // Add access controls
- $query .= ' and ' . get_access_sql_suffix("m"); // Add access controls
-
- if (!$count) {
- $query .= " order by $order_by limit $offset, $limit"; // Add order and limit
- return get_data($query, "entity_row_to_elggstar");
- } else {
- if ($row = get_data_row($query))
- return $row->total;
+ $dt = get_data($query, "entity_row_to_elggstar");
+
+ return $dt;
+ } else {
+ $total = get_data_row($query);
+ return $total->total;
+ }
+}
+
+/**
+ * Return the notable entities for a given time period based on an item of metadata.
+ *
+ * @param int $start_time The start time as a unix timestamp.
+ * @param int $end_time The end time as a unix timestamp.
+ * @param mixed $meta_name Metadata name
+ * @param mixed $meta_value Metadata value
+ * @param string $entity_type The type of entity to look for, eg 'site' or 'object'
+ * @param string $entity_subtype The subtype of the entity.
+ * @param int $owner_guid Owner GUID
+ * @param int $limit Limit
+ * @param int $offset Offset
+ * @param string $order_by Optional ordering.
+ * @param int $site_guid Site to get entities for. Default 0 = current site. -1 = any.
+ * @param bool $count If true, returns count instead of entities. (Default: false)
+ *
+ * @return int|array A list of entities, or a count if $count is set to true
+ * @access private
+ */
+function get_notable_entities_from_metadata($start_time, $end_time, $meta_name, $meta_value = "",
+$entity_type = "", $entity_subtype = "", $owner_guid = 0, $limit = 10, $offset = 0, $order_by = "",
+$site_guid = 0, $count = false) {
+
+ global $CONFIG;
+
+ $meta_n = get_metastring_id($meta_name);
+ $meta_v = get_metastring_id($meta_value);
+
+ $start_time = (int)$start_time;
+ $end_time = (int)$end_time;
+ $entity_type = sanitise_string($entity_type);
+ $entity_subtype = get_subtype_id($entity_type, $entity_subtype);
+ $limit = (int)$limit;
+ $offset = (int)$offset;
+ if ($order_by == "") {
+ $order_by = "e.time_created desc";
+ }
+ $order_by = sanitise_string($order_by);
+ $site_guid = (int) $site_guid;
+ if ((is_array($owner_guid) && (count($owner_guid)))) {
+ foreach ($owner_guid as $key => $guid) {
+ $owner_guid[$key] = (int) $guid;
}
- return false;
-
- }
-
- /**
- * Return the notable entities for a given time period based on their relationship.
- *
- * @param int $start_time The start time as a unix timestamp.
- * @param int $end_time The end time as a unix timestamp.
- * @param string $relationship The relationship eg "friends_of"
- * @param int $relationship_guid The guid of the entity to use query
- * @param bool $inverse_relationship Reverse the normal function of the query to instead say "give me all entities for whome $relationship_guid is a $relationship of"
- * @param string $type
- * @param string $subtype
- * @param int $owner_guid
- * @param string $order_by
- * @param int $limit
- * @param int $offset
- * @param boolean $count Set to true if you want to count the number of entities instead (default false)
- * @param int $site_guid The site to get entities for. Leave as 0 (default) for the current site; -1 for all sites.
- * @return array|int|false An array of entities, or the number of entities, or false on failure
- */
- function get_noteable_entities_from_relationship($start_time, $end_time, $relationship, $relationship_guid, $inverse_relationship = false, $type = "", $subtype = "", $owner_guid = 0, $order_by = "", $limit = 10, $offset = 0, $count = false, $site_guid = 0)
- {
- global $CONFIG;
-
- $start_time = (int)$start_time;
- $end_time = (int)$end_time;
- $relationship = sanitise_string($relationship);
- $relationship_guid = (int)$relationship_guid;
- $inverse_relationship = (bool)$inverse_relationship;
- $type = sanitise_string($type);
- $subtype = get_subtype_id($type, $subtype);
- $owner_guid = (int)$owner_guid;
- if ($order_by == "") $order_by = "time_created desc";
- $order_by = sanitise_string($order_by);
- $limit = (int)$limit;
- $offset = (int)$offset;
- $site_guid = (int) $site_guid;
- if ($site_guid == 0)
- $site_guid = $CONFIG->site_guid;
-
- //$access = get_access_list();
-
- $where = array();
-
- if ($relationship!="")
- $where[] = "r.relationship='$relationship'";
- if ($relationship_guid)
- $where[] = ($inverse_relationship ? "r.guid_two='$relationship_guid'" : "r.guid_one='$relationship_guid'");
- if ($type != "")
- $where[] = "e.type='$type'";
- if ($subtype)
- $where[] = "e.subtype=$subtype";
- if ($owner_guid != "")
- $where[] = "e.container_guid='$owner_guid'";
- if ($site_guid > 0)
- $where[] = "e.site_guid = {$site_guid}";
-
- // Add the calendar stuff
- $cal_join = "
- JOIN {$CONFIG->dbprefix}metadata cal_start on e.guid=cal_start.entity_guid
- JOIN {$CONFIG->dbprefix}metastrings cal_start_name on cal_start.name_id=cal_start_name.id
- JOIN {$CONFIG->dbprefix}metastrings cal_start_value on cal_start.value_id=cal_start_value.id
-
- JOIN {$CONFIG->dbprefix}metadata cal_end on e.guid=cal_end.entity_guid
- JOIN {$CONFIG->dbprefix}metastrings cal_end_name on cal_end.name_id=cal_end_name.id
- JOIN {$CONFIG->dbprefix}metastrings cal_end_value on cal_end.value_id=cal_end_value.id
- ";
- $where[] = "cal_start_name.string='calendar_start'";
- $where[] = "cal_start_value.string>=$start_time";
- $where[] = "cal_end_name.string='calendar_end'";
- $where[] = "cal_end_value.string <= $end_time";
-
- // Select what we're joining based on the options
- $joinon = "e.guid = r.guid_one";
- if (!$inverse_relationship)
- $joinon = "e.guid = r.guid_two";
-
- if ($count) {
- $query = "SELECT count(distinct e.guid) as total ";
- } else {
- $query = "SELECT distinct e.* ";
+ } else {
+ $owner_guid = (int) $owner_guid;
+ }
+
+ if ($site_guid == 0) {
+ $site_guid = $CONFIG->site_guid;
+ }
+
+ //$access = get_access_list();
+
+ $where = array();
+
+ if ($entity_type != "") {
+ $where[] = "e.type='$entity_type'";
+ }
+
+ if ($entity_subtype) {
+ $where[] = "e.subtype=$entity_subtype";
+ }
+
+ if ($meta_name != "") {
+ $where[] = "m.name_id='$meta_n'";
+ }
+
+ if ($meta_value != "") {
+ $where[] = "m.value_id='$meta_v'";
+ }
+
+ if ($site_guid > 0) {
+ $where[] = "e.site_guid = {$site_guid}";
+ }
+
+ if (is_array($owner_guid)) {
+ $where[] = "e.container_guid in (" . implode(",", $owner_guid) . ")";
+ } else if ($owner_guid > 0) {
+ $where[] = "e.container_guid = {$owner_guid}";
+ }
+
+ // Add the calendar stuff
+ $cal_join = "
+ JOIN {$CONFIG->dbprefix}metadata cal_start on e.guid=cal_start.entity_guid
+ JOIN {$CONFIG->dbprefix}metastrings cal_start_name on cal_start.name_id=cal_start_name.id
+ JOIN {$CONFIG->dbprefix}metastrings cal_start_value on cal_start.value_id=cal_start_value.id
+
+ JOIN {$CONFIG->dbprefix}metadata cal_end on e.guid=cal_end.entity_guid
+ JOIN {$CONFIG->dbprefix}metastrings cal_end_name on cal_end.name_id=cal_end_name.id
+ JOIN {$CONFIG->dbprefix}metastrings cal_end_value on cal_end.value_id=cal_end_value.id
+ ";
+
+ $where[] = "cal_start_name.string='calendar_start'";
+ $where[] = "cal_start_value.string>=$start_time";
+ $where[] = "cal_end_name.string='calendar_end'";
+ $where[] = "cal_end_value.string <= $end_time";
+
+ if (!$count) {
+ $query = "SELECT distinct e.* ";
+ } else {
+ $query = "SELECT count(distinct e.guid) as total ";
+ }
+
+ $query .= "from {$CONFIG->dbprefix}entities e"
+ . " JOIN {$CONFIG->dbprefix}metadata m on e.guid = m.entity_guid $cal_join where";
+
+ foreach ($where as $w) {
+ $query .= " $w and ";
+ }
+
+ // Add access controls
+ $query .= get_access_sql_suffix("e");
+ $query .= ' and ' . get_access_sql_suffix("m");
+
+ if (!$count) {
+ // Add order and limit
+ $query .= " order by $order_by limit $offset, $limit";
+ return get_data($query, "entity_row_to_elggstar");
+ } else {
+ if ($row = get_data_row($query)) {
+ return $row->total;
}
- $query .= " from {$CONFIG->dbprefix}entity_relationships r JOIN {$CONFIG->dbprefix}entities e on $joinon $cal_join where ";
- foreach ($where as $w)
- $query .= " $w and ";
- $query .= get_access_sql_suffix("e"); // Add access controls
- if (!$count) {
- $query .= " order by $order_by limit $offset, $limit"; // Add order and limit
- return get_data($query, "entity_row_to_elggstar");
- } else {
- if ($count = get_data_row($query)) {
- return $count->total;
- }
+ }
+
+ return false;
+}
+
+/**
+ * Return the notable entities for a given time period based on their relationship.
+ *
+ * @param int $start_time The start time as a unix timestamp.
+ * @param int $end_time The end time as a unix timestamp.
+ * @param string $relationship The relationship eg "friends_of"
+ * @param int $relationship_guid The guid of the entity to use query
+ * @param bool $inverse_relationship Reverse the normal function of the query to say
+ * "give me all entities for whom $relationship_guid is a
+ * $relationship of"
+ * @param string $type Entity type
+ * @param string $subtype Entity subtype
+ * @param int $owner_guid Owner GUID
+ * @param string $order_by Optional Order by
+ * @param int $limit Limit
+ * @param int $offset Offset
+ * @param boolean $count If true returns a count of entities (default false)
+ * @param int $site_guid Site to get entities for. Default 0 = current site. -1 = any
+ *
+ * @return array|int|false An array of entities, or the number of entities, or false on failure
+ * @access private
+ */
+function get_noteable_entities_from_relationship($start_time, $end_time, $relationship,
+$relationship_guid, $inverse_relationship = false, $type = "", $subtype = "", $owner_guid = 0,
+$order_by = "", $limit = 10, $offset = 0, $count = false, $site_guid = 0) {
+
+ global $CONFIG;
+
+ $start_time = (int)$start_time;
+ $end_time = (int)$end_time;
+ $relationship = sanitise_string($relationship);
+ $relationship_guid = (int)$relationship_guid;
+ $inverse_relationship = (bool)$inverse_relationship;
+ $type = sanitise_string($type);
+ $subtype = get_subtype_id($type, $subtype);
+ $owner_guid = (int)$owner_guid;
+ if ($order_by == "") {
+ $order_by = "time_created desc";
+ }
+ $order_by = sanitise_string($order_by);
+ $limit = (int)$limit;
+ $offset = (int)$offset;
+ $site_guid = (int) $site_guid;
+ if ($site_guid == 0) {
+ $site_guid = $CONFIG->site_guid;
+ }
+
+ //$access = get_access_list();
+
+ $where = array();
+
+ if ($relationship != "") {
+ $where[] = "r.relationship='$relationship'";
+ }
+ if ($relationship_guid) {
+ $where[] = $inverse_relationship ?
+ "r.guid_two='$relationship_guid'" : "r.guid_one='$relationship_guid'";
+ }
+ if ($type != "") {
+ $where[] = "e.type='$type'";
+ }
+ if ($subtype) {
+ $where[] = "e.subtype=$subtype";
+ }
+ if ($owner_guid != "") {
+ $where[] = "e.container_guid='$owner_guid'";
+ }
+ if ($site_guid > 0) {
+ $where[] = "e.site_guid = {$site_guid}";
+ }
+
+ // Add the calendar stuff
+ $cal_join = "
+ JOIN {$CONFIG->dbprefix}metadata cal_start on e.guid=cal_start.entity_guid
+ JOIN {$CONFIG->dbprefix}metastrings cal_start_name on cal_start.name_id=cal_start_name.id
+ JOIN {$CONFIG->dbprefix}metastrings cal_start_value on cal_start.value_id=cal_start_value.id
+
+ JOIN {$CONFIG->dbprefix}metadata cal_end on e.guid=cal_end.entity_guid
+ JOIN {$CONFIG->dbprefix}metastrings cal_end_name on cal_end.name_id=cal_end_name.id
+ JOIN {$CONFIG->dbprefix}metastrings cal_end_value on cal_end.value_id=cal_end_value.id
+ ";
+ $where[] = "cal_start_name.string='calendar_start'";
+ $where[] = "cal_start_value.string>=$start_time";
+ $where[] = "cal_end_name.string='calendar_end'";
+ $where[] = "cal_end_value.string <= $end_time";
+
+ // Select what we're joining based on the options
+ $joinon = "e.guid = r.guid_one";
+ if (!$inverse_relationship) {
+ $joinon = "e.guid = r.guid_two";
+ }
+
+ if ($count) {
+ $query = "SELECT count(distinct e.guid) as total ";
+ } else {
+ $query = "SELECT distinct e.* ";
+ }
+ $query .= " from {$CONFIG->dbprefix}entity_relationships r"
+ . " JOIN {$CONFIG->dbprefix}entities e on $joinon $cal_join where ";
+
+ foreach ($where as $w) {
+ $query .= " $w and ";
+ }
+ // Add access controls
+ $query .= get_access_sql_suffix("e");
+ if (!$count) {
+ $query .= " order by $order_by limit $offset, $limit"; // Add order and limit
+ return get_data($query, "entity_row_to_elggstar");
+ } else {
+ if ($count = get_data_row($query)) {
+ return $count->total;
}
- return false;
}
-
- /**
- * Get all entities for today.
- *
- * @param string $type The type of entity (eg "user", "object" etc)
- * @param string $subtype The arbitrary subtype of the entity
- * @param int $owner_guid The GUID of the owning user
- * @param string $order_by The field to order by; by default, time_created desc
- * @param int $limit The number of entities to return; 10 by default
- * @param int $offset The indexing offset, 0 by default
- * @param boolean $count Set to true to get a count rather than the entities themselves (limits and offsets don't apply in this context). Defaults to false.
- * @param int $site_guid The site to get entities for. Leave as 0 (default) for the current site; -1 for all sites.
- * @param int|array $container_guid The container or containers to get entities from (default: all containers).
- */
- function get_todays_entities($type = "", $subtype = "", $owner_guid = 0, $order_by = "", $limit = 10, $offset = 0, $count = false, $site_guid = 0, $container_guid = null)
- {
- $day_start = get_day_start();
- $day_end = get_day_end();
-
- return get_notable_entities($day_start, $day_end, $type, $subtype, $owner_guid, $order_by, $limit, $offset, $count, $site_guid, $container_guid);
- }
-
- /**
- * Get entities for today from metadata.
- *
- * @param mixed $meta_name
- * @param mixed $meta_value
- * @param string $entity_type The type of entity to look for, eg 'site' or 'object'
- * @param string $entity_subtype The subtype of the entity.
- * @param int $limit
- * @param int $offset
- * @param string $order_by Optional ordering.
- * @param int $site_guid The site to get entities for. Leave as 0 (default) for the current site; -1 for all sites.
- * @param true|false $count If set to true, returns the total number of entities rather than a list. (Default: false)
- *
- * @return int|array A list of entities, or a count if $count is set to true
- */
- function get_todays_entities_from_metadata($meta_name, $meta_value = "", $entity_type = "", $entity_subtype = "", $owner_guid = 0, $limit = 10, $offset = 0, $order_by = "", $site_guid = 0, $count = false)
- {
- $day_start = get_day_start();
- $day_end = get_day_end();
-
- return get_notable_entities_from_metadata($day_start, $day_end, $meta_name, $meta_value, $entity_type, $entity_subtype, $owner_guid, $limit, $offset, $order_by, $site_guid, $count);
- }
-
- /**
- * Get entities for today from a relationship
- *
- * @param string $relationship The relationship eg "friends_of"
- * @param int $relationship_guid The guid of the entity to use query
- * @param bool $inverse_relationship Reverse the normal function of the query to instead say "give me all entities for whome $relationship_guid is a $relationship of"
- * @param string $type
- * @param string $subtype
- * @param int $owner_guid
- * @param string $order_by
- * @param int $limit
- * @param int $offset
- * @param boolean $count Set to true if you want to count the number of entities instead (default false)
- * @param int $site_guid The site to get entities for. Leave as 0 (default) for the current site; -1 for all sites.
- * @return array|int|false An array of entities, or the number of entities, or false on failure
- */
- function get_todays_entities_from_relationship($relationship, $relationship_guid, $inverse_relationship = false, $type = "", $subtype = "", $owner_guid = 0, $order_by = "", $limit = 10, $offset = 0, $count = false, $site_guid = 0)
- {
- $day_start = get_day_start();
- $day_end = get_day_end();
-
- return get_notable_entities_from_relationship($day_start, $day_end, $relationship, $relationship_guid, $inverse_relationship, $type, $subtype, $owner_guid, $order_by, $limit, $offset, $count, $site_guid);
- }
-
- /**
- * Returns a viewable list of entities for a given time period.
- *
- * @see elgg_view_entity_list
- *
- * @param int $start_time The start time as a unix timestamp.
- * @param int $end_time The end time as a unix timestamp.
- * @param string $type The type of entity (eg "user", "object" etc)
- * @param string $subtype The arbitrary subtype of the entity
- * @param int $owner_guid The GUID of the owning user
- * @param int $limit The number of entities to display per page (default: 10)
- * @param true|false $fullview Whether or not to display the full view (default: true)
- * @param true|false $viewtypetoggle Whether or not to allow gallery view
- * @param true|false $pagination Display pagination? Default: true
- * @return string A viewable list of entities
- */
- function list_notable_entities($start_time, $end_time, $type= "", $subtype = "", $owner_guid = 0, $limit = 10, $fullview = true, $viewtypetoggle = false, $navigation = true) {
-
- $offset = (int) get_input('offset');
- $count = get_notable_entities($start_time, $end_time, $type, $subtype, $owner_guid, "", $limit, $offset, true);
- $entities = get_notable_entities($start_time, $end_time,$type, $subtype, $owner_guid, "", $limit, $offset);
-
- return elgg_view_entity_list($entities, $count, $offset, $limit, $fullview, $viewtypetoggle, $navigation);
-
- }
-
- /**
- * Return a list of today's entities.
- *
- * @see list_notable_entities
- *
- * @param string $type The type of entity (eg "user", "object" etc)
- * @param string $subtype The arbitrary subtype of the entity
- * @param int $owner_guid The GUID of the owning user
- * @param int $limit The number of entities to display per page (default: 10)
- * @param true|false $fullview Whether or not to display the full view (default: true)
- * @param true|false $viewtypetoggle Whether or not to allow gallery view
- * @param true|false $pagination Display pagination? Default: true
- * @return string A viewable list of entities
- */
- function list_todays_entities($type= "", $subtype = "", $owner_guid = 0, $limit = 10, $fullview = true, $viewtypetoggle = false, $navigation = true) {
-
- $day_start = get_day_start();
- $day_end = get_day_end();
-
- return list_notable_entities($day_start, $day_end, $type, $subtype, $owner_guid, $limit, $fullview, $viewtypetoggle, $navigation);
- }
-?> \ No newline at end of file
+ return false;
+}
+
+/**
+ * Get all entities for today.
+ *
+ * @param string $type The type of entity (eg "user", "object" etc)
+ * @param string $subtype The arbitrary subtype of the entity
+ * @param int $owner_guid The GUID of the owning user
+ * @param string $order_by The field to order by; by default, time_created desc
+ * @param int $limit The number of entities to return; 10 by default
+ * @param int $offset The indexing offset, 0 by default
+ * @param boolean $count If true returns a count of entities (default false)
+ * @param int $site_guid Site to get entities for. Default 0 = current site. -1 = any
+ * @param mixed $container_guid Container(s) to get entities from (default: any).
+ *
+ * @return array|false
+ * @access private
+ */
+function get_todays_entities($type = "", $subtype = "", $owner_guid = 0, $order_by = "",
+$limit = 10, $offset = 0, $count = false, $site_guid = 0, $container_guid = null) {
+
+ $day_start = get_day_start();
+ $day_end = get_day_end();
+
+ return get_notable_entities($day_start, $day_end, $type, $subtype, $owner_guid, $order_by,
+ $limit, $offset, $count, $site_guid, $container_guid);
+}
+
+/**
+ * Get entities for today from metadata.
+ *
+ * @param mixed $meta_name Metadata name
+ * @param mixed $meta_value Metadata value
+ * @param string $entity_type The type of entity to look for, eg 'site' or 'object'
+ * @param string $entity_subtype The subtype of the entity.
+ * @param int $owner_guid Owner GUID
+ * @param int $limit Limit
+ * @param int $offset Offset
+ * @param string $order_by Optional ordering.
+ * @param int $site_guid Site to get entities for. Default 0 = current site. -1 = any.
+ * @param bool $count If true, returns count instead of entities. (Default: false)
+ *
+ * @return int|array A list of entities, or a count if $count is set to true
+ * @access private
+ */
+function get_todays_entities_from_metadata($meta_name, $meta_value = "", $entity_type = "",
+$entity_subtype = "", $owner_guid = 0, $limit = 10, $offset = 0, $order_by = "", $site_guid = 0,
+$count = false) {
+
+ $day_start = get_day_start();
+ $day_end = get_day_end();
+
+ return get_notable_entities_from_metadata($day_start, $day_end, $meta_name, $meta_value,
+ $entity_type, $entity_subtype, $owner_guid, $limit, $offset, $order_by, $site_guid, $count);
+}
+
+/**
+ * Get entities for today from a relationship
+ *
+ * @param string $relationship The relationship eg "friends_of"
+ * @param int $relationship_guid The guid of the entity to use query
+ * @param bool $inverse_relationship Reverse the normal function of the query to say
+ * "give me all entities for whom $relationship_guid is a
+ * $relationship of"
+ * @param string $type Entity type
+ * @param string $subtype Entity subtype
+ * @param int $owner_guid Owner GUID
+ * @param string $order_by Optional Order by
+ * @param int $limit Limit
+ * @param int $offset Offset
+ * @param boolean $count If true returns a count of entities (default false)
+ * @param int $site_guid Site to get entities for. Default 0 = current site. -1 = any
+ *
+ * @return array|int|false An array of entities, or the number of entities, or false on failure
+ * @access private
+ */
+function get_todays_entities_from_relationship($relationship, $relationship_guid,
+$inverse_relationship = false, $type = "", $subtype = "", $owner_guid = 0,
+$order_by = "", $limit = 10, $offset = 0, $count = false, $site_guid = 0) {
+
+ $day_start = get_day_start();
+ $day_end = get_day_end();
+
+ return get_notable_entities_from_relationship($day_start, $day_end, $relationship,
+ $relationship_guid, $inverse_relationship, $type, $subtype, $owner_guid, $order_by,
+ $limit, $offset, $count, $site_guid);
+}
+
+/**
+ * Returns a viewable list of entities for a given time period.
+ *
+ * @see elgg_view_entity_list
+ *
+ * @param int $start_time The start time as a unix timestamp.
+ * @param int $end_time The end time as a unix timestamp.
+ * @param string $type The type of entity (eg "user", "object" etc)
+ * @param string $subtype The arbitrary subtype of the entity
+ * @param int $owner_guid The GUID of the owning user
+ * @param int $limit The number of entities to return; 10 by default
+ * @param boolean $fullview Whether or not to display the full view (default: true)
+ * @param boolean $listtypetoggle Whether or not to allow gallery view
+ * @param boolean $navigation Display pagination? Default: true
+ *
+ * @return string A viewable list of entities
+ * @access private
+ */
+function list_notable_entities($start_time, $end_time, $type= "", $subtype = "", $owner_guid = 0,
+$limit = 10, $fullview = true, $listtypetoggle = false, $navigation = true) {
+
+ $offset = (int) get_input('offset');
+ $count = get_notable_entities($start_time, $end_time, $type, $subtype,
+ $owner_guid, "", $limit, $offset, true);
+
+ $entities = get_notable_entities($start_time, $end_time, $type, $subtype,
+ $owner_guid, "", $limit, $offset);
+
+ return elgg_view_entity_list($entities, $count, $offset, $limit,
+ $fullview, $listtypetoggle, $navigation);
+}
+
+/**
+ * Return a list of today's entities.
+ *
+ * @see list_notable_entities
+ *
+ * @param string $type The type of entity (eg "user", "object" etc)
+ * @param string $subtype The arbitrary subtype of the entity
+ * @param int $owner_guid The GUID of the owning user
+ * @param int $limit The number of entities to return; 10 by default
+ * @param boolean $fullview Whether or not to display the full view (default: true)
+ * @param boolean $listtypetoggle Whether or not to allow gallery view
+ * @param boolean $navigation Display pagination? Default: true
+ *
+ * @return string A viewable list of entities
+ * @access private
+ */
+function list_todays_entities($type= "", $subtype = "", $owner_guid = 0, $limit = 10,
+$fullview = true, $listtypetoggle = false, $navigation = true) {
+
+ $day_start = get_day_start();
+ $day_end = get_day_end();
+
+ return list_notable_entities($day_start, $day_end, $type, $subtype, $owner_guid, $limit,
+ $fullview, $listtypetoggle, $navigation);
+}
diff --git a/engine/lib/configuration.php b/engine/lib/configuration.php
index 698bccc73..55e5bbd36 100644
--- a/engine/lib/configuration.php
+++ b/engine/lib/configuration.php
@@ -1,201 +1,632 @@
-<?php
-
- /**
- * Elgg configuration library
- * Contains functions for managing system configuration
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
-
-
- /**
- * Unset a config option.
- *
- * @param string $name The name of the field.
- * @param int $site_guid Optionally, the GUID of the site (current site is assumed by default).
- * @return mixed
- */
- function unset_config($name, $site_guid = 0)
- {
- global $CONFIG;
-
- $name = mysql_real_escape_string($name);
- $site_guid = (int) $site_guid;
- if ($site_guid == 0)
+<?php
+/**
+ * Elgg configuration procedural code.
+ *
+ * Includes functions for manipulating the configuration values stored in the database
+ * Plugin authors should use the {@link elgg_get_config()}, {@link elgg_set_config()},
+ * {@link elgg_save_config()}, and {@unset_config()} functions to access or update
+ * config values.
+ *
+ * Elgg's configuration is split among 2 tables and 1 file:
+ * - dbprefix_config
+ * - dbprefix_datalists
+ * - engine/settings.php (See {@link settings.example.php})
+ *
+ * Upon system boot, all values in dbprefix_config are read into $CONFIG.
+ *
+ * @package Elgg.Core
+ * @subpackage Configuration
+ */
+
+/**
+ * Get the URL for the current (or specified) site
+ *
+ * @param int $site_guid The GUID of the site whose URL we want to grab
+ * @return string
+ * @since 1.8.0
+ */
+function elgg_get_site_url($site_guid = 0) {
+ if ($site_guid == 0) {
+ global $CONFIG;
+ return $CONFIG->wwwroot;
+ }
+
+ $site = get_entity($site_guid);
+
+ if (!$site instanceof ElggSite) {
+ return false;
+ }
+ /* @var ElggSite $site */
+
+ return $site->url;
+}
+
+/**
+ * Get the plugin path for this installation
+ *
+ * @return string
+ * @since 1.8.0
+ */
+function elgg_get_plugins_path() {
+ global $CONFIG;
+ return $CONFIG->pluginspath;
+}
+
+/**
+ * Get the data directory path for this installation
+ *
+ * @return string
+ * @since 1.8.0
+ */
+function elgg_get_data_path() {
+ global $CONFIG;
+ return $CONFIG->dataroot;
+}
+
+/**
+ * Get the root directory path for this installation
+ *
+ * @return string
+ * @since 1.8.0
+ */
+function elgg_get_root_path() {
+ global $CONFIG;
+ return $CONFIG->path;
+}
+
+/**
+ * Get an Elgg configuration value
+ *
+ * @param string $name Name of the configuration value
+ * @param int $site_guid NULL for installation setting, 0 for default site
+ *
+ * @return mixed Configuration value or null if it does not exist
+ * @since 1.8.0
+ */
+function elgg_get_config($name, $site_guid = 0) {
+ global $CONFIG;
+
+ $name = trim($name);
+
+ if (isset($CONFIG->$name)) {
+ return $CONFIG->$name;
+ }
+
+ if ($site_guid === null) {
+ // installation wide setting
+ $value = datalist_get($name);
+ } else {
+ // hit DB only if we're not sure if value exists or not
+ if (!isset($CONFIG->site_config_loaded)) {
+ // site specific setting
+ if ($site_guid == 0) {
$site_guid = (int) $CONFIG->site_id;
-
- return delete_data("delete from {$CONFIG->dbprefix}config where name='$name' and site_guid=$site_guid");
+ }
+ $value = get_config($name, $site_guid);
+ } else {
+ $value = null;
}
-
- /**
- * Sets a configuration value
- *
- * @param string $name The name of the configuration value
- * @param string $value Its value
- * @param int $site_guid Optionally, the GUID of the site (current site is assumed by default)
- * @return false|int 1 or false depending on success or failure
- */
- function set_config($name, $value, $site_guid = 0) {
-
- global $CONFIG;
-
- // Unset existing
- unset_config($name,$site_guid);
-
- $name = mysql_real_escape_string($name);
- $value = mysql_real_escape_string($value);
- $site_guid = (int) $site_guid;
- if ($site_guid == 0)
- $site_guid = (int) $CONFIG->site_id;
- $CONFIG->$name = $value;
- $value = sanitise_string(serialize($value));
-
- return insert_data("insert into {$CONFIG->dbprefix}config set name = '{$name}', value = '{$value}', site_guid = {$site_guid}");
-
- }
-
- /**
- * Gets a configuration value
- *
- * @param string $name The name of the config value
- * @param int $site_guid Optionally, the GUID of the site (current site is assumed by default)
- * @return mixed|false Depending on success
- */
- function get_config($name, $site_guid = 0) {
-
- global $CONFIG;
- if (isset($CONFIG->$name))
- return $CONFIG->$name;
- $name = mysql_real_escape_string($name);
- $site_guid = (int) $site_guid;
- if ($site_guid == 0)
- $site_guid = (int) $CONFIG->site_id;
- if ($result = get_data_row("SELECT value from {$CONFIG->dbprefix}config where name = '{$name}' and site_guid = {$site_guid}")) {
- $result = $result->value;
- $result = unserialize($result->value);
- $CONFIG->$name = $result;
- return $result;
- }
- return false;
-
+ }
+
+ // @todo document why we don't cache false
+ if ($value === false) {
+ return null;
+ }
+
+ $CONFIG->$name = $value;
+ return $value;
+}
+
+/**
+ * Set an Elgg configuration value
+ *
+ * @warning This does not persist the configuration setting. Use elgg_save_config()
+ *
+ * @param string $name Name of the configuration value
+ * @param mixed $value Value
+ *
+ * @return void
+ * @since 1.8.0
+ */
+function elgg_set_config($name, $value) {
+ global $CONFIG;
+
+ $name = trim($name);
+
+ $CONFIG->$name = $value;
+}
+
+/**
+ * Save a configuration setting
+ *
+ * @param string $name Configuration name (cannot be greater than 255 characters)
+ * @param mixed $value Configuration value. Should be string for installation setting
+ * @param int $site_guid NULL for installation setting, 0 for default site
+ *
+ * @return bool
+ * @since 1.8.0
+ */
+function elgg_save_config($name, $value, $site_guid = 0) {
+ global $CONFIG;
+
+ $name = trim($name);
+
+ if (strlen($name) > 255) {
+ elgg_log("The name length for configuration variables cannot be greater than 255", "ERROR");
+ return false;
+ }
+
+ elgg_set_config($name, $value);
+
+ if ($site_guid === NULL) {
+ if (is_array($value) || is_object($value)) {
+ return false;
}
-
- /**
- * Gets all the configuration details in the config database for a given site.
- *
- * @param int $site_guid Optionally, the GUID of the site (current site is assumed by default)
- */
- function get_all_config($site_guid = 0)
- {
- global $CONFIG;
-
- $site_guid = (int) $site_guid;
-
- if ($site_guid == 0)
- $site_guid = (int) $CONFIG->site_id;
-
- if ($result = get_data("SELECT * from {$CONFIG->dbprefix}config where site_guid = {$site_guid}")) {
- foreach ($result as $r)
- {
- $name = $r->name;
- $value = $r->value;
- $CONFIG->$name = unserialize($value);
- }
-
- return true;
+ return datalist_set($name, $value);
+ } else {
+ if ($site_guid == 0) {
+ $site_guid = (int) $CONFIG->site_id;
+ }
+ return set_config($name, $value, $site_guid);
+ }
+}
+
+/**
+ * Check that installation has completed and the database is populated.
+ *
+ * @throws InstallationException|DatabaseException
+ * @return void
+ * @access private
+ */
+function verify_installation() {
+ global $CONFIG;
+
+ if (isset($CONFIG->installed)) {
+ return;
+ }
+
+ try {
+ $dblink = get_db_link('read');
+ if (!$dblink) {
+ throw new DatabaseException();
+ }
+
+ mysql_query("SELECT value FROM {$CONFIG->dbprefix}datalists WHERE name = 'installed'", $dblink);
+ if (mysql_errno($dblink) > 0) {
+ throw new DatabaseException();
+ }
+
+ $CONFIG->installed = true;
+
+ } catch (DatabaseException $e) {
+ throw new InstallationException(elgg_echo('InstallationException:SiteNotInstalled'));
+ }
+}
+
+/**
+ * An array of key value pairs from the datalists table.
+ *
+ * Used as a cache in datalist functions.
+ *
+ * @global array $DATALIST_CACHE
+ */
+$DATALIST_CACHE = array();
+
+/**
+ * Get the value of a datalist element.
+ *
+ * @internal Datalists are stored in the datalist table.
+ *
+ * @tip Use datalists to store information common to a full installation.
+ *
+ * @param string $name The name of the datalist
+ * @return string|null|false String if value exists, null if doesn't, false on error
+ * @access private
+ */
+function datalist_get($name) {
+ global $CONFIG, $DATALIST_CACHE;
+
+ $name = trim($name);
+
+ // cannot store anything longer than 255 characters in db, so catch here
+ if (elgg_strlen($name) > 255) {
+ elgg_log("The name length for configuration variables cannot be greater than 255", "ERROR");
+ return false;
+ }
+
+ $name = sanitise_string($name);
+ if (isset($DATALIST_CACHE[$name])) {
+ return $DATALIST_CACHE[$name];
+ }
+
+ // If memcache enabled then cache value in memcache
+ $value = null;
+ static $datalist_memcache;
+ if ((!$datalist_memcache) && (is_memcache_available())) {
+ $datalist_memcache = new ElggMemcache('datalist_memcache');
+ }
+ if ($datalist_memcache) {
+ $value = $datalist_memcache->load($name);
+ }
+ if ($value) {
+ return $value;
+ }
+
+ // [Marcus Povey 20090217 : Now retrieving all datalist values on first
+ // load as this saves about 9 queries per page]
+ // This also causes OOM problems when the datalists table is large
+ // @todo make a list of datalists that we want to get in one grab
+ $result = get_data("SELECT * from {$CONFIG->dbprefix}datalists");
+ if ($result) {
+ foreach ($result as $row) {
+ $DATALIST_CACHE[$row->name] = $row->value;
+
+ // Cache it if memcache is available
+ if ($datalist_memcache) {
+ $datalist_memcache->save($row->name, $row->value);
}
- return false;
- }
-
- /**
- * If certain configuration elements don't exist, autodetect sensible defaults
- *
- * @uses $CONFIG The main configuration global
- *
- */
- function set_default_config() {
-
- global $CONFIG;
- if (empty($CONFIG->path))
- $CONFIG->path = str_replace("\\","/",dirname(dirname(dirname(__FILE__)))) . "/";
-
- if (empty($CONFIG->viewpath))
- $CONFIG->viewpath = $CONFIG->path . "views/";
-
- if (empty($CONFIG->pluginspath))
- $CONFIG->pluginspath = $CONFIG->path . "mod/";
-
- if (empty($CONFIG->wwwroot)) {
- /*
- $CONFIG->wwwroot = "http://" . $_SERVER['SERVER_NAME'];
-
- $request = $_SERVER['REQUEST_URI'];
-
- if (strripos($request,"/") < (strlen($request) - 1)) {
- // addressing a file directly, not a dir
- $request = substr($request, 0, strripos($request,"/")+1);
- }
-
- $CONFIG->wwwroot .= $request;
- */
- $pathpart = str_replace("//","/",str_replace($_SERVER['DOCUMENT_ROOT'],"",$CONFIG->path));
- if (substr($pathpart,0,1) != "/") $pathpart = "/" . $pathpart;
- $CONFIG->wwwroot = "http://" . $_SERVER['HTTP_HOST'] . $pathpart;
-
- }
-
- if (empty($CONFIG->url))
- $CONFIG->url = $CONFIG->wwwroot;
-
- if (empty($CONFIG->sitename))
- $CONFIG->sitename = "New Elgg site";
-
- if (empty($CONFIG->language))
- $CONFIG->language = "en";
-
- }
-
- /**
- * Function that provides some config initialisation on system init
- *
- */
-
- function configuration_init() {
-
- global $CONFIG;
-
- if (is_installed() || is_db_installed()) {
-
- $path = datalist_get('path');
- if (!empty($path))
- $CONFIG->path = $path;
- $dataroot = datalist_get('dataroot');
- if (!empty($dataroot))
- $CONFIG->dataroot = $dataroot;
- if (isset($CONFIG->site) && ($CONFIG->site instanceof ElggSite)) {
- $CONFIG->wwwroot = $CONFIG->site->url;
- $CONFIG->sitename = $CONFIG->site->name;
- $CONFIG->sitedescription = $CONFIG->site->description;
- $CONFIG->siteemail = $CONFIG->site->email;
- }
- $CONFIG->url = $CONFIG->wwwroot;
-
- // Load default settings from database
- get_all_config();
-
- return true;
- }
- }
-
- /**
- * Register config_init
- */
-
- register_elgg_event_handler('boot','system','configuration_init',10);
-
-?> \ No newline at end of file
+ }
+
+ if (isset($DATALIST_CACHE[$name])) {
+ return $DATALIST_CACHE[$name];
+ }
+ }
+
+ return null;
+}
+
+/**
+ * Set the value for a datalist element.
+ *
+ * @param string $name The name of the datalist
+ * @param string $value The new value
+ *
+ * @return bool
+ * @access private
+ */
+function datalist_set($name, $value) {
+ global $CONFIG, $DATALIST_CACHE;
+
+ // cannot store anything longer than 255 characters in db, so catch before we set
+ if (elgg_strlen($name) > 255) {
+ elgg_log("The name length for configuration variables cannot be greater than 255", "ERROR");
+ return false;
+ }
+
+ $sanitised_name = sanitise_string($name);
+ $sanitised_value = sanitise_string($value);
+
+ // If memcache is available then invalidate the cached copy
+ static $datalist_memcache;
+ if ((!$datalist_memcache) && (is_memcache_available())) {
+ $datalist_memcache = new ElggMemcache('datalist_memcache');
+ }
+
+ if ($datalist_memcache) {
+ $datalist_memcache->delete($name);
+ }
+
+ $success = insert_data("INSERT into {$CONFIG->dbprefix}datalists"
+ . " set name = '{$sanitised_name}', value = '{$sanitised_value}'"
+ . " ON DUPLICATE KEY UPDATE value='{$sanitised_value}'");
+
+ if ($success !== FALSE) {
+ $DATALIST_CACHE[$name] = $value;
+ return true;
+ } else {
+ return false;
+ }
+}
+
+/**
+ * Run a function one time per installation.
+ *
+ * If you pass a timestamp as the second argument, it will run the function
+ * only if (i) it has never been run before or (ii) the timestamp is >=
+ * the last time it was run.
+ *
+ * @warning Functions are determined by their name. If you change the name of a function
+ * it will be run again.
+ *
+ * @tip Use $timelastupdatedcheck in your plugins init function to perform automated
+ * upgrades. Schedule a function to run once and pass the timestamp of the new release.
+ * This will cause the run once function to be run on all installations. To perform
+ * additional upgrades, create new functions for each release.
+ *
+ * @warning The function name cannot be longer than 255 characters long due to
+ * the current schema for the datalist table.
+ *
+ * @internal A datalist entry $functioname is created with the value of time().
+ *
+ * @param string $functionname The name of the function you want to run.
+ * @param int $timelastupdatedcheck A UNIX timestamp. If time() is > than this,
+ * this function will be run again.
+ *
+ * @return bool
+ */
+function run_function_once($functionname, $timelastupdatedcheck = 0) {
+ $lastupdated = datalist_get($functionname);
+ if ($lastupdated) {
+ $lastupdated = (int) $lastupdated;
+ } elseif ($lastupdated !== false) {
+ $lastupdated = 0;
+ } else {
+ // unable to check datalist
+ return false;
+ }
+ if (is_callable($functionname) && $lastupdated <= $timelastupdatedcheck) {
+ $functionname();
+ datalist_set($functionname, time());
+ return true;
+ } else {
+ return false;
+ }
+}
+
+/**
+ * Removes a config setting.
+ *
+ * @internal
+ * These settings are stored in the dbprefix_config table and read during system
+ * boot into $CONFIG.
+ *
+ * @param string $name The name of the field.
+ * @param int $site_guid Optionally, the GUID of the site (current site is assumed by default).
+ *
+ * @return int|false The number of affected rows or false on error.
+ *
+ * @see get_config()
+ * @see set_config()
+ */
+function unset_config($name, $site_guid = 0) {
+ global $CONFIG;
+
+ if (isset($CONFIG->$name)) {
+ unset($CONFIG->$name);
+ }
+
+ $name = sanitise_string($name);
+ $site_guid = (int) $site_guid;
+ if ($site_guid == 0) {
+ $site_guid = (int) $CONFIG->site_id;
+ }
+
+ $query = "delete from {$CONFIG->dbprefix}config where name='$name' and site_guid=$site_guid";
+ return delete_data($query);
+}
+
+/**
+ * Add or update a config setting.
+ *
+ * If the config name already exists, it will be updated to the new value.
+ *
+ * @internal
+ * These settings are stored in the dbprefix_config table and read during system
+ * boot into $CONFIG.
+ *
+ * @param string $name The name of the configuration value
+ * @param string $value Its value
+ * @param int $site_guid Optionally, the GUID of the site (current site is assumed by default)
+ *
+ * @return bool
+ * @todo The config table doens't have numeric primary keys so insert_data returns 0.
+ * @todo Use "INSERT ... ON DUPLICATE KEY UPDATE" instead of trying to delete then add.
+ * @see unset_config()
+ * @see get_config()
+ * @access private
+ */
+function set_config($name, $value, $site_guid = 0) {
+ global $CONFIG;
+
+ $name = trim($name);
+
+ // cannot store anything longer than 255 characters in db, so catch before we set
+ if (elgg_strlen($name) > 255) {
+ elgg_log("The name length for configuration variables cannot be greater than 255", "ERROR");
+ return false;
+ }
+
+ // Unset existing
+ unset_config($name, $site_guid);
+
+ $site_guid = (int) $site_guid;
+ if ($site_guid == 0) {
+ $site_guid = (int) $CONFIG->site_id;
+ }
+ $CONFIG->$name = $value;
+ $value = sanitise_string(serialize($value));
+
+ $query = "insert into {$CONFIG->dbprefix}config"
+ . " set name = '{$name}', value = '{$value}', site_guid = {$site_guid}";
+ $result = insert_data($query);
+ return $result !== false;
+}
+
+/**
+ * Gets a configuration value
+ *
+ * @internal
+ * These settings are stored in the dbprefix_config table and read during system
+ * boot into $CONFIG.
+ *
+ * @param string $name The name of the config value
+ * @param int $site_guid Optionally, the GUID of the site (current site is assumed by default)
+ *
+ * @return mixed|null
+ * @see set_config()
+ * @see unset_config()
+ * @access private
+ */
+function get_config($name, $site_guid = 0) {
+ global $CONFIG;
+
+ $name = sanitise_string($name);
+ $site_guid = (int) $site_guid;
+
+ // check for deprecated values.
+ // @todo might be a better spot to define this?
+ $new_name = false;
+ switch($name) {
+ case 'viewpath':
+ $new_name = 'view_path';
+ $dep_version = 1.8;
+ break;
+
+ case 'pluginspath':
+ $new_name = 'plugins_path';
+ $dep_version = 1.8;
+ break;
+
+ case 'sitename':
+ $new_name = 'site_name';
+ $dep_version = 1.8;
+ break;
+ }
+
+ // @todo these haven't really been implemented in Elgg 1.8. Complete in 1.9.
+ // show dep message
+ if ($new_name) {
+ // $msg = "Config value $name has been renamed as $new_name";
+ $name = $new_name;
+ // elgg_deprecated_notice($msg, $dep_version);
+ }
+
+ // decide from where to return the value
+ if (isset($CONFIG->$name)) {
+ return $CONFIG->$name;
+ }
+
+ if ($site_guid == 0) {
+ $site_guid = (int) $CONFIG->site_id;
+ }
+
+ $result = get_data_row("SELECT value FROM {$CONFIG->dbprefix}config
+ WHERE name = '{$name}' and site_guid = {$site_guid}");
+
+ if ($result) {
+ $result = $result->value;
+ $result = unserialize($result->value);
+ $CONFIG->$name = $result;
+ return $result;
+ }
+
+ return null;
+}
+
+/**
+ * Loads all configuration values from the dbprefix_config table into $CONFIG.
+ *
+ * @param int $site_guid Optionally, the GUID of the site (current site is assumed by default)
+ *
+ * @return bool
+ * @access private
+ */
+function get_all_config($site_guid = 0) {
+ global $CONFIG;
+
+ $site_guid = (int) $site_guid;
+
+ if ($site_guid == 0) {
+ $site_guid = (int) $CONFIG->site_guid;
+ }
+
+ if ($result = get_data("SELECT * FROM {$CONFIG->dbprefix}config WHERE site_guid = $site_guid")) {
+ foreach ($result as $r) {
+ $name = $r->name;
+ $value = $r->value;
+ $CONFIG->$name = unserialize($value);
+ }
+
+ return true;
+ }
+ return false;
+}
+
+/**
+ * Loads configuration related to this site
+ *
+ * This loads from the config database table and the site entity
+ * @access private
+ */
+function _elgg_load_site_config() {
+ global $CONFIG;
+
+ $CONFIG->site_guid = (int) datalist_get('default_site');
+ $CONFIG->site_id = $CONFIG->site_guid;
+ $CONFIG->site = get_entity($CONFIG->site_guid);
+ if (!$CONFIG->site) {
+ throw new InstallationException(elgg_echo('InstallationException:SiteNotInstalled'));
+ }
+
+ $CONFIG->wwwroot = $CONFIG->site->url;
+ $CONFIG->sitename = $CONFIG->site->name;
+ $CONFIG->sitedescription = $CONFIG->site->description;
+ $CONFIG->siteemail = $CONFIG->site->email;
+ $CONFIG->url = $CONFIG->wwwroot;
+
+ get_all_config();
+ // gives hint to elgg_get_config function how to approach missing values
+ $CONFIG->site_config_loaded = true;
+}
+
+/**
+ * Loads configuration related to Elgg as an application
+ *
+ * This loads from the datalists database table
+ * @access private
+ */
+function _elgg_load_application_config() {
+ global $CONFIG;
+
+ $install_root = str_replace("\\", "/", dirname(dirname(dirname(__FILE__))));
+ $defaults = array(
+ 'path' => "$install_root/",
+ 'view_path' => "$install_root/views/",
+ 'plugins_path' => "$install_root/mod/",
+ 'language' => 'en',
+
+ // compatibility with old names for plugins not using elgg_get_config()
+ 'viewpath' => "$install_root/views/",
+ 'pluginspath' => "$install_root/mod/",
+ );
+
+ foreach ($defaults as $name => $value) {
+ if (empty($CONFIG->$name)) {
+ $CONFIG->$name = $value;
+ }
+ }
+
+ $path = datalist_get('path');
+ if (!empty($path)) {
+ $CONFIG->path = $path;
+ }
+ $dataroot = datalist_get('dataroot');
+ if (!empty($dataroot)) {
+ $CONFIG->dataroot = $dataroot;
+ }
+ $simplecache_enabled = datalist_get('simplecache_enabled');
+ if ($simplecache_enabled !== false) {
+ $CONFIG->simplecache_enabled = $simplecache_enabled;
+ } else {
+ $CONFIG->simplecache_enabled = 1;
+ }
+ $system_cache_enabled = datalist_get('system_cache_enabled');
+ if ($system_cache_enabled !== false) {
+ $CONFIG->system_cache_enabled = $system_cache_enabled;
+ } else {
+ $CONFIG->system_cache_enabled = 1;
+ }
+
+ // initialize context here so it is set before the get_input call
+ $CONFIG->context = array();
+
+ // needs to be set before system, init for links in html head
+ $viewtype = get_input('view', 'default');
+ $lastcached = datalist_get("simplecache_lastcached_$viewtype");
+ $CONFIG->lastcache = $lastcached;
+
+ $CONFIG->i18n_loaded_from_cache = false;
+
+ // this must be synced with the enum for the entities table
+ $CONFIG->entity_types = array('group', 'object', 'site', 'user');
+}
diff --git a/engine/lib/cron.php b/engine/lib/cron.php
index 9cee79100..4f3d05b93 100644
--- a/engine/lib/cron.php
+++ b/engine/lib/cron.php
@@ -1,63 +1,89 @@
<?php
- /**
- * Elgg cron library.
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
-
- /** The cron exception. */
- class CronException extends Exception {}
-
- /**
- * Initialisation
- *
- */
- function cron_init()
- {
- // Register a pagehandler for cron
- register_page_handler('cron','cron_page_handler');
+/**
+ * Elgg cron library.
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+/**
+ * Cron initialization
+ *
+ * @return void
+ * @access private
+ */
+function cron_init() {
+ // Register a pagehandler for cron
+ elgg_register_page_handler('cron', 'cron_page_handler');
+
+ // register a hook for Walled Garden public pages
+ elgg_register_plugin_hook_handler('public_pages', 'walled_garden', 'cron_public_pages');
+}
+
+/**
+ * Cron handler
+ *
+ * @param array $page Pages
+ *
+ * @return bool
+ * @throws CronException
+ * @access private
+ */
+function cron_page_handler($page) {
+ if (!isset($page[0])) {
+ forward();
}
-
- /**
- * Cron handler for redirecting pages.
- *
- * @param unknown_type $page
- */
- function cron_page_handler($page)
- {
- global $CONFIG;
-
- if ($page[0])
- {
- switch (strtolower($page[0]))
- {
- case 'minute' :
- case 'fiveminute' :
- case 'fifteenmin' :
- case 'halfhour' :
- case 'hourly' :
- case 'daily' :
- case 'weekly' :
- case 'monthly':
- case 'yearly' :
- case 'reboot' : set_input('period', $page[0]); break;
- default : throw new CronException(sprintf(elgg_echo('CronException:unknownperiod'), $page[0]));
- }
-
- // Include cron handler
- include($CONFIG->path . "engine/handlers/cron_handler.php");
- }
- else
- forward();
+
+ $period = strtolower($page[0]);
+
+ $allowed_periods = array(
+ 'minute', 'fiveminute', 'fifteenmin', 'halfhour', 'hourly',
+ 'daily', 'weekly', 'monthly', 'yearly', 'reboot'
+ );
+
+ if (!in_array($period, $allowed_periods)) {
+ throw new CronException(elgg_echo('CronException:unknownperiod', array($period)));
}
+ // Get a list of parameters
+ $params = array();
+ $params['time'] = time();
+
+ // Data to return to
+ $old_stdout = "";
+ ob_start();
+
+ $old_stdout = elgg_trigger_plugin_hook('cron', $period, $params, $old_stdout);
+ $std_out = ob_get_clean();
+
+ echo $std_out . $old_stdout;
+ return true;
+}
+
+/**
+ * Register cron's pages as public in case we're in Walled Garden mode
+ *
+ * @param string $hook public_pages
+ * @param string $type system
+ * @param array $return_value Array of pages to allow
+ * @param mixed $params Params
+ *
+ * @return array
+ * @access private
+ */
+function cron_public_pages($hook, $type, $return_value, $params) {
+ $return_value[] = 'cron/minute';
+ $return_value[] = 'cron/fiveminute';
+ $return_value[] = 'cron/fifteenmin';
+ $return_value[] = 'cron/halfhour';
+ $return_value[] = 'cron/hourly';
+ $return_value[] = 'cron/daily';
+ $return_value[] = 'cron/weekly';
+ $return_value[] = 'cron/monthly';
+ $return_value[] = 'cron/yearly';
+ $return_value[] = 'cron/reboot';
- // Register a startup event
- register_elgg_event_handler('init','system','cron_init');
+ return $return_value;
+}
-?> \ No newline at end of file
+elgg_register_event_handler('init', 'system', 'cron_init');
diff --git a/engine/lib/database.php b/engine/lib/database.php
index cd08d9d48..a7949788d 100644
--- a/engine/lib/database.php
+++ b/engine/lib/database.php
@@ -1,637 +1,764 @@
-<?php
-
- /**
- * Elgg database
- * Contains database connection and transfer functionality
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
-
- $DB_PROFILE = array();
- $DB_QUERY_CACHE = array();
- $DB_DELAYED_QUERIES = array();
-
- /**
- * Connect to the database server and use the Elgg database for a particular database link
- *
- * @param string $dblinkname Default "readwrite"; you can change this to set up additional global database links, eg "read" and "write"
- */
- function establish_db_link($dblinkname = "readwrite") {
-
- // Get configuration, and globalise database link
- global $CONFIG, $dblink, $DB_QUERY_CACHE, $dbcalls;
-
- if (!isset($dblink)) {
- $dblink = array();
- }
-
- if ($dblinkname != "readwrite" && isset($CONFIG->db[$dblinkname])) {
- if (is_array($CONFIG->db[$dblinkname])) {
- $index = rand(0,sizeof($CONFIG->db[$dblinkname]));
- $dbhost = $CONFIG->db[$dblinkname][$index]->dbhost;
- $dbuser = $CONFIG->db[$dblinkname][$index]->dbuser;
- $dbpass = $CONFIG->db[$dblinkname][$index]->dbpass;
- $dbname = $CONFIG->db[$dblinkname][$index]->dbname;
- } else {
- $dbhost = $CONFIG->db[$dblinkname]->dbhost;
- $dbuser = $CONFIG->db[$dblinkname]->dbuser;
- $dbpass = $CONFIG->db[$dblinkname]->dbpass;
- $dbname = $CONFIG->db[$dblinkname]->dbname;
- }
- } else {
- $dbhost = $CONFIG->dbhost;
- $dbuser = $CONFIG->dbuser;
- $dbpass = $CONFIG->dbpass;
- $dbname = $CONFIG->dbname;
- }
-
- // Connect to database
- if (!$dblink[$dblinkname] = mysql_connect($CONFIG->dbhost, $CONFIG->dbuser, $CONFIG->dbpass, true))
- throw new DatabaseException(sprintf(elgg_echo('DatabaseException:WrongCredentials'), $CONFIG->dbuser, $CONFIG->dbhost, $CONFIG->debug ? $CONFIG->dbpass : "****"));
- if (!mysql_select_db($CONFIG->dbname, $dblink[$dblinkname]))
- throw new DatabaseException(sprintf(elgg_echo('DatabaseException:NoConnect'), $CONFIG->dbname));
-
- // Set up cache
- if (!$DB_QUERY_CACHE)
- $DB_QUERY_CACHE = new ElggStaticVariableCache('db_query_cache'); //array();
- //$DB_QUERY_CACHE = select_default_memcache('db_query_cache'); //array();
-
- //if ($DB_QUERY_CACHE instanceof ElggMemcache)
- // $DB_QUERY_CACHE->setDefaultExpiry(30);
- }
-
- /**
- * Establish all database connections
- *
- * If the configuration has been set up for multiple read/write databases, set those
- * links up separately; otherwise just create the one database link
- *
- */
-
- function setup_db_connections() {
-
- // Get configuration and globalise database link
- global $CONFIG, $dblink;
-
- if (!empty($CONFIG->db->split)) {
- establish_db_link('read');
- establish_db_link('write');
- } else {
- establish_db_link('readwrite');
- }
-
+<?php
+/**
+ * Elgg database procedural code.
+ *
+ * Includes functions for establishing and retrieving a database link,
+ * reading data, writing data, upgrading DB schemas, and sanitizing input.
+ *
+ * @package Elgg.Core
+ * @subpackage Database
+ */
+
+/**
+ * Query cache for all queries.
+ *
+ * Each query and its results are stored in this cache as:
+ * <code>
+ * $DB_QUERY_CACHE[query hash] => array(result1, result2, ... resultN)
+ * </code>
+ * @see elgg_query_runner() for details on the hash.
+ *
+ * @warning Elgg used to set this as an empty array to turn off the cache
+ *
+ * @global ElggLRUCache|null $DB_QUERY_CACHE
+ * @access private
+ */
+global $DB_QUERY_CACHE;
+$DB_QUERY_CACHE = null;
+
+/**
+ * Queries to be executed upon shutdown.
+ *
+ * These queries are saved to an array and executed using
+ * a function registered by register_shutdown_function().
+ *
+ * Queries are saved as an array in the format:
+ * <code>
+ * $DB_DELAYED_QUERIES[] = array(
+ * 'q' => str $query,
+ * 'l' => resource $dblink,
+ * 'h' => str $handler // a callback function
+ * );
+ * </code>
+ *
+ * @global array $DB_DELAYED_QUERIES
+ * @access private
+ */
+global $DB_DELAYED_QUERIES;
+$DB_DELAYED_QUERIES = array();
+
+/**
+ * Database connection resources.
+ *
+ * Each database link created with establish_db_link($name) is stored in
+ * $dblink as $dblink[$name] => resource. Use get_db_link($name) to retrieve it.
+ *
+ * @global resource[] $dblink
+ * @access private
+ */
+global $dblink;
+$dblink = array();
+
+/**
+ * Database call count
+ *
+ * Each call to the database increments this counter.
+ *
+ * @global integer $dbcalls
+ * @access private
+ */
+global $dbcalls;
+$dbcalls = 0;
+
+/**
+ * Establish a connection to the database servser
+ *
+ * Connect to the database server and use the Elgg database for a particular database link
+ *
+ * @param string $dblinkname The type of database connection. Used to identify the
+ * resource. eg "read", "write", or "readwrite".
+ *
+ * @return void
+ * @throws DatabaseException
+ * @access private
+ */
+function establish_db_link($dblinkname = "readwrite") {
+ // Get configuration, and globalise database link
+ global $CONFIG, $dblink, $DB_QUERY_CACHE;
+
+ if ($dblinkname != "readwrite" && isset($CONFIG->db[$dblinkname])) {
+ if (is_array($CONFIG->db[$dblinkname])) {
+ $index = rand(0, sizeof($CONFIG->db[$dblinkname]));
+ $dbhost = $CONFIG->db[$dblinkname][$index]->dbhost;
+ $dbuser = $CONFIG->db[$dblinkname][$index]->dbuser;
+ $dbpass = $CONFIG->db[$dblinkname][$index]->dbpass;
+ $dbname = $CONFIG->db[$dblinkname][$index]->dbname;
+ } else {
+ $dbhost = $CONFIG->db[$dblinkname]->dbhost;
+ $dbuser = $CONFIG->db[$dblinkname]->dbuser;
+ $dbpass = $CONFIG->db[$dblinkname]->dbpass;
+ $dbname = $CONFIG->db[$dblinkname]->dbname;
}
-
- /**
- * Shutdown hook to display profiling information about db (debug mode)
- */
- function db_profiling_shutdown_hook()
- {
- global $CONFIG, $DB_PROFILE, $dbcalls;
-
- if (isset($CONFIG->debug) && $CONFIG->debug)
- {
- error_log("***************** DB PROFILING ********************");
-
- $DB_PROFILE = array_count_values($DB_PROFILE);
+ } else {
+ $dbhost = $CONFIG->dbhost;
+ $dbuser = $CONFIG->dbuser;
+ $dbpass = $CONFIG->dbpass;
+ $dbname = $CONFIG->dbname;
+ }
+
+ // Connect to database
+ if (!$dblink[$dblinkname] = mysql_connect($dbhost, $dbuser, $dbpass, true)) {
+ $msg = elgg_echo('DatabaseException:WrongCredentials',
+ array($dbuser, $dbhost, "****"));
+ throw new DatabaseException($msg);
+ }
+
+ if (!mysql_select_db($dbname, $dblink[$dblinkname])) {
+ $msg = elgg_echo('DatabaseException:NoConnect', array($dbname));
+ throw new DatabaseException($msg);
+ }
+
+ // Set DB for UTF8
+ mysql_query("SET NAMES utf8");
+
+ $db_cache_off = FALSE;
+ if (isset($CONFIG->db_disable_query_cache)) {
+ $db_cache_off = $CONFIG->db_disable_query_cache;
+ }
+
+ // Set up cache if global not initialized and query cache not turned off
+ if ((!$DB_QUERY_CACHE) && (!$db_cache_off)) {
+ // @todo if we keep this cache in 1.9, expose the size as a config parameter
+ $DB_QUERY_CACHE = new ElggLRUCache(200);
+ }
+}
+
+/**
+ * Establish database connections
+ *
+ * If the configuration has been set up for multiple read/write databases, set those
+ * links up separately; otherwise just create the one database link.
+ *
+ * @return void
+ * @access private
+ */
+function setup_db_connections() {
+ global $CONFIG;
+
+ if (!empty($CONFIG->db->split)) {
+ establish_db_link('read');
+ establish_db_link('write');
+ } else {
+ establish_db_link('readwrite');
+ }
+}
+
+/**
+ * Display profiling information about db at NOTICE debug level upon shutdown.
+ *
+ * @return void
+ * @access private
+ */
+function db_profiling_shutdown_hook() {
+ global $dbcalls;
+
+ // demoted to NOTICE as it corrupts javasript at DEBUG
+ elgg_log("DB Queries for this page: $dbcalls", 'NOTICE');
+}
+
+/**
+ * Execute any delayed queries upon shutdown.
+ *
+ * @return void
+ * @access private
+ */
+function db_delayedexecution_shutdown_hook() {
+ global $DB_DELAYED_QUERIES;
+
+ foreach ($DB_DELAYED_QUERIES as $query_details) {
+ try {
+ $link = $query_details['l'];
+
+ if ($link == 'read' || $link == 'write') {
+ $link = get_db_link($link);
+ } elseif (!is_resource($link)) {
+ elgg_log("Link for delayed query not valid resource or db_link type. Query: {$query_details['q']}", 'WARNING');
+ }
- foreach ($DB_PROFILE as $k => $v)
- error_log("$v times: '$k' ");
+ $result = execute_query($query_details['q'], $link);
- error_log("DB Queries for this page: $dbcalls");
- error_log("***************************************************");
+ if ((isset($query_details['h'])) && (is_callable($query_details['h']))) {
+ $query_details['h']($result);
+ }
+ } catch (Exception $e) {
+ // Suppress all errors since these can't be dealt with here
+ elgg_log($e, 'WARNING');
}
}
-
- /**
- * Execute any delayed queries.
- */
- function db_delayedexecution_shutdown_hook()
- {
- global $DB_DELAYED_QUERIES, $CONFIG;
-
- foreach ($DB_DELAYED_QUERIES as $query_details) {
- $result = execute_query($query_details['q'], $query_details['l']); // use one of our db functions so it is included in profiling.
-
- try {
- if ( (isset($query_details['h'])) && (is_callable($query_details['h'])))
- $query_details['h']($result);
- } catch (Exception $e) { // Suppress all errors since these can't be delt with here
- if (isset($CONFIG->debug) && $CONFIG->debug) error_log($e);
+}
+
+/**
+ * Returns (if required, also creates) a database link resource.
+ *
+ * Database link resources are stored in the {@link $dblink} global. These
+ * resources are created by {@link setup_db_connections()}, which is called if
+ * no links exist.
+ *
+ * @param string $dblinktype The type of link we want: "read", "write" or "readwrite".
+ *
+ * @return resource Database link
+ * @access private
+ */
+function get_db_link($dblinktype) {
+ global $dblink;
+
+ if (isset($dblink[$dblinktype])) {
+ return $dblink[$dblinktype];
+ } else if (isset($dblink['readwrite'])) {
+ return $dblink['readwrite'];
+ } else {
+ setup_db_connections();
+ return get_db_link($dblinktype);
+ }
+}
+
+/**
+ * Execute an EXPLAIN for $query.
+ *
+ * @param string $query The query to explain
+ * @param mixed $link The database link resource to user.
+ *
+ * @return mixed An object of the query's result, or FALSE
+ * @access private
+ */
+function explain_query($query, $link) {
+ if ($result = execute_query("explain " . $query, $link)) {
+ return mysql_fetch_object($result);
+ }
+
+ return FALSE;
+}
+
+/**
+ * Execute a query.
+ *
+ * $query is executed via {@link mysql_query()}. If there is an SQL error,
+ * a {@link DatabaseException} is thrown.
+ *
+ * @internal
+ * {@link $dbcalls} is incremented and the query is saved into the {@link $DB_QUERY_CACHE}.
+ *
+ * @param string $query The query
+ * @param resource $dblink The DB link
+ *
+ * @return resource result of mysql_query()
+ * @throws DatabaseException
+ * @access private
+ */
+function execute_query($query, $dblink) {
+ global $dbcalls;
+
+ if ($query == NULL) {
+ throw new DatabaseException(elgg_echo('DatabaseException:InvalidQuery'));
+ }
+
+ if (!is_resource($dblink)) {
+ throw new DatabaseException(elgg_echo('DatabaseException:InvalidDBLink'));
+ }
+
+ $dbcalls++;
+
+ $result = mysql_query($query, $dblink);
+
+ if (mysql_errno($dblink)) {
+ throw new DatabaseException(mysql_error($dblink) . "\n\n QUERY: " . $query);
+ }
+
+ return $result;
+}
+
+/**
+ * Queue a query for execution upon shutdown.
+ *
+ * You can specify a handler function if you care about the result. This function will accept
+ * the raw result from {@link mysql_query()}.
+ *
+ * @param string $query The query to execute
+ * @param resource|string $dblink The database link to use or the link type (read | write)
+ * @param string $handler A callback function to pass the results array to
+ *
+ * @return true
+ * @access private
+ */
+function execute_delayed_query($query, $dblink, $handler = "") {
+ global $DB_DELAYED_QUERIES;
+
+ if (!isset($DB_DELAYED_QUERIES)) {
+ $DB_DELAYED_QUERIES = array();
+ }
+
+ if (!is_resource($dblink) && $dblink != 'read' && $dblink != 'write') {
+ return false;
+ }
+
+ // Construct delayed query
+ $delayed_query = array();
+ $delayed_query['q'] = $query;
+ $delayed_query['l'] = $dblink;
+ $delayed_query['h'] = $handler;
+
+ $DB_DELAYED_QUERIES[] = $delayed_query;
+
+ return TRUE;
+}
+
+/**
+ * Write wrapper for execute_delayed_query()
+ *
+ * @param string $query The query to execute
+ * @param string $handler The handler if you care about the result.
+ *
+ * @return true
+ * @uses execute_delayed_query()
+ * @uses get_db_link()
+ * @access private
+ */
+function execute_delayed_write_query($query, $handler = "") {
+ return execute_delayed_query($query, 'write', $handler);
+}
+
+/**
+ * Read wrapper for execute_delayed_query()
+ *
+ * @param string $query The query to execute
+ * @param string $handler The handler if you care about the result.
+ *
+ * @return true
+ * @uses execute_delayed_query()
+ * @uses get_db_link()
+ * @access private
+ */
+function execute_delayed_read_query($query, $handler = "") {
+ return execute_delayed_query($query, 'read', $handler);
+}
+
+/**
+ * Retrieve rows from the database.
+ *
+ * Queries are executed with {@link execute_query()} and results
+ * are retrieved with {@link mysql_fetch_object()}. If a callback
+ * function $callback is defined, each row will be passed as the single
+ * argument to $callback. If no callback function is defined, the
+ * entire result set is returned as an array.
+ *
+ * @param mixed $query The query being passed.
+ * @param string $callback Optionally, the name of a function to call back to on each row
+ *
+ * @return array An array of database result objects or callback function results. If the query
+ * returned nothing, an empty array.
+ * @access private
+ */
+function get_data($query, $callback = "") {
+ return elgg_query_runner($query, $callback, false);
+}
+
+/**
+ * Retrieve a single row from the database.
+ *
+ * Similar to {@link get_data()} but returns only the first row
+ * matched. If a callback function $callback is specified, the row will be passed
+ * as the only argument to $callback.
+ *
+ * @param mixed $query The query to execute.
+ * @param string $callback A callback function
+ *
+ * @return mixed A single database result object or the result of the callback function.
+ * @access private
+ */
+function get_data_row($query, $callback = "") {
+ return elgg_query_runner($query, $callback, true);
+}
+
+/**
+ * Handles returning data from a query, running it through a callback function,
+ * and caching the results. This is for R queries (from CRUD).
+ *
+ * @access private
+ *
+ * @param string $query The query to execute
+ * @param string $callback An optional callback function to run on each row
+ * @param bool $single Return only a single result?
+ *
+ * @return array An array of database result objects or callback function results. If the query
+ * returned nothing, an empty array.
+ * @since 1.8.0
+ * @access private
+ */
+function elgg_query_runner($query, $callback = null, $single = false) {
+ global $DB_QUERY_CACHE;
+
+ // Since we want to cache results of running the callback, we need to
+ // need to namespace the query with the callback and single result request.
+ // https://github.com/elgg/elgg/issues/4049
+ $hash = (string)$callback . (int)$single . $query;
+
+ // Is cached?
+ if ($DB_QUERY_CACHE) {
+ if (isset($DB_QUERY_CACHE[$hash])) {
+ elgg_log("DB query $query results returned from cache (hash: $hash)", 'NOTICE');
+ return $DB_QUERY_CACHE[$hash];
+ }
+ }
+
+ $dblink = get_db_link('read');
+ $return = array();
+
+ if ($result = execute_query("$query", $dblink)) {
+
+ // test for callback once instead of on each iteration.
+ // @todo check profiling to see if this needs to be broken out into
+ // explicit cases instead of checking in the iteration.
+ $is_callable = is_callable($callback);
+ while ($row = mysql_fetch_object($result)) {
+ if ($is_callable) {
+ $row = $callback($row);
+ }
+
+ if ($single) {
+ $return = $row;
+ break;
+ } else {
+ $return[] = $row;
}
}
- }
-
- /**
- * Alias to setup_db_connections, for use in the event handler
- *
- * @param string $event The event type
- * @param string $object_type The object type
- * @param mixed $object Used for nothing in this context
- */
- function init_db($event, $object_type, $object = null) {
- register_shutdown_function('db_delayedexecution_shutdown_hook');
- register_shutdown_function('db_profiling_shutdown_hook');
- //setup_db_connections(); // [Marcus Povey 20090213: Db connection moved to first db connection attempt]
- return true;
- }
-
- /**
- * Gets the appropriate db link for the operation mode requested
- *
- * @param string $dblinktype The type of link we want - "read", "write" or "readwrite" (the default)
- * @return object Database link
- */
- function get_db_link($dblinktype) {
-
- global $dblink;
-
-
- if (isset($dblink[$dblinktype])) {
- return $dblink[$dblinktype];
- } else if (isset($dblink['readwrite'])) {
- return $dblink['readwrite'];
- }
- else
- {
- setup_db_connections();
- return get_db_link($dblinktype);
- }
+ }
+
+ if (empty($return)) {
+ elgg_log("DB query $query returned no results.", 'NOTICE');
+ }
+
+ // Cache result
+ if ($DB_QUERY_CACHE) {
+ $DB_QUERY_CACHE[$hash] = $return;
+ elgg_log("DB query $query results cached (hash: $hash)", 'NOTICE');
+ }
+
+ return $return;
+}
+
+/**
+ * Insert a row into the database.
+ *
+ * @note Altering the DB invalidates all queries in {@link $DB_QUERY_CACHE}.
+ *
+ * @param mixed $query The query to execute.
+ *
+ * @return int|false The database id of the inserted row if a AUTO_INCREMENT field is
+ * defined, 0 if not, and false on failure.
+ * @access private
+ */
+function insert_data($query) {
+
+ elgg_log("DB query $query", 'NOTICE');
+
+ $dblink = get_db_link('write');
+
+ _elgg_invalidate_query_cache();
+
+ if (execute_query("$query", $dblink)) {
+ return mysql_insert_id($dblink);
+ }
+
+ return FALSE;
+}
+
+/**
+ * Update the database.
+ *
+ * @note Altering the DB invalidates all queries in {@link $DB_QUERY_CACHE}.
+ *
+ * @param string $query The query to run.
+ *
+ * @return bool
+ * @access private
+ */
+function update_data($query) {
+
+ elgg_log("DB query $query", 'NOTICE');
+
+ $dblink = get_db_link('write');
+
+ _elgg_invalidate_query_cache();
+
+ if (execute_query("$query", $dblink)) {
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+/**
+ * Remove data from the database.
+ *
+ * @note Altering the DB invalidates all queries in {@link $DB_QUERY_CACHE}.
+ *
+ * @param string $query The SQL query to run
+ *
+ * @return int|false The number of affected rows or false on failure
+ * @access private
+ */
+function delete_data($query) {
+
+ elgg_log("DB query $query", 'NOTICE');
+
+ $dblink = get_db_link('write');
+
+ _elgg_invalidate_query_cache();
+
+ if (execute_query("$query", $dblink)) {
+ return mysql_affected_rows($dblink);
+ }
+
+ return FALSE;
+}
+
+/**
+ * Invalidate the query cache
+ *
+ * @access private
+ */
+function _elgg_invalidate_query_cache() {
+ global $DB_QUERY_CACHE;
+ if ($DB_QUERY_CACHE instanceof ElggLRUCache) {
+ $DB_QUERY_CACHE->clear();
+ elgg_log("Query cache invalidated", 'NOTICE');
+ } elseif ($DB_QUERY_CACHE) {
+ // In case someone sets the cache to an array and primes it with data
+ $DB_QUERY_CACHE = array();
+ elgg_log("Query cache invalidated", 'NOTICE');
+ }
+}
+
+/**
+ * Return tables matching the database prefix {@link $CONFIG->dbprefix}% in the currently
+ * selected database.
+ *
+ * @return array|false List of tables or false on failure
+ * @static array $tables Tables found matching the database prefix
+ * @access private
+ */
+function get_db_tables() {
+ global $CONFIG;
+ static $tables;
+
+ if (isset($tables)) {
+ return $tables;
+ }
+
+ try{
+ $result = get_data("show tables like '" . $CONFIG->dbprefix . "%'");
+ } catch (DatabaseException $d) {
+ // Likely we can't handle an exception here, so just return false.
+ return FALSE;
+ }
+
+ $tables = array();
+
+ if (is_array($result) && !empty($result)) {
+ foreach ($result as $row) {
+ $row = (array) $row;
+ if (is_array($row) && !empty($row)) {
+ foreach ($row as $element) {
+ $tables[] = $element;
+ }
+ }
}
-
- /**
- * Explain a given query, useful for debug.
- */
- function explain_query($query, $link)
- {
- if ($result = execute_query("explain " . $query, $link)) {
- return mysql_fetch_object($result);
- }
-
- return false;
+ } else {
+ return FALSE;
+ }
+
+ return $tables;
+}
+
+/**
+ * Optimise a table.
+ *
+ * Executes an OPTIMIZE TABLE query on $table. Useful after large DB changes.
+ *
+ * @param string $table The name of the table to optimise
+ *
+ * @return bool
+ * @access private
+ */
+function optimize_table($table) {
+ $table = sanitise_string($table);
+ return update_data("optimize table $table");
+}
+
+/**
+ * Get the last database error for a particular database link
+ *
+ * @param resource $dblink The DB link
+ *
+ * @return string Database error message
+ * @access private
+ */
+function get_db_error($dblink) {
+ return mysql_error($dblink);
+}
+
+/**
+ * Runs a full database script from disk.
+ *
+ * The file specified should be a standard SQL file as created by
+ * mysqldump or similar. Statements must be terminated with ;
+ * and a newline character (\n or \r\n) with only one statement per line.
+ *
+ * The special string 'prefix_' is replaced with the database prefix
+ * as defined in {@link $CONFIG->dbprefix}.
+ *
+ * @warning Errors do not halt execution of the script. If a line
+ * generates an error, the error message is saved and the
+ * next line is executed. After the file is run, any errors
+ * are displayed as a {@link DatabaseException}
+ *
+ * @param string $scriptlocation The full path to the script
+ *
+ * @return void
+ * @throws DatabaseException
+ * @access private
+ */
+function run_sql_script($scriptlocation) {
+ if ($script = file_get_contents($scriptlocation)) {
+ global $CONFIG;
+
+ $errors = array();
+
+ // Remove MySQL -- style comments
+ $script = preg_replace('/\-\-.*\n/', '', $script);
+
+ // Statements must end with ; and a newline
+ $sql_statements = preg_split('/;[\n\r]+/', $script);
+
+ foreach ($sql_statements as $statement) {
+ $statement = trim($statement);
+ $statement = str_replace("prefix_", $CONFIG->dbprefix, $statement);
+ if (!empty($statement)) {
+ try {
+ update_data($statement);
+ } catch (DatabaseException $e) {
+ $errors[] = $e->getMessage();
+ }
+ }
}
-
- /**
- * Execute a query.
- *
- * @param string $query The query
- * @param link $dblink the DB link
- * @return Returns a the result of mysql_query
- */
- function execute_query($query, $dblink)
- {
- global $CONFIG, $dbcalls, $DB_PROFILE, $DB_QUERY_CACHE;
-
- $dbcalls++;
-
- //if ((isset($CONFIG->debug)) && ($CONFIG->debug==true))
- $DB_PROFILE[] = $query;
-
- $result = mysql_query($query, $dblink);
- $DB_QUERY_CACHE[$query] = -1; // Set initial cache to -1
-
- if (mysql_errno($dblink))
- throw new DatabaseException(mysql_error($dblink) . " QUERY: " . $query);
-
- return $result;
-
+ if (!empty($errors)) {
+ $errortxt = "";
+ foreach ($errors as $error) {
+ $errortxt .= " {$error};";
+ }
+
+ $msg = elgg_echo('DatabaseException:DBSetupIssues') . $errortxt;
+ throw new DatabaseException($msg);
}
-
- /**
- * Queue a query for execution after all output has been sent to the user.
- *
- * You can specify a handler function if you care about the result. This function will accept
- * the raw result from mysql_query();
- *
- * @param string $query The query to execute
- * @param resource $dblink The database link to use
- * @param string $handler The handler
- */
- function execute_delayed_query($query, $dblink, $handler = "")
- {
- global $DB_DELAYED_QUERIES;
-
- if (!isset($DB_DELAYED_QUERIES))
- $DB_DELAYED_QUERIES = array();
-
- // Construct delayed query
- $delayed_query = array();
- $delayed_query['q'] = $query;
- $delayed_query['l'] = $dblink;
- $delayed_query['h'] = $handler;
-
- $DB_DELAYED_QUERIES[] = $delayed_query;
-
- return true;
+ } else {
+ $msg = elgg_echo('DatabaseException:ScriptNotFound', array($scriptlocation));
+ throw new DatabaseException($msg);
+ }
+}
+
+/**
+ * Format a query string for logging
+ *
+ * @param string $query Query string
+ * @return string
+ * @access private
+ */
+function elgg_format_query($query) {
+ // remove newlines and extra spaces so logs are easier to read
+ return preg_replace('/\s\s+/', ' ', $query);
+}
+
+/**
+ * Sanitise a string for database use, but with the option of escaping extra characters.
+ *
+ * @param string $string The string to sanitise
+ * @param string $extra_escapeable Extra characters to escape with '\\'
+ *
+ * @return string The escaped string
+ */
+function sanitise_string_special($string, $extra_escapeable = '') {
+ $string = sanitise_string($string);
+
+ for ($n = 0; $n < strlen($extra_escapeable); $n++) {
+ $string = str_replace($extra_escapeable[$n], "\\" . $extra_escapeable[$n], $string);
+ }
+
+ return $string;
+}
+
+/**
+ * Sanitise a string for database use.
+ *
+ * @param string $string The string to sanitise
+ *
+ * @return string Sanitised string
+ */
+function sanitise_string($string) {
+ // @todo does this really need the trim?
+ // there are times when you might want trailing / preceeding white space.
+ return mysql_real_escape_string(trim($string));
+}
+
+/**
+ * Wrapper function for alternate English spelling
+ *
+ * @param string $string The string to sanitise
+ *
+ * @return string Sanitised string
+ */
+function sanitize_string($string) {
+ return sanitise_string($string);
+}
+
+/**
+ * Sanitises an integer for database use.
+ *
+ * @param int $int Value to be sanitized
+ * @param bool $signed Whether negative values should be allowed (true)
+ * @return int
+ */
+function sanitise_int($int, $signed = true) {
+ $int = (int) $int;
+
+ if ($signed === false) {
+ if ($int < 0) {
+ $int = 0;
}
-
- /**
- * Write wrapper for execute_delayed_query()
- *
- * @param string $query The query to execute
- * @param string $handler The handler if you care about the result.
- */
- function execute_delayed_write_query($query, $handler = "") { return execute_delayed_query($query, get_db_link('write'), $handler); }
-
- /**
- * Read wrapper for execute_delayed_query()
- *
- * @param string $query The query to execute
- * @param string $handler The handler if you care about the result.
- */
- function execute_delayed_read_query($query, $handler = "") { return execute_delayed_query($query, get_db_link('read'), $handler); }
-
- /**
- * Use this function to get data from the database
- * @param mixed $query The query being passed.
- * @param string $call Optionally, the name of a function to call back to on each row (which takes $row as a single parameter)
- * @return array An array of database result objects
- */
-
- function get_data($query, $callback = "") {
-
- global $CONFIG, $DB_QUERY_CACHE;
-
- // Is cached?
- $cached_query = $DB_QUERY_CACHE[$query];
- if ($cached_query) {
- if ((isset($CONFIG->debug)) && ($CONFIG->debug==true))
- error_log ("$query results returned from cache");
-
- if ($cached_query === -1)
- return array(); // Last time this query returned nothing, so return an empty array
-
- return $cached_query;
- }
-
- $dblink = get_db_link('read');
-
- $resultarray = array();
-
- if ($result = execute_query("$query", $dblink)) {
- while ($row = mysql_fetch_object($result)) {
- if (!empty($callback) && is_callable($callback)) {
- $row = $callback($row);
- }
- if ($row) $resultarray[] = $row;
- }
- }
-
- if (empty($resultarray)) {
- if ((isset($CONFIG->debug)) && ($CONFIG->debug==true))
- error_log("WARNING: DB query \"$query\" returned no results.");
-
- return false;
- }
-
- // Cache result
- if ((isset($CONFIG->debug)) && ($CONFIG->debug==true))
- error_log("$query results cached");
- $DB_QUERY_CACHE[$query] = $resultarray;
-
- return $resultarray;
- }
-
- /**
- * Use this function to get a single data row from the database
- * @param mixed $query The query to run.
- * @return object A single database result object
- */
-
- function get_data_row($query) {
-
- global $CONFIG, $DB_QUERY_CACHE;
-
- // Is cached
- $cached_query = $DB_QUERY_CACHE[$query];
- if ($cached_query) {
- if ((isset($CONFIG->debug)) && ($CONFIG->debug==true))
- error_log ("$query results returned from cache");
-
- if ($cached_query === -1)
- return false; // Last time this query returned nothing, so return false
-
- return $cached_query;
- }
-
- $dblink = get_db_link('read');
-
- if ($result = execute_query("$query", $dblink)) {
-
- $row = mysql_fetch_object($result);
-
- // Cache result (even if query returned no data
- if ((isset($CONFIG->debug)) && ($CONFIG->debug==true))
- error_log("$query results cached");
- $DB_QUERY_CACHE[$query] = $row;
-
- if ($row) return $row;
- }
-
- if ((isset($CONFIG->debug)) && ($CONFIG->debug==true))
- error_log("WARNING: DB query \"$query\" returned no results.");
-
- return false;
- }
-
- /**
- * Use this function to insert database data; returns id or false
- *
- * @param mixed $query The query to run.
- * @return int $id the database id of the inserted row.
- */
-
- function insert_data($query) {
-
- global $CONFIG, $DB_QUERY_CACHE;
-
- $dblink = get_db_link('write');
-
- // Invalidate query cache
- if ($DB_QUERY_CACHE) $DB_QUERY_CACHE->clear();
- if ((isset($CONFIG->debug)) && ($CONFIG->debug==true))
- error_log("Query cache invalidated");
-
- if (execute_query("$query", $dblink))
- return mysql_insert_id($dblink);
-
-
- return false;
- }
-
- /**
- * Update database data
- *
- * @param mixed $query The query to run.
- * @return int|false Either the number of affected rows, or false on failure
- */
-
- function update_data($query) {
-
- global $CONFIG, $DB_QUERY_CACHE;
-
- $dblink = get_db_link('write');
-
- // Invalidate query cache
- if ($DB_QUERY_CACHE) $DB_QUERY_CACHE->clear();
- if ((isset($CONFIG->debug)) && ($CONFIG->debug==true))
- error_log("Query cache invalidated");
-
- if (execute_query("$query", $dblink))
- return true; //return mysql_affected_rows();
-
- return false;
-
- }
-
- /**
- * Use this function to delete data
- *
- * @param mixed $query The SQL query to run
- * @return int|false Either the number of affected rows, or false on failure
- */
-
- function delete_data($query) {
-
- global $CONFIG, $DB_QUERY_CACHE;
-
- $dblink = get_db_link('write');
-
- // Invalidate query cache
- if ($DB_QUERY_CACHE) $DB_QUERY_CACHE->clear();
- if ((isset($CONFIG->debug)) && ($CONFIG->debug==true))
- error_log("Query cache invalidated");
-
- if (execute_query("$query", $dblink))
- return mysql_affected_rows();
-
- return false;
- }
-
-
- /**
- * Get the tables currently installed in the Elgg database
- *
- * @return array List of tables
- */
- function get_db_tables() {
- global $CONFIG;
- static $tables, $count;
-
- if (isset($tables)) {
- return $tables;
- }
-
- try{
- $result = get_data("show tables like '" . $CONFIG->dbprefix . "%'");
- } catch (DatabaseException $d)
- {
- // Likely we can't handle an exception here, so just return false.
- return false;
- }
-
- $tables = array();
-
- if (is_array($result) && !empty($result)) {
- foreach($result as $row) {
- $row = (array) $row;
- if (is_array($row) && !empty($row))
- foreach($row as $element) {
- $tables[] = $element;
- }
- }
- }
- else
- return false;
-
- return $tables;
- }
-
- /**
- * Run an optimize query on a mysql tables. Useful for executing after major data changes.
- *
- */
- function optimize_table($table)
- {
- $table = sanitise_string($table);
- return update_data("optimize table $table");
- }
-
- /**
- * Get the last database error for a particular database link
- *
- * @param database link $dblink
- * @return string Database error message
- */
- function get_db_error($dblink) {
- return mysql_error($dblink);
- }
-
- /**
- * Runs a full database script from disk
- *
- * @uses $CONFIG
- * @param string $scriptlocation The full path to the script
- */
- function run_sql_script($scriptlocation) {
-
- if ($script = file_get_contents($scriptlocation)) {
-
- global $CONFIG;
-
- $errors = array();
-
- $script = preg_replace('/\-\-.*\n/', '', $script);
- $sql_statements = preg_split('/;[\n\r]+/', $script);
- foreach($sql_statements as $statement) {
- $statement = trim($statement);
- $statement = str_replace("prefix_",$CONFIG->dbprefix,$statement);
- if (!empty($statement)) {
- try {
- $result = update_data($statement);
- } catch (DatabaseException $e) {
- $errors[] = $e->getMessage();
- }
- }
- }
- if (!empty($errors)) {
- $errortxt = "";
- foreach($errors as $error)
- $errortxt .= " {$error};";
- throw new DatabaseException(elgg_echo('DatabaseException:DBSetupIssues') . $errortxt);
- }
-
- } else {
- throw new DatabaseException(sprintf(elgg_echo('DatabaseException:ScriptNotFound'), $scriptlocation));
- }
-
- }
-
- function db_upgrade($version) {
-
- global $CONFIG;
-
- // Elgg and its database must be installed to upgrade it!
- if (!is_db_installed() || !is_installed()) return false;
-
- $version = (int) $version;
-
- if ($handle = opendir($CONFIG->path . 'engine/schema/upgrades/')) {
-
- $sqlupgrades = array();
-
- while ($sqlfile = readdir($handle)) {
-
- if (!is_dir($CONFIG->path . 'engine/schema/upgrades/' . $sqlfile)) {
- if (preg_match('/([0-9]*)\.sql/',$sqlfile,$matches)) {
- $sql_version = (int) $matches[1];
- if ($sql_version > $version) {
- $sqlupgrades[] = $sqlfile;
- }
- }
- }
-
- }
-
- asort($sqlupgrades);
- if (sizeof($sqlupgrades) > 0) {
- foreach($sqlupgrades as $sqlfile) {
- try {
- run_sql_script($CONFIG->path . 'engine/schema/upgrades/' . $sqlfile);
- } catch (DatabaseException $e) {
- error_log($e->getmessage());
- }
- }
- }
-
- }
-
- return true;
- }
-
- /**
- * This function, called by validate_platform(), will check whether the installed version of
- * MySQL meets the minimum required.
- *
- * TODO: If multiple dbs are supported check which db is supported and use the appropriate code to validate
- * the appropriate version.
- *
- * @return bool
- */
- function db_check_version()
- {
- $version = mysql_get_server_info();
-
- $points = explode('.', $version);
-
- if ($points[0] < 5)
- return false;
-
- return true;
- }
-
- /**
- * Sanitise a string for database use, but with the option of escaping extra characters.
- */
- function sanitise_string_special($string, $extra_escapeable = '')
- {
- $string = sanitise_string($string);
-
- for ($n = 0; $n < strlen($extra_escapeable); $n++)
- $string = str_replace($extra_escapeable[$n], "\\" . $extra_escapeable[$n], $string);
-
- return $string;
- }
-
- /**
- * Sanitise a string for database use
- *
- * @param string $string The string to sanitise
- * @return string Sanitised string
- */
- function sanitise_string($string) {
- return mysql_real_escape_string(trim($string));
- }
-
- /**
- * Wrapper function for Americans
- *
- * @param string $string The string to sanitise
- * @return string Sanitised string
- * @uses sanitise_string
- */
- function sanitize_string($string) {
- return sanitise_string($string);
- }
-
- /**
- * Sanitises an integer for database use
- *
- * @param int $int
- * @return int Sanitised integer
- */
- function sanitise_int($int) {
- return (int) $int;
- }
-
- /**
- * Wrapper function for Americans
- *
- * @param int $int
- * @return int Sanitised integer
- * @uses sanitise_string
- */
- function sanitize_int($int) {
- return (int) $int;
- }
-
- // Stuff for initialisation
-
- register_elgg_event_handler('boot','system','init_db',0);
-
-?> \ No newline at end of file
+ }
+
+ return (int) $int;
+}
+
+/**
+ * Sanitizes an integer for database use.
+ * Wrapper function for alternate English spelling (@see sanitise_int)
+ *
+ * @param int $int Value to be sanitized
+ * @param bool $signed Whether negative values should be allowed (true)
+ * @return int
+ */
+function sanitize_int($int, $signed = true) {
+ return sanitise_int($int, $signed);
+}
+
+/**
+ * Registers shutdown functions for database profiling and delayed queries.
+ *
+ * @access private
+ */
+function init_db() {
+ register_shutdown_function('db_delayedexecution_shutdown_hook');
+ register_shutdown_function('db_profiling_shutdown_hook');
+}
+
+elgg_register_event_handler('init', 'system', 'init_db');
diff --git a/engine/lib/deprecated-1.7.php b/engine/lib/deprecated-1.7.php
new file mode 100644
index 000000000..ee95b5611
--- /dev/null
+++ b/engine/lib/deprecated-1.7.php
@@ -0,0 +1,1164 @@
+<?php
+/**
+ * Get entities with the specified access collection id.
+ *
+ * @deprecated 1.7. Use elgg_get_entities_from_access_id()
+ *
+ * @param int $collection_id ID of collection
+ * @param string $entity_type Type of entities
+ * @param string $entity_subtype Subtype of entities
+ * @param int $owner_guid Guid of owner
+ * @param int $limit Limit of number of entities to return
+ * @param int $offset Skip this many entities
+ * @param string $order_by Column to order by
+ * @param int $site_guid The site guid
+ * @param bool $count Return a count or entities
+ *
+ * @return array
+ */
+function get_entities_from_access_id($collection_id, $entity_type = "", $entity_subtype = "",
+ $owner_guid = 0, $limit = 10, $offset = 0, $order_by = "", $site_guid = 0, $count = false) {
+ // log deprecated warning
+ elgg_deprecated_notice('get_entities_from_access_id() was deprecated by elgg_get_entities()', 1.7);
+
+ if (!$collection_id) {
+ return FALSE;
+ }
+
+ // build the options using given parameters
+ $options = array();
+ $options['limit'] = $limit;
+ $options['offset'] = $offset;
+ $options['count'] = $count;
+
+ if ($entity_type) {
+ $options['type'] = sanitise_string($entity_type);
+ }
+
+ if ($entity_subtype) {
+ $options['subtype'] = $entity_subtype;
+ }
+
+ if ($site_guid) {
+ $options['site_guid'] = $site_guid;
+ }
+
+ if ($order_by) {
+ $options['order_by'] = sanitise_string("e.time_created, $order_by");
+ }
+
+ if ($owner_guid) {
+ if (is_array($owner_guid)) {
+ $options['owner_guids'] = $owner_guid;
+ } else {
+ $options['owner_guid'] = $owner_guid;
+ }
+ }
+
+ if ($site_guid) {
+ $options['site_guid'] = $site_guid;
+ }
+
+ $options['access_id'] = $collection_id;
+
+ return elgg_get_entities_from_access_id($options);
+}
+
+/**
+ * @deprecated 1.7
+ */
+function get_entities_from_access_collection($collection_id, $entity_type = "", $entity_subtype = "",
+ $owner_guid = 0, $limit = 10, $offset = 0, $order_by = "", $site_guid = 0, $count = false) {
+
+ elgg_deprecated_notice('get_entities_from_access_collection() was deprecated by elgg_get_entities()', 1.7);
+
+ return get_entities_from_access_id($collection_id, $entity_type, $entity_subtype,
+ $owner_guid, $limit, $offset, $order_by, $site_guid, $count);
+}
+
+/**
+ * Get entities from annotations
+ *
+ * No longer used.
+ *
+ * @deprecated 1.7 Use elgg_get_entities_from_annotations()
+ *
+ * @param mixed $entity_type Type of entity
+ * @param mixed $entity_subtype Subtype of entity
+ * @param string $name Name of annotation
+ * @param string $value Value of annotation
+ * @param int $owner_guid Guid of owner of annotation
+ * @param int $group_guid Guid of group
+ * @param int $limit Limit
+ * @param int $offset Offset
+ * @param string $order_by SQL order by string
+ * @param bool $count Count or return entities
+ * @param int $timelower Lower time limit
+ * @param int $timeupper Upper time limit
+ *
+ * @return unknown_type
+ */
+function get_entities_from_annotations($entity_type = "", $entity_subtype = "", $name = "",
+$value = "", $owner_guid = 0, $group_guid = 0, $limit = 10, $offset = 0, $order_by = "asc",
+$count = false, $timelower = 0, $timeupper = 0) {
+ $msg = 'get_entities_from_annotations() is deprecated by elgg_get_entities_from_annotations().';
+ elgg_deprecated_notice($msg, 1.7);
+
+ $options = array();
+
+ if ($entity_type) {
+ $options['types'] = $entity_type;
+ }
+
+ if ($entity_subtype) {
+ $options['subtypes'] = $entity_subtype;
+ }
+
+ $options['annotation_names'] = $name;
+
+ if ($value) {
+ $options['annotation_values'] = $value;
+ }
+
+ if ($owner_guid) {
+ if (is_array($owner_guid)) {
+ $options['annotation_owner_guids'] = $owner_guid;
+ } else {
+ $options['annotation_owner_guid'] = $owner_guid;
+ }
+ }
+
+ if ($group_guid) {
+ $options['container_guid'] = $group_guid;
+ }
+
+ if ($limit) {
+ $options['limit'] = $limit;
+ }
+
+ if ($offset) {
+ $options['offset'] = $offset;
+ }
+
+ if ($order_by) {
+ $options['order_by'] = "maxtime $order_by";
+ }
+
+ if ($count) {
+ $options['count'] = $count;
+ }
+
+ if ($timelower) {
+ $options['annotation_created_time_lower'] = $timelower;
+ }
+
+ if ($timeupper) {
+ $options['annotation_created_time_upper'] = $timeupper;
+ }
+
+ return elgg_get_entities_from_annotations($options);
+}
+
+/**
+ * Lists entities
+ *
+ * @see elgg_view_entity_list
+ *
+ * @param string $entity_type Type of entity.
+ * @param string $entity_subtype Subtype of entity.
+ * @param string $name Name of annotation.
+ * @param string $value Value of annotation.
+ * @param int $limit Maximum number of results to return.
+ * @param int $owner_guid Owner.
+ * @param int $group_guid Group container. Currently only supported if entity_type is object
+ * @param boolean $asc Whether to list in ascending or descending order (default: desc)
+ * @param boolean $fullview Whether to display the entities in full
+ * @param boolean $listtypetoggle Can 'gallery' view can be displayed (default: no)
+ *
+ * @deprecated 1.7 Use elgg_list_entities_from_annotations()
+ * @return string Formatted entity list
+ */
+function list_entities_from_annotations($entity_type = "", $entity_subtype = "", $name = "",
+$value = "", $limit = 10, $owner_guid = 0, $group_guid = 0, $asc = false, $fullview = true,
+$listtypetoggle = false) {
+
+ $msg = 'list_entities_from_annotations is deprecated by elgg_list_entities_from_annotations';
+ elgg_deprecated_notice($msg, 1.8);
+
+ $options = array();
+
+ if ($entity_type) {
+ $options['types'] = $entity_type;
+ }
+
+ if ($entity_subtype) {
+ $options['subtypes'] = $entity_subtype;
+ }
+
+ if ($name) {
+ $options['annotation_names'] = $name;
+ }
+
+ if ($value) {
+ $options['annotation_values'] = $value;
+ }
+
+ if ($limit) {
+ $options['limit'] = $limit;
+ }
+
+ if ($owner_guid) {
+ $options['annotation_owner_guid'] = $owner_guid;
+ }
+
+ if ($group_guid) {
+ $options['container_guid'] = $group_guid;
+ }
+
+ if ($asc) {
+ $options['order_by'] = 'maxtime desc';
+ }
+
+ if ($offset = sanitise_int(get_input('offset', null))) {
+ $options['offset'] = $offset;
+ }
+
+ $options['full_view'] = $fullview;
+ $options['list_type_toggle'] = $listtypetoggle;
+ $options['pagination'] = $pagination;
+
+ return elgg_list_entities_from_annotations($options);
+}
+
+/**
+ * Returns all php files in a directory.
+ *
+ * @deprecated 1.7 Use elgg_get_file_list() instead
+ *
+ * @param string $directory Directory to look in
+ * @param array $exceptions Array of extensions (with .!) to ignore
+ * @param array $list A list files to include in the return
+ *
+ * @return array
+ */
+function get_library_files($directory, $exceptions = array(), $list = array()) {
+ elgg_deprecated_notice('get_library_files() deprecated by elgg_get_file_list()', 1.7);
+ return elgg_get_file_list($directory, $exceptions, $list, array('.php'));
+}
+
+/**
+ * Add action tokens to URL.
+ *
+ * @param string $url URL
+ *
+ * @return string
+ *
+ * @deprecated 1.7 final
+ */
+function elgg_validate_action_url($url) {
+ elgg_deprecated_notice('elgg_validate_action_url() deprecated by elgg_add_action_tokens_to_url().',
+ 1.7);
+
+ return elgg_add_action_tokens_to_url($url);
+}
+
+/**
+ * Does nothing.
+ *
+ * @deprecated 1.7
+ * @return 0
+ */
+function test_ip() {
+ elgg_deprecated_notice('test_ip() was removed because of licensing issues.', 1.7);
+
+ return 0;
+}
+
+/**
+ * Does nothing.
+ *
+ * @return bool
+ * @deprecated 1.7
+ */
+function is_ip_in_array() {
+ elgg_deprecated_notice('is_ip_in_array() was removed because of licensing issues.', 1.7);
+
+ return false;
+}
+
+/**
+ * Returns entities.
+ *
+ * @deprecated 1.7. Use elgg_get_entities().
+ *
+ * @param string $type Entity type
+ * @param string $subtype Entity subtype
+ * @param int $owner_guid Owner GUID
+ * @param string $order_by Order by clause
+ * @param int $limit Limit
+ * @param int $offset Offset
+ * @param bool $count Return a count or an array of entities
+ * @param int $site_guid Site GUID
+ * @param int $container_guid Container GUID
+ * @param int $timelower Lower time limit
+ * @param int $timeupper Upper time limit
+ *
+ * @return array
+ */
+function get_entities($type = "", $subtype = "", $owner_guid = 0, $order_by = "", $limit = 10,
+$offset = 0, $count = false, $site_guid = 0, $container_guid = null, $timelower = 0,
+$timeupper = 0) {
+
+ elgg_deprecated_notice('get_entities() was deprecated by elgg_get_entities().', 1.7);
+
+ // rewrite owner_guid to container_guid to emulate old functionality
+ if ($owner_guid != "") {
+ if (is_null($container_guid)) {
+ $container_guid = $owner_guid;
+ $owner_guid = NULL;
+ }
+ }
+
+ $options = array();
+ if ($type) {
+ if (is_array($type)) {
+ $options['types'] = $type;
+ } else {
+ $options['type'] = $type;
+ }
+ }
+
+ if ($subtype) {
+ if (is_array($subtype)) {
+ $options['subtypes'] = $subtype;
+ } else {
+ $options['subtype'] = $subtype;
+ }
+ }
+
+ if ($owner_guid) {
+ if (is_array($owner_guid)) {
+ $options['owner_guids'] = $owner_guid;
+ } else {
+ $options['owner_guid'] = $owner_guid;
+ }
+ }
+
+ if ($order_by) {
+ $options['order_by'] = $order_by;
+ }
+
+ // need to pass 0 for all option
+ $options['limit'] = $limit;
+
+ if ($offset) {
+ $options['offset'] = $offset;
+ }
+
+ if ($count) {
+ $options['count'] = $count;
+ }
+
+ if ($site_guid) {
+ $options['site_guids'] = $site_guid;
+ }
+
+ if ($container_guid) {
+ $options['container_guids'] = $container_guid;
+ }
+
+ if ($timeupper) {
+ $options['created_time_upper'] = $timeupper;
+ }
+
+ if ($timelower) {
+ $options['created_time_lower'] = $timelower;
+ }
+
+ $r = elgg_get_entities($options);
+ return $r;
+}
+
+/**
+ * Delete multiple entities that match a given query.
+ * This function iterates through and calls delete_entity on
+ * each one, this is somewhat inefficient but lets
+ * the 'delete' event be called for each entity.
+ *
+ * @deprecated 1.7. This is a dangerous function as it defaults to deleting everything.
+ *
+ * @param string $type The type of entity (eg "user", "object" etc)
+ * @param string $subtype The arbitrary subtype of the entity
+ * @param int $owner_guid The GUID of the owning user
+ *
+ * @return false
+ */
+function delete_entities($type = "", $subtype = "", $owner_guid = 0) {
+ elgg_deprecated_notice('delete_entities() was deprecated because no one should use it.', 1.7);
+ return false;
+}
+
+/**
+ * Lists entities.
+ *
+ * @param int $owner_guid Owner GUID
+ * @param int $limit Limit
+ * @param bool $fullview Show entity full views
+ * @param bool $listtypetoggle Show list type toggle
+ * @param bool $allowedtypes A string of the allowed types
+ *
+ * @return string
+ * @deprecated 1.7. Use elgg_list_registered_entities().
+ */
+function list_registered_entities($owner_guid = 0, $limit = 10, $fullview = true,
+$listtypetoggle = false, $allowedtypes = true) {
+
+ elgg_deprecated_notice('list_registered_entities() was deprecated by elgg_list_registered_entities().', 1.7);
+
+ $options = array();
+
+ // don't want to send anything if not being used.
+ if ($owner_guid) {
+ $options['owner_guid'] = $owner_guid;
+ }
+
+ if ($limit) {
+ $options['limit'] = $limit;
+ }
+
+ if ($allowedtypes) {
+ $options['allowed_types'] = $allowedtypes;
+ }
+
+ // need to send because might be BOOL
+ $options['full_view'] = $fullview;
+ $options['list_type_toggle'] = $listtypetoggle;
+
+ $options['offset'] = get_input('offset', 0);
+
+ return elgg_list_registered_entities($options);
+}
+
+/**
+ * Lists entities
+ *
+ * @deprecated 1.7. Use elgg_list_entities().
+ *
+ * @param string $type Entity type
+ * @param string $subtype Entity subtype
+ * @param int $owner_guid Owner GUID
+ * @param int $limit Limit
+ * @param bool $fullview Display entity full views?
+ * @param bool $listtypetoggle Allow switching to gallery mode?
+ * @param bool $pagination Show pagination?
+ *
+ * @return string
+ */
+function list_entities($type= "", $subtype = "", $owner_guid = 0, $limit = 10, $fullview = true,
+$listtypetoggle = false, $pagination = true) {
+
+ elgg_deprecated_notice('list_entities() was deprecated by elgg_list_entities()!', 1.7);
+
+ $options = array();
+
+ // rewrite owner_guid to container_guid to emulate old functionality
+ if ($owner_guid) {
+ $options['container_guids'] = $owner_guid;
+ }
+
+ if ($type) {
+ $options['types'] = $type;
+ }
+
+ if ($subtype) {
+ $options['subtypes'] = $subtype;
+ }
+
+ if ($limit) {
+ $options['limit'] = $limit;
+ }
+
+ if ($offset = sanitise_int(get_input('offset', null))) {
+ $options['offset'] = $offset;
+ }
+
+ $options['full_view'] = $fullview;
+ $options['list_type_toggle'] = $listtypetoggle;
+ $options['pagination'] = $pagination;
+
+ return elgg_list_entities($options);
+}
+
+/**
+ * Searches for a group based on a complete or partial name or description
+ *
+ * @param string $criteria The partial or full name or description
+ * @param int $limit Limit of the search.
+ * @param int $offset Offset.
+ * @param string $order_by The order.
+ * @param boolean $count Whether to return the count of results or just the results.
+ *
+ * @return mixed
+ * @deprecated 1.7
+ */
+function search_for_group($criteria, $limit = 10, $offset = 0, $order_by = "", $count = false) {
+ elgg_deprecated_notice('search_for_group() was deprecated by new search plugin.', 1.7);
+ global $CONFIG;
+
+ $criteria = sanitise_string($criteria);
+ $limit = (int)$limit;
+ $offset = (int)$offset;
+ $order_by = sanitise_string($order_by);
+
+ $access = get_access_sql_suffix("e");
+
+ if ($order_by == "") {
+ $order_by = "e.time_created desc";
+ }
+
+ if ($count) {
+ $query = "SELECT count(e.guid) as total ";
+ } else {
+ $query = "SELECT e.* ";
+ }
+ $query .= "from {$CONFIG->dbprefix}entities e"
+ . " JOIN {$CONFIG->dbprefix}groups_entity g on e.guid=g.guid where ";
+
+ $query .= "(g.name like \"%{$criteria}%\" or g.description like \"%{$criteria}%\")";
+ $query .= " and $access";
+
+ if (!$count) {
+ $query .= " order by $order_by limit $offset, $limit"; // Add order and limit
+ return get_data($query, "entity_row_to_elggstar");
+ } else {
+ if ($count = get_data_row($query)) {
+ return $count->total;
+ }
+ }
+ return false;
+}
+
+/**
+ * Returns a formatted list of groups suitable for injecting into search.
+ *
+ * @deprecated 1.7
+ *
+ * @param string $hook Hook name
+ * @param string $user User
+ * @param mixed $returnvalue Previous hook's return value
+ * @param string $tag Tag to search on
+ *
+ * @return string
+ */
+function search_list_groups_by_name($hook, $user, $returnvalue, $tag) {
+ elgg_deprecated_notice('search_list_groups_by_name() was deprecated by new search plugin', 1.7);
+ // Change this to set the number of groups that display on the search page
+ $threshold = 4;
+
+ $object = get_input('object');
+
+ if (!get_input('offset') && (empty($object) || $object == 'group')) {
+ if ($groups = search_for_group($tag, $threshold)) {
+ $countgroups = search_for_group($tag, 0, 0, "", true);
+
+ $return = elgg_view('group/search/startblurb', array('count' => $countgroups, 'tag' => $tag));
+ foreach ($groups as $group) {
+ $return .= elgg_view_entity($group);
+ }
+ $vars = array('count' => $countgroups, 'threshold' => $threshold, 'tag' => $tag);
+ $return .= elgg_view('group/search/finishblurb', $vars);
+ return $return;
+ }
+ }
+}
+
+/**
+ * Displays a list of group objects that have been searched for.
+ *
+ * @see elgg_view_entity_list
+ *
+ * @param string $tag Search criteria
+ * @param int $limit The number of entities to display on a page
+ *
+ * @return string The list in a form suitable to display
+ * @deprecated 1.7
+ */
+function list_group_search($tag, $limit = 10) {
+ elgg_deprecated_notice('list_group_search() was deprecated by new search plugin.', 1.7);
+ $offset = (int) get_input('offset');
+ $limit = (int) $limit;
+ $count = (int) search_for_group($tag, 10, 0, '', true);
+ $entities = search_for_group($tag, $limit, $offset);
+
+ return elgg_view_entity_list($entities, $count, $offset, $limit, $fullview, false);
+
+}
+
+/**
+ * Return a list of entities based on the given search criteria.
+ *
+ * @deprecated 1.7 use elgg_get_entities_from_metadata().
+ *
+ * @param mixed $meta_name Metadat name
+ * @param mixed $meta_value Metadata value
+ * @param string $entity_type The type of entity to look for, eg 'site' or 'object'
+ * @param string $entity_subtype The subtype of the entity.
+ * @param int $owner_guid Owner GUID
+ * @param int $limit Limit
+ * @param int $offset Offset
+ * @param string $order_by Optional ordering.
+ * @param int $site_guid Site GUID. 0 for current, -1 for any.
+ * @param bool $count Return a count instead of entities
+ * @param bool $case_sensitive Metadata names case sensitivity
+ *
+ * @return int|array A list of entities, or a count if $count is set to true
+ */
+function get_entities_from_metadata($meta_name, $meta_value = "", $entity_type = "",
+$entity_subtype = "", $owner_guid = 0, $limit = 10, $offset = 0, $order_by = "",
+$site_guid = 0, $count = FALSE, $case_sensitive = TRUE) {
+
+ elgg_deprecated_notice('get_entities_from_metadata() was deprecated by elgg_get_entities_from_metadata()!', 1.7);
+
+ $options = array();
+
+ $options['metadata_names'] = $meta_name;
+
+ if ($meta_value) {
+ $options['metadata_values'] = $meta_value;
+ }
+
+ if ($entity_type) {
+ $options['types'] = $entity_type;
+ }
+
+ if ($entity_subtype) {
+ $options['subtypes'] = $entity_subtype;
+ }
+
+ if ($owner_guid) {
+ if (is_array($owner_guid)) {
+ $options['owner_guids'] = $owner_guid;
+ } else {
+ $options['owner_guid'] = $owner_guid;
+ }
+ }
+
+ if ($limit) {
+ $options['limit'] = $limit;
+ }
+
+ if ($offset) {
+ $options['offset'] = $offset;
+ }
+
+ if ($order_by) {
+ $options['order_by'];
+ }
+
+ if ($site_guid) {
+ $options['site_guid'];
+ }
+
+ if ($count) {
+ $options['count'] = $count;
+ }
+
+ // need to be able to pass false
+ $options['metadata_case_sensitive'] = $case_sensitive;
+
+ return elgg_get_entities_from_metadata($options);
+}
+
+/**
+ * Return entities from metadata
+ *
+ * @deprecated 1.7. Use elgg_get_entities_from_metadata().
+ *
+ * @param mixed $meta_array Metadata name
+ * @param string $entity_type The type of entity to look for, eg 'site' or 'object'
+ * @param string $entity_subtype The subtype of the entity.
+ * @param int $owner_guid Owner GUID
+ * @param int $limit Limit
+ * @param int $offset Offset
+ * @param string $order_by Optional ordering.
+ * @param int $site_guid Site GUID. 0 for current, -1 for any.
+ * @param bool $count Return a count instead of entities
+ * @param bool $meta_array_operator Operator for metadata values
+ *
+ * @return int|array A list of entities, or a count if $count is set to true
+ */
+function get_entities_from_metadata_multi($meta_array, $entity_type = "", $entity_subtype = "",
+$owner_guid = 0, $limit = 10, $offset = 0, $order_by = "", $site_guid = 0,
+$count = false, $meta_array_operator = 'and') {
+
+ elgg_deprecated_notice('get_entities_from_metadata_multi() was deprecated by elgg_get_entities_from_metadata()!', 1.7);
+
+ if (!is_array($meta_array) || sizeof($meta_array) == 0) {
+ return false;
+ }
+
+ $options = array();
+
+ $options['metadata_name_value_pairs'] = $meta_array;
+
+ if ($entity_type) {
+ $options['types'] = $entity_type;
+ }
+
+ if ($entity_subtype) {
+ $options['subtypes'] = $entity_subtype;
+ }
+
+ if ($owner_guid) {
+ if (is_array($owner_guid)) {
+ $options['owner_guids'] = $owner_guid;
+ } else {
+ $options['owner_guid'] = $owner_guid;
+ }
+ }
+
+ if ($limit) {
+ $options['limit'] = $limit;
+ }
+
+ if ($offset) {
+ $options['offset'] = $offset;
+ }
+
+ if ($order_by) {
+ $options['order_by'];
+ }
+
+ if ($site_guid) {
+ $options['site_guid'];
+ }
+
+ if ($count) {
+ $options['count'] = $count;
+ }
+
+ $options['metadata_name_value_pairs_operator'] = $meta_array_operator;
+
+ return elgg_get_entities_from_metadata($options);
+}
+
+/**
+ * Returns a menu item for use in the children section of add_menu()
+ * This is not currently used in the Elgg core.
+ *
+ * @param string $menu_name The name of the menu item
+ * @param string $menu_url Its URL
+ *
+ * @return stdClass|false Depending on success
+ * @deprecated 1.7
+ */
+function menu_item($menu_name, $menu_url) {
+ elgg_deprecated_notice('menu_item() is deprecated by add_submenu_item', 1.7);
+ return make_register_object($menu_name, $menu_url);
+}
+
+/**
+ * Searches for an object based on a complete or partial title
+ * or description using full text searching.
+ *
+ * IMPORTANT NOTE: With MySQL's default setup:
+ * 1) $criteria must be 4 or more characters long
+ * 2) If $criteria matches greater than 50% of results NO RESULTS ARE RETURNED!
+ *
+ * @param string $criteria The partial or full name or username.
+ * @param int $limit Limit of the search.
+ * @param int $offset Offset.
+ * @param string $order_by The order.
+ * @param boolean $count Whether to return the count of results or just the results.
+ *
+ * @return int|false
+ * @deprecated 1.7
+ */
+function search_for_object($criteria, $limit = 10, $offset = 0, $order_by = "", $count = false) {
+ elgg_deprecated_notice('search_for_object() was deprecated by new search plugin.', 1.7);
+ global $CONFIG;
+
+ $criteria = sanitise_string($criteria);
+ $limit = (int)$limit;
+ $offset = (int)$offset;
+ $order_by = sanitise_string($order_by);
+ $container_guid = (int)$container_guid;
+
+ $access = get_access_sql_suffix("e");
+
+ if ($order_by == "") {
+ $order_by = "e.time_created desc";
+ }
+
+ if ($count) {
+ $query = "SELECT count(e.guid) as total ";
+ } else {
+ $query = "SELECT e.* ";
+ }
+ $query .= "from {$CONFIG->dbprefix}entities e
+ join {$CONFIG->dbprefix}objects_entity o on e.guid=o.guid
+ where match(o.title,o.description) against ('$criteria') and $access";
+
+ if (!$count) {
+ $query .= " order by $order_by limit $offset, $limit"; // Add order and limit
+ return get_data($query, "entity_row_to_elggstar");
+ } else {
+ if ($count = get_data_row($query)) {
+ return $count->total;
+ }
+ }
+ return false;
+}
+
+/**
+ * Returns a formatted list of objects suitable for injecting into search.
+ *
+ * @deprecated 1.7
+ *
+ * @param sting $hook Hook
+ * @param string $user user
+ * @param mixed $returnvalue Previous return value
+ * @param mixed $tag Search term
+ *
+ * @return array
+ */
+function search_list_objects_by_name($hook, $user, $returnvalue, $tag) {
+ elgg_deprecated_notice('search_list_objects_by_name was deprecated by new search plugin.', 1.7);
+
+ // Change this to set the number of users that display on the search page
+ $threshold = 4;
+
+ $object = get_input('object');
+
+ if (!get_input('offset') && (empty($object) || $object == 'user')) {
+ if ($users = search_for_user($tag, $threshold)) {
+ $countusers = search_for_user($tag, 0, 0, "", true);
+
+ $return = elgg_view('user/search/startblurb', array('count' => $countusers, 'tag' => $tag));
+ foreach ($users as $user) {
+ $return .= elgg_view_entity($user);
+ }
+ $return .= elgg_view('user/search/finishblurb',
+ array('count' => $countusers, 'threshold' => $threshold, 'tag' => $tag));
+
+ return $return;
+
+ }
+ }
+}
+
+/**
+ * Return entities from relationships
+ *
+ * @deprecated 1.7 Use elgg_get_entities_from_relationship()
+ *
+ * @param string $relationship The relationship type
+ * @param int $relationship_guid The GUID of the relationship owner
+ * @param bool $inverse_relationship Invert relationship?
+ * @param string $type Entity type
+ * @param string $subtype Entity subtype
+ * @param int $owner_guid Entity owner GUID
+ * @param string $order_by Order by clause
+ * @param int $limit Limit
+ * @param int $offset Offset
+ * @param bool $count Return a count instead of entities?
+ * @param int $site_guid Site GUID
+ *
+ * @return mixed
+ */
+function get_entities_from_relationship($relationship, $relationship_guid,
+$inverse_relationship = false, $type = "", $subtype = "", $owner_guid = 0,
+$order_by = "", $limit = 10, $offset = 0, $count = false, $site_guid = 0) {
+
+ elgg_deprecated_notice('get_entities_from_relationship() was deprecated by elgg_get_entities_from_relationship()!', 1.7);
+
+ $options = array();
+
+ $options['relationship'] = $relationship;
+ $options['relationship_guid'] = $relationship_guid;
+ $options['inverse_relationship'] = $inverse_relationship;
+
+ if ($type) {
+ $options['types'] = $type;
+ }
+
+ if ($subtype) {
+ $options['subtypes'] = $subtype;
+ }
+
+ if ($owner_guid) {
+ $options['owner_guid'] = $owner_guid;
+ }
+
+ $options['limit'] = $limit;
+
+ if ($offset) {
+ $options['offset'] = $offset;
+ }
+
+ if ($order_by) {
+ $options['order_by'];
+ }
+
+ if ($site_guid) {
+ $options['site_guid'];
+ }
+
+ if ($count) {
+ $options['count'] = $count;
+ }
+
+ return elgg_get_entities_from_relationship($options);
+}
+
+/**
+ * Searches for a site based on a complete or partial name
+ * or description or url using full text searching.
+ *
+ * IMPORTANT NOTE: With MySQL's default setup:
+ * 1) $criteria must be 4 or more characters long
+ * 2) If $criteria matches greater than 50% of results NO RESULTS ARE RETURNED!
+ *
+ * @param string $criteria The partial or full name or username.
+ * @param int $limit Limit of the search.
+ * @param int $offset Offset.
+ * @param string $order_by The order.
+ * @param boolean $count Whether to return the count of results or just the results.
+ *
+ * @return mixed
+ * @deprecated 1.7
+ */
+function search_for_site($criteria, $limit = 10, $offset = 0, $order_by = "", $count = false) {
+ elgg_deprecated_notice('search_for_site() was deprecated by new search plugin.', 1.7);
+ global $CONFIG;
+
+ $criteria = sanitise_string($criteria);
+ $limit = (int)$limit;
+ $offset = (int)$offset;
+ $order_by = sanitise_string($order_by);
+
+ $access = get_access_sql_suffix("e");
+
+ if ($order_by == "") {
+ $order_by = "e.time_created desc";
+ }
+
+ if ($count) {
+ $query = "SELECT count(e.guid) as total ";
+ } else {
+ $query = "SELECT e.* ";
+ }
+ $query .= "from {$CONFIG->dbprefix}entities e
+ join {$CONFIG->dbprefix}sites_entity s on e.guid=s.guid
+ where match(s.name, s.description, s.url) against ('$criteria') and $access";
+
+ if (!$count) {
+ $query .= " order by $order_by limit $offset, $limit"; // Add order and limit
+ return get_data($query, "entity_row_to_elggstar");
+ } else {
+ if ($count = get_data_row($query)) {
+ return $count->total;
+ }
+ }
+ return false;
+}
+
+/**
+ * Searches for a user based on a complete or partial name or username.
+ *
+ * @param string $criteria The partial or full name or username.
+ * @param int $limit Limit of the search.
+ * @param int $offset Offset.
+ * @param string $order_by The order.
+ * @param boolean $count Whether to return the count of results or just the results.
+ *
+ * @return mixed
+ * @deprecated 1.7
+ */
+function search_for_user($criteria, $limit = 10, $offset = 0, $order_by = "", $count = false) {
+ elgg_deprecated_notice('search_for_user() was deprecated by new search.', 1.7);
+ global $CONFIG;
+
+ $criteria = sanitise_string($criteria);
+ $limit = (int)$limit;
+ $offset = (int)$offset;
+ $order_by = sanitise_string($order_by);
+
+ $access = get_access_sql_suffix("e");
+
+ if ($order_by == "") {
+ $order_by = "e.time_created desc";
+ }
+
+ if ($count) {
+ $query = "SELECT count(e.guid) as total ";
+ } else {
+ $query = "SELECT e.* ";
+ }
+ $query .= "from {$CONFIG->dbprefix}entities e
+ join {$CONFIG->dbprefix}users_entity u on e.guid=u.guid where ";
+
+ $query .= "(u.name like \"%{$criteria}%\" or u.username like \"%{$criteria}%\")";
+ $query .= " and $access";
+
+ if (!$count) {
+ $query .= " order by $order_by limit $offset, $limit";
+ return get_data($query, "entity_row_to_elggstar");
+ } else {
+ if ($count = get_data_row($query)) {
+ return $count->total;
+ }
+ }
+ return false;
+}
+
+/**
+ * Displays a list of user objects that have been searched for.
+ *
+ * @see elgg_view_entity_list
+ *
+ * @param string $tag Search criteria
+ * @param int $limit The number of entities to display on a page
+ *
+ * @return string The list in a form suitable to display
+ *
+ * @deprecated 1.7
+ */
+function list_user_search($tag, $limit = 10) {
+ elgg_deprecated_notice('list_user_search() deprecated by new search', 1.7);
+ $offset = (int) get_input('offset');
+ $limit = (int) $limit;
+ $count = (int) search_for_user($tag, 10, 0, '', true);
+ $entities = search_for_user($tag, $limit, $offset);
+
+ return elgg_view_entity_list($entities, $count, $offset, $limit, $fullview, false);
+}
+
+/**
+ * Returns a formatted list of users suitable for injecting into search.
+ *
+ * @deprecated 1.7
+ *
+ * @param string $hook Hook name
+ * @param string $user User?
+ * @param mixed $returnvalue Previous hook's return value
+ * @param mixed $tag Tag to search against
+ *
+ * @return void
+ */
+function search_list_users_by_name($hook, $user, $returnvalue, $tag) {
+ elgg_deprecated_notice('search_list_users_by_name() was deprecated by new search', 1.7);
+ // Change this to set the number of users that display on the search page
+ $threshold = 4;
+
+ $object = get_input('object');
+
+ if (!get_input('offset') && (empty($object) || $object == 'user')) {
+ if ($users = search_for_user($tag, $threshold)) {
+ $countusers = search_for_user($tag, 0, 0, "", true);
+
+ $return = elgg_view('user/search/startblurb', array('count' => $countusers, 'tag' => $tag));
+ foreach ($users as $user) {
+ $return .= elgg_view_entity($user);
+ }
+
+ $vars = array('count' => $countusers, 'threshold' => $threshold, 'tag' => $tag);
+ $return .= elgg_view('user/search/finishblurb', $vars);
+ return $return;
+
+ }
+ }
+}
+
+/**
+ * Extend a view
+ *
+ * @deprecated 1.7. Use elgg_extend_view().
+ *
+ * @param string $view The view to extend.
+ * @param string $view_name This view is added to $view
+ * @param int $priority The priority, from 0 to 1000,
+ * to add at (lowest numbers displayed first)
+ * @param string $viewtype Not used
+ *
+ * @return void
+ */
+function extend_view($view, $view_name, $priority = 501, $viewtype = '') {
+ elgg_deprecated_notice('extend_view() was deprecated by elgg_extend_view()!', 1.7);
+ elgg_extend_view($view, $view_name, $priority, $viewtype);
+}
+
+/**
+ * Get views in a dir
+ *
+ * @deprecated 1.7. Use elgg_get_views().
+ *
+ * @param string $dir Dir
+ * @param string $base Base view
+ *
+ * @return array
+ */
+function get_views($dir, $base) {
+ elgg_deprecated_notice('get_views() was deprecated by elgg_get_views()!', 1.7);
+ elgg_get_views($dir, $base);
+}
+
+/**
+ * Constructs and returns a register object.
+ *
+ * @param string $register_name The name of the register
+ * @param mixed $register_value The value of the register
+ * @param array $children_array Optionally, an array of children
+ *
+ * @return false|stdClass Depending on success
+ * @deprecated 1.7 Use {@link add_submenu_item()}
+ */
+function make_register_object($register_name, $register_value, $children_array = array()) {
+ elgg_deprecated_notice('make_register_object() is deprecated by add_submenu_item()', 1.7);
+ if (empty($register_name) || empty($register_value)) {
+ return false;
+ }
+
+ $register = new stdClass;
+ $register->name = $register_name;
+ $register->value = $register_value;
+ $register->children = $children_array;
+
+ return $register;
+}
+
+/**
+ * THIS FUNCTION IS DEPRECATED.
+ *
+ * Delete a object's extra data.
+ *
+ * @todo - this should be removed - was deprecated in 1.5 or earlier
+ *
+ * @param int $guid GUID
+ *
+ * @return 1
+ * @deprecated 1.7
+ */
+function delete_object_entity($guid) {
+ system_message(elgg_echo('deprecatedfunction', array('delete_user_entity')));
+
+ return 1; // Always return that we have deleted one row in order to not break existing code.
+}
+
+/**
+ * THIS FUNCTION IS DEPRECATED.
+ *
+ * Delete a user's extra data.
+ *
+ * @todo remove
+ *
+ * @param int $guid User GUID
+ *
+ * @return 1
+ * @deprecated 1.7
+ */
+function delete_user_entity($guid) {
+ system_message(elgg_echo('deprecatedfunction', array('delete_user_entity')));
+
+ return 1; // Always return that we have deleted one row in order to not break existing code.
+} \ No newline at end of file
diff --git a/engine/lib/deprecated-1.8.php b/engine/lib/deprecated-1.8.php
new file mode 100644
index 000000000..91068d047
--- /dev/null
+++ b/engine/lib/deprecated-1.8.php
@@ -0,0 +1,4820 @@
+<?php
+/**
+ * ***************************************************************************
+ * NOTE: If this is ever removed from Elgg, sites lose the ability to upgrade
+ * from 1.7.x and earlier to the latest version of Elgg without upgrading to
+ * 1.8 first.
+ * ***************************************************************************
+ *
+ * Upgrade the database schema in an ordered sequence.
+ *
+ * Executes all upgrade files in elgg/engine/schema/upgrades/ in sequential order.
+ * Upgrade files must be in the standard Elgg release format of YYYYMMDDII.sql
+ * where II is an incrementor starting from 01.
+ *
+ * Files that are < $version will be ignored.
+ *
+ * @warning Plugin authors should not call this function directly.
+ *
+ * @param int $version The version you are upgrading from in the format YYYYMMDDII.
+ * @param string $fromdir Optional directory to load upgrades from. default: engine/schema/upgrades/
+ * @param bool $quiet If true, suppress all error messages. Only use for the upgrade from <=1.6.
+ *
+ * @return int The number of upgrades run.
+ * @see upgrade.php
+ * @see version.php
+ * @deprecated 1.8 Use PHP upgrades for sql changes.
+ */
+function db_upgrade($version, $fromdir = "", $quiet = FALSE) {
+ global $CONFIG;
+
+ elgg_deprecated_notice('db_upgrade() is deprecated by using PHP upgrades.', 1.8);
+
+ $version = (int) $version;
+
+ if (!$fromdir) {
+ $fromdir = $CONFIG->path . 'engine/schema/upgrades/';
+ }
+
+ $i = 0;
+
+ if ($handle = opendir($fromdir)) {
+ $sqlupgrades = array();
+
+ while ($sqlfile = readdir($handle)) {
+ if (!is_dir($fromdir . $sqlfile)) {
+ if (preg_match('/^([0-9]{10})\.(sql)$/', $sqlfile, $matches)) {
+ $sql_version = (int) $matches[1];
+ if ($sql_version > $version) {
+ $sqlupgrades[] = $sqlfile;
+ }
+ }
+ }
+ }
+
+ asort($sqlupgrades);
+
+ if (sizeof($sqlupgrades) > 0) {
+ foreach ($sqlupgrades as $sqlfile) {
+
+ // hide all errors.
+ if ($quiet) {
+ try {
+ run_sql_script($fromdir . $sqlfile);
+ } catch (DatabaseException $e) {
+ error_log($e->getmessage());
+ }
+ } else {
+ run_sql_script($fromdir . $sqlfile);
+ }
+ $i++;
+ }
+ }
+ }
+
+ return $i;
+}
+
+/**
+ * Lists entities from an access collection
+ *
+ * @deprecated 1.8 Use elgg_list_entities_from_access_id()
+ *
+ * @return str
+ */
+function list_entities_from_access_id($access_id, $entity_type = "", $entity_subtype = "", $owner_guid = 0, $limit = 10, $fullview = true, $listtypetoggle = true, $pagination = true) {
+
+ elgg_deprecated_notice("All list_entities* functions were deprecated in 1.8. Use elgg_list_entities* instead.", 1.8);
+
+ echo elgg_list_entities_from_access_id(array('access_id' => $access_id,
+ 'type' => $entity_type, 'subtype' => $entity_subtype, 'owner_guids' => $owner_guid,
+ 'limit' => $limit, 'full_view' => $fullview, 'list_type_toggle' => $listtypetoggle,
+ 'pagination' => $pagination,));
+}
+
+/**
+ * Registers a particular action in memory
+ *
+ * @deprecated 1.8 Use {@link elgg_register_action()} instead
+ *
+ * @param string $action The name of the action (eg "register", "account/settings/save")
+ * @param boolean $public Can this action be accessed by people not logged into the system?
+ * @param string $filename Optionally, the filename where this action is located
+ * @param boolean $admin_only Whether this action is only available to admin users.
+ */
+function register_action($action, $public = false, $filename = "", $admin_only = false) {
+ elgg_deprecated_notice("register_action() was deprecated by elgg_register_action()", 1.8);
+
+ if ($admin_only) {
+ $access = 'admin';
+ } elseif ($public) {
+ $access = 'public';
+ } else {
+ $access = 'logged_in';
+ }
+
+ return elgg_register_action($action, $filename, $access);
+}
+
+/**
+ * Register an admin page with the admin panel.
+ * This function extends the view "admin/main" with the provided view.
+ * This view should provide a description and either a control or a link to.
+ *
+ * @deprecated 1.8 Extend admin views manually
+ *
+ * Usage:
+ * - To add a control to the main admin panel then extend admin/main
+ * - To add a control to a new page create a page which renders a view admin/subpage
+ * (where subpage is your new page -
+ * nb. some pages already exist that you can extend), extend the main view to point to it,
+ * and add controls to your new view.
+ *
+ * At the moment this is essentially a wrapper around elgg_extend_view().
+ *
+ * @param string $new_admin_view The view associated with the control you're adding
+ * @param string $view The view to extend, by default this is 'admin/main'.
+ * @param int $priority Optional priority to govern the appearance in the list.
+ *
+ * @return void
+ */
+function extend_elgg_admin_page($new_admin_view, $view = 'admin/main', $priority = 500) {
+ elgg_deprecated_notice('extend_elgg_admin_page() does nothing. Extend admin views manually.', 1.8);
+}
+
+/**
+ * Get entities ordered by a mathematical calculation
+ *
+ * @deprecated 1.8 Use elgg_get_entities_from_annotation_calculation()
+ *
+ * @param string $sum What sort of calculation to perform
+ * @param string $entity_type Type of Entity
+ * @param string $entity_subtype Subtype of Entity
+ * @param string $name Name of annotation
+ * @param string $mdname Metadata name
+ * @param string $mdvalue Metadata value
+ * @param int $owner_guid GUID of owner of annotation
+ * @param int $limit Limit of results
+ * @param int $offset Offset of results
+ * @param string $orderdir Order of results
+ * @param bool $count Return count or entities
+ *
+ * @return mixed
+ */
+function get_entities_from_annotations_calculate_x($sum = "sum", $entity_type = "", $entity_subtype = "", $name = "", $mdname = '', $mdvalue = '', $owner_guid = 0, $limit = 10, $offset = 0, $orderdir = 'desc', $count = false) {
+
+ $msg = 'get_entities_from_annotations_calculate_x() is deprecated by elgg_get_entities_from_annotation_calculation().';
+
+ elgg_deprecated_notice($msg, 1.8);
+
+ $options = array();
+
+ $options['calculation'] = $sum;
+
+ if ($entity_type) {
+ $options['types'] = $entity_type;
+ }
+
+ if ($entity_subtype) {
+ $options['subtypes'] = $entity_subtype;
+ }
+
+ $options['annotation_names'] = $name;
+
+ if ($mdname) {
+ $options['metadata_names'] = $mdname;
+ }
+
+ if ($mdvalue) {
+ $options['metadata_values'] = $mdvalue;
+ }
+
+ // original function rewrote this to container guid.
+ if ($owner_guid) {
+ if (is_array($owner_guid)) {
+ $options['container_guids'] = $owner_guid;
+ } else {
+ $options['container_guid'] = $owner_guid;
+ }
+ }
+
+ $options['limit'] = $limit;
+ $options['offset'] = $offset;
+
+ $options['order_by'] = "annotation_calculation $orderdir";
+
+ $options['count'] = $count;
+
+ return elgg_get_entities_from_annotation_calculation($options);
+}
+
+/**
+ * Returns entities ordered by the sum of an annotation
+ *
+ * @warning This is function uses sum instead of count. THIS IS SLOW. See #3366.
+ * This should be used when you have annotations with different values and you
+ * want a list of entities ordered by the sum of all of those values.
+ * If you want a list of entities ordered by the number of annotations on each entity,
+ * use __get_entities_from_annotations_calculate_x() and pass 'count' as the first param.
+ *
+ * @deprecated 1.8 Use elgg_get_entities_from_annotation_calculation()
+ *
+ * @param string $entity_type Type of Entity
+ * @param string $entity_subtype Subtype of Entity
+ * @param string $name Name of annotation
+ * @param string $mdname Metadata name
+ * @param string $mdvalue Metadata value
+ * @param int $owner_guid GUID of owner of annotation
+ * @param int $limit Limit of results
+ * @param int $offset Offset of results
+ * @param string $orderdir Order of results
+ * @param bool $count Return count or entities
+ *
+ * @return unknown
+ */
+function get_entities_from_annotation_count($entity_type = "", $entity_subtype = "", $name = "", $mdname = '', $mdvalue = '', $owner_guid = 0, $limit = 10, $offset = 0, $orderdir = 'desc', $count = false) {
+
+ $msg = 'get_entities_from_annotation_count() is deprecated by elgg_get_entities_from_annotation_calculation().';
+
+ elgg_deprecated_notice($msg, 1.8);
+
+ $options = array();
+
+ $options['calculation'] = 'sum';
+
+ if ($entity_type) {
+ $options['types'] = $entity_type;
+ }
+
+ if ($entity_subtype) {
+ $options['subtypes'] = $entity_subtype;
+ }
+
+ $options['annotation_names'] = $name;
+
+ if ($mdname) {
+ $options['metadata_names'] = $mdname;
+ }
+
+ if ($mdvalue) {
+ $options['metadata_values'] = $mdvalue;
+ }
+
+ if ($owner_guid) {
+ if (is_array($owner_guid)) {
+ $options['owner_guids'] = $owner_guid;
+ } else {
+ $options['owner_guid'] = $owner_guid;
+ }
+ }
+
+ $options['limit'] = $limit;
+ $options['offset'] = $offset;
+
+ $options['order_by'] = "annotation_calculation $orderdir";
+
+ $options['count'] = $count;
+
+ return elgg_get_entities_from_annotation_calculation($options);
+}
+
+/**
+ * Lists entities by the totals of a particular kind of annotation
+ *
+ * @deprecated 1.8 Use elgg_list_entities_from_annotation_calculation()
+ *
+ * @param string $entity_type Type of entity.
+ * @param string $entity_subtype Subtype of entity.
+ * @param string $name Name of annotation.
+ * @param int $limit Maximum number of results to return.
+ * @param int $owner_guid Owner.
+ * @param int $group_guid Group container. Currently only supported if entity_type is object
+ * @param boolean $asc Whether to list in ascending or descending order (default: desc)
+ * @param boolean $fullview Whether to display the entities in full
+ * @param boolean $listtypetoggle Can the 'gallery' view can be displayed (default: no)
+ * @param boolean $pagination Add pagination
+ * @param string $orderdir Order desc or asc
+ *
+ * @return string Formatted entity list
+ */
+function list_entities_from_annotation_count($entity_type = "", $entity_subtype = "", $name = "", $limit = 10, $owner_guid = 0, $group_guid = 0, $asc = false, $fullview = true, $listtypetoggle = false, $pagination = true, $orderdir = 'desc') {
+
+ $msg = 'list_entities_from_annotation_count() is deprecated by elgg_list_entities_from_annotation_calculation().';
+
+ elgg_deprecated_notice($msg, 1.8);
+
+ $options = array();
+
+ $options['calculation'] = 'sum';
+
+ if ($entity_type) {
+ $options['types'] = $entity_type;
+ }
+
+ if ($entity_subtype) {
+ $options['subtypes'] = $entity_subtype;
+ }
+
+ $options['annotation_names'] = $name;
+
+ if ($owner_guid) {
+ if (is_array($owner_guid)) {
+ $options['owner_guids'] = $owner_guid;
+ } else {
+ $options['owner_guid'] = $owner_guid;
+ }
+ }
+
+ $options['full_view'] = $fullview;
+
+ $options['list_type_toggle'] = $listtypetoggle;
+
+ $options['pagination'] = $pagination;
+
+ $options['limit'] = $limit;
+
+ $options['order_by'] = "annotation_calculation $orderdir";
+
+ return elgg_get_entities_from_annotation_calculation($options);
+}
+
+/**
+ * Adds an entry in $CONFIG[$register_name][$subregister_name].
+ *
+ * @deprecated 1.8 Use the new menu system.
+ *
+ * This is only used for the site-wide menu. See {@link add_menu()}.
+ *
+ * @param string $register_name The name of the top-level register
+ * @param string $subregister_name The name of the subregister
+ * @param mixed $subregister_value The value of the subregister
+ * @param array $children_array Optionally, an array of children
+ *
+ * @return true|false Depending on success
+ */
+function add_to_register($register_name, $subregister_name, $subregister_value, $children_array = array()) {
+ elgg_deprecated_notice("add_to_register() has been deprecated", 1.8);
+ global $CONFIG;
+
+ if (empty($register_name) || empty($subregister_name)) {
+ return false;
+ }
+
+ if (!isset($CONFIG->registers)) {
+ $CONFIG->registers = array();
+ }
+
+ if (!isset($CONFIG->registers[$register_name])) {
+ $CONFIG->registers[$register_name] = array();
+ }
+
+ $subregister = new stdClass;
+ $subregister->name = $subregister_name;
+ $subregister->value = $subregister_value;
+
+ if (is_array($children_array)) {
+ $subregister->children = $children_array;
+ }
+
+ $CONFIG->registers[$register_name][$subregister_name] = $subregister;
+ return true;
+}
+
+/**
+ * Removes a register entry from $CONFIG[register_name][subregister_name]
+ *
+ * @deprecated 1.8 Use the new menu system.
+ *
+ * This is used to by {@link remove_menu()} to remove site-wide menu items.
+ *
+ * @param string $register_name The name of the top-level register
+ * @param string $subregister_name The name of the subregister
+ *
+ * @return true|false Depending on success
+ * @since 1.7.0
+ */
+function remove_from_register($register_name, $subregister_name) {
+ elgg_deprecated_notice("remove_from_register() has been deprecated", 1.8);
+ global $CONFIG;
+
+ if (empty($register_name) || empty($subregister_name)) {
+ return false;
+ }
+
+ if (!isset($CONFIG->registers)) {
+ return false;
+ }
+
+ if (!isset($CONFIG->registers[$register_name])) {
+ return false;
+ }
+
+ if (isset($CONFIG->registers[$register_name][$subregister_name])) {
+ unset($CONFIG->registers[$register_name][$subregister_name]);
+ return true;
+ }
+
+ return false;
+}
+
+/**
+ * If it exists, returns a particular register as an array
+ *
+ * @deprecated 1.8 Use the new menu system
+ *
+ * @param string $register_name The name of the register
+ *
+ * @return array|false Depending on success
+ */
+function get_register($register_name) {
+ elgg_deprecated_notice("get_register() has been deprecated", 1.8);
+ global $CONFIG;
+
+ if ($register_name == 'menu') {
+ // backward compatible code for site menu
+ $menu = $CONFIG->menus['site'];
+ $builder = new ElggMenuBuilder($menu);
+ $menu_items = $builder->getMenu('text');
+ $menu_items = $menu_items['default'];
+
+ $menu = array();
+ foreach ($menu_items as $item) {
+ $subregister = new stdClass;
+ $subregister->name = $item->getText();
+ $subregister->value = $item->getHref();
+ $menu[$subregister->name] = $subregister;
+ }
+ return $menu;
+ }
+
+ if (isset($CONFIG->registers[$register_name])) {
+ return $CONFIG->registers[$register_name];
+ }
+
+ return false;
+}
+
+/**
+ * Deprecated events core function. Code divided between elgg_register_event_handler()
+ * and trigger_elgg_event().
+ *
+ * @deprecated 1.8 Use explicit register/trigger event functions
+ *
+ * @param string $event The type of event (eg 'init', 'update', 'delete')
+ * @param string $object_type The type of object (eg 'system', 'blog', 'user')
+ * @param string $function The name of the function that will handle the event
+ * @param int $priority Priority to call handler. Lower numbers called first (default 500)
+ * @param boolean $call Set to true to call the event rather than add to it (default false)
+ * @param mixed $object Optionally, the object the event is being performed on (eg a user)
+ *
+ * @return true|false Depending on success
+ */
+function events($event = "", $object_type = "", $function = "", $priority = 500, $call = false, $object = null) {
+
+ elgg_deprecated_notice('events() has been deprecated.', 1.8);
+
+ // leaving this here just in case someone was directly calling this internal function
+ if (!$call) {
+ return elgg_register_event_handler($event, $object_type, $function, $priority);
+ } else {
+ return trigger_elgg_event($event, $object_type, $object);
+ }
+}
+
+/**
+ * Alias function for events, that registers a function to a particular kind of event
+ *
+ * @deprecated 1.8 Use elgg_register_event_handler() instead
+ *
+ * @param string $event The event type
+ * @param string $object_type The object type
+ * @param string $function The function name
+ * @return true|false Depending on success
+ */
+function register_elgg_event_handler($event, $object_type, $callback, $priority = 500) {
+ elgg_deprecated_notice("register_elgg_event_handler() was deprecated by elgg_register_event_handler()", 1.8);
+ return elgg_register_event_handler($event, $object_type, $callback, $priority);
+}
+
+/**
+ * Unregisters a function to a particular kind of event
+ *
+ * @deprecated 1.8 Use elgg_unregister_event_handler instead
+ *
+ * @param string $event The event type
+ * @param string $object_type The object type
+ * @param string $function The function name
+ * @since 1.7.0
+ */
+function unregister_elgg_event_handler($event, $object_type, $callback) {
+ elgg_deprecated_notice('unregister_elgg_event_handler => elgg_unregister_event_handler', 1.8);
+ elgg_unregister_event_handler($event, $object_type, $callback);
+}
+
+/**
+ * Alias function for events, that triggers a particular kind of event
+ *
+ * @deprecated 1.8 Use elgg_trigger_event() instead
+ *
+ * @param string $event The event type
+ * @param string $object_type The object type
+ * @param string $function The function name
+ * @return true|false Depending on success
+ */
+function trigger_elgg_event($event, $object_type, $object = null) {
+ elgg_deprecated_notice('trigger_elgg_event() was deprecated by elgg_trigger_event()', 1.8);
+ return elgg_trigger_event($event, $object_type, $object);
+}
+
+/**
+ * Register a function to a plugin hook for a particular entity type, with a given priority.
+ *
+ * @deprecated 1.8 Use elgg_register_plugin_hook_handler() instead
+ *
+ * eg if you want the function "export_user" to be called when the hook "export" for "user" entities
+ * is run, use:
+ *
+ * register_plugin_hook("export", "user", "export_user");
+ *
+ * "all" is a valid value for both $hook and $entity_type. "none" is a valid value for $entity_type.
+ *
+ * The export_user function would then be defined as:
+ *
+ * function export_user($hook, $entity_type, $returnvalue, $params);
+ *
+ * Where $returnvalue is the return value returned by the last function returned by the hook, and
+ * $params is an array containing a set of parameters (or nothing).
+ *
+ * @param string $hook The name of the hook
+ * @param string $entity_type The name of the type of entity (eg "user", "object" etc)
+ * @param string $function The name of a valid function to be run
+ * @param string $priority The priority - 0 is first, 1000 last, default is 500
+ * @return true|false Depending on success
+ */
+function register_plugin_hook($hook, $type, $callback, $priority = 500) {
+ elgg_deprecated_notice("register_plugin_hook() was deprecated by elgg_register_plugin_hook_handler()", 1.8);
+ return elgg_register_plugin_hook_handler($hook, $type, $callback, $priority);
+}
+
+/**
+ * Unregister a function to a plugin hook for a particular entity type
+ *
+ * @deprecated 1.8 Use elgg_unregister_plugin_hook_handler() instead
+ *
+ * @param string $hook The name of the hook
+ * @param string $entity_type The name of the type of entity (eg "user", "object" etc)
+ * @param string $function The name of a valid function to be run
+ * @since 1.7.0
+ */
+function unregister_plugin_hook($hook, $entity_type, $callback) {
+ elgg_deprecated_notice("unregister_plugin_hook() was deprecated by elgg_unregister_plugin_hook_handler()", 1.8);
+ elgg_unregister_plugin_hook_handler($hook, $entity_type, $callback);
+}
+
+/**
+ * Triggers a plugin hook, with various parameters as an array. For example, to provide
+ * a 'foo' hook that concerns an entity of type 'bar', with a parameter called 'param1'
+ * with value 'value1', that by default returns true, you'd call:
+ *
+ * @deprecated 1.8 Use elgg_trigger_plugin_hook() instead
+ *
+ * trigger_plugin_hook('foo', 'bar', array('param1' => 'value1'), true);
+ *
+ * @see register_plugin_hook
+ * @param string $hook The name of the hook to trigger
+ * @param string $entity_type The name of the entity type to trigger it for (or "all", or "none")
+ * @param array $params Any parameters. It's good practice to name the keys, i.e. by using array('name' => 'value', 'name2' => 'value2')
+ * @param mixed $returnvalue An initial return value
+ * @return mixed|null The cumulative return value for the plugin hook functions
+ */
+function trigger_plugin_hook($hook, $type, $params = null, $returnvalue = null) {
+ elgg_deprecated_notice("trigger_plugin_hook() was deprecated by elgg_trigger_plugin_hook()", 1.8);
+ return elgg_trigger_plugin_hook($hook, $type, $params, $returnvalue);
+}
+
+/**
+ * Checks if code is being called from a certain function.
+ *
+ * To use, call this function with the function name (and optional
+ * file location) that it has to be called from, it will either
+ * return true or false.
+ *
+ * e.g.
+ *
+ * function my_secure_function()
+ * {
+ * if (!call_gatekeeper("my_call_function"))
+ * return false;
+ *
+ * ... do secure stuff ...
+ * }
+ *
+ * function my_call_function()
+ * {
+ * // will work
+ * my_secure_function();
+ * }
+ *
+ * function bad_function()
+ * {
+ * // Will not work
+ * my_secure_function();
+ * }
+ *
+ * @param mixed $function The function that this function must have in its call stack,
+ * to test against a method pass an array containing a class and
+ * method name.
+ * @param string $file Optional file that the function must reside in.
+ *
+ * @return bool
+ *
+ * @deprecated 1.8 A neat but pointless function
+ */
+function call_gatekeeper($function, $file = "") {
+ elgg_deprecated_notice("call_gatekeeper() is neat but pointless", 1.8);
+ // Sanity check
+ if (!$function) {
+ return false;
+ }
+
+ // Check against call stack to see if this is being called from the correct location
+ $callstack = debug_backtrace();
+ $stack_element = false;
+
+ foreach ($callstack as $call) {
+ if (is_array($function)) {
+ if ((strcmp($call['class'], $function[0]) == 0) && (strcmp($call['function'], $function[1]) == 0)) {
+ $stack_element = $call;
+ }
+ } else {
+ if (strcmp($call['function'], $function) == 0) {
+ $stack_element = $call;
+ }
+ }
+ }
+
+ if (!$stack_element) {
+ return false;
+ }
+
+ // If file then check that this it is being called from this function
+ if ($file) {
+ $mirror = null;
+
+ if (is_array($function)) {
+ $mirror = new ReflectionMethod($function[0], $function[1]);
+ } else {
+ $mirror = new ReflectionFunction($function);
+ }
+
+ if ((!$mirror) || (strcmp($file, $mirror->getFileName()) != 0)) {
+ return false;
+ }
+ }
+
+ return true;
+}
+
+/**
+ * This function checks to see if it is being called at somepoint by a function defined somewhere
+ * on a given path (optionally including subdirectories).
+ *
+ * This function is similar to call_gatekeeper() but returns true if it is being called
+ * by a method or function which has been defined on a given path or by a specified file.
+ *
+ * @param string $path The full path and filename that this function must have
+ * in its call stack If a partial path is given and
+ * $include_subdirs is true, then the function will return
+ * true if called by any function in or below the specified path.
+ * @param bool $include_subdirs Are subdirectories of the path ok, or must you specify an
+ * absolute path and filename.
+ * @param bool $strict_mode If true then the calling method or function must be directly
+ * called by something on $path, if false the whole call stack is
+ * searched.
+ *
+ * @return void
+ *
+ * @deprecated 1.8 A neat but pointless function
+ */
+function callpath_gatekeeper($path, $include_subdirs = true, $strict_mode = false) {
+ elgg_deprecated_notice("callpath_gatekeeper() is neat but pointless", 1.8);
+
+ global $CONFIG;
+
+ $path = sanitise_string($path);
+
+ if ($path) {
+ $callstack = debug_backtrace();
+
+ foreach ($callstack as $call) {
+ $call['file'] = str_replace("\\", "/", $call['file']);
+
+ if ($include_subdirs) {
+ if (strpos($call['file'], $path) === 0) {
+
+ if ($strict_mode) {
+ $callstack[1]['file'] = str_replace("\\", "/", $callstack[1]['file']);
+ if ($callstack[1] === $call) {
+ return true;
+ }
+ } else {
+ return true;
+ }
+ }
+ } else {
+ if (strcmp($path, $call['file']) == 0) {
+ if ($strict_mode) {
+ if ($callstack[1] === $call) {
+ return true;
+ }
+ } else {
+ return true;
+ }
+ }
+ }
+
+ }
+ return false;
+ }
+
+ if (isset($CONFIG->debug)) {
+ system_message("Gatekeeper'd function called from {$callstack[1]['file']}:" . "{$callstack[1]['line']}\n\nStack trace:\n\n" . print_r($callstack, true));
+ }
+
+ return false;
+}
+
+/**
+ * Returns SQL where clause for owner and containers.
+ *
+ * @deprecated 1.8 Use elgg_get_guid_based_where_sql();
+ *
+ * @param string $table Entity table prefix as defined in SELECT...FROM entities $table
+ * @param NULL|array $owner_guids Owner GUIDs
+ *
+ * @return FALSE|str
+ * @since 1.7.0
+ * @access private
+ */
+function elgg_get_entity_owner_where_sql($table, $owner_guids) {
+ elgg_deprecated_notice('elgg_get_entity_owner_where_sql() is deprecated by elgg_get_guid_based_where_sql().', 1.8);
+
+ return elgg_get_guid_based_where_sql("{$table}.owner_guid", $owner_guids);
+}
+
+/**
+ * Returns SQL where clause for containers.
+ *
+ * @deprecated 1.8 Use elgg_get_guid_based_where_sql();
+ *
+ * @param string $table Entity table prefix as defined in
+ * SELECT...FROM entities $table
+ * @param NULL|array $container_guids Array of container guids
+ *
+ * @return FALSE|string
+ * @since 1.7.0
+ * @access private
+ */
+function elgg_get_entity_container_where_sql($table, $container_guids) {
+ elgg_deprecated_notice('elgg_get_entity_container_where_sql() is deprecated by elgg_get_guid_based_where_sql().', 1.8);
+
+ return elgg_get_guid_based_where_sql("{$table}.container_guid", $container_guids);
+}
+
+/**
+ * Returns SQL where clause for site entities
+ *
+ * @deprecated 1.8 Use elgg_get_guid_based_where_sql()
+ *
+ * @param string $table Entity table prefix as defined in SELECT...FROM entities $table
+ * @param NULL|array $site_guids Array of site guids
+ *
+ * @return FALSE|string
+ * @since 1.7.0
+ * @access private
+ */
+function elgg_get_entity_site_where_sql($table, $site_guids) {
+ elgg_deprecated_notice('elgg_get_entity_site_where_sql() is deprecated by elgg_get_guid_based_where_sql().', 1.8);
+
+ return elgg_get_guid_based_where_sql("{$table}.site_guid", $site_guids);
+}
+
+/**
+ * Return an array of objects in a given container.
+ *
+ * @see get_entities()
+ *
+ * @param int $group_guid The container (defaults to current page owner)
+ * @param string $subtype The subtype
+ * @param int $owner_guid Owner
+ * @param int $site_guid The site
+ * @param string $order_by Order
+ * @param int $limit Limit on number of elements to return, by default 10.
+ * @param int $offset Where to start, by default 0.
+ * @param bool $count Whether to return the entities or a count of them.
+ *
+ * @return array|false
+ * @deprecated 1.8 Use elgg_get_entities() instead
+ */
+function get_objects_in_group($group_guid, $subtype = "", $owner_guid = 0, $site_guid = 0, $order_by = "", $limit = 10, $offset = 0, $count = FALSE) {
+ elgg_deprecated_notice("get_objects_in_group was deprected in 1.8. Use elgg_get_entities() instead", 1.8);
+
+ global $CONFIG;
+
+ if ($subtype === FALSE || $subtype === null || $subtype === 0) {
+ return FALSE;
+ }
+
+ if ($order_by == "") {
+ $order_by = "e.time_created desc";
+ }
+ $order_by = sanitise_string($order_by);
+ $limit = (int)$limit;
+ $offset = (int)$offset;
+ $site_guid = (int)$site_guid;
+ if ($site_guid == 0) {
+ $site_guid = $CONFIG->site_guid;
+ }
+
+ $container_guid = (int)$group_guid;
+ if ($container_guid == 0) {
+ $container_guid = elgg_get_page_owner_guid();
+ }
+
+ $where = array();
+
+ $where[] = "e.type='object'";
+
+ if (!empty($subtype)) {
+ if (!$subtype = get_subtype_id('object', $subtype)) {
+ return FALSE;
+ }
+ $where[] = "e.subtype=$subtype";
+ }
+ if ($owner_guid != "") {
+ if (!is_array($owner_guid)) {
+ $owner_guid = (int)$owner_guid;
+ $where[] = "e.container_guid = '$owner_guid'";
+ } else if (sizeof($owner_guid) > 0) {
+ // Cast every element to the owner_guid array to int
+ $owner_guid = array_map("sanitise_int", $owner_guid);
+ $owner_guid = implode(",", $owner_guid);
+ $where[] = "e.container_guid in ({$owner_guid})";
+ }
+ }
+ if ($site_guid > 0) {
+ $where[] = "e.site_guid = {$site_guid}";
+ }
+
+ if ($container_guid > 0) {
+ $where[] = "e.container_guid = {$container_guid}";
+ }
+
+ if (!$count) {
+ $query = "SELECT * from {$CONFIG->dbprefix}entities e" . " join {$CONFIG->dbprefix}objects_entity o on e.guid=o.guid where ";
+ } else {
+ $query = "SELECT count(e.guid) as total from {$CONFIG->dbprefix}entities e" . " join {$CONFIG->dbprefix}objects_entity o on e.guid=o.guid where ";
+ }
+ foreach ($where as $w) {
+ $query .= " $w and ";
+ }
+
+ // Add access controls
+ $query .= get_access_sql_suffix('e');
+ if (!$count) {
+ $query .= " order by $order_by";
+
+ // Add order and limit
+ if ($limit) {
+ $query .= " limit $offset, $limit";
+ }
+
+ $dt = get_data($query, "entity_row_to_elggstar");
+ return $dt;
+ } else {
+ $total = get_data_row($query);
+ return $total->total;
+ }
+}
+
+/**
+ * Lists entities that belong to a group.
+ *
+ * @param string $subtype The arbitrary subtype of the entity
+ * @param int $owner_guid The GUID of the owning user
+ * @param int $container_guid The GUID of the containing group
+ * @param int $limit The number of entities to display per page (default: 10)
+ * @param bool $fullview Whether or not to display the full view (default: true)
+ * @param bool $listtypetoggle Whether or not to allow gallery view (default: true)
+ * @param bool $pagination Whether to display pagination (default: true)
+ *
+ * @return string List of parsed entities
+ *
+ * @see elgg_list_entities()
+ * @deprecated 1.8 Use elgg_list_entities() instead
+ */
+function list_entities_groups($subtype = "", $owner_guid = 0, $container_guid = 0, $limit = 10, $fullview = true, $listtypetoggle = true, $pagination = true) {
+ elgg_deprecated_notice("list_entities_groups was deprecated in 1.8. Use elgg_list_entities() instead.", 1.8);
+ $offset = (int)get_input('offset');
+ $count = get_objects_in_group($container_guid, $subtype, $owner_guid, 0, "", $limit, $offset, true);
+ $entities = get_objects_in_group($container_guid, $subtype, $owner_guid, 0, "", $limit, $offset);
+
+ return elgg_view_entity_list($entities, $count, $offset, $limit, $fullview, $listtypetoggle, $pagination);
+}
+
+/**
+ * Get all the entities from metadata from a group.
+ *
+ * @param int $group_guid The ID of the group.
+ * @param mixed $meta_name Metadata name
+ * @param mixed $meta_value Metadata value
+ * @param string $entity_type The type of entity to look for, eg 'site' or 'object'
+ * @param string $entity_subtype The subtype of the entity.
+ * @param int $owner_guid Owner guid
+ * @param int $limit Limit
+ * @param int $offset Offset
+ * @param string $order_by Optional ordering.
+ * @param int $site_guid Site GUID. 0 for current, -1 for any
+ * @param bool $count Return count instead of entities
+ *
+ * @return array|false
+ * @deprecated 1.8 Use elgg_get_entities_from_metadata()
+ */
+function get_entities_from_metadata_groups($group_guid, $meta_name, $meta_value = "", $entity_type = "", $entity_subtype = "", $owner_guid = 0, $limit = 10, $offset = 0, $order_by = "", $site_guid = 0, $count = false) {
+ elgg_deprecated_notice("get_entities_from_metadata_groups was deprecated in 1.8.", 1.8);
+ global $CONFIG;
+
+ $meta_n = get_metastring_id($meta_name);
+ $meta_v = get_metastring_id($meta_value);
+
+ $entity_type = sanitise_string($entity_type);
+ $entity_subtype = get_subtype_id($entity_type, $entity_subtype);
+ $limit = (int)$limit;
+ $offset = (int)$offset;
+ if ($order_by == "") {
+ $order_by = "e.time_created desc";
+ }
+ $order_by = sanitise_string($order_by);
+ $site_guid = (int)$site_guid;
+ if (is_array($owner_guid)) {
+ foreach ($owner_guid as $key => $guid) {
+ $owner_guid[$key] = (int)$guid;
+ }
+ } else {
+ $owner_guid = (int)$owner_guid;
+ }
+ if ($site_guid == 0) {
+ $site_guid = $CONFIG->site_guid;
+ }
+
+ $container_guid = (int)$group_guid;
+ if ($container_guid == 0) {
+ $container_guid = elgg_get_page_owner_guid();
+ }
+
+ $where = array();
+
+ if ($entity_type != "") {
+ $where[] = "e.type='$entity_type'";
+ }
+ if ($entity_subtype) {
+ $where[] = "e.subtype=$entity_subtype";
+ }
+ if ($meta_name != "") {
+ $where[] = "m.name_id='$meta_n'";
+ }
+ if ($meta_value != "") {
+ $where[] = "m.value_id='$meta_v'";
+ }
+ if ($site_guid > 0) {
+ $where[] = "e.site_guid = {$site_guid}";
+ }
+ if ($container_guid > 0) {
+ $where[] = "e.container_guid = {$container_guid}";
+ }
+
+ if (is_array($owner_guid)) {
+ $where[] = "e.container_guid in (" . implode(",", $owner_guid) . ")";
+ } else if ($owner_guid > 0) {
+ $where[] = "e.container_guid = {$owner_guid}";
+ }
+
+ if (!$count) {
+ $query = "SELECT distinct e.* ";
+ } else {
+ $query = "SELECT count(e.guid) as total ";
+ }
+
+ $query .= "from {$CONFIG->dbprefix}entities e" . " JOIN {$CONFIG->dbprefix}metadata m on e.guid = m.entity_guid " . " JOIN {$CONFIG->dbprefix}objects_entity o on e.guid = o.guid where";
+
+ foreach ($where as $w) {
+ $query .= " $w and ";
+ }
+
+ // Add access controls
+ $query .= get_access_sql_suffix("e");
+
+ if (!$count) {
+ $query .= " order by $order_by limit $offset, $limit"; // Add order and limit
+ return get_data($query, "entity_row_to_elggstar");
+ } else {
+ if ($row = get_data_row($query)) {
+ return $row->total;
+ }
+ }
+ return false;
+}
+
+/**
+ * As get_entities_from_metadata_groups() but with multiple entities.
+ *
+ * @param int $group_guid The ID of the group.
+ * @param array $meta_array Array of 'name' => 'value' pairs
+ * @param string $entity_type The type of entity to look for, eg 'site' or 'object'
+ * @param string $entity_subtype The subtype of the entity.
+ * @param int $owner_guid Owner GUID
+ * @param int $limit Limit
+ * @param int $offset Offset
+ * @param string $order_by Optional ordering.
+ * @param int $site_guid Site GUID. 0 for current, -1 for any
+ * @param bool $count Return count of entities instead of entities
+ *
+ * @return int|array List of ElggEntities, or the total number if count is set to false
+ * @deprecated 1.8 Use elgg_get_entities_from_metadata()
+ */
+function get_entities_from_metadata_groups_multi($group_guid, $meta_array, $entity_type = "", $entity_subtype = "", $owner_guid = 0, $limit = 10, $offset = 0, $order_by = "", $site_guid = 0, $count = false) {
+ elgg_deprecated_notice("get_entities_from_metadata_groups_multi was deprecated in 1.8.", 1.8);
+
+ global $CONFIG;
+
+ if (!is_array($meta_array) || sizeof($meta_array) == 0) {
+ return false;
+ }
+
+ $where = array();
+
+ $mindex = 1;
+ $join = "";
+ foreach ($meta_array as $meta_name => $meta_value) {
+ $meta_n = get_metastring_id($meta_name);
+ $meta_v = get_metastring_id($meta_value);
+ $join .= " JOIN {$CONFIG->dbprefix}metadata m{$mindex} on e.guid = m{$mindex}.entity_guid" . " JOIN {$CONFIG->dbprefix}objects_entity o on e.guid = o.guid ";
+
+ if ($meta_name != "") {
+ $where[] = "m{$mindex}.name_id='$meta_n'";
+ }
+
+ if ($meta_value != "") {
+ $where[] = "m{$mindex}.value_id='$meta_v'";
+ }
+
+ $mindex++;
+ }
+
+ $entity_type = sanitise_string($entity_type);
+ $entity_subtype = get_subtype_id($entity_type, $entity_subtype);
+ $limit = (int)$limit;
+ $offset = (int)$offset;
+ if ($order_by == "") {
+ $order_by = "e.time_created desc";
+ }
+ $order_by = sanitise_string($order_by);
+ $owner_guid = (int)$owner_guid;
+
+ $site_guid = (int)$site_guid;
+ if ($site_guid == 0) {
+ $site_guid = $CONFIG->site_guid;
+ }
+
+ //$access = get_access_list();
+
+ if ($entity_type != "") {
+ $where[] = "e.type = '{$entity_type}'";
+ }
+
+ if ($entity_subtype) {
+ $where[] = "e.subtype = {$entity_subtype}";
+ }
+
+ if ($site_guid > 0) {
+ $where[] = "e.site_guid = {$site_guid}";
+ }
+
+ if ($owner_guid > 0) {
+ $where[] = "e.owner_guid = {$owner_guid}";
+ }
+
+ if ($container_guid > 0) {
+ $where[] = "e.container_guid = {$container_guid}";
+ }
+
+ if ($count) {
+ $query = "SELECT count(e.guid) as total ";
+ } else {
+ $query = "SELECT distinct e.* ";
+ }
+
+ $query .= " from {$CONFIG->dbprefix}entities e {$join} where";
+ foreach ($where as $w) {
+ $query .= " $w and ";
+ }
+ $query .= get_access_sql_suffix("e"); // Add access controls
+
+ if (!$count) {
+ $query .= " order by $order_by limit $offset, $limit"; // Add order and limit
+ return get_data($query, "entity_row_to_elggstar");
+ } else {
+ if ($count = get_data_row($query)) {
+ return $count->total;
+ }
+ }
+ return false;
+}
+
+/**
+ * List items within a given geographic area.
+ *
+ * @param real $lat Latitude
+ * @param real $long Longitude
+ * @param real $radius The radius
+ * @param string $type The type of entity (eg "user", "object" etc)
+ * @param string $subtype The arbitrary subtype of the entity
+ * @param int $owner_guid The GUID of the owning user
+ * @param int $limit The number of entities to display per page (default: 10)
+ * @param bool $fullview Whether or not to display the full view (default: true)
+ * @param bool $listtypetoggle Whether or not to allow gallery view
+ * @param bool $navigation Display pagination? Default: true
+ *
+ * @return string A viewable list of entities
+ * @deprecated 1.8 Use elgg_get_entities_from_location()
+ */
+function list_entities_in_area($lat, $long, $radius, $type = "", $subtype = "", $owner_guid = 0, $limit = 10, $fullview = true, $listtypetoggle = false, $navigation = true) {
+ elgg_deprecated_notice('list_entities_in_area() was deprecated. Use elgg_list_entities_from_location()', 1.8);
+
+ $options = array();
+
+ $options['latitude'] = $lat;
+ $options['longitude'] = $long;
+ $options['distance'] = $radius;
+
+ if ($type) {
+ $options['types'] = $type;
+ }
+
+ if ($subtype) {
+ $options['subtypes'] = $subtype;
+ }
+
+ if ($owner_guid) {
+ if (is_array($owner_guid)) {
+ $options['owner_guids'] = $owner_guid;
+ } else {
+ $options['owner_guid'] = $owner_guid;
+ }
+ }
+
+ $options['limit'] = $limit;
+
+ $options['full_view'] = $fullview;
+ $options['list_type_toggle'] = $listtypetoggle;
+ $options['pagination'] = $pagination;
+
+ return elgg_list_entities_from_location($options);
+}
+
+/**
+ * List entities in a given location
+ *
+ * @param string $location Location
+ * @param string $type The type of entity (eg "user", "object" etc)
+ * @param string $subtype The arbitrary subtype of the entity
+ * @param int $owner_guid The GUID of the owning user
+ * @param int $limit The number of entities to display per page (default: 10)
+ * @param bool $fullview Whether or not to display the full view (default: true)
+ * @param bool $listtypetoggle Whether or not to allow gallery view
+ * @param bool $navigation Display pagination? Default: true
+ *
+ * @return string A viewable list of entities
+ * @deprecated 1.8 Use elgg_list_entities_from_location()
+ */
+function list_entities_location($location, $type = "", $subtype = "", $owner_guid = 0, $limit = 10, $fullview = true, $listtypetoggle = false, $navigation = true) {
+ elgg_deprecated_notice('list_entities_location() was deprecated. Use elgg_list_entities_from_metadata()', 1.8);
+
+ return list_entities_from_metadata('location', $location, $type, $subtype, $owner_guid, $limit, $fullview, $listtypetoggle, $navigation);
+}
+
+/**
+ * Return entities within a given geographic area.
+ *
+ * @param float $lat Latitude
+ * @param float $long Longitude
+ * @param float $radius The radius
+ * @param string $type The type of entity (eg "user", "object" etc)
+ * @param string $subtype The arbitrary subtype of the entity
+ * @param int $owner_guid The GUID of the owning user
+ * @param string $order_by The field to order by; by default, time_created desc
+ * @param int $limit The number of entities to return; 10 by default
+ * @param int $offset The indexing offset, 0 by default
+ * @param boolean $count Count entities
+ * @param int $site_guid Site GUID. 0 for current, -1 for any
+ * @param int|array $container_guid Container GUID
+ *
+ * @return array A list of entities.
+ * @deprecated 1.8 Use elgg_get_entities_from_location()
+ */
+function get_entities_in_area($lat, $long, $radius, $type = "", $subtype = "", $owner_guid = 0, $order_by = "", $limit = 10, $offset = 0, $count = false, $site_guid = 0, $container_guid = NULL) {
+ elgg_deprecated_notice('get_entities_in_area() was deprecated by elgg_get_entities_from_location()!', 1.8);
+
+ $options = array();
+
+ $options['latitude'] = $lat;
+ $options['longitude'] = $long;
+ $options['distance'] = $radius;
+
+ // set container_guid to owner_guid to emulate old functionality
+ if ($owner_guid != "") {
+ if (is_null($container_guid)) {
+ $container_guid = $owner_guid;
+ }
+ }
+
+ if ($type) {
+ $options['types'] = $type;
+ }
+
+ if ($subtype) {
+ $options['subtypes'] = $subtype;
+ }
+
+ if ($owner_guid) {
+ if (is_array($owner_guid)) {
+ $options['owner_guids'] = $owner_guid;
+ } else {
+ $options['owner_guid'] = $owner_guid;
+ }
+ }
+
+ if ($container_guid) {
+ if (is_array($container_guid)) {
+ $options['container_guids'] = $container_guid;
+ } else {
+ $options['container_guid'] = $container_guid;
+ }
+ }
+
+ $options['limit'] = $limit;
+
+ if ($offset) {
+ $options['offset'] = $offset;
+ }
+
+ if ($order_by) {
+ $options['order_by'];
+ }
+
+ if ($site_guid) {
+ $options['site_guid'];
+ }
+
+ if ($count) {
+ $options['count'] = $count;
+ }
+
+ return elgg_get_entities_from_location($options);
+}
+
+/**
+ * Return a list of entities suitable for display based on the given search criteria.
+ *
+ * @see elgg_view_entity_list
+ *
+ * @deprecated 1.8 Use elgg_list_entities_from_metadata
+ *
+ * @param mixed $meta_name Metadata name to search on
+ * @param mixed $meta_value The value to match, optionally
+ * @param string $entity_type The type of entity to look for, eg 'site' or 'object'
+ * @param string $entity_subtype The subtype of the entity
+ * @param int $owner_guid Owner GUID
+ * @param int $limit Number of entities to display per page
+ * @param bool $fullview WDisplay the full view (default: true)
+ * @param bool $listtypetoggle Allow users to toggle to the gallery view. Default: true
+ * @param bool $pagination Display pagination? Default: true
+ * @param bool $case_sensitive Case sensitive metadata names?
+ *
+ * @return string
+ *
+ * @return string A list of entities suitable for display
+ */
+function list_entities_from_metadata($meta_name, $meta_value = "", $entity_type = ELGG_ENTITIES_ANY_VALUE, $entity_subtype = ELGG_ENTITIES_ANY_VALUE, $owner_guid = 0, $limit = 10, $fullview = true, $listtypetoggle = true, $pagination = true, $case_sensitive = true) {
+
+ elgg_deprecated_notice('list_entities_from_metadata() was deprecated by elgg_list_entities_from_metadata()!', 1.8);
+
+ $offset = (int)get_input('offset');
+ $limit = (int)$limit;
+ $options = array(
+ 'metadata_name' => $meta_name,
+ 'metadata_value' => $meta_value,
+ 'type' => $entity_type,
+ 'subtype' => $entity_subtype,
+ 'limit' => $limit,
+ 'offset' => $offset,
+ 'count' => TRUE,
+ 'metadata_case_sensitive' => $case_sensitive
+ );
+
+ // previous function allowed falsy $owner_guid for anything
+ if ($owner_guid) {
+ $options['owner_guid'] = $owner_guid;
+ }
+
+ $count = elgg_get_entities_from_metadata($options);
+
+ $options['count'] = FALSE;
+ $entities = elgg_get_entities_from_metadata($options);
+
+ return elgg_view_entity_list($entities, $count, $offset, $limit, $fullview, $listtypetoggle, $pagination);
+}
+
+/**
+ * Returns a viewable list of entities based on the given search criteria.
+ *
+ * @see elgg_view_entity_list
+ *
+ * @param array $meta_array Array of 'name' => 'value' pairs
+ * @param string $entity_type The type of entity to look for, eg 'site' or 'object'
+ * @param string $entity_subtype The subtype of the entity.
+ * @param int $owner_guid Owner GUID
+ * @param int $limit Limit
+ * @param bool $fullview WDisplay the full view (default: true)
+ * @param bool $listtypetoggle Allow users to toggle to the gallery view. Default: true
+ * @param bool $pagination Display pagination? Default: true
+ *
+ * @return string List of ElggEntities suitable for display
+ *
+ * @deprecated 1.8 Use elgg_list_entities_from_metadata() instead
+ */
+function list_entities_from_metadata_multi($meta_array, $entity_type = "", $entity_subtype = "", $owner_guid = 0, $limit = 10, $fullview = true, $listtypetoggle = true, $pagination = true) {
+ elgg_deprecated_notice(elgg_echo('deprecated:function', array(
+ 'list_entities_from_metadata_multi', 'elgg_get_entities_from_metadata')), 1.8);
+
+ $offset = (int)get_input('offset');
+ $limit = (int)$limit;
+ $count = get_entities_from_metadata_multi($meta_array, $entity_type, $entity_subtype, $owner_guid, $limit, $offset, "", $site_guid, true);
+ $entities = get_entities_from_metadata_multi($meta_array, $entity_type, $entity_subtype, $owner_guid, $limit, $offset, "", $site_guid, false);
+
+ return elgg_view_entity_list($entities, $count, $offset, $limit, $fullview, $listtypetoggle, $pagination);
+}
+
+/**
+ * Deprecated by elgg_register_menu_item(). Set $menu_name to 'page'.
+ *
+ * @see elgg_register_menu_item()
+ * @deprecated 1.8 Use the new menu system
+ *
+ * @param string $label The label
+ * @param string $link The link
+ * @param string $group The group to store item in
+ * @param boolean $onclick Add a confirmation when clicked?
+ * @param boolean $selected Is menu item selected
+ *
+ * @return bool
+ */
+function add_submenu_item($label, $link, $group = 'default', $onclick = false, $selected = NULL) {
+ elgg_deprecated_notice('add_submenu_item was deprecated by elgg_register_menu_item', 1.8);
+
+ // submenu items were added in the page setup hook usually by checking
+ // the context. We'll pass in the current context here, which will
+ // emulate that effect.
+ // if context == 'main' (default) it probably means they always wanted
+ // the menu item to show up everywhere.
+ $context = elgg_get_context();
+
+ if ($context == 'main') {
+ $context = 'all';
+ }
+
+ $item = array('name' => $label, 'text' => $label, 'href' => $link, 'context' => $context,
+ 'section' => $group,);
+
+ if ($selected) {
+ $item['selected'] = true;
+ }
+
+ if ($onclick) {
+ $js = "onclick=\"javascript:return confirm('" . elgg_echo('deleteconfirm') . "')\"";
+ $item['vars'] = array('js' => $js);
+ }
+
+ return elgg_register_menu_item('page', $item);
+}
+
+/**
+ * Remove an item from submenu by label
+ *
+ * @deprecated 1.8 Use the new menu system
+ * @see elgg_unregister_menu_item()
+ *
+ * @param string $label The item label
+ * @param string $group The submenu group (default "a")
+ * @return bool whether the item was removed or not
+ * @since 1.7.8
+ */
+function remove_submenu_item($label, $group = 'a') {
+ elgg_deprecated_notice('remove_submenu_item was deprecated by elgg_unregister_menu_item', 1.8);
+
+ return elgg_unregister_menu_item('page', $label);
+}
+
+/**
+ * Use elgg_view_menu(). Set $menu_name to 'owner_block'.
+ *
+ * @see elgg_view_menu()
+ * @deprecated 1.8 Use the new menu system. elgg_view_menu()
+ *
+ * @return string
+ */
+function get_submenu() {
+ elgg_deprecated_notice("get_submenu() has been deprecated by elgg_view_menu()", 1.8);
+ return elgg_view_menu('owner_block', array('entity' => $owner,
+ 'class' => 'elgg-menu-owner-block',));
+}
+
+/**
+ * Adds an item to the site-wide menu.
+ *
+ * You can obtain the menu array by calling {@link get_register('menu')}
+ *
+ * @param string $menu_name The name of the menu item
+ * @param string $menu_url The URL of the page
+ * @param array $menu_children Optionally, an array of submenu items (not used)
+ * @param string $context (not used)
+ *
+ * @return true|false Depending on success
+ * @deprecated 1.8 use elgg_register_menu_item() for the menu 'site'
+ */
+function add_menu($menu_name, $menu_url, $menu_children = array(), $context = "") {
+ elgg_deprecated_notice('add_menu() deprecated by elgg_register_menu_item()', 1.8);
+
+ return elgg_register_menu_item('site', array('name' => $menu_name, 'text' => $menu_name,
+ 'href' => $menu_url,));
+}
+
+/**
+ * Removes an item from the menu register
+ *
+ * @param string $menu_name The name of the menu item
+ *
+ * @return true|false Depending on success
+ * @deprecated 1.8 Use the new menu system
+ */
+function remove_menu($menu_name) {
+ elgg_deprecated_notice("remove_menu() deprecated by elgg_unregister_menu_item()", 1.8);
+ return elgg_unregister_menu_item('site', $menu_name);
+}
+
+/**
+ * When given a title, returns a version suitable for inclusion in a URL
+ *
+ * @param string $title The title
+ *
+ * @return string The optimised title
+ * @deprecated 1.8 Use elgg_get_friendly_title()
+ */
+function friendly_title($title) {
+ elgg_deprecated_notice('friendly_title was deprecated by elgg_get_friendly_title', 1.8);
+ return elgg_get_friendly_title($title);
+}
+
+/**
+ * Displays a UNIX timestamp in a friendly way (eg "less than a minute ago")
+ *
+ * @param int $time A UNIX epoch timestamp
+ *
+ * @return string The friendly time
+ * @deprecated 1.8 Use elgg_view_friendly_time()
+ */
+function friendly_time($time) {
+ elgg_deprecated_notice('friendly_time was deprecated by elgg_view_friendly_time', 1.8);
+ return elgg_view_friendly_time($time);
+}
+
+/**
+ * Filters a string into an array of significant words
+ *
+ * @deprecated 1.8 Don't use this.
+ *
+ * @param string $string A string
+ *
+ * @return array
+ */
+function filter_string($string) {
+ elgg_deprecated_notice('filter_string() was deprecated!', 1.8);
+
+ // Convert it to lower and trim
+ $string = strtolower($string);
+ $string = trim($string);
+
+ // Remove links and email addresses
+ // match protocol://address/path/file.extension?some=variable&another=asf%
+ $string = preg_replace("/\s([a-zA-Z]+:\/\/[a-z][a-z0-9\_\.\-]*[a-z]{2,6}" . "[a-zA-Z0-9\/\*\-\?\&\%\=]*)([\s|\.|\,])/iu", " ", $string);
+
+ // match www.something.domain/path/file.extension?some=variable&another=asf%
+ $string = preg_replace("/\s(www\.[a-z][a-z0-9\_\.\-]*[a-z]{2,6}" . "[a-zA-Z0-9\/\*\-\?\&\%\=]*)([\s|\.|\,])/iu", " ", $string);
+
+ // match name@address
+ $string = preg_replace("/\s([a-zA-Z][a-zA-Z0-9\_\.\-]*[a-zA-Z]" . "*\@[a-zA-Z][a-zA-Z0-9\_\.\-]*[a-zA-Z]{2,6})([\s|\.|\,])/iu", " ", $string);
+
+ // Sanitise the string; remove unwanted characters
+ $string = preg_replace('/\W/ui', ' ', $string);
+
+ // Explode it into an array
+ $terms = explode(' ', $string);
+
+ // Remove any blacklist terms
+ //$terms = array_filter($terms, 'remove_blacklist');
+
+ return $terms;
+}
+
+/**
+ * Returns true if the word in $input is considered significant
+ *
+ * @deprecated 1.8 Don't use this.
+ *
+ * @param string $input A word
+ *
+ * @return true|false
+ */
+function remove_blacklist($input) {
+ elgg_deprecated_notice('remove_blacklist() was deprecated!', 1.8);
+
+ global $CONFIG;
+
+ if (!is_array($CONFIG->wordblacklist)) {
+ return $input;
+ }
+
+ if (strlen($input) < 3 || in_array($input, $CONFIG->wordblacklist)) {
+ return false;
+ }
+
+ return true;
+}
+
+/**
+ * Gets the guid of the entity that owns the current page.
+ *
+ * @deprecated 1.8 Use elgg_get_page_owner_guid()
+ *
+ * @return int The current page owner guid (0 if none).
+ */
+function page_owner() {
+ elgg_deprecated_notice('page_owner() was deprecated by elgg_get_page_owner_guid().', 1.8);
+ return elgg_get_page_owner_guid();
+}
+
+/**
+ * Gets the owner entity for the current page.
+ *
+ * @deprecated 1.8 Use elgg_get_page_owner_entity()
+ * @return ElggEntity|false The current page owner or false if none.
+ */
+function page_owner_entity() {
+ elgg_deprecated_notice('page_owner_entity() was deprecated by elgg_get_page_owner_entity().', 1.8);
+ return elgg_get_page_owner_entity();
+}
+
+/**
+ * Registers a page owner handler function
+ *
+ * @param string $functionname The callback function
+ *
+ * @deprecated 1.8 Use the 'page_owner', 'system' plugin hook
+ * @return void
+ */
+function add_page_owner_handler($functionname) {
+ elgg_deprecated_notice("add_page_owner_handler() was deprecated by the plugin hook 'page_owner', 'system'.", 1.8);
+}
+
+/**
+ * Set a page owner entity
+ *
+ * @param int $entitytoset The GUID of the entity
+ *
+ * @deprecated 1.8 Use elgg_set_page_owner_guid()
+ * @return void
+ */
+function set_page_owner($entitytoset = -1) {
+ elgg_deprecated_notice('set_page_owner() was deprecated by elgg_set_page_owner_guid().', 1.8);
+ elgg_set_page_owner_guid($entitytoset);
+}
+
+/**
+ * Sets the functional context of a page
+ *
+ * @deprecated 1.8 Use elgg_set_context()
+ *
+ * @param string $context The context of the page
+ *
+ * @return mixed Either the context string, or false on failure
+ */
+function set_context($context) {
+ elgg_deprecated_notice('set_context() was deprecated by elgg_set_context().', 1.8);
+ elgg_set_context($context);
+ if (empty($context)) {
+ return false;
+ }
+ return $context;
+}
+
+/**
+ * Returns the functional context of a page
+ *
+ * @deprecated 1.8 Use elgg_get_context()
+ *
+ * @return string The context, or 'main' if no context has been provided
+ */
+function get_context() {
+ elgg_deprecated_notice('get_context() was deprecated by elgg_get_context().', 1.8);
+ return elgg_get_context();
+
+ // @todo - used to set context based on calling script
+ // $context = get_plugin_name(true)
+}
+
+/**
+ * Returns a list of plugins to load, in the order that they should be loaded.
+ *
+ * @deprecated 1.8 Use elgg_get_plugin_ids_in_dir() or elgg_get_plugins()
+ *
+ * @return array List of plugins
+ */
+function get_plugin_list() {
+ elgg_deprecated_notice('get_plugin_list() is deprecated by elgg_get_plugin_ids_in_dir() or elgg_get_plugins()', 1.8);
+
+ $plugins = elgg_get_plugins('any');
+
+ $list = array();
+ if ($plugins) {
+ foreach ($plugins as $i => $plugin) {
+ // in <=1.7 this returned indexed by multiples of 10.
+ // uh...sure...why not.
+ $index = ($i + 1) * 10;
+ $list[$index] = $plugin->getID();
+ }
+ }
+
+ return $list;
+}
+
+/**
+ * Regenerates the list of known plugins and saves it to the current site
+ *
+ * Important: You should regenerate simplecache and the viewpath cache after executing this function
+ * otherwise you may experience view display artifacts. Do this with the following code:
+ *
+ * elgg_regenerate_simplecache();
+ * elgg_reset_system_cache();
+ *
+ * @deprecated 1.8 Use elgg_generate_plugin_entities() and elgg_set_plugin_priorities()
+ *
+ * @param array $pluginorder Optionally, a list of existing plugins and their orders
+ *
+ * @return array The new list of plugins and their orders
+ */
+function regenerate_plugin_list($pluginorder = FALSE) {
+ $msg = 'regenerate_plugin_list() is (sorta) deprecated by elgg_generate_plugin_entities() and'
+ . ' elgg_set_plugin_priorities().';
+ elgg_deprecated_notice($msg, 1.8);
+
+ // they're probably trying to set it?
+ if ($pluginorder) {
+ if (elgg_generate_plugin_entities()) {
+ // sort the plugins by the index numerically since we used
+ // weird indexes in the old system.
+ ksort($pluginorder, SORT_NUMERIC);
+ return elgg_set_plugin_priorities($pluginorder);
+ }
+ return false;
+ } else {
+ // they're probably trying to regenerate from disk?
+ return elgg_generate_plugin_entities();
+ }
+}
+
+/**
+ * Get the name of the most recent plugin to be called in the
+ * call stack (or the plugin that owns the current page, if any).
+ *
+ * i.e., if the last plugin was in /mod/foobar/, get_plugin_name would return foo_bar.
+ *
+ * @deprecated 1.8 Use elgg_get_calling_plugin_id()
+ *
+ * @param boolean $mainfilename If set to true, this will instead determine the
+ * context from the main script filename called by
+ * the browser. Default = false.
+ *
+ * @return string|false Plugin name, or false if no plugin name was called
+ */
+function get_plugin_name($mainfilename = false) {
+ elgg_deprecated_notice('get_plugin_name() is deprecated by elgg_get_calling_plugin_id()', 1.8);
+
+ return elgg_get_calling_plugin_id($mainfilename);
+}
+
+/**
+ * Load and parse a plugin manifest from a plugin XML file.
+ *
+ * @example plugins/manifest.xml Example 1.8-style manifest file.
+ *
+ * @deprecated 1.8 Use ElggPlugin->getManifest()
+ *
+ * @param string $plugin Plugin name.
+ * @return array of values
+ */
+function load_plugin_manifest($plugin) {
+ elgg_deprecated_notice('load_plugin_manifest() is deprecated by ElggPlugin->getManifest()', 1.8);
+
+ $xml_file = elgg_get_plugins_path() . "$plugin/manifest.xml";
+
+ try {
+ $manifest = new ElggPluginManifest($xml_file, $plugin);
+ } catch(Exception $e) {
+ return false;
+ }
+
+ return $manifest->getManifest();
+}
+
+/**
+ * This function checks a plugin manifest 'elgg_version' value against the current install
+ * returning TRUE if the elgg_version is >= the current install's version.
+ *
+ * @deprecated 1.8 Use ElggPlugin->canActivate()
+ *
+ * @param string $manifest_elgg_version_string The build version (eg 2009010201).
+ * @return bool
+ */
+function check_plugin_compatibility($manifest_elgg_version_string) {
+ elgg_deprecated_notice('check_plugin_compatibility() is deprecated by ElggPlugin->canActivate()', 1.8);
+
+ $version = get_version();
+
+ if (strpos($manifest_elgg_version_string, '.') === false) {
+ // Using version
+ $req_version = (int)$manifest_elgg_version_string;
+
+ return ($version >= $req_version);
+ }
+
+ return false;
+}
+
+/**
+ * Shorthand function for finding the plugin settings.
+ *
+ * @deprecated 1.8 Use elgg_get_calling_plugin_entity() or elgg_get_plugin_from_id()
+ *
+ * @param string $plugin_id Optional plugin id, if not specified
+ * then it is detected from where you are calling.
+ *
+ * @return mixed
+ */
+function find_plugin_settings($plugin_id = null) {
+ elgg_deprecated_notice('find_plugin_setting() is deprecated by elgg_get_calling_plugin_entity() or elgg_get_plugin_from_id()', 1.8);
+ if ($plugin_id) {
+ return elgg_get_plugin_from_id($plugin_id);
+ } else {
+ return elgg_get_calling_plugin_entity();
+ }
+}
+
+/**
+ * Return an array of installed plugins.
+ *
+ * @deprecated 1.8 use elgg_get_plugins()
+ *
+ * @param string $status any|enabled|disabled
+ * @return array
+ */
+function get_installed_plugins($status = 'all') {
+ global $CONFIG;
+
+ elgg_deprecated_notice('get_installed_plugins() was deprecated by elgg_get_plugins()', 1.8);
+
+ $plugins = elgg_get_plugins($status);
+
+ if (!$plugins) {
+ return array();
+ }
+
+ $installed_plugins = array();
+
+ foreach ($plugins as $plugin) {
+ if (!$plugin->isValid()) {
+ continue;
+ }
+
+ $include = true;
+
+ if ($status == 'enabled' && !$plugin->isActive()) {
+ $include = false;
+ } elseif ($status == 'disabled' && $plugin->isActive()) {
+ $include = true;
+ }
+
+ if ($include) {
+ $installed_plugins[$plugin->getID()] = array(
+ 'active' => $plugin->isActive(),
+ 'manifest' => $plugin->getManifest()->getManifest()
+ );
+ }
+ }
+
+ return $installed_plugins;
+}
+
+/**
+ * Enable a plugin for a site (default current site)
+ *
+ * Important: You should regenerate simplecache and the viewpath cache after executing this function
+ * otherwise you may experience view display artifacts. Do this with the following code:
+ *
+ * elgg_regenerate_simplecache();
+ * elgg_reset_system_cache();
+ *
+ * @deprecated 1.8 Use ElggPlugin->activate()
+ *
+ * @param string $plugin The plugin name.
+ * @param int $site_guid The site id, if not specified then this is detected.
+ *
+ * @return array
+ * @throws InvalidClassException
+ */
+function enable_plugin($plugin, $site_guid = null) {
+ elgg_deprecated_notice('enable_plugin() was deprecated by ElggPlugin->activate()', 1.8);
+
+ $plugin = sanitise_string($plugin);
+
+ $site_guid = (int) $site_guid;
+ if (!$site_guid) {
+ $site = get_config('site');
+ $site_guid = $site->guid;
+ }
+
+ try {
+ $plugin = new ElggPlugin($plugin);
+ } catch(Exception $e) {
+ return false;
+ }
+
+ if (!$plugin->canActivate($site_guid)) {
+ return false;
+ }
+
+ return $plugin->activate($site_guid);
+}
+
+/**
+ * Disable a plugin for a site (default current site)
+ *
+ * Important: You should regenerate simplecache and the viewpath cache after executing this function
+ * otherwise you may experience view display artifacts. Do this with the following code:
+ *
+ * elgg_regenerate_simplecache();
+ * elgg_reset_system_cache();
+ *
+ * @deprecated 1.8 Use ElggPlugin->deactivate()
+ *
+ * @param string $plugin The plugin name.
+ * @param int $site_guid The site id, if not specified then this is detected.
+ *
+ * @return bool
+ * @throws InvalidClassException
+ */
+function disable_plugin($plugin, $site_guid = 0) {
+ elgg_deprecated_notice('disable_plugin() was deprecated by ElggPlugin->deactivate()', 1.8);
+
+ $plugin = sanitise_string($plugin);
+
+ $site_guid = (int) $site_guid;
+ if (!$site_guid) {
+ $site = get_config('site');
+ $site_guid = $site->guid;
+ }
+
+ try {
+ $plugin = new ElggPlugin($plugin);
+ } catch(Exception $e) {
+ return false;
+ }
+
+ return $plugin->deactivate($site_guid);
+}
+
+/**
+ * Return whether a plugin is enabled or not.
+ *
+ * @deprecated 1.8 Use elgg_is_active_plugin()
+ *
+ * @param string $plugin The plugin name.
+ * @param int $site_guid The site id, if not specified then this is detected.
+ *
+ * @return bool
+ */
+function is_plugin_enabled($plugin, $site_guid = 0) {
+ elgg_deprecated_notice('is_plugin_enabled() was deprecated by elgg_is_active_plugin()', 1.8);
+ return elgg_is_active_plugin($plugin, $site_guid);
+}
+
+/**
+ * Get entities based on their private data.
+ *
+ * @param string $name The name of the setting
+ * @param string $value The value of the setting
+ * @param string $type The type of entity (eg "user", "object" etc)
+ * @param string $subtype The arbitrary subtype of the entity
+ * @param int $owner_guid The GUID of the owning user
+ * @param string $order_by The field to order by; by default, time_created desc
+ * @param int $limit The number of entities to return; 10 by default
+ * @param int $offset The indexing offset, 0 by default
+ * @param boolean $count Return a count of entities
+ * @param int $site_guid The site to get entities for. 0 for current, -1 for any
+ * @param mixed $container_guid The container(s) GUIDs
+ *
+ * @return array A list of entities.
+ * @deprecated 1.8 Use elgg_get_entities_from_private_settings()
+ */
+function get_entities_from_private_setting($name = "", $value = "", $type = "", $subtype = "",
+$owner_guid = 0, $order_by = "", $limit = 10, $offset = 0, $count = false, $site_guid = 0,
+$container_guid = null) {
+ elgg_deprecated_notice('get_entities_from_private_setting() was deprecated by elgg_get_entities_from_private_setting()!', 1.8);
+
+ $options = array();
+
+ $options['private_setting_name'] = $name;
+ $options['private_setting_value'] = $value;
+
+ // set container_guid to owner_guid to emulate old functionality
+ if ($owner_guid != "") {
+ if (is_null($container_guid)) {
+ $container_guid = $owner_guid;
+ }
+ }
+
+ if ($type) {
+ $options['types'] = $type;
+ }
+
+ if ($subtype) {
+ $options['subtypes'] = $subtype;
+ }
+
+ if ($owner_guid) {
+ if (is_array($owner_guid)) {
+ $options['owner_guids'] = $owner_guid;
+ } else {
+ $options['owner_guid'] = $owner_guid;
+ }
+ }
+
+ if ($container_guid) {
+ if (is_array($container_guid)) {
+ $options['container_guids'] = $container_guid;
+ } else {
+ $options['container_guid'] = $container_guid;
+ }
+ }
+
+ $options['limit'] = $limit;
+
+ if ($offset) {
+ $options['offset'] = $offset;
+ }
+
+ if ($order_by) {
+ $options['order_by'];
+ }
+
+ if ($site_guid) {
+ $options['site_guid'];
+ }
+
+ if ($count) {
+ $options['count'] = $count;
+ }
+
+ return elgg_get_entities_from_private_settings($options);
+}
+
+/**
+ * Get entities based on their private data by multiple keys.
+ *
+ * @param string $name The name of the setting
+ * @param mixed $type Entity type
+ * @param string $subtype Entity subtype
+ * @param int $owner_guid The GUID of the owning user
+ * @param string $order_by The field to order by; by default, time_created desc
+ * @param int $limit The number of entities to return; 10 by default
+ * @param int $offset The indexing offset, 0 by default
+ * @param bool $count Count entities
+ * @param int $site_guid Site GUID. 0 for current, -1 for any.
+ * @param mixed $container_guid Container GUID
+ *
+ * @return array A list of entities.
+ * @deprecated 1.8 Use elgg_get_entities_from_private_settings()
+ */
+function get_entities_from_private_setting_multi(array $name, $type = "", $subtype = "",
+$owner_guid = 0, $order_by = "", $limit = 10, $offset = 0, $count = false,
+$site_guid = 0, $container_guid = null) {
+
+ elgg_deprecated_notice('get_entities_from_private_setting_multi() was deprecated by elgg_get_entities_from_private_settings()!', 1.8);
+
+ $options = array();
+
+ $pairs = array();
+ foreach ($name as $setting_name => $setting_value) {
+ $pairs[] = array('name' => $setting_name, 'value' => $setting_value);
+ }
+ $options['private_setting_name_value_pairs'] = $pairs;
+
+ // set container_guid to owner_guid to emulate old functionality
+ if ($owner_guid != "") {
+ if (is_null($container_guid)) {
+ $container_guid = $owner_guid;
+ }
+ }
+
+ if ($type) {
+ $options['types'] = $type;
+ }
+
+ if ($subtype) {
+ $options['subtypes'] = $subtype;
+ }
+
+ if ($owner_guid) {
+ if (is_array($owner_guid)) {
+ $options['owner_guids'] = $owner_guid;
+ } else {
+ $options['owner_guid'] = $owner_guid;
+ }
+ }
+
+ if ($container_guid) {
+ if (is_array($container_guid)) {
+ $options['container_guids'] = $container_guid;
+ } else {
+ $options['container_guid'] = $container_guid;
+ }
+ }
+
+ $options['limit'] = $limit;
+
+ if ($offset) {
+ $options['offset'] = $offset;
+ }
+
+ if ($order_by) {
+ $options['order_by'];
+ }
+
+ if ($site_guid) {
+ $options['site_guid'];
+ }
+
+ if ($count) {
+ $options['count'] = $count;
+ }
+
+ return elgg_get_entities_from_private_settings($options);
+}
+
+/**
+ * Returns a viewable list of entities by relationship
+ *
+ * @see elgg_view_entity_list
+ *
+ * @deprecated 1.8 Use elgg_list_entities_from_relationship()
+ *
+ * @param string $relationship The relationship eg "friends_of"
+ * @param int $relationship_guid The guid of the entity to use query
+ * @param bool $inverse_relationship Reverse the normal function of the query to instead say "give me all entities for whome $relationship_guid is a $relationship of"
+ * @param string $type The type of entity (eg 'object')
+ * @param string $subtype The entity subtype
+ * @param int $owner_guid The owner (default: all)
+ * @param int $limit The number of entities to display on a page
+ * @param true|false $fullview Whether or not to display the full view (default: true)
+ * @param true|false $viewtypetoggle Whether or not to allow gallery view
+ * @param true|false $pagination Whether to display pagination (default: true)
+ * @param bool $order_by SQL order by clause
+ * @return string The viewable list of entities
+ */
+function list_entities_from_relationship($relationship, $relationship_guid,
+$inverse_relationship = false, $type = ELGG_ENTITIES_ANY_VALUE,
+$subtype = ELGG_ENTITIES_ANY_VALUE, $owner_guid = 0, $limit = 10,
+$fullview = true, $listtypetoggle = false, $pagination = true, $order_by = '') {
+
+ elgg_deprecated_notice("list_entities_from_relationship was deprecated by elgg_list_entities_from_relationship()!", 1.8);
+ return elgg_list_entities_from_relationship(array(
+ 'relationship' => $relationship,
+ 'relationship_guid' => $relationship_guid,
+ 'inverse_relationship' => $inverse_relationship,
+ 'type' => $type,
+ 'subtype' => $subtype,
+ 'owner_guid' => $owner_guid,
+ 'order_by' => $order_by,
+ 'limit' => $limit,
+ 'full_view' => $fullview,
+ 'list_type_toggle' => $listtypetoggle,
+ 'pagination' => $pagination,
+ ));
+}
+
+/**
+ * Gets the number of entities by a the number of entities related to them in a particular way.
+ * This is a good way to get out the users with the most friends, or the groups with the
+ * most members.
+ *
+ * @deprecated 1.8 Use elgg_get_entities_from_relationship_count()
+ *
+ * @param string $relationship The relationship eg "friends_of"
+ * @param bool $inverse_relationship Inverse relationship owners
+ * @param string $type The type of entity (default: all)
+ * @param string $subtype The entity subtype (default: all)
+ * @param int $owner_guid The owner of the entities (default: none)
+ * @param int $limit Limit
+ * @param int $offset Offset
+ * @param bool $count Return a count instead of entities
+ * @param int $site_guid Site GUID
+ *
+ * @return array|int|false An array of entities, or the number of entities, or false on failure
+ */
+function get_entities_by_relationship_count($relationship, $inverse_relationship = true, $type = "",
+$subtype = "", $owner_guid = 0, $limit = 10, $offset = 0, $count = false, $site_guid = 0) {
+ elgg_deprecated_notice('get_entities_by_relationship_count() is deprecated by elgg_get_entities_from_relationship_count()', 1.8);
+
+ $options = array();
+
+ $options['relationship'] = $relationship;
+
+ // this used to default to true, which is wrong.
+ // flip it for the new function
+ $options['inverse_relationship'] = !$inverse_relationship;
+
+ if ($type) {
+ $options['types'] = $type;
+ }
+
+ if ($subtype) {
+ $options['subtypes'] = $subtype;
+ }
+
+ if ($owner_guid) {
+ $options['owner_guid'] = $owner_guid;
+ }
+
+ $options['limit'] = $limit;
+
+ if ($offset) {
+ $options['offset'] = $offset;
+ }
+
+ if ($site_guid) {
+ $options['site_guid'];
+ }
+
+ if ($count) {
+ $options['count'] = $count;
+ }
+
+ return elgg_get_entities_from_relationship_count($options);
+}
+
+/**
+ * Displays a human-readable list of entities
+ *
+ * @deprecated 1.8 Use elgg_list_entities_from_relationship_count()
+ *
+ * @param string $relationship The relationship eg "friends_of"
+ * @param bool $inverse_relationship Inverse relationship owners
+ * @param string $type The type of entity (eg 'object')
+ * @param string $subtype The entity subtype
+ * @param int $owner_guid The owner (default: all)
+ * @param int $limit The number of entities to display on a page
+ * @param bool $fullview Whether or not to display the full view (default: true)
+ * @param bool $listtypetoggle Whether or not to allow gallery view
+ * @param bool $pagination Whether to display pagination (default: true)
+ *
+ * @return string The viewable list of entities
+ */
+function list_entities_by_relationship_count($relationship, $inverse_relationship = true,
+$type = "", $subtype = "", $owner_guid = 0, $limit = 10, $fullview = true,
+$listtypetoggle = false, $pagination = true) {
+
+ elgg_deprecated_notice('list_entities_by_relationship_count() was deprecated by elgg_list_entities_from_relationship_count()', 1.8);
+
+ $options = array();
+
+ $options['relationship'] = $relationship;
+
+ // this used to default to true, which is wrong.
+ // flip it for the new function
+ $options['inverse_relationship'] = !$inverse_relationship;
+
+ if ($type) {
+ $options['types'] = $type;
+ }
+
+ if ($subtype) {
+ $options['subtypes'] = $subtype;
+ }
+
+ if ($owner_guid) {
+ $options['owner_guid'] = $owner_guid;
+ }
+
+ $options['limit'] = $limit;
+
+ $options['full_view'] = $fullview;
+
+ return elgg_list_entities_from_relationship_count($options);
+}
+
+/**
+ * Gets the number of entities by a the number of entities related to
+ * them in a particular way also constrained by metadata.
+ *
+ * @deprecated 1.8 Use elgg_get_entities_from_relationship()
+ *
+ * @param string $relationship The relationship eg "friends_of"
+ * @param int $relationship_guid The guid of the entity to use query
+ * @param bool $inverse_relationship Inverse relationship owner
+ * @param String $meta_name The metadata name
+ * @param String $meta_value The metadata value
+ * @param string $type The type of entity (default: all)
+ * @param string $subtype The entity subtype (default: all)
+ * @param int $owner_guid The owner of the entities (default: none)
+ * @param int $limit Limit
+ * @param int $offset Offset
+ * @param bool $count Return a count instead of entities
+ * @param int $site_guid Site GUID
+ *
+ * @return array|int|false An array of entities, or the number of entities, or false on failure
+ */
+function get_entities_from_relationships_and_meta($relationship, $relationship_guid,
+$inverse_relationship = false, $meta_name = "", $meta_value = "", $type = "",
+$subtype = "", $owner_guid = 0, $limit = 10, $offset = 0, $count = false, $site_guid = 0) {
+
+ elgg_deprecated_notice('get_entities_from_relationship_and_meta() was deprecated by elgg_get_entities_from_relationship()!', 1.7);
+
+ $options = array();
+
+ $options['relationship'] = $relationship;
+ $options['relationship_guid'] = $relationship_guid;
+ $options['inverse_relationship'] = $inverse_relationship;
+
+ if ($meta_value) {
+ $options['values'] = $meta_value;
+ }
+
+ if ($entity_type) {
+ $options['types'] = $entity_type;
+ }
+
+ if ($type) {
+ $options['types'] = $type;
+ }
+
+ if ($subtype) {
+ $options['subtypes'] = $subtype;
+ }
+
+ if ($owner_guid) {
+ $options['owner_guid'] = $owner_guid;
+ }
+
+ if ($limit) {
+ $options['limit'] = $limit;
+ }
+
+ if ($offset) {
+ $options['offset'] = $offset;
+ }
+
+ if ($order_by) {
+ $options['order_by'];
+ }
+
+ if ($site_guid) {
+ $options['site_guid'];
+ }
+
+ if ($count) {
+ $options['count'] = $count;
+ }
+
+ return elgg_get_entities_from_relationship($options);
+}
+
+
+/**
+ * Retrieves items from the river. All parameters are optional.
+ *
+ * @param int|array $subject_guid Acting entity to restrict to. Default: all
+ * @param int|array $object_guid Entity being acted on to restrict to. Default: all
+ * @param string $subject_relationship If set to a relationship type, this will use
+ * $subject_guid as the starting point and set the
+ * subjects to be all users this
+ * entity has this relationship with (eg 'friend').
+ * Default: blank
+ * @param string $type The type of entity to restrict to. Default: all
+ * @param string $subtype The subtype of entity to restrict to. Default: all
+ * @param string $action_type The type of river action to restrict to. Default: all
+ * @param int $limit The number of items to retrieve. Default: 20
+ * @param int $offset The page offset. Default: 0
+ * @param int $posted_min The minimum time period to look at. Default: none
+ * @param int $posted_max The maximum time period to look at. Default: none
+ *
+ * @return array|false Depending on success
+ * @deprecated 1.8 Use elgg_get_river()
+ */
+function get_river_items($subject_guid = 0, $object_guid = 0, $subject_relationship = '',
+$type = '', $subtype = '', $action_type = '', $limit = 20, $offset = 0, $posted_min = 0,
+$posted_max = 0) {
+ elgg_deprecated_notice("get_river_items deprecated by elgg_get_river", 1.8);
+
+ $options = array();
+
+ if ($subject_guid) {
+ $options['subject_guid'] = $subject_guid;
+ }
+
+ if ($object_guid) {
+ $options['object_guid'] = $object_guid;
+ }
+
+ if ($subject_relationship) {
+ $options['relationship'] = $subject_relationship;
+ unset($options['subject_guid']);
+ $options['relationship_guid'] = $subject_guid;
+ }
+
+ if ($type) {
+ $options['type'] = $type;
+ }
+
+ if ($subtype) {
+ $options['subtype'] = $subtype;
+ }
+
+ if ($action_type) {
+ $options['action_type'] = $action_type;
+ }
+
+ $options['limit'] = $limit;
+ $options['offset'] = $offset;
+
+ if ($posted_min) {
+ $options['posted_time_lower'] = $posted_min;
+ }
+
+ if ($posted_max) {
+ $options['posted_time_upper'] = $posted_max;
+ }
+
+ return elgg_get_river($options);
+}
+
+/**
+ * Returns a human-readable version of the river.
+ *
+ * @param int|array $subject_guid Acting entity to restrict to. Default: all
+ * @param int|array $object_guid Entity being acted on to restrict to. Default: all
+ * @param string $subject_relationship If set to a relationship type, this will use
+ * $subject_guid as the starting point and set
+ * the subjects to be all users this entity has this
+ * relationship with (eg 'friend'). Default: blank
+ * @param string $type The type of entity to restrict to. Default: all
+ * @param string $subtype The subtype of entity to restrict to. Default: all
+ * @param string $action_type The type of river action to restrict to. Default: all
+ * @param int $limit The number of items to retrieve. Default: 20
+ * @param int $posted_min The minimum time period to look at. Default: none
+ * @param int $posted_max The maximum time period to look at. Default: none
+ * @param bool $pagination Show pagination?
+ *
+ * @return string Human-readable river.
+ * @deprecated 1.8 Use elgg_list_river()
+ */
+function elgg_view_river_items($subject_guid = 0, $object_guid = 0, $subject_relationship = '',
+$type = '', $subtype = '', $action_type = '', $limit = 20, $posted_min = 0,
+$posted_max = 0, $pagination = true) {
+ elgg_deprecated_notice("elgg_view_river_items deprecated for elgg_list_river", 1.8);
+
+ $river_items = get_river_items($subject_guid, $object_guid, $subject_relationship,
+ $type, $subtype, $action_type, $limit + 1, $posted_min, $posted_max);
+
+ // Get input from outside world and sanitise it
+ $offset = (int) get_input('offset', 0);
+
+ // view them
+ $params = array(
+ 'items' => $river_items,
+ 'count' => count($river_items),
+ 'offset' => $offset,
+ 'limit' => $limit,
+ 'pagination' => $pagination,
+ 'list-class' => 'elgg-list-river',
+ );
+
+ return elgg_view('page/components/list', $params);
+}
+
+/**
+ * Construct and execute the query required for the activity stream.
+ *
+ * @deprecated 1.8 This is outdated and uses the systemlog table instead of the river table.
+ * Don't use it.
+ */
+function get_activity_stream_data($limit = 10, $offset = 0, $type = "", $subtype = "",
+$owner_guid = "", $owner_relationship = "") {
+ elgg_deprecated_notice("get_activity_stream_data was deprecated", 1.8);
+
+ global $CONFIG;
+
+ $limit = (int)$limit;
+ $offset = (int)$offset;
+
+ if ($type) {
+ if (!is_array($type)) {
+ $type = array(sanitise_string($type));
+ } else {
+ foreach ($type as $k => $v) {
+ $type[$k] = sanitise_string($v);
+ }
+ }
+ }
+
+ if ($subtype) {
+ if (!is_array($subtype)) {
+ $subtype = array(sanitise_string($subtype));
+ } else {
+ foreach ($subtype as $k => $v) {
+ $subtype[$k] = sanitise_string($v);
+ }
+ }
+ }
+
+ if ($owner_guid) {
+ if (is_array($owner_guid)) {
+ foreach ($owner_guid as $k => $v) {
+ $owner_guid[$k] = (int)$v;
+ }
+ } else {
+ $owner_guid = array((int)$owner_guid);
+ }
+ }
+
+ $owner_relationship = sanitise_string($owner_relationship);
+
+ // Get a list of possible views
+ $activity_events = array();
+ $activity_views = array_merge(elgg_view_tree('activity', 'default'),
+ elgg_view_tree('river', 'default'));
+
+ $done = array();
+
+ foreach ($activity_views as $view) {
+ $fragments = explode('/', $view);
+ $tmp = explode('/', $view, 2);
+ $tmp = $tmp[1];
+
+ if ((isset($fragments[0])) && (($fragments[0] == 'river') || ($fragments[0] == 'activity'))
+ && (!in_array($tmp, $done))) {
+
+ if (isset($fragments[1])) {
+ $f = array();
+ for ($n = 1; $n < count($fragments); $n++) {
+ $val = sanitise_string($fragments[$n]);
+ switch($n) {
+ case 1: $key = 'type'; break;
+ case 2: $key = 'subtype'; break;
+ case 3: $key = 'event'; break;
+ }
+ $f[$key] = $val;
+ }
+
+ // Filter result based on parameters
+ $add = true;
+ if ($type) {
+ if (!in_array($f['type'], $type)) {
+ $add = false;
+ }
+ }
+ if (($add) && ($subtype)) {
+ if (!in_array($f['subtype'], $subtype)) {
+ $add = false;
+ }
+ }
+ if (($add) && ($event)) {
+ if (!in_array($f['event'], $event)) {
+ $add = false;
+ }
+ }
+
+ if ($add) {
+ $activity_events[] = $f;
+ }
+ }
+
+ $done[] = $tmp;
+ }
+ }
+
+ $n = 0;
+ foreach ($activity_events as $details) {
+ // Get what we're talking about
+ if ($details['subtype'] == 'default') {
+ $details['subtype'] = '';
+ }
+
+ if (($details['type']) && ($details['event'])) {
+ if ($n > 0) {
+ $obj_query .= " or ";
+ }
+
+ $access = "";
+ if ($details['type'] != 'relationship') {
+ $access = " and " . get_access_sql_suffix('sl');
+ }
+
+ $obj_query .= "( sl.object_type='{$details['type']}'
+ AND sl.object_subtype='{$details['subtype']}'
+ AND sl.event='{$details['event']}' $access )";
+
+ $n++;
+ }
+ }
+
+ // User
+ if ((count($owner_guid)) && ($owner_guid[0] != 0)) {
+ $user = " and sl.performed_by_guid in (" . implode(',', $owner_guid) . ")";
+
+ if ($owner_relationship) {
+ $friendsarray = "";
+ if ($friends = elgg_get_entities_from_relationship(array(
+ 'relationship' => $owner_relationship,
+ 'relationship_guid' => $owner_guid[0],
+ 'inverse_relationship' => FALSE,
+ 'type' => 'user',
+ 'subtype' => $subtype,
+ 'limit' => false))
+ ) {
+
+ $friendsarray = array();
+ foreach ($friends as $friend) {
+ $friendsarray[] = $friend->getGUID();
+ }
+
+ $user = " and sl.performed_by_guid in (" . implode(',', $friendsarray) . ")";
+ }
+ }
+ }
+
+ $query = "SELECT sl.* FROM {$CONFIG->dbprefix}system_log sl
+ WHERE 1 $user AND ($obj_query)
+ ORDER BY sl.time_created desc limit $offset, $limit";
+ return get_data($query);
+}
+
+/**
+ * Perform standard authentication with a given username and password.
+ * Returns an ElggUser object for use with login.
+ *
+ * @see login
+ *
+ * @param string $username The username, optionally (for standard logins)
+ * @param string $password The password, optionally (for standard logins)
+ *
+ * @return ElggUser|false The authenticated user object, or false on failure.
+ *
+ * @deprecated 1.8 Use elgg_authenticate
+ */
+function authenticate($username, $password) {
+ elgg_deprecated_notice('authenticate() has been deprecated for elgg_authenticate()', 1.8);
+ $pam = new ElggPAM('user');
+ $credentials = array('username' => $username, 'password' => $password);
+ $result = $pam->authenticate($credentials);
+ if ($result) {
+ return get_user_by_username($username);
+ }
+ return false;
+}
+
+
+/**
+ * Get the members of a site.
+ *
+ * @param int $site_guid Site GUID
+ * @param int $limit User GUID
+ * @param int $offset Offset
+ *
+ * @return mixed
+ * @deprecated 1.8 Use ElggSite::getMembers()
+ */
+function get_site_members($site_guid, $limit = 10, $offset = 0) {
+ elgg_deprecated_notice("get_site_members() deprecated.
+ Use ElggSite::getMembers()", 1.8);
+
+ $site = get_entity($site_guid);
+ if ($site) {
+ return $site->getMembers($limit, $offset);
+ }
+
+ return false;
+}
+
+/**
+ * Display a list of site members
+ *
+ * @param int $site_guid The GUID of the site
+ * @param int $limit The number of members to display on a page
+ * @param bool $fullview Whether or not to display the full view (default: true)
+ *
+ * @return string A displayable list of members
+ * @deprecated 1.8 Use ElggSite::listMembers()
+ */
+function list_site_members($site_guid, $limit = 10, $fullview = true) {
+ elgg_deprecated_notice("list_site_members() deprecated.
+ Use ElggSite::listMembers()", 1.8);
+
+ $options = array(
+ 'limit' => $limit,
+ 'full_view' => $full_view,
+ );
+
+ $site = get_entity($site_guid);
+ if ($site) {
+ return $site->listMembers($options);
+ }
+
+ return '';
+}
+
+
+/**
+ * Add a collection to a site.
+ *
+ * @param int $site_guid Site GUID
+ * @param int $collection_guid Collection GUID
+ *
+ * @return mixed
+ * @deprecated 1.8 Don't use this.
+ */
+function add_site_collection($site_guid, $collection_guid) {
+ elgg_deprecated_notice("add_site_collection has been deprecated", 1.8);
+ global $CONFIG;
+
+ $site_guid = (int)$site_guid;
+ $collection_guid = (int)$collection_guid;
+
+ return add_entity_relationship($collection_guid, "member_of_site", $site_guid);
+}
+
+/**
+ * Remove a collection from a site.
+ *
+ * @param int $site_guid Site GUID
+ * @param int $collection_guid Collection GUID
+ *
+ * @return mixed
+ * @deprecated 1.8 Don't use this.
+ */
+function remove_site_collection($site_guid, $collection_guid) {
+ elgg_deprecated_notice("remove_site_collection has been deprecated", 1.8);
+ $site_guid = (int)$site_guid;
+ $collection_guid = (int)$collection_guid;
+
+ return remove_entity_relationship($collection_guid, "member_of_site", $site_guid);
+}
+
+/**
+ * Get the collections belonging to a site.
+ *
+ * @param int $site_guid Site GUID
+ * @param string $subtype Subtype
+ * @param int $limit Limit
+ * @param int $offset Offset
+ *
+ * @return mixed
+ * @deprecated 1.8 Don't use this.
+ */
+function get_site_collections($site_guid, $subtype = "", $limit = 10, $offset = 0) {
+ elgg_deprecated_notice("get_site_collections has been deprecated", 1.8);
+ $site_guid = (int)$site_guid;
+ $subtype = sanitise_string($subtype);
+ $limit = (int)$limit;
+ $offset = (int)$offset;
+
+ // collection isn't a valid type. This won't work.
+ return elgg_get_entities_from_relationship(array(
+ 'relationship' => 'member_of_site',
+ 'relationship_guid' => $site_guid,
+ 'inverse_relationship' => TRUE,
+ 'type' => 'collection',
+ 'subtype' => $subtype,
+ 'limit' => $limit,
+ 'offset' => $offset
+ ));
+}
+
+/**
+ * Get an array of tags with weights for use with the output/tagcloud view.
+ *
+ * @deprecated 1.8 Use elgg_get_tags().
+ *
+ * @param int $threshold Get the threshold of minimum number of each tags to
+ * bother with (ie only show tags where there are more
+ * than $threshold occurances)
+ * @param int $limit Number of tags to return
+ * @param string $metadata_name Optionally, the name of the field you want to grab for
+ * @param string $entity_type Optionally, the entity type ('object' etc)
+ * @param string $entity_subtype The entity subtype, optionally
+ * @param int $owner_guid The GUID of the tags owner, optionally
+ * @param int $site_guid Optionally, the site to restrict to (default is the current site)
+ * @param int $start_ts Optionally specify a start timestamp for tags used to
+ * generate cloud.
+ * @param int $end_ts Optionally specify an end timestamp for tags used to generate cloud
+ *
+ * @return array|false Array of objects with ->tag and ->total values, or false on failure
+ */
+function get_tags($threshold = 1, $limit = 10, $metadata_name = "", $entity_type = "object",
+$entity_subtype = "", $owner_guid = "", $site_guid = -1, $start_ts = "", $end_ts = "") {
+
+ elgg_deprecated_notice('get_tags() has been replaced by elgg_get_tags()', 1.8);
+
+ if (is_array($metadata_name)) {
+ return false;
+ }
+
+ $options = array();
+ if ($metadata_name === '') {
+ $options['tag_names'] = array();
+ } else {
+ $options['tag_names'] = array($metadata_name);
+ }
+
+ $options['threshold'] = $threshold;
+ $options['limit'] = $limit;
+
+ // rewrite owner_guid to container_guid to emulate old functionality
+ $container_guid = $owner_guid;
+ if ($container_guid) {
+ $options['container_guids'] = $container_guid;
+ }
+
+ if ($entity_type) {
+ $options['type'] = $entity_type;
+ }
+
+ if ($entity_subtype) {
+ $options['subtype'] = $entity_subtype;
+ }
+
+ if ($site_guid != -1) {
+ $options['site_guids'] = $site_guid;
+ }
+
+ if ($end_ts) {
+ $options['created_time_upper'] = $end_ts;
+ }
+
+ if ($start_ts) {
+ $options['created_time_lower'] = $start_ts;
+ }
+
+ $r = elgg_get_tags($options);
+ return $r;
+}
+
+/**
+ * Loads and displays a tagcloud given particular criteria.
+ *
+ * @deprecated 1.8 use elgg_view_tagcloud()
+ *
+ * @param int $threshold Get the threshold of minimum number of each tags
+ * to bother with (ie only show tags where there are
+ * more than $threshold occurances)
+ * @param int $limit Number of tags to return
+ * @param string $metadata_name Optionally, the name of the field you want to grab for
+ * @param string $entity_type Optionally, the entity type ('object' etc)
+ * @param string $entity_subtype The entity subtype, optionally
+ * @param int $owner_guid The GUID of the tags owner, optionally
+ * @param int $site_guid Optionally, the site to restrict to (default is the current site)
+ * @param int $start_ts Optionally specify a start timestamp for tags used to
+ * generate cloud.
+ * @param int $end_ts Optionally specify an end timestamp for tags used to generate
+ * cloud.
+ *
+ * @return string The HTML (or other, depending on view type) of the tagcloud.
+ */
+function display_tagcloud($threshold = 1, $limit = 10, $metadata_name = "", $entity_type = "object",
+$entity_subtype = "", $owner_guid = "", $site_guid = -1, $start_ts = "", $end_ts = "") {
+
+ elgg_deprecated_notice('display_tagcloud() was deprecated by elgg_view_tagcloud()!', 1.8);
+
+ $tags = get_tags($threshold, $limit, $metadata_name, $entity_type,
+ $entity_subtype, $owner_guid, $site_guid, $start_ts, $end_ts);
+
+ return elgg_view('output/tagcloud', array(
+ 'value' => $tags,
+ 'type' => $entity_type,
+ 'subtype' => $entity_subtype,
+ ));
+}
+
+
+/**
+ * Obtains a list of objects owned by a user
+ *
+ * @param int $user_guid The GUID of the owning user
+ * @param string $subtype Optionally, the subtype of objects
+ * @param int $limit The number of results to return (default 10)
+ * @param int $offset Indexing offset, if any
+ * @param int $timelower The earliest time the entity can have been created. Default: all
+ * @param int $timeupper The latest time the entity can have been created. Default: all
+ *
+ * @return false|array An array of ElggObjects or false, depending on success
+ * @deprecated 1.8 Use elgg_get_entities() instead
+ */
+function get_user_objects($user_guid, $subtype = ELGG_ENTITIES_ANY_VALUE, $limit = 10,
+$offset = 0, $timelower = 0, $timeupper = 0) {
+ elgg_deprecated_notice("get_user_objects() was deprecated in favor of elgg_get_entities()", 1.8);
+ $ntt = elgg_get_entities(array(
+ 'type' => 'object',
+ 'subtype' => $subtype,
+ 'owner_guid' => $user_guid,
+ 'limit' => $limit,
+ 'offset' => $offset,
+ 'container_guid' => $user_guid,
+ 'created_time_lower' => $timelower,
+ 'created_time_upper' => $timeupper
+ ));
+ return $ntt;
+}
+
+/**
+ * Counts the objects (optionally of a particular subtype) owned by a user
+ *
+ * @param int $user_guid The GUID of the owning user
+ * @param string $subtype Optionally, the subtype of objects
+ * @param int $timelower The earliest time the entity can have been created. Default: all
+ * @param int $timeupper The latest time the entity can have been created. Default: all
+ *
+ * @return int The number of objects the user owns (of this subtype)
+ * @deprecated 1.8 Use elgg_get_entities() instead
+ */
+function count_user_objects($user_guid, $subtype = ELGG_ENTITIES_ANY_VALUE, $timelower = 0,
+$timeupper = 0) {
+ elgg_deprecated_notice("count_user_objects() was deprecated in favor of elgg_get_entities()", 1.8);
+ $total = elgg_get_entities(array(
+ 'type' => 'object',
+ 'subtype' => $subtype,
+ 'owner_guid' => $user_guid,
+ 'count' => TRUE,
+ 'container_guid' => $user_guid,
+ 'created_time_lower' => $timelower,
+ 'created_time_upper' => $timeupper
+ ));
+ return $total;
+}
+
+/**
+ * Displays a list of user objects of a particular subtype, with navigation.
+ *
+ * @see elgg_view_entity_list
+ *
+ * @param int $user_guid The GUID of the user
+ * @param string $subtype The object subtype
+ * @param int $limit The number of entities to display on a page
+ * @param bool $fullview Whether or not to display the full view (default: true)
+ * @param bool $listtypetoggle Whether or not to allow gallery view (default: true)
+ * @param bool $pagination Whether to display pagination (default: true)
+ * @param int $timelower The earliest time the entity can have been created. Default: all
+ * @param int $timeupper The latest time the entity can have been created. Default: all
+ *
+ * @return string The list in a form suitable to display
+ * @deprecated 1.8 Use elgg_list_entities() instead
+ */
+function list_user_objects($user_guid, $subtype = ELGG_ENTITIES_ANY_VALUE, $limit = 10,
+$fullview = true, $listtypetoggle = true, $pagination = true, $timelower = 0, $timeupper = 0) {
+ elgg_deprecated_notice("list_user_objects() was deprecated in favor of elgg_list_entities()", 1.8);
+
+ $offset = (int) get_input('offset');
+ $limit = (int) $limit;
+ $count = (int) count_user_objects($user_guid, $subtype, $timelower, $timeupper);
+ $entities = get_user_objects($user_guid, $subtype, $limit, $offset, $timelower, $timeupper);
+
+ return elgg_view_entity_list($entities, $count, $offset, $limit, $fullview, $listtypetoggle,
+ $pagination);
+}
+
+
+/**
+ * Get user objects by an array of metadata
+ *
+ * @param int $user_guid The GUID of the owning user
+ * @param string $subtype Optionally, the subtype of objects
+ * @param array $metadata An array of metadata
+ * @param int $limit The number of results to return (default 10)
+ * @param int $offset Indexing offset, if any
+ *
+ * @return false|array An array of ElggObjects or false, depending on success
+ * @deprecated 1.8 Use elgg_get_entities_from_metadata() instead
+ */
+function get_user_objects_by_metadata($user_guid, $subtype = "", $metadata = array(),
+$limit = 0, $offset = 0) {
+ elgg_deprecated_notice("get_user_objects_by_metadata() was deprecated in favor of elgg_get_entities_from_metadata()", 1.8);
+ return get_entities_from_metadata_multi($metadata, "object", $subtype, $user_guid,
+ $limit, $offset);
+}
+
+/**
+ * Set the validation status for a user.
+ *
+ * @param bool $status Validated (true) or false
+ * @param string $method Optional method to say how a user was validated
+ * @return bool
+ * @deprecated 1.8 Use elgg_set_user_validation_status()
+ */
+function set_user_validation_status($user_guid, $status, $method = '') {
+ elgg_deprecated_notice("set_user_validation_status() is deprecated", 1.8);
+ return elgg_set_user_validation_status($user_guid, $status, $method);
+}
+
+/**
+ * Trigger an event requesting that a user guid be validated somehow - either by email address or some other way.
+ *
+ * This function invalidates any existing validation value.
+ *
+ * @param int $user_guid User's GUID
+ * @deprecated 1.8 Hook into the register, user plugin hook and request validation.
+ */
+function request_user_validation($user_guid) {
+ elgg_deprecated_notice("request_user_validation() is deprecated.
+ Plugins should register for the 'register, user' plugin hook", 1.8);
+ $user = get_entity($user_guid);
+
+ if (($user) && ($user instanceof ElggUser)) {
+ // invalidate any existing validations
+ set_user_validation_status($user_guid, false);
+
+ // request validation
+ trigger_elgg_event('validate', 'user', $user);
+ }
+}
+
+/**
+ * Register a user settings page with the admin panel.
+ * This function extends the view "usersettings/main" with the provided view.
+ * This view should provide a description and either a control or a link to.
+ *
+ * Usage:
+ * - To add a control to the main admin panel then extend usersettings/main
+ * - To add a control to a new page create a page which renders a view
+ * usersettings/subpage (where subpage is your new page -
+ * nb. some pages already exist that you can extend), extend the main view
+ * to point to it, and add controls to your new view.
+ *
+ * At the moment this is essentially a wrapper around elgg_extend_view().
+ *
+ * @param string $new_settings_view The view associated with the control you're adding
+ * @param string $view The view to extend, by default this is 'usersettings/main'.
+ * @param int $priority Optional priority to govern the appearance in the list.
+ *
+ * @return bool
+ * @deprecated 1.8 Extend one of the views in core/settings
+ */
+function extend_elgg_settings_page($new_settings_view, $view = 'usersettings/main',
+$priority = 500) {
+ // see views: /core/settings
+ elgg_deprecated_notice("extend_elgg_settings_page has been deprecated. Extend one of the settings views instead", 1.8);
+
+ return elgg_extend_view($view, $new_settings_view, $priority);
+}
+
+/**
+ * Returns a representation of a full 'page' (which might be an HTML page,
+ * RSS file, etc, depending on the current viewtype)
+ *
+ * @param string $title
+ * @param string $body
+ * @return string
+ *
+ * @deprecated 1.8 Use elgg_view_page()
+ */
+function page_draw($title, $body, $sidebar = "") {
+ elgg_deprecated_notice("page_draw() was deprecated in favor of elgg_view_page() in 1.8.", 1.8);
+
+ $vars = array(
+ 'sidebar' => $sidebar
+ );
+ echo elgg_view_page($title, $body, 'default', $vars);
+}
+
+/**
+ * Wrapper function to display search listings.
+ *
+ * @param string $icon The icon for the listing
+ * @param string $info Any information that needs to be displayed.
+ *
+ * @return string The HTML (etc) representing the listing
+ * @deprecated 1.8 use elgg_view_image_block()
+ */
+function elgg_view_listing($icon, $info) {
+ elgg_deprecated_notice('elgg_view_listing deprecated by elgg_view_image_block', 1.8);
+ return elgg_view('page/components/image_block', array('image' => $icon, 'body' => $info));
+}
+
+/**
+ * Return the icon URL for an entity.
+ *
+ * @tip Can be overridden by registering a plugin hook for entity:icon:url, $entity_type.
+ *
+ * @internal This is passed an entity rather than a guid to handle non-created entities.
+ *
+ * @param ElggEntity $entity The entity
+ * @param string $size Icon size
+ *
+ * @return string URL to the entity icon.
+ * @deprecated 1.8 Use $entity->getIconURL()
+ */
+function get_entity_icon_url(ElggEntity $entity, $size = 'medium') {
+ elgg_deprecated_notice("get_entity_icon_url() deprecated for getIconURL()", 1.8);
+ global $CONFIG;
+
+ $size = sanitise_string($size);
+ switch (strtolower($size)) {
+ case 'master':
+ $size = 'master';
+ break;
+
+ case 'large' :
+ $size = 'large';
+ break;
+
+ case 'topbar' :
+ $size = 'topbar';
+ break;
+
+ case 'tiny' :
+ $size = 'tiny';
+ break;
+
+ case 'small' :
+ $size = 'small';
+ break;
+
+ case 'medium' :
+ default:
+ $size = 'medium';
+ }
+
+ $url = false;
+
+ $viewtype = elgg_get_viewtype();
+
+ // Step one, see if anyone knows how to render this in the current view
+ $params = array('entity' => $entity, 'viewtype' => $viewtype, 'size' => $size);
+ $url = elgg_trigger_plugin_hook('entity:icon:url', $entity->getType(), $params, $url);
+
+ // Fail, so use default
+ if (!$url) {
+ $type = $entity->getType();
+ $subtype = $entity->getSubtype();
+
+ if (!empty($subtype)) {
+ $overrideurl = elgg_view("icon/{$type}/{$subtype}/{$size}", array('entity' => $entity));
+ if (!empty($overrideurl)) {
+ return $overrideurl;
+ }
+ }
+
+ $overrideurl = elgg_view("icon/{$type}/default/{$size}", array('entity' => $entity));
+ if (!empty($overrideurl)) {
+ return $overrideurl;
+ }
+
+ $url = "_graphics/icons/default/$size.png";
+ }
+
+ return elgg_normalize_url($url);
+}
+
+/**
+ * Return the current logged in user, or NULL if no user is logged in.
+ *
+ * If no user can be found in the current session, a plugin
+ * hook - 'session:get' 'user' to give plugin authors another
+ * way to provide user details to the ACL system without touching the session.
+ *
+ * @deprecated 1.8 Use elgg_get_logged_in_user_entity()
+ * @return ElggUser|NULL
+ */
+function get_loggedin_user() {
+ elgg_deprecated_notice('get_loggedin_user() is deprecated by elgg_get_logged_in_user_entity()', 1.8);
+ return elgg_get_logged_in_user_entity();
+}
+
+/**
+ * Return the current logged in user by id.
+ *
+ * @deprecated 1.8 Use elgg_get_logged_in_user_guid()
+ * @see elgg_get_logged_in_user_entity()
+ * @return int
+ */
+function get_loggedin_userid() {
+ elgg_deprecated_notice('get_loggedin_userid() is deprecated by elgg_get_logged_in_user_guid()', 1.8);
+ return elgg_get_logged_in_user_guid();
+}
+
+
+/**
+ * Returns whether or not the user is currently logged in
+ *
+ * @deprecated 1.8 Use elgg_is_logged_in();
+ * @return bool
+ */
+function isloggedin() {
+ elgg_deprecated_notice('isloggedin() is deprecated by elgg_is_logged_in()', 1.8);
+ return elgg_is_logged_in();
+}
+
+/**
+ * Returns whether or not the user is currently logged in and that they are an admin user.
+ *
+ * @deprecated 1.8 Use elgg_is_admin_logged_in()
+ * @return bool
+ */
+function isadminloggedin() {
+ elgg_deprecated_notice('isadminloggedin() is deprecated by elgg_is_admin_logged_in()', 1.8);
+ return elgg_is_admin_logged_in();
+}
+
+
+/**
+ * Loads plugins
+ *
+ * @deprecated 1.8 Use elgg_load_plugins()
+ *
+ * @return bool
+ */
+function load_plugins() {
+ elgg_deprecated_notice('load_plugins() is deprecated by elgg_load_plugins()', 1.8);
+ return elgg_load_plugins();
+}
+
+/**
+ * Find the plugin settings for a user.
+ *
+ * @param string $plugin_id Plugin name.
+ * @param int $user_guid The guid who's settings to retrieve.
+ *
+ * @deprecated 1.8 Use elgg_get_all_plugin_user_settings() or ElggPlugin->getAllUserSettings()
+ * @return StdClass Object with all user settings.
+ */
+function find_plugin_usersettings($plugin_id = null, $user_guid = 0) {
+ elgg_deprecated_notice('find_plugin_usersettings() is deprecated by elgg_get_all_plugin_user_settings()', 1.8);
+ return elgg_get_all_plugin_user_settings($user_guid, $plugin_id, true);
+}
+
+/**
+ * Set a user specific setting for a plugin.
+ *
+ * @param string $name The name - note, can't be "title".
+ * @param mixed $value The value.
+ * @param int $user_guid Optional user.
+ * @param string $plugin_id Optional plugin name, if not specified then it
+ * is detected from where you are calling from.
+ *
+ * @return bool
+ * @deprecated 1.8 Use elgg_set_plugin_user_setting() or ElggPlugin->setUserSetting()
+ */
+function set_plugin_usersetting($name, $value, $user_guid = 0, $plugin_id = "") {
+ elgg_deprecated_notice('find_plugin_usersettings() is deprecated by elgg_get_all_plugin_user_settings()', 1.8);
+ return elgg_set_plugin_user_setting($name, $value, $user_guid, $plugin_id);
+}
+
+/**
+ * Clears a user-specific plugin setting
+ *
+ * @param str $name Name of the plugin setting
+ * @param int $user_guid Defaults to logged in user
+ * @param str $plugin_id Defaults to contextual plugin name
+ *
+ * @deprecated 1.8 Use elgg_unset_plugin_user_setting or ElggPlugin->unsetUserSetting().
+ * @return bool Success
+ */
+function clear_plugin_usersetting($name, $user_guid = 0, $plugin_id = '') {
+ elgg_deprecated_notice('clear_plugin_usersetting() is deprecated by elgg_unset_plugin_usersetting()', 1.8);
+ return elgg_unset_plugin_user_setting($name, $user_guid, $plugin_id);
+}
+
+/**
+ * Get a user specific setting for a plugin.
+ *
+ * @param string $name The name.
+ * @param int $user_guid Guid of owning user
+ * @param string $plugin_id Optional plugin name, if not specified
+ * it is detected from where you are calling.
+ *
+ * @deprecated 1.8 Use elgg_get_plugin_user_setting() or ElggPlugin->getUserSetting()
+ * @return mixed
+ */
+function get_plugin_usersetting($name, $user_guid = 0, $plugin_id = "") {
+ elgg_deprecated_notice('get_plugin_usersetting() is deprecated by elgg_get_plugin_user_setting()', 1.8);
+ return elgg_get_plugin_user_setting($name, $user_guid, $plugin_id);
+}
+
+/**
+ * Set a setting for a plugin.
+ *
+ * @param string $name The name - note, can't be "title".
+ * @param mixed $value The value.
+ * @param string $plugin_id Optional plugin name, if not specified
+ * then it is detected from where you are calling from.
+ *
+ * @deprecated 1.8 Use elgg_set_plugin_setting() or ElggPlugin->setSetting()
+ * @return int|false
+ */
+function set_plugin_setting($name, $value, $plugin_id = null) {
+ elgg_deprecated_notice('set_plugin_setting() is deprecated by elgg_set_plugin_setting()', 1.8);
+ return elgg_set_plugin_setting($name, $value, $plugin_id);
+}
+
+/**
+ * Get setting for a plugin.
+ *
+ * @param string $name The name.
+ * @param string $plugin_id Optional plugin name, if not specified
+ * then it is detected from where you are calling from.
+ *
+ * @deprecated 1.8 Use elgg_get_plugin_setting() or ElggPlugin->getSetting()
+ * @return mixed
+ */
+function get_plugin_setting($name, $plugin_id = "") {
+ elgg_deprecated_notice('get_plugin_setting() is deprecated by elgg_get_plugin_setting()', 1.8);
+ return elgg_get_plugin_setting($name, $plugin_id);
+}
+
+/**
+ * Clear a plugin setting.
+ *
+ * @param string $name The name.
+ * @param string $plugin_id Optional plugin name, if not specified
+ * then it is detected from where you are calling from.
+ *
+ * @deprecated 1.8 Use elgg_unset_plugin_setting() or ElggPlugin->unsetSetting()
+ * @return bool
+ */
+function clear_plugin_setting($name, $plugin_id = "") {
+ elgg_deprecated_notice('clear_plugin_setting() is deprecated by elgg_unset_plugin_setting()', 1.8);
+ return elgg_unset_plugin_setting($name, $plugin_id);
+}
+
+/**
+ * Unsets all plugin settings for a plugin.
+ *
+ * @param string $plugin_id Optional plugin name, if not specified
+ * then it is detected from where you are calling from.
+ *
+ * @return bool
+ * @deprecated 1.8 Use elgg_unset_all_plugin_settings() or ElggPlugin->unsetAllSettings()
+ * @since 1.7.0
+ */
+function clear_all_plugin_settings($plugin_id = "") {
+ elgg_deprecated_notice('clear_all_plugin_settings() is deprecated by elgg_unset_all_plugin_setting()', 1.8);
+ return elgg_unset_all_plugin_settings($plugin_id);
+}
+
+
+/**
+ * Get a list of annotations for a given object/user/annotation type.
+ *
+ * @param int|array $entity_guid GUID to return annotations of (falsey for any)
+ * @param string $entity_type Type of entity
+ * @param string $entity_subtype Subtype of entity
+ * @param string $name Name of annotation
+ * @param mixed $value Value of annotation
+ * @param int|array $owner_guid Owner(s) of annotation
+ * @param int $limit Limit
+ * @param int $offset Offset
+ * @param string $order_by Order annotations by SQL
+ * @param int $timelower Lower time limit
+ * @param int $timeupper Upper time limit
+ * @param int $entity_owner_guid Owner guid for the entity
+ *
+ * @return array
+ * @deprecated 1.8 Use elgg_get_annotations()
+ */
+function get_annotations($entity_guid = 0, $entity_type = "", $entity_subtype = "", $name = "",
+$value = "", $owner_guid = 0, $limit = 10, $offset = 0, $order_by = "asc", $timelower = 0,
+$timeupper = 0, $entity_owner_guid = 0) {
+
+ elgg_deprecated_notice('get_annotations() is deprecated by elgg_get_annotations()', 1.8);
+ $options = array();
+
+ if ($entity_guid) {
+ $options['guid'] = $entity_guid;
+ }
+
+ if ($entity_type) {
+ $options['type'] = $entity_type;
+ }
+
+ if ($entity_subtype) {
+ $options['subtype'] = $entity_subtype;
+ }
+
+ if ($name) {
+ $options['annotation_name'] = $name;
+ }
+
+ if ($value) {
+ $options['annotation_value'] = $value;
+ }
+
+ if ($owner_guid) {
+ $options['annotation_owner_guid'] = $owner_guid;
+ }
+
+ $options['limit'] = $limit;
+ $options['offset'] = $offset;
+
+ if ($order_by == 'desc') {
+ $options['order_by'] = 'n_table.time_created desc';
+ }
+
+ if ($timelower) {
+ $options['annotation_time_lower'] = $timelower;
+ }
+
+ if ($timeupper) {
+ $options['annotation_time_upper'] = $timeupper;
+ }
+
+ if ($entity_owner_guid) {
+ $options['owner_guid'] = $entity_owner_guid;
+ }
+
+ return elgg_get_annotations($options);
+}
+
+
+/**
+ * Returns a human-readable list of annotations on a particular entity.
+ *
+ * @param int $entity_guid The entity GUID
+ * @param string $name The name of the kind of annotation
+ * @param int $limit The number of annotations to display at once
+ * @param true|false $asc Display annotations in ascending order. (Default: true)
+ *
+ * @return string HTML (etc) version of the annotation list
+ * @deprecated 1.8 Use elgg_list_annotations()
+ */
+function list_annotations($entity_guid, $name = "", $limit = 25, $asc = true) {
+ elgg_deprecated_notice('list_annotations() is deprecated by elgg_list_annotations()', 1.8);
+
+ if ($asc) {
+ $asc = "asc";
+ } else {
+ $asc = "desc";
+ }
+
+ $options = array(
+ 'guid' => $entity_guid,
+ 'limit' => $limit,
+ 'order_by' => "n_table.time_created $asc"
+ );
+
+ return elgg_list_annotations($options);
+}
+
+/**
+ * Helper function to deprecate annotation calculation functions. Don't use.
+ *
+ * @param unknown_type $entity_guid
+ * @param unknown_type $entity_type
+ * @param unknown_type $entity_subtype
+ * @param unknown_type $name
+ * @param unknown_type $value
+ * @param unknown_type $value_type
+ * @param unknown_type $owner_guid
+ * @param unknown_type $timelower
+ * @param unknown_type $timeupper
+ * @param unknown_type $calculation
+ * @internal Don't use this at all.
+ * @deprecated 1.8 Use elgg_get_annotations()
+ */
+function elgg_deprecated_annotation_calculation($entity_guid = 0, $entity_type = "", $entity_subtype = "",
+$name = "", $value = "", $value_type = "", $owner_guid = 0, $timelower = 0,
+$timeupper = 0, $calculation = '') {
+
+ $options = array('annotation_calculation' => $calculation);
+
+ if ($entity_guid) {
+ $options['guid'] = $entity_guid;
+ }
+
+ if ($entity_type) {
+ $options['type'] = $entity_type;
+ }
+
+ if ($entity_subtype) {
+ $options['subtype'] = $entity_subtype;
+ }
+
+ if ($name) {
+ $options['annotation_name'] = $name;
+ }
+
+ if ($value) {
+ $options['annotation_value'] = $value;
+ }
+
+ if ($owner_guid) {
+ $options['annotation_owner_guid'] = $owner_guid;
+ }
+
+ if ($order_by == 'desc') {
+ $options['order_by'] = 'n_table.time_created desc';
+ }
+
+ if ($timelower) {
+ $options['annotation_time_lower'] = $timelower;
+ }
+
+ if ($timeupper) {
+ $options['annotation_time_upper'] = $timeupper;
+ }
+
+ return elgg_get_annotations($options);
+}
+
+/**
+ * Count the number of annotations based on search parameters
+ *
+ * @param int $entity_guid Guid of Entity
+ * @param string $entity_type Type of Entity
+ * @param string $entity_subtype Subtype of Entity
+ * @param string $name Name of annotation
+ * @param string $value Value of annotation
+ * @param string $value_type Type of value
+ * @param int $owner_guid GUID of owner of annotation
+ * @param int $timelower Lower time limit
+ * @param int $timeupper Upper time limit
+ *
+ * @deprecated 1.8 Use elgg_get_annotations() and pass 'count' => true
+ * @return int
+ */
+function count_annotations($entity_guid = 0, $entity_type = "", $entity_subtype = "",
+$name = "", $value = "", $value_type = "", $owner_guid = 0, $timelower = 0,
+$timeupper = 0) {
+ elgg_deprecated_notice('count_annotations() is deprecated by elgg_get_annotations() and passing "count" => true', 1.8);
+ return elgg_deprecated_annotation_calculation($entity_guid, $entity_type, $entity_subtype,
+ $name, $value, $value_type, $owner_guid, $timelower, $timeupper, 'count');
+}
+
+/**
+ * Return the sum of a given integer annotation.
+ *
+ * @param int $entity_guid Guid of Entity
+ * @param string $entity_type Type of Entity
+ * @param string $entity_subtype Subtype of Entity
+ * @param string $name Name of annotation
+ * @param string $value Value of annotation
+ * @param string $value_type Type of value
+ * @param int $owner_guid GUID of owner of annotation
+ *
+ * @deprecated 1.8 Use elgg_get_annotations() and pass 'annotation_calculation' => 'sum'
+ * @return int
+ */
+function get_annotations_sum($entity_guid, $entity_type = "", $entity_subtype = "", $name = "",
+$value = "", $value_type = "", $owner_guid = 0) {
+ elgg_deprecated_notice('get_annotations_sum() is deprecated by elgg_get_annotations() and passing "annotation_calculation" => "sum"', 1.8);
+
+ return elgg_deprecated_annotation_calculation($entity_guid, $entity_type, $entity_subtype,
+ $name, $value, $value_type, $owner_guid, $timelower, $timeupper, 'sum');
+}
+
+/**
+ * Return the max of a given integer annotation.
+ *
+ * @param int $entity_guid Guid of Entity
+ * @param string $entity_type Type of Entity
+ * @param string $entity_subtype Subtype of Entity
+ * @param string $name Name of annotation
+ * @param string $value Value of annotation
+ * @param string $value_type Type of value
+ * @param int $owner_guid GUID of owner of annotation
+ *
+ * @deprecated 1.8 Use elgg_get_annotations() and pass 'annotation_calculation' => 'max'
+ * @return int
+ */
+function get_annotations_max($entity_guid, $entity_type = "", $entity_subtype = "", $name = "",
+$value = "", $value_type = "", $owner_guid = 0) {
+ elgg_deprecated_notice('get_annotations_max() is deprecated by elgg_get_annotations() and passing "annotation_calculation" => "max"', 1.8);
+
+ return elgg_deprecated_annotation_calculation($entity_guid, $entity_type, $entity_subtype,
+ $name, $value, $value_type, $owner_guid, $timelower, $timeupper, 'max');
+}
+
+
+/**
+ * Return the minumum of a given integer annotation.
+ *
+ * @param int $entity_guid Guid of Entity
+ * @param string $entity_type Type of Entity
+ * @param string $entity_subtype Subtype of Entity
+ * @param string $name Name of annotation
+ * @param string $value Value of annotation
+ * @param string $value_type Type of value
+ * @param int $owner_guid GUID of owner of annotation
+ *
+ * @deprecated 1.8 Use elgg_get_annotations() and pass 'annotation_calculation' => 'min'
+ * @return int
+ */
+function get_annotations_min($entity_guid, $entity_type = "", $entity_subtype = "", $name = "",
+$value = "", $value_type = "", $owner_guid = 0) {
+ elgg_deprecated_notice('get_annotations_min() is deprecated by elgg_get_annotations() and passing "annotation_calculation" => "min"', 1.8);
+
+ return elgg_deprecated_annotation_calculation($entity_guid, $entity_type, $entity_subtype,
+ $name, $value, $value_type, $owner_guid, $timelower, $timeupper, 'min');
+}
+
+
+/**
+ * Return the average of a given integer annotation.
+ *
+ * @param int $entity_guid Guid of Entity
+ * @param string $entity_type Type of Entity
+ * @param string $entity_subtype Subtype of Entity
+ * @param string $name Name of annotation
+ * @param string $value Value of annotation
+ * @param string $value_type Type of value
+ * @param int $owner_guid GUID of owner of annotation
+ *
+ * @deprecated 1.8 Use elgg_get_annotations() and pass 'annotation_calculation' => 'min'
+ *
+ * @return int
+ */
+function get_annotations_avg($entity_guid, $entity_type = "", $entity_subtype = "", $name = "",
+$value = "", $value_type = "", $owner_guid = 0) {
+ elgg_deprecated_notice('get_annotations_avg() is deprecated by elgg_get_annotations() and passing "annotation_calculation" => "avg"', 1.8);
+
+ return elgg_deprecated_annotation_calculation($entity_guid, $entity_type, $entity_subtype,
+ $name, $value, $value_type, $owner_guid, $timelower, $timeupper, 'avg');
+}
+
+
+/**
+ * Perform a mathmatical calculation on integer annotations.
+ *
+ * @param string $sum What sort of calculation to perform
+ * @param int $entity_guid Guid of Entity
+ * @param string $entity_type Type of Entity
+ * @param string $entity_subtype Subtype of Entity
+ * @param string $name Name of annotation
+ * @param string $value Value of annotation
+ * @param string $value_type Type of value
+ * @param int $owner_guid GUID of owner of annotation
+ * @param int $timelower Lower time limit
+ * @param int $timeupper Upper time limit
+ *
+ * @return int
+ * @deprecated 1.8 Use elgg_get_annotations() and pass anntoation_calculation => <calculation>
+ */
+function get_annotations_calculate_x($sum = "avg", $entity_guid, $entity_type = "",
+$entity_subtype = "", $name = "", $value = "", $value_type = "", $owner_guid = 0,
+$timelower = 0, $timeupper = 0) {
+ elgg_deprecated_notice('get_annotations_calculate_x() is deprecated by elgg_get_annotations() and passing "annotation_calculation" => "calculation"', 1.8);
+
+ return elgg_deprecated_annotation_calculation($entity_guid, $entity_type, $entity_subtype,
+ $name, $value, $value_type, $owner_guid, $timelower, $timeupper, $sum);
+}
+
+
+/**
+ * Lists entities by the totals of a particular kind of annotation AND
+ * the value of a piece of metadata
+ *
+ * @param string $entity_type Type of entity.
+ * @param string $entity_subtype Subtype of entity.
+ * @param string $name Name of annotation.
+ * @param string $mdname Metadata name
+ * @param string $mdvalue Metadata value
+ * @param int $limit Maximum number of results to return.
+ * @param int $owner_guid Owner.
+ * @param int $group_guid Group container. Currently only supported if entity_type is object
+ * @param boolean $asc Whether to list in ascending or descending order (default: desc)
+ * @param boolean $fullview Whether to display the entities in full
+ * @param boolean $listtypetoggle Can the 'gallery' view can be displayed (default: no)
+ * @param boolean $pagination Display pagination
+ * @param string $orderdir 'desc' or 'asc'
+ *
+ * @deprecated 1.8 Use elgg_list_entities_from_annotation_calculation().
+ *
+ * @return string Formatted entity list
+ */
+function list_entities_from_annotation_count_by_metadata($entity_type = "", $entity_subtype = "",
+$name = "", $mdname = '', $mdvalue = '', $limit = 10, $owner_guid = 0, $group_guid = 0,
+$asc = false, $fullview = true, $listtypetoggle = false, $pagination = true, $orderdir = 'desc') {
+
+ $msg = 'list_entities_from_annotation_count_by_metadata() is deprecated by elgg_list_entities_from_annotation_calculation().';
+
+ elgg_deprecated_notice($msg, 1.8);
+
+ $options = array();
+
+ $options['calculation'] = 'sum';
+
+ if ($entity_type) {
+ $options['types'] = $entity_type;
+ }
+
+ if ($entity_subtype) {
+ $options['subtypes'] = $entity_subtype;
+ }
+
+ $options['annotation_names'] = $name;
+
+ if ($mdname) {
+ $options['metadata_name'] = $mdname;
+ }
+
+ if ($mdvalue) {
+ $options['metadata_value'] = $mdvalue;
+ }
+
+ if ($owner_guid) {
+ if (is_array($owner_guid)) {
+ $options['owner_guids'] = $owner_guid;
+ } else {
+ $options['owner_guid'] = $owner_guid;
+ }
+ }
+
+ $options['full_view'] = $fullview;
+
+ $options['list_type_toggle'] = $listtypetoggle;
+
+ $options['pagination'] = $pagination;
+
+ $options['limit'] = $limit;
+
+ $options['order_by'] = "annotation_calculation $orderdir";
+
+ return elgg_get_entities_from_annotation_calculation($options);
+}
+
+/**
+ * Set an alternative base location for a view (as opposed to the default of $CONFIG->viewpath)
+ *
+ * @param string $view The name of the view
+ * @param string $location The base location path
+ *
+ * @deprecated 1.8 Use elgg_set_view_location()
+ */
+function set_view_location($view, $location, $viewtype = '') {
+ elgg_deprecated_notice("set_view_location() was deprecated by elgg_set_view_location()", 1.8);
+ return elgg_set_view_location($view, $location, $viewtype);
+}
+
+/**
+ * Sets the URL handler for a particular entity type and subtype
+ *
+ * @param string $function_name The function to register
+ * @param string $entity_type The entity type
+ * @param string $entity_subtype The entity subtype
+ * @return true|false Depending on success
+ *
+ * @deprecated 1.8 Use elgg_register_entity_url_handler()
+ */
+function register_entity_url_handler($function_name, $entity_type = "all", $entity_subtype = "all") {
+ elgg_deprecated_notice("register_entity_url_handler() was deprecated by elgg_register_entity_url_handler()", 1.8);
+ return elgg_register_entity_url_handler($entity_type, $entity_subtype, $function_name);
+}
+
+
+/**
+ * Get the metadata where the entities they are referring to match a given criteria.
+ *
+ * @param mixed $meta_name Metadata name
+ * @param mixed $meta_value Metadata value
+ * @param string $entity_type The type of entity to look for, eg 'site' or 'object'
+ * @param string $entity_subtype The subtype of the entity.
+ * @param int $limit Limit
+ * @param int $offset Offset
+ * @param string $order_by Optional ordering.
+ * @param int $site_guid Site GUID. 0 for current, -1 for any
+ *
+ * @return mixed
+ * @deprecated 1.8 Use elgg_get_metadata()
+ */
+function find_metadata($meta_name = "", $meta_value = "", $entity_type = "", $entity_subtype = "",
+ $limit = 10, $offset = 0, $order_by = "", $site_guid = 0) {
+
+ elgg_deprecated_notice('get_metadata() is deprecated by elgg_get_metadata()', 1.8);
+
+ $options = array();
+
+ if ($meta_name) {
+ $options['annotation_name'] = $meta_name;
+ }
+
+ if ($meta_value) {
+ $options['annotation_value'] = $meta_value;
+ }
+
+ if ($entity_type) {
+ $options['type'] = $entity_type;
+ }
+
+ if ($entity_subtype) {
+ $options['subtype'] = $entity_subtype;
+ }
+
+ $options['limit'] = $limit;
+ $options['offset'] = $offset;
+
+ if ($order_by == 'desc') {
+ $options['order_by'] = 'n_table.time_created desc';
+ }
+
+ if ($site_guid) {
+ $options['site_guid'] = $site_guid;
+ }
+
+ return elgg_get_metadata($options);
+}
+
+/**
+ * Get metadata objects by name.
+ *
+ * @param int $entity_guid Entity GUID
+ * @param string $meta_name Metadata name
+ *
+ * @return mixed ElggMetadata object, an array of ElggMetadata or false.
+ * @deprecated 1.8 Use elgg_get_metadata()
+ */
+function get_metadata_byname($entity_guid, $meta_name) {
+ elgg_deprecated_notice('get_metadata_byname() is deprecated by elgg_get_metadata()', 1.8);
+
+ if (!$entity_guid || !$meta_name) {
+ return false;
+ }
+
+ $options = array(
+ 'guid' => $entity_guid,
+ 'metadata_name' => $meta_name,
+ 'limit' => 0
+ );
+
+ $md = elgg_get_metadata($options);
+
+ if ($md && count($md) == 1) {
+ return $md[0];
+ }
+
+ return $md;
+}
+
+/**
+ * Return all the metadata for a given GUID.
+ *
+ * @param int $entity_guid Entity GUID
+ *
+ * @return mixed
+ * @deprecated 1.8 Use elgg_get_metadata()
+ */
+function get_metadata_for_entity($entity_guid) {
+ elgg_deprecated_notice('get_metadata_for_entity() is deprecated by elgg_get_metadata()', 1.8);
+
+ if (!$entity_guid) {
+ return false;
+ }
+
+ $options = array(
+ 'guid' => $entity_guid,
+ 'limit' => 0
+ );
+
+ return elgg_get_metadata($options);
+}
+
+/**
+ * Get a specific metadata object.
+ *
+ * @param int $id The id of the metadata being retrieved.
+ *
+ * @return mixed False on failure or ElggMetadata
+ * @deprecated 1.8 Use elgg_get_metadata_from_id()
+ */
+function get_metadata($id) {
+ elgg_deprecated_notice('get_metadata() is deprecated by elgg_get_metadata_from_id()', 1.8);
+ return elgg_get_metadata_from_id($id);
+}
+
+/**
+ * Clear all the metadata for a given entity, assuming you have access to that entity.
+ *
+ * @param int $guid Entity GUID
+ *
+ * @return bool
+ * @deprecated 1.8 Use elgg_delete_metadata()
+ */
+function clear_metadata($guid) {
+ elgg_deprecated_notice('clear_metadata() is deprecated by elgg_delete_metadata()', 1.8);
+ if (!$guid) {
+ return false;
+ }
+ return elgg_delete_metadata(array('guid' => $guid, 'limit' => 0));
+}
+
+/**
+ * Clear all metadata belonging to a given owner_guid
+ *
+ * @param int $owner_guid The owner
+ *
+ * @return bool
+ * @deprecated 1.8 Use elgg_delete_metadata()
+ */
+function clear_metadata_by_owner($owner_guid) {
+ elgg_deprecated_notice('clear_metadata() is deprecated by elgg_delete_metadata()', 1.8);
+ if (!$owner_guid) {
+ return false;
+ }
+ return elgg_delete_metadata(array('metadata_owner_guid' => $owner_guid, 'limit' => 0));
+}
+
+/**
+ * Delete a piece of metadata, where the current user has access.
+ *
+ * @param int $id The id of metadata to delete.
+ *
+ * @return bool
+ * @deprecated 1.8 Use elgg_delete_metadata()
+ */
+function delete_metadata($id) {
+ elgg_deprecated_notice('delete_metadata() is deprecated by elgg_delete_metadata()', 1.8);
+ if (!$id) {
+ return false;
+ }
+ return elgg_delete_metadata(array('metadata_id' => $id));
+}
+
+/**
+ * Removes metadata on an entity with a particular name, optionally with a given value.
+ *
+ * @param int $guid The entity GUID
+ * @param string $name The name of the metadata
+ * @param string $value The value of the metadata (useful to remove a single item of a set)
+ *
+ * @return bool Depending on success
+ * @deprecated 1.8 Use elgg_delete_metadata()
+ */
+function remove_metadata($guid, $name, $value = "") {
+ elgg_deprecated_notice('delete_metadata() is deprecated by elgg_delete_metadata()', 1.8);
+
+ // prevent them from deleting everything
+ if (!$guid) {
+ return false;
+ }
+
+ $options = array(
+ 'guid' => $guid,
+ 'metadata_name' => $name,
+ 'limit' => 0
+ );
+
+ if ($value) {
+ $options['metadata_value'] = $value;
+ }
+
+ return elgg_delete_metadata($options);
+}
+
+/**
+ * Get a specific annotation.
+ *
+ * @param int $annotation_id Annotation ID
+ *
+ * @return ElggAnnotation
+ * @deprecated 1.8 Use elgg_get_annotation_from_id()
+ */
+function get_annotation($annotation_id) {
+ elgg_deprecated_notice('get_annotation() is deprecated by elgg_get_annotation_from_id()', 1.8);
+ return elgg_get_annotation_from_id($annotation_id);
+}
+
+/**
+ * Delete a given annotation.
+ *
+ * @param int $id The annotation id
+ *
+ * @return bool
+ * @deprecated 1.8 Use elgg_delete_annotations()
+ */
+function delete_annotation($id) {
+ elgg_deprecated_notice('delete_annotation() is deprecated by elgg_delete_annotations()', 1.8);
+ if (!$id) {
+ return false;
+ }
+ return elgg_delete_annotations(array('annotation_id' => $annotation_id));
+}
+
+/**
+ * Clear all the annotations for a given entity, assuming you have access to that metadata.
+ *
+ * @param int $guid The entity guid
+ * @param string $name The name of the annotation to delete.
+ *
+ * @return int Number of annotations deleted or false if an error
+ * @deprecated 1.8 Use elgg_delete_annotations()
+ */
+function clear_annotations($guid, $name = "") {
+ elgg_deprecated_notice('clear_annotations() is deprecated by elgg_delete_annotations()', 1.8);
+
+ if (!$guid) {
+ return false;
+ }
+
+ $options = array(
+ 'guid' => $guid,
+ 'limit' => 0
+ );
+
+ if ($name) {
+ $options['annotation_name'] = $name;
+ }
+
+ return elgg_delete_annotations($options);
+}
+
+/**
+ * Clear all annotations belonging to a given owner_guid
+ *
+ * @param int $owner_guid The owner
+ *
+ * @return int Number of annotations deleted
+ * @deprecated 1.8 Use elgg_delete_annotations()
+ */
+function clear_annotations_by_owner($owner_guid) {
+ elgg_deprecated_notice('clear_annotations_by_owner() is deprecated by elgg_delete_annotations()', 1.8);
+
+ if (!$owner_guid) {
+ return false;
+ }
+
+ $options = array(
+ 'annotation_owner_guid' => $guid,
+ 'limit' => 0
+ );
+
+ return elgg_delete_annotations($options);
+}
+
+/**
+ * Registers a page handler for a particular identifier
+ *
+ * For example, you can register a function called 'blog_page_handler' for handler type 'blog'
+ * Now for all URLs of type http://yoururl/pg/blog/*, the blog_page_handler() function will be called.
+ * The part of the URL marked with * above will be exploded on '/' characters and passed as an
+ * array to that function.
+ * For example, the URL http://yoururl/blog/username/friends/ would result in the call:
+ * blog_page_handler(array('username','friends'), blog);
+ *
+ * Page handler functions should return true or the default page handler will be called.
+ *
+ * A request to register a page handler with the same identifier as previously registered
+ * handler will replace the previous one.
+ *
+ * The context is set to the page handler identifier before the registered
+ * page handler function is called. For the above example, the context is set to 'blog'.
+ *
+ * @param string $handler The page type to handle
+ * @param string $function Your function name
+ * @return true|false Depending on success
+ *
+ * @deprecated 1.8 Use {@link elgg_register_page_handler()}
+ */
+function register_page_handler($handler, $function){
+ elgg_deprecated_notice("register_page_handler() was deprecated by elgg_register_page_handler()", 1.8);
+ return elgg_register_page_handler($handler, $function);
+}
+
+/**
+ * Unregister a page handler for an identifier
+ *
+ * Note: to replace a page handler, call register_page_handler()
+ *
+ * @param string $handler The page type identifier
+ * @since 1.7.2
+ *
+ * @deprecated 1.8 Use {@link elgg_unregister_page_handler()}
+ */
+function unregister_page_handler($handler) {
+ elgg_deprecated_notice("unregister_page_handler() was deprecated by elgg_unregister_page_handler()", 1.8);
+ return elgg_unregister_page_handler($handler);
+}
+
+/**
+ * Register an annotation url handler.
+ *
+ * @param string $function_name The function.
+ * @param string $extender_name The name, default 'all'.
+ *
+ * @deprecated 1.8 Use {@link elgg_register_annotation_url_handler()}
+ */
+function register_annotation_url_handler($function, $extender_name) {
+ elgg_deprecated_notice("register_annotation_url_handler() was deprecated by elgg_register_annotation_url_handler()", 1.8);
+ return elgg_register_annotation_url_handler($extender_name, $function);
+}
+
+/**
+ * Sets the URL handler for a particular extender type and name.
+ * It is recommended that you do not call this directly, instead use one of the wrapper functions in the
+ * subtype files.
+ *
+ * @param string $function_name The function to register
+ * @param string $extender_type Extender type
+ * @param string $extender_name The name of the extender
+ * @return true|false Depending on success
+ *
+ * @deprecated 1.8 Use {@link elgg_register_extender_url_handler()}
+ */
+function register_extender_url_handler($function, $type = "all", $name = "all") {
+ elgg_deprecated_notice("register_extender_url_handler() was deprecated by elgg_register_extender_url_handler()", 1.8);
+ return elgg_register_extender_url_handler($type, $name, $function);
+}
+
+/**
+ * Registers and entity type and subtype to return in search and other places.
+ * A description in the elgg_echo languages file of the form item:type:subtype
+ * is also expected.
+ *
+ * @param string $type The type of entity (object, site, user, group)
+ * @param string $subtype The subtype to register (may be blank)
+ * @return true|false Depending on success
+ *
+ * @deprecated 1.8 Use {@link elgg_register_entity_type()}
+ */
+function register_entity_type($type, $subtype = null) {
+ elgg_deprecated_notice("register_entity_type() was deprecated by elgg_register_entity_type()", 1.8);
+ return elgg_register_entity_type($type, $subtype);
+}
+
+/**
+ * Register a metadata url handler.
+ *
+ * @param string $function_name The function.
+ * @param string $extender_name The name, default 'all'.
+ *
+ * @deprecated 1.8 Use {@link elgg_register_metadata_url_handler()}
+ */
+function register_metadata_url_handler($function, $extender_name = "all") {
+ return elgg_register_metadata_url_handler($extender_name, $function);
+}
+
+/**
+ * Sets the URL handler for a particular relationship type
+ *
+ * @param string $function_name The function to register
+ * @param string $relationship_type The relationship type.
+ * @return true|false Depending on success
+ *
+ * @deprecated 1.8 Use {@link elgg_register_relationship_url_handler()}
+ */
+function register_relationship_url_handler($function_name, $relationship_type = "all") {
+ elgg_deprecated_notice("register_relationship_url_handler() was deprecated by elgg_register_relationship_url_handler()", 1.8);
+ return elgg_register_relationship_url_handler($relationship_type, $function_name);
+}
+
+/**
+ * Registers a view to be simply cached
+ *
+ * Views cached in this manner must take no parameters and be login agnostic -
+ * that is to say, they look the same no matter who is logged in (or logged out).
+ *
+ * CSS and the basic jS views are automatically cached like this.
+ *
+ * @param string $viewname View name
+ *
+ * @deprecated 1.8 Use {@link elgg_register_simplecache_view()}
+ */
+function elgg_view_register_simplecache($viewname) {
+ elgg_deprecated_notice("elgg_view_register_simplecache() was deprecated by elgg_register_simplecache_view()", 1.8);
+ return elgg_register_simplecache_view($viewname);
+}
+
+/**
+ * Regenerates the simple cache.
+ *
+ * @param string $viewtype Optional viewtype to regenerate
+ * @see elgg_view_register_simplecache()
+ *
+ * @deprecated 1.8 Use {@link elgg_regenerate_simplecache()}
+ */
+function elgg_view_regenerate_simplecache($viewtype = NULL) {
+ elgg_deprecated_notice("elgg_view_regenerate_simplecache() was deprecated by elgg_regenerate_simplecache()", 1.8);
+ return elgg_regenerate_simplecache($viewtype);
+}
+
+/**
+ * Enables the simple cache.
+ *
+ * @see elgg_view_register_simplecache()
+ *
+ * @deprecated 1.8 Use {@link elgg_enable_simplecache()}
+ */
+function elgg_view_enable_simplecache() {
+ elgg_deprecated_notice("elgg_view_enable_simplecache() was deprecated by elgg_enable_simplecache()", 1.8);
+ return elgg_enable_simplecache();
+}
+
+/**
+ * Disables the simple cache.
+ *
+ * @see elgg_view_register_simplecache()
+ *
+ * @deprecated 1.8 Use {@link elgg_disable_simplecache()}
+ */
+function elgg_view_disable_simplecache() {
+ elgg_deprecated_notice("elgg_view_disable_simplecache() was deprecated by elgg_disable_simplecache()", 1.8);
+ return elgg_disable_simplecache();
+}
+
+// these were internal functions that perhaps can be removed rather than deprecated
+/**
+ * @deprecated 1.8
+ */
+function is_db_installed() {
+ elgg_deprecated_notice('is_db_installed() has been deprecated', 1.8);
+ return true;
+}
+
+/**
+ * @deprecated 1.8
+ */
+function is_installed() {
+ elgg_deprecated_notice('is_installed() has been deprecated', 1.8);
+ return true;
+}
+
+/**
+ * Attempt to authenticate.
+ * This function will process all registered PAM handlers or stop when the first
+ * handler fails. A handler fails by either returning false or throwing an
+ * exception. The advantage of throwing an exception is that it returns a message
+ * through the global $_PAM_HANDLERS_MSG which can be used in communication with
+ * a user. The order that handlers are processed is determined by the order that
+ * they were registered.
+ *
+ * If $credentials are provided the PAM handler should authenticate using the
+ * provided credentials, if not then credentials should be prompted for or
+ * otherwise retrieved (eg from the HTTP header or $_SESSION).
+ *
+ * @param mixed $credentials Mixed PAM handler specific credentials (e.g. username, password)
+ * @param string $policy - the policy type, default is "user"
+ * @return bool true if authenticated, false if not.
+ *
+ * @deprecated 1.8 See {@link ElggPAM}
+ */
+function pam_authenticate($credentials = NULL, $policy = "user") {
+ elgg_deprecated_notice('pam_authenticate has been deprecated for ElggPAM', 1.8);
+ global $_PAM_HANDLERS, $_PAM_HANDLERS_MSG;
+
+ $_PAM_HANDLERS_MSG = array();
+
+ $authenticated = false;
+
+ foreach ($_PAM_HANDLERS[$policy] as $k => $v) {
+ $handler = $v->handler;
+ $importance = $v->importance;
+
+ try {
+ // Execute the handler
+ if ($handler($credentials)) {
+ // Explicitly returned true
+ $_PAM_HANDLERS_MSG[$k] = "Authenticated!";
+
+ $authenticated = true;
+ } else {
+ $_PAM_HANDLERS_MSG[$k] = "Not Authenticated.";
+
+ // If this is required then abort.
+ if ($importance == 'required') {
+ return false;
+ }
+ }
+ } catch (Exception $e) {
+ $_PAM_HANDLERS_MSG[$k] = "$e";
+
+ // If this is required then abort.
+ if ($importance == 'required') {
+ return false;
+ }
+ }
+ }
+
+ return $authenticated;
+}
+
+
+/**
+ * When given a widget entity and a new requested location, saves the new location
+ * and also provides a sensible ordering for all widgets in that column
+ *
+ * @param ElggObject $widget The widget entity
+ * @param int $order The order within the column
+ * @param int $column The column (1, 2 or 3)
+ *
+ * @return bool Depending on success
+ * @deprecated 1.8 use ElggWidget::move()
+ */
+function save_widget_location(ElggObject $widget, $order, $column) {
+ elgg_deprecated_notice('save_widget_location() is deprecated', 1.8);
+ if ($widget instanceof ElggObject) {
+ if ($widget->subtype == "widget") {
+ // If you can't move the widget, don't save a new location
+ if (!$widget->draggable) {
+ return false;
+ }
+
+ // Sanitise the column value
+ if ($column != 1 || $column != 2 || $column != 3) {
+ $column = 1;
+ }
+
+ $widget->column = (int) $column;
+
+ $ordertmp = array();
+ $params = array(
+ 'context' => $widget->context,
+ 'column' => $column,
+ );
+
+ if ($entities = get_entities_from_metadata_multi($params, 'object', 'widget')) {
+ foreach ($entities as $entity) {
+ $entityorder = $entity->order;
+ if ($entityorder < $order) {
+ $ordertmp[$entityorder] = $entity;
+ }
+ if ($entityorder >= $order) {
+ $ordertmp[$entityorder + 10000] = $entity;
+ }
+ }
+ }
+
+ $ordertmp[$order] = $widget;
+ ksort($ordertmp);
+
+ $orderticker = 10;
+ foreach ($ordertmp as $orderval => $entity) {
+ $entity->order = $orderticker;
+ $orderticker += 10;
+ }
+
+ return true;
+ } else {
+ register_error($widget->subtype);
+ }
+
+ }
+
+ return false;
+}
+
+/**
+ * Get widgets for a particular context and column, in order of display
+ *
+ * @param int $user_guid The owner user GUID
+ * @param string $context The context (profile, dashboard etc)
+ * @param int $column The column (1 or 2)
+ *
+ * @return array|false An array of widget ElggObjects, or false
+ * @deprecated 1.8 Use elgg_get_widgets()
+ */
+function get_widgets($user_guid, $context, $column) {
+ elgg_deprecated_notice('get_widgets is depecated for elgg_get_widgets', 1.8);
+ $params = array(
+ 'column' => $column,
+ 'context' => $context
+ );
+ $widgets = get_entities_from_private_setting_multi($params, "object",
+ "widget", $user_guid, "", 10000);
+
+ if ($widgets) {
+ $widgetorder = array();
+ foreach ($widgets as $widget) {
+ $order = $widget->order;
+ while (isset($widgetorder[$order])) {
+ $order++;
+ }
+ $widgetorder[$order] = $widget;
+ }
+
+ ksort($widgetorder);
+
+ return $widgetorder;
+ }
+
+ return false;
+}
+
+/**
+ * Add a new widget instance
+ *
+ * @param int $entity_guid GUID of entity that owns this widget
+ * @param string $handler The handler for this widget
+ * @param string $context The page context for this widget
+ * @param int $order The order to display this widget in
+ * @param int $column The column to display this widget in (1, 2 or 3)
+ * @param int $access_id If not specified, it is set to the default access level
+ *
+ * @return int|false Widget GUID or false on failure
+ * @deprecated 1.8 use elgg_create_widget()
+ */
+function add_widget($entity_guid, $handler, $context, $order = 0, $column = 1, $access_id = null) {
+ elgg_deprecated_notice('add_widget has been deprecated for elgg_create_widget', 1.8);
+ if (empty($entity_guid) || empty($context) || empty($handler) || !widget_type_exists($handler)) {
+ return false;
+ }
+
+ if ($entity = get_entity($entity_guid)) {
+ $widget = new ElggWidget;
+ $widget->owner_guid = $entity_guid;
+ $widget->container_guid = $entity_guid;
+ if (isset($access_id)) {
+ $widget->access_id = $access_id;
+ } else {
+ $widget->access_id = get_default_access();
+ }
+
+ $guid = $widget->save();
+
+ // private settings cannot be set until ElggWidget saved
+ $widget->handler = $handler;
+ $widget->context = $context;
+ $widget->column = $column;
+ $widget->order = $order;
+
+ return $guid;
+ }
+
+ return false;
+}
+
+/**
+ * Define a new widget type
+ *
+ * @param string $handler The identifier for the widget handler
+ * @param string $name The name of the widget type
+ * @param string $description A description for the widget type
+ * @param string $context A comma-separated list of contexts where this
+ * widget is allowed (default: 'all')
+ * @param bool $multiple Whether or not multiple instances of this widget
+ * are allowed on a single dashboard (default: false)
+ * @param string $positions A comma-separated list of positions on the page
+ * (side or main) where this widget is allowed (default: "side,main")
+ *
+ * @return bool Depending on success
+ * @deprecated 1.8 Use elgg_register_widget_type
+ */
+function add_widget_type($handler, $name, $description, $context = "all",
+$multiple = false, $positions = "side,main") {
+ elgg_deprecated_notice("add_widget_type deprecated for elgg_register_widget_type", 1.8);
+
+ return elgg_register_widget_type($handler, $name, $description, $context, $multiple);
+}
+
+/**
+ * Remove a widget type
+ *
+ * @param string $handler The identifier for the widget handler
+ *
+ * @return void
+ * @since 1.7.1
+ * @deprecated 1.8 Use elgg_unregister_widget_type
+ */
+function remove_widget_type($handler) {
+ elgg_deprecated_notice("remove_widget_type deprecated for elgg_unregister_widget_type", 1.8);
+ return elgg_unregister_widget_type($handler);
+}
+
+/**
+ * Determines whether or not widgets with the specified handler have been defined
+ *
+ * @param string $handler The widget handler identifying string
+ *
+ * @return bool Whether or not those widgets exist
+ * @deprecated 1.8 Use elgg_is_widget_type
+ */
+function widget_type_exists($handler) {
+ elgg_deprecated_notice("widget_type_exists deprecated for elgg_is_widget_type", 1.8);
+ return elgg_is_widget_type($handler);
+}
+
+/**
+ * Returns an array of stdClass objects representing the defined widget types
+ *
+ * @return array A list of types defined (if any)
+ * @deprecated 1.8 Use elgg_get_widget_types
+ */
+function get_widget_types() {
+ elgg_deprecated_notice("get_widget_types deprecrated for elgg_get_widget_types", 1.8);
+ return elgg_get_widget_types();
+}
+
+/**
+ * Saves a widget's settings (by passing an array of
+ * (name => value) pairs to save_{$handler}_widget)
+ *
+ * @param int $widget_guid The GUID of the widget we're saving to
+ * @param array $params An array of name => value parameters
+ *
+ * @return bool
+ * @deprecated 1.8 Use elgg_save_widget_settings
+ */
+function save_widget_info($widget_guid, $params) {
+ elgg_deprecated_notice("save_widget_info() is deprecated for elgg_save_widget_settings", 1.8);
+ if ($widget = get_entity($widget_guid)) {
+
+ $subtype = $widget->getSubtype();
+
+ if ($subtype != "widget") {
+ return false;
+ }
+ $handler = $widget->handler;
+ if (empty($handler) || !widget_type_exists($handler)) {
+ return false;
+ }
+
+ if (!$widget->canEdit()) {
+ return false;
+ }
+
+ // Save the params to the widget
+ if (is_array($params) && sizeof($params) > 0) {
+ foreach ($params as $name => $value) {
+
+ if (!empty($name) && !in_array($name, array(
+ 'guid', 'owner_guid', 'site_guid'
+ ))) {
+ if (is_array($value)) {
+ // @todo Handle arrays securely
+ $widget->setMetaData($name, $value, "", true);
+ } else {
+ $widget->$name = $value;
+ }
+ }
+ }
+ $widget->save();
+ }
+
+ $function = "save_{$handler}_widget";
+ if (is_callable($function)) {
+ return $function($params);
+ }
+
+ return true;
+ }
+
+ return false;
+}
+
+/**
+ * Reorders the widgets from a widget panel
+ *
+ * @param string $panelstring1 String of guids of ElggWidget objects separated by ::
+ * @param string $panelstring2 String of guids of ElggWidget objects separated by ::
+ * @param string $panelstring3 String of guids of ElggWidget objects separated by ::
+ * @param string $context Profile or dashboard
+ * @param int $owner Owner guid
+ *
+ * @return void
+ * @deprecated 1.8 Don't use.
+ */
+function reorder_widgets_from_panel($panelstring1, $panelstring2, $panelstring3, $context, $owner) {
+ elgg_deprecated_notice("reorder_widgets_from_panel() is deprecated", 1.8);
+ $return = true;
+
+ $mainwidgets = explode('::', $panelstring1);
+ $sidewidgets = explode('::', $panelstring2);
+ $rightwidgets = explode('::', $panelstring3);
+
+ $handlers = array();
+ $guids = array();
+
+ if (is_array($mainwidgets) && sizeof($mainwidgets) > 0) {
+ foreach ($mainwidgets as $widget) {
+
+ $guid = (int) $widget;
+
+ if ("{$guid}" == "{$widget}") {
+ $guids[1][] = $widget;
+ } else {
+ $handlers[1][] = $widget;
+ }
+ }
+ }
+ if (is_array($sidewidgets) && sizeof($sidewidgets) > 0) {
+ foreach ($sidewidgets as $widget) {
+
+ $guid = (int) $widget;
+
+ if ("{$guid}" == "{$widget}") {
+ $guids[2][] = $widget;
+ } else {
+ $handlers[2][] = $widget;
+ }
+
+ }
+ }
+ if (is_array($rightwidgets) && sizeof($rightwidgets) > 0) {
+ foreach ($rightwidgets as $widget) {
+
+ $guid = (int) $widget;
+
+ if ("{$guid}" == "{$widget}") {
+ $guids[3][] = $widget;
+ } else {
+ $handlers[3][] = $widget;
+ }
+
+ }
+ }
+
+ // Reorder existing widgets or delete ones that have vanished
+ foreach (array(1, 2, 3) as $column) {
+ if ($dbwidgets = get_widgets($owner, $context, $column)) {
+
+ foreach ($dbwidgets as $dbwidget) {
+ if (in_array($dbwidget->getGUID(), $guids[1])
+ || in_array($dbwidget->getGUID(), $guids[2]) || in_array($dbwidget->getGUID(), $guids[3])) {
+
+ if (in_array($dbwidget->getGUID(), $guids[1])) {
+ $pos = array_search($dbwidget->getGUID(), $guids[1]);
+ $col = 1;
+ } else if (in_array($dbwidget->getGUID(), $guids[2])) {
+ $pos = array_search($dbwidget->getGUID(), $guids[2]);
+ $col = 2;
+ } else {
+ $pos = array_search($dbwidget->getGUID(), $guids[3]);
+ $col = 3;
+ }
+ $pos = ($pos + 1) * 10;
+ $dbwidget->column = $col;
+ $dbwidget->order = $pos;
+ } else {
+ $dbguid = $dbwidget->getGUID();
+ if (!$dbwidget->delete()) {
+ $return = false;
+ } else {
+ // Remove state cookie
+ setcookie('widget' + $dbguid, null);
+ }
+ }
+ }
+
+ }
+ // Add new ones
+ if (sizeof($guids[$column]) > 0) {
+ foreach ($guids[$column] as $key => $guid) {
+ if ($guid == 0) {
+ $pos = ($key + 1) * 10;
+ $handler = $handlers[$column][$key];
+ if (!add_widget($owner, $handler, $context, $pos, $column)) {
+ $return = false;
+ }
+ }
+ }
+ }
+ }
+
+ return $return;
+}
+
+/**
+ * Register a particular context for use with widgets.
+ *
+ * @param string $context The context we wish to enable context for
+ *
+ * @return void
+ * @deprecated 1.8 Don't use.
+ */
+function use_widgets($context) {
+ elgg_deprecated_notice("use_widgets is deprecated", 1.8);
+ global $CONFIG;
+
+ if (!isset($CONFIG->widgets)) {
+ $CONFIG->widgets = new stdClass;
+ }
+
+ if (!isset($CONFIG->widgets->contexts)) {
+ $CONFIG->widgets->contexts = array();
+ }
+
+ if (!empty($context)) {
+ $CONFIG->widgets->contexts[] = $context;
+ }
+}
+
+/**
+ * Determines whether or not the current context is using widgets
+ *
+ * @return bool Depending on widget status
+ * @deprecated 1.8 Don't use.
+ */
+function using_widgets() {
+ elgg_deprecated_notice("using_widgets is deprecated", 1.8);
+ global $CONFIG;
+
+ $context = elgg_get_context();
+ if (isset($CONFIG->widgets->contexts) && is_array($CONFIG->widgets->contexts)) {
+ if (in_array($context, $CONFIG->widgets->contexts)) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+/**
+ * Displays a particular widget
+ *
+ * @param ElggObject $widget The widget to display
+ * @return string The HTML for the widget, including JavaScript wrapper
+ *
+ * @deprecated 1.8 Use elgg_view_entity()
+ */
+function display_widget(ElggObject $widget) {
+ elgg_deprecated_notice("display_widget() was been deprecated. Use elgg_view_entity().", 1.8);
+ return elgg_view_entity($widget);
+}
+
+/**
+ * Count the number of comments attached to an entity
+ *
+ * @param ElggEntity $entity
+ * @return int Number of comments
+ * @deprecated 1.8 Use ElggEntity->countComments()
+ */
+function elgg_count_comments($entity) {
+ elgg_deprecated_notice('elgg_count_comments() is deprecated by ElggEntity->countComments()', 1.8);
+
+ if ($entity instanceof ElggEntity) {
+ return $entity->countComments();
+ }
+
+ return 0;
+}
+
+/**
+ * Removes all items relating to a particular acting entity from the river
+ *
+ * @param int $subject_guid The GUID of the entity
+ *
+ * @return bool Depending on success
+ * @deprecated 1.8 Use elgg_delete_river()
+ */
+function remove_from_river_by_subject($subject_guid) {
+ elgg_deprecated_notice("remove_from_river_by_subject() deprecated by elgg_delete_river()", 1.8);
+
+ return elgg_delete_river(array('subject_guid' => $subject_guid));
+}
+
+/**
+ * Removes all items relating to a particular entity being acted upon from the river
+ *
+ * @param int $object_guid The GUID of the entity
+ *
+ * @return bool Depending on success
+ * @deprecated 1.8 Use elgg_delete_river()
+ */
+function remove_from_river_by_object($object_guid) {
+ elgg_deprecated_notice("remove_from_river_by_object() deprecated by elgg_delete_river()", 1.8);
+
+ return elgg_delete_river(array('object_guid' => $object_guid));
+}
+
+/**
+ * Removes all items relating to a particular annotation being acted upon from the river
+ *
+ * @param int $annotation_id The ID of the annotation
+ *
+ * @return bool Depending on success
+ * @since 1.7.0
+ * @deprecated 1.8 Use elgg_delete_river()
+ */
+function remove_from_river_by_annotation($annotation_id) {
+ elgg_deprecated_notice("remove_from_river_by_annotation() deprecated by elgg_delete_river()", 1.8);
+
+ return elgg_delete_river(array('annotation_id' => $annotation_id));
+}
+
+/**
+ * Removes a single river entry
+ *
+ * @param int $id The ID of the river entry
+ *
+ * @return bool Depending on success
+ * @since 1.7.2
+ * @deprecated 1.8 Use elgg_delete_river()
+ */
+function remove_from_river_by_id($id) {
+ elgg_deprecated_notice("remove_from_river_by_id() deprecated by elgg_delete_river()", 1.8);
+
+ return elgg_delete_river(array('id' => $id));
+}
+
+/**
+ * A default page handler
+ * Tries to locate a suitable file to include. Only works for core pages, not plugins.
+ *
+ * @param array $page The page URL elements
+ * @param string $handler The base handler
+ *
+ * @return true|false Depending on success
+ * @deprecated 1.8
+ */
+function default_page_handler($page, $handler) {
+ global $CONFIG;
+
+ elgg_deprecated_notice("default_page_handler is deprecated", "1.8");
+
+ $page = implode('/', $page);
+
+ // protect against including arbitary files
+ $page = str_replace("..", "", $page);
+
+ $callpath = $CONFIG->path . $handler . "/" . $page;
+ if (is_dir($callpath)) {
+ $callpath = sanitise_filepath($callpath);
+ $callpath .= "index.php";
+ if (file_exists($callpath)) {
+ if (include($callpath)) {
+ return TRUE;
+ }
+ }
+ } else if (file_exists($callpath)) {
+ include($callpath);
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+/**
+ * Invalidate this class's entry in the cache.
+ *
+ * @param int $guid The entity guid
+ *
+ * @return void
+ * @access private
+ * @deprecated 1.8
+ */
+function invalidate_cache_for_entity($guid) {
+ elgg_deprecated_notice('invalidate_cache_for_entity() is a private function and should not be used.', 1.8);
+ _elgg_invalidate_cache_for_entity($guid);
+}
+
+/**
+ * Cache an entity.
+ *
+ * Stores an entity in $ENTITY_CACHE;
+ *
+ * @param ElggEntity $entity Entity to cache
+ *
+ * @return void
+ * @access private
+ * @deprecated 1.8
+ */
+function cache_entity(ElggEntity $entity) {
+ elgg_deprecated_notice('cache_entity() is a private function and should not be used.', 1.8);
+ _elgg_cache_entity($entity);
+}
+
+/**
+ * Retrieve a entity from the cache.
+ *
+ * @param int $guid The guid
+ *
+ * @return ElggEntity|bool false if entity not cached, or not fully loaded
+ * @access private
+ * @deprecated 1.8
+ */
+function retrieve_cached_entity($guid) {
+ elgg_deprecated_notice('retrieve_cached_entity() is a private function and should not be used.', 1.8);
+ return _elgg_retrieve_cached_entity($guid);
+}
diff --git a/engine/lib/deprecated-1.9.php b/engine/lib/deprecated-1.9.php
new file mode 100644
index 000000000..31d03428f
--- /dev/null
+++ b/engine/lib/deprecated-1.9.php
@@ -0,0 +1,582 @@
+<?php
+/**
+ * Return a timestamp for the start of a given day (defaults today).
+ *
+ * @param int $day Day
+ * @param int $month Month
+ * @param int $year Year
+ *
+ * @return int
+ * @access private
+ * @deprecated 1.9
+ */
+function get_day_start($day = null, $month = null, $year = null) {
+ elgg_deprecated_notice('get_day_start() has been deprecated', 1.9);
+ return mktime(0, 0, 0, $month, $day, $year);
+}
+
+/**
+ * Return a timestamp for the end of a given day (defaults today).
+ *
+ * @param int $day Day
+ * @param int $month Month
+ * @param int $year Year
+ *
+ * @return int
+ * @access private
+ * @deprecated 1.9
+ */
+function get_day_end($day = null, $month = null, $year = null) {
+ elgg_deprecated_notice('get_day_end() has been deprecated', 1.9);
+ return mktime(23, 59, 59, $month, $day, $year);
+}
+
+/**
+ * Return the notable entities for a given time period.
+ *
+ * @param int $start_time The start time as a unix timestamp.
+ * @param int $end_time The end time as a unix timestamp.
+ * @param string $type The type of entity (eg "user", "object" etc)
+ * @param string $subtype The arbitrary subtype of the entity
+ * @param int $owner_guid The GUID of the owning user
+ * @param string $order_by The field to order by; by default, time_created desc
+ * @param int $limit The number of entities to return; 10 by default
+ * @param int $offset The indexing offset, 0 by default
+ * @param boolean $count Set to true to get a count instead of entities. Defaults to false.
+ * @param int $site_guid Site to get entities for. Default 0 = current site. -1 = any.
+ * @param mixed $container_guid Container or containers to get entities from (default: any).
+ *
+ * @return array|false
+ * @access private
+ * @deprecated 1.9
+ */
+function get_notable_entities($start_time, $end_time, $type = "", $subtype = "", $owner_guid = 0,
+$order_by = "asc", $limit = 10, $offset = 0, $count = false, $site_guid = 0,
+$container_guid = null) {
+ elgg_deprecated_notice('get_notable_entities() has been deprecated', 1.9);
+ global $CONFIG;
+
+ if ($subtype === false || $subtype === null || $subtype === 0) {
+ return false;
+ }
+
+ $start_time = (int)$start_time;
+ $end_time = (int)$end_time;
+ $order_by = sanitise_string($order_by);
+ $limit = (int)$limit;
+ $offset = (int)$offset;
+ $site_guid = (int) $site_guid;
+ if ($site_guid == 0) {
+ $site_guid = $CONFIG->site_guid;
+ }
+
+ $where = array();
+
+ if (is_array($type)) {
+ $tempwhere = "";
+ if (sizeof($type)) {
+ foreach ($type as $typekey => $subtypearray) {
+ foreach ($subtypearray as $subtypeval) {
+ $typekey = sanitise_string($typekey);
+ if (!empty($subtypeval)) {
+ $subtypeval = (int) get_subtype_id($typekey, $subtypeval);
+ } else {
+ $subtypeval = 0;
+ }
+ if (!empty($tempwhere)) {
+ $tempwhere .= " or ";
+ }
+ $tempwhere .= "(e.type = '{$typekey}' and e.subtype = {$subtypeval})";
+ }
+ }
+ }
+ if (!empty($tempwhere)) {
+ $where[] = "({$tempwhere})";
+ }
+ } else {
+ $type = sanitise_string($type);
+ $subtype = get_subtype_id($type, $subtype);
+
+ if ($type != "") {
+ $where[] = "e.type='$type'";
+ }
+
+ if ($subtype !== "") {
+ $where[] = "e.subtype=$subtype";
+ }
+ }
+
+ if ($owner_guid != "") {
+ if (!is_array($owner_guid)) {
+ $owner_array = array($owner_guid);
+ $owner_guid = (int) $owner_guid;
+ $where[] = "e.owner_guid = '$owner_guid'";
+ } else if (sizeof($owner_guid) > 0) {
+ $owner_array = array_map('sanitise_int', $owner_guid);
+ // Cast every element to the owner_guid array to int
+ $owner_guid = implode(",", $owner_guid);
+ $where[] = "e.owner_guid in ({$owner_guid})";
+ }
+ if (is_null($container_guid)) {
+ $container_guid = $owner_array;
+ }
+ }
+
+ if ($site_guid > 0) {
+ $where[] = "e.site_guid = {$site_guid}";
+ }
+
+ if (!is_null($container_guid)) {
+ if (is_array($container_guid)) {
+ foreach ($container_guid as $key => $val) {
+ $container_guid[$key] = (int) $val;
+ }
+ $where[] = "e.container_guid in (" . implode(",", $container_guid) . ")";
+ } else {
+ $container_guid = (int) $container_guid;
+ $where[] = "e.container_guid = {$container_guid}";
+ }
+ }
+
+ // Add the calendar stuff
+ $cal_join = "
+ JOIN {$CONFIG->dbprefix}metadata cal_start on e.guid=cal_start.entity_guid
+ JOIN {$CONFIG->dbprefix}metastrings cal_start_name on cal_start.name_id=cal_start_name.id
+ JOIN {$CONFIG->dbprefix}metastrings cal_start_value on cal_start.value_id=cal_start_value.id
+
+ JOIN {$CONFIG->dbprefix}metadata cal_end on e.guid=cal_end.entity_guid
+ JOIN {$CONFIG->dbprefix}metastrings cal_end_name on cal_end.name_id=cal_end_name.id
+ JOIN {$CONFIG->dbprefix}metastrings cal_end_value on cal_end.value_id=cal_end_value.id
+ ";
+ $where[] = "cal_start_name.string='calendar_start'";
+ $where[] = "cal_start_value.string>=$start_time";
+ $where[] = "cal_end_name.string='calendar_end'";
+ $where[] = "cal_end_value.string <= $end_time";
+
+
+ if (!$count) {
+ $query = "SELECT e.* from {$CONFIG->dbprefix}entities e $cal_join where ";
+ } else {
+ $query = "SELECT count(e.guid) as total from {$CONFIG->dbprefix}entities e $cal_join where ";
+ }
+ foreach ($where as $w) {
+ $query .= " $w and ";
+ }
+
+ $query .= get_access_sql_suffix('e'); // Add access controls
+
+ if (!$count) {
+ $query .= " order by n.calendar_start $order_by";
+ // Add order and limit
+ if ($limit) {
+ $query .= " limit $offset, $limit";
+ }
+ $dt = get_data($query, "entity_row_to_elggstar");
+
+ return $dt;
+ } else {
+ $total = get_data_row($query);
+ return $total->total;
+ }
+}
+
+/**
+ * Return the notable entities for a given time period based on an item of metadata.
+ *
+ * @param int $start_time The start time as a unix timestamp.
+ * @param int $end_time The end time as a unix timestamp.
+ * @param mixed $meta_name Metadata name
+ * @param mixed $meta_value Metadata value
+ * @param string $entity_type The type of entity to look for, eg 'site' or 'object'
+ * @param string $entity_subtype The subtype of the entity.
+ * @param int $owner_guid Owner GUID
+ * @param int $limit Limit
+ * @param int $offset Offset
+ * @param string $order_by Optional ordering.
+ * @param int $site_guid Site to get entities for. Default 0 = current site. -1 = any.
+ * @param bool $count If true, returns count instead of entities. (Default: false)
+ *
+ * @return int|array A list of entities, or a count if $count is set to true
+ * @access private
+ * @deprecated 1.9
+ */
+function get_notable_entities_from_metadata($start_time, $end_time, $meta_name, $meta_value = "",
+$entity_type = "", $entity_subtype = "", $owner_guid = 0, $limit = 10, $offset = 0, $order_by = "",
+$site_guid = 0, $count = false) {
+ elgg_deprecated_notice('get_notable_entities_from_metadata() has been deprecated', 1.9);
+
+ global $CONFIG;
+
+ $meta_n = get_metastring_id($meta_name);
+ $meta_v = get_metastring_id($meta_value);
+
+ $start_time = (int)$start_time;
+ $end_time = (int)$end_time;
+ $entity_type = sanitise_string($entity_type);
+ $entity_subtype = get_subtype_id($entity_type, $entity_subtype);
+ $limit = (int)$limit;
+ $offset = (int)$offset;
+ if ($order_by == "") {
+ $order_by = "e.time_created desc";
+ }
+ $order_by = sanitise_string($order_by);
+ $site_guid = (int) $site_guid;
+ if ((is_array($owner_guid) && (count($owner_guid)))) {
+ foreach ($owner_guid as $key => $guid) {
+ $owner_guid[$key] = (int) $guid;
+ }
+ } else {
+ $owner_guid = (int) $owner_guid;
+ }
+
+ if ($site_guid == 0) {
+ $site_guid = $CONFIG->site_guid;
+ }
+
+ //$access = get_access_list();
+
+ $where = array();
+
+ if ($entity_type != "") {
+ $where[] = "e.type='$entity_type'";
+ }
+
+ if ($entity_subtype) {
+ $where[] = "e.subtype=$entity_subtype";
+ }
+
+ if ($meta_name != "") {
+ $where[] = "m.name_id='$meta_n'";
+ }
+
+ if ($meta_value != "") {
+ $where[] = "m.value_id='$meta_v'";
+ }
+
+ if ($site_guid > 0) {
+ $where[] = "e.site_guid = {$site_guid}";
+ }
+
+ if (is_array($owner_guid)) {
+ $where[] = "e.container_guid in (" . implode(",", $owner_guid) . ")";
+ } else if ($owner_guid > 0) {
+ $where[] = "e.container_guid = {$owner_guid}";
+ }
+
+ // Add the calendar stuff
+ $cal_join = "
+ JOIN {$CONFIG->dbprefix}metadata cal_start on e.guid=cal_start.entity_guid
+ JOIN {$CONFIG->dbprefix}metastrings cal_start_name on cal_start.name_id=cal_start_name.id
+ JOIN {$CONFIG->dbprefix}metastrings cal_start_value on cal_start.value_id=cal_start_value.id
+
+ JOIN {$CONFIG->dbprefix}metadata cal_end on e.guid=cal_end.entity_guid
+ JOIN {$CONFIG->dbprefix}metastrings cal_end_name on cal_end.name_id=cal_end_name.id
+ JOIN {$CONFIG->dbprefix}metastrings cal_end_value on cal_end.value_id=cal_end_value.id
+ ";
+
+ $where[] = "cal_start_name.string='calendar_start'";
+ $where[] = "cal_start_value.string>=$start_time";
+ $where[] = "cal_end_name.string='calendar_end'";
+ $where[] = "cal_end_value.string <= $end_time";
+
+ if (!$count) {
+ $query = "SELECT distinct e.* ";
+ } else {
+ $query = "SELECT count(distinct e.guid) as total ";
+ }
+
+ $query .= "from {$CONFIG->dbprefix}entities e"
+ . " JOIN {$CONFIG->dbprefix}metadata m on e.guid = m.entity_guid $cal_join where";
+
+ foreach ($where as $w) {
+ $query .= " $w and ";
+ }
+
+ // Add access controls
+ $query .= get_access_sql_suffix("e");
+ $query .= ' and ' . get_access_sql_suffix("m");
+
+ if (!$count) {
+ // Add order and limit
+ $query .= " order by $order_by limit $offset, $limit";
+ return get_data($query, "entity_row_to_elggstar");
+ } else {
+ if ($row = get_data_row($query)) {
+ return $row->total;
+ }
+ }
+
+ return false;
+}
+
+/**
+ * Return the notable entities for a given time period based on their relationship.
+ *
+ * @param int $start_time The start time as a unix timestamp.
+ * @param int $end_time The end time as a unix timestamp.
+ * @param string $relationship The relationship eg "friends_of"
+ * @param int $relationship_guid The guid of the entity to use query
+ * @param bool $inverse_relationship Reverse the normal function of the query to say
+ * "give me all entities for whom $relationship_guid is a
+ * $relationship of"
+ * @param string $type Entity type
+ * @param string $subtype Entity subtype
+ * @param int $owner_guid Owner GUID
+ * @param string $order_by Optional Order by
+ * @param int $limit Limit
+ * @param int $offset Offset
+ * @param boolean $count If true returns a count of entities (default false)
+ * @param int $site_guid Site to get entities for. Default 0 = current site. -1 = any
+ *
+ * @return array|int|false An array of entities, or the number of entities, or false on failure
+ * @access private
+ * @deprecated 1.9
+ */
+function get_noteable_entities_from_relationship($start_time, $end_time, $relationship,
+$relationship_guid, $inverse_relationship = false, $type = "", $subtype = "", $owner_guid = 0,
+$order_by = "", $limit = 10, $offset = 0, $count = false, $site_guid = 0) {
+ elgg_deprecated_notice('get_noteable_entities_from_relationship() has been deprecated', 1.9);
+
+ global $CONFIG;
+
+ $start_time = (int)$start_time;
+ $end_time = (int)$end_time;
+ $relationship = sanitise_string($relationship);
+ $relationship_guid = (int)$relationship_guid;
+ $inverse_relationship = (bool)$inverse_relationship;
+ $type = sanitise_string($type);
+ $subtype = get_subtype_id($type, $subtype);
+ $owner_guid = (int)$owner_guid;
+ if ($order_by == "") {
+ $order_by = "time_created desc";
+ }
+ $order_by = sanitise_string($order_by);
+ $limit = (int)$limit;
+ $offset = (int)$offset;
+ $site_guid = (int) $site_guid;
+ if ($site_guid == 0) {
+ $site_guid = $CONFIG->site_guid;
+ }
+
+ //$access = get_access_list();
+
+ $where = array();
+
+ if ($relationship != "") {
+ $where[] = "r.relationship='$relationship'";
+ }
+ if ($relationship_guid) {
+ $where[] = $inverse_relationship ?
+ "r.guid_two='$relationship_guid'" : "r.guid_one='$relationship_guid'";
+ }
+ if ($type != "") {
+ $where[] = "e.type='$type'";
+ }
+ if ($subtype) {
+ $where[] = "e.subtype=$subtype";
+ }
+ if ($owner_guid != "") {
+ $where[] = "e.container_guid='$owner_guid'";
+ }
+ if ($site_guid > 0) {
+ $where[] = "e.site_guid = {$site_guid}";
+ }
+
+ // Add the calendar stuff
+ $cal_join = "
+ JOIN {$CONFIG->dbprefix}metadata cal_start on e.guid=cal_start.entity_guid
+ JOIN {$CONFIG->dbprefix}metastrings cal_start_name on cal_start.name_id=cal_start_name.id
+ JOIN {$CONFIG->dbprefix}metastrings cal_start_value on cal_start.value_id=cal_start_value.id
+
+ JOIN {$CONFIG->dbprefix}metadata cal_end on e.guid=cal_end.entity_guid
+ JOIN {$CONFIG->dbprefix}metastrings cal_end_name on cal_end.name_id=cal_end_name.id
+ JOIN {$CONFIG->dbprefix}metastrings cal_end_value on cal_end.value_id=cal_end_value.id
+ ";
+ $where[] = "cal_start_name.string='calendar_start'";
+ $where[] = "cal_start_value.string>=$start_time";
+ $where[] = "cal_end_name.string='calendar_end'";
+ $where[] = "cal_end_value.string <= $end_time";
+
+ // Select what we're joining based on the options
+ $joinon = "e.guid = r.guid_one";
+ if (!$inverse_relationship) {
+ $joinon = "e.guid = r.guid_two";
+ }
+
+ if ($count) {
+ $query = "SELECT count(distinct e.guid) as total ";
+ } else {
+ $query = "SELECT distinct e.* ";
+ }
+ $query .= " from {$CONFIG->dbprefix}entity_relationships r"
+ . " JOIN {$CONFIG->dbprefix}entities e on $joinon $cal_join where ";
+
+ foreach ($where as $w) {
+ $query .= " $w and ";
+ }
+ // Add access controls
+ $query .= get_access_sql_suffix("e");
+ if (!$count) {
+ $query .= " order by $order_by limit $offset, $limit"; // Add order and limit
+ return get_data($query, "entity_row_to_elggstar");
+ } else {
+ if ($count = get_data_row($query)) {
+ return $count->total;
+ }
+ }
+ return false;
+}
+
+/**
+ * Get all entities for today.
+ *
+ * @param string $type The type of entity (eg "user", "object" etc)
+ * @param string $subtype The arbitrary subtype of the entity
+ * @param int $owner_guid The GUID of the owning user
+ * @param string $order_by The field to order by; by default, time_created desc
+ * @param int $limit The number of entities to return; 10 by default
+ * @param int $offset The indexing offset, 0 by default
+ * @param boolean $count If true returns a count of entities (default false)
+ * @param int $site_guid Site to get entities for. Default 0 = current site. -1 = any
+ * @param mixed $container_guid Container(s) to get entities from (default: any).
+ *
+ * @return array|false
+ * @access private
+ * @deprecated 1.9
+ */
+function get_todays_entities($type = "", $subtype = "", $owner_guid = 0, $order_by = "",
+$limit = 10, $offset = 0, $count = false, $site_guid = 0, $container_guid = null) {
+ elgg_deprecated_notice('get_todays_entities() has been deprecated', 1.9);
+
+ $day_start = get_day_start();
+ $day_end = get_day_end();
+
+ return get_notable_entities($day_start, $day_end, $type, $subtype, $owner_guid, $order_by,
+ $limit, $offset, $count, $site_guid, $container_guid);
+}
+
+/**
+ * Get entities for today from metadata.
+ *
+ * @param mixed $meta_name Metadata name
+ * @param mixed $meta_value Metadata value
+ * @param string $entity_type The type of entity to look for, eg 'site' or 'object'
+ * @param string $entity_subtype The subtype of the entity.
+ * @param int $owner_guid Owner GUID
+ * @param int $limit Limit
+ * @param int $offset Offset
+ * @param string $order_by Optional ordering.
+ * @param int $site_guid Site to get entities for. Default 0 = current site. -1 = any.
+ * @param bool $count If true, returns count instead of entities. (Default: false)
+ *
+ * @return int|array A list of entities, or a count if $count is set to true
+ * @access private
+ * @deprecated 1.9
+ */
+function get_todays_entities_from_metadata($meta_name, $meta_value = "", $entity_type = "",
+$entity_subtype = "", $owner_guid = 0, $limit = 10, $offset = 0, $order_by = "", $site_guid = 0,
+$count = false) {
+ elgg_deprecated_notice('get_todays_entities_from_metadata() has been deprecated', 1.9);
+
+ $day_start = get_day_start();
+ $day_end = get_day_end();
+
+ return get_notable_entities_from_metadata($day_start, $day_end, $meta_name, $meta_value,
+ $entity_type, $entity_subtype, $owner_guid, $limit, $offset, $order_by, $site_guid, $count);
+}
+
+/**
+ * Get entities for today from a relationship
+ *
+ * @param string $relationship The relationship eg "friends_of"
+ * @param int $relationship_guid The guid of the entity to use query
+ * @param bool $inverse_relationship Reverse the normal function of the query to say
+ * "give me all entities for whom $relationship_guid is a
+ * $relationship of"
+ * @param string $type Entity type
+ * @param string $subtype Entity subtype
+ * @param int $owner_guid Owner GUID
+ * @param string $order_by Optional Order by
+ * @param int $limit Limit
+ * @param int $offset Offset
+ * @param boolean $count If true returns a count of entities (default false)
+ * @param int $site_guid Site to get entities for. Default 0 = current site. -1 = any
+ *
+ * @return array|int|false An array of entities, or the number of entities, or false on failure
+ * @access private
+ * @deprecated 1.9
+ */
+function get_todays_entities_from_relationship($relationship, $relationship_guid,
+$inverse_relationship = false, $type = "", $subtype = "", $owner_guid = 0,
+$order_by = "", $limit = 10, $offset = 0, $count = false, $site_guid = 0) {
+ elgg_deprecated_notice('get_todays_entities_from_relationship() has been deprecated', 1.9);
+
+ $day_start = get_day_start();
+ $day_end = get_day_end();
+
+ return get_notable_entities_from_relationship($day_start, $day_end, $relationship,
+ $relationship_guid, $inverse_relationship, $type, $subtype, $owner_guid, $order_by,
+ $limit, $offset, $count, $site_guid);
+}
+
+/**
+ * Returns a viewable list of entities for a given time period.
+ *
+ * @see elgg_view_entity_list
+ *
+ * @param int $start_time The start time as a unix timestamp.
+ * @param int $end_time The end time as a unix timestamp.
+ * @param string $type The type of entity (eg "user", "object" etc)
+ * @param string $subtype The arbitrary subtype of the entity
+ * @param int $owner_guid The GUID of the owning user
+ * @param int $limit The number of entities to return; 10 by default
+ * @param boolean $fullview Whether or not to display the full view (default: true)
+ * @param boolean $listtypetoggle Whether or not to allow gallery view
+ * @param boolean $navigation Display pagination? Default: true
+ *
+ * @return string A viewable list of entities
+ * @access private
+ * @deprecated 1.9
+ */
+function list_notable_entities($start_time, $end_time, $type= "", $subtype = "", $owner_guid = 0,
+$limit = 10, $fullview = true, $listtypetoggle = false, $navigation = true) {
+ elgg_deprecated_notice('list_notable_entities() has been deprecated', 1.9);
+
+ $offset = (int) get_input('offset');
+ $count = get_notable_entities($start_time, $end_time, $type, $subtype,
+ $owner_guid, "", $limit, $offset, true);
+
+ $entities = get_notable_entities($start_time, $end_time, $type, $subtype,
+ $owner_guid, "", $limit, $offset);
+
+ return elgg_view_entity_list($entities, $count, $offset, $limit,
+ $fullview, $listtypetoggle, $navigation);
+}
+
+/**
+ * Return a list of today's entities.
+ *
+ * @see list_notable_entities
+ *
+ * @param string $type The type of entity (eg "user", "object" etc)
+ * @param string $subtype The arbitrary subtype of the entity
+ * @param int $owner_guid The GUID of the owning user
+ * @param int $limit The number of entities to return; 10 by default
+ * @param boolean $fullview Whether or not to display the full view (default: true)
+ * @param boolean $listtypetoggle Whether or not to allow gallery view
+ * @param boolean $navigation Display pagination? Default: true
+ *
+ * @return string A viewable list of entities
+ * @access private
+ * @deprecated 1.9
+ */
+function list_todays_entities($type= "", $subtype = "", $owner_guid = 0, $limit = 10,
+$fullview = true, $listtypetoggle = false, $navigation = true) {
+ elgg_deprecated_notice('list_todays_entities() has been deprecated', 1.9);
+
+ $day_start = get_day_start();
+ $day_end = get_day_end();
+
+ return list_notable_entities($day_start, $day_end, $type, $subtype, $owner_guid, $limit,
+ $fullview, $listtypetoggle, $navigation);
+}
diff --git a/engine/lib/elgglib.php b/engine/lib/elgglib.php
index 21dfacc0c..34111c69d 100644
--- a/engine/lib/elgglib.php
+++ b/engine/lib/elgglib.php
@@ -1,2215 +1,2304 @@
<?php
+/**
+ * Bootstrapping and helper procedural code available for use in Elgg core and plugins.
+ *
+ * @package Elgg.Core
+ * @todo These functions can't be subpackaged because they cover a wide mix of
+ * purposes and subsystems. Many of them should be moved to more relevant files.
+ */
- /**
- * Elgg library
- * Contains important functionality core to Elgg
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
-
- /**
- * Getting directories and moving the browser
- */
-
- /**
- * Adds messages to the session so they'll be carried over, and forwards the browser.
- * Returns false if headers have already been sent and the browser cannot be moved.
- *
- * @param string $location URL to forward to browser to
- * @return nothing|false
- */
-
- function forward($location = "") {
- global $CONFIG;
- if (!headers_sent()) {
-
- $current_page = current_page_url();
- if (strpos($current_page, $CONFIG->wwwroot . "action") ===false)
-
- $_SESSION['messages'] = system_messages();
- if ((substr_count($location, 'http://') == 0) && (substr_count($location, 'https://') == 0)) {
-
- $location = $CONFIG->url . $location;
- }
-
-
- header("Location: {$location}");
- exit;
- }
- return false;
-
- }
+// prep core classes to be autoloadable
+spl_autoload_register('_elgg_autoload');
+elgg_register_classes(dirname(dirname(__FILE__)) . '/classes');
- /**
- * Return the current page URL.
- */
- function current_page_url()
- {
- global $CONFIG;
-
- $url = parse_url($CONFIG->wwwroot);
-
- $page = $url['scheme'] . "://";
-
- // user/pass
- if ((isset($url['user'])) && ($url['user'])) $page .= $url['user'];
- if ((isset($url['pass'])) && ($url['pass'])) $page .= ":".$url['pass'];
- if (($url['user']) || $url['pass']) $page .="@";
-
- $page .= $url['host'];
-
- if ((isset($url['port'])) && ($url['port'])) $page .= ":" . $url['port'];
-
- $page = trim($page, "/"); //$page.="/";
-
- $page .= $_SERVER['REQUEST_URI'];
-
- return $page;
- }
-
- /**
- * Templating and visual functionality
- */
-
- $CURRENT_SYSTEM_VIEWTYPE = "";
-
- /**
- * Override the view mode detection for the elgg view system.
- *
- * This function will force any further views to be rendered using $viewtype. Remember to call elgg_set_viewtype() with
- * no parameters to reset.
- *
- * @param string $viewtype The view type, e.g. 'rss', or 'default'.
- * @return bool
- */
- function elgg_set_viewtype($viewtype = "")
- {
- global $CURRENT_SYSTEM_VIEWTYPE;
-
- $CURRENT_SYSTEM_VIEWTYPE = $viewtype;
-
- return true;
- }
-
- /**
- * Return the current view type used by the elgg view system.
- *
- * By default, this function will return a value based on the default for your system or from the command line
- * view parameter. However, you may force a given view type by calling elgg_set_viewtype()
- *
- * @return string The view.
- */
- function elgg_get_viewtype()
- {
- global $CURRENT_SYSTEM_VIEWTYPE, $CONFIG;
-
- $viewtype = NULL;
-
- if ($CURRENT_SYSTEM_VIEWTYPE != "")
- return $CURRENT_SYSTEM_VIEWTYPE;
-
- if ((empty($_SESSION['view'])) || ( (trim($CONFIG->view!="")) && ($_SESSION['view']!=$CONFIG->view) )) {
- $_SESSION['view'] = "default";
-
- // If we have a config default view for this site then use that instead of 'default'
- if (/*(is_installed()) && */(!empty($CONFIG->view)) && (trim($CONFIG->view)!=""))
- $_SESSION['view'] = $CONFIG->view;
- }
-
- if (empty($viewtype) && is_callable('get_input'))
- $viewtype = get_input('view');
-
- if (empty($viewtype))
- $viewtype = $_SESSION['view'];
-
- return $viewtype;
- }
-
- /**
- * Return the location of a given view.
- *
- * @param string $view The view.
- */
- function elgg_get_view_location($view)
- {
- global $CONFIG;
-
- $viewtype = elgg_get_viewtype();
-
- if (!isset($CONFIG->views->locations[$viewtype][$view])) {
- if (!isset($CONFIG->viewpath)) {
- return dirname(dirname(dirname(__FILE__))) . "/views/";
- } else {
- return $CONFIG->viewpath;
- }
- } else {
- return $CONFIG->views->locations[$viewtype][$view];
- }
-
- return false;
- }
-
- /**
- * Generate a view hash.
- *
- * @param string $view The view name
- * @param array $vars The view parameters
- * @return string The hash.
- */
- function elgg_get_viewhash($view, $vars)
- {
- global $VIEW_CACHE_DISABLED, $CONFIG;
-
- if (($VIEW_CACHE_DISABLED) || (!$CONFIG->viewcache)) return false;
-
- $unchanged_vars = unserialize(serialize($vars));
-
- // This is a bit of a hack, but basically we have to remove things that change on each pageload
- if (isset($unchanged_vars['entity']->last_action)) $unchanged_vars['entity']->last_action = 0;
- if (isset($unchanged_vars['entity']->prev_last_action)) $unchanged_vars['entity']->prev_last_action = 0;
-
- if (isset($unchanged_vars['user']->last_action)) $unchanged_vars['user']->last_action = 0;
- if (isset($unchanged_vars['user']->prev_last_action)) $unchanged_vars['user']->prev_last_action = 0;
-
-
- return md5(current_page_url() . $view . serialize($uncharged_vars)); // This should be enough to stop artefacts
-
- }
-
- /**
- * Cache a view.
- *
- * @param string $view The content.
- * @param string $content The content.
- * @param string $viewhash The hash
- * @return bool
- */
- function elgg_cache_view($view, $content, $viewhash)
- {
- global $view_cache, $VIEW_CACHE_DISABLED, $CONFIG;
-
- if (($VIEW_CACHE_DISABLED) || (!$CONFIG->viewcache)) return false;
-
- // Cache
- if ($viewhash)
- {
- error_log("MARCUS : Caching $view:$viewhash");
- $view_cache->save($viewhash, $content);
-
- return $viewhash;
- }
-
- return false;
- }
-
- /**
- * Get a cached view based on its hash.
- *
- * @param string $viewhash
- * @return string or false on if no cache returned.
- */
- function elgg_get_cached_view($viewhash)
- {
- global $view_cache, $VIEW_CACHE_DISABLED, $CONFIG;
-
- if (($VIEW_CACHE_DISABLED) || (!$CONFIG->viewcache)) return false;
-
- if ((!$view_cache) && (is_memcache_available()))
- $view_cache = new ElggMemcache('view_cache');
- if ($view_cache) {
-
- $cached_view = $view_cache->load($viewhash);
-
- if ($cached_view)
- {
- error_log("MARCUS : LOADED $view:$viewhash from cache");
- return $cached_view;
- }
- else
- error_log("MARCUS : View $view:$viewhash not cached");
-
- }
-
- return false;
- }
-
- /**
- * Temporarily disable view caching.
- *
- */
- function elgg_disable_view_cache()
- {
- global $VIEW_CACHE_DISABLED;
-
- $VIEW_CACHE_DISABLED = true;
- }
-
- /**
- * Handles templating views
- *
- * @see set_template_handler
- *
- * @param string $view The name and location of the view to use
- * @param array $vars Any variables that the view requires, passed as an array
- * @param boolean $bypass If set to true, elgg_view will bypass any specified alternative template handler; by default, it will hand off to this if requested (see set_template_handler)
- * @param boolean $debug If set to true, the viewer will complain if it can't find a view
- * @return string The HTML content
- */
- function elgg_view($view, $vars = "", $bypass = false, $debug = false) {
-
- global $CONFIG;
- static $usercache;
-
- // Trigger the pagesetup event
- if (!isset($CONFIG->pagesetupdone)) {
- trigger_elgg_event('pagesetup','system');
- $CONFIG->pagesetupdone = true;
- }
-
- if (!is_array($usercache)) {
- $usercache = array();
- }
-
- if (empty($vars)) {
- $vars = array();
- }
-
- // Load session and configuration variables into $vars
- if (isset($_SESSION) && is_array($_SESSION) ) {
- $vars = array_merge($vars, $_SESSION);
- }
- $vars['config'] = array();
- if (!empty($CONFIG))
- $vars['config'] = $CONFIG;
-
- $vars['url'] = $CONFIG->url;
-
- // Load page owner variables into $vars
- if (is_callable('page_owner')) {
- $vars['page_owner'] = page_owner();
- } else {
- $vars['page_owner'] = -1;
- }
- if (($vars['page_owner'] != -1) && (is_installed())) {
- if (!isset($usercache[$vars['page_owner']])) {
- $vars['page_owner_user'] = get_entity($vars['page_owner']);
- $usercache[$vars['page_owner']] = $vars['page_owner_user'];
- } else {
- $vars['page_owner_user'] = $usercache[$vars['page_owner']];
- }
- }
- if (!isset($vars['js'])) {
- $vars['js'] = "";
- }
-
- // If it's been requested, pass off to a template handler instead
- if ($bypass == false && isset($CONFIG->template_handler) && !empty($CONFIG->template_handler)) {
- $template_handler = $CONFIG->template_handler;
- if (is_callable($template_handler))
- return $template_handler($view, $vars);
- }
-
- // Attempt to memcache views.
- /*$view_hash = elgg_get_viewhash($view, $vars);
- $cached_view = elgg_get_cached_view($view_hash);
- if ($cached_view) return $cached_view;*/
-
- // Get the current viewtype
- $viewtype = elgg_get_viewtype();
-
- // Set up any extensions to the requested view
- if (isset($CONFIG->views->extensions[$view])) {
- $viewlist = $CONFIG->views->extensions[$view];
- } else {
- $viewlist = array(500 => $view);
- }
- // Start the output buffer, find the requested view file, and execute it
- ob_start();
- foreach($viewlist as $priority => $view) {
-
- $view_location = elgg_get_view_location($view);
-
-
- if (file_exists($view_location . "{$viewtype}/{$view}.php") && !include($view_location . "{$viewtype}/{$view}.php")) {
- $success = false;
-
- if ($viewtype != "default") {
- if (include($view_location . "default/{$view}.php")) {
- $success = true;
- }
- }
- if (!$success && isset($CONFIG->debug) && $CONFIG->debug == true) {
- error_log(" [This view ({$view}) does not exist] ");
- }
- } else if (isset($CONFIG->debug) && $CONFIG->debug == true && !file_exists($view_location . "{$viewtype}/{$view}.php")) {
-
- error_log($view_location . "{$viewtype}/{$view}.php");
- error_log(" [This view ({$view}) does not exist] ");
- }
-
- }
-
- // Save the output buffer into the $content variable
- $content = ob_get_clean();
-
- // Plugin hook
- $content = trigger_plugin_hook('display','view',array('view' => $view),$content);
-
- // Cache view
- //elgg_cache_view($view, $content, $view_hash);
-
- // Return $content
- return $content;
-
- }
-
- /**
- * Returns whether the specified view exists
- *
- * @param string $view The view name
- * @return true|false Depending on success
- */
- function elgg_view_exists($view) {
-
- global $CONFIG;
-
- // Detect view type
- $viewtype = elgg_get_viewtype();
-
- if (!isset($CONFIG->views->locations[$viewtype][$view])) {
- if (!isset($CONFIG->viewpath)) {
- $location = dirname(dirname(dirname(__FILE__))) . "/views/";
- } else {
- $location = $CONFIG->viewpath;
- }
- } else {
- $location = $CONFIG->views->locations[$viewtype][$view];
- }
-
- if (file_exists($location . "{$viewtype}/{$view}.php")) {
- return true;
- }
-
- return false;
-
- }
-
- /**
- * Registers a view to be simply cached
- *
- * Views cached in this manner must take no parameters and be login agnostic -
- * that is to say, they look the same no matter who is logged in (or logged out).
- *
- * CSS and the basic jS views are automatically cached like this.
- *
- * @param string $viewname View name
- */
- function elgg_view_register_simplecache($viewname) {
-
- global $CONFIG;
-
- if (!isset($CONFIG->views->simplecache))
- $CONFIG->views->simplecache = array();
-
- //if (elgg_view_exists($viewname))
- $CONFIG->views->simplecache[] = $viewname;
-
- }
-
- /**
- * Regenerates the simple cache.
- *
- * @see elgg_view_register_simplecache
- *
- */
- function elgg_view_regenerate_simplecache() {
-
- global $CONFIG;
-
- if (isset($CONFIG->views->simplecache)) {
-
- if (!file_exists($CONFIG->dataroot . 'views_simplecache')) {
- @mkdir($CONFIG->dataroot . 'views_simplecache');
- }
-
- if (!empty($CONFIG->views->simplecache) && is_array($CONFIG->views->simplecache)) {
- foreach($CONFIG->views->simplecache as $view) {
- $viewcontents = elgg_view($view);
- $viewname = md5(elgg_get_viewtype() . $view);
- if ($handle = fopen($CONFIG->dataroot . 'views_simplecache/' . $viewname, 'w')) {
- fwrite($handle, $viewcontents);
- fclose($handle);
- }
- }
- }
-
- datalist_set('simplecache_lastupdate',0);
-
- }
-
+/**
+ * Autoload classes
+ *
+ * @param string $class The name of the class
+ *
+ * @return void
+ * @throws Exception
+ * @access private
+ */
+function _elgg_autoload($class) {
+ global $CONFIG;
+
+ if (!isset($CONFIG->classes[$class]) || !include($CONFIG->classes[$class])) {
+ return false;
+ }
+}
+
+/**
+ * Register all files found in $dir as classes
+ * Need to be named MyClass.php
+ *
+ * @param string $dir The dir to look in
+ *
+ * @return void
+ * @since 1.8.0
+ */
+function elgg_register_classes($dir) {
+ $classes = elgg_get_file_list($dir, array(), array(), array('.php'));
+
+ foreach ($classes as $class) {
+ elgg_register_class(basename($class, '.php'), $class);
+ }
+}
+
+/**
+ * Register a classname to a file.
+ *
+ * @param string $class The name of the class
+ * @param string $location The location of the file
+ *
+ * @return true
+ * @since 1.8.0
+ */
+function elgg_register_class($class, $location) {
+ global $CONFIG;
+
+ if (!isset($CONFIG->classes)) {
+ $CONFIG->classes = array();
+ }
+
+ $CONFIG->classes[$class] = $location;
+
+ return true;
+}
+
+/**
+ * Register a php library.
+ *
+ * @param string $name The name of the library
+ * @param string $location The location of the file
+ *
+ * @return void
+ * @since 1.8.0
+ */
+function elgg_register_library($name, $location) {
+ global $CONFIG;
+
+ if (!isset($CONFIG->libraries)) {
+ $CONFIG->libraries = array();
+ }
+
+ $CONFIG->libraries[$name] = $location;
+}
+
+/**
+ * Load a php library.
+ *
+ * @param string $name The name of the library
+ *
+ * @return void
+ * @throws InvalidParameterException
+ * @since 1.8.0
+ * @todo return boolean in 1.9 to indicate whether the library has been loaded
+ */
+function elgg_load_library($name) {
+ global $CONFIG;
+
+ static $loaded_libraries = array();
+
+ if (in_array($name, $loaded_libraries)) {
+ return;
+ }
+
+ if (!isset($CONFIG->libraries)) {
+ $CONFIG->libraries = array();
+ }
+
+ if (!isset($CONFIG->libraries[$name])) {
+ $error = elgg_echo('InvalidParameterException:LibraryNotRegistered', array($name));
+ throw new InvalidParameterException($error);
+ }
+
+ if (!include_once($CONFIG->libraries[$name])) {
+ $error = elgg_echo('InvalidParameterException:LibraryNotFound', array(
+ $name,
+ $CONFIG->libraries[$name])
+ );
+ throw new InvalidParameterException($error);
+ }
+
+ $loaded_libraries[] = $name;
+}
+
+/**
+ * Forward to $location.
+ *
+ * Sends a 'Location: $location' header and exists. If headers have
+ * already been sent, returns FALSE.
+ *
+ * @param string $location URL to forward to browser to. Can be path relative to the network's URL.
+ * @param string $reason Short explanation for why we're forwarding
+ *
+ * @return false False if headers have been sent. Terminates execution if forwarding.
+ * @throws SecurityException
+ */
+function forward($location = "", $reason = 'system') {
+ if (!headers_sent($file, $line)) {
+ if ($location === REFERER) {
+ $location = $_SERVER['HTTP_REFERER'];
}
-
- /**
- * Internal function for retrieving views used by elgg_view_tree
- *
- * @param unknown_type $dir
- * @param unknown_type $base
- * @return unknown
- */
- function get_views($dir, $base) {
-
- $return = array();
- if (file_exists($dir) && is_dir($dir)) {
- if ($handle = opendir($dir)) {
- while ($view = readdir($handle)) {
- if (!in_array($view, array('.','..','.svn','CVS'))) {
- if (is_dir($dir . '/' . $view)) {
- if ($val = get_views($dir . '/' . $view, $base . '/' . $view)) {
- $return = array_merge($return, $val);
- }
- } else {
- $view = str_replace('.php','',$view);
- $return[] = $base . '/' . $view;
- }
- }
- }
- }
- }
- return $return;
+
+ $location = elgg_normalize_url($location);
+
+ // return new forward location or false to stop the forward or empty string to exit
+ $current_page = current_page_url();
+ $params = array('current_url' => $current_page, 'forward_url' => $location);
+ $location = elgg_trigger_plugin_hook('forward', $reason, $params, $location);
+
+ if ($location) {
+ header("Location: {$location}");
+ exit;
+ } else if ($location === '') {
+ exit;
}
+ } else {
+ throw new SecurityException(elgg_echo('SecurityException:ForwardFailedToRedirect', array($file, $line)));
+ }
+}
- /**
- * When given a partial view root (eg 'js' or 'page_elements'), returns an array of views underneath it
- *
- * @param string $view_root The root view
- * @param string $viewtype Optionally specify a view type other than the current one.
- * @return array A list of view names underneath that root view
- */
- function elgg_view_tree($view_root, $viewtype = "") {
-
- global $CONFIG;
- static $treecache;
-
- // Get viewtype
- if (!$viewtype)
- $viewtype = elgg_get_viewtype();
-
- // Has the treecache been initialised?
- if (!isset($treecache)) $treecache = array();
- // A little light internal caching
- if (!empty($treecache[$view_root])) return $treecache[$view_root];
-
- // Examine $CONFIG->views->locations
- if (isset($CONFIG->views->locations[$viewtype])) {
- foreach($CONFIG->views->locations[$viewtype] as $view => $path) {
- $pos = strpos($view,$view_root);
- if ($pos === 0) {
- $treecache[$view_root][] = $view;
- }
- }
- }
+/**
+ * Register a JavaScript file for inclusion
+ *
+ * This function handles adding JavaScript to a web page. If multiple
+ * calls are made to register the same JavaScript file based on the $id
+ * variable, only the last file is included. This allows a plugin to add
+ * JavaScript from a view that may be called more than once. It also handles
+ * more than one plugin adding the same JavaScript.
+ *
+ * jQuery plugins often have filenames such as jquery.rating.js. A best practice
+ * is to base $name on the filename: "jquery.rating". It is recommended to not
+ * use version numbers in the name.
+ *
+ * The JavaScript files can be local to the server or remote (such as
+ * Google's CDN).
+ *
+ * @param string $name An identifier for the JavaScript library
+ * @param string $url URL of the JavaScript file
+ * @param string $location Page location: head or footer. (default: head)
+ * @param int $priority Priority of the JS file (lower numbers load earlier)
+ *
+ * @return bool
+ * @since 1.8.0
+ */
+function elgg_register_js($name, $url, $location = 'head', $priority = null) {
+ return elgg_register_external_file('js', $name, $url, $location, $priority);
+}
+
+/**
+ * Unregister a JavaScript file
+ *
+ * @param string $name The identifier for the JavaScript library
+ *
+ * @return bool
+ * @since 1.8.0
+ */
+function elgg_unregister_js($name) {
+ return elgg_unregister_external_file('js', $name);
+}
+
+/**
+ * Load a JavaScript resource on this page
+ *
+ * This must be called before elgg_view_page(). It can be called before the
+ * script is registered. If you do not want a script loaded, unregister it.
+ *
+ * @param string $name Identifier of the JavaScript resource
+ *
+ * @return void
+ * @since 1.8.0
+ */
+function elgg_load_js($name) {
+ elgg_load_external_file('js', $name);
+}
+
+/**
+ * Get the JavaScript URLs that are loaded
+ *
+ * @param string $location 'head' or 'footer'
+ *
+ * @return array
+ * @since 1.8.0
+ */
+function elgg_get_loaded_js($location = 'head') {
+ return elgg_get_loaded_external_files('js', $location);
+}
+
+/**
+ * Register a CSS file for inclusion in the HTML head
+ *
+ * @param string $name An identifier for the CSS file
+ * @param string $url URL of the CSS file
+ * @param int $priority Priority of the CSS file (lower numbers load earlier)
+ *
+ * @return bool
+ * @since 1.8.0
+ */
+function elgg_register_css($name, $url, $priority = null) {
+ return elgg_register_external_file('css', $name, $url, 'head', $priority);
+}
+
+/**
+ * Unregister a CSS file
+ *
+ * @param string $name The identifier for the CSS file
+ *
+ * @return bool
+ * @since 1.8.0
+ */
+function elgg_unregister_css($name) {
+ return elgg_unregister_external_file('css', $name);
+}
+
+/**
+ * Load a CSS file for this page
+ *
+ * This must be called before elgg_view_page(). It can be called before the
+ * CSS file is registered. If you do not want a CSS file loaded, unregister it.
+ *
+ * @param string $name Identifier of the CSS file
+ *
+ * @return void
+ * @since 1.8.0
+ */
+function elgg_load_css($name) {
+ elgg_load_external_file('css', $name);
+}
+
+/**
+ * Get the loaded CSS URLs
+ *
+ * @return array
+ * @since 1.8.0
+ */
+function elgg_get_loaded_css() {
+ return elgg_get_loaded_external_files('css', 'head');
+}
+
+/**
+ * Core registration function for external files
+ *
+ * @param string $type Type of external resource (js or css)
+ * @param string $name Identifier used as key
+ * @param string $url URL
+ * @param string $location Location in the page to include the file
+ * @param int $priority Loading priority of the file
+ *
+ * @return bool
+ * @since 1.8.0
+ */
+function elgg_register_external_file($type, $name, $url, $location, $priority = 500) {
+ global $CONFIG;
+
+ if (empty($name) || empty($url)) {
+ return false;
+ }
+
+ $url = elgg_format_url($url);
+ $url = elgg_normalize_url($url);
- // Now examine core
- $location = $CONFIG->viewpath;
- $viewtype = elgg_get_viewtype();
- $root = $location . $viewtype . '/' . $view_root;
-
- if (file_exists($root) && is_dir($root)) {
- $val = get_views($root, $view_root);
- if (!is_array($treecache[$view_root])) $treecache[$view_root] = array();
- $treecache[$view_root] = array_merge($treecache[$view_root], $val);
- }
+ elgg_bootstrap_externals_data_structure($type);
+
+ $name = trim(strtolower($name));
+
+ // normalize bogus priorities, but allow empty, null, and false to be defaults.
+ if (!is_numeric($priority)) {
+ $priority = 500;
+ }
- return $treecache[$view_root];
+ // no negative priorities right now.
+ $priority = max((int)$priority, 0);
+
+ $item = elgg_extract($name, $CONFIG->externals_map[$type]);
+
+ if ($item) {
+ // updating a registered item
+ // don't update loaded because it could already be set
+ $item->url = $url;
+ $item->location = $location;
+
+ // if loaded before registered, that means it hasn't been added to the list yet
+ if ($CONFIG->externals[$type]->contains($item)) {
+ $priority = $CONFIG->externals[$type]->move($item, $priority);
+ } else {
+ $priority = $CONFIG->externals[$type]->add($item, $priority);
}
-
- /**
- * When given an entity, views it intelligently.
- *
- * Expects a view to exist called entity-type/subtype, or for the entity to have a parameter
- * 'view' which lists a different view to display. In both cases, elgg_view will be called with
- * array('entity' => $entity) as its parameters, and therefore this is what the view should expect
- * to receive.
- *
- * @param ElggEntity $entity The entity to display
- * @param boolean $full Determines whether or not to display the full version of an object, or a smaller version for use in aggregators etc
- * @param boolean $bypass If set to true, elgg_view will bypass any specified alternative template handler; by default, it will hand off to this if requested (see set_template_handler)
- * @param boolean $debug If set to true, the viewer will complain if it can't find a view
- * @return string HTML (etc) to display
- */
- function elgg_view_entity(ElggEntity $entity, $full = false, $bypass = true, $debug = false) {
-
- global $autofeed;
- $autofeed = true;
-
- // No point continuing if entity is null.
- if (!$entity) return '';
-
- $view = $entity->view;
- if (is_string($view)) {
- return elgg_view($view,array('entity' => $entity), $bypass, $debug);
+ } else {
+ $item = new stdClass();
+ $item->loaded = false;
+ $item->url = $url;
+ $item->location = $location;
+
+ $priority = $CONFIG->externals[$type]->add($item, $priority);
+ }
+
+ $CONFIG->externals_map[$type][$name] = $item;
+
+ return $priority !== false;
+}
+
+/**
+ * Unregister an external file
+ *
+ * @param string $type Type of file: js or css
+ * @param string $name The identifier of the file
+ *
+ * @return bool
+ * @since 1.8.0
+ */
+function elgg_unregister_external_file($type, $name) {
+ global $CONFIG;
+
+ elgg_bootstrap_externals_data_structure($type);
+
+ $name = trim(strtolower($name));
+ $item = elgg_extract($name, $CONFIG->externals_map[$type]);
+
+ if ($item) {
+ unset($CONFIG->externals_map[$type][$name]);
+ return $CONFIG->externals[$type]->remove($item);
+ }
+
+ return false;
+}
+
+/**
+ * Load an external resource for use on this page
+ *
+ * @param string $type Type of file: js or css
+ * @param string $name The identifier for the file
+ *
+ * @return void
+ * @since 1.8.0
+ */
+function elgg_load_external_file($type, $name) {
+ global $CONFIG;
+
+ elgg_bootstrap_externals_data_structure($type);
+
+ $name = trim(strtolower($name));
+
+ $item = elgg_extract($name, $CONFIG->externals_map[$type]);
+
+ if ($item) {
+ // update a registered item
+ $item->loaded = true;
+ } else {
+ $item = new stdClass();
+ $item->loaded = true;
+ $item->url = '';
+ $item->location = '';
+
+ $CONFIG->externals[$type]->add($item);
+ $CONFIG->externals_map[$type][$name] = $item;
+ }
+}
+
+/**
+ * Get external resource descriptors
+ *
+ * @param string $type Type of file: js or css
+ * @param string $location Page location
+ *
+ * @return array
+ * @since 1.8.0
+ */
+function elgg_get_loaded_external_files($type, $location) {
+ global $CONFIG;
+
+ if (isset($CONFIG->externals) && $CONFIG->externals[$type] instanceof ElggPriorityList) {
+ $items = $CONFIG->externals[$type]->getElements();
+
+ $callback = "return \$v->loaded == true && \$v->location == '$location';";
+ $items = array_filter($items, create_function('$v', $callback));
+ if ($items) {
+ array_walk($items, create_function('&$v,$k', '$v = $v->url;'));
+ }
+ return $items;
+ }
+ return array();
+}
+
+/**
+ * Bootstraps the externals data structure in $CONFIG.
+ *
+ * @param string $type The type of external, js or css.
+ * @access private
+ */
+function elgg_bootstrap_externals_data_structure($type) {
+ global $CONFIG;
+
+ if (!isset($CONFIG->externals)) {
+ $CONFIG->externals = array();
+ }
+
+ if (!isset($CONFIG->externals[$type]) || !$CONFIG->externals[$type] instanceof ElggPriorityList) {
+ $CONFIG->externals[$type] = new ElggPriorityList();
+ }
+
+ if (!isset($CONFIG->externals_map)) {
+ $CONFIG->externals_map = array();
+ }
+
+ if (!isset($CONFIG->externals_map[$type])) {
+ $CONFIG->externals_map[$type] = array();
+ }
+}
+
+/**
+ * Returns a list of files in $directory.
+ *
+ * Only returns files. Does not recurse into subdirs.
+ *
+ * @param string $directory Directory to look in
+ * @param array $exceptions Array of filenames to ignore
+ * @param array $list Array of files to append to
+ * @param mixed $extensions Array of extensions to allow, NULL for all. Use a dot: array('.php').
+ *
+ * @return array Filenames in $directory, in the form $directory/filename.
+ */
+function elgg_get_file_list($directory, $exceptions = array(), $list = array(),
+$extensions = NULL) {
+
+ $directory = sanitise_filepath($directory);
+ if ($handle = opendir($directory)) {
+ while (($file = readdir($handle)) !== FALSE) {
+ if (!is_file($directory . $file) || in_array($file, $exceptions)) {
+ continue;
}
-
- $classes = array(
- 'ElggUser' => 'user',
- 'ElggObject' => 'object',
- 'ElggSite' => 'site',
- 'ElggGroup' => 'group'
- );
-
- $entity_class = get_class($entity);
-
- if (isset($classes[$entity_class])) {
- $entity_type = $classes[$entity_class];
- } else {
- foreach($classes as $class => $type) {
- if ($entity instanceof $class) {
- $entity_type = $type;
- break;
- }
+
+ if (is_array($extensions)) {
+ if (in_array(strrchr($file, '.'), $extensions)) {
+ $list[] = $directory . $file;
}
- }
- if (!isset($entity_class)) return false;
-
- $subtype = $entity->getSubtype();
- if (empty($subtype)) { $subtype = $entity_type; }
-
- if (elgg_view_exists("{$entity_type}/{$subtype}")) {
- return elgg_view("{$entity_type}/{$subtype}",array(
- 'entity' => $entity,
- 'full' => $full
- ), $bypass, $debug);
} else {
- return elgg_view("{$entity_type}/default",array(
- 'entity' => $entity,
- 'full' => $full
- ), $bypass, $debug);
+ $list[] = $directory . $file;
}
}
+ closedir($handle);
+ }
- /**
- * When given an annotation, views it intelligently.
- *
- * This function expects annotation views to be of the form annotation/name, where name
- * is the type of annotation.
- *
- * @param ElggAnnotation $annotation The annotation to display
- * @param boolean $full Determines whether or not to display the full version of an object, or a smaller version for use in aggregators etc
- * @param boolean $bypass If set to true, elgg_view will bypass any specified alternative template handler; by default, it will hand off to this if requested (see set_template_handler)
- * @param boolean $debug If set to true, the viewer will complain if it can't find a view
- * @return string HTML (etc) to display
- */
- function elgg_view_annotation(ElggAnnotation $annotation, $bypass = true, $debug = false) {
-
- global $autofeed;
- $autofeed = true;
-
- $view = $annotation->view;
- if (is_string($view)) {
- return elgg_view($view,array('annotation' => $annotation), $bypass, $debug);
- }
-
- $name = $annotation->name;
- $intname = (int) $name;
- if ("{$intname}" == "{$name}") {
- $name = get_metastring($intname);
- }
- if (empty($name)) { return ""; }
-
- if (elgg_view_exists("annotation/{$name}")) {
- return elgg_view("annotation/{$name}",array(
- 'annotation' => $annotation,
- ), $bypass, $debug);
+ return $list;
+}
+
+/**
+ * Sanitise file paths ensuring that they begin and end with slashes etc.
+ *
+ * @param string $path The path
+ * @param bool $append_slash Add tailing slash
+ *
+ * @return string
+ */
+function sanitise_filepath($path, $append_slash = TRUE) {
+ // Convert to correct UNIX paths
+ $path = str_replace('\\', '/', $path);
+ $path = str_replace('../', '/', $path);
+ // replace // with / except when preceeded by :
+ $path = preg_replace("/([^:])\/\//", "$1/", $path);
+
+ // Sort trailing slash
+ $path = trim($path);
+ // rtrim defaults plus /
+ $path = rtrim($path, " \n\t\0\x0B/");
+
+ if ($append_slash) {
+ $path = $path . '/';
+ }
+
+ return $path;
+}
+
+/**
+ * Queues a message to be displayed.
+ *
+ * Messages will not be displayed immediately, but are stored in
+ * for later display, usually upon next page load.
+ *
+ * The method of displaying these messages differs depending upon plugins and
+ * viewtypes. The core default viewtype retrieves messages in
+ * {@link views/default/page/shells/default.php} and displays messages as
+ * javascript popups.
+ *
+ * @internal Messages are stored as strings in the $_SESSION['msg'][$register] array.
+ *
+ * @warning This function is used to both add to and clear the message
+ * stack. If $messages is null, $register will be returned and cleared.
+ * If $messages is null and $register is empty, all messages will be
+ * returned and removed.
+ *
+ * @important This function handles the standard {@link system_message()} ($register =
+ * 'messages') as well as {@link register_error()} messages ($register = 'errors').
+ *
+ * @param mixed $message Optionally, a single message or array of messages to add, (default: null)
+ * @param string $register Types of message: "error", "success" (default: success)
+ * @param bool $count Count the number of messages (default: false)
+ *
+ * @return bool|array Either the array of messages, or a response regarding
+ * whether the message addition was successful.
+ * @todo Clean up. Separate registering messages and retrieving them.
+ */
+function system_messages($message = null, $register = "success", $count = false) {
+ if (!isset($_SESSION['msg'])) {
+ $_SESSION['msg'] = array();
+ }
+ if (!isset($_SESSION['msg'][$register]) && !empty($register)) {
+ $_SESSION['msg'][$register] = array();
+ }
+ if (!$count) {
+ if (!empty($message) && is_array($message)) {
+ $_SESSION['msg'][$register] = array_merge($_SESSION['msg'][$register], $message);
+ return true;
+ } else if (!empty($message) && is_string($message)) {
+ $_SESSION['msg'][$register][] = $message;
+ return true;
+ } else if (is_null($message)) {
+ if ($register != "") {
+ $returnarray = array();
+ $returnarray[$register] = $_SESSION['msg'][$register];
+ $_SESSION['msg'][$register] = array();
} else {
- return elgg_view("annotation/default",array(
- 'annotation' => $annotation,
- ), $bypass, $debug);
+ $returnarray = $_SESSION['msg'];
+ $_SESSION['msg'] = array();
}
+ return $returnarray;
}
-
-
- /**
- * Returns a view of a list of entities, plus navigation. It is intended that this function
- * be called from other wrapper functions.
- *
- * @see list_entities
- * @see list_user_objects
- * @see list_user_friends_objects
- * @see list_entities_from_metadata
- * @see list_entities_from_metadata_multi
- * @see list_entities_from_relationships
- * @see list_site_members
- *
- * @param array $entities List of entities
- * @param int $count The total number of entities across all pages
- * @param int $offset The current indexing offset
- * @param int $limit The number of entities to display per page
- * @param true|false $fullview Whether or not to display the full view (default: true)
- * @param true|false $viewtypetoggle Whether or not to allow users to toggle to gallery view
- * @param bool $pagination Whether pagination is offered.
- * @return string The list of entities
- */
- function elgg_view_entity_list($entities, $count, $offset, $limit, $fullview = true, $viewtypetoggle = true, $pagination = true) {
-
- $count = (int) $count;
- $offset = (int) $offset;
- $limit = (int) $limit;
-
- $context = get_context();
-
- $html = elgg_view('search/entity_list',array(
- 'entities' => $entities,
- 'count' => $count,
- 'offset' => $offset,
- 'limit' => $limit,
- 'baseurl' => $_SERVER['REQUEST_URI'],
- 'fullview' => $fullview,
- 'context' => $context,
- 'viewtypetoggle' => $viewtypetoggle,
- 'viewtype' => get_input('search_viewtype','list'),
- 'pagination' => $pagination
- ));
-
- return $html;
-
+ } else {
+ if (!empty($register)) {
+ return sizeof($_SESSION['msg'][$register]);
+ } else {
+ $count = 0;
+ foreach ($_SESSION['msg'] as $submessages) {
+ $count += sizeof($submessages);
+ }
+ return $count;
}
+ }
+ return false;
+}
- /**
- * Returns a view of a list of annotations, plus navigation. It is intended that this function
- * be called from other wrapper functions.
- *
- * @param array $annotations List of annotations
- * @param int $count The total number of annotations across all pages
- * @param int $offset The current indexing offset
- * @param int $limit The number of annotations to display per page
- * @return string The list of annotations
- */
-
- function elgg_view_annotation_list($annotations, $count, $offset, $limit) {
-
- $count = (int) $count;
- $offset = (int) $offset;
- $limit = (int) $limit;
-
- $html = "";
-
- $nav = elgg_view('navigation/pagination',array(
-
- 'baseurl' => $_SERVER['REQUEST_URI'],
- 'offset' => $offset,
- 'count' => $count,
- 'limit' => $limit,
- 'word' => 'annoff',
- 'nonefound' => false,
-
- ));
-
- $html .= $nav;
+/**
+ * Counts the number of messages, either globally or in a particular register
+ *
+ * @param string $register Optionally, the register
+ *
+ * @return integer The number of messages
+ */
+function count_messages($register = "") {
+ return system_messages(null, $register, true);
+}
- if (is_array($annotations) && sizeof($annotations) > 0) {
- foreach($annotations as $annotation) {
- $html .= elgg_view_annotation($annotation, "", false);
- }
- }
-
- if ($count)
- $html .= $nav;
-
- return $html;
-
- }
-
- /**
- * Displays an internal layout for the use of a plugin canvas.
- * Takes a variable number of parameters, which are made available
- * in the views as $vars['area1'] .. $vars['areaN'].
- *
- * @param string $layout The name of the views in canvas/layouts/.
- * @return string The layout
- */
- function elgg_view_layout($layout) {
-
- $arg = 1;
- $param_array = array();
- while ($arg < func_num_args()) {
- $param_array['area' . $arg] = func_get_arg($arg);
- $arg++;
- }
- if (elgg_view_exists("canvas/layouts/{$layout}")) {
- return elgg_view("canvas/layouts/{$layout}",$param_array);
- } else {
- return elgg_view("canvas/default",$param_array);
+/**
+ * Display a system message on next page load.
+ *
+ * @see system_messages()
+ *
+ * @param string|array $message Message or messages to add
+ *
+ * @return bool
+ */
+function system_message($message) {
+ return system_messages($message, "success");
+}
+
+/**
+ * Display an error on next page load.
+ *
+ * @see system_messages()
+ *
+ * @param string|array $error Error or errors to add
+ *
+ * @return bool
+ */
+function register_error($error) {
+ return system_messages($error, "error");
+}
+
+/**
+ * Register a callback as an Elgg event handler.
+ *
+ * Events are emitted by Elgg when certain actions occur. Plugins
+ * can respond to these events or halt them completely by registering a handler
+ * as a callback to an event. Multiple handlers can be registered for
+ * the same event and will be executed in order of $priority. Any handler
+ * returning false will halt the execution chain.
+ *
+ * This function is called with the event name, event type, and handler callback name.
+ * Setting the optional $priority allows plugin authors to specify when the
+ * callback should be run. Priorities for plugins should be 1-1000.
+ *
+ * The callback is passed 3 arguments when called: $event, $type, and optional $params.
+ *
+ * $event is the name of event being emitted.
+ * $type is the type of event or object concerned.
+ * $params is an optional parameter passed that can include a related object. See
+ * specific event documentation for details on which events pass what parameteres.
+ *
+ * @tip If a priority isn't specified it is determined by the order the handler was
+ * registered relative to the event and type. For plugins, this generally means
+ * the earlier the plugin is in the load order, the earlier the priorities are for
+ * any event handlers.
+ *
+ * @tip $event and $object_type can use the special keyword 'all'. Handler callbacks registered
+ * with $event = all will be called for all events of type $object_type. Similarly,
+ * callbacks registered with $object_type = all will be called for all events of type
+ * $event, regardless of $object_type. If $event and $object_type both are 'all', the
+ * handler callback will be called for all events.
+ *
+ * @tip Event handler callbacks are considered in the follow order:
+ * - Specific registration where 'all' isn't used.
+ * - Registration where 'all' is used for $event only.
+ * - Registration where 'all' is used for $type only.
+ * - Registration where 'all' is used for both.
+ *
+ * @warning If you use the 'all' keyword, you must have logic in the handler callback to
+ * test the passed parameters before taking an action.
+ *
+ * @tip When referring to events, the preferred syntax is "event, type".
+ *
+ * @internal Events are stored in $CONFIG->events as:
+ * <code>
+ * $CONFIG->events[$event][$type][$priority] = $callback;
+ * </code>
+ *
+ * @param string $event The event type
+ * @param string $object_type The object type
+ * @param string $callback The handler callback
+ * @param int $priority The priority - 0 is default, negative before, positive after
+ *
+ * @return bool
+ * @link http://docs.elgg.org/Tutorials/Plugins/Events
+ * @example events/basic.php Basic example of registering an event handler callback.
+ * @example events/advanced.php Advanced example of registering an event handler
+ * callback and halting execution.
+ * @example events/all.php Example of how to use the 'all' keyword.
+ */
+function elgg_register_event_handler($event, $object_type, $callback, $priority = 500) {
+ global $CONFIG;
+
+ if (empty($event) || empty($object_type)) {
+ return false;
+ }
+
+ if (!isset($CONFIG->events)) {
+ $CONFIG->events = array();
+ }
+ if (!isset($CONFIG->events[$event])) {
+ $CONFIG->events[$event] = array();
+ }
+ if (!isset($CONFIG->events[$event][$object_type])) {
+ $CONFIG->events[$event][$object_type] = array();
+ }
+
+ if (!is_callable($callback, true)) {
+ return false;
+ }
+
+ $priority = max((int) $priority, 0);
+
+ while (isset($CONFIG->events[$event][$object_type][$priority])) {
+ $priority++;
+ }
+ $CONFIG->events[$event][$object_type][$priority] = $callback;
+ ksort($CONFIG->events[$event][$object_type]);
+ return true;
+}
+
+/**
+ * Unregisters a callback for an event.
+ *
+ * @param string $event The event type
+ * @param string $object_type The object type
+ * @param string $callback The callback
+ *
+ * @return void
+ * @since 1.7
+ */
+function elgg_unregister_event_handler($event, $object_type, $callback) {
+ global $CONFIG;
+
+ if (isset($CONFIG->events[$event]) && isset($CONFIG->events[$event][$object_type])) {
+ foreach ($CONFIG->events[$event][$object_type] as $key => $event_callback) {
+ if ($event_callback == $callback) {
+ unset($CONFIG->events[$event][$object_type][$key]);
}
-
- }
-
- /**
- * Returns a view for the page title
- *
- * @param string $title The page title
- * @param string $submenu Should a submenu be displayed? (default false, use not recommended)
- * @return string The HTML (etc)
- */
- function elgg_view_title($title, $submenu = false) {
-
- $title = elgg_view('page_elements/title', array('title' => $title, 'submenu' => $submenu));
-
- return $title;
-
- }
-
- /**
- * Adds an item to the submenu
- *
- * @param string $label The human-readable label
- * @param string $link The URL of the submenu item
- * @param boolean $onclick Used to provide a JS popup to confirm delete
- */
- function add_submenu_item($label, $link, $group = 'a', $onclick = false) {
-
- global $CONFIG;
- if (!isset($CONFIG->submenu)) $CONFIG->submenu = array();
- if (!isset($CONFIG->submenu[$group])) $CONFIG->submenu[$group] = array();
- $item = new stdClass;
- $item->value = $link;
- $item->name = $label;
- $item->onclick = $onclick;
- $CONFIG->submenu[$group][] = $item;
-
}
-
- /**
- * Gets a formatted list of submenu items
- *
- * @return string List of items
- */
- function get_submenu() {
-
- $submenu_total = "";
- global $CONFIG;
-
- if (isset($CONFIG->submenu) && $submenu_register = $CONFIG->submenu) {
-
- $preselected = false;
- $comparevals = array();
- $maxcompareval = 999999;
-
- //asort($submenu_register);
- ksort($submenu_register);
-
- foreach($submenu_register as $groupname => $submenu_register_group) {
- foreach($submenu_register_group as $key => $item) {
-
- if (substr_count($item->value, $_SERVER['REQUEST_URI'])) {
- $comparevals[$key] = levenshtein($item->value, $_SERVER['REQUEST_URI']);
- if ($comparevals[$key] < $maxcompareval) {
- $maxcompareval = $comparevals[$key];
- $preselected = $key;
- $preselectedgroup = $groupname;
- }
- }
-
- }
- }
-
- foreach($submenu_register as $groupname => $submenu_register_group) {
-
- $submenu = "";
-
- foreach($submenu_register_group as $key => $item) {
-
- if ($preselected === false) {
- if (substr_count($item->value, $_SERVER['REQUEST_URI'])) {
- $preselected = $key;
- $preselectedgroup = $groupname;
- $selected = true;
- } else {
- $selected = false;
- }
- } else {
- if ($key == $preselected && $groupname == $preselectedgroup) {
- $selected = true;
- } else {
- $selected = false;
- }
- }
-
- $submenu .= elgg_view('canvas_header/submenu_template',
- array(
- 'href' => $item->value,
- 'label' => $item->name,
- 'onclick' => $item->onclick,
- 'selected' => $selected,
- ));
-
- }
-
- $submenu_total .= elgg_view('canvas_header/submenu_group', array(
- 'submenu' => $submenu,
- 'group_name' => $groupname
- ));
-
+ }
+}
+
+/**
+ * Trigger an Elgg Event and run all handler callbacks registered to that event, type.
+ *
+ * This function runs all handlers registered to $event, $object_type or
+ * the special keyword 'all' for either or both.
+ *
+ * $event is usually a verb: create, update, delete, annotation.
+ *
+ * $object_type is usually a noun: object, group, user, annotation, relationship, metadata.
+ *
+ * $object is usually an Elgg* object assciated with the event.
+ *
+ * @warning Elgg events should only be triggered by core. Plugin authors should use
+ * {@link trigger_elgg_plugin_hook()} instead.
+ *
+ * @tip When referring to events, the preferred syntax is "event, type".
+ *
+ * @internal Only rarely should events be changed, added, or removed in core.
+ * When making changes to events, be sure to first create a ticket on Github.
+ *
+ * @internal @tip Think of $object_type as the primary namespace element, and
+ * $event as the secondary namespace.
+ *
+ * @param string $event The event type
+ * @param string $object_type The object type
+ * @param string $object The object involved in the event
+ *
+ * @return bool The result of running all handler callbacks.
+ * @link http://docs.elgg.org/Tutorials/Core/Events
+ * @internal @example events/emit.php Basic emitting of an Elgg event.
+ */
+function elgg_trigger_event($event, $object_type, $object = null) {
+ global $CONFIG;
+
+ $events = array();
+ if (isset($CONFIG->events[$event][$object_type])) {
+ $events[] = $CONFIG->events[$event][$object_type];
+ }
+ if (isset($CONFIG->events['all'][$object_type])) {
+ $events[] = $CONFIG->events['all'][$object_type];
+ }
+ if (isset($CONFIG->events[$event]['all'])) {
+ $events[] = $CONFIG->events[$event]['all'];
+ }
+ if (isset($CONFIG->events['all']['all'])) {
+ $events[] = $CONFIG->events['all']['all'];
+ }
+
+ $args = array($event, $object_type, $object);
+
+ foreach ($events as $callback_list) {
+ if (is_array($callback_list)) {
+ foreach ($callback_list as $callback) {
+ if (is_callable($callback) && (call_user_func_array($callback, $args) === false)) {
+ return false;
}
-
}
-
- return $submenu_total;
-
}
-
-
- /**
- * Automatically views comments and a comment form relating to the given entity
- *
- * @param ElggEntity $entity The entity to comment on
- * @return string|false The HTML (etc) for the comments, or false on failure
- */
- function elgg_view_comments($entity){
-
- if (!($entity instanceof ElggEntity)) return false;
-
- if ($comments = trigger_plugin_hook('comments',$entity->getType(),array('entity' => $entity),false)) {
-
- return $comments;
+ }
- } else {
- $comments = list_annotations($entity->getGUID(),'generic_comment');
-
- //display the comment form
- $comments .= elgg_view('comments/forms/edit',array('entity' => $entity));
-
- return $comments;
+ return true;
+}
+
+/**
+ * Register a callback as a plugin hook handler.
+ *
+ * Plugin hooks allow developers to losely couple plugins and features by
+ * repsonding to and emitting {@link elgg_trigger_plugin_hook()} customizable hooks.
+ * Handler callbacks can respond to the hook, change the details of the hook, or
+ * ignore it.
+ *
+ * Multiple handlers can be registered for a plugin hook, and each callback
+ * is called in order of priority. If the return value of a handler is not
+ * null, that value is passed to the next callback in the call stack. When all
+ * callbacks have been run, the final value is passed back to the caller
+ * via {@link elgg_trigger_plugin_hook()}.
+ *
+ * Similar to Elgg Events, plugin hook handler callbacks are registered by passing
+ * a hook, a type, and a priority.
+ *
+ * The callback is passed 4 arguments when called: $hook, $type, $value, and $params.
+ *
+ * - str $hook The name of the hook.
+ * - str $type The type of hook.
+ * - mixed $value The return value of the last handler or the default
+ * value if no other handlers have been called.
+ * - mixed $params An optional array of parameters. Used to provide additional
+ * information to plugins.
+ *
+ * @internal Plugin hooks are stored in $CONFIG->hooks as:
+ * <code>
+ * $CONFIG->hooks[$hook][$type][$priority] = $callback;
+ * </code>
+ *
+ * @tip Plugin hooks are similar to Elgg Events in that Elgg emits
+ * a plugin hook when certain actions occur, but a plugin hook allows you to alter the
+ * parameters, as well as halt execution.
+ *
+ * @tip If a priority isn't specified it is determined by the order the handler was
+ * registered relative to the event and type. For plugins, this generally means
+ * the earlier the plugin is in the load order, the earlier the priorities are for
+ * any event handlers.
+ *
+ * @tip Like Elgg Events, $hook and $type can use the special keyword 'all'.
+ * Handler callbacks registered with $hook = all will be called for all hooks
+ * of type $type. Similarly, handlers registered with $type = all will be
+ * called for all hooks of type $event, regardless of $object_type. If $hook
+ * and $type both are 'all', the handler will be called for all hooks.
+ *
+ * @tip Plugin hooks are sometimes used to gather lists from plugins. This is
+ * usually done by pushing elements into an array passed in $params. Be sure
+ * to append to and then return $value so you don't overwrite other plugin's
+ * values.
+ *
+ * @warning Unlike Elgg Events, a handler that returns false will NOT halt the
+ * execution chain.
+ *
+ * @param string $hook The name of the hook
+ * @param string $type The type of the hook
+ * @param callable $callback The name of a valid function or an array with object and method
+ * @param int $priority The priority - 500 is default, lower numbers called first
+ *
+ * @return bool
+ *
+ * @example hooks/register/basic.php Registering for a plugin hook and examining the variables.
+ * @example hooks/register/advanced.php Registering for a plugin hook and changing the params.
+ * @link http://docs.elgg.org/Tutorials/Plugins/Hooks
+ * @since 1.8.0
+ */
+function elgg_register_plugin_hook_handler($hook, $type, $callback, $priority = 500) {
+ global $CONFIG;
+
+ if (empty($hook) || empty($type)) {
+ return false;
+ }
+
+ if (!isset($CONFIG->hooks)) {
+ $CONFIG->hooks = array();
+ }
+ if (!isset($CONFIG->hooks[$hook])) {
+ $CONFIG->hooks[$hook] = array();
+ }
+ if (!isset($CONFIG->hooks[$hook][$type])) {
+ $CONFIG->hooks[$hook][$type] = array();
+ }
+
+ if (!is_callable($callback, true)) {
+ return false;
+ }
+
+ $priority = max((int) $priority, 0);
+
+ while (isset($CONFIG->hooks[$hook][$type][$priority])) {
+ $priority++;
+ }
+ $CONFIG->hooks[$hook][$type][$priority] = $callback;
+ ksort($CONFIG->hooks[$hook][$type]);
+ return true;
+}
+
+/**
+ * Unregister a callback as a plugin hook.
+ *
+ * @param string $hook The name of the hook
+ * @param string $entity_type The name of the type of entity (eg "user", "object" etc)
+ * @param callable $callback The PHP callback to be removed
+ *
+ * @return void
+ * @since 1.8.0
+ */
+function elgg_unregister_plugin_hook_handler($hook, $entity_type, $callback) {
+ global $CONFIG;
+
+ if (isset($CONFIG->hooks[$hook]) && isset($CONFIG->hooks[$hook][$entity_type])) {
+ foreach ($CONFIG->hooks[$hook][$entity_type] as $key => $hook_callback) {
+ if ($hook_callback == $callback) {
+ unset($CONFIG->hooks[$hook][$entity_type][$key]);
}
-
- }
-
- /**
- * Count the number of comments attached to an entity
- *
- * @param ElggEntity $entity
- * @return int Number of comments
- */
- function elgg_count_comments($entity) {
-
- if ($commentno = trigger_plugin_hook('comments:count',$entity->getType(),array('entity' => $entity),false)) {
- return $commentno;
- } else
- return count_annotations($entity->getGUID(), "", "", "generic_comment");
- }
-
- /**
- * Wrapper function to display search listings.
- *
- * @param string $icon The icon for the listing
- * @param string $info Any information that needs to be displayed.
- * @return string The HTML (etc) representing the listing
- */
- function elgg_view_listing($icon, $info) {
- return elgg_view('search/listing',array('icon' => $icon, 'info' => $info));
}
-
- /**
- * Sets an alternative function to handle templates, which will be passed to by elgg_view.
- * This function must take the $view and $vars parameters from elgg_view:
- *
- * function my_template_function(string $view, array $vars = array())
- *
- * @see elgg_view
- *
- * @param string $function_name The name of the function to pass to.
- * @return true|false
- */
- function set_template_handler($function_name) {
- global $CONFIG;
- if (!empty($function_name) && is_callable($function_name)) {
- $CONFIG->template_handler = $function_name;
- return true;
- }
- return false;
+ }
+}
+
+/**
+ * Trigger a Plugin Hook and run all handler callbacks registered to that hook:type.
+ *
+ * This function runs all handlers regsitered to $hook, $type or
+ * the special keyword 'all' for either or both.
+ *
+ * Use $params to send additional information to the handler callbacks.
+ *
+ * $returnvalue Is the initial value to pass to the handlers, which can
+ * then change it. It is useful to use $returnvalue to set defaults.
+ * If no handlers are registered, $returnvalue is immediately returned.
+ *
+ * $hook is usually a verb: import, get_views, output.
+ *
+ * $type is usually a noun: user, ecml, page.
+ *
+ * @tip Like Elgg Events, $hook and $type can use the special keyword 'all'.
+ * Handler callbacks registered with $hook = all will be called for all hooks
+ * of type $type. Similarly, handlers registered with $type = all will be
+ * called for all hooks of type $event, regardless of $object_type. If $hook
+ * and $type both are 'all', the handler will be called for all hooks.
+ *
+ * @internal The checks for $hook and/or $type not being equal to 'all' is to
+ * prevent a plugin hook being registered with an 'all' being called more than
+ * once if the trigger occurs with an 'all'. An example in core of this is in
+ * actions.php:
+ * elgg_trigger_plugin_hook('action_gatekeeper:permissions:check', 'all', ...)
+ *
+ * @see elgg_register_plugin_hook_handler()
+ *
+ * @param string $hook The name of the hook to trigger ("all" will
+ * trigger for all $types regardless of $hook value)
+ * @param string $type The type of the hook to trigger ("all" will
+ * trigger for all $hooks regardless of $type value)
+ * @param mixed $params Additional parameters to pass to the handlers
+ * @param mixed $returnvalue An initial return value
+ *
+ * @return mixed|null The return value of the last handler callback called
+ *
+ * @example hooks/trigger/basic.php Trigger a hook that determins if execution
+ * should continue.
+ * @example hooks/trigger/advanced.php Trigger a hook with a default value and use
+ * the results to populate a menu.
+ * @example hooks/basic.php Trigger and respond to a basic plugin hook.
+ * @link http://docs.elgg.org/Tutorials/Plugins/Hooks
+ *
+ * @since 1.8.0
+ */
+function elgg_trigger_plugin_hook($hook, $type, $params = null, $returnvalue = null) {
+ global $CONFIG;
+
+ $hooks = array();
+ if (isset($CONFIG->hooks[$hook][$type])) {
+ if ($hook != 'all' && $type != 'all') {
+ $hooks[] = $CONFIG->hooks[$hook][$type];
}
-
- /**
- * Extends a view by adding other views to be displayed at the same time.
- *
- * @param string $view The view to add to.
- * @param string $view_name The name of the view to extend
- * @param int $priority The priority, from 0 to 1000, to add at (lowest numbers will be displayed first)
- */
- function extend_view($view, $view_name, $priority = 501, $viewtype = '') {
-
- global $CONFIG;
-
- if (!isset($CONFIG->views)) {
- $CONFIG->views = new stdClass;
- }
- if (!isset($CONFIG->views->extensions)) {
- $CONFIG->views->extensions = array();
- }
- if (!isset($CONFIG->views->extensions[$view])) {
- $CONFIG->views->extensions[$view][500] = "{$view}";
- }
- while(isset($CONFIG->views->extensions[$view][$priority])) {
- $priority++;
- }
- $CONFIG->views->extensions[$view][$priority] = "{$view_name}";
- ksort($CONFIG->views->extensions[$view]);
-
+ }
+ if (isset($CONFIG->hooks['all'][$type])) {
+ if ($type != 'all') {
+ $hooks[] = $CONFIG->hooks['all'][$type];
}
-
- /**
- * Set an alternative base location for a view (as opposed to the default of $CONFIG->viewpath)
- *
- * @param string $view The name of the view
- * @param string $location The base location path
- */
- function set_view_location($view, $location, $viewtype = '') {
-
- global $CONFIG;
-
- if (empty($viewtype))
- $viewtype = 'default';
-
- if (!isset($CONFIG->views)) {
- $CONFIG->views = new stdClass;
- }
- if (!isset($CONFIG->views->locations)) {
- $CONFIG->views->locations = array($viewtype => array(
- $view => $location
- ));
- } else if (!isset($CONFIG->views->locations[$viewtype])) {
- $CONFIG->views->locations[$viewtype] = array(
- $view => $location
- );
- } else {
- $CONFIG->views->locations[$viewtype][$view] = $location;
- }
-
+ }
+ if (isset($CONFIG->hooks[$hook]['all'])) {
+ if ($hook != 'all') {
+ $hooks[] = $CONFIG->hooks[$hook]['all'];
}
-
- /**
- * Auto-registers views from a particular starting location
- *
- * @param string $view_base The base of the view name
- * @param string $folder The folder to begin looking in
- * @param string $base_location_path The base views directory to use with set_view_location
- * @param string $viewtype The type of view we're looking at (default, rss, etc)
- */
- function autoregister_views($view_base, $folder, $base_location_path, $viewtype) {
-
- if (!isset($i)) $i = 0;
- if ($handle = opendir($folder)) {
- while ($view = readdir($handle)) {
- if (!in_array($view,array('.','..','.svn','CVS')) && !is_dir($folder . "/" . $view)) {
- if ((substr_count($view,".php") > 0) || (substr_count($view,".png") > 0)) {
- if (!empty($view_base)) { $view_base_new = $view_base . "/"; } else { $view_base_new = ""; }
- set_view_location($view_base_new . str_replace(".php","",$view), $base_location_path, $viewtype);
- }
- } else if (!in_array($view,array('.','..','.svn','CVS')) && is_dir($folder . "/" . $view)) {
- if (!empty($view_base)) { $view_base_new = $view_base . "/"; } else { $view_base_new = ""; }
- autoregister_views($view_base_new . $view, $folder . "/" . $view, $base_location_path, $viewtype);
+ }
+ if (isset($CONFIG->hooks['all']['all'])) {
+ $hooks[] = $CONFIG->hooks['all']['all'];
+ }
+
+ foreach ($hooks as $callback_list) {
+ if (is_array($callback_list)) {
+ foreach ($callback_list as $hookcallback) {
+ if (is_callable($hookcallback)) {
+ $args = array($hook, $type, $returnvalue, $params);
+ $temp_return_value = call_user_func_array($hookcallback, $args);
+ if (!is_null($temp_return_value)) {
+ $returnvalue = $temp_return_value;
}
}
}
-
-
- }
-
- /**
- * Returns a representation of a full 'page' (which might be an HTML page, RSS file, etc, depending on the current view)
- *
- * @param unknown_type $title
- * @param unknown_type $body
- * @return unknown
- */
- function page_draw($title, $body, $sidebar = "") {
-
- // Draw the page
- echo elgg_view('pageshells/pageshell', array(
- 'title' => $title,
- 'body' => $body,
- 'sidebar' => $sidebar,
- 'sysmessages' => system_messages(null,"")
- )
- );
-
- }
-
- /**
- * Displays a UNIX timestamp in a friendly way (eg "less than a minute ago")
- *
- * @param int $time A UNIX epoch timestamp
- * @return string The friendly time
- */
- function friendly_time($time) {
-
- $diff = time() - ((int) $time);
- if ($diff < 60) {
- return elgg_echo("friendlytime:justnow");
- } else if ($diff < 3600) {
- $diff = round($diff / 60);
- if ($diff == 0) $diff = 1;
- if ($diff > 1)
- return sprintf(elgg_echo("friendlytime:minutes"),$diff);
- return sprintf(elgg_echo("friendlytime:minutes:singular"),$diff);
- } else if ($diff < 86400) {
- $diff = round($diff / 3600);
- if ($diff == 0) $diff = 1;
- if ($diff > 1)
- return sprintf(elgg_echo("friendlytime:hours"),$diff);
- return sprintf(elgg_echo("friendlytime:hours:singular"),$diff);
- } else {
- $diff = round($diff / 86400);
- if ($diff == 0) $diff = 1;
- if ($diff > 1)
- return sprintf(elgg_echo("friendlytime:days"),$diff);
- return sprintf(elgg_echo("friendlytime:days:singular"),$diff);
- }
-
}
+ }
- /**
- * When given a title, returns a version suitable for inclusion in a URL
- *
- * @param string $title The title
- * @return string The optimised title
- */
- function friendly_title($title) {
- $title = trim($title);
- $title = strtolower($title);
- $title = preg_replace("/[^\w ]/","",$title);
- $title = str_replace(" ","-",$title);
- $title = str_replace("--","-",$title);
- return $title;
- }
+ return $returnvalue;
+}
- /**
- * Library loading and handling
- */
-
- /**
- * Recursive function designed to load library files on start
- * (NB: this does not include plugins.)
- *
- * @param string $directory Full path to the directory to start with
- * @param string $file_exceptions A list of filenames (with no paths) you don't ever want to include
- * @param string $file_list A list of files that you know already you want to include
- * @return array Array of full filenames
- */
- function get_library_files($directory, $file_exceptions = array(), $file_list = array()) {
- $extensions_allowed = array('.php');
- if (is_file($directory) && !in_array($directory,$file_exceptions)) {
- $file_list[] = $directory;
- } else if ($handle = opendir($directory)) {
- while ($file = readdir($handle)) {
- if (in_array(strrchr($file, '.'), $extensions_allowed) && !in_array($file,$file_exceptions)) {
- $file_list = get_library_files($directory . "/" . $file, $file_exceptions, $file_list);
- }
- }
- }
-
- return $file_list;
-
- }
-
- /**
- * Ensures that the installation has all the correct files, that PHP is configured correctly, and so on.
- * Leaves appropriate messages in the error register if not.
- *
- * @return true|false True if everything is ok (or Elgg is fit enough to run); false if not.
- */
- function sanitised() {
-
- $sanitised = true;
-
- if (!file_exists(dirname(dirname(__FILE__)) . "/settings.php")) {
- // See if we are being asked to save the file
- $save_vars = get_input('db_install_vars');
- $result = "";
- if ($save_vars)
- {
- $result = create_settings($save_vars, dirname(dirname(__FILE__)) . "/settings.example.php");
-
- if (file_put_contents(dirname(dirname(__FILE__)) . "/settings.php", $result))
- $result = ""; // blank result to stop it being displayed in textarea
-
- }
-
- // Recheck to see if the file is still missing
- if (!file_exists(dirname(dirname(__FILE__)) . "/settings.php")) {
- register_error(elgg_view("messages/sanitisation/settings", array('settings.php' => $result)));
- $sanitised = false;
- }
- }
+/**
+ * Intercepts, logs, and displays uncaught exceptions.
+ *
+ * @warning This function should never be called directly.
+ *
+ * @see http://www.php.net/set-exception-handler
+ *
+ * @param Exception $exception The exception being handled
+ *
+ * @return void
+ * @access private
+ */
+function _elgg_php_exception_handler($exception) {
+ $timestamp = time();
+ error_log("Exception #$timestamp: $exception");
- if (!file_exists(dirname(dirname(dirname(__FILE__))) . "/.htaccess")) {
- if (!@copy(dirname(dirname(dirname(__FILE__))) . "/htaccess_dist", dirname(dirname(dirname(__FILE__))) . "/.htaccess")) {
- register_error(elgg_view("messages/sanitisation/htaccess", array('.htaccess' => file_get_contents(dirname(dirname(dirname(__FILE__))) . "/htaccess_dist"))));
- $sanitised = false;
- }
- }
-
- return $sanitised;
-
+ // Wipe any existing output buffer
+ ob_end_clean();
+
+ // make sure the error isn't cached
+ header("Cache-Control: no-cache, must-revalidate", true);
+ header('Expires: Fri, 05 Feb 1982 00:00:00 -0500', true);
+ // @note Do not send a 500 header because it is not a server error
+
+ try {
+ // we don't want the 'pagesetup', 'system' event to fire
+ global $CONFIG;
+ $CONFIG->pagesetupdone = true;
+
+ elgg_set_viewtype('failsafe');
+ if (elgg_is_admin_logged_in()) {
+ $body = elgg_view("messages/exceptions/admin_exception", array(
+ 'object' => $exception,
+ 'ts' => $timestamp
+ ));
+ } else {
+ $body = elgg_view("messages/exceptions/exception", array(
+ 'object' => $exception,
+ 'ts' => $timestamp
+ ));
}
-
- /**
- * Registers
- */
-
- /**
- * Adds an array with a name to a given generic array register.
- * For example, these are used for menus.
- *
- * @param string $register_name The name of the top-level register
- * @param string $subregister_name The name of the subregister
- * @param mixed $subregister_value The value of the subregister
- * @param array $children_array Optionally, an array of children
- * @return true|false Depending on success
- */
- function add_to_register($register_name, $subregister_name, $subregister_value, $children_array = array()) {
-
- global $CONFIG;
-
- if (empty($register_name) || empty($subregister_name))
- return false;
-
- if (!isset($CONFIG->registers))
- $CONFIG->registers = array();
-
- if (!isset($CONFIG->registers[$register_name]))
- $CONFIG->registers[$register_name] = array();
+ echo elgg_view_page(elgg_echo('exception:title'), $body);
+ } catch (Exception $e) {
+ $timestamp = time();
+ $message = $e->getMessage();
+ echo "Fatal error in exception handler. Check log for Exception #$timestamp";
+ error_log("Exception #$timestamp : fatal error in exception handler : $message");
+ }
+}
+
+/**
+ * Intercepts catchable PHP errors.
+ *
+ * @warning This function should never be called directly.
+ *
+ * @internal
+ * For catchable fatal errors, throws an Exception with the error.
+ *
+ * For non-fatal errors, depending upon the debug settings, either
+ * log the error or ignore it.
+ *
+ * @see http://www.php.net/set-error-handler
+ *
+ * @param int $errno The level of the error raised
+ * @param string $errmsg The error message
+ * @param string $filename The filename the error was raised in
+ * @param int $linenum The line number the error was raised at
+ * @param array $vars An array that points to the active symbol table where error occurred
+ *
+ * @return true
+ * @throws Exception
+ * @access private
+ * @todo Replace error_log calls with elgg_log calls.
+ */
+function _elgg_php_error_handler($errno, $errmsg, $filename, $linenum, $vars) {
+ $error = date("Y-m-d H:i:s (T)") . ": \"$errmsg\" in file $filename (line $linenum)";
+
+ switch ($errno) {
+ case E_USER_ERROR:
+ error_log("PHP ERROR: $error");
+ register_error("ERROR: $error");
+
+ // Since this is a fatal error, we want to stop any further execution but do so gracefully.
+ throw new Exception($error);
+ break;
+
+ case E_WARNING :
+ case E_USER_WARNING :
+ case E_RECOVERABLE_ERROR: // (e.g. type hint violation)
- $subregister = new stdClass;
- $subregister->name = $subregister_name;
- $subregister->value = $subregister_value;
-
- if (is_array($children_array)) {
- $subregister->children = $children_array;
+ // check if the error wasn't suppressed by the error control operator (@)
+ if (error_reporting()) {
+ error_log("PHP WARNING: $error");
}
-
- $CONFIG->registers[$register_name][$subregister_name] = $subregister;
- return true;
-
- }
-
- /**
- * Returns a register object
- *
- * @param string $register_name The name of the register
- * @param mixed $register_value The value of the register
- * @param array $children_array Optionally, an array of children
- * @return false|stdClass Depending on success
- */
- function make_register_object($register_name, $register_value, $children_array = array()) {
-
- if (empty($register_name) || empty($register_value))
- return false;
-
- $register = new stdClass;
- $register->name = $register_name;
- $register->value = $register_value;
- $register->children = $children_array;
-
- return $register;
-
- }
-
- /**
- * If it exists, returns a particular register as an array
- *
- * @param string $register_name The name of the register
- * @return array|false Depending on success
- */
- function get_register($register_name) {
-
- global $CONFIG;
-
- if (isset($CONFIG->registers[$register_name]))
- return $CONFIG->registers[$register_name];
-
- return false;
-
- }
-
- /**
- * Adds an item to the menu register
- *
- * @param string $menu_name The name of the top-level menu
- * @param string $menu_url The URL of the page
- * @param array $menu_children Optionally, an array of submenu items
- * @return true|false Depending on success
- */
- function add_menu($menu_name, $menu_url, $menu_children = array(), $context = "") {
+ break;
+
+ default:
global $CONFIG;
- if (!isset($CONFIG->menucontexts)) {
- $CONFIG->menucontexts = array();
+ if (isset($CONFIG->debug) && $CONFIG->debug === 'NOTICE') {
+ error_log("PHP NOTICE: $error");
}
- if (empty($menu)) {
- get_plugin_name();
- }
- if (empty($context)) {
- $context = get_plugin_name();
- }
- $CONFIG->menucontexts[] = $context;
- return add_to_register('menu',$menu_name,$menu_url, $menu_children);
- }
-
- /**
- * Returns a menu item for use in the children section of add_menu()
- *
- * @param string $menu_name The name of the menu item
- * @param string $menu_url Its URL
- * @return stdClass|false Depending on success
- */
- function menu_item($menu_name, $menu_url) {
- return make_register_object($menu_name, $menu_url);
- }
-
-
- /**
- * Message register handling
- * If no parameter is given, the function returns the array of messages so far and empties it.
- * Otherwise, any message or array of messages is added.
- *
- * @param string|array $message Optionally, a single message or array of messages to add
- * @param string $register By default, "errors". This allows for different types of messages, eg errors.
- * @return true|false|array Either the array of messages, or a response regarding whether the message addition was successful
- */
-
- function system_messages($message = "", $register = "messages", $count = false) {
-
- if (!isset($_SESSION['msg'])) {
- $_SESSION['msg'] = array();
- }
- if (!isset($_SESSION['msg'][$register]) && !empty($register)) {
- $_SESSION['msg'][$register] = array();
- }
- if (!$count) {
- if (!empty($message) && is_array($message)) {
- $_SESSION['msg'][$register] = array_merge($_SESSION['msg'][$register], $message);
- var_export($_SESSION['msg']); exit;
- return true;
- } else if (!empty($message) && is_string($message)) {
- $_SESSION['msg'][$register][] = $message;
- return true;
- } else if (is_null($message)) {
- if ($register != "") {
- $returnarray = $_SESSION['msg'][$register];
- $_SESSION['msg'][$register] = array();
- } else {
- $returnarray = $_SESSION['msg'];
- $_SESSION['msg'] = array();
- }
- return $returnarray;
+ }
+
+ return true;
+}
+
+/**
+ * Display or log a message.
+ *
+ * If $level is >= to the debug setting in {@link $CONFIG->debug}, the
+ * message will be sent to {@link elgg_dump()}. Messages with lower
+ * priority than {@link $CONFIG->debug} are ignored.
+ *
+ * {@link elgg_dump()} outputs all levels but NOTICE to screen by default.
+ *
+ * @note No messages will be displayed unless debugging has been enabled.
+ *
+ * @param string $message User message
+ * @param string $level NOTICE | WARNING | ERROR | DEBUG
+ *
+ * @return bool
+ * @since 1.7.0
+ * @todo This is complicated and confusing. Using int constants for debug levels will
+ * make things easier.
+ */
+function elgg_log($message, $level = 'NOTICE') {
+ global $CONFIG;
+
+ // only log when debugging is enabled
+ if (isset($CONFIG->debug)) {
+ // debug to screen or log?
+ $to_screen = !($CONFIG->debug == 'NOTICE');
+
+ switch ($level) {
+ case 'ERROR':
+ // always report
+ elgg_dump("$level: $message", $to_screen, $level);
+ break;
+ case 'WARNING':
+ case 'DEBUG':
+ // report except if user wants only errors
+ if ($CONFIG->debug != 'ERROR') {
+ elgg_dump("$level: $message", $to_screen, $level);
}
- } else {
- if (!empty($register)) {
- return sizeof($_SESSION['msg'][$register]);
- } else {
- $count = 0;
- foreach($_SESSION['msg'] as $register => $submessages) {
- $count += sizeof($submessages);
- }
- return $count;
+ break;
+ case 'NOTICE':
+ default:
+ // only report when lowest level is desired
+ if ($CONFIG->debug == 'NOTICE') {
+ elgg_dump("$level: $message", FALSE, $level);
}
- }
- return false;
-
- }
-
- /**
- * Counts the number of messages, either globally or in a particular register
- *
- * @param string $register Optionally, the register
- * @return integer The number of messages
- */
- function count_messages($register = "") {
- return system_messages(null,$register,true);
- }
-
- /**
- * An alias for system_messages($message) to handle standard user information messages
- *
- * @param string|array $message Message or messages to add
- * @return true|false Success response
- */
- function system_message($message) {
- return system_messages($message, "messages");
- }
-
- /**
- * An alias for system_messages($message) to handle error messages
- *
- * @param string|array $message Error or errors to add
- * @return true|false Success response
- */
- function register_error($error) {
- return system_messages($error, "errors");
+ break;
}
- /**
- * Event register
- * Adds functions to the register for a particular event, but also calls all functions registered to an event when required
- *
- * Event handler functions must be of the form:
- *
- * event_handler_function($event, $object_type, $object);
- *
- * And must return true or false depending on success. A false will halt the event in its tracks and no more functions will be called.
- *
- * You can then simply register them using the following function. Optionally, this can be called with a priority nominally from 0 to 1000, where functions with lower priority values are called first (note that priorities CANNOT be negative):
- *
- * register_elgg_event_handler($event, $object_type, $function_name [, $priority = 500]);
- *
- * Note that you can also use 'all' in place of both the event and object type.
- *
- * To trigger an event properly, you should always use:
- *
- * trigger_elgg_event($event, $object_type [, $object]);
- *
- * Where $object is optional, and represents the $object_type the event concerns. This will return true if successful, or false if it fails.
- *
- * @param string $event The type of event (eg 'init', 'update', 'delete')
- * @param string $object_type The type of object (eg 'system', 'blog', 'user')
- * @param string $function The name of the function that will handle the event
- * @param int $priority A priority to add new event handlers at. Lower numbers will be called first (default 500)
- * @param boolean $call Set to true to call the event rather than add to it (default false)
- * @param mixed $object Optionally, the object the event is being performed on (eg a user)
- * @return true|false Depending on success
- */
-
- function events($event = "", $object_type = "", $function = "", $priority = 500, $call = false, $object = null) {
-
- global $CONFIG;
-
- if (!isset($CONFIG->events)) {
- $CONFIG->events = array();
- } else if (!isset($CONFIG->events[$event]) && !empty($event)) {
- $CONFIG->events[$event] = array();
- } else if (!isset($CONFIG->events[$event][$object_type]) && !empty($event) && !empty($object_type)) {
- $CONFIG->events[$event][$object_type] = array();
- }
-
- if (!$call) {
-
- if (!empty($event) && !empty($object_type) && is_callable($function)) {
- $priority = (int) $priority;
- if ($priority < 0) $priority = 0;
- while (isset($CONFIG->events[$event][$object_type][$priority])) {
- $priority++;
- }
- $CONFIG->events[$event][$object_type][$priority] = $function;
- ksort($CONFIG->events[$event][$object_type]);
- return true;
- } else {
- return false;
- }
-
- } else {
-
- $return = true;
- if (!empty($CONFIG->events[$event][$object_type]) && is_array($CONFIG->events[$event][$object_type])) {
- foreach($CONFIG->events[$event][$object_type] as $eventfunction) {
- if ($eventfunction($event, $object_type, $object) === false) {
- return false;
- //$return = false;
- //break;
- }
- }
- }
-
- if (!empty($CONFIG->events['all'][$object_type]) && is_array($CONFIG->events['all'][$object_type])) {
- foreach($CONFIG->events['all'][$object_type] as $eventfunction) {
- if ($eventfunction($event, $object_type, $object) === false) {
- return false;
- //$return = false;
- //break;
- }
- }
- }
-
- if (!empty($CONFIG->events[$event]['all']) && is_array($CONFIG->events[$event]['all'])) {
- foreach($CONFIG->events[$event]['all'] as $eventfunction) {
- if ($eventfunction($event, $object_type, $object) === false) {
- return false;
- //$return = false;
- //break;
- }
- }
- }
-
- if (!empty($CONFIG->events['all']['all']) && is_array($CONFIG->events['all']['all'])) {
- foreach($CONFIG->events['all']['all'] as $eventfunction) {
- if ($eventfunction($event, $object_type, $object) === false) {
- return false;
- //$return = false;
- //break;
- }
- }
- }
- return $return;
-
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+/**
+ * Logs or displays $value.
+ *
+ * If $to_screen is true, $value is displayed to screen. Else,
+ * it is handled by PHP's {@link error_log()} function.
+ *
+ * A {@elgg_plugin_hook debug log} is called. If a handler returns
+ * false, it will stop the default logging method.
+ *
+ * @param mixed $value The value
+ * @param bool $to_screen Display to screen?
+ * @param string $level The debug level
+ *
+ * @return void
+ * @since 1.7.0
+ */
+function elgg_dump($value, $to_screen = TRUE, $level = 'NOTICE') {
+ global $CONFIG;
+
+ // plugin can return false to stop the default logging method
+ $params = array(
+ 'level' => $level,
+ 'msg' => $value,
+ 'to_screen' => $to_screen,
+ );
+ if (!elgg_trigger_plugin_hook('debug', 'log', $params, true)) {
+ return;
+ }
+
+ // Do not want to write to screen before page creation has started.
+ // This is not fool-proof but probably fixes 95% of the cases when logging
+ // results in data sent to the browser before the page is begun.
+ if (!isset($CONFIG->pagesetupdone)) {
+ $to_screen = FALSE;
+ }
+
+ // Do not want to write to JS or CSS pages
+ if (elgg_in_context('js') || elgg_in_context('css')) {
+ $to_screen = FALSE;
+ }
+
+ if ($to_screen == TRUE) {
+ echo '<pre>';
+ print_r($value);
+ echo '</pre>';
+ } else {
+ error_log(print_r($value, TRUE));
+ }
+}
+
+/**
+ * Sends a notice about deprecated use of a function, view, etc.
+ *
+ * This function either displays or logs the deprecation message,
+ * depending upon the deprecation policies in {@link CODING.txt}.
+ * Logged messages are sent with the level of 'WARNING'. Only admins
+ * get visual deprecation notices. When non-admins are logged in, the
+ * notices are sent to PHP's log through elgg_dump().
+ *
+ * A user-visual message will be displayed if $dep_version is greater
+ * than 1 minor releases lower than the current Elgg version, or at all
+ * lower than the current Elgg major version.
+ *
+ * @note This will always at least log a warning. Don't use to pre-deprecate things.
+ * This assumes we are releasing in order and deprecating according to policy.
+ *
+ * @see CODING.txt
+ *
+ * @param string $msg Message to log / display.
+ * @param string $dep_version Human-readable *release* version: 1.7, 1.8, ...
+ * @param int $backtrace_level How many levels back to display the backtrace.
+ * Useful if calling from functions that are called
+ * from other places (like elgg_view()). Set to -1
+ * for a full backtrace.
+ *
+ * @return bool
+ * @since 1.7.0
+ */
+function elgg_deprecated_notice($msg, $dep_version, $backtrace_level = 1) {
+ // if it's a major release behind, visual and logged
+ // if it's a 1 minor release behind, visual and logged
+ // if it's for current minor release, logged.
+ // bugfixes don't matter because we are not deprecating between them
+
+ if (!$dep_version) {
+ return false;
+ }
+
+ $elgg_version = get_version(true);
+ $elgg_version_arr = explode('.', $elgg_version);
+ $elgg_major_version = (int)$elgg_version_arr[0];
+ $elgg_minor_version = (int)$elgg_version_arr[1];
+
+ $dep_major_version = (int)$dep_version;
+ $dep_minor_version = 10 * ($dep_version - $dep_major_version);
+
+ $visual = false;
+
+ if (($dep_major_version < $elgg_major_version) ||
+ ($dep_minor_version < $elgg_minor_version)) {
+ $visual = true;
+ }
+
+ $msg = "Deprecated in $dep_major_version.$dep_minor_version: $msg";
+
+ if ($visual && elgg_is_admin_logged_in()) {
+ register_error($msg);
+ }
+
+ // Get a file and line number for the log. Never show this in the UI.
+ // Skip over the function that sent this notice and see who called the deprecated
+ // function itself.
+ $msg .= " Called from ";
+ $stack = array();
+ $backtrace = debug_backtrace();
+ // never show this call.
+ array_shift($backtrace);
+ $i = count($backtrace);
+
+ foreach ($backtrace as $trace) {
+ $stack[] = "[#$i] {$trace['file']}:{$trace['line']}";
+ $i--;
+
+ if ($backtrace_level > 0) {
+ if ($backtrace_level <= 1) {
+ break;
}
-
- return false;
-
- }
-
- /**
- * Alias function for events, that registers a function to a particular kind of event
- *
- * @param string $event The event type
- * @param string $object_type The object type
- * @param string $function The function name
- * @return true|false Depending on success
- */
- function register_elgg_event_handler($event, $object_type, $function, $priority = 500) {
- return events($event, $object_type, $function, $priority);
- }
-
- /**
- * Alias function for events, that triggers a particular kind of event
- *
- * @param string $event The event type
- * @param string $object_type The object type
- * @param string $function The function name
- * @return true|false Depending on success
- */
- function trigger_elgg_event($event, $object_type, $object = null) {
- $return = true;
- $return1 = events($event, $object_type, "", null, true, $object);
- if (!is_null($return1)) $return = $return1;
- return $return;
+ $backtrace_level--;
}
-
- /**
- * Register a function to a plugin hook for a particular entity type, with a given priority.
- *
- * eg if you want the function "export_user" to be called when the hook "export" for "user" entities
- * is run, use:
- *
- * register_plugin_hook("export", "user", "export_user");
- *
- * "all" is a valid value for both $hook and $entity_type. "none" is a valid value for $entity_type.
- *
- * The export_user function would then be defined as:
- *
- * function export_user($hook, $entity_type, $returnvalue, $params);
- *
- * Where $returnvalue is the return value returned by the last function returned by the hook, and
- * $params is an array containing a set of parameters (or nothing).
- *
- * @param string $hook The name of the hook
- * @param string $entity_type The name of the type of entity (eg "user", "object" etc)
- * @param string $function The name of a valid function to be run
- * @param string $priority The priority - 0 is first, 1000 last, default is 500
- * @return true|false Depending on success
- */
- function register_plugin_hook($hook, $entity_type, $function, $priority = 500) {
- global $CONFIG;
-
- if (!isset($CONFIG->hooks)) {
- $CONFIG->hooks = array();
- } else if (!isset($CONFIG->hooks[$hook]) && !empty($hook)) {
- $CONFIG->hooks[$hook] = array();
- } else if (!isset($CONFIG->hooks[$hook][$entity_type]) && !empty($entity_type)) {
- $CONFIG->hooks[$hook][$entity_type] = array();
- }
-
- if (!empty($hook) && !empty($entity_type) && is_callable($function)) {
- $priority = (int) $priority;
- if ($priority < 0) $priority = 0;
- while (isset($CONFIG->hooks[$hook][$entity_type][$priority])) {
- $priority++;
- }
- $CONFIG->hooks[$hook][$entity_type][$priority] = $function;
- ksort($CONFIG->hooks[$hook][$entity_type]);
- return true;
- } else {
- return false;
- }
-
+ }
+
+ $msg .= implode("<br /> -> ", $stack);
+
+ elgg_log($msg, 'WARNING');
+
+ return true;
+}
+
+/**
+ * Returns the current page's complete URL.
+ *
+ * The current URL is assembled using the network's wwwroot and the request URI
+ * in $_SERVER as populated by the web server. This function will include
+ * any schemes, usernames and passwords, and ports.
+ *
+ * @return string The current page URL.
+ */
+function current_page_url() {
+ $url = parse_url(elgg_get_site_url());
+
+ $page = $url['scheme'] . "://";
+
+ // user/pass
+ if ((isset($url['user'])) && ($url['user'])) {
+ $page .= $url['user'];
+ }
+ if ((isset($url['pass'])) && ($url['pass'])) {
+ $page .= ":" . $url['pass'];
+ }
+ if ((isset($url['user']) && $url['user']) ||
+ (isset($url['pass']) && $url['pass'])) {
+ $page .= "@";
+ }
+
+ $page .= $url['host'];
+
+ if ((isset($url['port'])) && ($url['port'])) {
+ $page .= ":" . $url['port'];
+ }
+
+ $page = trim($page, "/");
+
+ $page .= $_SERVER['REQUEST_URI'];
+
+ return $page;
+}
+
+/**
+ * Return the full URL of the current page.
+ *
+ * @return string The URL
+ * @todo Combine / replace with current_page_url()
+ */
+function full_url() {
+ $s = empty($_SERVER["HTTPS"]) ? '' : ($_SERVER["HTTPS"] == "on") ? "s" : "";
+ $protocol = substr(strtolower($_SERVER["SERVER_PROTOCOL"]), 0,
+ strpos(strtolower($_SERVER["SERVER_PROTOCOL"]), "/")) . $s;
+
+ $port = ($_SERVER["SERVER_PORT"] == "80" || $_SERVER["SERVER_PORT"] == "443") ?
+ "" : (":" . $_SERVER["SERVER_PORT"]);
+
+ // This is here to prevent XSS in poorly written browsers used by 80% of the population.
+ // https://github.com/Elgg/Elgg/commit/0c947e80f512cb0a482b1864fd0a6965c8a0cd4a
+ $quotes = array('\'', '"');
+ $encoded = array('%27', '%22');
+
+ return $protocol . "://" . $_SERVER['SERVER_NAME'] . $port .
+ str_replace($quotes, $encoded, $_SERVER['REQUEST_URI']);
+}
+
+/**
+ * Builds a URL from the a parts array like one returned by {@link parse_url()}.
+ *
+ * @note If only partial information is passed, a partial URL will be returned.
+ *
+ * @param array $parts Associative array of URL components like parse_url() returns
+ * @param bool $html_encode HTML Encode the url?
+ *
+ * @return string Full URL
+ * @since 1.7.0
+ */
+function elgg_http_build_url(array $parts, $html_encode = TRUE) {
+ // build only what's given to us.
+ $scheme = isset($parts['scheme']) ? "{$parts['scheme']}://" : '';
+ $host = isset($parts['host']) ? "{$parts['host']}" : '';
+ $port = isset($parts['port']) ? ":{$parts['port']}" : '';
+ $path = isset($parts['path']) ? "{$parts['path']}" : '';
+ $query = isset($parts['query']) ? "?{$parts['query']}" : '';
+
+ $string = $scheme . $host . $port . $path . $query;
+
+ if ($html_encode) {
+ return elgg_format_url($string);
+ } else {
+ return $string;
+ }
+}
+
+/**
+ * Adds action tokens to URL
+ *
+ * As of 1.7.0 action tokens are required on all actions.
+ * Use this function to append action tokens to a URL's GET parameters.
+ * This will preserve any existing GET parameters.
+ *
+ * @note If you are using {@elgg_view input/form} you don't need to
+ * add tokens to the action. The form view automatically handles
+ * tokens.
+ *
+ * @param string $url Full action URL
+ * @param bool $html_encode HTML encode the url? (default: false)
+ *
+ * @return string URL with action tokens
+ * @since 1.7.0
+ * @link http://docs.elgg.org/Tutorials/Actions
+ */
+function elgg_add_action_tokens_to_url($url, $html_encode = FALSE) {
+ $components = parse_url(elgg_normalize_url($url));
+
+ if (isset($components['query'])) {
+ $query = elgg_parse_str($components['query']);
+ } else {
+ $query = array();
+ }
+
+ if (isset($query['__elgg_ts']) && isset($query['__elgg_token'])) {
+ return $url;
+ }
+
+ // append action tokens to the existing query
+ $query['__elgg_ts'] = time();
+ $query['__elgg_token'] = generate_action_token($query['__elgg_ts']);
+ $components['query'] = http_build_query($query);
+
+ // rebuild the full url
+ return elgg_http_build_url($components, $html_encode);
+}
+
+/**
+ * Removes an element from a URL's query string.
+ *
+ * @note You can send a partial URL string.
+ *
+ * @param string $url Full URL
+ * @param string $element The element to remove
+ *
+ * @return string The new URL with the query element removed.
+ * @since 1.7.0
+ */
+function elgg_http_remove_url_query_element($url, $element) {
+ $url_array = parse_url($url);
+
+ if (isset($url_array['query'])) {
+ $query = elgg_parse_str($url_array['query']);
+ } else {
+ // nothing to remove. Return original URL.
+ return $url;
+ }
+
+ if (array_key_exists($element, $query)) {
+ unset($query[$element]);
+ }
+
+ $url_array['query'] = http_build_query($query);
+ $string = elgg_http_build_url($url_array, false);
+ return $string;
+}
+
+/**
+ * Adds an element or elements to a URL's query string.
+ *
+ * @param string $url The URL
+ * @param array $elements Key/value pairs to add to the URL
+ *
+ * @return string The new URL with the query strings added
+ * @since 1.7.0
+ */
+function elgg_http_add_url_query_elements($url, array $elements) {
+ $url_array = parse_url($url);
+
+ if (isset($url_array['query'])) {
+ $query = elgg_parse_str($url_array['query']);
+ } else {
+ $query = array();
+ }
+
+ foreach ($elements as $k => $v) {
+ $query[$k] = $v;
+ }
+
+ $url_array['query'] = http_build_query($query);
+ $string = elgg_http_build_url($url_array, false);
+
+ return $string;
+}
+
+/**
+ * Test if two URLs are functionally identical.
+ *
+ * @tip If $ignore_params is used, neither the name nor its value will be considered when comparing.
+ *
+ * @tip The order of GET params doesn't matter.
+ *
+ * @param string $url1 First URL
+ * @param string $url2 Second URL
+ * @param array $ignore_params GET params to ignore in the comparison
+ *
+ * @return bool
+ * @since 1.8.0
+ */
+function elgg_http_url_is_identical($url1, $url2, $ignore_params = array('offset', 'limit')) {
+ // if the server portion is missing but it starts with / then add the url in.
+ // @todo use elgg_normalize_url()
+ if (elgg_substr($url1, 0, 1) == '/') {
+ $url1 = elgg_get_site_url() . ltrim($url1, '/');
+ }
+
+ if (elgg_substr($url1, 0, 1) == '/') {
+ $url2 = elgg_get_site_url() . ltrim($url2, '/');
+ }
+
+ // @todo - should probably do something with relative URLs
+
+ if ($url1 == $url2) {
+ return TRUE;
+ }
+
+ $url1_info = parse_url($url1);
+ $url2_info = parse_url($url2);
+
+ if (isset($url1_info['path'])) {
+ $url1_info['path'] = trim($url1_info['path'], '/');
+ }
+ if (isset($url2_info['path'])) {
+ $url2_info['path'] = trim($url2_info['path'], '/');
+ }
+
+ // compare basic bits
+ $parts = array('scheme', 'host', 'path');
+
+ foreach ($parts as $part) {
+ if ((isset($url1_info[$part]) && isset($url2_info[$part]))
+ && $url1_info[$part] != $url2_info[$part]) {
+ return FALSE;
+ } elseif (isset($url1_info[$part]) && !isset($url2_info[$part])) {
+ return FALSE;
+ } elseif (!isset($url1_info[$part]) && isset($url2_info[$part])) {
+ return FALSE;
}
-
- /**
- * Triggers a plugin hook, with various parameters as an array. For example, to provide
- * a 'foo' hook that concerns an entity of type 'bar', with a parameter called 'param1'
- * with value 'value1', that by default returns true, you'd call:
- *
- * trigger_plugin_hook('foo', 'bar', array('param1' => 'value1'), true);
- *
- * @see register_plugin_hook
- * @param string $hook The name of the hook to trigger
- * @param string $entity_type The name of the entity type to trigger it for (or "all", or "none")
- * @param array $params Any parameters. It's good practice to name the keys, i.e. by using array('name' => 'value', 'name2' => 'value2')
- * @param mixed $returnvalue An initial return value
- * @return mixed|null The cumulative return value for the plugin hook functions
- */
- function trigger_plugin_hook($hook, $entity_type, $params = null, $returnvalue = null) {
- global $CONFIG;
-
- //if (!isset($CONFIG->hooks) || !isset($CONFIG->hooks[$hook]) || !isset($CONFIG->hooks[$hook][$entity_type]))
- // return $returnvalue;
-
- if (!empty($CONFIG->hooks[$hook][$entity_type]) && is_array($CONFIG->hooks[$hook][$entity_type])) {
- foreach($CONFIG->hooks[$hook][$entity_type] as $hookfunction) {
-
- $temp_return_value = $hookfunction($hook, $entity_type, $returnvalue, $params);
- if (!is_null($temp_return_value)) $returnvalue = $temp_return_value;
- }
- }
- //else
- //if (!isset($CONFIG->hooks['all'][$entity_type]))
- // return $returnvalue;
-
- if (!empty($CONFIG->hooks['all'][$entity_type]) && is_array($CONFIG->hooks['all'][$entity_type])) {
- foreach($CONFIG->hooks['all'][$entity_type] as $hookfunction) {
-
- $temp_return_value = $hookfunction($hook, $entity_type, $returnvalue, $params);
- if (!is_null($temp_return_value)) $returnvalue = $temp_return_value;
- }
- }
- //else
- //if (!isset($CONFIG->hooks[$hook]['all']))
- // return $returnvalue;
-
- if (!empty($CONFIG->hooks[$hook]['all']) && is_array($CONFIG->hooks[$hook]['all'])) {
- foreach($CONFIG->hooks[$hook]['all'] as $hookfunction) {
-
- $temp_return_value = $hookfunction($hook, $entity_type, $returnvalue, $params);
- if (!is_null($temp_return_value)) $returnvalue = $temp_return_value;
- }
- }
- //else
- //if (!isset($CONFIG->hooks['all']['all']))
- // return $returnvalue;
-
- if (!empty($CONFIG->hooks['all']['all']) && is_array($CONFIG->hooks['all']['all'])) {
- foreach($CONFIG->hooks['all']['all'] as $hookfunction) {
-
- $temp_return_value = $hookfunction($hook, $entity_type, $returnvalue, $params);
- if (!is_null($temp_return_value)) $returnvalue = $temp_return_value;
- }
- }
-
- return $returnvalue;
+ }
+
+ // quick compare of get params
+ if (isset($url1_info['query']) && isset($url2_info['query'])
+ && $url1_info['query'] == $url2_info['query']) {
+ return TRUE;
+ }
+
+ // compare get params that might be out of order
+ $url1_params = array();
+ $url2_params = array();
+
+ if (isset($url1_info['query'])) {
+ if ($url1_info['query'] = html_entity_decode($url1_info['query'])) {
+ $url1_params = elgg_parse_str($url1_info['query']);
}
-
- /**
- * Error handling
- */
-
- /**
- * PHP Error handler function.
- * This function acts as a wrapper to catch and report PHP error messages.
- *
- * @see http://www.php.net/set-error-handler
- * @param int $errno The level of the error raised
- * @param string $errmsg The error message
- * @param string $filename The filename the error was raised in
- * @param int $linenum The line number the error was raised at
- * @param array $vars An array that points to the active symbol table at the point that the error occurred
- */
- function __elgg_php_error_handler($errno, $errmsg, $filename, $linenum, $vars)
- {
- $error = date("Y-m-d H:i:s (T)") . ": \"" . $errmsg . "\" in file " . $filename . " (line " . $linenum . ")";
-
- switch ($errno) {
- case E_USER_ERROR:
- error_log("ERROR: " . $error);
- register_error("ERROR: " . $error);
-
- // Since this is a fatal error, we want to stop any further execution but do so gracefully.
- throw new Exception($error);
- break;
-
- case E_WARNING :
- case E_USER_WARNING :
- error_log("WARNING: " . $error);
- // register_error("WARNING: " . $error);
- break;
-
- default:
- global $CONFIG;
- if (isset($CONFIG->debug)) {
- error_log("DEBUG: " . $error);
- }
- // register_error("DEBUG: " . $error);
- }
-
- return true;
+ }
+
+ if (isset($url2_info['query'])) {
+ if ($url2_info['query'] = html_entity_decode($url2_info['query'])) {
+ $url2_params = elgg_parse_str($url2_info['query']);
}
-
- /**
- * Custom exception handler.
- * This function catches any thrown exceptions and handles them appropriately.
- *
- * @see http://www.php.net/set-exception-handler
- * @param Exception $exception The exception being handled
- */
-
- function __elgg_php_exception_handler($exception) {
-
- error_log("*** FATAL EXCEPTION *** : " . $exception);
-
- $body = elgg_view("messages/exceptions/exception",array('object' => $exception));
- echo page_draw(elgg_echo('exception:title'), $body);
-
+ }
+
+ // drop ignored params
+ foreach ($ignore_params as $param) {
+ if (isset($url1_params[$param])) {
+ unset($url1_params[$param]);
}
-
- /**
- * Data lists
- */
-
- $DATALIST_CACHE = array();
-
- /**
- * Get the value of a particular piece of data in the datalist
- *
- * @param string $name The name of the datalist
- * @return string|false Depending on success
- */
- function datalist_get($name) {
-
- global $CONFIG, $DATALIST_CACHE;
-
- // We need this, because sometimes datalists are received before the database is created
- if (!is_db_installed()) return false;
-
- $name = sanitise_string($name);
- if (isset($DATALIST_CACHE[$name]))
- return $DATALIST_CACHE[$name];
-
- // If memcache enabled then cache value in memcache
- $value = null;
- static $datalist_memcache;
- if ((!$datalist_memcache) && (is_memcache_available()))
- $datalist_memcache = new ElggMemcache('datalist_memcache');
- if ($datalist_memcache) $value = $datalist_memcache->load($name);
- if ($value) return $value;
-
- // [Marcus Povey 20090217 : Now retrieving all datalist values on first load as this saves about 9 queries per page]
- $result = get_data("SELECT * from {$CONFIG->dbprefix}datalists");
- if ($result)
- {
- foreach ($result as $row)
- {
- $DATALIST_CACHE[$row->name] = $row->value;
-
- // Cache it if memcache is available
- if ($datalist_memcache) $datalist_memcache->save($name, $row->value);
- }
-
- if (isset($DATALIST_CACHE[$name]))
- return $DATALIST_CACHE[$name];
- }
-
-
- /*if ($row = get_data_row("SELECT value from {$CONFIG->dbprefix}datalists where name = '{$name}' limit 1")) {
- $DATALIST_CACHE[$name] = $row->value;
-
- // Cache it if memcache is available
- if ($datalist_memcache) $datalist_memcache->save($name, $row->value);
-
- return $row->value;
- }*/
-
- return false;
-
+ if (isset($url2_params[$param])) {
+ unset($url2_params[$param]);
}
-
- /**
- * Sets the value for a system-wide piece of data (overwriting a previous value if it exists)
- *
- * @param string $name The name of the datalist
- * @param string $value The new value
- * @return true
- */
- function datalist_set($name, $value) {
-
- global $CONFIG, $DATALIST_CACHE;
-
- $name = sanitise_string($name);
- $value = sanitise_string($value);
-
- // If memcache is available then invalidate the cached copy
- static $datalist_memcache;
- if ((!$datalist_memcache) && (is_memcache_available()))
- $datalist_memcache = new ElggMemcache('datalist_memcache');
- if ($datalist_memcache) $datalist_memcache->delete($name);
-
- //delete_data("delete from {$CONFIG->dbprefix}datalists where name = '{$name}'");
- insert_data("INSERT into {$CONFIG->dbprefix}datalists set name = '{$name}', value = '{$value}' ON DUPLICATE KEY UPDATE value='{$value}'");
-
- $DATALIST_CACHE[$name] = $value;
-
- return true;
-
+ }
+
+ // array_diff_assoc only returns the items in arr1 that aren't in arrN
+ // but not the items that ARE in arrN but NOT in arr1
+ // if arr1 is an empty array, this function will return 0 no matter what.
+ // since we only care if they're different and not how different,
+ // add the results together to get a non-zero (ie, different) result
+ $diff_count = count(array_diff_assoc($url1_params, $url2_params));
+ $diff_count += count(array_diff_assoc($url2_params, $url1_params));
+ if ($diff_count > 0) {
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+/**
+ * Checks for $array[$key] and returns its value if it exists, else
+ * returns $default.
+ *
+ * Shorthand for $value = (isset($array['key'])) ? $array['key'] : 'default';
+ *
+ * @param string $key The key to check.
+ * @param array $array The array to check against.
+ * @param mixed $default Default value to return if nothing is found.
+ * @param bool $strict Return array key if it's set, even if empty. If false,
+ * return $default if the array key is unset or empty.
+ *
+ * @return mixed
+ * @since 1.8.0
+ */
+function elgg_extract($key, array $array, $default = null, $strict = true) {
+ if (!is_array($array)) {
+ return $default;
+ }
+
+ if ($strict) {
+ return (isset($array[$key])) ? $array[$key] : $default;
+ } else {
+ return (isset($array[$key]) && !empty($array[$key])) ? $array[$key] : $default;
+ }
+}
+
+/**
+ * Sorts a 3d array by specific element.
+ *
+ * @warning Will re-index numeric indexes.
+ *
+ * @note This operates the same as the built-in sort functions.
+ * It sorts the array and returns a bool for success.
+ *
+ * Do this: elgg_sort_3d_array_by_value($my_array);
+ * Not this: $my_array = elgg_sort_3d_array_by_value($my_array);
+ *
+ * @param array &$array Array to sort
+ * @param string $element Element to sort by
+ * @param int $sort_order PHP sort order
+ * {@see http://us2.php.net/array_multisort}
+ * @param int $sort_type PHP sort type
+ * {@see http://us2.php.net/sort}
+ *
+ * @return bool
+ */
+function elgg_sort_3d_array_by_value(&$array, $element, $sort_order = SORT_ASC,
+$sort_type = SORT_LOCALE_STRING) {
+
+ $sort = array();
+
+ foreach ($array as $v) {
+ if (isset($v[$element])) {
+ $sort[] = strtolower($v[$element]);
+ } else {
+ $sort[] = NULL;
}
+ };
- /**
- * Runs a function once - not per page load, but per installation.
- * If you like, you can also set the threshold for the function execution - i.e.,
- * if the function was executed before or on $timelastupdatedcheck, this
- * function will run it again.
- *
- * @param string $functionname The name of the function you want to run.
- * @param int $timelastupdatedcheck Optionally, the UNIX epoch timestamp of the execution threshold
- * @return true|false Depending on success.
- */
- function run_function_once($functionname, $timelastupdatedcheck = 0) {
- if ($lastupdated = datalist_get($functionname)) {
- $lastupdated = (int) $lastupdated;
- } else {
- $lastupdated = 0;
- }
- if (is_callable($functionname) && $lastupdated <= $timelastupdatedcheck) {
- $functionname();
- datalist_set($functionname,time());
- return true;
+ return array_multisort($sort, $sort_order, $sort_type, $array);
+}
+
+/**
+ * Return the state of a php.ini setting as a bool
+ *
+ * @warning Using this on ini settings that are not boolean
+ * will be inaccurate!
+ *
+ * @param string $ini_get_arg The INI setting
+ *
+ * @return bool Depending on whether it's on or off
+ */
+function ini_get_bool($ini_get_arg) {
+ $temp = strtolower(ini_get($ini_get_arg));
+
+ if ($temp == '1' || $temp == 'on' || $temp == 'true') {
+ return true;
+ }
+ return false;
+}
+
+/**
+ * Returns a PHP INI setting in bytes.
+ *
+ * @tip Use this for arithmetic when determining if a file can be uploaded.
+ *
+ * @param string $setting The php.ini setting
+ *
+ * @return int
+ * @since 1.7.0
+ * @link http://www.php.net/manual/en/function.ini-get.php
+ */
+function elgg_get_ini_setting_in_bytes($setting) {
+ // retrieve INI setting
+ $val = ini_get($setting);
+
+ // convert INI setting when shorthand notation is used
+ $last = strtolower($val[strlen($val) - 1]);
+ switch($last) {
+ case 'g':
+ $val *= 1024;
+ // fallthrough intentional
+ case 'm':
+ $val *= 1024;
+ // fallthrough intentional
+ case 'k':
+ $val *= 1024;
+ }
+
+ // return byte value
+ return $val;
+}
+
+/**
+ * Returns true is string is not empty, false, or null.
+ *
+ * Function to be used in array_filter which returns true if $string is not null.
+ *
+ * @param string $string The string to test
+ *
+ * @return bool
+ * @todo This is used once in metadata.php. Use a lambda function instead.
+ */
+function is_not_null($string) {
+ if (($string === '') || ($string === false) || ($string === null)) {
+ return false;
+ }
+
+ return true;
+}
+
+/**
+ * Normalise the singular keys in an options array to plural keys.
+ *
+ * Used in elgg_get_entities*() functions to support shortcutting plural
+ * names by singular names.
+ *
+ * @param array $options The options array. $options['keys'] = 'values';
+ * @param array $singulars A list of singular words to pluralize by adding 's'.
+ *
+ * @return array
+ * @since 1.7.0
+ * @access private
+ */
+function elgg_normalise_plural_options_array($options, $singulars) {
+ foreach ($singulars as $singular) {
+ $plural = $singular . 's';
+
+ if (array_key_exists($singular, $options)) {
+ if ($options[$singular] === ELGG_ENTITIES_ANY_VALUE) {
+ $options[$plural] = $options[$singular];
} else {
- return false;
+ // Test for array refs #2641
+ if (!is_array($options[$singular])) {
+ $options[$plural] = array($options[$singular]);
+ } else {
+ $options[$plural] = $options[$singular];
+ }
}
}
-
-
- /**
- * Privilege elevation and gatekeeper code
- */
+ unset($options[$singular]);
+ }
-
- /**
- * Gatekeeper function which ensures that a we are being executed from
- * a specified location.
- *
- * To use, call this function with the function name (and optional file location) that it has to be called
- * from, it will either return true or false.
- *
- * e.g.
- *
- * function my_secure_function()
- * {
- * if (!call_gatekeeper("my_call_function"))
- * return false;
- *
- * ... do secure stuff ...
- * }
- *
- * function my_call_function()
- * {
- * // will work
- * my_secure_function();
- * }
- *
- * function bad_function()
- * {
- * // Will not work
- * my_secure_function();
- * }
- *
- * @param mixed $function The function that this function must have in its call stack,
- * to test against a method pass an array containing a class and method name.
- * @param string $file Optional file that the function must reside in.
- */
- function call_gatekeeper($function, $file = "")
- {
- // Sanity check
- if (!$function)
- return false;
-
- // Check against call stack to see if this is being called from the correct location
- $callstack = debug_backtrace();
- $stack_element = false;
-
- foreach ($callstack as $call)
- {
- if (is_array($function))
- {
- if (
- (strcmp($call['class'], $function[0]) == 0) &&
- (strcmp($call['function'], $function[1]) == 0)
- )
- $stack_element = $call;
- }
- else
- {
- if (strcmp($call['function'], $function) == 0)
- $stack_element = $call;
- }
+ return $options;
+}
+
+/**
+ * Emits a shutdown:system event upon PHP shutdown, but before database connections are dropped.
+ *
+ * @tip Register for the shutdown:system event to perform functions at the end of page loads.
+ *
+ * @warning Using this event to perform long-running functions is not very
+ * useful. Servers will hold pages until processing is done before sending
+ * them out to the browser.
+ *
+ * @see http://www.php.net/register-shutdown-function
+ *
+ * @return void
+ * @see register_shutdown_hook()
+ * @access private
+ */
+function _elgg_shutdown_hook() {
+ global $START_MICROTIME;
+
+ try {
+ elgg_trigger_event('shutdown', 'system');
+
+ $time = (float)(microtime(TRUE) - $START_MICROTIME);
+ // demoted to NOTICE from DEBUG so javascript is not corrupted
+ elgg_log("Page {$_SERVER['REQUEST_URI']} generated in $time seconds", 'NOTICE');
+ } catch (Exception $e) {
+ $message = 'Error: ' . get_class($e) . ' thrown within the shutdown handler. ';
+ $message .= "Message: '{$e->getMessage()}' in file {$e->getFile()} (line {$e->getLine()})";
+ error_log($message);
+ error_log("Exception trace stack: {$e->getTraceAsString()}");
+ }
+}
+
+/**
+ * Serve javascript pages.
+ *
+ * Searches for views under js/ and outputs them with special
+ * headers for caching control.
+ *
+ * @param array $page The page array
+ *
+ * @return bool
+ * @elgg_pagehandler js
+ * @access private
+ */
+function elgg_js_page_handler($page) {
+ return elgg_cacheable_view_page_handler($page, 'js');
+}
+
+/**
+ * Serve individual views for Ajax.
+ *
+ * /ajax/view/<name of view>?<key/value params>
+ *
+ * @param array $page The page array
+ *
+ * @return bool
+ * @elgg_pagehandler ajax
+ * @access private
+ */
+function elgg_ajax_page_handler($page) {
+ if (is_array($page) && sizeof($page)) {
+ // throw away 'view' and form the view name
+ unset($page[0]);
+ $view = implode('/', $page);
+
+ $allowed_views = elgg_get_config('allowed_ajax_views');
+ if (!array_key_exists($view, $allowed_views)) {
+ header('HTTP/1.1 403 Forbidden');
+ exit;
}
- if (!$stack_element)
- return false;
+ // pull out GET parameters through filter
+ $vars = array();
+ foreach ($_GET as $name => $value) {
+ $vars[$name] = get_input($name);
+ }
-
- // If file then check that this it is being called from this function
- if ($file)
- {
- $mirror = null;
-
- if (is_array($function))
- $mirror = new ReflectionMethod($function[0], $function[1]);
- else
- $mirror = new ReflectionFunction($function);
-
- if ((!$mirror) || (strcmp($file,$mirror->getFileName())!=0))
- return false;
+ if (isset($vars['guid'])) {
+ $vars['entity'] = get_entity($vars['guid']);
}
-
-
+
+ echo elgg_view($view, $vars);
return true;
}
-
- /**
- * This function checks to see if it is being called at somepoint by a function defined somewhere
- * on a given path (optionally including subdirectories).
- *
- * This function is similar to call_gatekeeper() but returns true if it is being called by a method or function which has been defined on a given path or by a specified file.
- *
- * @param string $path The full path and filename that this function must have in its call stack If a partial path is given and $include_subdirs is true, then the function will return true if called by any function in or below the specified path.
- * @param bool $include_subdirs Are subdirectories of the path ok, or must you specify an absolute path and filename.
- * @param bool $strict_mode If true then the calling method or function must be directly called by something on $path, if false the whole call stack is searched.
- */
- function callpath_gatekeeper($path, $include_subdirs = true, $strict_mode = false)
- {
- global $CONFIG;
-
- $path = sanitise_string($path);
-
- if ($path)
- {
- $callstack = debug_backtrace();
-
- foreach ($callstack as $call)
- {
- $call['file'] = str_replace("\\","/",$call['file']);
-
- if ($include_subdirs)
- {
- if (strpos($call['file'], $path) === 0) {
-
- if ($strict_mode) {
- $callstack[1]['file'] = str_replace("\\","/",$callstack[1]['file']);
- if ($callstack[1] === $call) { return true; }
- }
- else
- {
- return true;
- }
- }
- }
- else
- {
- if (strcmp($path, $call['file'])==0) {
- if ($strict_mode) {
- if ($callstack[1] === $call) return true;
- } else
- return true;
- }
- }
-
- }
- return false;
- }
-
- if ($CONFIG->debug)
- system_message("Gatekeeper'd function called from {$callstack[1]['file']}:{$callstack[1]['line']}\n\nStack trace:\n\n" . print_r($callstack, true));
-
- return false;
- }
-
- /**
- * Returns true or false depending on whether a PHP .ini setting is on or off
- *
- * @param string $ini_get_arg The INI setting
- * @return true|false Depending on whether it's on or off
- */
- function ini_get_bool($ini_get_arg) {
- $temp = ini_get($ini_get_arg);
-
- if ($temp == '1' or strtolower($temp) == 'on') {
- return true;
- }
- return false;
+ return false;
+}
+
+/**
+ * Serve CSS
+ *
+ * Serves CSS from the css views directory with headers for caching control
+ *
+ * @param array $page The page array
+ *
+ * @return bool
+ * @elgg_pagehandler css
+ * @access private
+ */
+function elgg_css_page_handler($page) {
+ if (!isset($page[0])) {
+ // default css
+ $page[0] = 'elgg';
}
- /**
- * Function to be used in array_filter which returns true if $string is not null.
- *
- * @param string $string
- * @return bool
- */
- function is_not_null($string)
- {
- if (($string==='') || ($string===false) || ($string===null))
+ return elgg_cacheable_view_page_handler($page, 'css');
+}
+
+/**
+ * Serves a JS or CSS view with headers for caching.
+ *
+ * /<css||js>/name/of/view.<last_cache>.<css||js>
+ *
+ * @param array $page The page array
+ * @param string $type The type: js or css
+ *
+ * @return bool
+ * @access private
+ */
+function elgg_cacheable_view_page_handler($page, $type) {
+
+ switch ($type) {
+ case 'js':
+ $content_type = 'text/javascript';
+ break;
+
+ case 'css':
+ $content_type = 'text/css';
+ break;
+
+ default:
return false;
+ break;
+ }
+
+ if ($page) {
+ // the view file names can have multiple dots
+ // eg: views/default/js/calendars/jquery.fullcalendar.min.php
+ // translates to the url /js/calendars/jquery.fullcalendar.min.<ts>.js
+ // and the view js/calendars/jquery.fullcalendar.min
+ // we ignore the last two dots for the ts and the ext.
+ // Additionally, the timestamp is optional.
+ $page = implode('/', $page);
+ $regex = '|(.+?)\.([\d]+\.)?\w+$|';
+ preg_match($regex, $page, $matches);
+ $view = $matches[1];
+ $return = elgg_view("$type/$view");
+
+ header("Content-type: $content_type");
+ // @todo should js be cached when simple cache turned off
+ //header('Expires: ' . gmdate('D, d M Y H:i:s \G\M\T', strtotime("+10 days")), true);
+ //header("Pragma: public");
+ //header("Cache-Control: public");
+ //header("Content-Length: " . strlen($return));
+
+ echo $return;
return true;
}
-
- /**
- * Get the full URL of the current page.
- *
- * @return string The URL
- */
- function full_url()
- {
- $s = empty($_SERVER["HTTPS"]) ? '' : ($_SERVER["HTTPS"] == "on") ? "s" : "";
- $protocol = substr(strtolower($_SERVER["SERVER_PROTOCOL"]), 0, strpos(strtolower($_SERVER["SERVER_PROTOCOL"]), "/")) . $s;
- $port = ($_SERVER["SERVER_PORT"] == "80") ? "" : (":".$_SERVER["SERVER_PORT"]);
- return $protocol . "://" . $_SERVER['SERVER_NAME'] . $port . $_SERVER['REQUEST_URI'];
- }
-
- /**
- * Useful function found in the comments on the PHP man page for ip2long.
- * Returns 1 if an IP matches a given range.
- *
- * TODO: Check licence... assuming this is PD since it was found several places on the interwebs..
- * please check or rewrite.
- *
- * Matches:
- * xxx.xxx.xxx.xxx (exact)
- * xxx.xxx.xxx.[yyy-zzz] (range)
- * xxx.xxx.xxx.xxx/nn (nn = # bits, cisco style -- i.e. /24 = class C)
- * Does not match:
- * xxx.xxx.xxx.xx[yyy-zzz] (range, partial octets not supported)
- */
- function test_ip($range, $ip)
- {
- $result = 1;
-
- # IP Pattern Matcher
- # J.Adams <jna@retina.net>
- #
- # Matches:
- #
- # xxx.xxx.xxx.xxx (exact)
- # xxx.xxx.xxx.[yyy-zzz] (range)
- # xxx.xxx.xxx.xxx/nn (nn = # bits, cisco style -- i.e. /24 = class C)
- #
- # Does not match:
- # xxx.xxx.xxx.xx[yyy-zzz] (range, partial octets not supported)
-
-
- if (ereg("([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)/([0-9]+)",$range,$regs)) {
-
- # perform a mask match
- $ipl = ip2long($ip);
- $rangel = ip2long($regs[1] . "." . $regs[2] . "." . $regs[3] . "." . $regs[4]);
-
- $maskl = 0;
-
- for ($i = 0; $i< 31; $i++) {
- if ($i < $regs[5]-1) {
- $maskl = $maskl + pow(2,(30-$i));
- }
- }
-
- if (($maskl & $rangel) == ($maskl & $ipl)) {
- return 1;
- } else {
- return 0;
- }
- } else {
-
- # range based
- $maskocts = split("\.",$range);
- $ipocts = split("\.",$ip);
-
- # perform a range match
- for ($i=0; $i<4; $i++) {
- if (ereg("\[([0-9]+)\-([0-9]+)\]",$maskocts[$i],$regs)) {
- if ( ($ipocts[$i] > $regs[2]) || ($ipocts[$i] < $regs[1])) {
- $result = 0;
- }
- }
- else
- {
- if ($maskocts[$i] <> $ipocts[$i]) {
- $result = 0;
- }
- }
- }
- }
- return $result;
+ return false;
+}
+
+/**
+ * Reverses the ordering in an ORDER BY clause. This is achived by replacing
+ * asc with desc, or appending desc to the end of the clause.
+ *
+ * This is used mostly for elgg_get_entities() and other similar functions.
+ *
+ * @param string $order_by An order by clause
+ * @access private
+ * @return string
+ * @access private
+ */
+function elgg_sql_reverse_order_by_clause($order_by) {
+ $order_by = strtolower($order_by);
+
+ if (strpos($order_by, ' asc') !== false) {
+ $return = str_replace(' asc', ' desc', $order_by);
+ } elseif (strpos($order_by, ' desc') !== false) {
+ $return = str_replace(' desc', ' asc', $order_by);
+ } else {
+ // no order specified, so default to desc since mysql defaults to asc
+ $return = $order_by . ' desc';
}
-
- /**
- * Match an IP address against a number of ip addresses or ranges, returning true if found.
- *
- * @param array $networks
- * @param string $ip
- * @return bool
- */
- function is_ip_in_array(array $networks, $ip)
- {
- global $SYSTEM_LOG;
-
- foreach ($networks as $network)
- {
- if (test_ip(trim($network), $ip))
- return true;
- }
-
+
+ return $return;
+}
+
+/**
+ * Enable objects with an enable() method.
+ *
+ * Used as a callback for ElggBatch.
+ *
+ * @todo why aren't these static methods on ElggBatch?
+ *
+ * @param object $object The object to enable
+ * @return bool
+ * @access private
+ */
+function elgg_batch_enable_callback($object) {
+ // our db functions return the number of rows affected...
+ return $object->enable() ? true : false;
+}
+
+/**
+ * Disable objects with a disable() method.
+ *
+ * Used as a callback for ElggBatch.
+ *
+ * @param object $object The object to disable
+ * @return bool
+ * @access private
+ */
+function elgg_batch_disable_callback($object) {
+ // our db functions return the number of rows affected...
+ return $object->disable() ? true : false;
+}
+
+/**
+ * Delete objects with a delete() method.
+ *
+ * Used as a callback for ElggBatch.
+ *
+ * @param object $object The object to disable
+ * @return bool
+ * @access private
+ */
+function elgg_batch_delete_callback($object) {
+ // our db functions return the number of rows affected...
+ return $object->delete() ? true : false;
+}
+
+/**
+ * Checks if there are some constraints on the options array for
+ * potentially dangerous operations.
+ *
+ * @param array $options Options array
+ * @param string $type Options type: metadata or annotations
+ * @return bool
+ * @access private
+ */
+function elgg_is_valid_options_for_batch_operation($options, $type) {
+ if (!$options || !is_array($options)) {
return false;
}
-
- /**
- * An interface for objects that behave as elements within a social network that have a profile.
- *
- */
- interface Friendable {
-
- /**
- * Adds a user as a friend
- *
- * @param int $friend_guid The GUID of the user to add
- */
- public function addFriend($friend_guid);
-
- /**
- * Removes a user as a friend
- *
- * @param int $friend_guid The GUID of the user to remove
- */
- public function removeFriend($friend_guid);
-
- /**
- * Determines whether or not the current user is a friend of this entity
- *
- */
- public function isFriend();
-
- /**
- * Determines whether or not this entity is friends with a particular entity
- *
- * @param int $user_guid The GUID of the entity this entity may or may not be friends with
- */
- public function isFriendsWith($user_guid);
-
- /**
- * Determines whether or not a foreign entity has made this one a friend
- *
- * @param int $user_guid The GUID of the foreign entity
- */
- public function isFriendOf($user_guid);
-
- /**
- * Returns this entity's friends
- *
- * @param string $subtype The subtype of entity to return
- * @param int $limit The number of entities to return
- * @param int $offset Indexing offset
- */
- public function getFriends($subtype = "", $limit = 10, $offset = 0);
-
- /**
- * Returns entities that have made this entity a friend
- *
- * @param string $subtype The subtype of entity to return
- * @param int $limit The number of entities to return
- * @param int $offset Indexing offset
- */
- public function getFriendsOf($subtype = "", $limit = 10, $offset = 0);
-
- /**
- * Returns objects in this entity's container
- *
- * @param string $subtype The subtype of entity to return
- * @param int $limit The number of entities to return
- * @param int $offset Indexing offset
- */
- public function getObjects($subtype="", $limit = 10, $offset = 0);
-
- /**
- * Returns objects in the containers of this entity's friends
- *
- * @param string $subtype The subtype of entity to return
- * @param int $limit The number of entities to return
- * @param int $offset Indexing offset
- */
- public function getFriendsObjects($subtype = "", $limit = 10, $offset = 0);
-
- /**
- * Returns the number of object entities in this entity's container
- *
- * @param string $subtype The subtype of entity to count
- */
- public function countObjects($subtype = "");
-
+
+ // at least one of these is required.
+ $required = array(
+ // generic restraints
+ 'guid', 'guids'
+ );
+
+ switch ($type) {
+ case 'metadata':
+ $metadata_required = array(
+ 'metadata_owner_guid', 'metadata_owner_guids',
+ 'metadata_name', 'metadata_names',
+ 'metadata_value', 'metadata_values'
+ );
+
+ $required = array_merge($required, $metadata_required);
+ break;
+
+ case 'annotations':
+ case 'annotation':
+ $annotations_required = array(
+ 'annotation_owner_guid', 'annotation_owner_guids',
+ 'annotation_name', 'annotation_names',
+ 'annotation_value', 'annotation_values'
+ );
+
+ $required = array_merge($required, $annotations_required);
+ break;
+
+ default:
+ return false;
}
-
- function js_page_handler($page) {
-
- if (is_array($page) && sizeof($page)) {
- $js = str_replace('.js','',$page[0]);
- $return = elgg_view('js/' . $js);
-
- header('Content-type: text/javascript');
- header('Expires: ' . date('r',time() + 864000));
- header("Pragma: public");
- header("Cache-Control: public");
- header("Content-Length: " . strlen($return));
-
- echo $return;
- exit;
+
+ foreach ($required as $key) {
+ // check that it exists and is something.
+ if (isset($options[$key]) && $options[$key]) {
+ return true;
}
-
}
-
- /**
- * This function is a shutdown hook registered on startup which does nothing more than trigger a
- * shutdown event when the script is shutting down, but before database connections have been dropped etc.
- *
- */
- function __elgg_shutdown_hook()
- {
- global $CONFIG, $START_MICROTIME;
-
- trigger_elgg_event('shutdown', 'system');
-
- if ($CONFIG->debug)
- error_log("Page {$_SERVER['REQUEST_URI']} generated in ".(float)(microtime(true)-$START_MICROTIME)." seconds");
+
+ return false;
+}
+
+/**
+ * Intercepts the index page when Walled Garden mode is enabled.
+ *
+ * @link http://docs.elgg.org/Tutorials/WalledGarden
+ * @elgg_plugin_hook index system
+ *
+ * @param string $hook The name of the hook
+ * @param string $type The type of hook
+ * @param bool $value Has a plugin already rendered an index page?
+ * @param array $params Array of parameters (should be empty)
+ * @return bool
+ * @access private
+ */
+function elgg_walled_garden_index($hook, $type, $value, $params) {
+ if ($value) {
+ // do not create a second index page so return
+ return;
}
+
+ elgg_load_css('elgg.walled_garden');
+ elgg_load_js('elgg.walled_garden');
- function elgg_init() {
+ $content = elgg_view('core/walled_garden/login');
- // Menu
- global $CONFIG;
- //add_menu(elgg_echo('content:latest'), $CONFIG->wwwroot . 'dashboard/latest.php');
- // Page handler for JS
- register_page_handler('js','js_page_handler');
- extend_view('js/initialise_elgg','embed/js');
- // Register an event triggered at system shutdown
- register_shutdown_function('__elgg_shutdown_hook');
+ $params = array(
+ 'content' => $content,
+ 'class' => 'elgg-walledgarden-double',
+ 'id' => 'elgg-walledgarden-login',
+ );
+ $body = elgg_view_layout('walled_garden', $params);
+ echo elgg_view_page('', $body, 'walled_garden');
+ // return true to prevent other plugins from adding a front page
+ return true;
+}
+
+/**
+ * Serve walled garden sections
+ *
+ * @param array $page Array of URL segments
+ * @return string
+ * @access private
+ */
+function _elgg_walled_garden_ajax_handler($page) {
+ $view = $page[0];
+ $params = array(
+ 'content' => elgg_view("core/walled_garden/$view"),
+ 'class' => 'elgg-walledgarden-single hidden',
+ 'id' => str_replace('_', '-', "elgg-walledgarden-$view"),
+ );
+ echo elgg_view_layout('walled_garden', $params);
+ return true;
+}
+
+/**
+ * Checks the status of the Walled Garden and forwards to a login page
+ * if required.
+ *
+ * If the site is in Walled Garden mode, all page except those registered as
+ * plugin pages by {@elgg_hook public_pages walled_garden} will redirect to
+ * a login page.
+ *
+ * @since 1.8.0
+ * @elgg_event_handler init system
+ * @link http://docs.elgg.org/Tutorials/WalledGarden
+ * @return void
+ * @access private
+ */
+function elgg_walled_garden() {
+ global $CONFIG;
+
+ elgg_register_css('elgg.walled_garden', '/css/walled_garden.css');
+ elgg_register_js('elgg.walled_garden', '/js/walled_garden.js');
+
+ elgg_register_page_handler('walled_garden', '_elgg_walled_garden_ajax_handler');
+
+ // check for external page view
+ if (isset($CONFIG->site) && $CONFIG->site instanceof ElggSite) {
+ $CONFIG->site->checkWalledGarden();
}
+}
+
+/**
+ * Remove public access for walled gardens
+ *
+ * @param string $hook
+ * @param string $type
+ * @param array $accesses
+ * @return array
+ * @access private
+ */
+function _elgg_walled_garden_remove_public_access($hook, $type, $accesses) {
+ if (isset($accesses[ACCESS_PUBLIC])) {
+ unset($accesses[ACCESS_PUBLIC]);
+ }
+ return $accesses;
+}
+
+/**
+ * Boots the engine
+ *
+ * 1. sets error handlers
+ * 2. connects to database
+ * 3. verifies the installation suceeded
+ * 4. loads application configuration
+ * 5. loads i18n data
+ * 6. loads site configuration
+ *
+ * @access private
+ */
+function _elgg_engine_boot() {
+ // Register the error handlers
+ set_error_handler('_elgg_php_error_handler');
+ set_exception_handler('_elgg_php_exception_handler');
+
+ setup_db_connections();
+
+ verify_installation();
+
+ _elgg_load_application_config();
+
+ _elgg_load_site_config();
+
+ _elgg_session_boot();
+
+ _elgg_load_cache();
+
+ _elgg_load_translations();
+}
+
+/**
+ * Elgg's main init.
+ *
+ * Handles core actions for comments, the JS pagehandler, and the shutdown function.
+ *
+ * @elgg_event_handler init system
+ * @return void
+ * @access private
+ */
+function elgg_init() {
+ global $CONFIG;
+
+ elgg_register_action('comments/add');
+ elgg_register_action('comments/delete');
+
+ elgg_register_page_handler('js', 'elgg_js_page_handler');
+ elgg_register_page_handler('css', 'elgg_css_page_handler');
+ elgg_register_page_handler('ajax', 'elgg_ajax_page_handler');
+
+ elgg_register_js('elgg.autocomplete', 'js/lib/ui.autocomplete.js');
+ elgg_register_js('jquery.ui.autocomplete.html', 'vendors/jquery/jquery.ui.autocomplete.html.js');
+ elgg_register_js('elgg.userpicker', 'js/lib/ui.userpicker.js');
+ elgg_register_js('elgg.friendspicker', 'js/lib/ui.friends_picker.js');
+ elgg_register_js('jquery.easing', 'vendors/jquery/jquery.easing.1.3.packed.js');
+ elgg_register_js('elgg.avatar_cropper', 'js/lib/ui.avatar_cropper.js');
+ elgg_register_js('jquery.imgareaselect', 'vendors/jquery/jquery.imgareaselect-0.9.8/scripts/jquery.imgareaselect.min.js');
+ elgg_register_js('elgg.ui.river', 'js/lib/ui.river.js');
+
+ elgg_register_css('jquery.imgareaselect', 'vendors/jquery/jquery.imgareaselect-0.9.8/css/imgareaselect-deprecated.css');
- function elgg_boot() {
-
- // Actions
- register_action('comments/add');
- register_action('comments/delete');
-
- elgg_view_register_simplecache('css');
- elgg_view_register_simplecache('js/friendsPickerv1');
- elgg_view_register_simplecache('js/initialise_elgg');
- }
-
- /**
- * Some useful constant definitions
- */
- define('ACCESS_PRIVATE',0);
- define('ACCESS_LOGGED_IN',1);
- define('ACCESS_PUBLIC',2);
-
- register_elgg_event_handler('init','system','elgg_init');
- register_elgg_event_handler('boot','system','elgg_boot',1000);
+ // Trigger the shutdown:system event upon PHP shutdown.
+ register_shutdown_function('_elgg_shutdown_hook');
+
+ $logo_url = elgg_get_site_url() . "_graphics/elgg_toolbar_logo.gif";
+ elgg_register_menu_item('topbar', array(
+ 'name' => 'elgg_logo',
+ 'href' => 'http://www.elgg.org/',
+ 'text' => "<img src=\"$logo_url\" alt=\"Elgg logo\" width=\"38\" height=\"20\" />",
+ 'priority' => 1,
+ 'link_class' => 'elgg-topbar-logo',
+ ));
-?> \ No newline at end of file
+ // Sets a blacklist of words in the current language.
+ // This is a comma separated list in word:blacklist.
+ // @todo possibly deprecate
+ $CONFIG->wordblacklist = array();
+ $list = explode(',', elgg_echo('word:blacklist'));
+ if ($list) {
+ foreach ($list as $l) {
+ $CONFIG->wordblacklist[] = trim($l);
+ }
+ }
+}
+
+/**
+ * Adds unit tests for the general API.
+ *
+ * @param string $hook unit_test
+ * @param string $type system
+ * @param array $value array of test files
+ * @param array $params empty
+ *
+ * @elgg_plugin_hook unit_tests system
+ * @return array
+ * @access private
+ */
+function elgg_api_test($hook, $type, $value, $params) {
+ global $CONFIG;
+ $value[] = $CONFIG->path . 'engine/tests/api/entity_getter_functions.php';
+ $value[] = $CONFIG->path . 'engine/tests/api/helpers.php';
+ $value[] = $CONFIG->path . 'engine/tests/regression/trac_bugs.php';
+ return $value;
+}
+
+/**#@+
+ * Controls access levels on ElggEntity entities, metadata, and annotations.
+ *
+ * @warning ACCESS_DEFAULT is a place holder for the input/access view. Do not
+ * use it when saving an entity.
+ *
+ * @var int
+ */
+define('ACCESS_DEFAULT', -1);
+define('ACCESS_PRIVATE', 0);
+define('ACCESS_LOGGED_IN', 1);
+define('ACCESS_PUBLIC', 2);
+define('ACCESS_FRIENDS', -2);
+/**#@-*/
+
+/**
+ * Constant to request the value of a parameter be ignored in elgg_get_*() functions
+ *
+ * @see elgg_get_entities()
+ * @var NULL
+ * @since 1.7
+ */
+define('ELGG_ENTITIES_ANY_VALUE', NULL);
+
+/**
+ * Constant to request the value of a parameter be nothing in elgg_get_*() functions.
+ *
+ * @see elgg_get_entities()
+ * @var int 0
+ * @since 1.7
+ */
+define('ELGG_ENTITIES_NO_VALUE', 0);
+
+/**
+ * Used in calls to forward() to specify the browser should be redirected to the
+ * referring page.
+ *
+ * @see forward
+ * @var int -1
+ */
+define('REFERRER', -1);
+
+/**
+ * Alternate spelling for REFERRER. Included because of some bad documentation
+ * in the original HTTP spec.
+ *
+ * @see forward()
+ * @link http://en.wikipedia.org/wiki/HTTP_referrer#Origin_of_the_term_referer
+ * @var int -1
+ */
+define('REFERER', -1);
+
+elgg_register_event_handler('init', 'system', 'elgg_init');
+elgg_register_event_handler('boot', 'system', '_elgg_engine_boot', 1);
+elgg_register_plugin_hook_handler('unit_test', 'system', 'elgg_api_test');
+
+elgg_register_event_handler('init', 'system', 'add_custom_menu_items', 1000);
+elgg_register_event_handler('init', 'system', 'elgg_walled_garden', 1000);
diff --git a/engine/lib/entities.php b/engine/lib/entities.php
index a873fa67a..4fcf1c657 100644
--- a/engine/lib/entities.php
+++ b/engine/lib/entities.php
@@ -1,2741 +1,2590 @@
-<?php
- /**
- * Elgg entities.
- * Functions to manage all elgg entities (sites, collections, objects and users).
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd <info@elgg.com>
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
-
- /// Cache objects in order to minimise database access.
- $ENTITY_CACHE = NULL;
-
- /// Cache subtype searches
- $SUBTYPE_CACHE = NULL;
-
- /// Require the locatable interface TODO: Move this into start.php?
- require_once('location.php');
-
- /**
- * ElggEntity The elgg entity superclass
- * This class holds methods for accessing the main entities table.
- *
- * @author Curverider Ltd <info@elgg.com>
- * @package Elgg
- * @subpackage Core
- */
- abstract class ElggEntity implements
- Notable, // Calendar interface
- Locatable, // Geocoding interface
- Exportable, // Allow export of data
- Importable, // Allow import of data
- Loggable, // Can events related to this object class be logged
- Iterator, // Override foreach behaviour
- ArrayAccess // Override for array access
- {
- /**
- * The main attributes of an entity.
- * Blank entries for all database fields should be created by the constructor.
- * Subclasses should add to this in their constructors.
- * Any field not appearing in this will be viewed as a
- */
- protected $attributes;
-
- /**
- * If set, overrides the value of getURL()
- */
- protected $url_override;
-
- /**
- * Icon override, overrides the value of getIcon().
- */
- protected $icon_override;
-
- /**
- * Temporary cache for metadata, permitting meta data access before a guid has obtained.
- */
- protected $temp_metadata;
-
- /**
- * Temporary cache for annotations, permitting meta data access before a guid has obtained.
- */
- protected $temp_annotations;
-
- /**
- * Initialise the attributes array.
- * This is vital to distinguish between metadata and base parameters.
- *
- * Place your base parameters here.
- *
- * @return void
- */
- protected function initialise_attributes()
- {
- initialise_entity_cache();
-
- // Create attributes array if not already created
- if (!is_array($this->attributes)) $this->attributes = array();
- if (!is_array($this->temp_metadata)) $this->temp_metadata = array();
- if (!is_array($this->temp_annotations)) $this->temp_annotations = array();
-
- $this->attributes['guid'] = "";
- $this->attributes['type'] = "";
- $this->attributes['subtype'] = "";
-
- $this->attributes['owner_guid'] = get_loggedin_userid();
- $this->attributes['container_guid'] = get_loggedin_userid();
-
- $this->attributes['site_guid'] = 0;
- $this->attributes['access_id'] = ACCESS_PRIVATE;
- $this->attributes['time_created'] = "";
- $this->attributes['time_updated'] = "";
- $this->attributes['enabled'] = "yes";
-
- // There now follows a bit of a hack
- /* Problem: To speed things up, some objects are split over several tables, this means that it requires
- * n number of database reads to fully populate an entity. This causes problems for caching and create events
- * since it is not possible to tell whether a subclassed entity is complete.
- * Solution: We have two counters, one 'tables_split' which tells whatever is interested how many tables
- * are going to need to be searched in order to fully populate this object, and 'tables_loaded' which is how
- * many have been loaded thus far.
- * If the two are the same then this object is complete.
- *
- * Use: isFullyLoaded() to check
- */
- $this->attributes['tables_split'] = 1;
- $this->attributes['tables_loaded'] = 0;
- }
-
- /**
- * Return the value of a given key.
- * If $name is a key field (as defined in $this->attributes) that value is returned, otherwise it will
- * then look to see if the value is in this object's metadata.
- *
- * Q: Why are we not using __get overload here?
- * A: Because overload operators cause problems during subclassing, so we put the code here and
- * create overloads in subclasses.
- *
- * @param string $name
- * @return mixed Returns the value of a given value, or null.
- */
- public function get($name)
- {
- // See if its in our base attribute
- if (isset($this->attributes[$name])) {
- return $this->attributes[$name];
- }
-
- // No, so see if its in the meta data for this entity
- $meta = $this->getMetaData($name);
- if ($meta)
- return $meta;
-
- // Can't find it, so return null
- return null;
- }
-
- /**
- * Set the value of a given key, replacing it if necessary.
- * If $name is a base attribute (as defined in $this->attributes) that value is set, otherwise it will
- * set the appropriate item of metadata.
- *
- * Note: It is important that your class populates $this->attributes with keys for all base attributes, anything
- * not in their gets set as METADATA.
- *
- * Q: Why are we not using __set overload here?
- * A: Because overload operators cause problems during subclassing, so we put the code here and
- * create overloads in subclasses.
- *
- * @param string $name
- * @param mixed $value
- */
- public function set($name, $value)
- {
- if (array_key_exists($name, $this->attributes))
- {
- // Check that we're not trying to change the guid!
- if ((array_key_exists('guid', $this->attributes)) && ($name=='guid'))
- return false;
-
- $this->attributes[$name] = $value;
- }
- else
- return $this->setMetaData($name, $value);
-
- return true;
- }
-
- /**
- * Get a given piece of metadata.
- *
- * @param string $name
- */
- public function getMetaData($name)
- {
- if ((int) ($this->guid) > 0) {
- $md = get_metadata_byname($this->getGUID(), $name);
- } else {
- if (isset($this->temp_metadata[$name]))
- return $this->temp_metadata[$name];
- }
-
- if ($md && !is_array($md)) {
- return $md->value;
- } else if ($md && is_array($md)) {
- return metadata_array_to_values($md);
- }
-
- return null;
- }
-
- /**
- * Class member get overloading
- *
- * @param string $name
- * @return mixed
- */
- function __get($name) { return $this->get($name); }
-
- /**
- * Class member set overloading
- *
- * @param string $name
- * @param mixed $value
- * @return mixed
- */
- function __set($name, $value) { return $this->set($name, $value); }
-
- /**
- * Supporting isset.
- *
- * @param string $name The name of the attribute or metadata.
- * @return bool
- */
- function __isset($name) { if ($this->$name!="") return true; else return false; }
-
- /**
- * Supporting unsetting of magic attributes.
- *
- * @param string $name The name of the attribute or metadata.
- */
- function __unset($name)
- {
- if (array_key_exists($name, $this->attributes))
- $this->attributes[$name] = "";
- else
- $this->clearMetaData($name);
- }
-
- /**
- * Set a piece of metadata.
- *
- * @param string $name
- * @param mixed $value
- * @param string $value_type
- * @param bool $multiple
- * @return bool
- */
- public function setMetaData($name, $value, $value_type = "", $multiple = false)
- {
- if (is_array($value))
- {
- unset($this->temp_metadata[$name]);
- remove_metadata($this->getGUID(), $name);
- foreach ($value as $v) {
- if ((int) $this->guid > 0) {
- $multiple = true;
- if (!create_metadata($this->getGUID(), $name, $v, $value_type, $this->getOwner(), $this->getAccessID(), $multiple)) return false;
- } else {
- if (($multiple) && (isset($this->temp_metadata[$name])))
- {
- if (!is_array($this->temp_metadata[$name]))
- {
- $tmp = $this->temp_metadata[$name];
- $this->temp_metadata[$name] = array();
- $this->temp_metadata[$name][] = $tmp;
- }
-
- $this->temp_metadata[$name][] = $value;
- }
- else
- $this->temp_metadata[$name] = $value;
- }
- }
-
- return true;
- }
- else
- {
- unset($this->temp_metadata[$name]);
- if ((int) $this->guid > 0) {
- return create_metadata($this->getGUID(), $name, $value, $value_type, $this->getOwner(), $this->getAccessID(), $multiple);
- } else {
- //$this->temp_metadata[$name] = $value;
-
- if (($multiple) && (isset($this->temp_metadata[$name])))
- {
- if (!is_array($this->temp_metadata[$name]))
- {
- $tmp = $this->temp_metadata[$name];
- $this->temp_metadata[$name] = array();
- $this->temp_metadata[$name][] = $tmp;
- }
-
- $this->temp_metadata[$name][] = $value;
- }
- else
- $this->temp_metadata[$name] = $value;
-
- return true;
- }
- }
- }
-
- /**
- * Clear metadata.
- */
- public function clearMetaData($name = "")
- {
- if (empty($name)) {
- return clear_metadata($this->getGUID());
- } else {
- return remove_metadata($this->getGUID(),$name);
- }
- }
-
- /**
- * Remove all entities associated with this entity
- *
- * @return true
- */
- public function clearRelationships() {
- remove_entity_relationships($this->getGUID());
- remove_entity_relationships($this->getGUID(),"",true);
- return true;
- }
-
- /**
- * Add a relationship.
- *
- * @param int $guid Relationship to link to.
- * @param string $relationship The type of relationship.
- */
- public function addRelationship($guid, $relationship)
- {
- return add_entity_relationship($this->getGUID(), $relationship, $guid);
- }
-
- function setPrivateSetting($name, $value) {
- return set_private_setting($this->getGUID(), $name, $value);
- }
-
- function getPrivateSetting($name) {
- return get_private_setting($this->getGUID(), $name);
- }
-
- function removePrivateSetting($name) {
- return remove_private_setting($this->getGUID(), $name);
- }
-
- /**
- * Adds an annotation to an entity. By default, the type is detected automatically; however,
- * it can also be set. Note that by default, annotations are private.
- *
- * @param string $name
- * @param mixed $value
- * @param int $access_id
- * @param int $owner_id
- * @param string $vartype
- */
- function annotate($name, $value, $access_id = ACCESS_PRIVATE, $owner_id = 0, $vartype = "")
- {
- if ((int) $this->guid > 0) {
- return create_annotation($this->getGUID(), $name, $value, $vartype, $owner_id, $access_id);
- } else {
- $this->temp_annotations[$name] = $value;
- }
- return true;
- }
-
- /**
- * Get the annotations for an entity.
- *
- * @param string $name
- * @param int $limit
- * @param int $offset
- * @param string $order
- */
- function getAnnotations($name, $limit = 50, $offset = 0, $order="asc")
- {
- if ((int) ($this->guid) > 0) {
- return get_annotations($this->getGUID(), "", "", $name, "", 0, $limit, $offset, $order);
- } else {
- return $this->temp_annotations[$name];
- }
- }
-
- /**
- * Remove all annotations or all annotations for this entity.
- *
- * @param string $name
- */
- function clearAnnotations($name = "")
- {
- return clear_annotations($this->getGUID(), $name);
- }
-
- /**
- * Return the annotations for the entity.
- *
- * @param string $name The type of annotation.
- */
- function countAnnotations($name = "")
- {
- return count_annotations($this->getGUID(), "","",$name);
- }
-
- /**
- * Get the average of an integer type annotation.
- *
- * @param string $name
- */
- function getAnnotationsAvg($name)
- {
- return get_annotations_avg($this->getGUID(), "","",$name);
- }
-
- /**
- * Get the sum of integer type annotations of a given name.
- *
- * @param string $name
- */
- function getAnnotationsSum($name)
- {
- return get_annotations_sum($this->getGUID(), "","",$name);
- }
-
- /**
- * Get the minimum of integer type annotations of given name.
- *
- * @param string $name
- */
- function getAnnotationsMin($name)
- {
- return get_annotations_min($this->getGUID(), "","",$name);
- }
-
- /**
- * Get the maximum of integer type annotations of a given name.
- *
- * @param string $name
- */
- function getAnnotationsMax($name)
- {
- return get_annotations_max($this->getGUID(), "","",$name);
- }
-
- /**
- * Gets an array of entities from a specific relationship type
- *
- * @param string $relationship Relationship type (eg "friends")
- * @param true|false $inverse Is this an inverse relationship?
- * @param int $limit Number of elements to return
- * @param int $offset Indexing offset
- * @return array|false An array of entities or false on failure
- */
- function getEntitiesFromRelationship($relationship, $inverse = false, $limit = 50, $offset = 0) {
- return get_entities_from_relationship($relationship,$this->getGUID(),$inverse,"","","","time_created desc",$limit,$offset);
- }
-
- /**
- * Gets the number of of entities from a specific relationship type
- *
- * @param string $relationship Relationship type (eg "friends")
- * @return int|false The number of entities or false on failure
- */
- function countEntitiesFromRelationship($relationship) {
- return get_entities_from_relationship($relationship,$this->getGUID(),false,"","","","time_created desc",null,null,true);
- }
-
- /**
- * Determines whether or not the specified user (by default the current one) can edit the entity
- *
- * @param int $user_guid The user GUID, optionally (defaults to the currently logged in user)
- * @return true|false
- */
- function canEdit($user_guid = 0) {
- return can_edit_entity($this->getGUID(),$user_guid);
- }
-
- /**
- * Determines whether or not the specified user (by default the current one) can edit metadata on the entity
- *
- * @param ElggMetadata $metadata The piece of metadata to specifically check
- * @param int $user_guid The user GUID, optionally (defaults to the currently logged in user)
- * @return true|false
- */
- function canEditMetadata($metadata = null, $user_guid = 0) {
- return can_edit_entity_metadata($this->getGUID(), $user_guid, $metadata);
- }
-
- /**
- * Returns whether the given user (or current user) has the ability to write to this group.
- *
- * @param int $user_guid The user.
- * @return bool
- */
- public function canWriteToContainer($user_guid = 0)
- {
- return can_write_to_container($user_guid, $this->getGUID());
- }
-
- /**
- * Obtain this entity's access ID
- *
- * @return int The access ID
- */
- public function getAccessID() { return $this->get('access_id'); }
-
- /**
- * Obtain this entity's GUID
- *
- * @return int GUID
- */
- public function getGUID() { return $this->get('guid'); }
-
- /**
- * Get the owner of this entity
- *
- * @return int The owner GUID
- */
- public function getOwner() { return $this->get('owner_guid'); }
-
- /**
- * Returns the actual entity of the user who owns this entity, if any
- *
- * @return ElggEntity The owning user
- */
- public function getOwnerEntity() { return get_entity($this->get('owner_guid')); }
-
- /**
- * Gets the type of entity this is
- *
- * @return string Entity type
- */
- public function getType() { return $this->get('type'); }
-
- /**
- * Returns the subtype of this entity
- *
- * @return string The entity subtype
- */
- public function getSubtype() {
- if (!((int) $this->guid > 0)) return $this->get('subtype'); // If this object hasn't been saved, then return the subtype string.
-
- return get_subtype_from_id($this->get('subtype'));
- }
-
- /**
- * Gets the UNIX epoch time that this entity was created
- *
- * @return int UNIX epoch time
- */
- public function getTimeCreated() { return $this->get('time_created'); }
-
- /**
- * Gets the UNIX epoch time that this entity was last updated
- *
- * @return int UNIX epoch time
- */
- public function getTimeUpdated() { return $this->get('time_updated'); }
-
- /**
- * Gets the display URL for this entity
- *
- * @return string The URL
- */
- public function getURL() {
- if (!empty($this->url_override)) return $this->url_override;
- return get_entity_url($this->getGUID());
- }
-
- /**
- * Overrides the URL returned by getURL
- *
- * @param string $url The new item URL
- * @return string The URL
- */
- public function setURL($url) {
- $this->url_override = $url;
- return $url;
- }
-
- /**
- * Return a url for the entity's icon, trying multiple alternatives.
- *
- * @param string $size Either 'large','medium','small' or 'tiny'
- * @return string The url or false if no url could be worked out.
- */
- public function getIcon($size = 'medium')
- {
- if (isset($this->icon_override[$size])) return $this->icon_override[$size];
- return get_entity_icon_url($this, $size);
- }
-
- /**
- * Set an icon override for an icon and size.
- *
- * @param string $url The url of the icon.
- * @param string $size The size its for.
- * @return bool
- */
- public function setIcon($url, $size = 'medium')
- {
- $url = sanitise_string($url);
- $size = sanitise_string($size);
-
- if (!$this->icon_override) $this->icon_override = array();
- $this->icon_override[$size] = $url;
-
- return true;
- }
-
- /**
- * Tests to see whether the object has been fully loaded.
- *
- * @return bool
- */
- public function isFullyLoaded() { return ! ($this->attributes['tables_loaded'] < $this->attributes['tables_split']); }
-
- /**
- * Save generic attributes to the entities table.
- */
- public function save()
- {
- $guid = (int) $this->guid;
- if ($guid > 0)
- {
- cache_entity($this);
-
- return update_entity(
- $this->get('guid'),
- $this->get('owner_guid'),
- $this->get('access_id'),
- $this->get('container_guid')
- );
- }
- else
- {
- $this->attributes['guid'] = create_entity($this->attributes['type'], $this->attributes['subtype'], $this->attributes['owner_guid'], $this->attributes['access_id'], $this->attributes['site_guid'], $this->attributes['container_guid']); // Create a new entity (nb: using attribute array directly 'cos set function does something special!)
- if (!$this->attributes['guid']) throw new IOException(elgg_echo('IOException:BaseEntitySaveFailed'));
-
- // Save any unsaved metadata TODO: How to capture extra information (access id etc)
- if (sizeof($this->temp_metadata) > 0) {
- foreach($this->temp_metadata as $name => $value) {
- $this->$name = $value;
- unset($this->temp_metadata[$name]);
- }
- }
-
- // Save any unsaved annotations metadata. TODO: How to capture extra information (access id etc)
- if (sizeof($this->temp_annotations) > 0) {
- foreach($this->temp_annotations as $name => $value) {
- $this->annotate($name, $value);
- unset($this->temp_annotations[$name]);
- }
- }
-
- // Cache object handle
- if ($this->attributes['guid']) cache_entity($this);
-
- return $this->attributes['guid'];
- }
- }
-
- /**
- * Load the basic entity information and populate base attributes array.
- *
- * @param int $guid
- */
- protected function load($guid)
- {
- $row = get_entity_as_row($guid);
-
- if ($row)
- {
- // Create the array if necessary - all subclasses should test before creating
- if (!is_array($this->attributes)) $this->attributes = array();
-
- // Now put these into the attributes array as core values
- $objarray = (array) $row;
- foreach($objarray as $key => $value)
- $this->attributes[$key] = $value;
-
- // Increment the portion counter
- if (!$this->isFullyLoaded()) $this->attributes['tables_loaded'] ++;
-
- // Cache object handle
- if ($this->attributes['guid']) cache_entity($this);
-
- return true;
- }
-
- return false;
- }
-
- /**
- * Disable this entity.
- *
- * @param string $reason Optional reason
- */
- public function disable($reason = "")
- {
- return disable_entity($this->get('guid'), $reason);
- }
-
- /**
- * Re-enable this entity.
- */
- public function enable()
- {
- return enable_entity($this->get('guid'));
- }
-
- /**
- * Is this entity enabled?
- *
- * @return boolean
- */
- public function isEnabled()
- {
- if ($this->enabled == 'yes')
- return true;
-
- return false;
- }
-
- /**
- * Delete this entity.
- */
- public function delete()
- {
- $res = delete_entity($this->get('guid'));
- return $res;
- }
-
- // LOCATABLE INTERFACE /////////////////////////////////////////////////////////////
-
- /** Interface to set the location */
- public function setLocation($location)
- {
- $location = sanitise_string($location);
-
- $this->location = $location;
-
- return true;
- }
-
- /**
- * Set latitude and longitude tags for a given entity.
- *
- * @param float $lat
- * @param float $long
- */
- public function setLatLong($lat, $long)
- {
- $lat = sanitise_string($lat);
- $long = sanitise_string($long);
-
- $this->set('geo:lat', $lat);
- $this->set('geo:long', $long);
-
- return true;
- }
-
- /**
- * Get the contents of the ->geo:lat field.
- *
- */
- public function getLatitude() { return $this->get('geo:lat'); }
-
- /**
- * Get the contents of the ->geo:lat field.
- *
- */
- public function getLongitude() { return $this->get('geo:long'); }
-
- /**
- * Get the ->location metadata.
- *
- */
- public function getLocation() { return $this->get('location'); }
-
- // NOTABLE INTERFACE ///////////////////////////////////////////////////////////////
-
- /**
- * Calendar functionality.
- * This function sets the time of an object on a calendar listing.
- *
- * @param int $hour If ommitted, now is assumed.
- * @param int $minute If ommitted, now is assumed.
- * @param int $second If ommitted, now is assumed.
- * @param int $day If ommitted, now is assumed.
- * @param int $month If ommitted, now is assumed.
- * @param int $year If ommitted, now is assumed.
- * @param int $duration Duration of event, remainder of the day is assumed.
- */
- public function setCalendarTimeAndDuration($hour = NULL, $minute = NULL, $second = NULL, $day = NULL, $month = NULL, $year = NULL, $duration = NULL)
- {
- $start = mktime($hour, $minute, $second, $month, $day, $year);
- $end = $start + abs($duration);
- if (!$duration)
- $end = get_day_end($day,$month,$year);
-
- $this->calendar_start = $start;
- $this->calendar_end = $end;
-
- return true;
- }
-
- /**
- * Return the start timestamp.
- */
- public function getCalendarStartTime() { return (int)$this->calendar_start; }
-
- /**
- * Return the end timestamp.
- */
- public function getCalendarEndTime() { return (int)$this->calendar_end; }
-
- // EXPORTABLE INTERFACE ////////////////////////////////////////////////////////////
-
- /**
- * Return an array of fields which can be exported.
- */
- public function getExportableValues()
- {
- return array(
- 'guid',
- 'type',
- 'subtype',
- 'time_created',
- 'container_guid',
- 'owner_guid',
- );
- }
-
- /**
- * Export this class into an array of ODD Elements containing all necessary fields.
- * Override if you wish to return more information than can be found in $this->attributes (shouldn't happen)
- */
- public function export()
- {
- $tmp = array();
-
- // Generate uuid
- $uuid = guid_to_uuid($this->getGUID());
-
- // Create entity
- $odd = new ODDEntity(
- $uuid,
- $this->attributes['type'],
- get_subtype_from_id($this->attributes['subtype'])
- );
-
- $tmp[] = $odd;
-
- $exportable_values = $this->getExportableValues();
-
- // Now add its attributes
- foreach ($this->attributes as $k => $v)
- {
- $meta = NULL;
-
- if (in_array( $k, $exportable_values)) {
- switch ($k)
- {
- case 'guid' : // Dont use guid in OpenDD
- case 'type' : // Type and subtype already taken care of
- case 'subtype' :
- break;
-
- case 'time_created' : // Created = published
- $odd->setAttribute('published', date("r", $v));
- break;
-
- case 'site_guid' : // Container
- $k = 'site_uuid';
- $v = guid_to_uuid($v);
- $meta = new ODDMetaData($uuid . "attr/$k/", $uuid, $k, $v);
- break;
-
- case 'container_guid' : // Container
- $k = 'container_uuid';
- $v = guid_to_uuid($v);
- $meta = new ODDMetaData($uuid . "attr/$k/", $uuid, $k, $v);
- break;
-
- case 'owner_guid' : // Convert owner guid to uuid, this will be stored in metadata
- $k = 'owner_uuid';
- $v = guid_to_uuid($v);
- $meta = new ODDMetaData($uuid . "attr/$k/", $uuid, $k, $v);
- break;
-
- default :
- $meta = new ODDMetaData($uuid . "attr/$k/", $uuid, $k, $v);
- }
-
- // set the time of any metadata created
- if ($meta)
- {
- $meta->setAttribute('published', date("r",$this->time_created));
- $tmp[] = $meta;
- }
- }
- }
-
- // Now we do something a bit special.
- /*
- * This provides a rendered view of the entity to foreign sites.
- */
-
- elgg_set_viewtype('default');
- $view = elgg_view_entity($this, true);
- elgg_set_viewtype();
-
- $tmp[] = new ODDMetaData($uuid . "volatile/renderedentity/", $uuid, 'renderedentity', $view , 'volatile');
-
-
- return $tmp;
- }
-
- // IMPORTABLE INTERFACE ////////////////////////////////////////////////////////////
-
- /**
- * Import data from an parsed xml data array.
- *
- * @param array $data
- * @param int $version
- */
- public function import(ODD $data)
- {
- if (!($data instanceof ODDEntity))
- throw new InvalidParameterException(elgg_echo('InvalidParameterException:UnexpectedODDClass'));
-
- // Set type and subtype
- $this->attributes['type'] = $data->getAttribute('class');
- $this->attributes['subtype'] = $data->getAttribute('subclass');
-
- // Set owner
- $this->attributes['owner_guid'] = get_loggedin_userid(); // Import as belonging to importer.
-
- // Set time
- $this->attributes['time_created'] = strtotime($data->getAttribute('published'));
- $this->attributes['time_updated'] = time();
-
- return true;
- }
-
- // SYSTEM LOG INTERFACE ////////////////////////////////////////////////////////////
-
- /**
- * Return an identification for the object for storage in the system log.
- * This id must be an integer.
- *
- * @return int
- */
- public function getSystemLogID() { return $this->getGUID(); }
-
- /**
- * Return the class name of the object.
- */
- public function getClassName() { return get_class($this); }
-
- /**
- * For a given ID, return the object associated with it.
- * This is used by the river functionality primarily.
- * This is useful for checking access permissions etc on objects.
- */
- public function getObjectFromID($id) { return get_entity($id); }
-
- /**
- * Return the GUID of the owner of this object.
- */
- public function getObjectOwnerGUID() { return $this->owner_guid; }
-
- // ITERATOR INTERFACE //////////////////////////////////////////////////////////////
- /*
- * This lets an entity's attributes be displayed using foreach as a normal array.
- * Example: http://www.sitepoint.com/print/php5-standard-library
- */
-
- private $valid = FALSE;
-
- function rewind()
- {
- $this->valid = (FALSE !== reset($this->attributes));
- }
-
- function current()
- {
- return current($this->attributes);
- }
-
- function key()
- {
- return key($this->attributes);
- }
-
- function next()
- {
- $this->valid = (FALSE !== next($this->attributes));
- }
-
- function valid()
- {
- return $this->valid;
- }
-
- // ARRAY ACCESS INTERFACE //////////////////////////////////////////////////////////
- /*
- * This lets an entity's attributes be accessed like an associative array.
- * Example: http://www.sitepoint.com/print/php5-standard-library
- */
-
- function offsetSet($key, $value)
- {
- if ( array_key_exists($key, $this->attributes) ) {
- $this->attributes[$key] = $value;
- }
- }
-
- function offsetGet($key)
- {
- if ( array_key_exists($key, $this->attributes) ) {
- return $this->attributes[$key];
- }
- }
-
- function offsetUnset($key)
- {
- if ( array_key_exists($key, $this->attributes) ) {
- $this->attributes[$key] = ""; // Full unsetting is dangerious for our objects
- }
- }
-
- function offsetExists($offset)
- {
- return array_key_exists($offset, $this->attributes);
- }
- }
-
- /**
- * Initialise the entity cache.
- */
- function initialise_entity_cache()
- {
- global $ENTITY_CACHE;
-
- if (!$ENTITY_CACHE)
- $ENTITY_CACHE = array(); //select_default_memcache('entity_cache'); // TODO: Replace with memcache?
- }
-
- /**
- * Invalidate this class' entry in the cache.
- *
- * @param int $guid The guid
- */
- function invalidate_cache_for_entity($guid)
- {
- global $ENTITY_CACHE;
-
- $guid = (int)$guid;
-
- unset($ENTITY_CACHE[$guid]);
- //$ENTITY_CACHE->delete($guid);
- }
-
- /**
- * Cache an entity.
- *
- * @param ElggEntity $entity Entity to cache
- */
- function cache_entity(ElggEntity $entity)
- {
- global $ENTITY_CACHE;
-
- $ENTITY_CACHE[$entity->guid] = $entity;
- }
-
- /**
- * Retrieve a entity from the cache.
- *
- * @param int $guid The guid
- */
- function retrieve_cached_entity($guid)
- {
- global $ENTITY_CACHE;
-
- $guid = (int)$guid;
-
- if (isset($ENTITY_CACHE[$guid]))
- if ($ENTITY_CACHE[$guid]->isFullyLoaded()) return $ENTITY_CACHE[$guid];
-
- return false;
- }
-
- /**
- * As retrieve_cached_entity, but returns the result as a stdClass (compatible with load functions that
- * expect a database row.)
- *
- * @param int $guid The guid
- */
- function retrieve_cached_entity_row($guid)
- {
- $obj = retrieve_cached_entity($guid);
- if ($obj)
- {
- $tmp = new stdClass;
-
- foreach ($obj as $k => $v)
- $tmp->$k = $v;
-
- return $tmp;
- }
-
- return false;
- }
-
- /**
- * Return the integer ID for a given subtype, or false.
- *
- * TODO: Move to a nicer place?
- *
- * @param string $type
- * @param string $subtype
- */
- function get_subtype_id($type, $subtype)
- {
- global $CONFIG, $SUBTYPE_CACHE;
-
- $type = sanitise_string($type);
- $subtype = sanitise_string($subtype);
-
- if ($subtype=="") return $subtype;
-
- // Todo: cache here? Or is looping less efficient that going to the db each time?
-
- $result = get_data_row("SELECT * from {$CONFIG->dbprefix}entity_subtypes where type='$type' and subtype='$subtype'");
-
- if ($result) {
-
- if (!$SUBTYPE_CACHE)
- $SUBTYPE_CACHE = array(); //select_default_memcache('subtype_cache');
-
- $SUBTYPE_CACHE[$result->id] = $result;
- return $result->id;
- }
-
- return 0;
- }
-
- /**
- * For a given subtype ID, return its identifier text.
- *
- * TODO: Move to a nicer place?
- *
- * @param int $subtype_id
- */
- function get_subtype_from_id($subtype_id)
- {
- global $CONFIG, $SUBTYPE_CACHE;
-
- $subtype_id = (int)$subtype_id;
-
- if (!$subtype_id) return false;
-
- if (isset($SUBTYPE_CACHE[$subtype_id]))
- return $SUBTYPE_CACHE[$subtype_id]->subtype;
-
- $result = get_data_row("SELECT * from {$CONFIG->dbprefix}entity_subtypes where id=$subtype_id");
- if ($result) {
-
- if (!$SUBTYPE_CACHE)
- $SUBTYPE_CACHE = array(); //select_default_memcache('subtype_cache');
-
- $SUBTYPE_CACHE[$subtype_id] = $result;
- return $result->subtype;
- }
-
- return false;
- }
-
- /**
- * This function tests to see if a subtype has a registered class handler.
- *
- * @param string $type The type
- * @param string $subtype The subtype
- * @return a class name or null
- */
- function get_subtype_class($type, $subtype)
- {
- global $CONFIG, $SUBTYPE_CACHE;
-
- $type = sanitise_string($type);
- $subtype = sanitise_string($subtype);
-
- // Todo: cache here? Or is looping less efficient that going to the db each time?
-
- $result = get_data_row("SELECT * from {$CONFIG->dbprefix}entity_subtypes where type='$type' and subtype='$subtype'");
- if ($result) {
-
- if (!$SUBTYPE_CACHE)
- $SUBTYPE_CACHE = array(); //select_default_memcache('subtype_cache');
-
- $SUBTYPE_CACHE[$result->id] = $result;
- return $result->class;
- }
-
- return NULL;
- }
-
- /**
- * This function tests to see if a subtype has a registered class handler by its id.
- *
- * @param int $subtype_id The subtype
- * @return a class name or null
- */
- function get_subtype_class_from_id($subtype_id)
- {
- global $CONFIG, $SUBTYPE_CACHE;
-
- $subtype_id = (int)$subtype_id;
-
- if (!$subtype_id) return false;
-
- if (isset($SUBTYPE_CACHE[$subtype_id]))
- return $SUBTYPE_CACHE[$subtype_id]->class;
-
- $result = get_data_row("SELECT * from {$CONFIG->dbprefix}entity_subtypes where id=$subtype_id");
- if ($result) {
-
- if (!$SUBTYPE_CACHE)
- $SUBTYPE_CACHE = array(); //select_default_memcache('subtype_cache');
-
- $SUBTYPE_CACHE[$subtype_id] = $result;
- return $result->class;
- }
-
- return NULL;
- }
-
- /**
- * This function will register a new subtype, returning its ID as required.
- *
- * @param string $type The type you're subtyping
- * @param string $subtype The subtype label
- * @param string $class Optional class handler (if you don't want it handled by the generic elgg handler for the type)
- */
- function add_subtype($type, $subtype, $class = "")
- {
- global $CONFIG;
- $type = sanitise_string($type);
- $subtype = sanitise_string($subtype);
- $class = sanitise_string($class);
-
- // Short circuit if no subtype is given
- if ($subtype == "")
- return 0;
-
- $id = get_subtype_id($type, $subtype);
-
- if ($id==0)
- return insert_data("insert into {$CONFIG->dbprefix}entity_subtypes (type, subtype, class) values ('$type','$subtype','$class')");
-
- return $id;
- }
-
- /**
- * Update an existing entity.
- *
- * @param int $guid
- * @param int $owner_guid
- * @param int $access_id
- * @param int $container_guid
- */
- function update_entity($guid, $owner_guid, $access_id, $container_guid = null)
- {
- global $CONFIG, $ENTITY_CACHE;
-
- $guid = (int)$guid;
- $owner_guid = (int)$owner_guid;
- $access_id = (int)$access_id;
- $container_guid = (int) $container_guid;
- if (is_null($container_guid)) $container_guid = $owner_guid;
- $time = time();
-
- $entity = get_entity($guid);
-
- if ($entity->canEdit()) {
-
- if (trigger_elgg_event('update',$entity->type,$entity)) {
- $ret = update_data("UPDATE {$CONFIG->dbprefix}entities set owner_guid='$owner_guid', access_id='$access_id', container_guid='$container_guid', time_updated='$time' WHERE guid=$guid");
-
- // If memcache is available then delete this entry from the cache
- static $newentity_cache;
- if ((!$newentity_cache) && (is_memcache_available()))
- $newentity_cache = new ElggMemcache('new_entity_cache');
- if ($newentity_cache) $new_entity = $newentity_cache->delete($guid);
-
- // Handle cases where there was no error BUT no rows were updated!
- if ($ret===false)
- return false;
-
- return true;
- }
-
- }
- }
-
- /**
- * Determine whether a given user is able to write to a given container.
- *
- * @param int $user_guid The user guid, or 0 for get_loggedin_userid()
- * @param int $container_guid The container, or 0 for the current page owner.
- */
- function can_write_to_container($user_guid = 0, $container_guid = 0, $entity_type = 'all')
- {
- global $CONFIG;
-
- $user_guid = (int)$user_guid;
- $user = get_entity($user_guid);
- if (!$user) $user = get_loggedin_user();
-
- $container_guid = (int)$container_guid;
- if (!$container_guid) $container_guid = page_owner();
- if (!$container_guid) return true;
-
- $container = get_entity($container_guid);
-
- if (($container) && ($user))
- {
-
- // If the user can edit the container, they can also write to it
- if ($container->canEdit($user_guid)) return true;
-
- // Basics, see if the user is a member of the group.
- if ($container instanceof ElggGroup) {
- if (!$container->isMember($user)) {
- return false;
- } else {
- return true;
- }
- }
-
- // See if anyone else has anything to say
- return trigger_plugin_hook('container_permissions_check',$entity_type,array('container' => $container, 'user' => $user), false);
-
- }
-
- return false;
- }
-
- /**
- * Create a new entity of a given type.
- *
- * @param string $type The type of the entity (site, user, object).
- * @param string $subtype The subtype of the entity.
- * @param int $owner_guid The GUID of the object's owner.
- * @param int $access_id The access control group to create the entity with.
- * @param int $site_guid The site to add this entity to. Leave as 0 (default) for the current site.
- * @return mixed The new entity's GUID, or false on failure
- */
- function create_entity($type, $subtype, $owner_guid, $access_id, $site_guid = 0, $container_guid = 0)
- {
- global $CONFIG;
-
- $type = sanitise_string($type);
- $subtype = add_subtype($type, $subtype);
- $owner_guid = (int)$owner_guid;
- $access_id = (int)$access_id;
- $time = time();
- if ($site_guid == 0)
- $site_guid = $CONFIG->site_guid;
- $site_guid = (int) $site_guid;
- if ($container_guid == 0) $container_guid = $owner_guid;
-
- if (!can_write_to_container($owner_guid, $container_guid, $type)) return false;
-
- if ($type=="") throw new InvalidParameterException(elgg_echo('InvalidParameterException:EntityTypeNotSet'));
-
- return insert_data("INSERT into {$CONFIG->dbprefix}entities (type, subtype, owner_guid, site_guid, container_guid, access_id, time_created, time_updated) values ('$type',$subtype, $owner_guid, $site_guid, $container_guid, $access_id, $time, $time)");
- }
-
- /**
- * Retrieve the entity details for a specific GUID, returning it as a stdClass db row.
- *
- * You will only get an object if a) it exists, b) you have access to it.
- *
- * @param int $guid The GUID of the object to extract
- */
- function get_entity_as_row($guid)
- {
- global $CONFIG;
-
- if (!$guid) return false;
-
- $guid = (int) $guid;
-
- $row = retrieve_cached_entity_row($guid);
- if ($row)
- {
- // We have already cached this object, so retrieve its value from the cache
- if (isset($CONFIG->debug) && $CONFIG->debug)
- error_log("** Retrieving GUID:$guid from cache");
-
- return $row;
- }
- else
- {
- // Object not cached, load it.
- if (isset($CONFIG->debug) && $CONFIG->debug == true)
- error_log("** GUID:$guid loaded from DB");
-
- $access = get_access_sql_suffix();
-
- return get_data_row("SELECT * from {$CONFIG->dbprefix}entities where guid=$guid and $access");
- }
- }
-
- /**
- * Create an Elgg* object from a given entity row.
- */
- function entity_row_to_elggstar($row)
- {
- if (!($row instanceof stdClass))
- return $row;
-
- if ((!isset($row->guid)) || (!isset($row->subtype)))
- return $row;
-
- $new_entity = false;
-
- // Create a memcache cache if we can
- static $newentity_cache;
- if ((!$newentity_cache) && (is_memcache_available()))
- $newentity_cache = new ElggMemcache('new_entity_cache');
- if ($newentity_cache) $new_entity = $newentity_cache->load($row->guid);
- if ($new_entity) return $new_entity;
-
- $classname = get_subtype_class_from_id($row->subtype);
- if ($classname!="")
- {
- if (class_exists($classname))
- {
- $new_entity = new $classname($row);
-
- if (!($new_entity instanceof ElggEntity))
- throw new ClassException(sprintf(elgg_echo('ClassException:ClassnameNotClass'), $classname, 'ElggEntity'));
- }
- else
- error_log(sprintf(elgg_echo('ClassNotFoundException:MissingClass'), $classname));
- }
- else
- {
- switch ($row->type)
- {
- case 'object' :
- $new_entity = new ElggObject($row); break;
- case 'user' :
- $new_entity = new ElggUser($row); break;
- case 'group' :
- $new_entity = new ElggGroup($row); break;
- case 'site' :
- $new_entity = new ElggSite($row); break;
- default: throw new InstallationException(sprintf(elgg_echo('InstallationException:TypeNotSupported'), $row->type));
- }
-
- }
-
- // Cache entity if we have a cache available
- if (($newentity_cache) && ($new_entity)) $newentity_cache->save($new_entity->guid, $new_entity);
-
- return $new_entity;
- }
-
- /**
- * Return the entity for a given guid as the correct object.
- * @param int $guid The GUID of the entity
- * @return a child of ElggEntity appropriate for the type.
- */
- function get_entity($guid)
- {
- static $newentity_cache;
- $new_entity = false;
- if ((!$newentity_cache) && (is_memcache_available()))
- $newentity_cache = new ElggMemcache('new_entity_cache');
- if ($newentity_cache) $new_entity = $newentity_cache->load($guid);
- if ($new_entity) return $new_entity;
-
- return entity_row_to_elggstar(get_entity_as_row($guid));
- }
-
- /**
- * Return entities matching a given query, or the number thereof
- *
- * @param string $type The type of entity (eg "user", "object" etc)
- * @param string $subtype The arbitrary subtype of the entity
- * @param int $owner_guid The GUID of the owning user
- * @param string $order_by The field to order by; by default, time_created desc
- * @param int $limit The number of entities to return; 10 by default
- * @param int $offset The indexing offset, 0 by default
- * @param boolean $count Set to true to get a count rather than the entities themselves (limits and offsets don't apply in this context). Defaults to false.
- * @param int $site_guid The site to get entities for. Leave as 0 (default) for the current site; -1 for all sites.
- * @param int|array $container_guid The container or containers to get entities from (default: all containers).
- * @param int $timelower The earliest time the entity can have been created. Default: all
- * @param int $timeupper The latest time the entity can have been created. Default: all
- * @return array A list of entities.
- */
- function get_entities($type = "", $subtype = "", $owner_guid = 0, $order_by = "", $limit = 10, $offset = 0, $count = false, $site_guid = 0, $container_guid = null, $timelower = 0, $timeupper = 0)
- {
- global $CONFIG;
-
- if ($subtype === false || $subtype === null || $subtype === 0)
- return false;
-
- if ($order_by == "") $order_by = "time_created desc";
- $order_by = sanitise_string($order_by);
- $limit = (int)$limit;
- $offset = (int)$offset;
- $site_guid = (int) $site_guid;
- $timelower = (int) $timelower;
- $timeupper = (int) $timeupper;
- if ($site_guid == 0)
- $site_guid = $CONFIG->site_guid;
-
- $where = array();
-
- if (is_array($subtype)) {
- $tempwhere = "";
- if (sizeof($subtype))
- foreach($subtype as $typekey => $subtypearray) {
- foreach($subtypearray as $subtypeval) {
- $typekey = sanitise_string($typekey);
- if (!empty($subtypeval)) {
- $subtypeval = (int) get_subtype_id($typekey, $subtypeval);
- } else {
- $subtypeval = 0;
- }
- if (!empty($tempwhere)) $tempwhere .= " or ";
- $tempwhere .= "(type = '{$typekey}' and subtype = {$subtypeval})";
- }
- }
- if (!empty($tempwhere)) $where[] = "({$tempwhere})";
-
- } else {
-
- $type = sanitise_string($type);
- $subtype = get_subtype_id($type, $subtype);
-
- if ($type != "")
- $where[] = "type='$type'";
- if ($subtype!=="")
- $where[] = "subtype=$subtype";
-
- }
-
- if ($owner_guid != "") {
- if (!is_array($owner_guid)) {
- $owner_array = array($owner_guid);
- $owner_guid = (int) $owner_guid;
- // $where[] = "owner_guid = '$owner_guid'";
- } else if (sizeof($owner_guid) > 0) {
- $owner_array = array_map('sanitise_int', $owner_guid);
- // Cast every element to the owner_guid array to int
- // $owner_guid = array_map("sanitise_int", $owner_guid);
- // $owner_guid = implode(",",$owner_guid);
- // $where[] = "owner_guid in ({$owner_guid})";
- }
- if (is_null($container_guid)) {
- $container_guid = $owner_array;
- }
- }
- if ($site_guid > 0)
- $where[] = "site_guid = {$site_guid}";
-
- if (!is_null($container_guid)) {
- if (is_array($container_guid)) {
- foreach($container_guid as $key => $val) $container_guid[$key] = (int) $val;
- $where[] = "container_guid in (" . implode(",",$container_guid) . ")";
- } else {
- $container_guid = (int) $container_guid;
- $where[] = "container_guid = {$container_guid}";
- }
- }
- if ($timelower)
- $where[] = "time_created >= {$timelower}";
- if ($timeupper)
- $where[] = "time_created <= {$timeupper}";
-
- if (!$count) {
- $query = "SELECT * from {$CONFIG->dbprefix}entities where ";
- } else {
- $query = "SELECT count(guid) as total from {$CONFIG->dbprefix}entities where ";
- }
- foreach ($where as $w)
- $query .= " $w and ";
- $query .= get_access_sql_suffix(); // Add access controls
- if (!$count) {
- $query .= " order by $order_by";
- if ($limit) $query .= " limit $offset, $limit"; // Add order and limit
- $dt = get_data($query, "entity_row_to_elggstar");
- return $dt;
- } else {
- $total = get_data_row($query);
- return $total->total;
- }
- }
-
- /**
- * Returns a viewable list of entities
- *
- * @see elgg_view_entity_list
- *
- * @param string $type The type of entity (eg "user", "object" etc)
- * @param string $subtype The arbitrary subtype of the entity
- * @param int $owner_guid The GUID of the owning user
- * @param int $limit The number of entities to display per page (default: 10)
- * @param true|false $fullview Whether or not to display the full view (default: true)
- * @param true|false $viewtypetoggle Whether or not to allow gallery view
- * @param true|false $pagination Display pagination? Default: true
- * @return string A viewable list of entities
- */
- function list_entities($type= "", $subtype = "", $owner_guid = 0, $limit = 10, $fullview = true, $viewtypetoggle = false, $pagination = true) {
-
- $offset = (int) get_input('offset');
- $count = get_entities($type, $subtype, $owner_guid, "", $limit, $offset, true);
- $entities = get_entities($type, $subtype, $owner_guid, "", $limit, $offset);
-
- return elgg_view_entity_list($entities, $count, $offset, $limit, $fullview, $viewtypetoggle, $pagination);
-
- }
-
- /**
- * Returns a viewable list of entities contained in a number of groups.
- *
- * @param string $subtype The arbitrary subtype of the entity
- * @param int $owner_guid The GUID of the owning user
- * @param int $container_guid The GUID of the containing group
- * @param int $limit The number of entities to display per page (default: 10)
- * @param true|false $fullview Whether or not to display the full view (default: true)
- * @return string A viewable list of entities
- */
- function list_entities_groups($subtype = "", $owner_guid = 0, $container_guid = 0, $limit = 10, $fullview = true)
- {
- $offset = (int) get_input('offset');
- $count = get_objects_in_group($container_guid, $subtype, $owner_guid, 0, "", $limit, $offset, true);
- $entities = get_objects_in_group($container_guid, $subtype, $owner_guid, 0, "", $limit, $offset);
-
- return elgg_view_entity_list($entities, $count, $offset, $limit, $fullview);
- }
-
- /**
- * Returns a list of months containing content specified by the parameters
- *
- * @param string $type The type of entity
- * @param string $subtype The subtype of entity
- * @param int $container_guid The container GUID that the entinties belong to
- * @param int $site_guid The site GUID
- * @return array|false Either an array of timestamps, or false on failure
- */
- function get_entity_dates($type = '', $subtype = '', $container_guid = 0, $site_guid = 0) {
-
- global $CONFIG;
-
- $site_guid = (int) $site_guid;
- if ($site_guid == 0)
- $site_guid = $CONFIG->site_guid;
-
- $where = array();
-
- if ($type != "") {
- $type = sanitise_string($type);
- $where[] = "type='$type'";
- }
-
- if (is_array($subtype)) {
- $tempwhere = "";
- if (sizeof($subtype))
- foreach($subtype as $typekey => $subtypearray) {
- foreach($subtypearray as $subtypeval) {
- $typekey = sanitise_string($typekey);
- if (!empty($subtypeval)) {
- $subtypeval = (int) get_subtype_id($typekey, $subtypeval);
- } else {
- $subtypeval = 0;
- }
- if (!empty($tempwhere)) $tempwhere .= " or ";
- $tempwhere .= "(type = '{$typekey}' and subtype = {$subtypeval})";
- }
- }
- if (!empty($tempwhere)) $where[] = "({$tempwhere})";
-
- } else {
-
- $subtype = get_subtype_id($type, $subtype);
-
- if ($subtype!=="")
- $where[] = "subtype=$subtype";
-
- }
-
- if ($container_guid !== 0) {
- if (is_array($container_guid)) {
- foreach($container_guid as $key => $val) $container_guid[$key] = (int) $val;
- $where[] = "container_guid in (" . implode(",",$container_guid) . ")";
- } else {
- $container_guid = (int) $container_guid;
- $where[] = "container_guid = {$container_guid}";
- }
- }
-
- if ($site_guid > 0)
- $where[] = "site_guid = {$site_guid}";
-
- $where[] = get_access_sql_suffix();
-
- $sql = "SELECT DISTINCT EXTRACT(YEAR_MONTH FROM FROM_UNIXTIME(time_created)) AS yearmonth FROM {$CONFIG->dbprefix}entities where ";
- foreach ($where as $w)
- $sql .= " $w and ";
- $sql .= "1=1";
- if ($result = get_data($sql)) {
- $endresult = array();
- foreach($result as $res) {
- $endresult[] = $res->yearmonth;
- }
- return $endresult;
- }
- return false;
-
- }
-
- /**
- * Disable an entity but not delete it.
- *
- * @param int $guid The guid
- * @param string $reason Optional reason
- */
- function disable_entity($guid, $reason = "", $recursive = true)
- {
- global $CONFIG;
-
- $guid = (int)$guid;
- $reason = sanitise_string($reason);
-
- if ($entity = get_entity($guid)) {
- if (trigger_elgg_event('disable',$entity->type,$entity)) {
- if ($entity->canEdit()) {
-
- if ($reason)
- create_metadata($guid, 'disable_reason', $reason,'', 0, ACCESS_PUBLIC);
-
- if ($recursive)
- {
- // Temporary token overriding access controls TODO: Do this better.
- static $__RECURSIVE_DELETE_TOKEN;
- $__RECURSIVE_DELETE_TOKEN = md5(get_loggedin_userid()); // Make it slightly harder to guess
-
- $sub_entities = get_data("SELECT * from {$CONFIG->dbprefix}entities WHERE container_guid=$guid or owner_guid=$guid or site_guid=$guid", 'entity_row_to_elggstar');
- if ($sub_entities) {
- foreach ($sub_entities as $e)
- $e->disable($reason);
- }
-
- $__RECURSIVE_DELETE_TOKEN = null;
- }
-
- $res = update_data("UPDATE {$CONFIG->dbprefix}entities set enabled='no' where guid={$guid}");
-
- return $res;
- }
- }
- }
- return false;
- }
-
- /**
- * Enable an entity again.
- *
- * @param int $guid
- */
- function enable_entity($guid)
- {
- global $CONFIG;
-
- $guid = (int)$guid;
-
- // Override access only visible entities
- $access_status = access_get_show_hidden_status();
- access_show_hidden_entities(true);
-
- if ($entity = get_entity($guid)) {
- if (trigger_elgg_event('enable',$entity->type,$entity)) {
- if ($entity->canEdit()) {
-
- access_show_hidden_entities($access_status);
-
- $result = update_data("UPDATE {$CONFIG->dbprefix}entities set enabled='yes' where guid={$guid}");
- $entity->clearMetaData('disable_reason');
-
- return $result;
- }
- }
- }
-
- access_show_hidden_entities($access_status);
- return false;
- }
-
- /**
- * Delete a given entity.
- *
- * @param int $guid
- * @param bool $recursive If true (default) then all entities which are owned or contained by $guid will also be deleted.
- * Note: this bypasses ownership of sub items.
- */
- function delete_entity($guid, $recursive = true)
- {
- global $CONFIG;
-
- $guid = (int)$guid;
- if ($entity = get_entity($guid)) {
- if (trigger_elgg_event('delete',$entity->type,$entity)) {
- if ($entity->canEdit()) {
-
- // Delete contained owned and otherwise releated objects (depth first)
- if ($recursive)
- {
- // Temporary token overriding access controls TODO: Do this better.
- static $__RECURSIVE_DELETE_TOKEN;
- $__RECURSIVE_DELETE_TOKEN = md5(get_loggedin_userid()); // Make it slightly harder to guess
-
- $sub_entities = get_data("SELECT * from {$CONFIG->dbprefix}entities WHERE container_guid=$guid or owner_guid=$guid or site_guid=$guid", 'entity_row_to_elggstar');
- if ($sub_entities) {
- foreach ($sub_entities as $e)
- $e->delete();
- }
-
- $__RECURSIVE_DELETE_TOKEN = null;
- }
-
- // Now delete the entity itself
- $entity->clearMetadata();
- $entity->clearAnnotations();
- $entity->clearRelationships();
- remove_from_river_by_subject($guid);
- remove_from_river_by_object($guid);
- $res = delete_data("DELETE from {$CONFIG->dbprefix}entities where guid={$guid}");
-
- return $res;
- }
- }
- }
- return false;
-
- }
-
- /**
- * Delete multiple entities that match a given query.
- * This function itterates through and calls delete_entity on each one, this is somewhat inefficient but lets
- * the 'delete' even be called for each entity.
- *
- * @param string $type The type of entity (eg "user", "object" etc)
- * @param string $subtype The arbitrary subtype of the entity
- * @param int $owner_guid The GUID of the owning user
- */
- function delete_entities($type = "", $subtype = "", $owner_guid = 0)
- {
- $entities = get_entities($type, $subtype, $owner_guid, "time_created desc", 0);
-
- foreach ($entities as $entity)
- delete_entity($entity->guid);
-
- return true;
- }
-
- /**
- * A plugin hook to get certain volitile (generated on the fly) attributes about an entity in order to export them.
- *
- * @param unknown_type $hook
- * @param unknown_type $entity_type
- * @param unknown_type $returnvalue
- * @param unknown_type $params The parameters, passed 'guid' and 'varname'
- * @return unknown
- */
- function volatile_data_export_plugin_hook($hook, $entity_type, $returnvalue, $params)
- {
- $guid = (int)$params['guid'];
- $variable_name = sanitise_string($params['varname']);
-
- if (($hook == 'volatile') && ($entity_type == 'metadata'))
- {
- if (($guid) && ($variable_name))
- {
- switch ($variable_name)
- {
- case 'renderedentity' :
- elgg_set_viewtype('default');
- $view = elgg_view_entity(get_entity($guid));
- elgg_set_viewtype();
-
- $tmp = new ElggMetadata();
- $tmp->type = 'volatile';
- $tmp->name = 'renderedentity';
- $tmp->value = $view;
- $tmp->entity_guid = $guid;
-
- return $tmp;
-
- break;
- }
- }
- }
- }
-
- /**
- * Handler called by trigger_plugin_hook on the "export" event.
- */
- function export_entity_plugin_hook($hook, $entity_type, $returnvalue, $params)
- {
- // Sanity check values
- if ((!is_array($params)) && (!isset($params['guid'])))
- throw new InvalidParameterException(elgg_echo('InvalidParameterException:GUIDNotForExport'));
-
- if (!is_array($returnvalue))
- throw new InvalidParameterException(elgg_echo('InvalidParameterException:NonArrayReturnValue'));
-
- $guid = (int)$params['guid'];
-
- // Get the entity
- $entity = get_entity($guid);
- if (!($entity instanceof ElggEntity))
- throw new InvalidClassException(sprintf(elgg_echo('InvalidClassException:NotValidElggStar'), $guid, get_class()));
-
- $export = $entity->export();
-
- if (is_array($export))
- foreach ($export as $e)
- $returnvalue[] = $e;
- else
- $returnvalue[] = $export;
-
- return $returnvalue;
- }
-
- /**
- * Utility function used by import_entity_plugin_hook() to process an ODDEntity into an unsaved ElggEntity.
- *
- * @param ODDEntity $element The OpenDD element
- * @return ElggEntity the unsaved entity which should be populated by items.
- */
- function oddentity_to_elggentity(ODDEntity $element)
- {
- $class = $element->getAttribute('class');
- $subclass = $element->getAttribute('subclass');
-
- // See if we already have imported this uuid
- $tmp = get_entity_from_uuid($element->getAttribute('uuid'));
-
- if (!$tmp)
- {
- // Construct new class with owner from session
- $classname = get_subtype_class($class, $subclass);
- if ($classname!="")
- {
- if (class_exists($classname))
- {
- $tmp = new $classname();
-
- if (!($tmp instanceof ElggEntity))
- throw new ClassException(sprintf(elgg_echo('ClassException:ClassnameNotClass', $classname, get_class())));
- }
- else
- error_log(sprintf(elgg_echo('ClassNotFoundException:MissingClass'), $classname));
- }
- else
- {
- switch ($class)
- {
- case 'object' : $tmp = new ElggObject($row); break;
- case 'user' : $tmp = new ElggUser($row); break;
- case 'group' : $tmp = new ElggGroup($row); break;
- case 'site' : $tmp = new ElggSite($row); break;
- default: throw new InstallationException(sprintf(elgg_echo('InstallationException:TypeNotSupported'), $class));
- }
- }
- }
-
- if ($tmp)
- {
- if (!$tmp->import($element))
- throw new ImportException(sprintf(elgg_echo('ImportException:ImportFailed'), $element->getAttribute('uuid')));
-
- return $tmp;
- }
-
- return NULL;
- }
-
- /**
- * Import an entity.
- * This function checks the passed XML doc (as array) to see if it is a user, if so it constructs a new
- * elgg user and returns "true" to inform the importer that it's been handled.
- */
- function import_entity_plugin_hook($hook, $entity_type, $returnvalue, $params)
- {
- $element = $params['element'];
-
- $tmp = NULL;
-
- if ($element instanceof ODDEntity)
- {
- $tmp = oddentity_to_elggentity($element);
-
- if ($tmp)
- {
- if (!$tmp->save()) // Make sure its saved
- throw new ImportException(sprintf(elgg_echo('ImportException:ProblemSaving'), $element->getAttribute('uuid')));
-
- // Belts and braces
- if (!$tmp->guid)
- throw new ImportException(elgg_echo('ImportException:NoGUID'));
-
- add_uuid_to_guid($tmp->guid, $element->getAttribute('uuid')); // We have saved, so now tag
-
- return $tmp;
- }
-
- }
- }
-
- /**
- * Determines whether or not the specified user can edit the specified entity.
- *
- * This is extendible by registering a plugin hook taking in the parameters 'entity' and 'user',
- * which are the entity and user entities respectively
- *
- * @see register_plugin_hook
- *
- * @param int $entity_guid The GUID of the entity
- * @param int $user_guid The GUID of the user
- * @return true|false Whether the specified user can edit the specified entity.
- */
- function can_edit_entity($entity_guid, $user_guid = 0) {
- global $CONFIG;
-
- $user_guid = (int)$user_guid;
- $user = get_entity($user_guid);
- if (!$user) $user = get_loggedin_user();
-
- if ($entity = get_entity($entity_guid)) {
-
- $return = false;
-
- // Test user if possible - should default to false unless a plugin hook says otherwise
- if (!is_null($user))
- {
- if ($entity->getOwner() == $user->getGUID()) $return = true;
- if ($entity->container_guid == $user->getGUID()) $return = true;
- if ($entity->type == "user" && $entity->getGUID() == $user->getGUID()) $return = true;
- if ($container_entity = get_entity($entity->container_guid)) {
- if ($container_entity->canEdit()) $return = true;
- }
- }
-
- return trigger_plugin_hook('permissions_check',$entity->type,array('entity' => $entity, 'user' => $user), $return);
-
- } else {
- return false;
-
- }
-
- }
-
- /**
- * Determines whether or not the specified user can edit metadata on the specified entity.
- *
- * This is extendible by registering a plugin hook taking in the parameters 'entity' and 'user',
- * which are the entity and user entities respectively
- *
- * @see register_plugin_hook
- *
- * @param int $entity_guid The GUID of the entity
- * @param int $user_guid The GUID of the user
- * @param ElggMetadata $metadata The metadata to specifically check (if any; default null)
- * @return true|false Whether the specified user can edit the specified entity.
- */
- function can_edit_entity_metadata($entity_guid, $user_guid = 0, $metadata = null) {
-
- if ($entity = get_entity($entity_guid)) {
-
- $return = null;
-
- if ($metadata->owner_guid == 0) $return = true;
- if (is_null($return))
- $return = can_edit_entity($entity_guid, $user_guid);
-
- $user = get_entity($user_guid);
- $return = trigger_plugin_hook('permissions_check:metadata',$entity->type,array('entity' => $entity, 'user' => $user, 'metadata' => $metadata),$return);
- return $return;
-
- } else {
- return false;
- }
-
- }
-
-
- /**
- * Get the icon for an entity
- *
- * @param ElggEntity $entity The entity (passed an entity rather than a guid to handle non-created entities)
- * @param string $size
- */
- function get_entity_icon_url(ElggEntity $entity, $size = 'medium')
- {
- global $CONFIG;
-
- $size = sanitise_string($size);
- switch (strtolower($size))
- {
- case 'master':
- case 'large' : $size = 'large'; break;
-
- case 'topbar' : $size = 'topbar'; break;
-
- case 'tiny' : $size = 'tiny'; break;
-
- case 'small' : $size = 'small'; break;
-
- case 'medium' :
- default: $size = 'medium';
- }
-
- $url = false;
-
- $viewtype = elgg_get_viewtype();
-
- // Step one, see if anyone knows how to render this in the current view
- $url = trigger_plugin_hook('entity:icon:url', $entity->getType(), array('entity' => $entity, 'viewtype' => $viewtype, 'size' => $size), $url);
-
- // Fail, so use default
- if (!$url) {
-
- $type = $entity->getType();
- $subtype = $entity->getSubtype();
-
- if (!empty($subtype)) {
- $overrideurl = elgg_view("icon/{$type}/{$subtype}/{$size}",array('entity' => $entity));
- if (!empty($overrideurl)) return $overrideurl;
- }
-
- $overrideurl = elgg_view("icon/{$type}/default/{$size}",array('entity' => $entity));
- if (!empty($overrideurl)) return $overrideurl;
-
- $url = $CONFIG->url . "_graphics/icons/default/$size.png";
- }
-
- return $url;
- }
-
- /**
- * Gets the URL for an entity, given a particular GUID
- *
- * @param int $entity_guid The GUID of the entity
- * @return string The URL of the entity
- */
- function get_entity_url($entity_guid) {
-
- global $CONFIG;
- if ($entity = get_entity($entity_guid)) {
-
- $url = "";
-
- if (isset($CONFIG->entity_url_handler[$entity->getType()][$entity->getSubType()])) {
- $function = $CONFIG->entity_url_handler[$entity->getType()][$entity->getSubType()];
- if (is_callable($function)) {
- $url = $function($entity);
- }
- } elseif (isset($CONFIG->entity_url_handler[$entity->getType()]['all'])) {
- $function = $CONFIG->entity_url_handler[$entity->getType()]['all'];
- if (is_callable($function)) {
- $url = $function($entity);
- }
- } elseif (isset($CONFIG->entity_url_handler['all']['all'])) {
- $function = $CONFIG->entity_url_handler['all']['all'];
- if (is_callable($function)) {
- $url = $function($entity);
- }
- }
-
- if ($url == "") {
- $url = $CONFIG->url . "pg/view/" . $entity_guid;
- }
- return $url;
-
- }
- return false;
-
- }
-
- /**
- * Sets the URL handler for a particular entity type and subtype
- *
- * @param string $function_name The function to register
- * @param string $entity_type The entity type
- * @param string $entity_subtype The entity subtype
- * @return true|false Depending on success
- */
- function register_entity_url_handler($function_name, $entity_type = "all", $entity_subtype = "all") {
- global $CONFIG;
-
- if (!is_callable($function_name)) return false;
-
- if (!isset($CONFIG->entity_url_handler)) {
- $CONFIG->entity_url_handler = array();
- }
- if (!isset($CONFIG->entity_url_handler[$entity_type])) {
- $CONFIG->entity_url_handler[$entity_type] = array();
- }
- $CONFIG->entity_url_handler[$entity_type][$entity_subtype] = $function_name;
-
- return true;
-
- }
-
- /**
- * Default Icon URL handler for entities.
- * This will attempt to find a default entity for the current view and return a url. This is registered at
- * a low priority so that other handlers will pick it up first.
- *
- * @param unknown_type $hook
- * @param unknown_type $entity_type
- * @param unknown_type $returnvalue
- * @param unknown_type $params
- */
- function default_entity_icon_hook($hook, $entity_type, $returnvalue, $params)
- {
- global $CONFIG;
-
- if ((!$returnvalue) && ($hook == 'entity:icon:url'))
- {
- $entity = $params['entity'];
- $type = $entity->type;
- $subtype = get_subtype_from_id($entity->subtype);
- $viewtype = $params['viewtype'];
- $size = $params['size'];
-
- $url = "views/$viewtype/graphics/icons/$type/$subtype/$size.png";
-
- if (!@file_exists($CONFIG->path . $url))
- $url = "views/$viewtype/graphics/icons/$type/default/$size.png";
-
- if(!@file_exists($CONFIG->path . $url))
- $url = "views/$viewtype/graphics/icons/default/$size.png";
-
- if (@file_exists($CONFIG->path . $url))
- return $CONFIG->url . $url;
- }
- }
-
- /**
- * Registers and entity type and subtype to return in search and other places.
- * A description in the elgg_echo languages file of the form item:type:subtype
- * is also expected.
- *
- * @param string $type The type of entity (object, site, user, group)
- * @param string $subtype The subtype to register (may be blank)
- * @return true|false Depending on success
- */
- function register_entity_type($type, $subtype) {
-
- global $CONFIG;
-
- $type = strtolower($type);
- if (!in_array($type,array('object','site','group','user'))) return false;
-
- if (!isset($CONFIG->registered_entities)) $CONFIG->registered_entities = array();
- $CONFIG->registered_entities[$type][] = $subtype;
-
- return true;
-
- }
-
- /**
- * Returns registered entity types and subtypes
- *
- * @see register_entity_type
- *
- * @param string $type The type of entity (object, site, user, group) or blank for all
- * @return array|false Depending on whether entities have been registered
- */
- function get_registered_entity_types($type = '') {
-
- global $CONFIG;
-
- if (!isset($CONFIG->registered_entities)) return false;
- if (!empty($type)) $type = strtolower($type);
- if (!empty($type) && empty($CONFIG->registered_entities[$type])) return false;
-
- if (empty($type))
- return $CONFIG->registered_entities;
-
- return $CONFIG->registered_entities[$type];
-
- }
-
- /**
- * Determines whether or not the specified entity type and subtype have been registered in the system
- *
- * @param string $type The type of entity (object, site, user, group)
- * @param string $subtype The subtype (may be blank)
- * @return true|false Depending on whether or not the type has been registered
- */
- function is_registered_entity_type($type, $subtype) {
-
- global $CONFIG;
-
- if (!isset($CONFIG->registered_entities)) return false;
- $type = strtolower($type);
- if (empty($CONFIG->registered_entities[$type])) return false;
- if (in_array($subtype, $CONFIG->registered_entities[$type])) return true;
-
- }
-
- /**
- * Page handler for generic entities view system
- *
- * @param array $page Page elements from pain page handler
- */
- function entities_page_handler($page) {
- if (isset($page[0])) {
- global $CONFIG;
- set_input('guid',$page[0]);
- @include($CONFIG->path . "entities/index.php");
- }
- }
-
- /**
- * Returns a viewable list of entities based on the registered types
- *
- * @see elgg_view_entity_list
- *
- * @param string $type The type of entity (eg "user", "object" etc)
- * @param string $subtype The arbitrary subtype of the entity
- * @param int $owner_guid The GUID of the owning user
- * @param int $limit The number of entities to display per page (default: 10)
- * @param true|false $fullview Whether or not to display the full view (default: true)
- * @param true|false $viewtypetoggle Whether or not to allow gallery view
- * @return string A viewable list of entities
- */
- function list_registered_entities($owner_guid = 0, $limit = 10, $fullview = true, $viewtypetoggle = false, $allowedtypes = true) {
-
- $typearray = array();
-
- if ($object_types = get_registered_entity_types()) {
- foreach($object_types as $object_type => $subtype_array) {
- if (is_array($subtype_array) && sizeof($subtype_array) && (in_array($object_type,$allowedtypes) || $allowedtypes === true))
- foreach($subtype_array as $object_subtype) {
- $typearray[$object_type][] = $object_subtype;
- }
- }
- }
-
- $offset = (int) get_input('offset');
- $count = get_entities('', $typearray, $owner_guid, "", $limit, $offset, true);
- $entities = get_entities('', $typearray,$owner_guid, "", $limit, $offset);
-
- return elgg_view_entity_list($entities, $count, $offset, $limit, $fullview, $viewtypetoggle);
-
- }
-
- /**
- * Get entities based on their private data, in a similar way to metadata.
- *
- * @param string $name The name of the setting
- * @param string $value The value of the setting
- * @param string $type The type of entity (eg "user", "object" etc)
- * @param string $subtype The arbitrary subtype of the entity
- * @param int $owner_guid The GUID of the owning user
- * @param string $order_by The field to order by; by default, time_created desc
- * @param int $limit The number of entities to return; 10 by default
- * @param int $offset The indexing offset, 0 by default
- * @param boolean $count Set to true to get a count rather than the entities themselves (limits and offsets don't apply in this context). Defaults to false.
- * @param int $site_guid The site to get entities for. Leave as 0 (default) for the current site; -1 for all sites.
- * @param int|array $container_guid The container or containers to get entities from (default: all containers).
- * @return array A list of entities.
- */
- function get_entities_from_private_setting($name = "", $value = "", $type = "", $subtype = "", $owner_guid = 0, $order_by = "", $limit = 10, $offset = 0, $count = false, $site_guid = 0, $container_guid = null)
- {
- global $CONFIG;
-
- if ($subtype === false || $subtype === null || $subtype === 0)
- return false;
-
- $name = sanitise_string($name);
- $value = sanitise_string($value);
-
- if ($order_by == "") $order_by = "e.time_created desc";
- $order_by = sanitise_string($order_by);
- $limit = (int)$limit;
- $offset = (int)$offset;
- $site_guid = (int) $site_guid;
- if ($site_guid == 0)
- $site_guid = $CONFIG->site_guid;
-
- $where = array();
-
- if (is_array($type)) {
- $tempwhere = "";
- if (sizeof($type))
- foreach($type as $typekey => $subtypearray) {
- foreach($subtypearray as $subtypeval) {
- $typekey = sanitise_string($typekey);
- if (!empty($subtypeval)) {
- $subtypeval = (int) get_subtype_id($typekey, $subtypeval);
- } else {
- $subtypeval = 0;
- }
- if (!empty($tempwhere)) $tempwhere .= " or ";
- $tempwhere .= "(e.type = '{$typekey}' and e.subtype = {$subtypeval})";
- }
- }
- if (!empty($tempwhere)) $where[] = "({$tempwhere})";
-
- } else {
-
- $type = sanitise_string($type);
- $subtype = get_subtype_id($type, $subtype);
-
- if ($type != "")
- $where[] = "e.type='$type'";
- if ($subtype!=="")
- $where[] = "e.subtype=$subtype";
-
- }
-
- if ($owner_guid != "") {
- if (!is_array($owner_guid)) {
- $owner_array = array($owner_guid);
- $owner_guid = (int) $owner_guid;
- // $where[] = "owner_guid = '$owner_guid'";
- } else if (sizeof($owner_guid) > 0) {
- $owner_array = array_map('sanitise_int', $owner_guid);
- // Cast every element to the owner_guid array to int
- // $owner_guid = array_map("sanitise_int", $owner_guid);
- // $owner_guid = implode(",",$owner_guid);
- // $where[] = "owner_guid in ({$owner_guid})";
- }
- if (is_null($container_guid)) {
- $container_guid = $owner_array;
- }
- }
- if ($site_guid > 0)
- $where[] = "e.site_guid = {$site_guid}";
-
- if (!is_null($container_guid)) {
- if (is_array($container_guid)) {
- foreach($container_guid as $key => $val) $container_guid[$key] = (int) $val;
- $where[] = "e.container_guid in (" . implode(",",$container_guid) . ")";
- } else {
- $container_guid = (int) $container_guid;
- $where[] = "e.container_guid = {$container_guid}";
- }
- }
-
- if ($name!="")
- $where[] = "s.name = '$name'";
- if ($value!="")
- $where[] = "s.value='$value'";
-
- if (!$count) {
- $query = "SELECT distinct e.* from {$CONFIG->dbprefix}entities e JOIN {$CONFIG->dbprefix}private_settings s ON e.guid=s.entity_guid where ";
- } else {
- $query = "SELECT count(distinct e.guid) as total from {$CONFIG->dbprefix}entities e JOIN {$CONFIG->dbprefix}private_settings s ON e.guid=s.entity_guid where ";
- }
- foreach ($where as $w)
- $query .= " $w and ";
- $query .= get_access_sql_suffix('e'); // Add access controls
- if (!$count) {
- $query .= " order by $order_by";
- if ($limit) $query .= " limit $offset, $limit"; // Add order and limit
-
- $dt = get_data($query, "entity_row_to_elggstar");
- return $dt;
- } else {
- $total = get_data_row($query);
- return $total->total;
- }
- }
-
- /**
- * Get entities based on their private data by multiple keys, in a similar way to metadata.
- *
- * @param string $name The name of the setting
- * @param string $value The value of the setting
- * @param string $type The type of entity (eg "user", "object" etc)
- * @param string $subtype The arbitrary subtype of the entity
- * @param int $owner_guid The GUID of the owning user
- * @param string $order_by The field to order by; by default, time_created desc
- * @param int $limit The number of entities to return; 10 by default
- * @param int $offset The indexing offset, 0 by default
- * @param boolean $count Set to true to get a count rather than the entities themselves (limits and offsets don't apply in this context). Defaults to false.
- * @param int $site_guid The site to get entities for. Leave as 0 (default) for the current site; -1 for all sites.
- * @param int|array $container_guid The container or containers to get entities from (default: all containers).
- * @return array A list of entities.
- */
- function get_entities_from_private_setting_multi(array $name, $type = "", $subtype = "", $owner_guid = 0, $order_by = "", $limit = 10, $offset = 0, $count = false, $site_guid = 0, $container_guid = null)
- {
- global $CONFIG;
-
- if ($subtype === false || $subtype === null || $subtype === 0)
- return false;
-
- if ($order_by == "") $order_by = "e.time_created desc";
- $order_by = sanitise_string($order_by);
- $limit = (int)$limit;
- $offset = (int)$offset;
- $site_guid = (int) $site_guid;
- if ($site_guid == 0)
- $site_guid = $CONFIG->site_guid;
-
- $where = array();
-
- if (is_array($type)) {
- $tempwhere = "";
- if (sizeof($type))
- foreach($type as $typekey => $subtypearray) {
- foreach($subtypearray as $subtypeval) {
- $typekey = sanitise_string($typekey);
- if (!empty($subtypeval)) {
- $subtypeval = (int) get_subtype_id($typekey, $subtypeval);
- } else {
- $subtypeval = 0;
- }
- if (!empty($tempwhere)) $tempwhere .= " or ";
- $tempwhere .= "(e.type = '{$typekey}' and e.subtype = {$subtypeval})";
- }
- }
- if (!empty($tempwhere)) $where[] = "({$tempwhere})";
-
- } else {
-
- $type = sanitise_string($type);
- $subtype = get_subtype_id($type, $subtype);
-
- if ($type != "")
- $where[] = "e.type='$type'";
- if ($subtype!=="")
- $where[] = "e.subtype=$subtype";
-
- }
-
- if ($owner_guid != "") {
- if (!is_array($owner_guid)) {
- $owner_array = array($owner_guid);
- $owner_guid = (int) $owner_guid;
- // $where[] = "owner_guid = '$owner_guid'";
- } else if (sizeof($owner_guid) > 0) {
- $owner_array = array_map('sanitise_int', $owner_guid);
- // Cast every element to the owner_guid array to int
- // $owner_guid = array_map("sanitise_int", $owner_guid);
- // $owner_guid = implode(",",$owner_guid);
- // $where[] = "owner_guid in ({$owner_guid})";
- }
- if (is_null($container_guid)) {
- $container_guid = $owner_array;
- }
- }
- if ($site_guid > 0)
- $where[] = "e.site_guid = {$site_guid}";
-
- if (!is_null($container_guid)) {
- if (is_array($container_guid)) {
- foreach($container_guid as $key => $val) $container_guid[$key] = (int) $val;
- $where[] = "e.container_guid in (" . implode(",",$container_guid) . ")";
- } else {
- $container_guid = (int) $container_guid;
- $where[] = "e.container_guid = {$container_guid}";
- }
- }
-
- if ($name)
- {
- $s_join = "";
- $i = 1;
- foreach ($name as $k => $n)
- {
- $k = sanitise_string($k);
- $s_join .= " JOIN {$CONFIG->dbprefix}private_settings s$i ON e.guid=s$i.entity_guid";
- $where[] = "s$i.name = '$k'";
- $where[] = "s$i.value = '$n'";
- $i++;
- }
- }
-
- if (!$count) {
- $query = "SELECT distinct e.* from {$CONFIG->dbprefix}entities e $s_join where ";
- } else {
- $query = "SELECT count(distinct e.guid) as total from {$CONFIG->dbprefix}entities e $s_join where ";
- }
- foreach ($where as $w)
- $query .= " $w and ";
- $query .= get_access_sql_suffix('e'); // Add access controls
- if (!$count) {
- $query .= " order by $order_by";
- if ($limit) $query .= " limit $offset, $limit"; // Add order and limit
-
- $dt = get_data($query, "entity_row_to_elggstar");
- return $dt;
- } else {
- $total = get_data_row($query);
- return $total->total;
- }
- }
-
- /**
- * Gets a private setting for an entity.
- *
- * @param int $entity_guid The entity GUID
- * @param string $name The name of the setting
- * @return mixed The setting value, or false on failure
- */
- function get_private_setting($entity_guid, $name) {
-
- global $CONFIG;
- $entity_guid = (int) $entity_guid;
- $name = sanitise_string($name);
-
- if ($setting = get_data_row("SELECT value from {$CONFIG->dbprefix}private_settings where name = '{$name}' and entity_guid = {$entity_guid}")) {
- return $setting->value;
- }
- return false;
-
- }
-
- /**
- * Return an array of all private settings for a given
- *
- * @param int $entity_guid The entity GUID
- */
- function get_all_private_settings($entity_guid) {
- global $CONFIG;
-
- $entity_guid = (int) $entity_guid;
-
- $result = get_data("SELECT * from {$CONFIG->dbprefix}private_settings where entity_guid = {$entity_guid}");
- if ($result)
- {
- $return = array();
- foreach ($result as $r)
- $return[$r->name] = $r->value;
-
- return $return;
- }
-
- return false;
- }
-
- /**
- * Sets a private setting for an entity.
- *
- * @param int $entity_guid The entity GUID
- * @param string $name The name of the setting
- * @param string $value The value of the setting
- * @return mixed The setting ID, or false on failure
- */
- function set_private_setting($entity_guid, $name, $value) {
-
- global $CONFIG;
- $entity_guid = (int) $entity_guid;
- $name = sanitise_string($name);
- $value = sanitise_string($value);
-
- return insert_data("INSERT into {$CONFIG->dbprefix}private_settings (entity_guid, name, value) VALUES ($entity_guid, '{$name}', '{$value}') ON DUPLICATE KEY UPDATE value='$value'");
-
- }
-
- /**
- * Deletes a private setting for an entity.
- *
- * @param int $entity_guid The Entity GUID
- * @param string $name The name of the setting
- * @return true|false depending on success
- *
- */
- function remove_private_setting($entity_guid, $name) {
-
- global $CONFIG;
- $entity_guid = (int) $entity_guid;
- $name = sanitise_string($name);
- return delete_data("DELETE from {$CONFIG->dbprefix}private_settings where name = '{$name}' and entity_guid = {$entity_guid}");
-
- }
-
- /**
- * Deletes all private settings for an entity.
- *
- * @param int $entity_guid The Entity GUID
- * @return true|false depending on success
- *
- */
- function remove_all_private_settings($entity_guid) {
-
- global $CONFIG;
- $entity_guid = (int) $entity_guid;
- return delete_data("DELETE from {$CONFIG->dbprefix}private_settings where entity_guid = {$entity_guid}");
- }
-
- function recursive_delete_permissions_check($hook, $entity_type, $returnvalue, $params)
- {
- static $__RECURSIVE_DELETE_TOKEN;
-
- $entity = $params['entity'];
-
- if ((isloggedin()) && ($__RECURSIVE_DELETE_TOKEN) && (strcmp($__RECURSIVE_DELETE_TOKEN, md5(get_loggedin_userid()))))
- return true;
-
- }
-
- /**
- * Entities init function; establishes the page handler
- *
- */
- function entities_init() {
- register_page_handler('view','entities_page_handler');
-
- // Allow a permission override for recursive entity deletion
- // TODO: Can this be done better?
- register_plugin_hook('permissions_check','all','recursive_delete_permissions_check');
- }
-
- /** Register the import hook */
- register_plugin_hook("import", "all", "import_entity_plugin_hook", 0);
-
- /** Register the hook, ensuring entities are serialised first */
- register_plugin_hook("export", "all", "export_entity_plugin_hook", 0);
-
- /** Hook to get certain named bits of volatile data about an entity */
- register_plugin_hook('volatile', 'metadata', 'volatile_data_export_plugin_hook');
-
- /** Hook for rendering a default icon for entities */
- register_plugin_hook('entity:icon:url', 'all', 'default_entity_icon_hook', 1000);
-
- /** Register init system event **/
- register_elgg_event_handler('init','system','entities_init');
-
-?>
+<?php
+/**
+ * Procedural code for creating, loading, and modifying ElggEntity objects.
+ *
+ * @package Elgg.Core
+ * @subpackage DataModel.Entities
+ * @link http://docs.elgg.org/DataModel/Entities
+ */
+
+/**
+ * Cache entities in memory once loaded.
+ *
+ * @global array $ENTITY_CACHE
+ * @access private
+ */
+global $ENTITY_CACHE;
+$ENTITY_CACHE = array();
+
+/**
+ * GUIDs of entities banned from the entity cache (during this request)
+ *
+ * @global array $ENTITY_CACHE_DISABLED_GUIDS
+ * @access private
+ */
+global $ENTITY_CACHE_DISABLED_GUIDS;
+$ENTITY_CACHE_DISABLED_GUIDS = array();
+
+/**
+ * Cache subtypes and related class names.
+ *
+ * @global array|null $SUBTYPE_CACHE array once populated from DB, initially null
+ * @access private
+ */
+global $SUBTYPE_CACHE;
+$SUBTYPE_CACHE = null;
+
+/**
+ * Remove this entity from the entity cache and make sure it is not re-added
+ *
+ * @param int $guid The entity guid
+ *
+ * @access private
+ * @todo this is a workaround until #5604 can be implemented
+ */
+function _elgg_disable_caching_for_entity($guid) {
+ global $ENTITY_CACHE_DISABLED_GUIDS;
+
+ _elgg_invalidate_cache_for_entity($guid);
+ $ENTITY_CACHE_DISABLED_GUIDS[$guid] = true;
+}
+
+/**
+ * Allow this entity to be stored in the entity cache
+ *
+ * @param int $guid The entity guid
+ *
+ * @access private
+ */
+function _elgg_enable_caching_for_entity($guid) {
+ global $ENTITY_CACHE_DISABLED_GUIDS;
+
+ unset($ENTITY_CACHE_DISABLED_GUIDS[$guid]);
+}
+
+/**
+ * Invalidate this class's entry in the cache.
+ *
+ * @param int $guid The entity guid
+ *
+ * @return void
+ * @access private
+ */
+function _elgg_invalidate_cache_for_entity($guid) {
+ global $ENTITY_CACHE;
+
+ $guid = (int)$guid;
+
+ unset($ENTITY_CACHE[$guid]);
+
+ elgg_get_metadata_cache()->clear($guid);
+}
+
+/**
+ * Cache an entity.
+ *
+ * Stores an entity in $ENTITY_CACHE;
+ *
+ * @param ElggEntity $entity Entity to cache
+ *
+ * @return void
+ * @see _elgg_retrieve_cached_entity()
+ * @see _elgg_invalidate_cache_for_entity()
+ * @access private
+ * @todo Use an ElggCache object
+ */
+function _elgg_cache_entity(ElggEntity $entity) {
+ global $ENTITY_CACHE, $ENTITY_CACHE_DISABLED_GUIDS;
+
+ // Don't cache non-plugin entities while access control is off, otherwise they could be
+ // exposed to users who shouldn't see them when control is re-enabled.
+ if (!($entity instanceof ElggPlugin) && elgg_get_ignore_access()) {
+ return;
+ }
+
+ $guid = $entity->getGUID();
+ if (isset($ENTITY_CACHE_DISABLED_GUIDS[$guid])) {
+ return;
+ }
+
+ // Don't store too many or we'll have memory problems
+ // @todo Pick a less arbitrary limit
+ if (count($ENTITY_CACHE) > 256) {
+ $random_guid = array_rand($ENTITY_CACHE);
+
+ unset($ENTITY_CACHE[$random_guid]);
+
+ // Purge separate metadata cache. Original idea was to do in entity destructor, but that would
+ // have caused a bunch of unnecessary purges at every shutdown. Doing it this way we have no way
+ // to know that the expunged entity will be GCed (might be another reference living), but that's
+ // OK; the metadata will reload if necessary.
+ elgg_get_metadata_cache()->clear($random_guid);
+ }
+
+ $ENTITY_CACHE[$guid] = $entity;
+}
+
+/**
+ * Retrieve a entity from the cache.
+ *
+ * @param int $guid The guid
+ *
+ * @return ElggEntity|bool false if entity not cached, or not fully loaded
+ * @see _elgg_cache_entity()
+ * @see _elgg_invalidate_cache_for_entity()
+ * @access private
+ */
+function _elgg_retrieve_cached_entity($guid) {
+ global $ENTITY_CACHE;
+
+ if (isset($ENTITY_CACHE[$guid])) {
+ if ($ENTITY_CACHE[$guid]->isFullyLoaded()) {
+ return $ENTITY_CACHE[$guid];
+ }
+ }
+
+ return false;
+}
+
+/**
+ * Return the id for a given subtype.
+ *
+ * ElggEntity objects have a type and a subtype. Subtypes
+ * are defined upon creation and cannot be changed.
+ *
+ * Plugin authors generally don't need to use this function
+ * unless writing their own SQL queries. Use {@link ElggEntity::getSubtype()}
+ * to return the string subtype.
+ *
+ * @warning {@link ElggEntity::subtype} returns the ID. You probably want
+ * {@link ElggEntity::getSubtype()} instead!
+ *
+ * @internal Subtypes are stored in the entity_subtypes table. There is a foreign
+ * key in the entities table.
+ *
+ * @param string $type Type
+ * @param string $subtype Subtype
+ *
+ * @return int Subtype ID
+ * @link http://docs.elgg.org/DataModel/Entities/Subtypes
+ * @see get_subtype_from_id()
+ * @access private
+ */
+function get_subtype_id($type, $subtype) {
+ global $SUBTYPE_CACHE;
+
+ if (!$subtype) {
+ return false;
+ }
+
+ if ($SUBTYPE_CACHE === null) {
+ _elgg_populate_subtype_cache();
+ }
+
+ // use the cache before hitting database
+ $result = _elgg_retrieve_cached_subtype($type, $subtype);
+ if ($result !== null) {
+ return $result->id;
+ }
+
+ return false;
+}
+
+/**
+ * Return string name for a given subtype ID.
+ *
+ * @param int $subtype_id Subtype ID
+ *
+ * @return string|false Subtype name, false if subtype not found
+ * @link http://docs.elgg.org/DataModel/Entities/Subtypes
+ * @see get_subtype_from_id()
+ * @access private
+ */
+function get_subtype_from_id($subtype_id) {
+ global $SUBTYPE_CACHE;
+
+ if (!$subtype_id) {
+ return false;
+ }
+
+ if ($SUBTYPE_CACHE === null) {
+ _elgg_populate_subtype_cache();
+ }
+
+ if (isset($SUBTYPE_CACHE[$subtype_id])) {
+ return $SUBTYPE_CACHE[$subtype_id]->subtype;
+ }
+
+ return false;
+}
+
+/**
+ * Retrieve subtype from the cache.
+ *
+ * @param string $type
+ * @param string $subtype
+ * @return stdClass|null
+ *
+ * @access private
+ */
+function _elgg_retrieve_cached_subtype($type, $subtype) {
+ global $SUBTYPE_CACHE;
+
+ if ($SUBTYPE_CACHE === null) {
+ _elgg_populate_subtype_cache();
+ }
+
+ foreach ($SUBTYPE_CACHE as $obj) {
+ if ($obj->type === $type && $obj->subtype === $subtype) {
+ return $obj;
+ }
+ }
+ return null;
+}
+
+/**
+ * Fetch all suptypes from DB to local cache.
+ *
+ * @access private
+ */
+function _elgg_populate_subtype_cache() {
+ global $CONFIG, $SUBTYPE_CACHE;
+
+ $results = get_data("SELECT * FROM {$CONFIG->dbprefix}entity_subtypes");
+
+ $SUBTYPE_CACHE = array();
+ foreach ($results as $row) {
+ $SUBTYPE_CACHE[$row->id] = $row;
+ }
+}
+
+/**
+ * Return the class name for a registered type and subtype.
+ *
+ * Entities can be registered to always be loaded as a certain class
+ * with add_subtype() or update_subtype(). This function returns the class
+ * name if found and NULL if not.
+ *
+ * @param string $type The type
+ * @param string $subtype The subtype
+ *
+ * @return string|null a class name or null
+ * @see get_subtype_from_id()
+ * @see get_subtype_class_from_id()
+ * @access private
+ */
+function get_subtype_class($type, $subtype) {
+ global $SUBTYPE_CACHE;
+
+ if ($SUBTYPE_CACHE === null) {
+ _elgg_populate_subtype_cache();
+ }
+
+ // use the cache before going to the database
+ $obj = _elgg_retrieve_cached_subtype($type, $subtype);
+ if ($obj) {
+ return $obj->class;
+ }
+
+ return null;
+}
+
+/**
+ * Returns the class name for a subtype id.
+ *
+ * @param int $subtype_id The subtype id
+ *
+ * @return string|null
+ * @see get_subtype_class()
+ * @see get_subtype_from_id()
+ * @access private
+ */
+function get_subtype_class_from_id($subtype_id) {
+ global $SUBTYPE_CACHE;
+
+ if (!$subtype_id) {
+ return null;
+ }
+
+ if ($SUBTYPE_CACHE === null) {
+ _elgg_populate_subtype_cache();
+ }
+
+ if (isset($SUBTYPE_CACHE[$subtype_id])) {
+ return $SUBTYPE_CACHE[$subtype_id]->class;
+ }
+
+ return null;
+}
+
+/**
+ * Register ElggEntities with a certain type and subtype to be loaded as a specific class.
+ *
+ * By default entities are loaded as one of the 4 parent objects: site, user, object, or group.
+ * If you subclass any of these you can register the classname with add_subtype() so
+ * it will be loaded as that class automatically when retrieved from the database with
+ * {@link get_entity()}.
+ *
+ * @warning This function cannot be used to change the class for a type-subtype pair.
+ * Use update_subtype() for that.
+ *
+ * @param string $type The type you're subtyping (site, user, object, or group)
+ * @param string $subtype The subtype
+ * @param string $class Optional class name for the object
+ *
+ * @return int
+ * @link http://docs.elgg.org/Tutorials/Subclasses
+ * @link http://docs.elgg.org/DataModel/Entities
+ * @see update_subtype()
+ * @see remove_subtype()
+ * @see get_entity()
+ */
+function add_subtype($type, $subtype, $class = "") {
+ global $CONFIG, $SUBTYPE_CACHE;
+
+ if (!$subtype) {
+ return 0;
+ }
+
+ $id = get_subtype_id($type, $subtype);
+
+ if (!$id) {
+ // In cache we store non-SQL-escaped strings because that's what's returned by query
+ $cache_obj = (object) array(
+ 'type' => $type,
+ 'subtype' => $subtype,
+ 'class' => $class,
+ );
+
+ $type = sanitise_string($type);
+ $subtype = sanitise_string($subtype);
+ $class = sanitise_string($class);
+
+ $id = insert_data("INSERT INTO {$CONFIG->dbprefix}entity_subtypes"
+ . " (type, subtype, class) VALUES ('$type', '$subtype', '$class')");
+
+ // add entry to cache
+ $cache_obj->id = $id;
+ $SUBTYPE_CACHE[$id] = $cache_obj;
+ }
+
+ return $id;
+}
+
+/**
+ * Removes a registered ElggEntity type, subtype, and classname.
+ *
+ * @warning You do not want to use this function. If you want to unregister
+ * a class for a subtype, use update_subtype(). Using this function will
+ * permanently orphan all the objects created with the specified subtype.
+ *
+ * @param string $type Type
+ * @param string $subtype Subtype
+ *
+ * @return bool
+ * @see add_subtype()
+ * @see update_subtype()
+ */
+function remove_subtype($type, $subtype) {
+ global $CONFIG;
+
+ $type = sanitise_string($type);
+ $subtype = sanitise_string($subtype);
+
+ return delete_data("DELETE FROM {$CONFIG->dbprefix}entity_subtypes"
+ . " WHERE type = '$type' AND subtype = '$subtype'");
+}
+
+/**
+ * Update a registered ElggEntity type, subtype, and class name
+ *
+ * @param string $type Type
+ * @param string $subtype Subtype
+ * @param string $class Class name to use when loading this entity
+ *
+ * @return bool
+ */
+function update_subtype($type, $subtype, $class = '') {
+ global $CONFIG, $SUBTYPE_CACHE;
+
+ $id = get_subtype_id($type, $subtype);
+ if (!$id) {
+ return false;
+ }
+
+ if ($SUBTYPE_CACHE === null) {
+ _elgg_populate_subtype_cache();
+ }
+
+ $unescaped_class = $class;
+
+ $type = sanitise_string($type);
+ $subtype = sanitise_string($subtype);
+ $class = sanitise_string($class);
+
+ $success = update_data("UPDATE {$CONFIG->dbprefix}entity_subtypes
+ SET type = '$type', subtype = '$subtype', class = '$class'
+ WHERE id = $id
+ ");
+
+ if ($success && isset($SUBTYPE_CACHE[$id])) {
+ $SUBTYPE_CACHE[$id]->class = $unescaped_class;
+ }
+
+ return $success;
+}
+
+/**
+ * Update an entity in the database.
+ *
+ * There are 4 basic entity types: site, user, object, and group.
+ * All entities are split between two tables: the entities table and their type table.
+ *
+ * @warning Plugin authors should never call this directly. Use ->save() instead.
+ *
+ * @param int $guid The guid of the entity to update
+ * @param int $owner_guid The new owner guid
+ * @param int $access_id The new access id
+ * @param int $container_guid The new container guid
+ * @param int $time_created The time creation timestamp
+ *
+ * @return bool
+ * @throws InvalidParameterException
+ * @access private
+ */
+function update_entity($guid, $owner_guid, $access_id, $container_guid = null, $time_created = null) {
+ global $CONFIG, $ENTITY_CACHE;
+
+ $guid = (int)$guid;
+ $owner_guid = (int)$owner_guid;
+ $access_id = (int)$access_id;
+ $container_guid = (int) $container_guid;
+ if (is_null($container_guid)) {
+ $container_guid = $owner_guid;
+ }
+ $time = time();
+
+ $entity = get_entity($guid);
+
+ if ($time_created == null) {
+ $time_created = $entity->time_created;
+ } else {
+ $time_created = (int) $time_created;
+ }
+
+ if ($access_id == ACCESS_DEFAULT) {
+ throw new InvalidParameterException('ACCESS_DEFAULT is not a valid access level. See its documentation in elgglib.h');
+ }
+
+ if ($entity && $entity->canEdit()) {
+ if (elgg_trigger_event('update', $entity->type, $entity)) {
+ $ret = update_data("UPDATE {$CONFIG->dbprefix}entities
+ set owner_guid='$owner_guid', access_id='$access_id',
+ container_guid='$container_guid', time_created='$time_created',
+ time_updated='$time' WHERE guid=$guid");
+
+ if ($entity instanceof ElggObject) {
+ update_river_access_by_object($guid, $access_id);
+ }
+
+ // If memcache is available then delete this entry from the cache
+ static $newentity_cache;
+ if ((!$newentity_cache) && (is_memcache_available())) {
+ $newentity_cache = new ElggMemcache('new_entity_cache');
+ }
+ if ($newentity_cache) {
+ $newentity_cache->delete($guid);
+ }
+
+ // Handle cases where there was no error BUT no rows were updated!
+ if ($ret === false) {
+ return false;
+ }
+
+ return true;
+ }
+ }
+}
+
+/**
+ * Determine if a given user can write to an entity container.
+ *
+ * An entity can be a container for any other entity by setting the
+ * container_guid. container_guid can differ from owner_guid.
+ *
+ * A plugin hook container_permissions_check:$entity_type is emitted to allow granular
+ * access controls in plugins.
+ *
+ * @param int $user_guid The user guid, or 0 for logged in user
+ * @param int $container_guid The container, or 0 for the current page owner.
+ * @param string $type The type of entity we're looking to write
+ * @param string $subtype The subtype of the entity we're looking to write
+ *
+ * @return bool
+ * @link http://docs.elgg.org/DataModel/Containers
+ */
+function can_write_to_container($user_guid = 0, $container_guid = 0, $type = 'all', $subtype = 'all') {
+ $user_guid = (int)$user_guid;
+ $user = get_entity($user_guid);
+ if (!$user) {
+ $user = elgg_get_logged_in_user_entity();
+ }
+
+ $container_guid = (int)$container_guid;
+ if (!$container_guid) {
+ $container_guid = elgg_get_page_owner_guid();
+ }
+
+ $return = false;
+
+ if (!$container_guid) {
+ $return = true;
+ }
+
+ $container = get_entity($container_guid);
+
+ if ($container) {
+ // If the user can edit the container, they can also write to it
+ if ($container->canEdit($user_guid)) {
+ $return = true;
+ }
+
+ // If still not approved, see if the user is a member of the group
+ // @todo this should be moved to the groups plugin/library
+ if (!$return && $user && $container instanceof ElggGroup) {
+ /* @var ElggGroup $container */
+ if ($container->isMember($user)) {
+ $return = true;
+ }
+ }
+ }
+
+ // See if anyone else has anything to say
+ return elgg_trigger_plugin_hook(
+ 'container_permissions_check',
+ $type,
+ array(
+ 'container' => $container,
+ 'user' => $user,
+ 'subtype' => $subtype
+ ),
+ $return);
+}
+
+/**
+ * Create a new entry in the entities table.
+ *
+ * Saves the base information in the entities table for the entity. Saving
+ * the type information is handled in the calling class method.
+ *
+ * @warning Plugin authors should never call this directly. Always use entity objects.
+ *
+ * @warning Entities must have an entry in both the entities table and their type table
+ * or they will throw an exception when loaded.
+ *
+ * @param string $type The type of the entity (site, user, object, group).
+ * @param string $subtype The subtype of the entity.
+ * @param int $owner_guid The GUID of the object's owner.
+ * @param int $access_id The access control group to create the entity with.
+ * @param int $site_guid The site to add this entity to. 0 for current.
+ * @param int $container_guid The container GUID
+ *
+ * @return int|false The new entity's GUID, or false on failure
+ * @throws InvalidParameterException
+ * @link http://docs.elgg.org/DataModel/Entities
+ * @access private
+ */
+function create_entity($type, $subtype, $owner_guid, $access_id, $site_guid = 0,
+$container_guid = 0) {
+
+ global $CONFIG;
+
+ $type = sanitise_string($type);
+ $subtype_id = add_subtype($type, $subtype);
+ $owner_guid = (int)$owner_guid;
+ $time = time();
+ if ($site_guid == 0) {
+ $site_guid = $CONFIG->site_guid;
+ }
+ $site_guid = (int) $site_guid;
+ if ($container_guid == 0) {
+ $container_guid = $owner_guid;
+ }
+ $access_id = (int)$access_id;
+ if ($access_id == ACCESS_DEFAULT) {
+ throw new InvalidParameterException('ACCESS_DEFAULT is not a valid access level. See its documentation in elgglib.h');
+ }
+
+ $user_guid = elgg_get_logged_in_user_guid();
+ if (!can_write_to_container($user_guid, $owner_guid, $type, $subtype)) {
+ return false;
+ }
+ if ($owner_guid != $container_guid) {
+ if (!can_write_to_container($user_guid, $container_guid, $type, $subtype)) {
+ return false;
+ }
+ }
+ if ($type == "") {
+ throw new InvalidParameterException(elgg_echo('InvalidParameterException:EntityTypeNotSet'));
+ }
+
+ return insert_data("INSERT into {$CONFIG->dbprefix}entities
+ (type, subtype, owner_guid, site_guid, container_guid,
+ access_id, time_created, time_updated, last_action)
+ values
+ ('$type',$subtype_id, $owner_guid, $site_guid, $container_guid,
+ $access_id, $time, $time, $time)");
+}
+
+/**
+ * Returns a database row from the entities table.
+ *
+ * @tip Use get_entity() to return the fully loaded entity.
+ *
+ * @warning This will only return results if a) it exists, b) you have access to it.
+ * see {@link get_access_sql_suffix()}.
+ *
+ * @param int $guid The GUID of the object to extract
+ *
+ * @return stdClass|false
+ * @link http://docs.elgg.org/DataModel/Entities
+ * @see entity_row_to_elggstar()
+ * @access private
+ */
+function get_entity_as_row($guid) {
+ global $CONFIG;
+
+ if (!$guid) {
+ return false;
+ }
+
+ $guid = (int) $guid;
+ $access = get_access_sql_suffix();
+
+ return get_data_row("SELECT * from {$CONFIG->dbprefix}entities where guid=$guid and $access");
+}
+
+/**
+ * Create an Elgg* object from a given entity row.
+ *
+ * Handles loading all tables into the correct class.
+ *
+ * @param stdClass $row The row of the entry in the entities table.
+ *
+ * @return ElggEntity|false
+ * @link http://docs.elgg.org/DataModel/Entities
+ * @see get_entity_as_row()
+ * @see add_subtype()
+ * @see get_entity()
+ * @access private
+ *
+ * @throws ClassException|InstallationException
+ */
+function entity_row_to_elggstar($row) {
+ if (!($row instanceof stdClass)) {
+ return $row;
+ }
+
+ if ((!isset($row->guid)) || (!isset($row->subtype))) {
+ return $row;
+ }
+
+ $new_entity = false;
+
+ // Create a memcache cache if we can
+ static $newentity_cache;
+ if ((!$newentity_cache) && (is_memcache_available())) {
+ $newentity_cache = new ElggMemcache('new_entity_cache');
+ }
+ if ($newentity_cache) {
+ $new_entity = $newentity_cache->load($row->guid);
+ }
+ if ($new_entity) {
+ return $new_entity;
+ }
+
+ // load class for entity if one is registered
+ $classname = get_subtype_class_from_id($row->subtype);
+ if ($classname != "") {
+ if (class_exists($classname)) {
+ $new_entity = new $classname($row);
+
+ if (!($new_entity instanceof ElggEntity)) {
+ $msg = elgg_echo('ClassException:ClassnameNotClass', array($classname, 'ElggEntity'));
+ throw new ClassException($msg);
+ }
+ } else {
+ error_log(elgg_echo('ClassNotFoundException:MissingClass', array($classname)));
+ }
+ }
+
+ if (!$new_entity) {
+ //@todo Make this into a function
+ switch ($row->type) {
+ case 'object' :
+ $new_entity = new ElggObject($row);
+ break;
+ case 'user' :
+ $new_entity = new ElggUser($row);
+ break;
+ case 'group' :
+ $new_entity = new ElggGroup($row);
+ break;
+ case 'site' :
+ $new_entity = new ElggSite($row);
+ break;
+ default:
+ $msg = elgg_echo('InstallationException:TypeNotSupported', array($row->type));
+ throw new InstallationException($msg);
+ }
+ }
+
+ // Cache entity if we have a cache available
+ if (($newentity_cache) && ($new_entity)) {
+ $newentity_cache->save($new_entity->guid, $new_entity);
+ }
+
+ return $new_entity;
+}
+
+/**
+ * Loads and returns an entity object from a guid.
+ *
+ * @param int $guid The GUID of the entity
+ *
+ * @return ElggEntity The correct Elgg or custom object based upon entity type and subtype
+ * @link http://docs.elgg.org/DataModel/Entities
+ */
+function get_entity($guid) {
+ // This should not be a static local var. Notice that cache writing occurs in a completely
+ // different instance outside this function.
+ // @todo We need a single Memcache instance with a shared pool of namespace wrappers. This function would pull an instance from the pool.
+ static $shared_cache;
+
+ // We could also use: if (!(int) $guid) { return FALSE },
+ // but that evaluates to a false positive for $guid = TRUE.
+ // This is a bit slower, but more thorough.
+ if (!is_numeric($guid) || $guid === 0 || $guid === '0') {
+ return false;
+ }
+
+ // Check local cache first
+ $new_entity = _elgg_retrieve_cached_entity($guid);
+ if ($new_entity) {
+ return $new_entity;
+ }
+
+ // Check shared memory cache, if available
+ if (null === $shared_cache) {
+ if (is_memcache_available()) {
+ $shared_cache = new ElggMemcache('new_entity_cache');
+ } else {
+ $shared_cache = false;
+ }
+ }
+
+ // until ACLs in memcache, DB query is required to determine access
+ $entity_row = get_entity_as_row($guid);
+ if (!$entity_row) {
+ return false;
+ }
+
+ if ($shared_cache) {
+ $cached_entity = $shared_cache->load($guid);
+ // @todo store ACLs in memcache https://github.com/elgg/elgg/issues/3018#issuecomment-13662617
+ if ($cached_entity) {
+ // @todo use ACL and cached entity access_id to determine if user can see it
+ return $cached_entity;
+ }
+ }
+
+ // don't let incomplete entities cause fatal exceptions
+ try {
+ $new_entity = entity_row_to_elggstar($entity_row);
+ } catch (IncompleteEntityException $e) {
+ return false;
+ }
+
+ if ($new_entity) {
+ _elgg_cache_entity($new_entity);
+ }
+ return $new_entity;
+}
+
+/**
+ * Does an entity exist?
+ *
+ * This function checks for the existence of an entity independent of access
+ * permissions. It is useful for situations when a user cannot access an entity
+ * and it must be determined whether entity has been deleted or the access level
+ * has changed.
+ *
+ * @param int $guid The GUID of the entity
+ *
+ * @return bool
+ * @since 1.8.0
+ */
+function elgg_entity_exists($guid) {
+ global $CONFIG;
+
+ $guid = sanitize_int($guid);
+
+ $query = "SELECT count(*) as total FROM {$CONFIG->dbprefix}entities WHERE guid = $guid";
+ $result = get_data_row($query);
+ if ($result->total == 0) {
+ return false;
+ } else {
+ return true;
+ }
+}
+
+/**
+ * Returns an array of entities with optional filtering.
+ *
+ * Entities are the basic unit of storage in Elgg. This function
+ * provides the simplest way to get an array of entities. There
+ * are many options available that can be passed to filter
+ * what sorts of entities are returned.
+ *
+ * @tip To output formatted strings of entities, use {@link elgg_list_entities()} and
+ * its cousins.
+ *
+ * @tip Plural arguments can be written as singular if only specifying a
+ * single element. ('type' => 'object' vs 'types' => array('object')).
+ *
+ * @param array $options Array in format:
+ *
+ * types => NULL|STR entity type (type IN ('type1', 'type2')
+ * Joined with subtypes by AND. See below)
+ *
+ * subtypes => NULL|STR entity subtype (SQL: subtype IN ('subtype1', 'subtype2))
+ * Use ELGG_ENTITIES_NO_VALUE for no subtype.
+ *
+ * type_subtype_pairs => NULL|ARR (array('type' => 'subtype'))
+ * (type = '$type' AND subtype = '$subtype') pairs
+ *
+ * guids => NULL|ARR Array of entity guids
+ *
+ * owner_guids => NULL|ARR Array of owner guids
+ *
+ * container_guids => NULL|ARR Array of container_guids
+ *
+ * site_guids => NULL (current_site)|ARR Array of site_guid
+ *
+ * order_by => NULL (time_created desc)|STR SQL order by clause
+ *
+ * reverse_order_by => BOOL Reverse the default order by clause
+ *
+ * limit => NULL (10)|INT SQL limit clause (0 means no limit)
+ *
+ * offset => NULL (0)|INT SQL offset clause
+ *
+ * created_time_lower => NULL|INT Created time lower boundary in epoch time
+ *
+ * created_time_upper => NULL|INT Created time upper boundary in epoch time
+ *
+ * modified_time_lower => NULL|INT Modified time lower boundary in epoch time
+ *
+ * modified_time_upper => NULL|INT Modified time upper boundary in epoch time
+ *
+ * count => TRUE|FALSE return a count instead of entities
+ *
+ * wheres => array() Additional where clauses to AND together
+ *
+ * joins => array() Additional joins
+ *
+ * callback => string A callback function to pass each row through
+ *
+ * @return mixed If count, int. If not count, array. false on errors.
+ * @since 1.7.0
+ * @see elgg_get_entities_from_metadata()
+ * @see elgg_get_entities_from_relationship()
+ * @see elgg_get_entities_from_access_id()
+ * @see elgg_get_entities_from_annotations()
+ * @see elgg_list_entities()
+ * @link http://docs.elgg.org/DataModel/Entities/Getters
+ */
+function elgg_get_entities(array $options = array()) {
+ global $CONFIG;
+
+ $defaults = array(
+ 'types' => ELGG_ENTITIES_ANY_VALUE,
+ 'subtypes' => ELGG_ENTITIES_ANY_VALUE,
+ 'type_subtype_pairs' => ELGG_ENTITIES_ANY_VALUE,
+
+ 'guids' => ELGG_ENTITIES_ANY_VALUE,
+ 'owner_guids' => ELGG_ENTITIES_ANY_VALUE,
+ 'container_guids' => ELGG_ENTITIES_ANY_VALUE,
+ 'site_guids' => $CONFIG->site_guid,
+
+ 'modified_time_lower' => ELGG_ENTITIES_ANY_VALUE,
+ 'modified_time_upper' => ELGG_ENTITIES_ANY_VALUE,
+ 'created_time_lower' => ELGG_ENTITIES_ANY_VALUE,
+ 'created_time_upper' => ELGG_ENTITIES_ANY_VALUE,
+
+ 'reverse_order_by' => false,
+ 'order_by' => 'e.time_created desc',
+ 'group_by' => ELGG_ENTITIES_ANY_VALUE,
+ 'limit' => 10,
+ 'offset' => 0,
+ 'count' => FALSE,
+ 'selects' => array(),
+ 'wheres' => array(),
+ 'joins' => array(),
+
+ 'callback' => 'entity_row_to_elggstar',
+
+ '__ElggBatch' => null,
+ );
+
+ $options = array_merge($defaults, $options);
+
+ // can't use helper function with type_subtype_pair because
+ // it's already an array...just need to merge it
+ if (isset($options['type_subtype_pair'])) {
+ if (isset($options['type_subtype_pairs'])) {
+ $options['type_subtype_pairs'] = array_merge($options['type_subtype_pairs'],
+ $options['type_subtype_pair']);
+ } else {
+ $options['type_subtype_pairs'] = $options['type_subtype_pair'];
+ }
+ }
+
+ $singulars = array('type', 'subtype', 'guid', 'owner_guid', 'container_guid', 'site_guid');
+ $options = elgg_normalise_plural_options_array($options, $singulars);
+
+ // evaluate where clauses
+ if (!is_array($options['wheres'])) {
+ $options['wheres'] = array($options['wheres']);
+ }
+
+ $wheres = $options['wheres'];
+
+ $wheres[] = elgg_get_entity_type_subtype_where_sql('e', $options['types'],
+ $options['subtypes'], $options['type_subtype_pairs']);
+
+ $wheres[] = elgg_get_guid_based_where_sql('e.guid', $options['guids']);
+ $wheres[] = elgg_get_guid_based_where_sql('e.owner_guid', $options['owner_guids']);
+ $wheres[] = elgg_get_guid_based_where_sql('e.container_guid', $options['container_guids']);
+ $wheres[] = elgg_get_guid_based_where_sql('e.site_guid', $options['site_guids']);
+
+ $wheres[] = elgg_get_entity_time_where_sql('e', $options['created_time_upper'],
+ $options['created_time_lower'], $options['modified_time_upper'], $options['modified_time_lower']);
+
+ // see if any functions failed
+ // remove empty strings on successful functions
+ foreach ($wheres as $i => $where) {
+ if ($where === FALSE) {
+ return FALSE;
+ } elseif (empty($where)) {
+ unset($wheres[$i]);
+ }
+ }
+
+ // remove identical where clauses
+ $wheres = array_unique($wheres);
+
+ // evaluate join clauses
+ if (!is_array($options['joins'])) {
+ $options['joins'] = array($options['joins']);
+ }
+
+ // remove identical join clauses
+ $joins = array_unique($options['joins']);
+
+ foreach ($joins as $i => $join) {
+ if ($join === FALSE) {
+ return FALSE;
+ } elseif (empty($join)) {
+ unset($joins[$i]);
+ }
+ }
+
+ // evalutate selects
+ if ($options['selects']) {
+ $selects = '';
+ foreach ($options['selects'] as $select) {
+ $selects .= ", $select";
+ }
+ } else {
+ $selects = '';
+ }
+
+ if (!$options['count']) {
+ $query = "SELECT DISTINCT e.*{$selects} FROM {$CONFIG->dbprefix}entities e ";
+ } else {
+ $query = "SELECT count(DISTINCT e.guid) as total FROM {$CONFIG->dbprefix}entities e ";
+ }
+
+ // add joins
+ foreach ($joins as $j) {
+ $query .= " $j ";
+ }
+
+ // add wheres
+ $query .= ' WHERE ';
+
+ foreach ($wheres as $w) {
+ $query .= " $w AND ";
+ }
+
+ // Add access controls
+ $query .= get_access_sql_suffix('e');
+
+ // reverse order by
+ if ($options['reverse_order_by']) {
+ $options['order_by'] = elgg_sql_reverse_order_by_clause($options['order_by']);
+ }
+
+ if (!$options['count']) {
+ if ($options['group_by']) {
+ $query .= " GROUP BY {$options['group_by']}";
+ }
+
+ if ($options['order_by']) {
+ $query .= " ORDER BY {$options['order_by']}";
+ }
+
+ if ($options['limit']) {
+ $limit = sanitise_int($options['limit'], false);
+ $offset = sanitise_int($options['offset'], false);
+ $query .= " LIMIT $offset, $limit";
+ }
+
+ if ($options['callback'] === 'entity_row_to_elggstar') {
+ $dt = _elgg_fetch_entities_from_sql($query, $options['__ElggBatch']);
+ } else {
+ $dt = get_data($query, $options['callback']);
+ }
+
+ if ($dt) {
+ // populate entity and metadata caches
+ $guids = array();
+ foreach ($dt as $item) {
+ // A custom callback could result in items that aren't ElggEntity's, so check for them
+ if ($item instanceof ElggEntity) {
+ _elgg_cache_entity($item);
+ // plugins usually have only settings
+ if (!$item instanceof ElggPlugin) {
+ $guids[] = $item->guid;
+ }
+ }
+ }
+ // @todo Without this, recursive delete fails. See #4568
+ reset($dt);
+
+ if ($guids) {
+ elgg_get_metadata_cache()->populateFromEntities($guids);
+ }
+ }
+ return $dt;
+ } else {
+ $total = get_data_row($query);
+ return (int)$total->total;
+ }
+}
+
+/**
+ * Return entities from an SQL query generated by elgg_get_entities.
+ *
+ * @param string $sql
+ * @param ElggBatch $batch
+ * @return ElggEntity[]
+ *
+ * @access private
+ * @throws LogicException
+ */
+function _elgg_fetch_entities_from_sql($sql, ElggBatch $batch = null) {
+ static $plugin_subtype;
+ if (null === $plugin_subtype) {
+ $plugin_subtype = get_subtype_id('object', 'plugin');
+ }
+
+ // Keys are types, values are columns that, if present, suggest that the secondary
+ // table is already JOINed
+ $types_to_optimize = array(
+ 'object' => 'title',
+ 'user' => 'password',
+ 'group' => 'name',
+ );
+
+ $rows = get_data($sql);
+
+ // guids to look up in each type
+ $lookup_types = array();
+ // maps GUIDs to the $rows key
+ $guid_to_key = array();
+
+ if (isset($rows[0]->type, $rows[0]->subtype)
+ && $rows[0]->type === 'object'
+ && $rows[0]->subtype == $plugin_subtype) {
+ // Likely the entire resultset is plugins, which have already been optimized
+ // to JOIN the secondary table. In this case we allow retrieving from cache,
+ // but abandon the extra queries.
+ $types_to_optimize = array();
+ }
+
+ // First pass: use cache where possible, gather GUIDs that we're optimizing
+ foreach ($rows as $i => $row) {
+ if (empty($row->guid) || empty($row->type)) {
+ throw new LogicException('Entity row missing guid or type');
+ }
+ if ($entity = _elgg_retrieve_cached_entity($row->guid)) {
+ $rows[$i] = $entity;
+ continue;
+ }
+ if (isset($types_to_optimize[$row->type])) {
+ // check if row already looks JOINed.
+ if (isset($row->{$types_to_optimize[$row->type]})) {
+ // Row probably already contains JOINed secondary table. Don't make another query just
+ // to pull data that's already there
+ continue;
+ }
+ $lookup_types[$row->type][] = $row->guid;
+ $guid_to_key[$row->guid] = $i;
+ }
+ }
+ // Do secondary queries and merge rows
+ if ($lookup_types) {
+ $dbprefix = elgg_get_config('dbprefix');
+
+ foreach ($lookup_types as $type => $guids) {
+ $set = "(" . implode(',', $guids) . ")";
+ $sql = "SELECT * FROM {$dbprefix}{$type}s_entity WHERE guid IN $set";
+ $secondary_rows = get_data($sql);
+ if ($secondary_rows) {
+ foreach ($secondary_rows as $secondary_row) {
+ $key = $guid_to_key[$secondary_row->guid];
+ // cast to arrays to merge then cast back
+ $rows[$key] = (object)array_merge((array)$rows[$key], (array)$secondary_row);
+ }
+ }
+ }
+ }
+ // Second pass to finish conversion
+ foreach ($rows as $i => $row) {
+ if ($row instanceof ElggEntity) {
+ continue;
+ } else {
+ try {
+ $rows[$i] = entity_row_to_elggstar($row);
+ } catch (IncompleteEntityException $e) {
+ // don't let incomplete entities throw fatal errors
+ unset($rows[$i]);
+
+ // report incompletes to the batch process that spawned this query
+ if ($batch) {
+ $batch->reportIncompleteEntity($row);
+ }
+ }
+ }
+ }
+ return $rows;
+}
+
+/**
+ * Returns SQL where clause for type and subtype on main entity table
+ *
+ * @param string $table Entity table prefix as defined in SELECT...FROM entities $table
+ * @param NULL|array $types Array of types or NULL if none.
+ * @param NULL|array $subtypes Array of subtypes or NULL if none
+ * @param NULL|array $pairs Array of pairs of types and subtypes
+ *
+ * @return FALSE|string
+ * @since 1.7.0
+ * @access private
+ */
+function elgg_get_entity_type_subtype_where_sql($table, $types, $subtypes, $pairs) {
+ // subtype depends upon type.
+ if ($subtypes && !$types) {
+ elgg_log("Cannot set subtypes without type.", 'WARNING');
+ return FALSE;
+ }
+
+ // short circuit if nothing is requested
+ if (!$types && !$subtypes && !$pairs) {
+ return '';
+ }
+
+ // these are the only valid types for entities in elgg
+ $valid_types = elgg_get_config('entity_types');
+
+ // pairs override
+ $wheres = array();
+ if (!is_array($pairs)) {
+ if (!is_array($types)) {
+ $types = array($types);
+ }
+
+ if ($subtypes && !is_array($subtypes)) {
+ $subtypes = array($subtypes);
+ }
+
+ // decrementer for valid types. Return FALSE if no valid types
+ $valid_types_count = count($types);
+ $valid_subtypes_count = 0;
+ // remove invalid types to get an accurate count of
+ // valid types for the invalid subtype detection to use
+ // below.
+ // also grab the count of ALL subtypes on valid types to decrement later on
+ // and check against.
+ //
+ // yes this is duplicating a foreach on $types.
+ foreach ($types as $type) {
+ if (!in_array($type, $valid_types)) {
+ $valid_types_count--;
+ unset($types[array_search($type, $types)]);
+ } else {
+ // do the checking (and decrementing) in the subtype section.
+ $valid_subtypes_count += count($subtypes);
+ }
+ }
+
+ // return false if nothing is valid.
+ if (!$valid_types_count) {
+ return FALSE;
+ }
+
+ // subtypes are based upon types, so we need to look at each
+ // type individually to get the right subtype id.
+ foreach ($types as $type) {
+ $subtype_ids = array();
+ if ($subtypes) {
+ foreach ($subtypes as $subtype) {
+ // check that the subtype is valid
+ if (!$subtype && ELGG_ENTITIES_NO_VALUE === $subtype) {
+ // subtype value is 0
+ $subtype_ids[] = ELGG_ENTITIES_NO_VALUE;
+ } elseif (!$subtype) {
+ // subtype is ignored.
+ // this handles ELGG_ENTITIES_ANY_VALUE, '', and anything falsy that isn't 0
+ continue;
+ } else {
+ $subtype_id = get_subtype_id($type, $subtype);
+
+ if ($subtype_id) {
+ $subtype_ids[] = $subtype_id;
+ } else {
+ $valid_subtypes_count--;
+ elgg_log("Type-subtype '$type:$subtype' does not exist!", 'NOTICE');
+ continue;
+ }
+ }
+ }
+
+ // return false if we're all invalid subtypes in the only valid type
+ if ($valid_subtypes_count <= 0) {
+ return FALSE;
+ }
+ }
+
+ if (is_array($subtype_ids) && count($subtype_ids)) {
+ $subtype_ids_str = implode(',', $subtype_ids);
+ $wheres[] = "({$table}.type = '$type' AND {$table}.subtype IN ($subtype_ids_str))";
+ } else {
+ $wheres[] = "({$table}.type = '$type')";
+ }
+ }
+ } else {
+ // using type/subtype pairs
+ $valid_pairs_count = count($pairs);
+ $valid_pairs_subtypes_count = 0;
+
+ // same deal as above--we need to know how many valid types
+ // and subtypes we have before hitting the subtype section.
+ // also normalize the subtypes into arrays here.
+ foreach ($pairs as $paired_type => $paired_subtypes) {
+ if (!in_array($paired_type, $valid_types)) {
+ $valid_pairs_count--;
+ unset($pairs[array_search($paired_type, $pairs)]);
+ } else {
+ if ($paired_subtypes && !is_array($paired_subtypes)) {
+ $pairs[$paired_type] = array($paired_subtypes);
+ }
+ $valid_pairs_subtypes_count += count($paired_subtypes);
+ }
+ }
+
+ if ($valid_pairs_count <= 0) {
+ return FALSE;
+ }
+ foreach ($pairs as $paired_type => $paired_subtypes) {
+ // this will always be an array because of line 2027, right?
+ // no...some overly clever person can say pair => array('object' => null)
+ if (is_array($paired_subtypes)) {
+ $paired_subtype_ids = array();
+ foreach ($paired_subtypes as $paired_subtype) {
+ if (ELGG_ENTITIES_NO_VALUE === $paired_subtype
+ || ($paired_subtype_id = get_subtype_id($paired_type, $paired_subtype))) {
+
+ $paired_subtype_ids[] = (ELGG_ENTITIES_NO_VALUE === $paired_subtype) ?
+ ELGG_ENTITIES_NO_VALUE : $paired_subtype_id;
+ } else {
+ $valid_pairs_subtypes_count--;
+ elgg_log("Type-subtype '$paired_type:$paired_subtype' does not exist!", 'NOTICE');
+ // return false if we're all invalid subtypes in the only valid type
+ continue;
+ }
+ }
+
+ // return false if there are no valid subtypes.
+ if ($valid_pairs_subtypes_count <= 0) {
+ return FALSE;
+ }
+
+
+ if ($paired_subtype_ids_str = implode(',', $paired_subtype_ids)) {
+ $wheres[] = "({$table}.type = '$paired_type'"
+ . " AND {$table}.subtype IN ($paired_subtype_ids_str))";
+ }
+ } else {
+ $wheres[] = "({$table}.type = '$paired_type')";
+ }
+ }
+ }
+
+ // pairs override the above. return false if they don't exist.
+ if (is_array($wheres) && count($wheres)) {
+ $where = implode(' OR ', $wheres);
+ return "($where)";
+ }
+
+ return '';
+}
+
+/**
+ * Returns SQL where clause for owner and containers.
+ *
+ * @param string $column Column name the guids should be checked against. Usually
+ * best to provide in table.column format.
+ * @param NULL|array $guids Array of GUIDs.
+ *
+ * @return false|string
+ * @since 1.8.0
+ * @access private
+ */
+function elgg_get_guid_based_where_sql($column, $guids) {
+ // short circuit if nothing requested
+ // 0 is a valid guid
+ if (!$guids && $guids !== 0) {
+ return '';
+ }
+
+ // normalize and sanitise owners
+ if (!is_array($guids)) {
+ $guids = array($guids);
+ }
+
+ $guids_sanitized = array();
+ foreach ($guids as $guid) {
+ if ($guid !== ELGG_ENTITIES_NO_VALUE) {
+ $guid = sanitise_int($guid);
+
+ if (!$guid) {
+ return false;
+ }
+ }
+ $guids_sanitized[] = $guid;
+ }
+
+ $where = '';
+ $guid_str = implode(',', $guids_sanitized);
+
+ // implode(',', 0) returns 0.
+ if ($guid_str !== FALSE && $guid_str !== '') {
+ $where = "($column IN ($guid_str))";
+ }
+
+ return $where;
+}
+
+/**
+ * Returns SQL where clause for entity time limits.
+ *
+ * @param string $table Entity table prefix as defined in
+ * SELECT...FROM entities $table
+ * @param NULL|int $time_created_upper Time created upper limit
+ * @param NULL|int $time_created_lower Time created lower limit
+ * @param NULL|int $time_updated_upper Time updated upper limit
+ * @param NULL|int $time_updated_lower Time updated lower limit
+ *
+ * @return FALSE|string FALSE on fail, string on success.
+ * @since 1.7.0
+ * @access private
+ */
+function elgg_get_entity_time_where_sql($table, $time_created_upper = NULL,
+$time_created_lower = NULL, $time_updated_upper = NULL, $time_updated_lower = NULL) {
+
+ $wheres = array();
+
+ // exploit PHP's loose typing (quack) to check that they are INTs and not str cast to 0
+ if ($time_created_upper && $time_created_upper == sanitise_int($time_created_upper)) {
+ $wheres[] = "{$table}.time_created <= $time_created_upper";
+ }
+
+ if ($time_created_lower && $time_created_lower == sanitise_int($time_created_lower)) {
+ $wheres[] = "{$table}.time_created >= $time_created_lower";
+ }
+
+ if ($time_updated_upper && $time_updated_upper == sanitise_int($time_updated_upper)) {
+ $wheres[] = "{$table}.time_updated <= $time_updated_upper";
+ }
+
+ if ($time_updated_lower && $time_updated_lower == sanitise_int($time_updated_lower)) {
+ $wheres[] = "{$table}.time_updated >= $time_updated_lower";
+ }
+
+ if (is_array($wheres) && count($wheres) > 0) {
+ $where_str = implode(' AND ', $wheres);
+ return "($where_str)";
+ }
+
+ return '';
+}
+
+/**
+ * Returns a string of parsed entities.
+ *
+ * Displays list of entities with formatting specified
+ * by the entity view.
+ *
+ * @tip Pagination is handled automatically.
+ *
+ * @internal This also provides the views for elgg_view_annotation().
+ *
+ * @param array $options Any options from $getter options plus:
+ * full_view => BOOL Display full view entities
+ * list_type => STR 'list' or 'gallery'
+ * list_type_toggle => BOOL Display gallery / list switch
+ * pagination => BOOL Display pagination links
+ *
+ * @param mixed $getter The entity getter function to use to fetch the entities
+ * @param mixed $viewer The function to use to view the entity list.
+ *
+ * @return string
+ * @since 1.7
+ * @see elgg_get_entities()
+ * @see elgg_view_entity_list()
+ * @link http://docs.elgg.org/Entities/Output
+ */
+function elgg_list_entities(array $options = array(), $getter = 'elgg_get_entities',
+ $viewer = 'elgg_view_entity_list') {
+
+ global $autofeed;
+ $autofeed = true;
+
+ $offset_key = isset($options['offset_key']) ? $options['offset_key'] : 'offset';
+
+ $defaults = array(
+ 'offset' => (int) max(get_input($offset_key, 0), 0),
+ 'limit' => (int) max(get_input('limit', 10), 0),
+ 'full_view' => TRUE,
+ 'list_type_toggle' => FALSE,
+ 'pagination' => TRUE,
+ );
+
+ $options = array_merge($defaults, $options);
+
+ //backwards compatibility
+ if (isset($options['view_type_toggle'])) {
+ $options['list_type_toggle'] = $options['view_type_toggle'];
+ }
+
+ $options['count'] = TRUE;
+ $count = $getter($options);
+
+ $options['count'] = FALSE;
+ $entities = $getter($options);
+
+ $options['count'] = $count;
+
+ return $viewer($entities, $options);
+}
+
+/**
+ * Returns a list of months in which entities were updated or created.
+ *
+ * @tip Use this to generate a list of archives by month for when entities were added or updated.
+ *
+ * @todo document how to pass in array for $subtype
+ *
+ * @warning Months are returned in the form YYYYMM.
+ *
+ * @param string $type The type of entity
+ * @param string $subtype The subtype of entity
+ * @param int $container_guid The container GUID that the entities belong to
+ * @param int $site_guid The site GUID
+ * @param string $order_by Order_by SQL order by clause
+ *
+ * @return array|false Either an array months as YYYYMM, or false on failure
+ */
+function get_entity_dates($type = '', $subtype = '', $container_guid = 0, $site_guid = 0,
+$order_by = 'time_created') {
+
+ global $CONFIG;
+
+ $site_guid = (int) $site_guid;
+ if ($site_guid == 0) {
+ $site_guid = $CONFIG->site_guid;
+ }
+ $where = array();
+
+ if ($type != "") {
+ $type = sanitise_string($type);
+ $where[] = "type='$type'";
+ }
+
+ if (is_array($subtype)) {
+ $tempwhere = "";
+ if (sizeof($subtype)) {
+ foreach ($subtype as $typekey => $subtypearray) {
+ foreach ($subtypearray as $subtypeval) {
+ $typekey = sanitise_string($typekey);
+ if (!empty($subtypeval)) {
+ if (!$subtypeval = (int) get_subtype_id($typekey, $subtypeval)) {
+ return false;
+ }
+ } else {
+ $subtypeval = 0;
+ }
+ if (!empty($tempwhere)) {
+ $tempwhere .= " or ";
+ }
+ $tempwhere .= "(type = '{$typekey}' and subtype = {$subtypeval})";
+ }
+ }
+ }
+ if (!empty($tempwhere)) {
+ $where[] = "({$tempwhere})";
+ }
+ } else {
+ if ($subtype) {
+ if (!$subtype_id = get_subtype_id($type, $subtype)) {
+ return FALSE;
+ } else {
+ $where[] = "subtype=$subtype_id";
+ }
+ }
+ }
+
+ if ($container_guid !== 0) {
+ if (is_array($container_guid)) {
+ foreach ($container_guid as $key => $val) {
+ $container_guid[$key] = (int) $val;
+ }
+ $where[] = "container_guid in (" . implode(",", $container_guid) . ")";
+ } else {
+ $container_guid = (int) $container_guid;
+ $where[] = "container_guid = {$container_guid}";
+ }
+ }
+
+ if ($site_guid > 0) {
+ $where[] = "site_guid = {$site_guid}";
+ }
+
+ $where[] = get_access_sql_suffix();
+
+ $sql = "SELECT DISTINCT EXTRACT(YEAR_MONTH FROM FROM_UNIXTIME(time_created)) AS yearmonth
+ FROM {$CONFIG->dbprefix}entities where ";
+
+ foreach ($where as $w) {
+ $sql .= " $w and ";
+ }
+
+ $sql .= "1=1 ORDER BY $order_by";
+ if ($result = get_data($sql)) {
+ $endresult = array();
+ foreach ($result as $res) {
+ $endresult[] = $res->yearmonth;
+ }
+ return $endresult;
+ }
+ return false;
+}
+
+/**
+ * Disable an entity.
+ *
+ * Disabled entities do not show up in list or elgg_get_entity()
+ * calls, but still exist in the database.
+ *
+ * Entities are disabled by setting disabled = yes in the
+ * entities table.
+ *
+ * You can ignore the disabled field by using {@link access_show_hidden_entities()}.
+ *
+ * @note Use ElggEntity::disable() instead.
+ *
+ * @param int $guid The guid
+ * @param string $reason Optional reason
+ * @param bool $recursive Recursively disable all entities owned or contained by $guid?
+ *
+ * @return bool
+ * @see access_show_hidden_entities()
+ * @link http://docs.elgg.org/Entities
+ * @access private
+ */
+function disable_entity($guid, $reason = "", $recursive = true) {
+ global $CONFIG;
+
+ $guid = (int)$guid;
+ $reason = sanitise_string($reason);
+
+ if ($entity = get_entity($guid)) {
+ if (elgg_trigger_event('disable', $entity->type, $entity)) {
+ if ($entity->canEdit()) {
+ if ($reason) {
+ create_metadata($guid, 'disable_reason', $reason, '', 0, ACCESS_PUBLIC);
+ }
+
+ if ($recursive) {
+ $hidden = access_get_show_hidden_status();
+ access_show_hidden_entities(true);
+ $ia = elgg_set_ignore_access(true);
+
+ $sub_entities = get_data("SELECT * FROM {$CONFIG->dbprefix}entities
+ WHERE (
+ container_guid = $guid
+ OR owner_guid = $guid
+ OR site_guid = $guid
+ ) AND enabled='yes'", 'entity_row_to_elggstar');
+
+ if ($sub_entities) {
+ foreach ($sub_entities as $e) {
+ add_entity_relationship($e->guid, 'disabled_with', $entity->guid);
+ $e->disable($reason);
+ }
+ }
+ access_show_hidden_entities($hidden);
+ elgg_set_ignore_access($ia);
+ }
+
+ $entity->disableMetadata();
+ $entity->disableAnnotations();
+ _elgg_invalidate_cache_for_entity($guid);
+
+ $res = update_data("UPDATE {$CONFIG->dbprefix}entities
+ SET enabled = 'no'
+ WHERE guid = $guid");
+
+ return $res;
+ }
+ }
+ }
+ return false;
+}
+
+/**
+ * Enable an entity.
+ *
+ * @warning In order to enable an entity, you must first use
+ * {@link access_show_hidden_entities()}.
+ *
+ * @param int $guid GUID of entity to enable
+ * @param bool $recursive Recursively enable all entities disabled with the entity?
+ *
+ * @return bool
+ */
+function enable_entity($guid, $recursive = true) {
+ global $CONFIG;
+
+ $guid = (int)$guid;
+
+ // Override access only visible entities
+ $old_access_status = access_get_show_hidden_status();
+ access_show_hidden_entities(true);
+
+ $result = false;
+ if ($entity = get_entity($guid)) {
+ if (elgg_trigger_event('enable', $entity->type, $entity)) {
+ if ($entity->canEdit()) {
+
+ $result = update_data("UPDATE {$CONFIG->dbprefix}entities
+ SET enabled = 'yes'
+ WHERE guid = $guid");
+
+ $entity->deleteMetadata('disable_reason');
+ $entity->enableMetadata();
+ $entity->enableAnnotations();
+
+ if ($recursive) {
+ $disabled_with_it = elgg_get_entities_from_relationship(array(
+ 'relationship' => 'disabled_with',
+ 'relationship_guid' => $entity->guid,
+ 'inverse_relationship' => true,
+ 'limit' => 0,
+ ));
+
+ foreach ($disabled_with_it as $e) {
+ $e->enable();
+ remove_entity_relationship($e->guid, 'disabled_with', $entity->guid);
+ }
+ }
+ }
+ }
+ }
+
+ access_show_hidden_entities($old_access_status);
+ return $result;
+}
+
+/**
+ * Delete an entity.
+ *
+ * Removes an entity and its metadata, annotations, relationships, river entries,
+ * and private data.
+ *
+ * Optionally can remove entities contained and owned by $guid.
+ *
+ * @tip Use ElggEntity::delete() instead.
+ *
+ * @warning If deleting recursively, this bypasses ownership of items contained by
+ * the entity. That means that if the container_guid = $guid, the item will be deleted
+ * regardless of who owns it.
+ *
+ * @param int $guid The guid of the entity to delete
+ * @param bool $recursive If true (default) then all entities which are
+ * owned or contained by $guid will also be deleted.
+ *
+ * @return bool
+ * @access private
+ */
+function delete_entity($guid, $recursive = true) {
+ global $CONFIG, $ENTITY_CACHE;
+
+ $guid = (int)$guid;
+ if ($entity = get_entity($guid)) {
+ if (elgg_trigger_event('delete', $entity->type, $entity)) {
+ if ($entity->canEdit()) {
+
+ // delete cache
+ if (isset($ENTITY_CACHE[$guid])) {
+ _elgg_invalidate_cache_for_entity($guid);
+ }
+
+ // If memcache is available then delete this entry from the cache
+ static $newentity_cache;
+ if ((!$newentity_cache) && (is_memcache_available())) {
+ $newentity_cache = new ElggMemcache('new_entity_cache');
+ }
+ if ($newentity_cache) {
+ $newentity_cache->delete($guid);
+ }
+
+ // Delete contained owned and otherwise releated objects (depth first)
+ if ($recursive) {
+ // Temporary token overriding access controls
+ // @todo Do this better.
+ static $__RECURSIVE_DELETE_TOKEN;
+ // Make it slightly harder to guess
+ $__RECURSIVE_DELETE_TOKEN = md5(elgg_get_logged_in_user_guid());
+
+ $entity_disable_override = access_get_show_hidden_status();
+ access_show_hidden_entities(true);
+ $ia = elgg_set_ignore_access(true);
+
+ // @todo there was logic in the original code that ignored
+ // entities with owner or container guids of themselves.
+ // this should probably be prevented in ElggEntity instead of checked for here
+ $options = array(
+ 'wheres' => array(
+ "((container_guid = $guid OR owner_guid = $guid OR site_guid = $guid)"
+ . " AND guid != $guid)"
+ ),
+ 'limit' => 0
+ );
+
+ $batch = new ElggBatch('elgg_get_entities', $options);
+ $batch->setIncrementOffset(false);
+
+ foreach ($batch as $e) {
+ $e->delete(true);
+ }
+
+ access_show_hidden_entities($entity_disable_override);
+ $__RECURSIVE_DELETE_TOKEN = null;
+ elgg_set_ignore_access($ia);
+ }
+
+ $entity_disable_override = access_get_show_hidden_status();
+ access_show_hidden_entities(true);
+ $ia = elgg_set_ignore_access(true);
+
+ // Now delete the entity itself
+ $entity->deleteMetadata();
+ $entity->deleteOwnedMetadata();
+ $entity->deleteAnnotations();
+ $entity->deleteOwnedAnnotations();
+ $entity->deleteRelationships();
+
+ access_show_hidden_entities($entity_disable_override);
+ elgg_set_ignore_access($ia);
+
+ elgg_delete_river(array('subject_guid' => $guid));
+ elgg_delete_river(array('object_guid' => $guid));
+ remove_all_private_settings($guid);
+
+ $res = delete_data("DELETE from {$CONFIG->dbprefix}entities where guid={$guid}");
+ if ($res) {
+ $sub_table = "";
+
+ // Where appropriate delete the sub table
+ switch ($entity->type) {
+ case 'object' :
+ $sub_table = $CONFIG->dbprefix . 'objects_entity';
+ break;
+ case 'user' :
+ $sub_table = $CONFIG->dbprefix . 'users_entity';
+ break;
+ case 'group' :
+ $sub_table = $CONFIG->dbprefix . 'groups_entity';
+ break;
+ case 'site' :
+ $sub_table = $CONFIG->dbprefix . 'sites_entity';
+ break;
+ }
+
+ if ($sub_table) {
+ delete_data("DELETE from $sub_table where guid={$guid}");
+ }
+ }
+
+ return (bool)$res;
+ }
+ }
+ }
+ return false;
+
+}
+
+/**
+ * Exports attributes generated on the fly (volatile) about an entity.
+ *
+ * @param string $hook volatile
+ * @param string $entity_type metadata
+ * @param string $returnvalue Return value from previous hook
+ * @param array $params The parameters, passed 'guid' and 'varname'
+ *
+ * @return ElggMetadata|null
+ * @elgg_plugin_hook_handler volatile metadata
+ * @todo investigate more.
+ * @access private
+ * @todo document
+ */
+function volatile_data_export_plugin_hook($hook, $entity_type, $returnvalue, $params) {
+ $guid = (int)$params['guid'];
+ $variable_name = sanitise_string($params['varname']);
+
+ if (($hook == 'volatile') && ($entity_type == 'metadata')) {
+ if (($guid) && ($variable_name)) {
+ switch ($variable_name) {
+ case 'renderedentity' :
+ elgg_set_viewtype('default');
+ $view = elgg_view_entity(get_entity($guid));
+ elgg_set_viewtype();
+
+ $tmp = new ElggMetadata();
+ $tmp->type = 'volatile';
+ $tmp->name = 'renderedentity';
+ $tmp->value = $view;
+ $tmp->entity_guid = $guid;
+
+ return $tmp;
+
+ break;
+ }
+ }
+ }
+}
+
+/**
+ * Exports all attributes of an entity.
+ *
+ * @warning Only exports fields in the entity and entity type tables.
+ *
+ * @param string $hook export
+ * @param string $entity_type all
+ * @param mixed $returnvalue Previous hook return value
+ * @param array $params Parameters
+ *
+ * @elgg_event_handler export all
+ * @return mixed
+ * @access private
+ *
+ * @throws InvalidParameterException|InvalidClassException
+ */
+function export_entity_plugin_hook($hook, $entity_type, $returnvalue, $params) {
+ // Sanity check values
+ if ((!is_array($params)) && (!isset($params['guid']))) {
+ throw new InvalidParameterException(elgg_echo('InvalidParameterException:GUIDNotForExport'));
+ }
+
+ if (!is_array($returnvalue)) {
+ throw new InvalidParameterException(elgg_echo('InvalidParameterException:NonArrayReturnValue'));
+ }
+
+ $guid = (int)$params['guid'];
+
+ // Get the entity
+ $entity = get_entity($guid);
+ if (!($entity instanceof ElggEntity)) {
+ $msg = elgg_echo('InvalidClassException:NotValidElggStar', array($guid, get_class()));
+ throw new InvalidClassException($msg);
+ }
+
+ $export = $entity->export();
+
+ if (is_array($export)) {
+ foreach ($export as $e) {
+ $returnvalue[] = $e;
+ }
+ } else {
+ $returnvalue[] = $export;
+ }
+
+ return $returnvalue;
+}
+
+/**
+ * Utility function used by import_entity_plugin_hook() to
+ * process an ODDEntity into an unsaved ElggEntity.
+ *
+ * @param ODDEntity $element The OpenDD element
+ *
+ * @return ElggEntity the unsaved entity which should be populated by items.
+ * @todo Remove this.
+ * @access private
+ *
+ * @throws ClassException|InstallationException|ImportException
+ */
+function oddentity_to_elggentity(ODDEntity $element) {
+ $class = $element->getAttribute('class');
+ $subclass = $element->getAttribute('subclass');
+
+ // See if we already have imported this uuid
+ $tmp = get_entity_from_uuid($element->getAttribute('uuid'));
+
+ if (!$tmp) {
+ // Construct new class with owner from session
+ $classname = get_subtype_class($class, $subclass);
+ if ($classname) {
+ if (class_exists($classname)) {
+ $tmp = new $classname();
+
+ if (!($tmp instanceof ElggEntity)) {
+ $msg = elgg_echo('ClassException:ClassnameNotClass', array($classname, get_class()));
+ throw new ClassException($msg);
+ }
+ } else {
+ error_log(elgg_echo('ClassNotFoundException:MissingClass', array($classname)));
+ }
+ } else {
+ switch ($class) {
+ case 'object' :
+ $tmp = new ElggObject($row);
+ break;
+ case 'user' :
+ $tmp = new ElggUser($row);
+ break;
+ case 'group' :
+ $tmp = new ElggGroup($row);
+ break;
+ case 'site' :
+ $tmp = new ElggSite($row);
+ break;
+ default:
+ $msg = elgg_echo('InstallationException:TypeNotSupported', array($class));
+ throw new InstallationException($msg);
+ }
+ }
+ }
+
+ if ($tmp) {
+ if (!$tmp->import($element)) {
+ $msg = elgg_echo('ImportException:ImportFailed', array($element->getAttribute('uuid')));
+ throw new ImportException($msg);
+ }
+
+ return $tmp;
+ }
+
+ return NULL;
+}
+
+/**
+ * Import an entity.
+ *
+ * This function checks the passed XML doc (as array) to see if it is
+ * a user, if so it constructs a new elgg user and returns "true"
+ * to inform the importer that it's been handled.
+ *
+ * @param string $hook import
+ * @param string $entity_type all
+ * @param mixed $returnvalue Value from previous hook
+ * @param mixed $params Array of params
+ *
+ * @return mixed
+ * @elgg_plugin_hook_handler import all
+ * @todo document
+ * @access private
+ *
+ * @throws ImportException
+ */
+function import_entity_plugin_hook($hook, $entity_type, $returnvalue, $params) {
+ $element = $params['element'];
+
+ $tmp = null;
+
+ if ($element instanceof ODDEntity) {
+ $tmp = oddentity_to_elggentity($element);
+
+ if ($tmp) {
+ // Make sure its saved
+ if (!$tmp->save()) {
+ $msg = elgg_echo('ImportException:ProblemSaving', array($element->getAttribute('uuid')));
+ throw new ImportException($msg);
+ }
+
+ // Belts and braces
+ if (!$tmp->guid) {
+ throw new ImportException(elgg_echo('ImportException:NoGUID'));
+ }
+
+ // We have saved, so now tag
+ add_uuid_to_guid($tmp->guid, $element->getAttribute('uuid'));
+
+ return $tmp;
+ }
+ }
+}
+
+/**
+ * Returns if $user_guid is able to edit $entity_guid.
+ *
+ * @tip Can be overridden by by registering for the permissions_check
+ * plugin hook.
+ *
+ * @warning If a $user_guid is not passed it will default to the logged in user.
+ *
+ * @tip Use ElggEntity::canEdit() instead.
+ *
+ * @param int $entity_guid The GUID of the entity
+ * @param int $user_guid The GUID of the user
+ *
+ * @return bool
+ * @link http://docs.elgg.org/Entities/AccessControl
+ */
+function can_edit_entity($entity_guid, $user_guid = 0) {
+ $user_guid = (int)$user_guid;
+ $user = get_entity($user_guid);
+ if (!$user) {
+ $user = elgg_get_logged_in_user_entity();
+ }
+
+ $return = false;
+ if ($entity = get_entity($entity_guid)) {
+
+ // Test user if possible - should default to false unless a plugin hook says otherwise
+ if ($user) {
+ if ($entity->getOwnerGUID() == $user->getGUID()) {
+ $return = true;
+ }
+ if ($entity->container_guid == $user->getGUID()) {
+ $return = true;
+ }
+ if ($entity->type == "user" && $entity->getGUID() == $user->getGUID()) {
+ $return = true;
+ }
+ if ($container_entity = get_entity($entity->container_guid)) {
+ if ($container_entity->canEdit($user->getGUID())) {
+ $return = true;
+ }
+ }
+ }
+ }
+
+ return elgg_trigger_plugin_hook('permissions_check', $entity->type,
+ array('entity' => $entity, 'user' => $user), $return);
+}
+
+/**
+ * Returns if $user_guid can edit the metadata on $entity_guid.
+ *
+ * @tip Can be overridden by by registering for the permissions_check:metadata
+ * plugin hook.
+ *
+ * @warning If a $user_guid isn't specified, the currently logged in user is used.
+ *
+ * @param int $entity_guid The GUID of the entity
+ * @param int $user_guid The GUID of the user
+ * @param ElggMetadata $metadata The metadata to specifically check (if any; default null)
+ *
+ * @return bool
+ * @see elgg_register_plugin_hook_handler()
+ */
+function can_edit_entity_metadata($entity_guid, $user_guid = 0, $metadata = null) {
+ if ($entity = get_entity($entity_guid)) {
+
+ $return = null;
+
+ if ($metadata && ($metadata->owner_guid == 0)) {
+ $return = true;
+ }
+ if (is_null($return)) {
+ $return = can_edit_entity($entity_guid, $user_guid);
+ }
+
+ if ($user_guid) {
+ $user = get_entity($user_guid);
+ } else {
+ $user = elgg_get_logged_in_user_entity();
+ }
+
+ $params = array('entity' => $entity, 'user' => $user, 'metadata' => $metadata);
+ $return = elgg_trigger_plugin_hook('permissions_check:metadata', $entity->type, $params, $return);
+ return $return;
+ } else {
+ return false;
+ }
+}
+
+/**
+ * Returns the URL for an entity.
+ *
+ * @tip Can be overridden with {@link register_entity_url_handler()}.
+ *
+ * @param int $entity_guid The GUID of the entity
+ *
+ * @return string The URL of the entity
+ * @see register_entity_url_handler()
+ */
+function get_entity_url($entity_guid) {
+ global $CONFIG;
+
+ if ($entity = get_entity($entity_guid)) {
+ $url = "";
+
+ if (isset($CONFIG->entity_url_handler[$entity->getType()][$entity->getSubType()])) {
+ $function = $CONFIG->entity_url_handler[$entity->getType()][$entity->getSubType()];
+ if (is_callable($function)) {
+ $url = call_user_func($function, $entity);
+ }
+ } elseif (isset($CONFIG->entity_url_handler[$entity->getType()]['all'])) {
+ $function = $CONFIG->entity_url_handler[$entity->getType()]['all'];
+ if (is_callable($function)) {
+ $url = call_user_func($function, $entity);
+ }
+ } elseif (isset($CONFIG->entity_url_handler['all']['all'])) {
+ $function = $CONFIG->entity_url_handler['all']['all'];
+ if (is_callable($function)) {
+ $url = call_user_func($function, $entity);
+ }
+ }
+
+ if ($url == "") {
+ $url = "view/" . $entity_guid;
+ }
+
+ return elgg_normalize_url($url);
+ }
+
+ return false;
+}
+
+/**
+ * Sets the URL handler for a particular entity type and subtype
+ *
+ * @param string $entity_type The entity type
+ * @param string $entity_subtype The entity subtype
+ * @param string $function_name The function to register
+ *
+ * @return bool Depending on success
+ * @see get_entity_url()
+ * @see ElggEntity::getURL()
+ * @since 1.8.0
+ */
+function elgg_register_entity_url_handler($entity_type, $entity_subtype, $function_name) {
+ global $CONFIG;
+
+ if (!is_callable($function_name, true)) {
+ return false;
+ }
+
+ if (!isset($CONFIG->entity_url_handler)) {
+ $CONFIG->entity_url_handler = array();
+ }
+
+ if (!isset($CONFIG->entity_url_handler[$entity_type])) {
+ $CONFIG->entity_url_handler[$entity_type] = array();
+ }
+
+ $CONFIG->entity_url_handler[$entity_type][$entity_subtype] = $function_name;
+
+ return true;
+}
+
+/**
+ * Registers an entity type and subtype as a public-facing entity that should
+ * be shown in search and by {@link elgg_list_registered_entities()}.
+ *
+ * @warning Entities that aren't registered here will not show up in search.
+ *
+ * @tip Add a language string item:type:subtype to make sure the items are display properly.
+ *
+ * @param string $type The type of entity (object, site, user, group)
+ * @param string $subtype The subtype to register (may be blank)
+ *
+ * @return bool Depending on success
+ * @see get_registered_entity_types()
+ * @link http://docs.elgg.org/Search
+ * @link http://docs.elgg.org/Tutorials/Search
+ */
+function elgg_register_entity_type($type, $subtype = null) {
+ global $CONFIG;
+
+ $type = strtolower($type);
+ if (!in_array($type, $CONFIG->entity_types)) {
+ return FALSE;
+ }
+
+ if (!isset($CONFIG->registered_entities)) {
+ $CONFIG->registered_entities = array();
+ }
+
+ if (!isset($CONFIG->registered_entities[$type])) {
+ $CONFIG->registered_entities[$type] = array();
+ }
+
+ if ($subtype) {
+ $CONFIG->registered_entities[$type][] = $subtype;
+ }
+
+ return TRUE;
+}
+
+/**
+ * Unregisters an entity type and subtype as a public-facing entity.
+ *
+ * @warning With a blank subtype, it unregisters that entity type including
+ * all subtypes. This must be called after all subtypes have been registered.
+ *
+ * @param string $type The type of entity (object, site, user, group)
+ * @param string $subtype The subtype to register (may be blank)
+ *
+ * @return bool Depending on success
+ * @see elgg_register_entity_type()
+ */
+function unregister_entity_type($type, $subtype) {
+ global $CONFIG;
+
+ $type = strtolower($type);
+ if (!in_array($type, $CONFIG->entity_types)) {
+ return FALSE;
+ }
+
+ if (!isset($CONFIG->registered_entities)) {
+ return FALSE;
+ }
+
+ if (!isset($CONFIG->registered_entities[$type])) {
+ return FALSE;
+ }
+
+ if ($subtype) {
+ if (in_array($subtype, $CONFIG->registered_entities[$type])) {
+ $key = array_search($subtype, $CONFIG->registered_entities[$type]);
+ unset($CONFIG->registered_entities[$type][$key]);
+ } else {
+ return FALSE;
+ }
+ } else {
+ unset($CONFIG->registered_entities[$type]);
+ }
+
+ return TRUE;
+}
+
+/**
+ * Returns registered entity types and subtypes
+ *
+ * @param string $type The type of entity (object, site, user, group) or blank for all
+ *
+ * @return array|false Depending on whether entities have been registered
+ * @see elgg_register_entity_type()
+ */
+function get_registered_entity_types($type = null) {
+ global $CONFIG;
+
+ if (!isset($CONFIG->registered_entities)) {
+ return false;
+ }
+ if ($type) {
+ $type = strtolower($type);
+ }
+ if (!empty($type) && empty($CONFIG->registered_entities[$type])) {
+ return false;
+ }
+
+ if (empty($type)) {
+ return $CONFIG->registered_entities;
+ }
+
+ return $CONFIG->registered_entities[$type];
+}
+
+/**
+ * Returns if the entity type and subtype have been registered with {@see elgg_register_entity_type()}.
+ *
+ * @param string $type The type of entity (object, site, user, group)
+ * @param string $subtype The subtype (may be blank)
+ *
+ * @return bool Depending on whether or not the type has been registered
+ */
+function is_registered_entity_type($type, $subtype = null) {
+ global $CONFIG;
+
+ if (!isset($CONFIG->registered_entities)) {
+ return false;
+ }
+
+ $type = strtolower($type);
+
+ // @todo registering a subtype implicitly registers the type.
+ // see #2684
+ if (!isset($CONFIG->registered_entities[$type])) {
+ return false;
+ }
+
+ if ($subtype && !in_array($subtype, $CONFIG->registered_entities[$type])) {
+ return false;
+ }
+ return true;
+}
+
+/**
+ * Page handler for generic entities view system
+ *
+ * @param array $page Page elements from pain page handler
+ *
+ * @return bool
+ * @elgg_page_handler view
+ * @access private
+ */
+function entities_page_handler($page) {
+ if (isset($page[0])) {
+ global $CONFIG;
+ set_input('guid', $page[0]);
+ include($CONFIG->path . "pages/entities/index.php");
+ return true;
+ }
+ return false;
+}
+
+/**
+ * Returns a viewable list of entities based on the registered types.
+ *
+ * @see elgg_view_entity_list
+ *
+ * @param array $options Any elgg_get_entity() options plus:
+ *
+ * full_view => BOOL Display full view entities
+ *
+ * list_type_toggle => BOOL Display gallery / list switch
+ *
+ * allowed_types => TRUE|ARRAY True to show all types or an array of valid types.
+ *
+ * pagination => BOOL Display pagination links
+ *
+ * @return string A viewable list of entities
+ * @since 1.7.0
+ */
+function elgg_list_registered_entities(array $options = array()) {
+ global $autofeed;
+ $autofeed = true;
+
+ $defaults = array(
+ 'full_view' => TRUE,
+ 'allowed_types' => TRUE,
+ 'list_type_toggle' => FALSE,
+ 'pagination' => TRUE,
+ 'offset' => 0,
+ 'types' => array(),
+ 'type_subtype_pairs' => array()
+ );
+
+ $options = array_merge($defaults, $options);
+
+ //backwards compatibility
+ if (isset($options['view_type_toggle'])) {
+ $options['list_type_toggle'] = $options['view_type_toggle'];
+ }
+
+ $types = get_registered_entity_types();
+
+ foreach ($types as $type => $subtype_array) {
+ if (in_array($type, $options['allowed_types']) || $options['allowed_types'] === TRUE) {
+ // you must explicitly register types to show up in here and in search for objects
+ if ($type == 'object') {
+ if (is_array($subtype_array) && count($subtype_array)) {
+ $options['type_subtype_pairs'][$type] = $subtype_array;
+ }
+ } else {
+ if (is_array($subtype_array) && count($subtype_array)) {
+ $options['type_subtype_pairs'][$type] = $subtype_array;
+ } else {
+ $options['type_subtype_pairs'][$type] = ELGG_ENTITIES_ANY_VALUE;
+ }
+ }
+ }
+ }
+
+ if (!empty($options['type_subtype_pairs'])) {
+ $count = elgg_get_entities(array_merge(array('count' => TRUE), $options));
+ $entities = elgg_get_entities($options);
+ } else {
+ $count = 0;
+ $entities = array();
+ }
+
+ $options['count'] = $count;
+ return elgg_view_entity_list($entities, $options);
+}
+
+/**
+ * Checks if $entity is an ElggEntity and optionally for type and subtype.
+ *
+ * @tip Use this function in actions and views to check that you are dealing
+ * with the correct type of entity.
+ *
+ * @param mixed $entity Entity
+ * @param string $type Entity type
+ * @param string $subtype Entity subtype
+ * @param string $class Class name
+ *
+ * @return bool
+ * @since 1.8.0
+ */
+function elgg_instanceof($entity, $type = NULL, $subtype = NULL, $class = NULL) {
+ $return = ($entity instanceof ElggEntity);
+
+ if ($type) {
+ /* @var ElggEntity $entity */
+ $return = $return && ($entity->getType() == $type);
+ }
+
+ if ($subtype) {
+ $return = $return && ($entity->getSubtype() == $subtype);
+ }
+
+ if ($class) {
+ $return = $return && ($entity instanceof $class);
+ }
+
+ return $return;
+}
+
+/**
+ * Update the last_action column in the entities table for $guid.
+ *
+ * @warning This is different to time_updated. Time_updated is automatically set,
+ * while last_action is only set when explicitly called.
+ *
+ * @param int $guid Entity annotation|relationship action carried out on
+ * @param int $posted Timestamp of last action
+ *
+ * @return bool
+ * @access private
+ */
+function update_entity_last_action($guid, $posted = NULL) {
+ global $CONFIG;
+ $guid = (int)$guid;
+ $posted = (int)$posted;
+
+ if (!$posted) {
+ $posted = time();
+ }
+
+ if ($guid) {
+ //now add to the river updated table
+ $query = "UPDATE {$CONFIG->dbprefix}entities SET last_action = {$posted} WHERE guid = {$guid}";
+ $result = update_data($query);
+ if ($result) {
+ return TRUE;
+ } else {
+ return FALSE;
+ }
+ } else {
+ return FALSE;
+ }
+}
+
+/**
+ * Garbage collect stub and fragments from any broken delete/create calls
+ *
+ * @return void
+ * @elgg_plugin_hook_handler gc system
+ * @access private
+ */
+function entities_gc() {
+ global $CONFIG;
+
+ $tables = array(
+ 'site' => 'sites_entity',
+ 'object' => 'objects_entity',
+ 'group' => 'groups_entity',
+ 'user' => 'users_entity'
+ );
+
+ foreach ($tables as $type => $table) {
+ delete_data("DELETE FROM {$CONFIG->dbprefix}{$table}
+ WHERE guid NOT IN (SELECT guid FROM {$CONFIG->dbprefix}entities)");
+ delete_data("DELETE FROM {$CONFIG->dbprefix}entities
+ WHERE type = '$type' AND guid NOT IN (SELECT guid FROM {$CONFIG->dbprefix}{$table})");
+ }
+}
+
+/**
+ * Runs unit tests for the entity objects.
+ *
+ * @param string $hook unit_test
+ * @param string $type system
+ * @param mixed $value Array of tests
+ * @param mixed $params Params
+ *
+ * @return array
+ * @access private
+ */
+function entities_test($hook, $type, $value, $params) {
+ global $CONFIG;
+ $value[] = $CONFIG->path . 'engine/tests/objects/entities.php';
+ return $value;
+}
+
+/**
+ * Entities init function; establishes the default entity page handler
+ *
+ * @return void
+ * @elgg_event_handler init system
+ * @access private
+ */
+function entities_init() {
+ elgg_register_page_handler('view', 'entities_page_handler');
+
+ elgg_register_plugin_hook_handler('unit_test', 'system', 'entities_test');
+
+ elgg_register_plugin_hook_handler('gc', 'system', 'entities_gc');
+}
+
+/** Register the import hook */
+elgg_register_plugin_hook_handler("import", "all", "import_entity_plugin_hook", 0);
+
+/** Register the hook, ensuring entities are serialised first */
+elgg_register_plugin_hook_handler("export", "all", "export_entity_plugin_hook", 0);
+
+/** Hook to get certain named bits of volatile data about an entity */
+elgg_register_plugin_hook_handler('volatile', 'metadata', 'volatile_data_export_plugin_hook');
+
+/** Register init system event **/
+elgg_register_event_handler('init', 'system', 'entities_init');
+
diff --git a/engine/lib/exceptions.php b/engine/lib/exceptions.php
deleted file mode 100644
index 21349547f..000000000
--- a/engine/lib/exceptions.php
+++ /dev/null
@@ -1,164 +0,0 @@
-<?php
- /**
- * Exceptions.
- * Define some globally useful exception classes.
- *
- * @package Elgg
- * @subpackage Exceptions
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd <info@elgg.com>
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
-
- // Top level //////////////////////////////////////////////////////////////////////////////
-
- /**
- * IOException
- * An IO Exception, throw when an IO Exception occurs. Subclass for specific IO Exceptions.
- *
- * @author Curverider Ltd <info@elgg.com>
- * @package Elgg
- * @subpackage Exceptions
- */
- class IOException extends Exception {}
-
- /**
- * ClassException
- * A class Exception, throw when there is a class error.
- *
- * @author Curverider Ltd <info@elgg.com>
- * @package Elgg
- * @subpackage Exceptions
- */
- class ClassException extends Exception {}
-
- /**
- * ConfigurationException
- * There is a configuration error
- *
- * @author Curverider Ltd <info@elgg.com>
- * @package Elgg
- * @subpackage Exceptions
- */
- class ConfigurationException extends Exception {}
-
- /**
- * SecurityException
- * An Security Exception, throw when a Security Exception occurs. Subclass for specific Security Execeptions (access problems etc)
- *
- * @author Curverider Ltd <info@elgg.com>
- * @package Elgg
- * @subpackage Exceptions
- */
- class SecurityException extends Exception {}
-
- /**
- * ClassNotFoundException
- * An database exception, throw when a database exception happens, subclass if more detail is needed.
- *
- * @author Curverider Ltd <info@elgg.com>
- * @package Elgg
- * @subpackage Exceptions
- */
- class DatabaseException extends Exception {}
-
- /**
- * APIException
- * The API Exception class, thrown by the API layer when an API call has an issue.
- *
- * @author Curverider Ltd <info@elgg.com>
- * @package Elgg
- * @subpackage Exceptions
- */
- class APIException extends Exception {}
-
- /**
- * CallException
- * An exception thrown when there is a problem calling something.
- *
- * @author Curverider Ltd <info@elgg.com>
- * @package Elgg
- * @subpackage Exceptions
- */
- class CallException extends Exception {}
-
- /**
- * Data format exception
- * An exception thrown when there is a problem in the format of some data.
- *
- * @author Curverider Ltd <info@elgg.com>
- * @package Elgg
- * @subpackage Exceptions
- */
- class DataFormatException extends Exception {}
-
- // Class exceptions ///////////////////////////////////////////////////////////////////////
-
- /**
- * InvalidClassException
- * An invalid class Exception, throw when a class is invalid.
- *
- * @author Curverider Ltd <info@elgg.com>
- * @package Elgg
- * @subpackage Exceptions
- */
- class InvalidClassException extends ClassException {}
-
- /**
- * ClassNotFoundException
- * An Class not found Exception, throw when an class can not be found occurs.
- *
- * @author Curverider Ltd <info@elgg.com>
- * @package Elgg
- * @subpackage Exceptions
- */
- class ClassNotFoundException extends ClassException {}
-
- // Configuration exceptions ///////////////////////////////////////////////////////////////
-
- /**
- * InstallationException
- * Thrown when there is a major problem with the installation.
- *
- * @author Curverider Ltd <info@elgg.com>
- * @package Elgg
- * @subpackage Exceptions
- */
- class InstallationException extends ConfigurationException {}
-
- // Call exceptions ////////////////////////////////////////////////////////////////////////
-
- /**
- * NotImplementedException
- * Thrown when a method or function has not been implemented, primarily used in development... you should
- * not see these!
- *
- * @author Curverider Ltd <info@elgg.com>
- * @package Elgg
- * @subpackage Exceptions
- */
- class NotImplementedException extends CallException {}
-
- /**
- * InvalidParameterException
- * A parameter is invalid.
- *
- * @author Curverider Ltd <info@elgg.com>
- * @package Elgg
- * @subpackage Exceptions
- */
- class InvalidParameterException extends CallException {}
-
- // Installation exception /////////////////////////////////////////////////////////////////
-
- /**
- * RegistrationException
- * Could not register a new user for whatever reason.
- *
- * @author Curverider Ltd <info@elgg.com>
- * @package Elgg
- * @subpackage Exceptions
- */
- class RegistrationException extends InstallationException {}
-?> \ No newline at end of file
diff --git a/engine/lib/export.php b/engine/lib/export.php
index 1f84f09a7..ecc894e63 100644
--- a/engine/lib/export.php
+++ b/engine/lib/export.php
@@ -1,264 +1,223 @@
<?php
- /**
- * Elgg Data import export functionality.
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
-
- /**
- * Define an interface for all ODD exportable objects.
- *
- * @package Elgg
- * @subpackage Core
- * @author Curverider Ltd
- */
- interface Exportable
- {
- /**
- * This must take the contents of the object and convert it to exportable ODD
- * @return object or array of objects.
- */
- public function export();
-
- /**
- * Return a list of all fields that can be exported.
- * This should be used as the basis for the values returned by export()
- */
- public function getExportableValues();
-
- }
-
- /**
- * Define an interface for all ODD importable objects.
- * @author Curverider Ltd
- */
- interface Importable
- {
- /**
- * Accepts an array of data to import, this data is parsed from the XML produced by export.
- * The function should return the constructed object data, or NULL.
- *
- * @param ODD $data
- * @return bool
- * @throws ImportException if there was a critical error importing data.
- */
- public function import(ODD $data);
- }
+/**
+ * Elgg Data import export functionality.
+ *
+ * @package Elgg.Core
+ * @subpackage DataModel.Export
+ */
- /**
- * Export exception
- *
- * @package Elgg
- * @subpackage Exceptions
- *
- */
- class ExportException extends DataFormatException {}
-
- /**
- * Import exception
- *
- * @package Elgg
- * @subpackage Exceptions
- */
- class ImportException extends DataFormatException {}
-
- /**
- * Get a UUID from a given object.
- *
- * @param $object The object either an ElggEntity, ElggRelationship or ElggExtender
- * @return the UUID or false
- */
- function get_uuid_from_object($object)
- {
- if ($object instanceof ElggEntity)
- return guid_to_uuid($object->guid);
- else if ($object instanceof ElggExtender) {
- $type = $object->type;
- if ($type == 'volatile')
- $uuid = guid_to_uuid($object->entity_guid). $type . "/{$object->name}/";
- else
- $uuid = guid_to_uuid($object->entity_guid). $type . "/{$object->id}/";
-
- return $uuid;
- } else if ($object instanceof ElggRelationship) {
- return guid_to_uuid($object->guid_one) . "relationship/{$object->id}/";
+/**
+ * Get a UUID from a given object.
+ *
+ * @param mixed $object The object either an ElggEntity, ElggRelationship or ElggExtender
+ *
+ * @return string|false the UUID or false
+ */
+function get_uuid_from_object($object) {
+ if ($object instanceof ElggEntity) {
+ return guid_to_uuid($object->guid);
+ } else if ($object instanceof ElggExtender) {
+ $type = $object->type;
+ if ($type == 'volatile') {
+ $uuid = guid_to_uuid($object->entity_guid) . $type . "/{$object->name}/";
+ } else {
+ $uuid = guid_to_uuid($object->entity_guid) . $type . "/{$object->id}/";
}
-
-
- return false;
- }
-
- /**
- * Generate a UUID from a given GUID.
- *
- * @param int $guid The GUID of an object.
- */
- function guid_to_uuid($guid)
- {
- global $CONFIG;
-
- return $CONFIG->wwwroot . "export/opendd/$guid/";
- }
-
- /**
- * Test to see if a given uuid is for this domain, returning true if so.
- * @param $uuid
- * @return bool
- */
- function is_uuid_this_domain($uuid)
- {
- global $CONFIG;
-
- if (strpos($uuid, $CONFIG->wwwroot) === 0)
- return true;
-
- return false;
+
+ return $uuid;
+ } else if ($object instanceof ElggRelationship) {
+ return guid_to_uuid($object->guid_one) . "relationship/{$object->id}/";
}
-
- /**
- * This function attempts to retrieve a previously imported entity via its UUID.
- *
- * @param $uuid
- */
- function get_entity_from_uuid($uuid)
- {
- $uuid = sanitise_string($uuid);
-
- $entities = get_entities_from_metadata("import_uuid", $uuid);
-
- if ($entities)
- return $entities[0];
-
- return false;
+
+ return false;
+}
+
+/**
+ * Generate a UUID from a given GUID.
+ *
+ * @param int $guid The GUID of an object.
+ *
+ * @return string
+ */
+function guid_to_uuid($guid) {
+ return elgg_get_site_url() . "export/opendd/$guid/";
+}
+
+/**
+ * Test to see if a given uuid is for this domain, returning true if so.
+ *
+ * @param string $uuid A unique ID
+ *
+ * @return bool
+ */
+function is_uuid_this_domain($uuid) {
+ if (strpos($uuid, elgg_get_site_url()) === 0) {
+ return true;
}
-
- /**
- * Tag a previously created guid with the uuid it was imported on.
- *
- * @param int $guid
- * @param string $uuid
- */
- function add_uuid_to_guid($guid, $uuid)
- {
- $guid = (int)$guid;
- $uuid = sanitise_string($uuid);
-
- return create_metadata($guid, "import_uuid", $uuid);
+
+ return false;
+}
+
+/**
+ * This function attempts to retrieve a previously imported entity via its UUID.
+ *
+ * @param string $uuid A unique ID
+ *
+ * @return ElggEntity|false
+ */
+function get_entity_from_uuid($uuid) {
+ $uuid = sanitise_string($uuid);
+
+ $options = array('metadata_name' => 'import_uuid', 'metadata_value' => $uuid);
+ $entities = elgg_get_entities_from_metadata($options);
+
+ if ($entities) {
+ return $entities[0];
}
-
-
- $IMPORTED_DATA = array();
- $IMPORTED_OBJECT_COUNTER = 0;
-
- /**
- * This function processes an element, passing elements to the plugin stack to see if someone will
- * process it.
- *
- * If nobody processes the top level element, the sub level elements are processed.
- *
- * @param ODD $odd The odd element to process
- */
- function __process_element(ODD $odd)
- {
- global $IMPORTED_DATA, $IMPORTED_OBJECT_COUNTER;
-
- // See if anyone handles this element, return true if it is.
- if ($odd)
- $handled = trigger_plugin_hook("import", "all", array("element" => $odd), $to_be_serialised);
+
+ return false;
+}
+
+/**
+ * Tag a previously created guid with the uuid it was imported on.
+ *
+ * @param int $guid A GUID
+ * @param string $uuid A Unique ID
+ *
+ * @return bool
+ */
+function add_uuid_to_guid($guid, $uuid) {
+ $guid = (int)$guid;
+ $uuid = sanitise_string($uuid);
+
+ $result = create_metadata($guid, "import_uuid", $uuid);
+ return (bool)$result;
+}
+
+
+$IMPORTED_DATA = array();
+$IMPORTED_OBJECT_COUNTER = 0;
+
+/**
+ * This function processes an element, passing elements to the plugin stack to see if someone will
+ * process it.
+ *
+ * If nobody processes the top level element, the sub level elements are processed.
+ *
+ * @param ODD $odd The odd element to process
+ *
+ * @return bool
+ * @access private
+ */
+function _process_element(ODD $odd) {
+ global $IMPORTED_DATA, $IMPORTED_OBJECT_COUNTER;
+
+ // See if anyone handles this element, return true if it is.
+ $to_be_serialised = null;
+ if ($odd) {
+ $handled = elgg_trigger_plugin_hook("import", "all", array("element" => $odd), $to_be_serialised);
// If not, then see if any of its sub elements are handled
- if ($handled)
- {
- $IMPORTED_OBJECT_COUNTER ++; // Increment validation counter
- $IMPORTED_DATA[] = $handled; // Return the constructed object
+ if ($handled) {
+ // Increment validation counter
+ $IMPORTED_OBJECT_COUNTER ++;
+ // Return the constructed object
+ $IMPORTED_DATA[] = $handled;
return true;
}
-
- return false;
}
-
- function exportAsArray($guid)
- {
-
- $guid = (int)$guid;
-
- // Initialise the array
- $to_be_serialised = array();
-
- // Trigger a hook to
- $to_be_serialised = trigger_plugin_hook("export", "all", array("guid" => $guid), $to_be_serialised);
-
- // Sanity check
- if ((!is_array($to_be_serialised)) || (count($to_be_serialised)==0)) throw new ExportException(sprintf(elgg_echo('ExportException:NoSuchEntity'), $guid));
-
- return $to_be_serialised;
+
+ return false;
+}
+
+/**
+ * Exports an entity as an array
+ *
+ * @param int $guid Entity GUID
+ *
+ * @return array
+ * @throws ExportException
+ * @access private
+ */
+function exportAsArray($guid) {
+ $guid = (int)$guid;
+
+ // Trigger a hook to
+ $to_be_serialised = elgg_trigger_plugin_hook("export", "all", array("guid" => $guid), array());
+
+ // Sanity check
+ if ((!is_array($to_be_serialised)) || (count($to_be_serialised) == 0)) {
+ throw new ExportException(elgg_echo('ExportException:NoSuchEntity', array($guid)));
}
-
- /**
- * Export a GUID.
- *
- * This function exports a GUID and all information related to it in an XML format.
- *
- * This function makes use of the "serialise" plugin hook, which is passed an array to which plugins
- * should add data to be serialised to.
- *
- * @see ElggEntity for an example of its usage.
- * @param int $guid The GUID.
- * @param ODDWrapperFactory $wrapper Optional wrapper permitting the export process to embed ODD in other document formats.
- * @return xml
- */
- function export($guid)
- {
- $odd = new ODDDocument(exportAsArray($guid));
-
- return ODD_Export($odd);
+
+ return $to_be_serialised;
+}
+
+/**
+ * Export a GUID.
+ *
+ * This function exports a GUID and all information related to it in an XML format.
+ *
+ * This function makes use of the "serialise" plugin hook, which is passed an array to which plugins
+ * should add data to be serialised to.
+ *
+ * @param int $guid The GUID.
+ *
+ * @return string XML
+ * @see ElggEntity for an example of its usage.
+ * @access private
+ */
+function export($guid) {
+ $odd = new ODDDocument(exportAsArray($guid));
+
+ return ODD_Export($odd);
+}
+
+/**
+ * Import an XML serialisation of an object.
+ * This will make a best attempt at importing a given xml doc.
+ *
+ * @param string $xml XML string
+ *
+ * @return bool
+ * @throws ImportException if there was a problem importing the data.
+ * @access private
+ */
+function import($xml) {
+ global $IMPORTED_DATA, $IMPORTED_OBJECT_COUNTER;
+
+ $IMPORTED_DATA = array();
+ $IMPORTED_OBJECT_COUNTER = 0;
+
+ $document = ODD_Import($xml);
+ if (!$document) {
+ throw new ImportException(elgg_echo('ImportException:NoODDElements'));
}
-
- /**
- * Import an XML serialisation of an object.
- * This will make a best attempt at importing a given xml doc.
- *
- * @param string $xml
- * @return bool
- * @throws Exception if there was a problem importing the data.
- */
- function import($xml)
- {
- global $IMPORTED_DATA, $IMPORTED_OBJECT_COUNTER;
-
- $IMPORTED_DATA = array();
- $IMPORTED_OBJECT_COUNTER = 0;
-
- $document = ODD_Import($xml);
- if (!$document)
- throw new ImportException(elgg_echo('ImportException:NoODDElements'));
-
- foreach ($document as $element)
- __process_element($element);
-
- if ($IMPORTED_OBJECT_COUNTER!= count($IMPORTED_DATA))
- throw new ImportException(elgg_echo('ImportException:NotAllImported'));
-
- return true;
+
+ foreach ($document as $element) {
+ _process_element($element);
}
-
- /**
- * Register the OpenDD import action
- */
- function export_init()
- {
- global $CONFIG;
-
- register_action("import/opendd", false);
+ if ($IMPORTED_OBJECT_COUNTER != count($IMPORTED_DATA)) {
+ throw new ImportException(elgg_echo('ImportException:NotAllImported'));
}
-
- // Register a startup event
- register_elgg_event_handler('init','system','export_init',100);
-?> \ No newline at end of file
+
+ return true;
+}
+
+
+/**
+ * Register the OpenDD import action
+ *
+ * @return void
+ * @access private
+ */
+function export_init() {
+ global $CONFIG;
+
+ elgg_register_action("import/opendd");
+}
+
+// Register a startup event
+elgg_register_event_handler('init', 'system', 'export_init', 100);
diff --git a/engine/lib/extender.php b/engine/lib/extender.php
index daa763fa0..8323bd3ce 100644
--- a/engine/lib/extender.php
+++ b/engine/lib/extender.php
@@ -1,442 +1,249 @@
<?php
- /**
- * Elgg Entity Extender.
- * This file contains ways of extending an Elgg entity in custom ways.
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
-
- /**
- * ElggExtender
- *
- * @author Curverider Ltd
- * @package Elgg
- * @subpackage Core
- */
- abstract class ElggExtender implements
- Exportable,
- Loggable, // Can events related to this object class be logged
- Iterator, // Override foreach behaviour
- ArrayAccess // Override for array access
- {
- /**
- * This contains the site's main properties (id, etc)
- * @var array
- */
- protected $attributes;
-
- /**
- * Get an attribute
- *
- * @param string $name
- * @return mixed
- */
- protected function get($name) {
- if (isset($this->attributes[$name])) {
-
- // Sanitise value if necessary
- if ($name=='value')
- {
- switch ($this->attributes['value_type'])
- {
- case 'integer' : return (int)$this->attributes['value'];
- //case 'tag' :
- //case 'file' :
- case 'text' : return ($this->attributes['value']);
-
- default : throw new InstallationException(sprintf(elgg_echo('InstallationException:TypeNotSupported'), $this->attributes['value_type']));
- }
- }
-
- return $this->attributes[$name];
- }
- return null;
- }
-
- /**
- * Set an attribute
- *
- * @param string $name
- * @param mixed $value
- * @param string $value_type
- * @return boolean
- */
- protected function set($name, $value, $value_type = "") {
-
- $this->attributes[$name] = $value;
- if ($name == 'value')
- $this->attributes['value_type'] = detect_extender_valuetype($value, $value_type);
-
- return true;
- }
-
- /**
- * Return the owner of this annotation.
- *
- * @return mixed
- */
- public function getOwner()
- {
- return get_user($this->owner_guid);
- }
-
- /**
- * Returns the entity this is attached to
- *
- * @return ElggEntity The enttiy
- */
- public function getEntity() {
- return get_entity($this->entity_guid);
- }
-
- /**
- * Save this data to the appropriate database table.
- */
- abstract public function save();
-
- /**
- * Delete this data.
- */
- abstract public function delete();
-
- /**
- * Determines whether or not the specified user can edit this
- *
- * @param int $user_guid The GUID of the user (defaults to currently logged in user)
- * @return true|false
- */
- public function canEdit($user_guid = 0) {
- return can_edit_extender($this->id,$this->type,$user_guid);
- }
-
- /**
- * Return a url for this extender.
- *
- * @return string
- */
- public abstract function getURL();
-
- // EXPORTABLE INTERFACE ////////////////////////////////////////////////////////////
-
- /**
- * Return an array of fields which can be exported.
- */
- public function getExportableValues()
- {
- return array(
- 'id',
- 'entity_guid',
- 'name',
- 'value',
- 'value_type',
- 'owner_guid',
- 'type',
- );
- }
-
- /**
- * Export this object
- *
- * @return array
- */
- public function export()
- {
- $uuid = get_uuid_from_object($this);
-
- $meta = new ODDMetadata($uuid, guid_to_uuid($this->entity_guid), $this->attributes['name'], $this->attributes['value'], $this->attributes['type'], guid_to_uuid($this->owner_guid));
- $meta->setAttribute('published', date("r", $this->time_created));
-
- return $meta;
- }
-
- // SYSTEM LOG INTERFACE ////////////////////////////////////////////////////////////
-
- /**
- * Return an identification for the object for storage in the system log.
- * This id must be an integer.
- *
- * @return int
- */
- public function getSystemLogID() { return $this->id; }
-
- /**
- * Return the class name of the object.
- */
- public function getClassName() { return get_class($this); }
-
- /**
- * Return the GUID of the owner of this object.
- */
- public function getObjectOwnerGUID() { return $this->owner_guid; }
-
- /**
- * Return a type of the object - eg. object, group, user, relationship, metadata, annotation etc
- */
- public function getType() { return $this->type; }
-
- /**
- * Return a subtype. For metadata & annotations this is the 'name' and for relationship this is the relationship type.
- */
- public function getSubtype() { return $this->name; }
-
-
- // ITERATOR INTERFACE //////////////////////////////////////////////////////////////
- /*
- * This lets an entity's attributes be displayed using foreach as a normal array.
- * Example: http://www.sitepoint.com/print/php5-standard-library
- */
-
- private $valid = FALSE;
-
- function rewind()
- {
- $this->valid = (FALSE !== reset($this->attributes));
- }
-
- function current()
- {
- return current($this->attributes);
- }
-
- function key()
- {
- return key($this->attributes);
- }
-
- function next()
- {
- $this->valid = (FALSE !== next($this->attributes));
- }
-
- function valid()
- {
- return $this->valid;
- }
-
- // ARRAY ACCESS INTERFACE //////////////////////////////////////////////////////////
- /*
- * This lets an entity's attributes be accessed like an associative array.
- * Example: http://www.sitepoint.com/print/php5-standard-library
- */
-
- function offsetSet($key, $value)
- {
- if ( array_key_exists($key, $this->attributes) ) {
- $this->attributes[$key] = $value;
- }
- }
-
- function offsetGet($key)
- {
- if ( array_key_exists($key, $this->attributes) ) {
- return $this->attributes[$key];
- }
- }
-
- function offsetUnset($key)
- {
- if ( array_key_exists($key, $this->attributes) ) {
- $this->attributes[$key] = ""; // Full unsetting is dangerious for our objects
- }
- }
-
- function offsetExists($offset)
- {
- return array_key_exists($offset, $this->attributes);
- }
+/**
+ * Elgg Entity Extender.
+ * This file contains ways of extending an Elgg entity in custom ways.
+ *
+ * @package Elgg.Core
+ * @subpackage DataModel.Extender
+ */
+
+/**
+ * Detect the value_type for a given value.
+ * Currently this is very crude.
+ *
+ * @todo Make better!
+ *
+ * @param mixed $value The value
+ * @param string $value_type If specified, overrides the detection.
+ *
+ * @return string
+ */
+function detect_extender_valuetype($value, $value_type = "") {
+ if ($value_type != "" && ($value_type == 'integer' || $value_type == 'text')) {
+ return $value_type;
+ }
+
+ // This is crude
+ if (is_int($value)) {
+ return 'integer';
}
-
- /**
- * Detect the value_type for a given value.
- * Currently this is very crude.
- *
- * TODO: Make better!
- *
- * @param mixed $value
- * @param string $value_type If specified, overrides the detection.
- * @return string
- */
- function detect_extender_valuetype($value, $value_type = "")
- {
- if ($value_type!="")
- return $value_type;
-
- // This is crude
- if (is_int($value)) return 'integer';
- if (is_numeric($value)) return 'text'; // Catch floating point values which are not integer
-
+ // Catch floating point values which are not integer
+ if (is_numeric($value)) {
return 'text';
}
-
- /**
- * Utility function used by import_extender_plugin_hook() to process an ODDMetaData and add it to an entity.
- * This function does not hit ->save() on the entity (this lets you construct in memory)
- *
- * @param ElggEntity The entity to add the data to.
- * @param ODDMetaData $element The OpenDD element
- * @return bool
- */
- function oddmetadata_to_elggextender(ElggEntity $entity, ODDMetaData $element)
- {
- // Get the type of extender (metadata, type, attribute etc)
- $type = $element->getAttribute('type');
- $attr_name = $element->getAttribute('name');
- $attr_val = $element->getBody();
-
- switch ($type)
- {
- case 'volatile' : break; // Ignore volatile items
- case 'annotation' :
- $entity->annotate($attr_name, $attr_val);
+
+ return 'text';
+}
+
+/**
+ * Utility function used by import_extender_plugin_hook() to process
+ * an ODDMetaData and add it to an entity. This function does not
+ * hit ->save() on the entity (this lets you construct in memory)
+ *
+ * @param ElggEntity $entity The entity to add the data to.
+ * @param ODDMetaData $element The OpenDD element
+ *
+ * @return bool
+ * @access private
+ */
+function oddmetadata_to_elggextender(ElggEntity $entity, ODDMetaData $element) {
+ // Get the type of extender (metadata, type, attribute etc)
+ $type = $element->getAttribute('type');
+ $attr_name = $element->getAttribute('name');
+ $attr_val = $element->getBody();
+
+ switch ($type) {
+ // Ignore volatile items
+ case 'volatile' :
+ break;
+ case 'annotation' :
+ $entity->annotate($attr_name, $attr_val);
break;
- case 'metadata' :
- $entity->setMetaData($attr_name, $attr_val, "", true);
+ case 'metadata' :
+ $entity->setMetaData($attr_name, $attr_val, "", true);
break;
- default : // Anything else assume attribute
- $entity->set($attr_name, $attr_val);
+ default : // Anything else assume attribute
+ $entity->set($attr_name, $attr_val);
+ }
+
+ // Set time if appropriate
+ $attr_time = $element->getAttribute('published');
+ if ($attr_time) {
+ $entity->set('time_updated', $attr_time);
+ }
+
+ return true;
+}
+
+/**
+ * Handler called by trigger_plugin_hook on the "import" event.
+ *
+ * @param string $hook volatile
+ * @param string $entity_type metadata
+ * @param string $returnvalue Return value from previous hook
+ * @param array $params The parameters
+ *
+ * @return null
+ * @elgg_plugin_hook_handler volatile metadata
+ * @todo investigate more.
+ * @throws ImportException
+ * @access private
+ */
+function import_extender_plugin_hook($hook, $entity_type, $returnvalue, $params) {
+ $element = $params['element'];
+
+ $tmp = NULL;
+
+ if ($element instanceof ODDMetaData) {
+ /* @var ODDMetaData $element */
+ // Recall entity
+ $entity_uuid = $element->getAttribute('entity_uuid');
+ $entity = get_entity_from_uuid($entity_uuid);
+ if (!$entity) {
+ throw new ImportException(elgg_echo('ImportException:GUIDNotFound', array($entity_uuid)));
}
-
- // Set time if appropriate
- $attr_time = $element->getAttribute('published');
- if ($attr_time)
- $entity->set('time_updated', $attr_time);
-
+
+ oddmetadata_to_elggextender($entity, $element);
+
+ // Save
+ if (!$entity->save()) {
+ $attr_name = $element->getAttribute('name');
+ $msg = elgg_echo('ImportException:ProblemUpdatingMeta', array($attr_name, $entity_uuid));
+ throw new ImportException($msg);
+ }
+
return true;
}
-
- /**
- * Handler called by trigger_plugin_hook on the "import" event.
- */
- function import_extender_plugin_hook($hook, $entity_type, $returnvalue, $params)
- {
- $element = $params['element'];
-
- $tmp = NULL;
-
- if ($element instanceof ODDMetaData)
- {
- // Recall entity
- $entity_uuid = $element->getAttribute('entity_uuid');
- $entity = get_entity_from_uuid($entity_uuid);
- if (!$entity)
- throw new ImportException(sprintf(elgg_echo('ImportException:GUIDNotFound'), $entity_uuid));
-
- oddmetadata_to_elggextender($entity, $element);
-
- // Save
- if (!$entity->save())
- throw new ImportException(sprintf(elgg_echo('ImportException:ProblemUpdatingMeta'), $attr_name, $entity_uuid));
-
- return true;
+}
+
+/**
+ * Determines whether or not the specified user can edit the specified piece of extender
+ *
+ * @param int $extender_id The ID of the piece of extender
+ * @param string $type 'metadata' or 'annotation'
+ * @param int $user_guid The GUID of the user
+ *
+ * @return bool
+ */
+function can_edit_extender($extender_id, $type, $user_guid = 0) {
+ // @todo Since Elgg 1.0, Elgg has returned false from can_edit_extender()
+ // if no user was logged in. This breaks the access override. This is a
+ // temporary work around. This function needs to be rewritten in Elgg 1.9
+ if (!elgg_check_access_overrides($user_guid)) {
+ if (!elgg_is_logged_in()) {
+ return false;
}
}
-
- /**
- * Determines whether or not the specified user can edit the specified piece of extender
- *
- * @param int $extender_id The ID of the piece of extender
- * @param string $type 'metadata' or 'annotation'
- * @param int $user_guid The GUID of the user
- * @return true|false
- */
- function can_edit_extender($extender_id, $type, $user_guid = 0) {
-
- if (!isloggedin())
- return false;
-
- $user_guid = (int)$user_guid;
- $user = get_entity($user_guid);
- if (!$user) $user = get_loggedin_user();
-
- $functionname = "get_{$type}";
- if (is_callable($functionname)) {
- $extender = $functionname($extender_id);
- } else return false;
-
- if (!is_a($extender,"ElggExtender")) return false;
-
- // If the owner is the specified user, great! They can edit.
- if ($extender->getOwner() == $user->getGUID()) return true;
-
- // If the user can edit the entity this is attached to, great! They can edit.
- if (can_edit_entity($extender->entity_guid,$user->getGUID())) return true;
-
- // Trigger plugin hooks
- return trigger_plugin_hook('permissions_check',$type,array('entity' => $entity, 'user' => $user),false);
-
+
+ $user_guid = (int)$user_guid;
+ $user = get_user($user_guid);
+ if (!$user) {
+ $user = elgg_get_logged_in_user_entity();
+ $user_guid = elgg_get_logged_in_user_guid();
}
-
- /**
- * Sets the URL handler for a particular extender type and name.
- * It is recommended that you do not call this directly, instead use one of the wrapper functions in the
- * subtype files.
- *
- * @param string $function_name The function to register
- * @param string $extender_type Extender type
- * @param string $extender_name The name of the extender
- * @return true|false Depending on success
- */
- function register_extender_url_handler($function_name, $extender_type = "all", $extender_name = "all") {
- global $CONFIG;
-
- if (!is_callable($function_name)) return false;
-
- if (!isset($CONFIG->extender_url_handler)) {
- $CONFIG->extender_url_handler = array();
- }
- if (!isset($CONFIG->extender_url_handler[$extender_type])) {
- $CONFIG->extender_url_handler[$extender_type] = array();
- }
- $CONFIG->extender_url_handler[$extender_type][$extender_name] = $function_name;
-
+
+ $functionname = "elgg_get_{$type}_from_id";
+ if (is_callable($functionname)) {
+ $extender = call_user_func($functionname, $extender_id);
+ } else {
+ return false;
+ }
+
+ if (!($extender instanceof ElggExtender)) {
+ return false;
+ }
+ /* @var ElggExtender $extender */
+
+ // If the owner is the specified user, great! They can edit.
+ if ($extender->getOwnerGUID() == $user_guid) {
+ return true;
+ }
+
+ // If the user can edit the entity this is attached to, great! They can edit.
+ if (can_edit_entity($extender->entity_guid, $user_guid)) {
return true;
-
}
-
- /**
- * Get the URL of a given elgg extender.
- * Used by get_annotation_url and get_metadata_url.
- *
- * @param ElggExtender $extender
- */
- function get_extender_url(ElggExtender $extender)
- {
- global $CONFIG;
-
- $view = elgg_get_viewtype();
-
- $guid = $extender->entity_guid;
- $type = $extender->type;
-
- $url = "";
-
- $function = "";
- if (isset($CONFIG->extender_url_handler[$type][$extender->name]))
- $function = $CONFIG->extender_url_handler[$type][$extender->name];
- if (isset($CONFIG->extender_url_handler[$type]['all']))
- $function = $CONFIG->extender_url_handler[$type]['all'];
- if (isset($CONFIG->extender_url_handler['all']['all']))
- $function = $CONFIG->extender_url_handler['all']['all'];
-
- if (is_callable($function)) {
- $url = $function($extender);
+
+ // Trigger plugin hook - note that $user may be null
+ $params = array('entity' => $extender->getEntity(), 'user' => $user);
+ return elgg_trigger_plugin_hook('permissions_check', $type, $params, false);
+}
+
+/**
+ * Sets the URL handler for a particular extender type and name.
+ * It is recommended that you do not call this directly, instead use
+ * one of the wrapper functions such as elgg_register_annotation_url_handler().
+ *
+ * @param string $extender_type Extender type ('annotation', 'metadata')
+ * @param string $extender_name The name of the extender
+ * @param string $function_name The function to register
+ *
+ * @return bool
+ */
+function elgg_register_extender_url_handler($extender_type, $extender_name, $function_name) {
+
+ global $CONFIG;
+
+ if (!is_callable($function_name, true)) {
+ return false;
+ }
+
+ if (!isset($CONFIG->extender_url_handler)) {
+ $CONFIG->extender_url_handler = array();
+ }
+ if (!isset($CONFIG->extender_url_handler[$extender_type])) {
+ $CONFIG->extender_url_handler[$extender_type] = array();
+ }
+ $CONFIG->extender_url_handler[$extender_type][$extender_name] = $function_name;
+
+ return true;
+}
+
+/**
+ * Get the URL of a given elgg extender.
+ * Used by get_annotation_url and get_metadata_url.
+ *
+ * @param ElggExtender $extender An extender object
+ *
+ * @return string
+ */
+function get_extender_url(ElggExtender $extender) {
+ global $CONFIG;
+
+ $view = elgg_get_viewtype();
+
+ $guid = $extender->entity_guid;
+ $type = $extender->type;
+
+ $url = "";
+
+ $function = "";
+ if (isset($CONFIG->extender_url_handler[$type][$extender->name])) {
+ $function = $CONFIG->extender_url_handler[$type][$extender->name];
+ }
+
+ if (isset($CONFIG->extender_url_handler[$type]['all'])) {
+ $function = $CONFIG->extender_url_handler[$type]['all'];
+ }
+
+ if (isset($CONFIG->extender_url_handler['all']['all'])) {
+ $function = $CONFIG->extender_url_handler['all']['all'];
+ }
+
+ if (is_callable($function)) {
+ $url = call_user_func($function, $extender);
+ }
+
+ if ($url == "") {
+ $nameid = $extender->id;
+ if ($type == 'volatile') {
+ $nameid = $extender->name;
}
-
- if ($url == "") {
- $nameid = $extender->id;
- if ($type == 'volatile')
- $nameid== $extender->name;
- $url = $CONFIG->wwwroot . "export/$view/$guid/$type/$nameid/";
- }
- return $url;
- }
-
- /** Register the hook */
- register_plugin_hook("import", "all", "import_extender_plugin_hook", 2);
-
-?> \ No newline at end of file
+ $url = "export/$view/$guid/$type/$nameid/";
+ }
+
+ return elgg_normalize_url($url);
+}
+
+/** Register the hook */
+elgg_register_plugin_hook_handler("import", "all", "import_extender_plugin_hook", 2);
diff --git a/engine/lib/filestore.php b/engine/lib/filestore.php
index ee90e4b86..a3c7ba439 100644
--- a/engine/lib/filestore.php
+++ b/engine/lib/filestore.php
@@ -1,845 +1,520 @@
<?php
- /**
- * Elgg filestore.
- * This file contains classes, interfaces and functions for saving and retrieving data to various file
- * stores.
- *
- * @package Elgg
- * @subpackage API
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
-
- include_once("objects.php");
-
- /**
- * @class ElggFilestore
- * This class defines the interface for all elgg data repositories.
- * @author Curverider Ltd
- */
- abstract class ElggFilestore
- {
- /**
- * Attempt to open the file $file for storage or writing.
- *
- * @param ElggFile $file
- * @param string $mode "read", "write", "append"
- * @return mixed A handle to the opened file or false on error.
- */
- abstract public function open(ElggFile $file, $mode);
-
- /**
- * Write data to a given file handle.
- *
- * @param mixed $f The file handle - exactly what this is depends on the file system
- * @param string $data The binary string of data to write
- * @return int Number of bytes written.
- */
- abstract public function write($f, $data);
-
- /**
- * Read data from a filestore.
- *
- * @param mixed $f The file handle
- * @param int $length Length in bytes to read.
- * @param int $offset The optional offset.
- * @return mixed String of data or false on error.
- */
- abstract public function read($f, $length, $offset = 0);
-
- /**
- * Seek a given position within a file handle.
- *
- * @param mixed $f The file handle.
- * @param int $position The position.
- */
- abstract public function seek($f, $position);
-
- /**
- * Return a whether the end of a file has been reached.
- *
- * @param mixed $f The file handle.
- * @return boolean
- */
- abstract public function eof($f);
-
- /**
- * Return the current position in an open file.
- *
- * @param mixed $f The file handle.
- * @return int
- */
- abstract public function tell($f);
-
- /**
- * Close a given file handle.
- *
- * @param mixed $f
- */
- abstract public function close($f);
-
- /**
- * Delete the file associated with a given file handle.
- *
- * @param ElggFile $file
- */
- abstract public function delete(ElggFile $file);
-
- /**
- * Return the size in bytes for a given file.
- *
- * @param ElggFile $file
- */
- abstract public function getFileSize(ElggFile $file);
-
- /**
- * Return the filename of a given file as stored on the filestore.
- *
- * @param ElggFile $file
- */
- abstract public function getFilenameOnFilestore(ElggFile $file);
-
- /**
- * Get the filestore's creation parameters as an associative array.
- * Used for serialisation and for storing the creation details along side a file object.
- *
- * @return array
- */
- abstract public function getParameters();
-
- /**
- * Set the parameters from the associative array produced by $this->getParameters().
- */
- abstract public function setParameters(array $parameters);
-
- /**
- * Get the contents of the whole file.
- *
- * @param mixed $file The file handle.
- * @return mixed The file contents.
- */
- abstract public function grabFile(ElggFile $file);
-
- /**
- * Return whether a file physically exists or not.
- *
- * @param ElggFile $file
- */
- abstract public function exists(ElggFile $file);
-
- }
-
- /**
- * @class ElggDiskFilestore
- * This class uses disk storage to save data.
- * @author Curverider Ltd
- */
- class ElggDiskFilestore extends ElggFilestore
- {
- /**
- * Directory root.
- */
- private $dir_root;
-
- /**
- * Default depth of file directory matrix
- */
- private $matrix_depth = 5;
-
- /**
- * Construct a disk filestore using the given directory root.
- *
- * @param string $directory_root Root directory, must end in "/"
- */
- public function __construct($directory_root)
- {
- $this->dir_root = $directory_root;
- }
-
- public function open(ElggFile $file, $mode)
- {
- $fullname = $this->getFilenameOnFilestore($file);
-
- // Split into path and name
- $ls = strrpos($fullname,"/");
- if ($ls===false) $ls = 0;
-
- $path = substr($fullname, 0, $ls);
- $name = substr($fullname, $ls);
-
- // Try and create the directory
- try { $this->make_directory_root($path); } catch (Exception $e){}
-
- if (($mode!='write') && (!file_exists($fullname)))
- return false;
-
- switch ($mode)
- {
- case "read" : $mode = "r+b"; break;
- case "write" : $mode = "w+b"; break;
- case "append" : $mode = "a+b"; break;
- default: throw new InvalidParameterException(sprintf(elgg_echo('InvalidParameterException:UnrecognisedFileMode'), $mode));
- }
-
- return fopen($fullname, $mode);
-
- }
-
- public function write($f, $data)
- {
- return fwrite($f, $data);
- }
-
- public function read($f, $length, $offset = 0)
- {
- if ($offset)
- $this->seek($f, $offset);
-
- return fread($f, $length);
- }
-
- public function close($f)
- {
- return fclose($f);
- }
-
- public function delete(ElggFile $file)
- {
- $filename = $this->getFilenameOnFilestore($file);
- if (file_exists($filename)) {
- return unlink($filename);
- } else {
- return true;
- }
- }
-
- public function seek($f, $position)
- {
- return fseek($f, $position);
- }
-
- public function tell($f)
- {
- return ftell($f);
- }
-
- public function eof($f)
- {
- return feof($f);
- }
-
- public function getFileSize(ElggFile $file)
- {
- return filesize($this->getFilenameOnFilestore($file));
- }
-
- public function getFilenameOnFilestore(ElggFile $file)
- {
- $owner = $file->getOwnerEntity();
- if (!$owner)
- $owner = get_loggedin_user();
-
- if ((!$owner) || (!$owner->username)) throw new InvalidParameterException(elgg_echo('InvalidParameterException:MissingOwner'));
-
- return $this->dir_root . $this->make_file_matrix($owner->username) . $file->getFilename();
- }
-
- public function grabFile(ElggFile $file) {
-
- return file_get_contents($file->getFilenameOnFilestore());
-
- }
-
- public function exists(ElggFile $file)
- {
- return file_exists($this->getFilenameOnFilestore($file));
- }
-
- /**
- * Make the directory root.
- *
- * @param string $dirroot
- */
- protected function make_directory_root($dirroot)
- {
- if (!file_exists($dirroot))
- if (!@mkdir($dirroot, 0700, true))
- throw new IOException(sprintf(elgg_echo('IOException:CouldNotMake'), $dirroot));
-
- return true;
- }
-
- /**
- * Multibyte string tokeniser.
- *
- * Splits a string into an array. Will fail safely if mbstring is not installed (although this may still
- * not handle .
- *
- * @param string $string String
- * @param string $charset The charset, defaults to UTF8
- * @return array
- */
- private function mb_str_split($string, $charset = 'UTF8')
- {
- if (is_callable('mb_substr'))
- {
- $length = mb_strlen($string);
- $array = array();
-
- while ($length)
- {
- $array[] = mb_substr($string, 0, 1, $charset);
- $string = mb_substr($string, 1, $length, $charset);
-
- $length = mb_strlen($string);
- }
-
- return $array;
- }
- else
- return str_split($string);
-
- return false;
- }
-
- /**
- * Construct the filename matrix.
- *
- * @param string $filename
- */
- protected function make_file_matrix($filename)
- {
- $matrix = "";
-
- $name = $filename;
- $filename = $this->mb_str_split($filename);
- if (!$filename) return false;
-
- $len = count($filename);
- if ($len>$this->matrix_depth)
- $len = $this->matrix_depth;
-
- for ($n = 0; $n < $len; $n++) {
- $matrix .= $filename[$n] . "/";
- }
-
- return $matrix.$name."/";
- }
-
- public function getParameters()
- {
- return array("dir_root" => $this->dir_root);
- }
-
- public function setParameters(array $parameters)
- {
- if (isset($parameters['dir_root']))
- {
- $this->dir_root = $parameters['dir_root'];
- return true;
- }
-
- return false;
+/**
+ * Elgg filestore.
+ * This file contains classes, interfaces and functions for
+ * saving and retrieving data to various file stores.
+ *
+ * @package Elgg.Core
+ * @subpackage DataModel.FileStorage
+ */
+
+/**
+ * Get the size of the specified directory.
+ *
+ * @param string $dir The full path of the directory
+ * @param int $totalsize Add to current dir size
+ *
+ * @return int The size of the directory.
+ */
+function get_dir_size($dir, $totalsize = 0) {
+ $handle = @opendir($dir);
+ while ($file = @readdir($handle)) {
+ if (eregi("^\.{1,2}$", $file)) {
+ continue;
+ }
+ if (is_dir($dir . $file)) {
+ $totalsize = get_dir_size($dir . $file . "/", $totalsize);
+ } else {
+ $totalsize += filesize($dir . $file);
}
}
-
- /**
- * @class ElggFile
- * This class represents a physical file.
- *
- * Usage:
- * Create a new ElggFile object and specify a filename, and optionally a FileStore (if one isn't specified
- * then the default is assumed.
- *
- * Open the file using the appropriate mode, and you will be able to read and write to the file.
- *
- * Optionally, you can also call the file's save() method, this will turn the file into an entity in the
- * system and permit you to do things like attach tags to the file etc. This is not done automatically since
- * there are many occasions where you may want access to file data on datastores using the ElggFile interface
- * but do not want to create an Entity reference to it in the system (temporary files for example).
- *
- * @author Curverider Ltd
- */
- class ElggFile extends ElggObject
- {
- /** Filestore */
- private $filestore;
-
- /** File handle used to identify this file in a filestore. Created by open. */
- private $handle;
-
- protected function initialise_attributes()
- {
- parent::initialise_attributes();
-
- $this->attributes['subtype'] = "file";
- }
-
- public function __construct($guid = null)
- {
- parent::__construct($guid);
-
- // Set default filestore
- $this->filestore = $this->getFilestore();
- }
-
- /**
- * Set the filename of this file.
- *
- * @param string $name The filename.
- */
- public function setFilename($name) { $this->filename = $name; }
-
- /**
- * Return the filename.
- */
- public function getFilename() { return $this->filename; }
-
- /**
- * Return the filename of this file as it is/will be stored on the filestore, which may be different
- * to the filename.
- */
- public function getFilenameOnFilestore() { return $this->filestore->getFilenameOnFilestore($this); }
-
- /**
- * Get the mime type of the file.
- */
- public function getMimeType()
- {
- if ($this->mimetype)
- return $this->mimetype;
-
- // TODO : Guess mimetype if not here
- }
-
- /**
- * Set the mime type of the file.
- *
- * @param $mimetype The mimetype
- */
- public function setMimeType($mimetype) { return $this->mimetype = $mimetype; }
-
- /**
- * Set the optional file description.
- *
- * @param string $description The description.
- */
- public function setDescription($description) { $this->description = $description; }
-
- /**
- * Open the file with the given mode
- *
- * @param string $mode Either read/write/append
- */
- public function open($mode)
- {
- if (!$this->getFilename())
- throw new IOException(elgg_echo('IOException:MissingFileName'));
-
- // See if file has already been saved
- // seek on datastore, parameters and name?
-
- // Sanity check
- if (
- ($mode!="read") &&
- ($mode!="write") &&
- ($mode!="append")
- )
- throw new InvalidParameterException(sprintf(elgg_echo('InvalidParameterException:UnrecognisedFileMode'), $mode));
-
- // Get the filestore
- $fs = $this->getFilestore();
-
- // Ensure that we save the file details to object store
- //$this->save();
-
- // Open the file handle
- $this->handle = $fs->open($this, $mode);
-
- return $this->handle;
- }
-
- /**
- * Write some data.
- *
- * @param string $data The data
- */
- public function write($data)
- {
- $fs = $this->getFilestore();
-
- return $fs->write($this->handle, $data);
- }
-
- /**
- * Read some data.
- *
- * @param int $length Amount to read.
- * @param int $offset The offset to start from.
- */
- public function read($length, $offset = 0)
- {
- $fs = $this->getFilestore();
-
- return $fs->read($this->handle, $length, $offset);
- }
-
- /**
- * Gets the full contents of this file.
- *
- * @return mixed The file contents.
- */
- public function grabFile() {
-
- $fs = $this->getFilestore();
- return $fs->grabFile($this);
-
- }
-
- /**
- * Close the file and commit changes
- */
- public function close()
- {
- $fs = $this->getFilestore();
-
- if ($fs->close($this->handle))
- {
- $this->handle = NULL;
-
- return true;
- }
-
- return false;
- }
-
- /**
- * Delete this file.
- */
- public function delete()
- {
- $fs = $this->getFilestore();
- if ($fs->delete($this)) {
- return parent::delete();
- }
- }
-
- /**
- * Seek a position in the file.
- *
- * @param int $position
- */
- public function seek($position)
- {
- $fs = $this->getFilestore();
-
- return $fs->seek($this->handle, $position);
- }
-
- /**
- * Return the current position of the file.
- *
- * @return int The file position
- */
- public function tell()
- {
- $fs = $this->getFilestore();
-
- return $fs->tell($this->handle);
- }
-
- /**
- * Return the size of the file in bytes.
- */
- public function size()
- {
- return $this->filestore->getFileSize($this);
- }
-
- /**
- * Return a boolean value whether the file handle is at the end of the file
- */
- public function eof()
- {
- $fs = $this->getFilestore();
-
- return $fs->eof($this->handle);
- }
-
- public function exists()
- {
- $fs = $this->getFilestore();
-
- return $fs->exists($this);
- }
-
- /**
- * Set a filestore.
- *
- * @param ElggFilestore $filestore The file store.
- */
- public function setFilestore(ElggFilestore $filestore)
- {
- $this->filestore = $filestore;
+ @closedir($handle);
+
+ return($totalsize);
+}
+
+/**
+ * Get the contents of an uploaded file.
+ * (Returns false if there was an issue.)
+ *
+ * @param string $input_name The name of the file input field on the submission form
+ *
+ * @return mixed|false The contents of the file, or false on failure.
+ */
+function get_uploaded_file($input_name) {
+ // If the file exists ...
+ if (isset($_FILES[$input_name]) && $_FILES[$input_name]['error'] == 0) {
+ return file_get_contents($_FILES[$input_name]['tmp_name']);
+ }
+ return false;
+}
+
+/**
+ * Gets the jpeg contents of the resized version of an uploaded image
+ * (Returns false if the uploaded file was not an image)
+ *
+ * @param string $input_name The name of the file input field on the submission form
+ * @param int $maxwidth The maximum width of the resized image
+ * @param int $maxheight The maximum height of the resized image
+ * @param bool $square If set to true, will take the smallest
+ * of maxwidth and maxheight and use it to set the
+ * dimensions on all size; the image will be cropped.
+ * @param bool $upscale Resize images smaller than $maxwidth x $maxheight?
+ *
+ * @return false|mixed The contents of the resized image, or false on failure
+ */
+function get_resized_image_from_uploaded_file($input_name, $maxwidth, $maxheight,
+$square = false, $upscale = false) {
+
+ // If our file exists ...
+ if (isset($_FILES[$input_name]) && $_FILES[$input_name]['error'] == 0) {
+ return get_resized_image_from_existing_file($_FILES[$input_name]['tmp_name'], $maxwidth,
+ $maxheight, $square, 0, 0, 0, 0, $upscale);
+ }
+
+ return false;
+}
+
+/**
+ * Gets the jpeg contents of the resized version of an already uploaded image
+ * (Returns false if the file was not an image)
+ *
+ * @param string $input_name The name of the file on the disk
+ * @param int $maxwidth The desired width of the resized image
+ * @param int $maxheight The desired height of the resized image
+ * @param bool $square If set to true, takes the smallest of maxwidth and
+ * maxheight and use it to set the dimensions on the new image.
+ * If no crop parameters are set, the largest square that fits
+ * in the image centered will be used for the resize. If square,
+ * the crop must be a square region.
+ * @param int $x1 x coordinate for top, left corner
+ * @param int $y1 y coordinate for top, left corner
+ * @param int $x2 x coordinate for bottom, right corner
+ * @param int $y2 y coordinate for bottom, right corner
+ * @param bool $upscale Resize images smaller than $maxwidth x $maxheight?
+ *
+ * @return false|mixed The contents of the resized image, or false on failure
+ */
+function get_resized_image_from_existing_file($input_name, $maxwidth, $maxheight, $square = FALSE,
+$x1 = 0, $y1 = 0, $x2 = 0, $y2 = 0, $upscale = FALSE) {
+
+ // Get the size information from the image
+ $imgsizearray = getimagesize($input_name);
+ if ($imgsizearray == FALSE) {
+ return FALSE;
+ }
+
+ $width = $imgsizearray[0];
+ $height = $imgsizearray[1];
+
+ $accepted_formats = array(
+ 'image/jpeg' => 'jpeg',
+ 'image/pjpeg' => 'jpeg',
+ 'image/png' => 'png',
+ 'image/x-png' => 'png',
+ 'image/gif' => 'gif'
+ );
+
+ // make sure the function is available
+ $load_function = "imagecreatefrom" . $accepted_formats[$imgsizearray['mime']];
+ if (!is_callable($load_function)) {
+ return FALSE;
+ }
+
+ // get the parameters for resizing the image
+ $options = array(
+ 'maxwidth' => $maxwidth,
+ 'maxheight' => $maxheight,
+ 'square' => $square,
+ 'upscale' => $upscale,
+ 'x1' => $x1,
+ 'y1' => $y1,
+ 'x2' => $x2,
+ 'y2' => $y2,
+ );
+ $params = get_image_resize_parameters($width, $height, $options);
+ if ($params == FALSE) {
+ return FALSE;
+ }
+
+ // load original image
+ $original_image = $load_function($input_name);
+ if (!$original_image) {
+ return FALSE;
+ }
+
+ // allocate the new image
+ $new_image = imagecreatetruecolor($params['newwidth'], $params['newheight']);
+ if (!$new_image) {
+ return FALSE;
+ }
+
+ // color transparencies white (default is black)
+ imagefilledrectangle(
+ $new_image, 0, 0, $params['newwidth'], $params['newheight'],
+ imagecolorallocate($new_image, 255, 255, 255)
+ );
+
+ $rtn_code = imagecopyresampled( $new_image,
+ $original_image,
+ 0,
+ 0,
+ $params['xoffset'],
+ $params['yoffset'],
+ $params['newwidth'],
+ $params['newheight'],
+ $params['selectionwidth'],
+ $params['selectionheight']);
+ if (!$rtn_code) {
+ return FALSE;
+ }
+
+ // grab a compressed jpeg version of the image
+ ob_start();
+ imagejpeg($new_image, NULL, 90);
+ $jpeg = ob_get_clean();
+
+ imagedestroy($new_image);
+ imagedestroy($original_image);
+
+ return $jpeg;
+}
+
+/**
+ * Calculate the parameters for resizing an image
+ *
+ * @param int $width Width of the original image
+ * @param int $height Height of the original image
+ * @param array $options See $defaults for the options
+ *
+ * @return array or FALSE
+ * @since 1.7.2
+ */
+function get_image_resize_parameters($width, $height, $options) {
+
+ $defaults = array(
+ 'maxwidth' => 100,
+ 'maxheight' => 100,
+
+ 'square' => FALSE,
+ 'upscale' => FALSE,
+
+ 'x1' => 0,
+ 'y1' => 0,
+ 'x2' => 0,
+ 'y2' => 0,
+ );
+
+ $options = array_merge($defaults, $options);
+
+ extract($options);
+
+ // crop image first?
+ $crop = TRUE;
+ if ($x1 == 0 && $y1 == 0 && $x2 == 0 && $y2 == 0) {
+ $crop = FALSE;
+ }
+
+ // how large a section of the image has been selected
+ if ($crop) {
+ $selection_width = $x2 - $x1;
+ $selection_height = $y2 - $y1;
+ } else {
+ // everything selected if no crop parameters
+ $selection_width = $width;
+ $selection_height = $height;
+ }
+
+ // determine cropping offsets
+ if ($square) {
+ // asking for a square image back
+
+ // detect case where someone is passing crop parameters that are not for a square
+ if ($crop == TRUE && $selection_width != $selection_height) {
+ return FALSE;
}
-
- /**
- * Return a filestore suitable for saving this file.
- * This filestore is either a pre-registered filestore, a filestore loaded from metatags saved
- * along side this file, or the system default.
- */
- protected function getFilestore()
- {
- // Short circuit if already set.
- if ($this->filestore)
- return $this->filestore;
-
-
- // If filestore meta set then retrieve filestore TODO: Better way of doing this?
- $metas = get_metadata_for_entity($this->guid);
- $parameters = array();
- if (is_array($metas))
- foreach ($metas as $meta)
- {
- if (strpos($meta->name, "filestore::")!==false)
- {
- // Filestore parameter tag
- $comp = explode("::", $meta->name);
- $name = $comp[1];
-
- $parameters[$name] = $meta->value;
- }
- }
-
- // If parameters loaded then create new filestore
- if (count($parameters)!=0)
- {
- // Create new filestore object
- if ((!isset($parameters['filestore'])) || (!class_exists($parameters['filestore'])))
- throw new ClassNotFoundException(elgg_echo('ClassNotFoundException:NotFoundNotSavedWithFile'));
-
- $this->filestore = new $parameters['filestore']();
-
- // Set parameters
- $this->filestore->setParameters($parameters);
- }
-
- // if still nothing then set filestore to default
- if (!$this->filestore)
- $this->filestore = get_default_filestore();
+ // size of the new square image
+ $new_width = $new_height = min($maxwidth, $maxheight);
+
+ // find largest square that fits within the selected region
+ $selection_width = $selection_height = min($selection_width, $selection_height);
+
+ // set offsets for crop
+ if ($crop) {
+ $widthoffset = $x1;
+ $heightoffset = $y1;
+ $width = $x2 - $x1;
+ $height = $width;
+ } else {
+ // place square region in the center
+ $widthoffset = floor(($width - $selection_width) / 2);
+ $heightoffset = floor(($height - $selection_height) / 2);
+ }
+ } else {
+ // non-square new image
+ $new_width = $maxwidth;
+ $new_height = $maxheight;
- return $this->filestore;
+ // maintain aspect ratio of original image/crop
+ if (($selection_height / (float)$new_height) > ($selection_width / (float)$new_width)) {
+ $new_width = floor($new_height * $selection_width / (float)$selection_height);
+ } else {
+ $new_height = floor($new_width * $selection_height / (float)$selection_width);
}
-
- public function save()
- {
- if (!parent::save())
- return false;
-
- // Save datastore metadata
- $params = $this->filestore->getParameters();
- foreach ($params as $k => $v)
- $this->setMetaData("filestore::$k", $v);
-
- // Now make a note of the filestore class
- $this->setMetaData("filestore::filestore", get_class($this->filestore));
-
- return true;
+
+ // by default, use entire image
+ $widthoffset = 0;
+ $heightoffset = 0;
+
+ if ($crop) {
+ $widthoffset = $x1;
+ $heightoffset = $y1;
}
-
}
-
- /**
- * Get the contents of an uploaded file.
- * (Returns false if there was an issue.)
- *
- * @param string $input_name The name of the file input field on the submission form
- * @return mixed|false The contents of the file, or false on failure.
- */
- function get_uploaded_file($input_name) {
-
- // If the file exists ...
- if (isset($_FILES[$input_name]) && $_FILES[$input_name]['error'] == 0) {
- return file_get_contents($_FILES[$input_name]['tmp_name']);
- }
- return false;
-
- }
-
- /**
- * Gets the jpeg contents of the resized version of an uploaded image
- * (Returns false if the uploaded file was not an image)
- *
- * @param string $input_name The name of the file input field on the submission form
- * @param int $maxwidth The maximum width of the resized image
- * @param int $maxheight The maximum height of the resized image
- * @param true|false $square If set to true, will take the smallest of maxwidth and maxheight and use it to set the dimensions on all size; the image will be cropped.
- * @return false|mixed The contents of the resized image, or false on failure
- */
- function get_resized_image_from_uploaded_file($input_name, $maxwidth, $maxheight, $square = false) {
- // If our file exists ...
- if (isset($_FILES[$input_name]) && $_FILES[$input_name]['error'] == 0) {
-
- return get_resized_image_from_existing_file($_FILES[$input_name]['tmp_name'], $maxwidth, $maxheight, $square);
-
+
+ if (!$upscale && ($selection_height < $new_height || $selection_width < $new_width)) {
+ // we cannot upscale and selected area is too small so we decrease size of returned image
+ if ($square) {
+ $new_height = $selection_height;
+ $new_width = $selection_width;
+ } else {
+ if ($selection_height < $new_height && $selection_width < $new_width) {
+ $new_height = $selection_height;
+ $new_width = $selection_width;
+ }
}
-
- return false;
}
-
- /**
- * Gets the jpeg contents of the resized version of an already uploaded image
- * (Returns false if the uploaded file was not an image)
- *
- * @param string $input_name The name of the file input field on the submission form
- * @param int $maxwidth The maximum width of the resized image
- * @param int $maxheight The maximum height of the resized image
- * @param true|false $square If set to true, will take the smallest of maxwidth and maxheight and use it to set the dimensions on all size; the image will be cropped.
- * @return false|mixed The contents of the resized image, or false on failure
- */
- function get_resized_image_from_existing_file($input_name, $maxwidth, $maxheight, $square = false, $x1 = 0, $y1 = 0, $x2 = 0, $y2 = 0) {
-
- // Get the size information from the image
- if ($imgsizearray = getimagesize($input_name)) {
-
- // Get width and height
- $width = $imgsizearray[0];
- $height = $imgsizearray[1];
- $newwidth = $width;
- $newheight = $height;
-
- // Square the image dimensions if we're wanting a square image
- if ($square) {
- if ($width < $height) {
- $height = $width;
- } else {
- $width = $height;
- }
-
- $newwidth = $width;
- $newheight = $height;
-
- }
-
- if ($width > $maxwidth) {
- $newheight = floor($height * ($maxwidth / $width));
- $newwidth = $maxwidth;
+
+ $params = array(
+ 'newwidth' => $new_width,
+ 'newheight' => $new_height,
+ 'selectionwidth' => $selection_width,
+ 'selectionheight' => $selection_height,
+ 'xoffset' => $widthoffset,
+ 'yoffset' => $heightoffset,
+ );
+
+ return $params;
+}
+
+/**
+ * Delete an ElggFile file
+ *
+ * @param int $guid ElggFile GUID
+ *
+ * @return bool
+ */
+function file_delete($guid) {
+ if ($file = get_entity($guid)) {
+ if ($file->canEdit()) {
+ $thumbnail = $file->thumbnail;
+ $smallthumb = $file->smallthumb;
+ $largethumb = $file->largethumb;
+ if ($thumbnail) {
+ $delfile = new ElggFile();
+ $delfile->owner_guid = $file->owner_guid;
+ $delfile->setFilename($thumbnail);
+ $delfile->delete();
}
- if ($newheight > $maxheight) {
- $newwidth = floor($newwidth * ($maxheight / $newheight));
- $newheight = $maxheight;
+ if ($smallthumb) {
+ $delfile = new ElggFile();
+ $delfile->owner_guid = $file->owner_guid;
+ $delfile->setFilename($smallthumb);
+ $delfile->delete();
}
-
- $accepted_formats = array(
- 'image/jpeg' => 'jpeg',
- 'image/png' => 'png',
- 'image/gif' => 'gif'
- );
-
- // If it's a file we can manipulate ...
- if (array_key_exists($imgsizearray['mime'],$accepted_formats)) {
-
- $function = "imagecreatefrom" . $accepted_formats[$imgsizearray['mime']];
- $newimage = imagecreatetruecolor($newwidth,$newheight);
-
- if (is_callable($function) && $oldimage = $function($input_name)) {
-
- // Crop the image if we need a square
- if ($square) {
- if ($x1 == 0 && $y1 == 0 && $x2 == 0 && $y2 ==0) {
- $widthoffset = floor(($imgsizearray[0] - $width) / 2);
- $heightoffset = floor(($imgsizearray[1] - $height) / 2);
- } else {
- $widthoffset = $x1;
- $heightoffset = $y1;
- $width = ($x2 - $x1);
- $height = $width;
- }
- } else {
- if ($x1 == 0 && $y1 == 0 && $x2 == 0 && $y2 ==0) {
- $widthoffset = 0;
- $heightoffset = 0;
- } else {
- $widthoffset = $x1;
- $heightoffset = $y1;
- $width = ($x2 - $x1);
- $height = ($y2 - $y1);
- }
- }//else {
- // Resize and return the image contents!
- imagecopyresampled($newimage, $oldimage, 0,0,$widthoffset,$heightoffset,$newwidth,$newheight,$width,$height);
- //}
-
- // imagecopyresized($newimage, $oldimage, 0,0,0,0,$newwidth,$newheight,$width,$height);
- ob_start();
- imagejpeg($newimage, null, 90);
- $jpeg = ob_get_clean();
- return $jpeg;
-
- }
-
+ if ($largethumb) {
+ $delfile = new ElggFile();
+ $delfile->owner_guid = $file->owner_guid;
+ $delfile->setFilename($largethumb);
+ $delfile->delete();
}
-
+
+ return $file->delete();
}
-
- return false;
- }
-
+ }
- /// Variable holding the default datastore
- $DEFAULT_FILE_STORE = NULL;
-
- /**
- * Return the default filestore.
- *
- * @return ElggFilestore
- */
- function get_default_filestore()
- {
- global $DEFAULT_FILE_STORE;
-
- return $DEFAULT_FILE_STORE;
+ return false;
+}
+
+/**
+ * Returns an overall file type from the mimetype
+ *
+ * @param string $mimetype The MIME type
+ *
+ * @return string The overall type
+ */
+function file_get_general_file_type($mimetype) {
+ switch($mimetype) {
+
+ case "application/msword":
+ return "document";
+ break;
+ case "application/pdf":
+ return "document";
+ break;
}
-
- /**
- * Set the default filestore for the system.
- */
- function set_default_filestore(ElggFilestore $filestore)
- {
- global $DEFAULT_FILE_STORE;
-
- $DEFAULT_FILE_STORE = $filestore;
-
- return true;
+
+ if (substr_count($mimetype, 'text/')) {
+ return "document";
}
- /**
- * Run once and only once.
- */
- function filestore_run_once()
- {
- // Register a class
- add_subtype("object", "file", "ElggFile");
+ if (substr_count($mimetype, 'audio/')) {
+ return "audio";
}
-
- /**
- * Initialise the file modules.
- * Listens to system boot and registers any appropriate file types and classes
- */
- function filestore_init()
- {
- global $CONFIG;
-
- // Now register a default filestore
+
+ if (substr_count($mimetype, 'image/')) {
+ return "image";
+ }
+
+ if (substr_count($mimetype, 'video/')) {
+ return "video";
+ }
+
+ if (substr_count($mimetype, 'opendocument')) {
+ return "document";
+ }
+
+ return "general";
+}
+
+/**
+ * Delete a directory and all its contents
+ *
+ * @param string $directory Directory to delete
+ *
+ * @return bool
+ */
+function delete_directory($directory) {
+ // sanity check: must be a directory
+ if (!$handle = opendir($directory)) {
+ return FALSE;
+ }
+
+ // loop through all files
+ while (($file = readdir($handle)) !== FALSE) {
+ if (in_array($file, array('.', '..'))) {
+ continue;
+ }
+
+ $path = "$directory/$file";
+ if (is_dir($path)) {
+ // recurse down through directory
+ if (!delete_directory($path)) {
+ return FALSE;
+ }
+ } else {
+ // delete file
+ unlink($path);
+ }
+ }
+
+ // remove empty directory
+ closedir($handle);
+ return rmdir($directory);
+}
+
+/**
+ * Removes all user files
+ *
+ * @warning This only deletes the physical files and not their entities.
+ * This will result in FileExceptions being thrown. Don't use this function.
+ *
+ * @param ElggUser $user And ElggUser
+ *
+ * @return void
+ */
+function clear_user_files($user) {
+ global $CONFIG;
+
+ $time_created = date('Y/m/d', (int)$user->time_created);
+ $file_path = "$CONFIG->dataroot$time_created/$user->guid";
+ if (file_exists($file_path)) {
+ delete_directory($file_path);
+ }
+}
+
+
+/// Variable holding the default datastore
+$DEFAULT_FILE_STORE = NULL;
+
+/**
+ * Return the default filestore.
+ *
+ * @return ElggFilestore
+ */
+function get_default_filestore() {
+ global $DEFAULT_FILE_STORE;
+
+ return $DEFAULT_FILE_STORE;
+}
+
+/**
+ * Set the default filestore for the system.
+ *
+ * @param ElggFilestore $filestore An ElggFilestore object.
+ *
+ * @return true
+ */
+function set_default_filestore(ElggFilestore $filestore) {
+ global $DEFAULT_FILE_STORE;
+
+ $DEFAULT_FILE_STORE = $filestore;
+
+ return true;
+}
+
+/**
+ * Register entity type objects, subtype file as
+ * ElggFile.
+ *
+ * @return void
+ * @access private
+ */
+function filestore_run_once() {
+ // Register a class
+ add_subtype("object", "file", "ElggFile");
+}
+
+/**
+ * Initialise the file modules.
+ * Listens to system init and configures the default filestore
+ *
+ * @return void
+ * @access private
+ */
+function filestore_init() {
+ global $CONFIG;
+
+ // Now register a default filestore
+ if (isset($CONFIG->dataroot)) {
set_default_filestore(new ElggDiskFilestore($CONFIG->dataroot));
-
- // Now run this stuff, but only once
- run_function_once("filestore_run_once");
}
- // Register a startup event
- register_elgg_event_handler('init','system','filestore_init',100);
-?> \ No newline at end of file
+ // Now run this stuff, but only once
+ run_function_once("filestore_run_once");
+}
+
+/**
+ * Unit tests for files
+ *
+ * @param string $hook unit_test
+ * @param string $type system
+ * @param mixed $value Array of tests
+ * @param mixed $params Params
+ *
+ * @return array
+ * @access private
+ */
+function filestore_test($hook, $type, $value, $params) {
+ global $CONFIG;
+ $value[] = "{$CONFIG->path}engine/tests/objects/filestore.php";
+ return $value;
+}
+
+
+// Register a startup event
+elgg_register_event_handler('init', 'system', 'filestore_init', 100);
+
+// Unit testing
+elgg_register_plugin_hook_handler('unit_test', 'system', 'filestore_test');
diff --git a/engine/lib/group.php b/engine/lib/group.php
index 588a60aac..6ded8a825 100644
--- a/engine/lib/group.php
+++ b/engine/lib/group.php
@@ -1,806 +1,341 @@
-<?php
- /**
- * Elgg Groups.
- * Groups contain other entities, or rather act as a placeholder for other entities to mark any given container
- * as their container.
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
-
- /**
- * @class ElggGroup Class representing a container for other elgg entities.
- * @author Curverider Ltd
- */
- class ElggGroup extends ElggEntity
- implements Friendable
- {
- protected function initialise_attributes()
- {
- parent::initialise_attributes();
-
- $this->attributes['type'] = "group";
- $this->attributes['name'] = "";
- $this->attributes['description'] = "";
- $this->attributes['tables_split'] = 2;
- }
-
- /**
- * Construct a new user entity, optionally from a given id value.
- *
- * @param mixed $guid If an int, load that GUID.
- * If a db row then will attempt to load the rest of the data.
- * @throws Exception if there was a problem creating the user.
- */
- function __construct($guid = null)
- {
- $this->initialise_attributes();
-
- if (!empty($guid))
- {
- // Is $guid is a DB row - either a entity row, or a user table row.
- if ($guid instanceof stdClass) {
- // Load the rest
- if (!$this->load($guid->guid))
- throw new IOException(sprintf(elgg_echo('IOException:FailedToLoadGUID'), get_class(), $guid->guid));
- }
-
- // Is $guid is an ElggGroup? Use a copy constructor
- else if ($guid instanceof ElggGroup)
- {
- foreach ($guid->attributes as $key => $value)
- $this->attributes[$key] = $value;
- }
-
- // Is this is an ElggEntity but not an ElggGroup = ERROR!
- else if ($guid instanceof ElggEntity)
- throw new InvalidParameterException(elgg_echo('InvalidParameterException:NonElggGroup'));
-
- // We assume if we have got this far, $guid is an int
- else if (is_numeric($guid)) {
- if (!$this->load($guid)) IOException(sprintf(elgg_echo('IOException:FailedToLoadGUID'), get_class(), $guid));
- }
-
- else
- throw new InvalidParameterException(elgg_echo('InvalidParameterException:UnrecognisedValue'));
- }
- }
-
- /**
- * Add an ElggObject to this group.
- *
- * @param ElggObject $object The object.
- * @return bool
- */
- public function addObjectToGroup(ElggObject $object)
- {
- return add_object_to_group($this->getGUID(), $object->getGUID());
- }
-
- /**
- * Remove an object from the containing group.
- *
- * @param int $guid The guid of the object.
- * @return bool
- */
- public function removeObjectFromGroup($guid)
- {
- return remove_object_from_group($this->getGUID(), $guid);
- }
-
- public function get($name) {
-
- if ($name == 'username') {
- return 'group:' . $this->getGUID();
- }
- return parent::get($name);
-
- }
-
- /**
- * Start friendable compatibility block:
- *
- * public function addFriend($friend_guid);
- public function removeFriend($friend_guid);
- public function isFriend();
- public function isFriendsWith($user_guid);
- public function isFriendOf($user_guid);
- public function getFriends($subtype = "", $limit = 10, $offset = 0);
- public function getFriendsOf($subtype = "", $limit = 10, $offset = 0);
- public function getObjects($subtype="", $limit = 10, $offset = 0);
- public function getFriendsObjects($subtype = "", $limit = 10, $offset = 0);
- public function countObjects($subtype = "");
- */
-
- /**
- * For compatibility with Friendable
- */
- public function addFriend($friend_guid) {
- return $this->join(get_entity($friend_guid));
- }
-
- /**
- * For compatibility with Friendable
- */
- public function removeFriend($friend_guid) {
- return $this->leave(get_entity($friend_guid));
- }
-
- /**
- * For compatibility with Friendable
- */
- public function isFriend() {
- return $this->isMember();
- }
-
- /**
- * For compatibility with Friendable
- */
- public function isFriendsWith($user_guid) {
- return $this->isMember($user_guid);
- }
-
- /**
- * For compatibility with Friendable
- */
- public function isFriendOf($user_guid) {
- return $this->isMember($user_guid);
- }
-
- /**
- * For compatibility with Friendable
- */
- public function getFriends($subtype = "", $limit = 10, $offset = 0) {
- return get_group_members($this->getGUID(), $limit, $offset);
- }
-
- /**
- * For compatibility with Friendable
- */
- public function getFriendsOf($subtype = "", $limit = 10, $offset = 0) {
- return get_group_members($this->getGUID(), $limit, $offset);
- }
-
- /**
- * Get objects contained in this group.
- *
- * @param string $subtype
- * @param int $limit
- * @param int $offset
- * @return mixed
- */
- public function getObjects($subtype="", $limit = 10, $offset = 0)
- {
- return get_objects_in_group($this->getGUID(), $subtype, 0, 0, "", $limit, $offset, false);
- }
-
- /**
- * For compatibility with Friendable
- */
- public function getFriendsObjects($subtype = "", $limit = 10, $offset = 0) {
- return get_objects_in_group($this->getGUID(), $subtype, 0, 0, "", $limit, $offset, false);
- }
-
- /**
- * For compatibility with Friendable
- */
- public function countObjects($subtype = "") {
- return get_objects_in_group($this->getGUID(), $subtype, 0, 0, "", 10, 0, true);
- }
-
- /**
- * End friendable compatibility block
- */
-
- /**
- * Get a list of group members.
- *
- * @param int $limit
- * @param int $offset
- * @return mixed
- */
- public function getMembers($limit = 10, $offset = 0, $count = false)
- {
- return get_group_members($this->getGUID(), $limit, $offset, 0 , $count);
- }
-
-
-
- /**
- * Returns whether the current group is public membership or not.
- * @return bool
- */
- public function isPublicMembership()
- {
- if ($this->membership == ACCESS_PUBLIC)
- return true;
-
- return false;
- }
-
- /**
- * Return whether a given user is a member of this group or not.
- *
- * @param ElggUser $user The user
- * @return bool
- */
- public function isMember($user = 0)
- {
- if (!($user instanceof ElggUser)) $user = get_loggedin_user();
- if (!($user instanceof ElggUser)) return false;
- return is_group_member($this->getGUID(), $user->getGUID());
- }
-
- /**
- * Join an elgg user to this group.
- *
- * @param ElggUser $user
- * @return bool
- */
- public function join(ElggUser $user)
- {
- return join_group($this->getGUID(), $user->getGUID());
- }
-
- /**
- * Remove a user from the group.
- *
- * @param ElggUser $user
- */
- public function leave(ElggUser $user)
- {
- return leave_group($this->getGUID(), $user->getGUID());
- }
-
- /**
- * Delete this group.
- */
- public function delete()
- {
-
- if (!delete_group_entity($this->get('guid')))
- return false;
-
- return parent::delete();
-
- }
-
-
- /**
- * Override the load function.
- * This function will ensure that all data is loaded (were possible), so
- * if only part of the ElggGroup is loaded, it'll load the rest.
- *
- * @param int $guid
- */
- protected function load($guid)
- {
- // Test to see if we have the generic stuff
- if (!parent::load($guid))
- return false;
-
- // Check the type
- if ($this->attributes['type']!='group')
- throw new InvalidClassException(sprintf(elgg_echo('InvalidClassException:NotValidElggStar'), $guid, get_class()));
-
- // Load missing data
- $row = get_group_entity_as_row($guid);
- if (($row) && (!$this->isFullyLoaded())) $this->attributes['tables_loaded'] ++; // If $row isn't a cached copy then increment the counter
-
- // Now put these into the attributes array as core values
- $objarray = (array) $row;
- foreach($objarray as $key => $value)
- $this->attributes[$key] = $value;
-
- return true;
- }
-
- /**
- * Override the save function.
- */
- public function save()
- {
- // Save generic stuff
- if (!parent::save())
- return false;
-
- // Now save specific stuff
- return create_group_entity($this->get('guid'), $this->get('name'), $this->get('description'));
- }
-
- // EXPORTABLE INTERFACE ////////////////////////////////////////////////////////////
-
- /**
- * Return an array of fields which can be exported.
- */
- public function getExportableValues()
- {
- return array_merge(parent::getExportableValues(), array(
- 'name',
- 'description',
- ));
- }
- }
-
- /**
- * Get the group entity.
- *
- * @param int $guid
- */
- function get_group_entity_as_row($guid)
- {
- global $CONFIG;
-
- $guid = (int)$guid;
-
- $row = retrieve_cached_entity_row($guid);
- if ($row)
- {
- // We have already cached this object, so retrieve its value from the cache
- if (isset($CONFIG->debug) && $CONFIG->debug)
- error_log("** Retrieving sub part of GUID:$guid from cache");
-
- return $row;
- }
- else
- {
- // Object not cached, load it.
- if (isset($CONFIG->debug) && $CONFIG->debug == true)
- error_log("** Sub part of GUID:$guid loaded from DB");
-
- return get_data_row("SELECT * from {$CONFIG->dbprefix}groups_entity where guid=$guid");
- }
- }
-
- /**
- * Create or update the extras table for a given group.
- * Call create_entity first.
- *
- * @param int $guid
- * @param string $name
- * @param string $description
- */
- function create_group_entity($guid, $name, $description)
- {
- global $CONFIG;
-
- $guid = (int)$guid;
- $name = sanitise_string($name);
- $description = sanitise_string($description);
-
- $row = get_entity_as_row($guid);
-
- if ($row)
- {
- // Exists and you have access to it
- if ($exists = get_data_row("SELECT guid from {$CONFIG->dbprefix}groups_entity WHERE guid = {$guid}")) {
- $result = update_data("UPDATE {$CONFIG->dbprefix}groups_entity set name='$name', description='$description' where guid=$guid");
- if ($result!=false)
- {
- // Update succeeded, continue
- $entity = get_entity($guid);
- if (trigger_elgg_event('update',$entity->type,$entity)) {
- return $guid;
- } else {
- $entity->delete();
- //delete_entity($guid);
- }
- }
- }
- else
- {
- // Update failed, attempt an insert.
- $result = insert_data("INSERT into {$CONFIG->dbprefix}groups_entity (guid, name, description) values ($guid, '$name','$description')");
- if ($result!==false) {
- $entity = get_entity($guid);
- if (trigger_elgg_event('create',$entity->type,$entity)) {
- return $guid;
- } else {
- $entity->delete();
- //delete_entity($guid);
- }
- }
- }
- }
-
- return false;
- }
-
-
- /**
- * Delete a group's extra data.
- *
- * @param int $guid The guid of the group
- * @return bool
- */
- function delete_group_entity($guid)
- {
- global $CONFIG;
-
- $guid = (int)$guid;
-
- $row = get_entity_as_row($guid);
-
- // Check to see if we have access and it exists
- if ($row)
- {
- // Delete any existing stuff
- return delete_data("DELETE from {$CONFIG->dbprefix}groups_entity where guid=$guid");
- }
-
- return false;
- }
-
- /**
- * Add an object to the given group.
- *
- * @param int $group_guid The group to add the object to.
- * @param int $object_guid The guid of the elgg object (must be ElggObject or a child thereof)
- * @return bool
- */
- function add_object_to_group($group_guid, $object_guid)
- {
- $group_guid = (int)$group_guid;
- $object_guid = (int)$object_guid;
-
- $group = get_entity($group_guid);
- $object = get_entity($object_guid);
-
- if ((!$group) || (!$object)) return false;
-
- if (!($group instanceof ElggGroup))
- throw new InvalidClassException(sprintf(elgg_echo('InvalidClassException:NotValidElggStar'), $group_guid, 'ElggGroup'));
-
- if (!($object instanceof ElggObject))
- throw new InvalidClassException(sprintf(elgg_echo('InvalidClassException:NotValidElggStar'), $object_guid, 'ElggObject'));
-
- $object->container_guid = $group_guid;
- return $object->save();
- }
-
- /**
- * Remove an object from the given group.
- *
- * @param int $group_guid The group to remove the object from
- * @param int $object_guid The object to remove
- */
- function remove_object_from_group($group_guid, $object_guid)
- {
- $group_guid = (int)$group_guid;
- $object_guid = (int)$object_guid;
-
- $group = get_entity($group_guid);
- $object = get_entity($object_guid);
-
- if ((!$group) || (!$object)) return false;
-
- if (!($group instanceof ElggGroup))
- throw new InvalidClassException(sprintf(elgg_echo('InvalidClassException:NotValidElggStar'), $group_guid, 'ElggGroup'));
-
- if (!($object instanceof ElggObject))
- throw new InvalidClassException(sprintf(elgg_echo('InvalidClassException:NotValidElggStar'), $object_guid, 'ElggObject'));
-
- $object->container_guid = $object->owner_guid;
- return $object->save();
- }
-
- /**
- * Return an array of objects in a given container.
- * @see get_entities()
- *
- * @param int $group_guid The container (defaults to current page owner)
- * @param string $subtype The subtype
- * @param int $owner_guid Owner
- * @param int $site_guid The site
- * @param string $order_by Order
- * @param unknown_type $limit Limit on number of elements to return, by default 10.
- * @param unknown_type $offset Where to start, by default 0.
- * @param unknown_type $count Whether to return the entities or a count of them.
- */
- function get_objects_in_group($group_guid, $subtype = "", $owner_guid = 0, $site_guid = 0, $order_by = "", $limit = 10, $offset = 0, $count = false)
- {
- global $CONFIG;
-
- if ($subtype === false || $subtype === null || $subtype === 0)
- return false;
-
- $subtype = get_subtype_id('object', $subtype);
-
- if ($order_by == "") $order_by = "e.time_created desc";
- $order_by = sanitise_string($order_by);
- $limit = (int)$limit;
- $offset = (int)$offset;
- $site_guid = (int) $site_guid;
- if ($site_guid == 0)
- $site_guid = $CONFIG->site_guid;
-
- $container_guid = (int)$group_guid;
- if ($container_guid == 0)
- $container_guid = page_owner();
-
- $where = array();
-
- $where[] = "e.type='object'";
- if ($subtype!=="")
- $where[] = "e.subtype=$subtype";
- if ($owner_guid != "") {
- if (!is_array($owner_guid)) {
- $owner_guid = (int) $owner_guid;
- $where[] = "e.container_guid = '$owner_guid'";
- } else if (sizeof($owner_guid) > 0) {
- // Cast every element to the owner_guid array to int
- $owner_guid = array_map("sanitise_int", $owner_guid);
- $owner_guid = implode(",",$owner_guid);
- $where[] = "e.container_guid in ({$owner_guid})";
- }
- }
- if ($site_guid > 0)
- $where[] = "e.site_guid = {$site_guid}";
-
- if ($container_guid > 0)
- $where[] = "e.container_guid = {$container_guid}";
-
- if (!$count) {
- $query = "SELECT * from {$CONFIG->dbprefix}entities e join {$CONFIG->dbprefix}objects_entity o on e.guid=o.guid where ";
- } else {
- $query = "SELECT count(e.guid) as total from {$CONFIG->dbprefix}entities e join {$CONFIG->dbprefix}objects_entity o on e.guid=o.guid where ";
- }
- foreach ($where as $w)
- $query .= " $w and ";
- $query .= get_access_sql_suffix('e'); // Add access controls
- if (!$count) {
- $query .= " order by $order_by";
- if ($limit) $query .= " limit $offset, $limit"; // Add order and limit
-
- $dt = get_data($query, "entity_row_to_elggstar");
- return $dt;
- } else {
- $total = get_data_row($query);
- return $total->total;
- }
- }
-
- /**
- * Get all the entities from metadata from a group.
- *
- * @param int $group_guid The ID of the group.
- * @param mixed $meta_name
- * @param mixed $meta_value
- * @param string $entity_type The type of entity to look for, eg 'site' or 'object'
- * @param string $entity_subtype The subtype of the entity.
- * @param int $limit
- * @param int $offset
- * @param string $order_by Optional ordering.
- * @param int $site_guid The site to get entities for. Leave as 0 (default) for the current site; -1 for all sites.
- * @param true|false $count If set to true, returns the total number of entities rather than a list. (Default: false)
- */
- function get_entities_from_metadata_groups($group_guid, $meta_name, $meta_value = "", $entity_type = "", $entity_subtype = "", $owner_guid = 0, $limit = 10, $offset = 0, $order_by = "", $site_guid = 0, $count = false)
- {
- global $CONFIG;
-
- $meta_n = get_metastring_id($meta_name);
- $meta_v = get_metastring_id($meta_value);
-
- $entity_type = sanitise_string($entity_type);
- $entity_subtype = get_subtype_id($entity_type, $entity_subtype);
- $limit = (int)$limit;
- $offset = (int)$offset;
- if ($order_by == "") $order_by = "e.time_created desc";
- $order_by = sanitise_string($order_by);
- $site_guid = (int) $site_guid;
- if (is_array($owner_guid)) {
- foreach($owner_guid as $key => $guid) {
- $owner_guid[$key] = (int) $guid;
- }
- } else {
- $owner_guid = (int) $owner_guid;
- }
- if ($site_guid == 0)
- $site_guid = $CONFIG->site_guid;
-
- $container_guid = (int)$group_guid;
- if ($container_guid == 0)
- $container_guid = page_owner();
-
- //$access = get_access_list();
-
- $where = array();
-
- if ($entity_type!="")
- $where[] = "e.type='$entity_type'";
- if ($entity_subtype)
- $where[] = "e.subtype=$entity_subtype";
- if ($meta_name!="")
- $where[] = "m.name_id='$meta_n'";
- if ($meta_value!="")
- $where[] = "m.value_id='$meta_v'";
- if ($site_guid > 0)
- $where[] = "e.site_guid = {$site_guid}";
- if ($container_guid > 0)
- $where[] = "e.container_guid = {$container_guid}";
- if (is_array($owner_guid)) {
- $where[] = "e.container_guid in (".implode(",",$owner_guid).")";
- } else if ($owner_guid > 0)
- $where[] = "e.container_guid = {$owner_guid}";
-
- if (!$count) {
- $query = "SELECT distinct e.* ";
- } else {
- $query = "SELECT count(e.guid) as total ";
- }
-
- $query .= "from {$CONFIG->dbprefix}entities e JOIN {$CONFIG->dbprefix}metadata m on e.guid = m.entity_guid join {$CONFIG->dbprefix}objects_entity o on e.guid = o.guid where";
- foreach ($where as $w)
- $query .= " $w and ";
- $query .= get_access_sql_suffix("e"); // Add access controls
-
- if (!$count) {
- $query .= " order by $order_by limit $offset, $limit"; // Add order and limit
- return get_data($query, "entity_row_to_elggstar");
- } else {
- if ($row = get_data_row($query))
- return $row->total;
- }
- return false;
- }
-
- /**
- * As get_entities_from_metadata_groups() but with multiple entities.
- *
- * @param int $group_guid The ID of the group.
- * @param array $meta_array Array of 'name' => 'value' pairs
- * @param string $entity_type The type of entity to look for, eg 'site' or 'object'
- * @param string $entity_subtype The subtype of the entity.
- * @param int $limit
- * @param int $offset
- * @param string $order_by Optional ordering.
- * @param int $site_guid The site to get entities for. Leave as 0 (default) for the current site; -1 for all sites.
- * @param true|false $count If set to true, returns the total number of entities rather than a list. (Default: false)
- * @return int|array List of ElggEntities, or the total number if count is set to false
- */
- function get_entities_from_metadata_groups_multi($group_guid, $meta_array, $entity_type = "", $entity_subtype = "", $owner_guid = 0, $limit = 10, $offset = 0, $order_by = "", $site_guid = 0, $count = false)
- {
- global $CONFIG;
-
- if (!is_array($meta_array) || sizeof($meta_array) == 0) {
- return false;
- }
-
- $where = array();
-
- $mindex = 1;
- $join = "";
- foreach($meta_array as $meta_name => $meta_value) {
- $meta_n = get_metastring_id($meta_name);
- $meta_v = get_metastring_id($meta_value);
- $join .= " JOIN {$CONFIG->dbprefix}metadata m{$mindex} on e.guid = m{$mindex}.entity_guid join {$CONFIG->dbprefix}objects_entity o on e.guid = o.guid ";
- if ($meta_name!="")
- $where[] = "m{$mindex}.name_id='$meta_n'";
- if ($meta_value!="")
- $where[] = "m{$mindex}.value_id='$meta_v'";
- $mindex++;
- }
-
- $entity_type = sanitise_string($entity_type);
- $entity_subtype = get_subtype_id($entity_type, $entity_subtype);
- $limit = (int)$limit;
- $offset = (int)$offset;
- if ($order_by == "") $order_by = "e.time_created desc";
- $order_by = sanitise_string($order_by);
- $owner_guid = (int) $owner_guid;
-
- $site_guid = (int) $site_guid;
- if ($site_guid == 0)
- $site_guid = $CONFIG->site_guid;
-
- //$access = get_access_list();
-
- if ($entity_type!="")
- $where[] = "e.type = '{$entity_type}'";
- if ($entity_subtype)
- $where[] = "e.subtype = {$entity_subtype}";
- if ($site_guid > 0)
- $where[] = "e.site_guid = {$site_guid}";
- if ($owner_guid > 0)
- $where[] = "e.owner_guid = {$owner_guid}";
- if ($container_guid > 0)
- $where[] = "e.container_guid = {$container_guid}";
-
- if ($count) {
- $query = "SELECT count(e.guid) as total ";
- } else {
- $query = "SELECT distinct e.* ";
- }
-
- $query .= " from {$CONFIG->dbprefix}entities e {$join} where";
- foreach ($where as $w)
- $query .= " $w and ";
- $query .= get_access_sql_suffix("e"); // Add access controls
-
- if (!$count) {
- $query .= " order by $order_by limit $offset, $limit"; // Add order and limit
- return get_data($query, "entity_row_to_elggstar");
- } else {
- if ($count = get_data_row($query)) {
- return $count->total;
- }
- }
- return false;
- }
-
- /**
- * Return a list of this group's members.
- *
- * @param int $group_guid The ID of the container/group.
- * @param int $limit The limit
- * @param int $offset The offset
- * @param int $site_guid The site
- * @param bool $count Return the users (false) or the count of them (true)
- * @return mixed
- */
- function get_group_members($group_guid, $limit = 10, $offset = 0, $site_guid = 0, $count = false)
- {
- return get_entities_from_relationship('member', $group_guid, true, 'user', '', 0, "", $limit, $offset, $count, $site_guid);
- }
-
- /**
- * Return whether a given user is a member of the group or not.
- *
- * @param int $group_guid The group ID
- * @param int $user_guid The user guid
- * @return bool
- */
- function is_group_member($group_guid, $user_guid)
- {
- return check_entity_relationship($user_guid, 'member', $group_guid);
- }
-
- /**
- * Join a user to a group.
- *
- * @param int $group_guid The group.
- * @param int $user_guid The user.
- */
- function join_group($group_guid, $user_guid)
- {
- trigger_elgg_event('join','group',array('group' => get_entity($group_guid), 'user' => get_entity($user_guid)));
- return add_entity_relationship($user_guid, 'member', $group_guid);
- }
-
- /**
- * Remove a user from a group.
- *
- * @param int $group_guid The group.
- * @param int $user_guid The user.
- */
- function leave_group($group_guid, $user_guid)
- {
- trigger_elgg_event('leave','group',array('group' => get_entity($group_guid), 'user' => get_entity($user_guid)));
- return remove_entity_relationship($user_guid, 'member', $group_guid);
- }
-
- /**
- * Return all groups a user is a member of.
- *
- * @param unknown_type $user_guid
- */
- function get_users_membership($user_guid)
- {
- return get_entities_from_relationship('member', $user_guid, false);
- }
-
- /**
- * Performs initialisation functions for groups
- *
- */
- function group_init() {
- register_entity_type('group','');
- }
-
- register_elgg_event_handler('init','system','group_init');
-
-?> \ No newline at end of file
+<?php
+/**
+ * Elgg Groups.
+ * Groups contain other entities, or rather act as a placeholder for other entities to
+ * mark any given container as their container.
+ *
+ * @package Elgg.Core
+ * @subpackage DataModel.Group
+ */
+
+/**
+ * Get the group entity.
+ *
+ * @param int $guid GUID for a group
+ *
+ * @return array|false
+ * @access private
+ */
+function get_group_entity_as_row($guid) {
+ global $CONFIG;
+
+ $guid = (int)$guid;
+
+ return get_data_row("SELECT * from {$CONFIG->dbprefix}groups_entity where guid=$guid");
+}
+
+/**
+ * Create or update the entities table for a given group.
+ * Call create_entity first.
+ *
+ * @param int $guid GUID
+ * @param string $name Name
+ * @param string $description Description
+ *
+ * @return bool
+ * @access private
+ */
+function create_group_entity($guid, $name, $description) {
+ global $CONFIG;
+
+ $guid = (int)$guid;
+ $name = sanitise_string($name);
+ $description = sanitise_string($description);
+
+ $row = get_entity_as_row($guid);
+
+ if ($row) {
+ // Exists and you have access to it
+ $exists = get_data_row("SELECT guid from {$CONFIG->dbprefix}groups_entity WHERE guid = {$guid}");
+ if ($exists) {
+ $query = "UPDATE {$CONFIG->dbprefix}groups_entity set"
+ . " name='$name', description='$description' where guid=$guid";
+ $result = update_data($query);
+ if ($result != false) {
+ // Update succeeded, continue
+ $entity = get_entity($guid);
+ if (elgg_trigger_event('update', $entity->type, $entity)) {
+ return $guid;
+ } else {
+ $entity->delete();
+ }
+ }
+ } else {
+ // Update failed, attempt an insert.
+ $query = "INSERT into {$CONFIG->dbprefix}groups_entity"
+ . " (guid, name, description) values ($guid, '$name', '$description')";
+
+ $result = insert_data($query);
+ if ($result !== false) {
+ $entity = get_entity($guid);
+ if (elgg_trigger_event('create', $entity->type, $entity)) {
+ return $guid;
+ } else {
+ $entity->delete();
+ }
+ }
+ }
+ }
+
+ return false;
+}
+
+/**
+ * Add an object to the given group.
+ *
+ * @param int $group_guid The group to add the object to.
+ * @param int $object_guid The guid of the elgg object (must be ElggObject or a child thereof)
+ *
+ * @return bool
+ * @throws InvalidClassException
+ */
+function add_object_to_group($group_guid, $object_guid) {
+ $group_guid = (int)$group_guid;
+ $object_guid = (int)$object_guid;
+
+ $group = get_entity($group_guid);
+ $object = get_entity($object_guid);
+
+ if ((!$group) || (!$object)) {
+ return false;
+ }
+
+ if (!($group instanceof ElggGroup)) {
+ $msg = elgg_echo('InvalidClassException:NotValidElggStar', array($group_guid, 'ElggGroup'));
+ throw new InvalidClassException($msg);
+ }
+
+ if (!($object instanceof ElggObject)) {
+ $msg = elgg_echo('InvalidClassException:NotValidElggStar', array($object_guid, 'ElggObject'));
+ throw new InvalidClassException($msg);
+ }
+
+ $object->container_guid = $group_guid;
+ return $object->save();
+}
+
+/**
+ * Remove an object from the given group.
+ *
+ * @param int $group_guid The group to remove the object from
+ * @param int $object_guid The object to remove
+ *
+ * @return bool
+ * @throws InvalidClassException
+ */
+function remove_object_from_group($group_guid, $object_guid) {
+ $group_guid = (int)$group_guid;
+ $object_guid = (int)$object_guid;
+
+ $group = get_entity($group_guid);
+ $object = get_entity($object_guid);
+
+ if ((!$group) || (!$object)) {
+ return false;
+ }
+
+ if (!($group instanceof ElggGroup)) {
+ $msg = elgg_echo('InvalidClassException:NotValidElggStar', array($group_guid, 'ElggGroup'));
+ throw new InvalidClassException($msg);
+ }
+
+ if (!($object instanceof ElggObject)) {
+ $msg = elgg_echo('InvalidClassException:NotValidElggStar', array($object_guid, 'ElggObject'));
+ throw new InvalidClassException($msg);
+ }
+
+ $object->container_guid = $object->owner_guid;
+ return $object->save();
+}
+
+/**
+ * Return a list of this group's members.
+ *
+ * @param int $group_guid The ID of the container/group.
+ * @param int $limit The limit
+ * @param int $offset The offset
+ * @param int $site_guid The site
+ * @param bool $count Return the users (false) or the count of them (true)
+ *
+ * @return mixed
+ */
+function get_group_members($group_guid, $limit = 10, $offset = 0, $site_guid = 0, $count = false) {
+
+ // in 1.7 0 means "not set." rewrite to make sense.
+ if (!$site_guid) {
+ $site_guid = ELGG_ENTITIES_ANY_VALUE;
+ }
+
+ return elgg_get_entities_from_relationship(array(
+ 'relationship' => 'member',
+ 'relationship_guid' => $group_guid,
+ 'inverse_relationship' => TRUE,
+ 'type' => 'user',
+ 'limit' => $limit,
+ 'offset' => $offset,
+ 'count' => $count,
+ 'site_guid' => $site_guid
+ ));
+}
+
+/**
+ * Return whether a given user is a member of the group or not.
+ *
+ * @param int $group_guid The group ID
+ * @param int $user_guid The user guid
+ *
+ * @return bool
+ */
+function is_group_member($group_guid, $user_guid) {
+ $object = check_entity_relationship($user_guid, 'member', $group_guid);
+ if ($object) {
+ return true;
+ } else {
+ return false;
+ }
+}
+
+/**
+ * Join a user to a group.
+ *
+ * @param int $group_guid The group GUID.
+ * @param int $user_guid The user GUID.
+ *
+ * @return bool
+ */
+function join_group($group_guid, $user_guid) {
+ $result = add_entity_relationship($user_guid, 'member', $group_guid);
+
+ if ($result) {
+ $params = array('group' => get_entity($group_guid), 'user' => get_entity($user_guid));
+ elgg_trigger_event('join', 'group', $params);
+ }
+
+ return $result;
+}
+
+/**
+ * Remove a user from a group.
+ *
+ * @param int $group_guid The group.
+ * @param int $user_guid The user.
+ *
+ * @return bool
+ */
+function leave_group($group_guid, $user_guid) {
+ // event needs to be triggered while user is still member of group to have access to group acl
+ $params = array('group' => get_entity($group_guid), 'user' => get_entity($user_guid));
+
+ elgg_trigger_event('leave', 'group', $params);
+ $result = remove_entity_relationship($user_guid, 'member', $group_guid);
+ return $result;
+}
+
+/**
+ * Return all groups a user is a member of.
+ *
+ * @param int $user_guid GUID of user
+ *
+ * @return array|false
+ */
+function get_users_membership($user_guid) {
+ $options = array(
+ 'type' => 'group',
+ 'relationship' => 'member',
+ 'relationship_guid' => $user_guid,
+ 'inverse_relationship' => false,
+ 'limit' => false,
+ );
+ return elgg_get_entities_from_relationship($options);
+}
+
+/**
+ * May the current user access item(s) on this page? If the page owner is a group,
+ * membership, visibility, and logged in status are taken into account.
+ *
+ * @param boolean $forward If set to true (default), will forward the page;
+ * if set to false, will return true or false.
+ *
+ * @return bool If $forward is set to false.
+ */
+function group_gatekeeper($forward = true) {
+
+ $page_owner_guid = elgg_get_page_owner_guid();
+ if (!$page_owner_guid) {
+ return true;
+ }
+ $visibility = ElggGroupItemVisibility::factory($page_owner_guid);
+
+ if (!$visibility->shouldHideItems) {
+ return true;
+ }
+ if ($forward) {
+ // only forward to group if user can see it
+ $group = get_entity($page_owner_guid);
+ $forward_url = $group ? $group->getURL() : '';
+
+ if (!elgg_is_logged_in()) {
+ $_SESSION['last_forward_from'] = current_page_url();
+ $forward_reason = 'login';
+ } else {
+ $forward_reason = 'member';
+ }
+
+ register_error(elgg_echo($visibility->reasonHidden));
+ forward($forward_url, $forward_reason);
+ }
+
+ return false;
+}
+
+/**
+ * Adds a group tool option
+ *
+ * @see remove_group_tool_option().
+ *
+ * @param string $name Name of the group tool option
+ * @param string $label Used for the group edit form
+ * @param bool $default_on True if this option should be active by default
+ *
+ * @return void
+ * @since 1.5.0
+ */
+function add_group_tool_option($name, $label, $default_on = true) {
+ global $CONFIG;
+
+ if (!isset($CONFIG->group_tool_options)) {
+ $CONFIG->group_tool_options = array();
+ }
+
+ $group_tool_option = new stdClass;
+
+ $group_tool_option->name = $name;
+ $group_tool_option->label = $label;
+ $group_tool_option->default_on = $default_on;
+
+ $CONFIG->group_tool_options[] = $group_tool_option;
+}
+
+/**
+ * Removes a group tool option based on name
+ *
+ * @see add_group_tool_option()
+ *
+ * @param string $name Name of the group tool option
+ *
+ * @return void
+ * @since 1.7.5
+ */
+function remove_group_tool_option($name) {
+ global $CONFIG;
+
+ if (!isset($CONFIG->group_tool_options)) {
+ return;
+ }
+
+ foreach ($CONFIG->group_tool_options as $i => $option) {
+ if ($option->name == $name) {
+ unset($CONFIG->group_tool_options[$i]);
+ }
+ }
+}
diff --git a/engine/lib/input.php b/engine/lib/input.php
index 80329462e..80b0b8766 100644
--- a/engine/lib/input.php
+++ b/engine/lib/input.php
@@ -1,480 +1,520 @@
-<?php
- /**
- * Parameter input functions.
- * This file contains functions for getting input from get/post variables.
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd <info@elgg.com>
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
-
- /**
- * Get some input from variables passed on the GET or POST line.
- *
- * @param $variable string The variable we want to return.
- * @param $default mixed A default value for the variable if it is not found.
- * @param $filter_result If true then the result is filtered for bad tags.
- */
- function get_input($variable, $default = "", $filter_result = true)
- {
-
- global $CONFIG;
-
- if (isset($CONFIG->input[$variable]))
- return $CONFIG->input[$variable];
-
- if (isset($_REQUEST[$variable])) {
-
- if (is_array($_REQUEST[$variable])) {
- $var = $_REQUEST[$variable];
+<?php
+/**
+ * Parameter input functions.
+ * This file contains functions for getting input from get/post variables.
+ *
+ * @package Elgg.Core
+ * @subpackage Input
+ */
+
+/**
+ * Get some input from variables passed submitted through GET or POST.
+ *
+ * If using any data obtained from get_input() in a web page, please be aware that
+ * it is a possible vector for a reflected XSS attack. If you are expecting an
+ * integer, cast it to an int. If it is a string, escape quotes.
+ *
+ * Note: this function does not handle nested arrays (ex: form input of param[m][n])
+ * because of the filtering done in htmlawed from the filter_tags call.
+ * @todo Is this ^ still true?
+ *
+ * @param string $variable The variable name we want.
+ * @param mixed $default A default value for the variable if it is not found.
+ * @param bool $filter_result If true, then the result is filtered for bad tags.
+ *
+ * @return mixed
+ */
+function get_input($variable, $default = NULL, $filter_result = TRUE) {
+
+ global $CONFIG;
+
+ $result = $default;
+
+ elgg_push_context('input');
+
+ if (isset($CONFIG->input[$variable])) {
+ $result = $CONFIG->input[$variable];
+
+ if ($filter_result) {
+ $result = filter_tags($result);
+ }
+ } elseif (isset($_REQUEST[$variable])) {
+ if (is_array($_REQUEST[$variable])) {
+ $result = $_REQUEST[$variable];
+ } else {
+ $result = trim($_REQUEST[$variable]);
+ }
+
+ if ($filter_result) {
+ $result = filter_tags($result);
+ }
+ }
+
+ elgg_pop_context();
+
+ return $result;
+}
+
+/**
+ * Sets an input value that may later be retrieved by get_input
+ *
+ * Note: this function does not handle nested arrays (ex: form input of param[m][n])
+ *
+ * @param string $variable The name of the variable
+ * @param string|string[] $value The value of the variable
+ *
+ * @return void
+ */
+function set_input($variable, $value) {
+ global $CONFIG;
+ if (!isset($CONFIG->input)) {
+ $CONFIG->input = array();
+ }
+
+ if (is_array($value)) {
+ array_walk_recursive($value, create_function('&$v, $k', '$v = trim($v);'));
+ $CONFIG->input[trim($variable)] = $value;
+ } else {
+ $CONFIG->input[trim($variable)] = trim($value);
+ }
+}
+
+/**
+ * Filter tags from a given string based on registered hooks.
+ *
+ * @param mixed $var Anything that does not include an object (strings, ints, arrays)
+ * This includes multi-dimensional arrays.
+ *
+ * @return mixed The filtered result - everything will be strings
+ */
+function filter_tags($var) {
+ return elgg_trigger_plugin_hook('validate', 'input', null, $var);
+}
+
+/**
+ * Validates an email address.
+ *
+ * @param string $address Email address.
+ *
+ * @return bool
+ */
+function is_email_address($address) {
+ return filter_var($address, FILTER_VALIDATE_EMAIL) === $address;
+}
+
+/**
+ * Load all the REQUEST variables into the sticky form cache
+ *
+ * Call this from an action when you want all your submitted variables
+ * available if the submission fails validation and is sent back to the form
+ *
+ * @param string $form_name Name of the sticky form
+ *
+ * @return void
+ * @link http://docs.elgg.org/Tutorials/UI/StickyForms
+ * @since 1.8.0
+ */
+function elgg_make_sticky_form($form_name) {
+
+ elgg_clear_sticky_form($form_name);
+
+ if (!isset($_SESSION['sticky_forms'])) {
+ $_SESSION['sticky_forms'] = array();
+ }
+ $_SESSION['sticky_forms'][$form_name] = array();
+
+ foreach ($_REQUEST as $key => $var) {
+ // will go through XSS filtering on the get function
+ $_SESSION['sticky_forms'][$form_name][$key] = $var;
+ }
+}
+
+/**
+ * Clear the sticky form cache
+ *
+ * Call this if validation is successful in the action handler or
+ * when they sticky values have been used to repopulate the form
+ * after a validation error.
+ *
+ * @param string $form_name Form namespace
+ *
+ * @return void
+ * @link http://docs.elgg.org/Tutorials/UI/StickyForms
+ * @since 1.8.0
+ */
+function elgg_clear_sticky_form($form_name) {
+ unset($_SESSION['sticky_forms'][$form_name]);
+}
+
+/**
+ * Has this form been made sticky?
+ *
+ * @param string $form_name Form namespace
+ *
+ * @return boolean
+ * @link http://docs.elgg.org/Tutorials/UI/StickyForms
+ * @since 1.8.0
+ */
+function elgg_is_sticky_form($form_name) {
+ return isset($_SESSION['sticky_forms'][$form_name]);
+}
+
+/**
+ * Get a specific sticky variable
+ *
+ * @param string $form_name The name of the form
+ * @param string $variable The name of the variable
+ * @param mixed $default Default value if the variable does not exist in sticky cache
+ * @param boolean $filter_result Filter for bad input if true
+ *
+ * @return mixed
+ *
+ * @todo should this filter the default value?
+ * @link http://docs.elgg.org/Tutorials/UI/StickyForms
+ * @since 1.8.0
+ */
+function elgg_get_sticky_value($form_name, $variable = '', $default = NULL, $filter_result = true) {
+ if (isset($_SESSION['sticky_forms'][$form_name][$variable])) {
+ $value = $_SESSION['sticky_forms'][$form_name][$variable];
+ if ($filter_result) {
+ // XSS filter result
+ $value = filter_tags($value);
+ }
+ return $value;
+ }
+ return $default;
+}
+
+/**
+ * Get all the values in a sticky form in an array
+ *
+ * @param string $form_name The name of the form
+ * @param bool $filter_result Filter for bad input if true
+ *
+ * @return array
+ * @since 1.8.0
+ */
+function elgg_get_sticky_values($form_name, $filter_result = true) {
+ if (!isset($_SESSION['sticky_forms'][$form_name])) {
+ return array();
+ }
+
+ $values = $_SESSION['sticky_forms'][$form_name];
+ if ($filter_result) {
+ foreach ($values as $key => $value) {
+ // XSS filter result
+ $values[$key] = filter_tags($value);
+ }
+ }
+ return $values;
+}
+
+/**
+ * Clear a specific sticky variable
+ *
+ * @param string $form_name The name of the form
+ * @param string $variable The name of the variable to clear
+ *
+ * @return void
+ * @link http://docs.elgg.org/Tutorials/UI/StickyForms
+ * @since 1.8.0
+ */
+function elgg_clear_sticky_value($form_name, $variable) {
+ unset($_SESSION['sticky_forms'][$form_name][$variable]);
+}
+
+/**
+ * Page handler for autocomplete endpoint.
+ *
+ * @todo split this into functions/objects, this is way too big
+ *
+ * /livesearch?q=<query>
+ *
+ * Other options include:
+ * match_on string all or array(groups|users|friends)
+ * match_owner int 0/1
+ * limit int default is 10
+ *
+ * @param array $page
+ * @return string JSON string is returned and then exit
+ * @access private
+ */
+function input_livesearch_page_handler($page) {
+ global $CONFIG;
+
+ // only return results to logged in users.
+ if (!$user = elgg_get_logged_in_user_entity()) {
+ exit;
+ }
+
+ if (!$q = get_input('term', get_input('q'))) {
+ exit;
+ }
+
+ $q = sanitise_string($q);
+
+ // replace mysql vars with escaped strings
+ $q = str_replace(array('_', '%'), array('\_', '\%'), $q);
+
+ $match_on = get_input('match_on', 'all');
+
+ if (!is_array($match_on)) {
+ $match_on = array($match_on);
+ }
+
+ // all = users and groups
+ if (in_array('all', $match_on)) {
+ $match_on = array('users', 'groups');
+ }
+
+ if (get_input('match_owner', false)) {
+ $owner_where = 'AND e.owner_guid = ' . $user->getGUID();
+ } else {
+ $owner_where = '';
+ }
+
+ $limit = sanitise_int(get_input('limit', 10));
+
+ // grab a list of entities and send them in json.
+ $results = array();
+ foreach ($match_on as $match_type) {
+ switch ($match_type) {
+ case 'users':
+ $query = "SELECT * FROM {$CONFIG->dbprefix}users_entity as ue, {$CONFIG->dbprefix}entities as e
+ WHERE e.guid = ue.guid
+ AND e.enabled = 'yes'
+ AND ue.banned = 'no'
+ AND (ue.name LIKE '$q%' OR ue.name LIKE '% $q%' OR ue.username LIKE '$q%')
+ LIMIT $limit
+ ";
+
+ if ($entities = get_data($query)) {
+ foreach ($entities as $entity) {
+ // @todo use elgg_get_entities (don't query in a loop!)
+ $entity = get_entity($entity->guid);
+ /* @var ElggUser $entity */
+ if (!$entity) {
+ continue;
+ }
+
+ if (in_array('groups', $match_on)) {
+ $value = $entity->guid;
+ } else {
+ $value = $entity->username;
+ }
+
+ $output = elgg_view_list_item($entity, array(
+ 'use_hover' => false,
+ 'class' => 'elgg-autocomplete-item',
+ ));
+
+ $icon = elgg_view_entity_icon($entity, 'tiny', array(
+ 'use_hover' => false,
+ ));
+
+ $result = array(
+ 'type' => 'user',
+ 'name' => $entity->name,
+ 'desc' => $entity->username,
+ 'guid' => $entity->guid,
+ 'label' => $output,
+ 'value' => $value,
+ 'icon' => $icon,
+ 'url' => $entity->getURL(),
+ );
+ $results[$entity->name . rand(1, 100)] = $result;
+ }
+ }
+ break;
+
+ case 'groups':
+ // don't return results if groups aren't enabled.
+ if (!elgg_is_active_plugin('groups')) {
+ continue;
+ }
+ $query = "SELECT * FROM {$CONFIG->dbprefix}groups_entity as ge, {$CONFIG->dbprefix}entities as e
+ WHERE e.guid = ge.guid
+ AND e.enabled = 'yes'
+ $owner_where
+ AND (ge.name LIKE '$q%' OR ge.name LIKE '% $q%' OR ge.description LIKE '% $q%')
+ LIMIT $limit
+ ";
+ if ($entities = get_data($query)) {
+ foreach ($entities as $entity) {
+ // @todo use elgg_get_entities (don't query in a loop!)
+ $entity = get_entity($entity->guid);
+ /* @var ElggGroup $entity */
+ if (!$entity) {
+ continue;
+ }
+
+ $output = elgg_view_list_item($entity, array(
+ 'use_hover' => false,
+ 'class' => 'elgg-autocomplete-item',
+ ));
+
+ $icon = elgg_view_entity_icon($entity, 'tiny', array(
+ 'use_hover' => false,
+ ));
+
+ $result = array(
+ 'type' => 'group',
+ 'name' => $entity->name,
+ 'desc' => strip_tags($entity->description),
+ 'guid' => $entity->guid,
+ 'label' => $output,
+ 'value' => $entity->guid,
+ 'icon' => $icon,
+ 'url' => $entity->getURL(),
+ );
+
+ $results[$entity->name . rand(1, 100)] = $result;
+ }
+ }
+ break;
+
+ case 'friends':
+ $query = "SELECT * FROM
+ {$CONFIG->dbprefix}users_entity as ue,
+ {$CONFIG->dbprefix}entity_relationships as er,
+ {$CONFIG->dbprefix}entities as e
+ WHERE er.relationship = 'friend'
+ AND er.guid_one = {$user->getGUID()}
+ AND er.guid_two = ue.guid
+ AND e.guid = ue.guid
+ AND e.enabled = 'yes'
+ AND ue.banned = 'no'
+ AND (ue.name LIKE '$q%' OR ue.name LIKE '% $q%' OR ue.username LIKE '$q%')
+ LIMIT $limit
+ ";
+
+ if ($entities = get_data($query)) {
+ foreach ($entities as $entity) {
+ // @todo use elgg_get_entities (don't query in a loop!)
+ $entity = get_entity($entity->guid);
+ /* @var ElggUser $entity */
+ if (!$entity) {
+ continue;
+ }
+
+ $output = elgg_view_list_item($entity, array(
+ 'use_hover' => false,
+ 'class' => 'elgg-autocomplete-item',
+ ));
+
+ $icon = elgg_view_entity_icon($entity, 'tiny', array(
+ 'use_hover' => false,
+ ));
+
+ $result = array(
+ 'type' => 'user',
+ 'name' => $entity->name,
+ 'desc' => $entity->username,
+ 'guid' => $entity->guid,
+ 'label' => $output,
+ 'value' => $entity->username,
+ 'icon' => $icon,
+ 'url' => $entity->getURL(),
+ );
+ $results[$entity->name . rand(1, 100)] = $result;
+ }
+ }
+ break;
+
+ default:
+ header("HTTP/1.0 400 Bad Request", true);
+ echo "livesearch: unknown match_on of $match_type";
+ exit;
+ break;
+ }
+ }
+
+ ksort($results);
+ header("Content-Type: application/json");
+ echo json_encode(array_values($results));
+ exit;
+}
+
+/**
+ * Register input functions and sanitize input
+ *
+ * @return void
+ * @access private
+ */
+function input_init() {
+ // register an endpoint for live search / autocomplete.
+ elgg_register_page_handler('livesearch', 'input_livesearch_page_handler');
+
+ if (ini_get_bool('magic_quotes_gpc')) {
+
+ /**
+ * do keys as well, cos array_map ignores them
+ *
+ * @param array $array Array of values
+ *
+ * @return array Sanitized array
+ */
+ function stripslashes_arraykeys($array) {
+ if (is_array($array)) {
+ $array2 = array();
+ foreach ($array as $key => $data) {
+ if ($key != stripslashes($key)) {
+ $array2[stripslashes($key)] = $data;
+ } else {
+ $array2[$key] = $data;
+ }
+ }
+ return $array2;
+ } else {
+ return $array;
+ }
+ }
+
+ /**
+ * Strip slashes on everything
+ *
+ * @param mixed $value The value to remove slashes from
+ *
+ * @return mixed
+ */
+ function stripslashes_deep($value) {
+ if (is_array($value)) {
+ $value = stripslashes_arraykeys($value);
+ $value = array_map('stripslashes_deep', $value);
} else {
- $var = trim($_REQUEST[$variable]);
- }
-
- if ($filter_result)
- {
-
- global $CONFIG;
- $var = filter_tags($var, $CONFIG->allowedtags, $CONFIG->allowedprotocols);
- }
-
- return $var;
-
- }
-
- return $default;
-
- }
-
- /**
- * Sets an input value that may later be retrieved by get_input
- *
- * @param string $variable The name of the variable
- * @param string $value The value of the variable
- */
- function set_input($variable, $value) {
-
- global $CONFIG;
- if (!isset($CONFIG->input))
- $CONFIG->input = array();
- $CONFIG->input[trim($variable)] = trim($value);
-
- }
-
- /**
- * Filter tags from a given string
- * @param $var
- * @return mixed The filtered result
- */
- function filter_tags($var, $allowedtags, $allowedprotocols)
- {
- $return = false;
-
- if (@include_once(dirname(dirname(dirname(__FILE__)))) . "/vendors/kses/kses.php") {
- if (!is_array($var)) {
- $return = "";
- $return = kses($var, $allowedtags, $allowedprotocols);
- } else {
- $return = array();
-
- foreach($var as $key => $el) {
- $return[$key] = kses($el, $allowedtags, $allowedprotocols);
- }
- }
- }
-
- return $return;
+ $value = stripslashes($value);
+ }
+ return $value;
+ }
+
+ $_POST = stripslashes_arraykeys($_POST);
+ $_GET = stripslashes_arraykeys($_GET);
+ $_COOKIE = stripslashes_arraykeys($_COOKIE);
+ $_REQUEST = stripslashes_arraykeys($_REQUEST);
+
+ $_POST = array_map('stripslashes_deep', $_POST);
+ $_GET = array_map('stripslashes_deep', $_GET);
+ $_COOKIE = array_map('stripslashes_deep', $_COOKIE);
+ $_REQUEST = array_map('stripslashes_deep', $_REQUEST);
+ if (!empty($_SERVER['REQUEST_URI'])) {
+ $_SERVER['REQUEST_URI'] = stripslashes($_SERVER['REQUEST_URI']);
+ }
+ if (!empty($_SERVER['QUERY_STRING'])) {
+ $_SERVER['QUERY_STRING'] = stripslashes($_SERVER['QUERY_STRING']);
+ }
+ if (!empty($_SERVER['HTTP_REFERER'])) {
+ $_SERVER['HTTP_REFERER'] = stripslashes($_SERVER['HTTP_REFERER']);
+ }
+ if (!empty($_SERVER['PATH_INFO'])) {
+ $_SERVER['PATH_INFO'] = stripslashes($_SERVER['PATH_INFO']);
+ }
+ if (!empty($_SERVER['PHP_SELF'])) {
+ $_SERVER['PHP_SELF'] = stripslashes($_SERVER['PHP_SELF']);
+ }
+ if (!empty($_SERVER['PATH_TRANSLATED'])) {
+ $_SERVER['PATH_TRANSLATED'] = stripslashes($_SERVER['PATH_TRANSLATED']);
+ }
}
-
- /**
- * Sanitise file paths for input, ensuring that they begin and end with slashes etc.
- *
- * @param string $path The path
- * @return string
- */
- function sanitise_filepath($path)
- {
- // Convert to correct UNIX paths
- $path = str_replace('\\', '/', $path);
-
- // Sort trailing slash
- $path = trim($path);
- $path = rtrim($path, " /");
- $path = $path . "/";
-
- return $path;
- }
-
- /**
- * Takes a string and turns any URLs into formatted links
- *
- * @param string $text The input string
- * @return string The output stirng with formatted links
- **/
-
- function parse_urls($text) {
-
- if (preg_match_all('/(?<!=["\'])((ht|f)tps?:\/\/[^\s\r\n\t<>"\'\!\(\)]+)/ie', $text, $urls)) {
-
- foreach (array_unique($urls[1]) AS $url){
- $urltext = str_replace('/', '/<wbr />', $url);
- $text = str_replace($url, '<a href="'. $url .'" style="text-decoration:underline;">'. $urltext .'</a>', $text);
- }
- }
-
- return $text;
- }
-
- function autop($pee, $br = 1) {
- $pee = $pee . "\n"; // just to make things a little easier, pad the end
- $pee = preg_replace('|<br />\s*<br />|', "\n\n", $pee);
- // Space things out a little
- $allblocks = '(?:table|thead|tfoot|caption|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|select|form|map|area|blockquote|address|math|style|input|p|h[1-6]|hr)';
- $pee = preg_replace('!(<' . $allblocks . '[^>]*>)!', "\n$1", $pee);
- $pee = preg_replace('!(</' . $allblocks . '>)!', "$1\n\n", $pee);
- $pee = str_replace(array("\r\n", "\r"), "\n", $pee); // cross-platform newlines
- if ( strpos($pee, '<object') !== false ) {
- $pee = preg_replace('|\s*<param([^>]*)>\s*|', "<param$1>", $pee); // no pee inside object/embed
- $pee = preg_replace('|\s*</embed>\s*|', '</embed>', $pee);
- }
- $pee = preg_replace("/\n\n+/", "\n\n", $pee); // take care of duplicates
- $pee = preg_replace('/\n?(.+?)(?:\n\s*\n|\z)/s', "<p>$1</p>\n", $pee); // make paragraphs, including one at the end
- $pee = preg_replace('|<p>\s*?</p>|', '', $pee); // under certain strange conditions it could create a P of entirely whitespace
- $pee = preg_replace('!<p>([^<]+)\s*?(</(?:div|address|form)[^>]*>)!', "<p>$1</p>$2", $pee);
- $pee = preg_replace( '|<p>|', "$1<p>", $pee );
- $pee = preg_replace('!<p>\s*(</?' . $allblocks . '[^>]*>)\s*</p>!', "$1", $pee); // don't pee all over a tag
- $pee = preg_replace("|<p>(<li.+?)</p>|", "$1", $pee); // problem with nested lists
- $pee = preg_replace('|<p><blockquote([^>]*)>|i', "<blockquote$1><p>", $pee);
- $pee = str_replace('</blockquote></p>', '</p></blockquote>', $pee);
- $pee = preg_replace('!<p>\s*(</?' . $allblocks . '[^>]*>)!', "$1", $pee);
- $pee = preg_replace('!(</?' . $allblocks . '[^>]*>)\s*</p>!', "$1", $pee);
- if ($br) {
- $pee = preg_replace_callback('/<(script|style).*?<\/\\1>/s', create_function('$matches', 'return str_replace("\n", "<WPPreserveNewline />", $matches[0]);'), $pee);
- $pee = preg_replace('|(?<!<br />)\s*\n|', "<br />\n", $pee); // optionally make line breaks
- $pee = str_replace('<WPPreserveNewline />', "\n", $pee);
- }
- $pee = preg_replace('!(</?' . $allblocks . '[^>]*>)\s*<br />!', "$1", $pee);
- $pee = preg_replace('!<br />(\s*</?(?:p|li|div|dl|dd|dt|th|pre|td|ul|ol)[^>]*>)!', '$1', $pee);
- if (strpos($pee, '<pre') !== false)
- $pee = preg_replace_callback('!(<pre.*?>)(.*?)</pre>!is', 'clean_pre', $pee );
- $pee = preg_replace( "|\n</p>$|", '</p>', $pee );
-
- return $pee;
- }
-
- function input_init() {
-
- if (ini_get_bool('magic_quotes_gpc') ) {
-
- //do keys as well, cos array_map ignores them
- function stripslashes_arraykeys($array) {
- if (is_array($array)) {
- $array2 = array();
- foreach ($array as $key => $data) {
- if ($key != stripslashes($key)) {
- $array2[stripslashes($key)] = $data;
- } else {
- $array2[$key] = $data;
- }
- }
- return $array2;
- } else {
- return $array;
- }
- }
-
- function stripslashes_deep($value) {
- if (is_array($value)) {
- $value = stripslashes_arraykeys($value);
- $value = array_map('stripslashes_deep', $value);
- } else {
- $value = stripslashes($value);
- }
- return $value;
- }
-
- $_POST = stripslashes_arraykeys($_POST);
- $_GET = stripslashes_arraykeys($_GET);
- $_COOKIE = stripslashes_arraykeys($_COOKIE);
- $_REQUEST = stripslashes_arraykeys($_REQUEST);
-
- $_POST = array_map('stripslashes_deep', $_POST);
- $_GET = array_map('stripslashes_deep', $_GET);
- $_COOKIE = array_map('stripslashes_deep', $_COOKIE);
- $_REQUEST = array_map('stripslashes_deep', $_REQUEST);
- if (!empty($_SERVER['REQUEST_URI'])) {
- $_SERVER['REQUEST_URI'] = stripslashes($_SERVER['REQUEST_URI']);
- }
- if (!empty($_SERVER['QUERY_STRING'])) {
- $_SERVER['QUERY_STRING'] = stripslashes($_SERVER['QUERY_STRING']);
- }
- if (!empty($_SERVER['HTTP_REFERER'])) {
- $_SERVER['HTTP_REFERER'] = stripslashes($_SERVER['HTTP_REFERER']);
- }
- if (!empty($_SERVER['PATH_INFO'])) {
- $_SERVER['PATH_INFO'] = stripslashes($_SERVER['PATH_INFO']);
- }
- if (!empty($_SERVER['PHP_SELF'])) {
- $_SERVER['PHP_SELF'] = stripslashes($_SERVER['PHP_SELF']);
- }
- if (!empty($_SERVER['PATH_TRANSLATED'])) {
- $_SERVER['PATH_TRANSLATED'] = stripslashes($_SERVER['PATH_TRANSLATED']);
- }
-
- }
-
-
- global $CONFIG;
- $CONFIG->allowedtags = array(
- 'address' => array(),
- 'a' => array(
- 'class' => array (),
- 'href' => array (),
- 'id' => array (),
- 'title' => array (),
- 'rel' => array (),
- 'rev' => array (),
- 'name' => array (),
- 'target' => array()),
- 'abbr' => array(
- 'class' => array (),
- 'title' => array ()),
- 'acronym' => array(
- 'title' => array ()),
- 'b' => array(),
- 'big' => array(),
- 'blockquote' => array(
- 'id' => array (),
- 'cite' => array (),
- 'class' => array(),
- 'lang' => array(),
- 'xml:lang' => array()),
- 'br' => array (
- 'class' => array ()),
- 'button' => array(
- 'disabled' => array (),
- 'name' => array (),
- 'type' => array (),
- 'value' => array ()),
- 'caption' => array(
- 'align' => array (),
- 'class' => array ()),
- 'cite' => array (
- 'class' => array(),
- 'dir' => array(),
- 'lang' => array(),
- 'title' => array ()),
- 'code' => array (
- 'style' => array()),
- 'col' => array(
- 'align' => array (),
- 'char' => array (),
- 'charoff' => array (),
- 'span' => array (),
- 'dir' => array(),
- 'style' => array (),
- 'valign' => array (),
- 'width' => array ()),
- 'del' => array(
- 'datetime' => array ()),
- 'dd' => array(),
- 'div' => array(
- 'align' => array (),
- 'class' => array (),
- 'dir' => array (),
- 'lang' => array(),
- 'style' => array (),
- 'xml:lang' => array()),
- 'dl' => array(),
- 'dt' => array(),
- 'em' => array(),
- 'fieldset' => array(),
- 'font' => array(
- 'color' => array (),
- 'face' => array (),
- 'size' => array ()),
-// 'form' => array(
-// 'action' => array (),
-// 'accept' => array (),
-// 'accept-charset' => array (),
-// 'enctype' => array (),
-// 'method' => array (),
-// 'name' => array (),
-// 'target' => array ()),
- 'h1' => array(
- 'align' => array (),
- 'class' => array ()),
- 'h2' => array(
- 'align' => array (),
- 'class' => array ()),
- 'h3' => array(
- 'align' => array (),
- 'class' => array ()),
- 'h4' => array(
- 'align' => array (),
- 'class' => array ()),
- 'h5' => array(
- 'align' => array (),
- 'class' => array ()),
- 'h6' => array(
- 'align' => array (),
- 'class' => array ()),
- 'hr' => array(
- 'align' => array (),
- 'class' => array (),
- 'noshade' => array (),
- 'size' => array (),
- 'width' => array ()),
- 'i' => array(),
- 'img' => array(
- 'alt' => array (),
- 'align' => array (),
- 'border' => array (),
- 'class' => array (),
- 'height' => array (),
- 'hspace' => array (),
- 'longdesc' => array (),
- 'vspace' => array (),
- 'src' => array (),
- 'style' => array (),
- 'width' => array ()),
- 'ins' => array(
- 'datetime' => array (),
- 'cite' => array ()),
- 'kbd' => array(),
- 'label' => array(
- 'for' => array ()),
- 'legend' => array(
- 'align' => array ()),
- 'li' => array (
- 'align' => array (),
- 'class' => array ()),
- 'p' => array(
- 'class' => array (),
- 'align' => array (),
- 'dir' => array(),
- 'lang' => array(),
- 'style' => array (),
- 'xml:lang' => array()),
- 'pre' => array(
- 'style' => array(),
- 'width' => array ()),
- 'q' => array(
- 'cite' => array ()),
- 's' => array(),
- 'span' => array (
- 'class' => array (),
- 'dir' => array (),
- 'align' => array (),
- 'lang' => array (),
- 'style' => array (),
- 'title' => array (),
- 'xml:lang' => array()),
- 'strike' => array(),
- 'strong' => array(),
- 'sub' => array(),
- 'sup' => array(),
- 'table' => array(
- 'align' => array (),
- 'bgcolor' => array (),
- 'border' => array (),
- 'cellpadding' => array (),
- 'cellspacing' => array (),
- 'class' => array (),
- 'dir' => array(),
- 'id' => array(),
- 'rules' => array (),
- 'style' => array (),
- 'summary' => array (),
- 'width' => array ()),
- 'tbody' => array(
- 'align' => array (),
- 'char' => array (),
- 'charoff' => array (),
- 'valign' => array ()),
- 'td' => array(
- 'abbr' => array (),
- 'align' => array (),
- 'axis' => array (),
- 'bgcolor' => array (),
- 'char' => array (),
- 'charoff' => array (),
- 'class' => array (),
- 'colspan' => array (),
- 'dir' => array(),
- 'headers' => array (),
- 'height' => array (),
- 'nowrap' => array (),
- 'rowspan' => array (),
- 'scope' => array (),
- 'style' => array (),
- 'valign' => array (),
- 'width' => array ()),
- 'textarea' => array(
- 'cols' => array (),
- 'rows' => array (),
- 'disabled' => array (),
- 'name' => array (),
- 'readonly' => array ()),
- 'tfoot' => array(
- 'align' => array (),
- 'char' => array (),
- 'class' => array (),
- 'charoff' => array (),
- 'valign' => array ()),
- 'th' => array(
- 'abbr' => array (),
- 'align' => array (),
- 'axis' => array (),
- 'bgcolor' => array (),
- 'char' => array (),
- 'charoff' => array (),
- 'class' => array (),
- 'colspan' => array (),
- 'headers' => array (),
- 'height' => array (),
- 'nowrap' => array (),
- 'rowspan' => array (),
- 'scope' => array (),
- 'valign' => array (),
- 'width' => array ()),
- 'thead' => array(
- 'align' => array (),
- 'char' => array (),
- 'charoff' => array (),
- 'class' => array (),
- 'valign' => array ()),
- 'title' => array(),
- 'tr' => array(
- 'align' => array (),
- 'bgcolor' => array (),
- 'char' => array (),
- 'charoff' => array (),
- 'class' => array (),
- 'style' => array (),
- 'valign' => array ()),
- 'tt' => array(),
- 'u' => array(),
- 'ul' => array (
- 'class' => array (),
- 'style' => array (),
- 'type' => array ()),
- 'ol' => array (
- 'class' => array (),
- 'start' => array (),
- 'style' => array (),
- 'type' => array ()),
- 'var' => array ());
-
- $CONFIG->allowedprotocols = array('http', 'https', 'ftp', 'news', 'mailto', 'rtsp', 'teamspeak', 'gopher', 'mms',
- 'color', 'callto', 'cursor', 'text-align', 'font-size', 'font-weight', 'font-style',
- 'border', 'margin', 'padding', 'float');
- }
-
- register_elgg_event_handler('init','system','input_init');
-
-
-?> \ No newline at end of file
+}
+
+elgg_register_event_handler('init', 'system', 'input_init');
diff --git a/engine/lib/install.php b/engine/lib/install.php
deleted file mode 100644
index 9709e95e2..000000000
--- a/engine/lib/install.php
+++ /dev/null
@@ -1,126 +0,0 @@
-<?php
-
- /**
- * Elgg installation
- * Various functions to assist with installing and upgrading the system
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
-
- /**
- * Check that the installed version of PHP meets the minimum requirements (currently 5.2 or greater).
- *
- * @return bool
- */
- function php_check_version()
- {
- /*
- if ( // TODO: Remove this when Redhat pulls its finger out
- (version_compare(phpversion(), '5.1.6', '>=')) &&
- (version_compare(phpversion(), '5.2.0', '<'))
- )
- register_error(elgg_echo('configurationwarning:phpversion'));
- */
-
- if (version_compare(phpversion(), '5.1.2', '>='))
- return true;
-
- return false;
- }
-
- /**
- * Validate the platform Elgg is being installed on.
- *
- * @throws ConfigurationException if the validation fails.
- * @return bool
- */
- function validate_platform()
- {
- // Get database version
- if (!db_check_version())
- throw new ConfigurationException(elgg_echo('ConfigurationException:BadDatabaseVersion'));
-
- // Now check PHP
- if (!php_check_version())
- throw new ConfigurationException(elgg_echo('ConfigurationException:BadPHPVersion'));
-
- // TODO: Consider checking for installed modules etc
-
- return true;
- }
-
- /**
- * Returns whether or not the database has been installed
- *
- * @return true|false Whether the database has been installed
- */
- function is_db_installed() {
-
- global $CONFIG;
-
- if (isset($CONFIG->db_installed)) {
- return $CONFIG->db_installed;
- }
-
- if ($dblink = get_db_link('read')) {
- mysql_query("select * from {$CONFIG->dbprefix}entities limit 1",$dblink);
- if (mysql_errno($dblink) > 0) return false;
- } else return false;
-
- $CONFIG->db_installed = true; // Set flag if db is installed (if false then we want to check every time)
-
- return true;
-
- }
-
- /**
- * Returns whether or not other settings have been set
- *
- * @return true|false Whether or not the rest of the installation has been followed through with
- */
- function is_installed() {
-
- global $CONFIG;
- return datalist_get('installed');
-
- }
-
- /**
- * Copy and create a new settings.php from settings.example.php, substituting the variables in
- * $vars where appropriate.
- *
- * $vars is an associate array of $key => $value, where $key is the variable text you wish to substitute (eg
- * CONFIG_DBNAME will replace {{CONFIG_DBNAME}} in the settings file.
- *
- * @param array $vars The array of vars
- * @param string $in_file Optional input file (if not settings.example.php)
- * @return string The file containing substitutions.
- */
- function create_settings(array $vars, $in_file="engine/settings.example.php")
- {
- $file = file_get_contents($in_file);
-
- if (!$file) return false;
-
- foreach ($vars as $k => $v)
- $file = str_replace("{{".$k."}}", $v, $file);
-
- return $file;
- }
-
- /**
- * Initialisation for installation functions
- *
- */
- function install_init() {
- register_action("systemsettings/install",true);
- }
-
- register_elgg_event_handler("boot","system","install_init");
-
-?> \ No newline at end of file
diff --git a/engine/lib/languages.php b/engine/lib/languages.php
index 7aacf5ac5..61ba91ddb 100644
--- a/engine/lib/languages.php
+++ b/engine/lib/languages.php
@@ -1,248 +1,354 @@
-<?php
-
- /**
- * Elgg language module
- * Functions to manage language and translations.
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
-
- /**
- * Add a translation.
- *
- * Translations are arrays in the Zend Translation array format, eg:
- *
- * $english = array('message1' => 'message1', 'message2' => 'message2');
- * $german = array('message1' => 'Nachricht1','message2' => 'Nachricht2');
- *
- * @param string $country_code Standard country code (eg 'en', 'nl', 'es')
- * @param array $language_array Formatted array of strings
- * @return true|false Depending on success
- */
-
- function add_translation($country_code, $language_array) {
-
- global $CONFIG;
- if (!isset($CONFIG->translations))
- $CONFIG->translations = array();
-
- $country_code = strtolower($country_code);
- $country_code = trim($country_code);
- if (is_array($language_array) && sizeof($language_array) > 0 && $country_code != "") {
-
- if (!isset($CONFIG->translations[$country_code])) {
- $CONFIG->translations[$country_code] = $language_array;
- } else {
- $CONFIG->translations[$country_code] = array_merge($CONFIG->translations[$country_code],$language_array);
- }
-
- return true;
-
- }
- return false;
-
+<?php
+/**
+ * Elgg language module
+ * Functions to manage language and translations.
+ *
+ * @package Elgg.Core
+ * @subpackage Languages
+ */
+
+/**
+ * Given a message key, returns an appropriately translated full-text string
+ *
+ * @param string $message_key The short message code
+ * @param array $args An array of arguments to pass through vsprintf().
+ * @param string $language Optionally, the standard language code
+ * (defaults to site/user default, then English)
+ *
+ * @return string Either the translated string, the English string,
+ * or the original language string.
+ */
+function elgg_echo($message_key, $args = array(), $language = "") {
+ global $CONFIG;
+
+ static $CURRENT_LANGUAGE;
+
+ // old param order is deprecated
+ if (!is_array($args)) {
+ elgg_deprecated_notice(
+ 'As of Elgg 1.8, the 2nd arg to elgg_echo() is an array of string replacements and the 3rd arg is the language.',
+ 1.8
+ );
+
+ $language = $args;
+ $args = array();
+ }
+
+ if (!isset($CONFIG->translations)) {
+ // this means we probably had an exception before translations were initialized
+ register_translations(dirname(dirname(dirname(__FILE__))) . "/languages/");
+ }
+
+ if (!$CURRENT_LANGUAGE) {
+ $CURRENT_LANGUAGE = get_language();
+ }
+ if (!$language) {
+ $language = $CURRENT_LANGUAGE;
+ }
+
+ if (isset($CONFIG->translations[$language][$message_key])) {
+ $string = $CONFIG->translations[$language][$message_key];
+ } else if (isset($CONFIG->translations["en"][$message_key])) {
+ $string = $CONFIG->translations["en"][$message_key];
+ $lang = $CONFIG->translations["en"][$language];
+ elgg_log(sprintf('Missing %s translation for "%s" language key', $lang, $message_key), 'NOTICE');
+ } else {
+ $string = $message_key;
+ elgg_log(sprintf('Missing English translation for "%s" language key', $message_key), 'NOTICE');
+ }
+
+ // only pass through if we have arguments to allow backward compatibility
+ // with manual sprintf() calls.
+ if ($args) {
+ $string = vsprintf($string, $args);
+ }
+
+ return $string;
+}
+
+/**
+ * Add a translation.
+ *
+ * Translations are arrays in the Zend Translation array format, eg:
+ *
+ * $english = array('message1' => 'message1', 'message2' => 'message2');
+ * $german = array('message1' => 'Nachricht1','message2' => 'Nachricht2');
+ *
+ * @param string $country_code Standard country code (eg 'en', 'nl', 'es')
+ * @param array $language_array Formatted array of strings
+ *
+ * @return bool Depending on success
+ */
+function add_translation($country_code, $language_array) {
+ global $CONFIG;
+ if (!isset($CONFIG->translations)) {
+ $CONFIG->translations = array();
+ }
+
+ $country_code = strtolower($country_code);
+ $country_code = trim($country_code);
+ if (is_array($language_array) && sizeof($language_array) > 0 && $country_code != "") {
+ if (!isset($CONFIG->translations[$country_code])) {
+ $CONFIG->translations[$country_code] = $language_array;
+ } else {
+ $CONFIG->translations[$country_code] = $language_array + $CONFIG->translations[$country_code];
}
-
- /**
- * Detect the current language being used by the current site or logged in user.
- *
- */
- function get_current_language()
- {
- global $CONFIG;
-
- $language = get_language();
-
- if (!$language)
- $language = 'en';
-
+ return true;
+ }
+ return false;
+}
+
+/**
+ * Detect the current language being used by the current site or logged in user.
+ *
+ * @return string The language code for the site/user or "en" if not set
+ */
+function get_current_language() {
+ $language = get_language();
+
+ if (!$language) {
+ $language = 'en';
+ }
+
+ return $language;
+}
+
+/**
+ * Gets the current language in use by the system or user.
+ *
+ * @return string The language code (eg "en") or false if not set
+ */
+function get_language() {
+ global $CONFIG;
+
+ $user = elgg_get_logged_in_user_entity();
+ $language = false;
+
+ if (($user) && ($user->language)) {
+ $language = $user->language;
+ }
+
+ if ((!$language) && (isset($CONFIG->language)) && ($CONFIG->language)) {
+ $language = $CONFIG->language;
+ }
+
+ if ($language) {
return $language;
- }
-
- /**
- * Gets the current language in use by the system or user.
- *
- * [Marcus Povey 20090216: Not sure why this func is necessary.]
- *
- * @return string The language code (eg "en")
- */
- function get_language() {
-
- global $CONFIG;
-
- $user = get_loggedin_user();
-
- if ((empty($language)) && ($user) && ($user->language))
- $language = $user->language;
-
- if ((empty($language)) && (isset($CONFIG->language)))
- $language = $CONFIG->language;
-
- if (!empty($language)) {
- return $language;
- }
-
- return false;
-
- }
-
- /**
- * Given a message shortcode, returns an appropriately translated full-text string
- *
- * @param string $message_key The short message code
- * @param string $language Optionally, the standard language code (defaults to the site default, then English)
- * @return string Either the translated string, or the original English string, or an empty string
- */
- function elgg_echo($message_key, $language = "") {
-
- global $CONFIG;
-
- $language = get_language();
-
- if (isset($CONFIG->translations[$language][$message_key])) {
- return $CONFIG->translations[$language][$message_key];
- } else if (isset($CONFIG->translations["en"][$message_key])) {
- return $CONFIG->translations["en"][$message_key];
- }
-
- return $message_key;
-
- }
-
- /**
- * When given a full path, finds translation files and loads them
- *
- * @param string $path Full path
- * @param bool $load_all If true all languages are loaded, if false only the current language + en are loaded
- */
- function register_translations($path, $load_all = false) {
- global $CONFIG;
-
- // Make a note of this path just incase we need to register this language later
- if(!isset($CONFIG->language_paths)) $CONFIG->language_paths = array();
- $CONFIG->language_paths[$path] = true;
-
- // Get the current language based on site defaults and user preference
- $current_language = get_current_language();
-
- if (isset($CONFIG->debug) && $CONFIG->debug == true) error_log("Translations loaded from : $path");
-
- if ($handle = opendir($path)) {
- while ($language = readdir($handle)) {
-
- if (
- ((in_array($language, array('en.php', $current_language . '.php'))) && (!is_dir($path . $language))) ||
- (($load_all) && (strpos($language, '.php')!==false) && (!is_dir($path . $language)))
- )
- include_once($path . $language);
-
- }
+ }
+
+ return false;
+}
+
+/**
+ * @access private
+ */
+function _elgg_load_translations() {
+ global $CONFIG;
+
+ if ($CONFIG->system_cache_enabled) {
+ $loaded = true;
+ $languages = array_unique(array('en', get_current_language()));
+ foreach ($languages as $language) {
+ $data = elgg_load_system_cache("$language.lang");
+ if ($data) {
+ add_translation($language, unserialize($data));
+ } else {
+ $loaded = false;
}
- else
- error_log("Missing translation path $path");
-
- }
-
- /**
- * Reload all translations from all registered paths.
- *
- * This is only called by functions which need to know all possible translations, namely the
- * statistic gathering ones.
- *
- * TODO: Better on demand loading based on language_paths array
- *
- * @return bool
- */
- function reload_all_translations()
- {
- global $CONFIG;
-
- static $LANG_RELOAD_ALL_RUN;
- if ($LANG_RELOAD_ALL_RUN) return null;
-
- foreach ($CONFIG->language_paths as $path => $dummy)
- register_translations($path, true);
-
- $LANG_RELOAD_ALL_RUN = true;
- }
-
- /**
- * Return an array of installed translations as an associative array "two letter code" => "native language name".
- */
- function get_installed_translations()
- {
- global $CONFIG;
-
- // Ensure that all possible translations are loaded
- reload_all_translations();
-
- $installed = array();
-
- foreach ($CONFIG->translations as $k => $v)
- {
- $installed[$k] = elgg_echo($k, $k);
-
- $completeness = get_language_completeness($k);
- if ((isadminloggedin()) && ($completeness<100) && ($k!='en'))
- $installed[$k] .= " (" . $completeness . "% " . elgg_echo('complete') . ")";
+ }
+
+ if ($loaded) {
+ $CONFIG->i18n_loaded_from_cache = true;
+ // this is here to force
+ $CONFIG->language_paths[dirname(dirname(dirname(__FILE__))) . "/languages/"] = true;
+ return;
+ }
+ }
+
+ // load core translations from languages directory
+ register_translations(dirname(dirname(dirname(__FILE__))) . "/languages/");
+}
+
+
+
+/**
+ * When given a full path, finds translation files and loads them
+ *
+ * @param string $path Full path
+ * @param bool $load_all If true all languages are loaded, if
+ * false only the current language + en are loaded
+ *
+ * @return bool success
+ */
+function register_translations($path, $load_all = false) {
+ global $CONFIG;
+
+ $path = sanitise_filepath($path);
+
+ // Make a note of this path just incase we need to register this language later
+ if (!isset($CONFIG->language_paths)) {
+ $CONFIG->language_paths = array();
+ }
+ $CONFIG->language_paths[$path] = true;
+
+ // Get the current language based on site defaults and user preference
+ $current_language = get_current_language();
+ elgg_log("Translations loaded from: $path");
+
+ // only load these files unless $load_all is true.
+ $load_language_files = array(
+ 'en.php',
+ "$current_language.php"
+ );
+
+ $load_language_files = array_unique($load_language_files);
+
+ $handle = opendir($path);
+ if (!$handle) {
+ elgg_log("Could not open language path: $path", 'ERROR');
+ return false;
+ }
+
+ $return = true;
+ while (false !== ($language = readdir($handle))) {
+ // ignore bad files
+ if (substr($language, 0, 1) == '.' || substr($language, -4) !== '.php') {
+ continue;
+ }
+
+ if (in_array($language, $load_language_files) || $load_all) {
+ if (!include_once($path . $language)) {
+ $return = false;
+ continue;
}
-
- return $installed;
}
-
- /**
- * Return the level of completeness for a given language code (compared to english)
- */
- function get_language_completeness($language)
- {
- global $CONFIG;
-
- // Ensure that all possible translations are loaded
- reload_all_translations();
-
- $language = sanitise_string($language);
-
- $en = count($CONFIG->translations['en']);
-
- $missing = get_missing_language_keys($language);
- if ($missing) $missing = count($missing); else $missing = 0;
-
- //$lang = count($CONFIG->translations[$language]);
- $lang = $en - $missing;
-
- return round(($lang / $en) * 100, 2);
+ }
+
+ return $return;
+}
+
+/**
+ * Reload all translations from all registered paths.
+ *
+ * This is only called by functions which need to know all possible translations.
+ *
+ * @todo Better on demand loading based on language_paths array
+ *
+ * @return void
+ */
+function reload_all_translations() {
+ global $CONFIG;
+
+ static $LANG_RELOAD_ALL_RUN;
+ if ($LANG_RELOAD_ALL_RUN) {
+ return;
+ }
+
+ if ($CONFIG->i18n_loaded_from_cache) {
+ $cache = elgg_get_system_cache();
+ $cache_dir = $cache->getVariable("cache_path");
+ $filenames = elgg_get_file_list($cache_dir, array(), array(), array(".lang"));
+ foreach ($filenames as $filename) {
+ if (preg_match('/([a-z]+)\.[^.]+$/', $filename, $matches)) {
+ $language = $matches[1];
+ $data = elgg_load_system_cache("$language.lang");
+ if ($data) {
+ add_translation($language, unserialize($data));
+ }
+ }
+ }
+ } else {
+ foreach ($CONFIG->language_paths as $path => $dummy) {
+ register_translations($path, true);
}
-
- /**
- * Return the translation keys missing from a given language, or those that are identical to the english version.
- */
- function get_missing_language_keys($language)
- {
- global $CONFIG;
-
- // Ensure that all possible translations are loaded
- reload_all_translations();
-
- $missing = array();
-
- foreach ($CONFIG->translations['en'] as $k => $v)
- {
- if ((!isset($CONFIG->translations[$language][$k]))
- || ($CONFIG->translations[$language][$k] == $CONFIG->translations['en'][$k]))
- $missing[] = $k;
+ }
+
+ $LANG_RELOAD_ALL_RUN = true;
+}
+
+/**
+ * Return an array of installed translations as an associative
+ * array "two letter code" => "native language name".
+ *
+ * @return array
+ */
+function get_installed_translations() {
+ global $CONFIG;
+
+ // Ensure that all possible translations are loaded
+ reload_all_translations();
+
+ $installed = array();
+
+ foreach ($CONFIG->translations as $k => $v) {
+ $installed[$k] = elgg_echo($k, array(), $k);
+ if (elgg_is_admin_logged_in()) {
+ $completeness = get_language_completeness($k);
+ if (($completeness < 100) && ($k != 'en')) {
+ $installed[$k] .= " (" . $completeness . "% " . elgg_echo('complete') . ")";
}
-
- if (count($missing))
- return $missing;
-
- return false;
}
-
- register_translations(dirname(dirname(dirname(__FILE__))) . "/languages/");
-
-?> \ No newline at end of file
+ }
+
+ return $installed;
+}
+
+/**
+ * Return the level of completeness for a given language code (compared to english)
+ *
+ * @param string $language Language
+ *
+ * @return int
+ */
+function get_language_completeness($language) {
+ global $CONFIG;
+
+ // Ensure that all possible translations are loaded
+ reload_all_translations();
+
+ $language = sanitise_string($language);
+
+ $en = count($CONFIG->translations['en']);
+
+ $missing = get_missing_language_keys($language);
+ if ($missing) {
+ $missing = count($missing);
+ } else {
+ $missing = 0;
+ }
+
+ //$lang = count($CONFIG->translations[$language]);
+ $lang = $en - $missing;
+
+ return round(($lang / $en) * 100, 2);
+}
+
+/**
+ * Return the translation keys missing from a given language,
+ * or those that are identical to the english version.
+ *
+ * @param string $language The language
+ *
+ * @return mixed
+ */
+function get_missing_language_keys($language) {
+ global $CONFIG;
+
+ // Ensure that all possible translations are loaded
+ reload_all_translations();
+
+ $missing = array();
+
+ foreach ($CONFIG->translations['en'] as $k => $v) {
+ if ((!isset($CONFIG->translations[$language][$k]))
+ || ($CONFIG->translations[$language][$k] == $CONFIG->translations['en'][$k])) {
+ $missing[] = $k;
+ }
+ }
+
+ if (count($missing)) {
+ return $missing;
+ }
+
+ return false;
+}
diff --git a/engine/lib/location.php b/engine/lib/location.php
index 482a241b4..1534c7d7b 100644
--- a/engine/lib/location.php
+++ b/engine/lib/location.php
@@ -1,275 +1,157 @@
<?php
+/**
+ * Elgg geo-location tagging library.
+ *
+ * @package Elgg.Core
+ * @subpackage Location
+ */
- /**
- * Elgg geo-location tagging library.
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
+/**
+ * Encode a location into a latitude and longitude, caching the result.
+ *
+ * Works by triggering the 'geocode' 'location' plugin
+ * hook, and requires a geocoding plugin to be installed.
+ *
+ * @param string $location The location, e.g. "London", or "24 Foobar Street, Gotham City"
+ * @return string|false
+ */
+function elgg_geocode_location($location) {
+ global $CONFIG;
- /**
- * Define an interface for geo-tagging entities.
- *
- */
- interface Locatable
- {
- /** Set a location text */
- public function setLocation($location);
-
- /**
- * Set latitude and longitude tags for a given entity.
- *
- * @param float $lat
- * @param float $long
- */
- public function setLatLong($lat, $long);
-
- /**
- * Get the contents of the ->geo:lat field.
- *
- */
- public function getLatitude();
-
- /**
- * Get the contents of the ->geo:lat field.
- *
- */
- public function getLongitude();
-
- /**
- * Get the ->location metadata.
- *
- */
- public function getLocation();
+ if (is_array($location)) {
+ return false;
}
- /**
- * Encode a location into a latitude and longitude, caching the result.
- *
- * Works by triggering the 'geocode' 'location' plugin hook, and requires a geocoding module to be installed
- * activated in order to work.
- *
- * @param String $location The location, e.g. "London", or "24 Foobar Street, Gotham City"
- */
- function elgg_geocode_location($location)
- {
- global $CONFIG;
-
- $location = sanitise_string($location);
-
- // Look for cached version
- $cached_location = get_data_row("SELECT * from {$CONFIG->dbprefix}geocode_cache WHERE location='$location'");
-
- // Trigger geocode event
- $return = false;
- $return = trigger_plugin_hook('geocode', 'location', array('location' => $location, $return));
-
- // If returned, cache and return value
- if (($return) && (is_array($return)))
- {
- $lat = (int)$return['lat'];
- $long = (int)$return['long'];
-
- // Put into cache at the end of the page since we don't really care that much
- execute_delayed_write_query("INSERT DELAYED INTO {$CONFIG->dbprefix}geocode_cache (lat, long) VALUES ({$lat}, {$long}) ON DUPLICATE KEY UPDATE lat={$lat} long={$long}");
- }
-
- return $return;
+ $location = sanitise_string($location);
+
+ // Look for cached version
+ $query = "SELECT * from {$CONFIG->dbprefix}geocode_cache WHERE location='$location'";
+ $cached_location = get_data_row($query);
+
+ if ($cached_location) {
+ return array('lat' => $cached_location->lat, 'long' => $cached_location->long);
}
-
- /**
- * Return entities within a given geographic area.
- *
- * @param real $lat Latitude
- * @param real $long Longitude
- * @param real $radius The radius
- * @param string $type The type of entity (eg "user", "object" etc)
- * @param string $subtype The arbitrary subtype of the entity
- * @param int $owner_guid The GUID of the owning user
- * @param string $order_by The field to order by; by default, time_created desc
- * @param int $limit The number of entities to return; 10 by default
- * @param int $offset The indexing offset, 0 by default
- * @param boolean $count Set to true to get a count rather than the entities themselves (limits and offsets don't apply in this context). Defaults to false.
- * @param int $site_guid The site to get entities for. Leave as 0 (default) for the current site; -1 for all sites.
- * @param int|array $container_guid The container or containers to get entities from (default: all containers).
- * @return array A list of entities.
- */
- function get_entities_in_area($lat, $long, $radius, $type = "", $subtype = "", $owner_guid = 0, $order_by = "", $limit = 10, $offset = 0, $count = false, $site_guid = 0, $container_guid)
- {
- global $CONFIG;
-
- if ($subtype === false || $subtype === null || $subtype === 0)
- return false;
-
- $lat = (real)$lat;
- $long = (real)$long;
- $radius = (real)$radius;
- $order_by = sanitise_string($order_by);
- $limit = (int)$limit;
- $offset = (int)$offset;
- $site_guid = (int) $site_guid;
- if ($site_guid == 0)
- $site_guid = $CONFIG->site_guid;
-
- $where = array();
-
- if (is_array($type)) {
- $tempwhere = "";
- if (sizeof($type))
- foreach($type as $typekey => $subtypearray) {
- foreach($subtypearray as $subtypeval) {
- $typekey = sanitise_string($typekey);
- if (!empty($subtypeval)) {
- $subtypeval = (int) get_subtype_id($typekey, $subtypeval);
- } else {
- $subtypeval = 0;
- }
- if (!empty($tempwhere)) $tempwhere .= " or ";
- $tempwhere .= "(e.type = '{$typekey}' and e.subtype = {$subtypeval})";
- }
- }
- if (!empty($tempwhere)) $where[] = "({$tempwhere})";
-
- } else {
-
- $type = sanitise_string($type);
- $subtype = get_subtype_id($type, $subtype);
-
- if ($type != "")
- $where[] = "e.type='$type'";
- if ($subtype!=="")
- $where[] = "e.subtype=$subtype";
-
- }
+ // Trigger geocode event if not cached
+ $return = false;
+ $return = elgg_trigger_plugin_hook('geocode', 'location', array('location' => $location), $return);
- if ($owner_guid != "") {
- if (!is_array($owner_guid)) {
- $owner_array = array($owner_guid);
- $owner_guid = (int) $owner_guid;
- $where[] = "e.owner_guid = '$owner_guid'";
- } else if (sizeof($owner_guid) > 0) {
- $owner_array = array_map('sanitise_int', $owner_guid);
- // Cast every element to the owner_guid array to int
- $owner_guid = implode(",",$owner_guid); //
- $where[] = "e.owner_guid in ({$owner_guid})" ; //
- }
- if (is_null($container_guid)) {
- $container_guid = $owner_array;
- }
- }
-
- if ($site_guid > 0)
- $where[] = "e.site_guid = {$site_guid}";
-
- if (!is_null($container_guid)) {
- if (is_array($container_guid)) {
- foreach($container_guid as $key => $val) $container_guid[$key] = (int) $val;
- $where[] = "e.container_guid in (" . implode(",",$container_guid) . ")";
- } else {
- $container_guid = (int) $container_guid;
- $where[] = "e.container_guid = {$container_guid}";
- }
- }
-
- // Add the calendar stuff
- $loc_join = "
- JOIN {$CONFIG->dbprefix}metadata loc_start on e.guid=loc_start.entity_guid
- JOIN {$CONFIG->dbprefix}metastrings loc_start_name on loc_start.name_id=loc_start_name.id
- JOIN {$CONFIG->dbprefix}metastrings loc_start_value on loc_start.value_id=loc_start_value.id
-
- JOIN {$CONFIG->dbprefix}metadata loc_end on e.guid=loc_end.entity_guid
- JOIN {$CONFIG->dbprefix}metastrings loc_end_name on loc_end.name_id=loc_end_name.id
- JOIN {$CONFIG->dbprefix}metastrings loc_end_value on loc_end.value_id=loc_end_value.id
- ";
+ // If returned, cache and return value
+ if (($return) && (is_array($return))) {
+ $lat = (float)$return['lat'];
+ $long = (float)$return['long'];
- $lat_min = $lat - $radius;
- $lat_max = $lat + $radius;
- $long_min = $long - $radius;
- $long_max = $long + $radius;
-
- $where[] = "loc_start_name.string='geo:lat'";
- $where[] = "loc_start_value.string>=$lat_min";
- $where[] = "loc_start_value.string<=$lat_max";
- $where[] = "loc_end_name.string='geo:long'";
- $where[] = "loc_end_value.string >= $long_min";
- $where[] = "loc_end_value.string <= $long_max";
-
-
- if (!$count) {
- $query = "SELECT e.* from {$CONFIG->dbprefix}entities e $loc_join where ";
- } else {
- $query = "SELECT count(e.guid) as total from {$CONFIG->dbprefix}entities e $loc_join where ";
- }
- foreach ($where as $w)
- $query .= " $w and ";
-
- $query .= get_access_sql_suffix('e'); // Add access controls
-
- if (!$count) {
- $query .= " order by n.calendar_start $order_by";
- if ($limit) $query .= " limit $offset, $limit"; // Add order and limit
- $dt = get_data($query, "entity_row_to_elggstar");
- return $dt;
- } else {
- $total = get_data_row($query);
- return $total->total;
- }
+ // Put into cache at the end of the page since we don't really care that much
+ $query = "INSERT DELAYED INTO {$CONFIG->dbprefix}geocode_cache "
+ . " (location, lat, `long`) VALUES ('$location', '{$lat}', '{$long}')"
+ . " ON DUPLICATE KEY UPDATE lat='{$lat}', `long`='{$long}'";
+ execute_delayed_write_query($query);
}
+
+ return $return;
+}
+
+/**
+ * Return entities within a given geographic area.
+ *
+ * Also accepts all options available to elgg_get_entities().
+ *
+ * @see elgg_get_entities
+ *
+ * @param array $options Array in format:
+ *
+ * latitude => FLOAT Latitude of the location
+ *
+ * longitude => FLOAT Longitude of the location
+ *
+ * distance => FLOAT/ARR (
+ * latitude => float,
+ * longitude => float,
+ * )
+ * The distance in degrees that determines the search box. A
+ * single float will result in a square in degrees.
+ * @warning The Earth is round.
+ *
+ * @see ElggEntity::setLatLong()
+ *
+ * @return mixed If count, int. If not count, array. false on errors.
+ * @since 1.8.0
+ */
+function elgg_get_entities_from_location(array $options = array()) {
+
+ global $CONFIG;
- /**
- * List entities in a given location
- *
- * @param string $location Location
- * @param string $type The type of entity (eg "user", "object" etc)
- * @param string $subtype The arbitrary subtype of the entity
- * @param int $owner_guid The GUID of the owning user
- * @param int $limit The number of entities to display per page (default: 10)
- * @param true|false $fullview Whether or not to display the full view (default: true)
- * @param true|false $viewtypetoggle Whether or not to allow gallery view
- * @param true|false $pagination Display pagination? Default: true
- * @return string A viewable list of entities
- */
- function list_entities_location($location, $type= "", $subtype = "", $owner_guid = 0, $limit = 10, $fullview = true, $viewtypetoggle = false, $navigation = true) {
- return list_entities_from_metadata('location', $location, $type, $subtype, $owner_guid, $limit, $fullview, $viewtypetoggle, $navigation);
+ if (!isset($options['latitude']) || !isset($options['longitude']) ||
+ !isset($options['distance'])) {
+ return false;
}
-
- /**
- * List items within a given geographic area.
- *
- * @param real $lat Latitude
- * @param real $long Longitude
- * @param real $radius The radius
- * @param string $type The type of entity (eg "user", "object" etc)
- * @param string $subtype The arbitrary subtype of the entity
- * @param int $owner_guid The GUID of the owning user
- * @param int $limit The number of entities to display per page (default: 10)
- * @param true|false $fullview Whether or not to display the full view (default: true)
- * @param true|false $viewtypetoggle Whether or not to allow gallery view
- * @param true|false $pagination Display pagination? Default: true
- * @return string A viewable list of entities
- */
- function list_entities_in_area($lat, $long, $radius, $type= "", $subtype = "", $owner_guid = 0, $limit = 10, $fullview = true, $viewtypetoggle = false, $navigation = true) {
-
- $offset = (int) get_input('offset');
- $count = get_entities_in_area($lat, $long, $radius, $type, $subtype, $owner_guid, "", $limit, $offset, true);
- $entities = get_entities_in_area($lat, $long, $radius, $type, $subtype, $owner_guid, "", $limit, $offset);
- return elgg_view_entity_list($entities, $count, $offset, $limit, $fullview, $viewtypetoggle, $navigation);
+ if (!is_array($options['distance'])) {
+ $lat_distance = (float)$options['distance'];
+ $long_distance = (float)$options['distance'];
+ } else {
+ $lat_distance = (float)$options['distance']['latitude'];
+ $long_distance = (float)$options['distance']['longitude'];
}
-
- // Some distances in degrees (approximate)
- define("MILE", 0.01515);
- define("KILOMETER", 0.00932);
-
-
- // TODO: get objects within x miles by entities, metadata and relationship
-
- // TODO: List
-
-
-?> \ No newline at end of file
+
+ $lat = (float)$options['latitude'];
+ $long = (float)$options['longitude'];
+ $lat_min = $lat - $lat_distance;
+ $lat_max = $lat + $lat_distance;
+ $long_min = $long - $long_distance;
+ $long_max = $long + $long_distance;
+
+ $wheres = array();
+ $wheres[] = "lat_name.string='geo:lat'";
+ $wheres[] = "lat_value.string >= $lat_min";
+ $wheres[] = "lat_value.string <= $lat_max";
+ $wheres[] = "lon_name.string='geo:long'";
+ $wheres[] = "lon_value.string >= $long_min";
+ $wheres[] = "lon_value.string <= $long_max";
+
+ $joins = array();
+ $joins[] = "JOIN {$CONFIG->dbprefix}metadata lat on e.guid=lat.entity_guid";
+ $joins[] = "JOIN {$CONFIG->dbprefix}metastrings lat_name on lat.name_id=lat_name.id";
+ $joins[] = "JOIN {$CONFIG->dbprefix}metastrings lat_value on lat.value_id=lat_value.id";
+ $joins[] = "JOIN {$CONFIG->dbprefix}metadata lon on e.guid=lon.entity_guid";
+ $joins[] = "JOIN {$CONFIG->dbprefix}metastrings lon_name on lon.name_id=lon_name.id";
+ $joins[] = "JOIN {$CONFIG->dbprefix}metastrings lon_value on lon.value_id=lon_value.id";
+
+ // merge wheres to pass to get_entities()
+ if (isset($options['wheres']) && !is_array($options['wheres'])) {
+ $options['wheres'] = array($options['wheres']);
+ } elseif (!isset($options['wheres'])) {
+ $options['wheres'] = array();
+ }
+ $options['wheres'] = array_merge($options['wheres'], $wheres);
+
+ // merge joins to pass to get_entities()
+ if (isset($options['joins']) && !is_array($options['joins'])) {
+ $options['joins'] = array($options['joins']);
+ } elseif (!isset($options['joins'])) {
+ $options['joins'] = array();
+ }
+ $options['joins'] = array_merge($options['joins'], $joins);
+
+ return elgg_get_entities_from_relationship($options);
+}
+
+/**
+ * Returns a viewable list of entities from location
+ *
+ * @param array $options Options array
+ *
+ * @see elgg_list_entities()
+ * @see elgg_get_entities_from_location()
+ *
+ * @return string The viewable list of entities
+ * @since 1.8.0
+ */
+function elgg_list_entities_from_location(array $options = array()) {
+ return elgg_list_entities($options, 'elgg_get_entities_from_location');
+}
+
+// Some distances in degrees (approximate)
+// @todo huh? see warning on elgg_get_entities_from_location()
+define("MILE", 0.01515);
+define("KILOMETER", 0.00932);
diff --git a/engine/lib/mb_wrapper.php b/engine/lib/mb_wrapper.php
new file mode 100644
index 000000000..68fa69005
--- /dev/null
+++ b/engine/lib/mb_wrapper.php
@@ -0,0 +1,233 @@
+<?php
+
+// if mb functions are available, set internal encoding to UTF8
+if (is_callable('mb_internal_encoding')) {
+ mb_internal_encoding("UTF-8");
+ ini_set("mbstring.internal_encoding", 'UTF-8');
+}
+
+/**
+ * Parses a string using mb_parse_str() if available.
+ * NOTE: This differs from parse_str() by returning the results
+ * instead of placing them in the local scope!
+ *
+ * @param string $str The string
+ *
+ * @return array
+ * @since 1.7.0
+ */
+function elgg_parse_str($str) {
+ if (is_callable('mb_parse_str')) {
+ mb_parse_str($str, $results);
+ } else {
+ parse_str($str, $results);
+ }
+
+ return $results;
+}
+
+
+
+/**
+ * Wrapper function for mb_split(). Falls back to split() if
+ * mb_split() isn't available. Parameters are passed to the
+ * wrapped function in the same order they are passed to this
+ * function.
+ *
+ * @return string
+ * @since 1.7.0
+ */
+function elgg_split() {
+ $args = func_get_args();
+ if (is_callable('mb_split')) {
+ return call_user_func_array('mb_split', $args);
+ }
+ return call_user_func_array('split', $args);
+}
+
+/**
+ * Wrapper function for mb_stristr(). Falls back to stristr() if
+ * mb_stristr() isn't available. Parameters are passed to the
+ * wrapped function in the same order they are passed to this
+ * function.
+ *
+ * @return string
+ * @since 1.7.0
+ */
+function elgg_stristr() {
+ $args = func_get_args();
+ if (is_callable('mb_stristr')) {
+ return call_user_func_array('mb_stristr', $args);
+ }
+ return call_user_func_array('stristr', $args);
+}
+
+/**
+ * Wrapper function for mb_strlen(). Falls back to strlen() if
+ * mb_strlen() isn't available. Parameters are passed to the
+ * wrapped function in the same order they are passed to this
+ * function.
+ *
+ * @return string
+ * @since 1.7.0
+ */
+function elgg_strlen() {
+ $args = func_get_args();
+ if (is_callable('mb_strlen')) {
+ return call_user_func_array('mb_strlen', $args);
+ }
+ return call_user_func_array('strlen', $args);
+}
+
+/**
+ * Wrapper function for mb_strpos(). Falls back to strpos() if
+ * mb_strpos() isn't available. Parameters are passed to the
+ * wrapped function in the same order they are passed to this
+ * function.
+ *
+ * @return string
+ * @since 1.7.0
+ */
+function elgg_strpos() {
+ $args = func_get_args();
+ if (is_callable('mb_strpos')) {
+ return call_user_func_array('mb_strpos', $args);
+ }
+ return call_user_func_array('strpos', $args);
+}
+
+/**
+ * Wrapper function for mb_strrchr(). Falls back to strrchr() if
+ * mb_strrchr() isn't available. Parameters are passed to the
+ * wrapped function in the same order they are passed to this
+ * function.
+ *
+ * @return string
+ * @since 1.7.0
+ */
+function elgg_strrchr() {
+ $args = func_get_args();
+ if (is_callable('mb_strrchr')) {
+ return call_user_func_array('mb_strrchr', $args);
+ }
+ return call_user_func_array('strrchr', $args);
+}
+
+/**
+ * Wrapper function for mb_strripos(). Falls back to strripos() if
+ * mb_strripos() isn't available. Parameters are passed to the
+ * wrapped function in the same order they are passed to this
+ * function.
+ *
+ * @return int
+ * @since 1.7.0
+ */
+function elgg_strripos() {
+ $args = func_get_args();
+ if (is_callable('mb_strripos')) {
+ return call_user_func_array('mb_strripos', $args);
+ }
+ return call_user_func_array('strripos', $args);
+}
+
+/**
+ * Wrapper function for mb_strrpos(). Falls back to strrpos() if
+ * mb_strrpos() isn't available. Parameters are passed to the
+ * wrapped function in the same order they are passed to this
+ * function.
+ *
+ * @return int
+ * @since 1.7.0
+ */
+function elgg_strrpos() {
+ $args = func_get_args();
+ if (is_callable('mb_strrpos')) {
+ return call_user_func_array('mb_strrpos', $args);
+ }
+ return call_user_func_array('strrpos', $args);
+}
+
+/**
+ * Wrapper function for mb_strstr(). Falls back to strstr() if
+ * mb_strstr() isn't available. Parameters are passed to the
+ * wrapped function in the same order they are passed to this
+ * function.
+ *
+ * @return bool
+ * @since 1.7.0
+ */
+function elgg_strstr() {
+ $args = func_get_args();
+ if (is_callable('mb_strstr')) {
+ return call_user_func_array('mb_strstr', $args);
+ }
+ return call_user_func_array('strstr', $args);
+}
+
+/**
+ * Wrapper function for mb_strtolower(). Falls back to strtolower() if
+ * mb_strtolower() isn't available. Parameters are passed to the
+ * wrapped function in the same order they are passed to this
+ * function.
+ *
+ * @return string
+ * @since 1.7.0
+ */
+function elgg_strtolower() {
+ $args = func_get_args();
+ if (is_callable('mb_strtolower')) {
+ return call_user_func_array('mb_strtolower', $args);
+ }
+ return call_user_func_array('strtolower', $args);
+}
+
+/**
+ * Wrapper function for mb_strtoupper(). Falls back to strtoupper() if
+ * mb_strtoupper() isn't available. Parameters are passed to the
+ * wrapped function in the same order they are passed to this
+ * function.
+ *
+ * @return string
+ * @since 1.7.0
+ */
+function elgg_strtoupper() {
+ $args = func_get_args();
+ if (is_callable('mb_strtoupper')) {
+ return call_user_func_array('mb_strtoupper', $args);
+ }
+ return call_user_func_array('strtoupper', $args);
+}
+
+/**
+ * Wrapper function for mb_substr_count(). Falls back to substr_count() if
+ * mb_substr_count() isn't available. Parameters are passed to the
+ * wrapped function in the same order they are passed to this
+ * function.
+ *
+ * @return int
+ * @since 1.7.0
+ */
+function elgg_substr_count() {
+ $args = func_get_args();
+ if (is_callable('mb_substr_count')) {
+ return call_user_func_array('mb_substr_count', $args);
+ }
+ return call_user_func_array('substr_count', $args);
+}
+
+/**
+ * Wrapper function for mb_substr(). Falls back to substr() if
+ * mb_substr() isn't available. Parameters are passed to the
+ * wrapped function in the same order they are passed to this
+ * function.
+ *
+ * @return string
+ * @since 1.7.0
+ */
+function elgg_substr() {
+ $args = func_get_args();
+ if (is_callable('mb_substr')) {
+ return call_user_func_array('mb_substr', $args);
+ }
+ return call_user_func_array('substr', $args);
+}
diff --git a/engine/lib/memcache.php b/engine/lib/memcache.php
index cd35af5c0..79b87e850 100644
--- a/engine/lib/memcache.php
+++ b/engine/lib/memcache.php
@@ -1,200 +1,57 @@
<?php
- /**
- * Elgg memcache support.
- *
- * Requires php5-memcache to work.
- *
- * @package Elgg
- * @subpackage API
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd <info@elgg.com>
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
+/**
+ * Elgg memcache support.
+ *
+ * Requires php5-memcache to work.
+ *
+ * @package Elgg.Core
+ * @subpackage Cache.Memcache
+ */
- /**
- * Memcache wrapper class.
- * @author Curverider Ltd <info@elgg.com>
- */
- class ElggMemcache extends ElggSharedMemoryCache
- {
- /**
- * Minimum version of memcached needed to run
- *
- */
- private static $MINSERVERVERSION = '1.1.12';
-
- /**
- * Memcache object
- */
- private $memcache;
-
- /**
- * Expiry of saved items (default timeout after a day to prevent anything getting too stale)
- */
- private $expires = 86400;
-
- /**
- * The version of memcache running
- */
- private $version = 0;
-
- /**
- * Connect to memcache.
- *
- * @param string $cache_id The namespace for this cache to write to - note, namespaces of the same name are shared!
- */
- function __construct($namespace = 'default')
- {
- global $CONFIG;
-
- $this->setNamespace($namespace);
-
- // Do we have memcache?
- if (!class_exists('Memcache'))
- throw new ConfigurationException(elgg_echo('memcache:notinstalled'));
+/**
+ * Return true if memcache is available and configured.
+ *
+ * @return bool
+ */
+function is_memcache_available() {
+ global $CONFIG;
- // Create memcache object
- $this->memcache = new Memcache;
-
- // Now add servers
- if (!$CONFIG->memcache_servers)
- throw new ConfigurationException(elgg_echo('memcache:noservers'));
-
- if (is_callable($this->memcache, 'addServer'))
- {
- foreach ($CONFIG->memcache_servers as $server)
- {
- if (is_array($server))
- {
- $this->memcache->addServer(
- $server[0],
- isset($server[1]) ? $server[1] : 11211,
- isset($server[2]) ? $server[2] : true,
- isset($server[3]) ? $server[3] : null,
- isset($server[4]) ? $server[4] : 1,
- isset($server[5]) ? $server[5] : 15,
- isset($server[6]) ? $server[6] : true
- );
-
- }
- else
- $this->memcache->addServer($server, 11211);
- }
- }
- else
- {
- if ((isset($CONFIG->debug)) && ($CONFIG->debug == true))
- error_log(elgg_echo('memcache:noaddserver'));
-
- $server = $CONFIG->memcache_servers[0];
- if (is_array($server))
- {
- $this->memcache->connect($server[0], $server[1]);
- }
- else
- $this->memcache->addServer($server, 11211);
- }
-
- // Get version
- $this->version = $this->memcache->getversion();
- if (version_compare($this->version, ElggMemcache::$MINSERVERVERSION, '<'))
- throw new ConfigurationException(sprintf(elgg_echo('memcache:versiontoolow'), ElggMemcache::$MINSERVERVERSION, $this->version));
-
- // Set some defaults
- if (isset($CONFIG->memcache_expires))
- $this->expires = $CONFIG->memcache_expires;
-
- }
-
- /**
- * Set the default expiry.
- *
- * @param int $expires The lifetime as a unix timestamp or time from now. Defaults forever.
- */
- public function setDefaultExpiry($expires = 0)
- {
- $this->expires = $expires;
- }
-
- /**
- * Combine a key with the namespace.
- * Memcache can only accept <250 char key. If the given key is too long it is shortened.
- *
- * @param string $key The key
- * @return string The new key.
- */
- private function make_memcache_key($key)
- {
- $prefix = $this->getNamespace() . ":";
-
- if (strlen($prefix.$key)> 250)
- $key = md5($key);
-
- return $prefix.$key;
- }
-
- public function save($key, $data)
- {
- $key = $this->make_memcache_key($key);
-
- $result = $this->memcache->set($key, $data, null, $this->expires);
- if ((isset($CONFIG->debug)) && ($CONFIG->debug == true) && (!$result))
- error_log("MEMCACHE: FAILED TO SAVE $key");
-
- return $result;
- }
-
- public function load($key, $offset = 0, $limit = null)
- {
- $key = $this->make_memcache_key($key);
+ static $memcache_available;
- $result = $this->memcache->get($key);
- if ((isset($CONFIG->debug)) && ($CONFIG->debug == true) && (!$result))
- error_log("MEMCACHE: FAILED TO LOAD $key");
-
- return $result;
- }
-
- public function delete($key)
- {
- $key = $this->make_memcache_key($key);
-
- return $this->memcache->delete($key, 0);
- }
-
- public function clear()
- {
- // DISABLE clearing for now - you must use delete on a specific key.
- return true;
-
- //TODO: Namespaces as in #532
- }
-
+ if ((!isset($CONFIG->memcache)) || (!$CONFIG->memcache)) {
+ return false;
}
-
- /**
- * Return true if memcache is available and configured.
- *
- * @return bool
- */
- function is_memcache_available()
- {
- global $CONFIG;
-
- static $memcache_available;
-
- if ((!isset($CONFIG->memcache)) || (!$CONFIG->memcache))
- return false;
-
- if (($memcache_available!==true) && ($memcache_available!==false)) // If we haven't set variable to something
- {
- try {
- $tmp = new ElggMemcache();
- $memcache_available = true; // No exception thrown so we have memcache available
- } catch (Exception $e) { $memcache_available = false; }
+
+ // If we haven't set variable to something
+ if (($memcache_available !== true) && ($memcache_available !== false)) {
+ try {
+ $tmp = new ElggMemcache();
+ // No exception thrown so we have memcache available
+ $memcache_available = true;
+ } catch (Exception $e) {
+ $memcache_available = false;
}
-
- return $memcache_available;
}
-?> \ No newline at end of file
+
+ return $memcache_available;
+}
+
+/**
+ * Invalidate an entity in memcache
+ *
+ * @param int $entity_guid The GUID of the entity to invalidate
+ *
+ * @return void
+ * @access private
+ */
+function _elgg_invalidate_memcache_for_entity($entity_guid) {
+ static $newentity_cache;
+
+ if ((!$newentity_cache) && (is_memcache_available())) {
+ $newentity_cache = new ElggMemcache('new_entity_cache');
+ }
+
+ if ($newentity_cache) {
+ $newentity_cache->delete($entity_guid);
+ }
+} \ No newline at end of file
diff --git a/engine/lib/metadata.php b/engine/lib/metadata.php
index 1fc88eba6..fdb1b85f6 100644
--- a/engine/lib/metadata.php
+++ b/engine/lib/metadata.php
@@ -1,868 +1,978 @@
-<?php
- /**
- * Elgg metadata
- * Functions to manage object metadata.
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd <info@elgg.com>
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
-
- /**
- * ElggMetadata
- * This class describes metadata that can be attached to ElggEntities.
- *
- * @author Curverider Ltd <info@elgg.com>
- * @package Elgg
- * @subpackage Core
- */
- class ElggMetadata extends ElggExtender
- {
-
- /**
- * Construct a new site object, optionally from a given id value or row.
- *
- * @param mixed $id
- */
- function __construct($id = null)
- {
- $this->attributes = array();
-
- if (!empty($id)) {
-
- if ($id instanceof stdClass)
- $metadata = $id; // Create from db row
- else
- $metadata = get_metadata($id);
-
- if ($metadata) {
- $objarray = (array) $metadata;
- foreach($objarray as $key => $value) {
- $this->attributes[$key] = $value;
- }
- $this->attributes['type'] = "metadata";
- }
- }
- }
-
- /**
- * Class member get overloading
- *
- * @param string $name
- * @return mixed
- */
- function __get($name) {
- return $this->get($name);
- }
-
- /**
- * Class member set overloading
- *
- * @param string $name
- * @param mixed $value
- * @return mixed
- */
- function __set($name, $value) {
- return $this->set($name, $value);
- }
-
- /**
- * Determines whether or not the user can edit this piece of metadata
- *
- * @return true|false Depending on permissions
- */
- function canEdit() {
-
- if ($entity = get_entity($this->get('entity_guid'))) {
- return $entity->canEditMetadata($this);
- }
- return false;
-
- }
-
- /**
- * Save matadata object
- *
- * @return int the metadata object id
- */
- function save()
- {
- if ($this->id > 0)
- return update_metadata($this->id, $this->name, $this->value, $this->value_type, $this->owner_guid, $this->access_id);
- else
- {
- $this->id = create_metadata($this->entity_guid, $this->name, $this->value, $this->value_type, $this->owner_guid, $this->access_id);
- if (!$this->id) throw new IOException(sprintf(elgg_new('IOException:UnableToSaveNew'), get_class()));
- return $this->id;
- }
-
- }
-
- /**
- * Delete a given metadata.
- */
- function delete()
- {
- return delete_metadata($this->id);
- }
-
- /**
- * Get a url for this item of metadata.
- *
- * @return string
- */
- public function getURL() { return get_metadata_url($this->id); }
-
- // SYSTEM LOG INTERFACE ////////////////////////////////////////////////////////////
-
- /**
- * For a given ID, return the object associated with it.
- * This is used by the river functionality primarily.
- * This is useful for checking access permissions etc on objects.
- */
- public function getObjectFromID($id) { return get_metadata($id); }
- }
-
- /**
- * Convert a database row to a new ElggMetadata
- *
- * @param stdClass $row
- * @return stdClass or ElggMetadata
- */
- function row_to_elggmetadata($row)
- {
- if (!($row instanceof stdClass))
- return $row;
-
- return new ElggMetadata($row);
- }
-
-
- /**
- * Get a specific item of metadata.
- *
- * @param $id int The item of metadata being retrieved.
- */
- function get_metadata($id)
- {
- global $CONFIG;
-
- $id = (int)$id;
- $access = get_access_sql_suffix("e");
- $md_access = get_access_sql_suffix("m");
-
- return row_to_elggmetadata(get_data_row("SELECT m.*, n.string as name, v.string as value from {$CONFIG->dbprefix}metadata m JOIN {$CONFIG->dbprefix}entities e on e.guid = m.entity_guid JOIN {$CONFIG->dbprefix}metastrings v on m.value_id = v.id JOIN {$CONFIG->dbprefix}metastrings n on m.name_id = n.id where m.id=$id and $access and $md_access"));
- }
-
- /**
- * Removes metadata on an entity with a particular name, optionally with a given value.
- *
- * @param int $entity_guid The entity GUID
- * @param string $name The name of the metadata
- * @param string $value The optional value of the item (useful for removing a single item in a multiple set)
- * @return true|false Depending on success
- */
- function remove_metadata($entity_guid, $name, $value = "") {
-
- global $CONFIG;
- $entity_guid = (int) $entity_guid;
- $name = sanitise_string($name);
- $value = sanitise_string($value);
-
- $query = "SELECT * from {$CONFIG->dbprefix}metadata WHERE entity_guid = $entity_guid and name_id=" . add_metastring($name);
- if ($value!="")
- $query .= " and value_id=" . add_metastring($value);
-
- if ($existing = get_data($query)) {
- foreach($existing as $ex)
- delete_metadata($ex->id);
- return true;
- }
- return false;
-
- }
-
- /**
- * Create a new metadata object, or update an existing one.
- *
- * @param int $entity_guid
- * @param string $name
- * @param string $value
- * @param string $value_type
- * @param int $owner_guid
- * @param int $access_id
- * @param bool $allow_multiple
- */
- function create_metadata($entity_guid, $name, $value, $value_type, $owner_guid, $access_id = ACCESS_PRIVATE, $allow_multiple = false)
- {
- global $CONFIG;
-
- $entity_guid = (int)$entity_guid;
- //$name = sanitise_string(trim($name));
- //$value = sanitise_string(trim($value));
- $value_type = detect_extender_valuetype($value, sanitise_string(trim($value_type)));
- $time = time();
- $owner_guid = (int)$owner_guid;
- $allow_multiple = (boolean)$allow_multiple;
-
- if ($owner_guid==0) $owner_guid = get_loggedin_userid();
-
- $access_id = (int)$access_id;
-
- $id = false;
-
- $existing = get_data_row("SELECT * from {$CONFIG->dbprefix}metadata WHERE entity_guid = $entity_guid and name_id=" . add_metastring($name) . " limit 1");
- if (($existing) && (!$allow_multiple) && (isset($value)))
- {
- $id = $existing->id;
- $result = update_metadata($id, $name, $value, $value_type, $owner_guid, $access_id);
-
- if (!$result) return false;
- }
- else if (isset($value))
- {
- // Support boolean types
- if (is_bool($value)) {
- if ($value)
- $value = 1;
- else
- $value = 0;
- }
-
- // Add the metastrings
- $value = add_metastring($value);
- if (!$value) return false;
-
- $name = add_metastring($name);
- if (!$name) return false;
-
- // If ok then add it
- $id = insert_data("INSERT into {$CONFIG->dbprefix}metadata (entity_guid, name_id, value_id, value_type, owner_guid, time_created, access_id) VALUES ($entity_guid, '$name','$value','$value_type', $owner_guid, $time, $access_id)");
-
- if ($id!==false) {
- $obj = get_metadata($id);
- if (trigger_elgg_event('create', 'metadata', $obj)) {
- return true;
- } else {
- delete_metadata($id);
- }
- }
-
- } else if ($existing) {
-// TODO: Check... are you sure you meant to do this Ben? :)
- $id = $existing->id;
- delete_metadata($id);
-
- }
-
- return $id;
- }
-
- /**
- * Update an item of metadata.
- *
- * @param int $id
- * @param string $name
- * @param string $value
- * @param string $value_type
- * @param int $owner_guid
- * @param int $access_id
- */
- function update_metadata($id, $name, $value, $value_type, $owner_guid, $access_id)
- {
- global $CONFIG;
-
- $id = (int)$id;
-
- if (!$md = get_metadata($id)) return false;
- if (!$md->canEdit()) return false;
-
- // If memcached then we invalidate the cache for this entry
- static $metabyname_memcache;
- if ((!$metabyname_memcache) && (is_memcache_available()))
- $metabyname_memcache = new ElggMemcache('metabyname_memcache');
- if ($metabyname_memcache) $metabyname_memcache->delete("{$md->entity_guid}:{$md->name_id}");
-
- //$name = sanitise_string(trim($name));
- //$value = sanitise_string(trim($value));
- $value_type = detect_extender_valuetype($value, sanitise_string(trim($value_type)));
-
- $owner_guid = (int)$owner_guid;
- if ($owner_guid==0) $owner_guid = get_loggedin_userid();
-
- $access_id = (int)$access_id;
-
- $access = get_access_sql_suffix();
-
- // Support boolean types (as integers)
- if (is_bool($value)) {
- if ($value)
- $value = 1;
- else
- $value = 0;
- }
-
- // Add the metastring
- $value = add_metastring($value);
- if (!$value) return false;
-
- $name = add_metastring($name);
- if (!$name) return false;
-
- // If ok then add it
- $result = update_data("UPDATE {$CONFIG->dbprefix}metadata set value_id='$value', value_type='$value_type', access_id=$access_id, owner_guid=$owner_guid where id=$id and name_id='$name'");
- if ($result!==false) {
- $obj = get_metadata($id);
- if (trigger_elgg_event('update', 'metadata', $obj)) {
- return true;
- } else {
- delete_metadata($id);
- }
- }
-
- return $result;
- }
-
- /**
- * This function creates metadata from an associative array of "key => value" pairs.
- *
- * @param int $entity_guid
- * @param string $name_and_values
- * @param string $value_type
- * @param int $owner_guid
- * @param int $access_id
- * @param bool $allow_multiple
- */
- function create_metadata_from_array($entity_guid, array $name_and_values, $value_type, $owner_guid, $access_id = ACCESS_PRIVATE, $allow_multiple = false)
- {
- foreach ($name_and_values as $k => $v)
- if (!create_metadata($entity_guid, $k, $v, $value_type, $owner_guid, $access_id, $allow_multiple)) return false;
-
- return true;
- }
-
- /**
- * Delete an item of metadata, where the current user has access.
- *
- * @param $id int The item of metadata to delete.
- */
- function delete_metadata($id)
- {
- global $CONFIG;
-
- $id = (int)$id;
- $metadata = get_metadata($id);
-
- // Tidy up if memcache is enabled.
- static $metabyname_memcache;
- if ((!$metabyname_memcache) && (is_memcache_available()))
- $metabyname_memcache = new ElggMemcache('metabyname_memcache');
- if ($metabyname_memcache) $metabyname_memcache->delete("{$metadata->entity_guid}:{$metadata->name_id}");
-
- if ($metadata->canEdit())
- return delete_data("DELETE from {$CONFIG->dbprefix}metadata where id=$id");
-
- }
-
- /**
- * Return the metadata values that match your query.
- *
- * @param string $meta_name
- * @return mixed either a value, an array of ElggMetadata or false.
- */
- function get_metadata_byname($entity_guid, $meta_name)
- {
- global $CONFIG;
-
- $meta_name = get_metastring_id($meta_name);
-
- if (empty($meta_name)) return false;
-
- $entity_guid = (int)$entity_guid;
- $access = get_access_sql_suffix("e");
- $md_access = get_access_sql_suffix("m");
-
- // If memcache is available then cache this (cache only by name for now since this is the most common query)
- $meta = null;
- static $metabyname_memcache;
- if ((!$metabyname_memcache) && (is_memcache_available()))
- $metabyname_memcache = new ElggMemcache('metabyname_memcache');
- if ($metabyname_memcache) $meta = $metabyname_memcache->load("{$entity_guid}:{$meta_name}");
- if ($meta) return $meta;
-
- $result = get_data("SELECT m.*, n.string as name, v.string as value from {$CONFIG->dbprefix}metadata m JOIN {$CONFIG->dbprefix}entities e ON e.guid = m.entity_guid JOIN {$CONFIG->dbprefix}metastrings v on m.value_id = v.id JOIN {$CONFIG->dbprefix}metastrings n on m.name_id = n.id where m.entity_guid=$entity_guid and m.name_id='$meta_name' and $access and $md_access", "row_to_elggmetadata");
- if (!$result)
- return false;
-
- // Cache if memcache available
- if ($metabyname_memcache)
- {
- if (count($result) == 1) $r = $result[0]; else $r = $result;
- $metabyname_memcache->setDefaultExpiry(3600); // This is a bit of a hack - we shorten the expiry on object metadata so that it'll be gone in an hour. This means that deletions and more importantly updates will filter through eventually.
- $metabyname_memcache->save("{$entity_guid}:{$meta_name}", $r);
-
- }
- if (count($result) == 1)
- return $result[0];
-
- return $result;
- }
-
- /**
- * Return all the metadata for a given GUID.
- *
- * @param int $entity_guid
- */
- function get_metadata_for_entity($entity_guid)
- {
- global $CONFIG;
-
- $entity_guid = (int)$entity_guid;
- $access = get_access_sql_suffix("e");
- $md_access = get_access_sql_suffix("m");
-
- return get_data("SELECT m.*, n.string as name, v.string as value from {$CONFIG->dbprefix}metadata m JOIN {$CONFIG->dbprefix}entities e ON e.guid = m.entity_guid JOIN {$CONFIG->dbprefix}metastrings v on m.value_id = v.id JOIN {$CONFIG->dbprefix}metastrings n on m.name_id = n.id where m.entity_guid=$entity_guid and $access and $md_access", "row_to_elggmetadata");
- }
-
- /**
- * Get the metadata where the entities they are referring to match a given criteria.
- *
- * @param mixed $meta_name
- * @param mixed $meta_value
- * @param string $entity_type The type of entity to look for, eg 'site' or 'object'
- * @param string $entity_subtype The subtype of the entity.
- * @param int $limit
- * @param int $offset
- * @param string $order_by Optional ordering.
- * @param int $site_guid The site to get entities for. Leave as 0 (default) for the current site; -1 for all sites.
- */
- function find_metadata($meta_name = "", $meta_value = "", $entity_type = "", $entity_subtype = "", $limit = 10, $offset = 0, $order_by = "", $site_guid = 0)
- {
- global $CONFIG;
-
- $meta_n = get_metastring_id($meta_name);
- $meta_v = get_metastring_id($meta_value);
-
- $entity_type = sanitise_string($entity_type);
- $entity_subtype = get_subtype_id($entity_type, $entity_subtype);
- $limit = (int)$limit;
- $offset = (int)$offset;
- if ($order_by == "") $order_by = "e.time_created desc";
- $order_by = sanitise_string($order_by);
- $site_guid = (int) $site_guid;
- if ($site_guid == 0)
- $site_guid = $CONFIG->site_guid;
-
-
- $where = array();
-
- if ($entity_type!="")
- $where[] = "e.type='$entity_type'";
- if ($entity_subtype)
- $where[] = "e.subtype=$entity_subtype";
- if ($meta_name!="") {
- if (!$meta_v) return false; // The value is set, but we didn't get a value... so something went wrong.
- $where[] = "m.name_id='$meta_n'";
- }
- if ($meta_value!="") {
- if (!$meta_v) return false; // The value is set, but we didn't get a value... so something went wrong.
- $where[] = "m.value_id='$meta_v'";
- }
- if ($site_guid > 0)
- $where[] = "e.site_guid = {$site_guid}";
-
- $query = "SELECT m.*, n.string as name, v.string as value from {$CONFIG->dbprefix}entities e JOIN {$CONFIG->dbprefix}metadata m on e.guid = m.entity_guid JOIN {$CONFIG->dbprefix}metastrings v on m.value_id = v.id JOIN {$CONFIG->dbprefix}metastrings n on m.name_id = n.id where";
- foreach ($where as $w)
- $query .= " $w and ";
- $query .= get_access_sql_suffix("e"); // Add access controls
- $query .= ' and ' . get_access_sql_suffix("m"); // Add access controls
- $query .= " order by $order_by limit $offset, $limit"; // Add order and limit
-
- return get_data($query, "row_to_elggmetadata");
- }
-
- /**
- * Return a list of entities based on the given search criteria.
- *
- * @param mixed $meta_name
- * @param mixed $meta_value
- * @param string $entity_type The type of entity to look for, eg 'site' or 'object'
- * @param string $entity_subtype The subtype of the entity.
- * @param int $limit
- * @param int $offset
- * @param string $order_by Optional ordering.
- * @param int $site_guid The site to get entities for. Leave as 0 (default) for the current site; -1 for all sites.
- * @param true|false $count If set to true, returns the total number of entities rather than a list. (Default: false)
- *
- * @return int|array A list of entities, or a count if $count is set to true
- */
- function get_entities_from_metadata($meta_name, $meta_value = "", $entity_type = "", $entity_subtype = "", $owner_guid = 0, $limit = 10, $offset = 0, $order_by = "", $site_guid = 0, $count = false)
- {
- global $CONFIG;
-
- $meta_n = get_metastring_id($meta_name);
- $meta_v = get_metastring_id($meta_value);
-
- $entity_type = sanitise_string($entity_type);
- $entity_subtype = get_subtype_id($entity_type, $entity_subtype);
- $limit = (int)$limit;
- $offset = (int)$offset;
- if ($order_by == "") $order_by = "e.time_created desc";
- $order_by = sanitise_string($order_by);
- $site_guid = (int) $site_guid;
- if ((is_array($owner_guid) && (count($owner_guid)))) {
- foreach($owner_guid as $key => $guid) {
- $owner_guid[$key] = (int) $guid;
- }
- } else {
- $owner_guid = (int) $owner_guid;
- }
- if ($site_guid == 0)
- $site_guid = $CONFIG->site_guid;
-
- //$access = get_access_list();
-
- $where = array();
-
- if ($entity_type!="")
- $where[] = "e.type='$entity_type'";
- if ($entity_subtype)
- $where[] = "e.subtype=$entity_subtype";
- if ($meta_name!="")
- $where[] = "m.name_id='$meta_n'";
- if ($meta_value!="")
- $where[] = "m.value_id='$meta_v'";
- if ($site_guid > 0)
- $where[] = "e.site_guid = {$site_guid}";
- if (is_array($owner_guid)) {
- $where[] = "e.container_guid in (".implode(",",$owner_guid).")";
- } else if ($owner_guid > 0)
- $where[] = "e.container_guid = {$owner_guid}";
-
- if (!$count) {
- $query = "SELECT distinct e.* ";
- } else {
- $query = "SELECT count(distinct e.guid) as total ";
- }
-
- $query .= "from {$CONFIG->dbprefix}entities e JOIN {$CONFIG->dbprefix}metadata m on e.guid = m.entity_guid where";
- foreach ($where as $w)
- $query .= " $w and ";
- $query .= get_access_sql_suffix("e"); // Add access controls
- $query .= ' and ' . get_access_sql_suffix("m"); // Add access controls
-
- if (!$count) {
- $query .= " order by $order_by limit $offset, $limit"; // Add order and limit
- return get_data($query, "entity_row_to_elggstar");
- } else {
- if ($row = get_data_row($query))
- return $row->total;
- }
- return false;
- }
-
- /**
- * Return a list of entities suitable for display based on the given search criteria.
- *
- * @see elgg_view_entity_list
- *
- * @param mixed $meta_name Metadata name to search on
- * @param mixed $meta_value The value to match, optionally
- * @param string $entity_type The type of entity to look for, eg 'site' or 'object'
- * @param string $entity_subtype The subtype of the entity
- * @param int $limit Number of entities to display per page
- * @param true|false $fullview Whether or not to display the full view (default: true)
- * @param true|false $viewtypetoggle Whether or not to allow users to toggle to the gallery view. Default: true
- * @param true|false $pagination Display pagination? Default: true
- *
- * @return string A list of entities suitable for display
- */
- function list_entities_from_metadata($meta_name, $meta_value = "", $entity_type = "", $entity_subtype = "", $owner_guid = 0, $limit = 10, $fullview = true, $viewtypetoggle = true, $pagination = true) {
-
- $offset = (int) get_input('offset');
- $limit = (int) $limit;
- $count = get_entities_from_metadata($meta_name, $meta_value, $entity_type, $entity_subtype, $owner_guid, $limit, $offset, "", 0, true);
- $entities = get_entities_from_metadata($meta_name, $meta_value, $entity_type, $entity_subtype, $owner_guid, $limit, $offset, "", 0, false);
-
- return elgg_view_entity_list($entities, $count, $offset, $limit, $fullview, $viewtypetoggle, $pagination);
-
- }
-
- /**
- * Returns a list of entities based on the given search criteria.
- *
- * @param array $meta_array Array of 'name' => 'value' pairs
- * @param string $entity_type The type of entity to look for, eg 'site' or 'object'
- * @param string $entity_subtype The subtype of the entity.
- * @param int $limit
- * @param int $offset
- * @param string $order_by Optional ordering.
- * @param int $site_guid The site to get entities for. Leave as 0 (default) for the current site; -1 for all sites.
- * @param true|false $count If set to true, returns the total number of entities rather than a list. (Default: false)
- * @return int|array List of ElggEntities, or the total number if count is set to false
- */
- function get_entities_from_metadata_multi($meta_array, $entity_type = "", $entity_subtype = "", $owner_guid = 0, $limit = 10, $offset = 0, $order_by = "", $site_guid = 0, $count = false)
- {
- global $CONFIG;
-
- if (!is_array($meta_array) || sizeof($meta_array) == 0) {
- return false;
- }
-
- $where = array();
-
- $mindex = 1;
- $join = "";
- foreach($meta_array as $meta_name => $meta_value) {
- $meta_n = get_metastring_id($meta_name);
- $meta_v = get_metastring_id($meta_value);
- $join .= " JOIN {$CONFIG->dbprefix}metadata m{$mindex} on e.guid = m{$mindex}.entity_guid ";
- if ($meta_name!="")
- $where[] = "m{$mindex}.name_id='$meta_n'";
- if ($meta_value!="")
- $where[] = "m{$mindex}.value_id='$meta_v'";
- $mindex++;
- }
-
- $entity_type = sanitise_string($entity_type);
- $entity_subtype = get_subtype_id($entity_type, $entity_subtype);
- $limit = (int)$limit;
- $offset = (int)$offset;
- if ($order_by == "") $order_by = "e.time_created desc";
- $order_by = sanitise_string($order_by);
- $owner_guid = (int) $owner_guid;
-
- $site_guid = (int) $site_guid;
- if ($site_guid == 0)
- $site_guid = $CONFIG->site_guid;
-
- //$access = get_access_list();
-
- if ($entity_type!="")
- $where[] = "e.type = '{$entity_type}'";
- if ($entity_subtype)
- $where[] = "e.subtype = {$entity_subtype}";
- if ($site_guid > 0)
- $where[] = "e.site_guid = {$site_guid}";
- if ($owner_guid > 0)
- $where[] = "e.container_guid = {$owner_guid}";
-
- if ($count) {
- $query = "SELECT count(distinct e.guid) as total ";
- } else {
- $query = "SELECT distinct e.* ";
- }
-
- $query .= " from {$CONFIG->dbprefix}entities e {$join} where";
- foreach ($where as $w)
- $query .= " $w and ";
- $query .= get_access_sql_suffix("e"); // Add access controls
-
- $mindex = 1;
- foreach($meta_array as $meta_name => $meta_value) {
- $query .= ' and ' . get_access_sql_suffix("m{$mindex}"); // Add access controls
- $mindex++;
- }
-
- if (!$count) {
- $query .= " order by $order_by limit $offset, $limit"; // Add order and limit
- return get_data($query, "entity_row_to_elggstar");
- } else {
- if ($count = get_data_row($query)) {
- return $count->total;
- }
- }
- return false;
- }
-
- /**
- * Returns a viewable list of entities based on the given search criteria.
- *
- * @see elgg_view_entity_list
- *
- * @param array $meta_array Array of 'name' => 'value' pairs
- * @param string $entity_type The type of entity to look for, eg 'site' or 'object'
- * @param string $entity_subtype The subtype of the entity.
- * @param int $limit
- * @param int $offset
- * @param string $order_by Optional ordering.
- * @param true|false $fullview Whether or not to display the full view (default: true)
- * @param true|false $viewtypetoggle Whether or not to allow users to toggle to the gallery view. Default: true
- * @param true|false $pagination Display pagination? Default: true
- * @return string List of ElggEntities suitable for display
- */
- function list_entities_from_metadata_multi($meta_array, $entity_type = "", $entity_subtype = "", $owner_guid = 0, $limit = 10, $fullview = true, $viewtypetoggle = true, $pagination = true) {
-
- $offset = (int) get_input('offset');
- $limit = (int) $limit;
- $count = get_entities_from_metadata_multi($meta_array, $entity_type, $entity_subtype, $owner_guid, $limit, $offset, "", $site_guid, true);
- $entities = get_entities_from_metadata_multi($meta_array, $entity_type, $entity_subtype, $owner_guid, $limit, $offset, "", $site_guid, false);
-
- return elgg_view_entity_list($entities, $count, $offset, $limit, $fullview, $viewtypetoggle, $pagination);
-
- }
-
- /**
- * Clear all the metadata for a given entity, assuming you have access to that metadata.
- *
- * @param int $guid
- */
- function clear_metadata($entity_guid)
- {
- global $CONFIG;
-
- $entity_guid = (int)$entity_guid;
- if ($entity = get_entity($entity_guid)) {
- if ($entity->canEdit())
- return delete_data("DELETE from {$CONFIG->dbprefix}metadata where entity_guid={$entity_guid}");
- }
- return false;
- }
-
- /**
- * Handler called by trigger_plugin_hook on the "export" event.
- */
- function export_metadata_plugin_hook($hook, $entity_type, $returnvalue, $params)
- {
- // Sanity check values
- if ((!is_array($params)) && (!isset($params['guid'])))
- throw new InvalidParameterException(elgg_echo('InvalidParameterException:GUIDNotForExport'));
-
- if (!is_array($returnvalue))
- throw new InvalidParameterException(elgg_echo('InvalidParameterException:NonArrayReturnValue'));
-
- $guid = (int)$params['guid'];
- $name = $params['name'];
-
- $result = get_metadata_for_entity($guid);
-
- if ($result)
- {
- foreach ($result as $r)
- $returnvalue[] = $r->export();
- }
-
- return $returnvalue;
- }
-
- /**
- * Takes in a comma-separated string and returns an array of tags which have been trimmed and set to lower case
- *
- * @param string $string Comma-separated tag string
- * @return array|false An array of strings, or false on failure
- */
- function string_to_tag_array($string) {
-
- if (is_string($string)) {
- $ar = explode(",",$string);
- $ar = array_map('trim', $ar); // trim blank spaces
- //$ar = array_map('strtolower', $ar); // make lower case : [Marcus Povey 20090210 - Commented out since strtolower is not UTF8 safe]
- $ar = array_filter($ar, 'is_not_null'); // Remove null values
- return $ar;
- }
- return false;
-
- }
-
- /**
- * Takes a metadata array (which has all kinds of properties) and turns it into a simple array of strings
- *
- * @param array $array Metadata array
- * @return array Array of strings
- */
- function metadata_array_to_values($array) {
-
- $valuearray = array();
-
- if (is_array($array)) {
- foreach($array as $element) {
- $valuearray[] = $element->value;
- }
- }
-
- return $valuearray;
-
- }
-
- /**
- * Get the URL for this item of metadata, by default this links to the export handler in the current view.
- *
- * @param int $id
- */
- function get_metadata_url($id)
- {
- $id = (int)$id;
-
- if ($extender = get_metadata($id)) {
- return get_extender_url($extender);
- }
- return false;
- }
-
- /**
- * Mark entities with a particular type and subtype as having access permissions
- * that can be changed independently from their parent entity
- *
- * @param string $type The type - object, user, etc
- * @param string $subtype The subtype; all subtypes by default
- */
- function register_metadata_as_independent($type, $subtype = '*') {
- global $CONFIG;
- if (!isset($CONFIG->independents)) $CONFIG->independents = array();
- $CONFIG->independents[$type][$subtype] = true;
- }
-
- /**
- * Determines whether entities of a given type and subtype should not change
- * their metadata in line with their parent entity
- *
- * @param string $type The type - object, user, etc
- * @param string $subtype The entity subtype
- * @return true|false
- */
- function is_metadata_independent($type, $subtype) {
- global $CONFIG;
- if (empty($CONFIG->independents)) return false;
- if (!empty($CONFIG->independents[$type][$subtype])
- || !empty($CONFIG->independents[$type]['*'])) return true;
- return false;
- }
-
- /**
- * When an entity is updated, resets the access ID on all of its child metadata
- *
- * @param string $event The name of the event
- * @param string $object_type The type of object
- * @param ElggEntity $object The entity itself
- */
- function metadata_update($event, $object_type, $object) {
- if ($object instanceof ElggEntity) {
- if (!is_metadata_independent($object->getType(), $object->getSubtype())) {
- global $CONFIG;
- $access_id = (int) $object->access_id;
- $guid = (int) $object->getGUID();
- update_data("update {$CONFIG->dbprefix}metadata set access_id = {$access_id} where entity_guid = {$guid}");
- }
- }
- return true;
- }
-
- /**
- * Register a metadata url handler.
- *
- * @param string $function_name The function.
- * @param string $extender_name The name, default 'all'.
- */
- function register_metadata_url_handler($function_name, $extender_name = "all") {
- return register_extender_url_handler($function_name, 'metadata', $extender_name);
- }
-
- /** Register the hook */
- register_plugin_hook("export", "all", "export_metadata_plugin_hook", 2);
- /** Call a function whenever an entity is updated **/
- register_elgg_event_handler('update','all','metadata_update');
-
-?> \ No newline at end of file
+<?php
+/**
+ * Elgg metadata
+ * Functions to manage entity metadata.
+ *
+ * @package Elgg.Core
+ * @subpackage DataModel.Metadata
+ */
+
+/**
+ * Convert a database row to a new ElggMetadata
+ *
+ * @param stdClass $row An object from the database
+ *
+ * @return stdClass|ElggMetadata
+ * @access private
+ */
+function row_to_elggmetadata($row) {
+ if (!($row instanceof stdClass)) {
+ return $row;
+ }
+
+ return new ElggMetadata($row);
+}
+
+/**
+ * Get a specific metadata object by its id.
+ * If you want multiple metadata objects, use
+ * {@link elgg_get_metadata()}.
+ *
+ * @param int $id The id of the metadata object being retrieved.
+ *
+ * @return ElggMetadata|false FALSE if not found
+ */
+function elgg_get_metadata_from_id($id) {
+ return elgg_get_metastring_based_object_from_id($id, 'metadata');
+}
+
+/**
+ * Deletes metadata using its ID.
+ *
+ * @param int $id The metadata ID to delete.
+ * @return bool
+ */
+function elgg_delete_metadata_by_id($id) {
+ $metadata = elgg_get_metadata_from_id($id);
+ if (!$metadata) {
+ return false;
+ }
+ return $metadata->delete();
+}
+
+/**
+ * Create a new metadata object, or update an existing one.
+ *
+ * Metadata can be an array by setting allow_multiple to TRUE, but it is an
+ * indexed array with no control over the indexing.
+ *
+ * @param int $entity_guid The entity to attach the metadata to
+ * @param string $name Name of the metadata
+ * @param string $value Value of the metadata
+ * @param string $value_type 'text', 'integer', or '' for automatic detection
+ * @param int $owner_guid GUID of entity that owns the metadata
+ * @param int $access_id Default is ACCESS_PRIVATE
+ * @param bool $allow_multiple Allow multiple values for one key. Default is FALSE
+ *
+ * @return int|false id of metadata or FALSE if failure
+ */
+function create_metadata($entity_guid, $name, $value, $value_type = '', $owner_guid = 0,
+ $access_id = ACCESS_PRIVATE, $allow_multiple = false) {
+
+ global $CONFIG;
+
+ $entity_guid = (int)$entity_guid;
+ // name and value are encoded in add_metastring()
+ //$name = sanitise_string(trim($name));
+ //$value = sanitise_string(trim($value));
+ $value_type = detect_extender_valuetype($value, sanitise_string(trim($value_type)));
+ $time = time();
+ $owner_guid = (int)$owner_guid;
+ $allow_multiple = (boolean)$allow_multiple;
+
+ if (!isset($value)) {
+ return FALSE;
+ }
+
+ if ($owner_guid == 0) {
+ $owner_guid = elgg_get_logged_in_user_guid();
+ }
+
+ $access_id = (int)$access_id;
+
+ $query = "SELECT * from {$CONFIG->dbprefix}metadata"
+ . " WHERE entity_guid = $entity_guid and name_id=" . add_metastring($name) . " limit 1";
+
+ $existing = get_data_row($query);
+ if ($existing && !$allow_multiple) {
+ $id = (int)$existing->id;
+ $result = update_metadata($id, $name, $value, $value_type, $owner_guid, $access_id);
+
+ if (!$result) {
+ return false;
+ }
+ } else {
+ // Support boolean types
+ if (is_bool($value)) {
+ $value = (int) $value;
+ }
+
+ // Add the metastrings
+ $value_id = add_metastring($value);
+ if (!$value_id) {
+ return false;
+ }
+
+ $name_id = add_metastring($name);
+ if (!$name_id) {
+ return false;
+ }
+
+ // If ok then add it
+ $query = "INSERT into {$CONFIG->dbprefix}metadata"
+ . " (entity_guid, name_id, value_id, value_type, owner_guid, time_created, access_id)"
+ . " VALUES ($entity_guid, '$name_id','$value_id','$value_type', $owner_guid, $time, $access_id)";
+
+ $id = insert_data($query);
+
+ if ($id !== false) {
+ $obj = elgg_get_metadata_from_id($id);
+ if (elgg_trigger_event('create', 'metadata', $obj)) {
+
+ elgg_get_metadata_cache()->save($entity_guid, $name, $value, $allow_multiple);
+
+ return $id;
+ } else {
+ elgg_delete_metadata_by_id($id);
+ }
+ }
+ }
+
+ return $id;
+}
+
+/**
+ * Update a specific piece of metadata.
+ *
+ * @param int $id ID of the metadata to update
+ * @param string $name Metadata name
+ * @param string $value Metadata value
+ * @param string $value_type Value type
+ * @param int $owner_guid Owner guid
+ * @param int $access_id Access ID
+ *
+ * @return bool
+ */
+function update_metadata($id, $name, $value, $value_type, $owner_guid, $access_id) {
+ global $CONFIG;
+
+ $id = (int)$id;
+
+ if (!$md = elgg_get_metadata_from_id($id)) {
+ return false;
+ }
+ if (!$md->canEdit()) {
+ return false;
+ }
+
+ // If memcached then we invalidate the cache for this entry
+ static $metabyname_memcache;
+ if ((!$metabyname_memcache) && (is_memcache_available())) {
+ $metabyname_memcache = new ElggMemcache('metabyname_memcache');
+ }
+
+ if ($metabyname_memcache) {
+ // @todo fix memcache (name_id is not a property of ElggMetadata)
+ $metabyname_memcache->delete("{$md->entity_guid}:{$md->name_id}");
+ }
+
+ $value_type = detect_extender_valuetype($value, sanitise_string(trim($value_type)));
+
+ $owner_guid = (int)$owner_guid;
+ if ($owner_guid == 0) {
+ $owner_guid = elgg_get_logged_in_user_guid();
+ }
+
+ $access_id = (int)$access_id;
+
+ // Support boolean types (as integers)
+ if (is_bool($value)) {
+ $value = (int) $value;
+ }
+
+ // Add the metastring
+ $value_id = add_metastring($value);
+ if (!$value_id) {
+ return false;
+ }
+
+ $name_id = add_metastring($name);
+ if (!$name_id) {
+ return false;
+ }
+
+ // If ok then add it
+ $query = "UPDATE {$CONFIG->dbprefix}metadata"
+ . " set name_id='$name_id', value_id='$value_id', value_type='$value_type', access_id=$access_id,"
+ . " owner_guid=$owner_guid where id=$id";
+
+ $result = update_data($query);
+ if ($result !== false) {
+
+ elgg_get_metadata_cache()->save($md->entity_guid, $name, $value);
+
+ // @todo this event tells you the metadata has been updated, but does not
+ // let you do anything about it. What is needed is a plugin hook before
+ // the update that passes old and new values.
+ $obj = elgg_get_metadata_from_id($id);
+ elgg_trigger_event('update', 'metadata', $obj);
+ }
+
+ return $result;
+}
+
+/**
+ * This function creates metadata from an associative array of "key => value" pairs.
+ *
+ * To achieve an array for a single key, pass in the same key multiple times with
+ * allow_multiple set to TRUE. This creates an indexed array. It does not support
+ * associative arrays and there is no guarantee on the ordering in the array.
+ *
+ * @param int $entity_guid The entity to attach the metadata to
+ * @param array $name_and_values Associative array - a value can be a string, number, bool
+ * @param string $value_type 'text', 'integer', or '' for automatic detection
+ * @param int $owner_guid GUID of entity that owns the metadata
+ * @param int $access_id Default is ACCESS_PRIVATE
+ * @param bool $allow_multiple Allow multiple values for one key. Default is FALSE
+ *
+ * @return bool
+ */
+function create_metadata_from_array($entity_guid, array $name_and_values, $value_type, $owner_guid,
+$access_id = ACCESS_PRIVATE, $allow_multiple = false) {
+
+ foreach ($name_and_values as $k => $v) {
+ $result = create_metadata($entity_guid, $k, $v, $value_type, $owner_guid,
+ $access_id, $allow_multiple);
+ if (!$result) {
+ return false;
+ }
+ }
+ return true;
+}
+
+/**
+ * Returns metadata. Accepts all elgg_get_entities() options for entity
+ * restraints.
+ *
+ * @see elgg_get_entities
+ *
+ * @warning 1.7's find_metadata() didn't support limits and returned all metadata.
+ * This function defaults to a limit of 25. There is probably not a reason
+ * for you to return all metadata unless you're exporting an entity,
+ * have other restraints in place, or are doing something horribly
+ * wrong in your code.
+ *
+ * @param array $options Array in format:
+ *
+ * metadata_names => NULL|ARR metadata names
+ * metadata_values => NULL|ARR metadata values
+ * metadata_ids => NULL|ARR metadata ids
+ * metadata_case_sensitive => BOOL Overall Case sensitive
+ * metadata_owner_guids => NULL|ARR guids for metadata owners
+ * metadata_created_time_lower => INT Lower limit for created time.
+ * metadata_created_time_upper => INT Upper limit for created time.
+ * metadata_calculation => STR Perform the MySQL function on the metadata values returned.
+ * The "metadata_calculation" option causes this function to
+ * return the result of performing a mathematical calculation on
+ * all metadata that match the query instead of returning
+ * ElggMetadata objects.
+ *
+ * @return ElggMetadata[]|mixed
+ * @since 1.8.0
+ */
+function elgg_get_metadata(array $options = array()) {
+
+ // @todo remove support for count shortcut - see #4393
+ // support shortcut of 'count' => true for 'metadata_calculation' => 'count'
+ if (isset($options['count']) && $options['count']) {
+ $options['metadata_calculation'] = 'count';
+ unset($options['count']);
+ }
+
+ $options['metastring_type'] = 'metadata';
+ return elgg_get_metastring_based_objects($options);
+}
+
+/**
+ * Deletes metadata based on $options.
+ *
+ * @warning Unlike elgg_get_metadata() this will not accept an empty options array!
+ * This requires at least one constraint: metadata_owner_guid(s),
+ * metadata_name(s), metadata_value(s), or guid(s) must be set.
+ *
+ * @param array $options An options array. {@see elgg_get_metadata()}
+ * @return bool|null true on success, false on failure, null if no metadata to delete.
+ * @since 1.8.0
+ */
+function elgg_delete_metadata(array $options) {
+ if (!elgg_is_valid_options_for_batch_operation($options, 'metadata')) {
+ return false;
+ }
+ $options['metastring_type'] = 'metadata';
+ $result = elgg_batch_metastring_based_objects($options, 'elgg_batch_delete_callback', false);
+
+ // This moved last in case an object's constructor sets metadata. Currently the batch
+ // delete process has to create the entity to delete its metadata. See #5214
+ elgg_get_metadata_cache()->invalidateByOptions('delete', $options);
+
+ return $result;
+}
+
+/**
+ * Disables metadata based on $options.
+ *
+ * @warning Unlike elgg_get_metadata() this will not accept an empty options array!
+ *
+ * @param array $options An options array. {@See elgg_get_metadata()}
+ * @return bool|null true on success, false on failure, null if no metadata disabled.
+ * @since 1.8.0
+ */
+function elgg_disable_metadata(array $options) {
+ if (!elgg_is_valid_options_for_batch_operation($options, 'metadata')) {
+ return false;
+ }
+
+ elgg_get_metadata_cache()->invalidateByOptions('disable', $options);
+
+ // if we can see hidden (disabled) we need to use the offset
+ // otherwise we risk an infinite loop if there are more than 50
+ $inc_offset = access_get_show_hidden_status();
+
+ $options['metastring_type'] = 'metadata';
+ return elgg_batch_metastring_based_objects($options, 'elgg_batch_disable_callback', $inc_offset);
+}
+
+/**
+ * Enables metadata based on $options.
+ *
+ * @warning Unlike elgg_get_metadata() this will not accept an empty options array!
+ *
+ * @warning In order to enable metadata, you must first use
+ * {@link access_show_hidden_entities()}.
+ *
+ * @param array $options An options array. {@See elgg_get_metadata()}
+ * @return bool|null true on success, false on failure, null if no metadata enabled.
+ * @since 1.8.0
+ */
+function elgg_enable_metadata(array $options) {
+ if (!$options || !is_array($options)) {
+ return false;
+ }
+
+ elgg_get_metadata_cache()->invalidateByOptions('enable', $options);
+
+ $options['metastring_type'] = 'metadata';
+ return elgg_batch_metastring_based_objects($options, 'elgg_batch_enable_callback');
+}
+
+/**
+ * ElggEntities interfaces
+ */
+
+/**
+ * Returns entities based upon metadata. Also accepts all
+ * options available to elgg_get_entities(). Supports
+ * the singular option shortcut.
+ *
+ * @note Using metadata_names and metadata_values results in a
+ * "names IN (...) AND values IN (...)" clause. This is subtly
+ * differently than default multiple metadata_name_value_pairs, which use
+ * "(name = value) AND (name = value)" clauses.
+ *
+ * When in doubt, use name_value_pairs.
+ *
+ * To ask for entities that do not have a metadata value, use a custom
+ * where clause like this:
+ *
+ * $options['wheres'][] = "NOT EXISTS (
+ * SELECT 1 FROM {$dbprefix}metadata md
+ * WHERE md.entity_guid = e.guid
+ * AND md.name_id = $name_metastring_id
+ * AND md.value_id = $value_metastring_id)";
+ *
+ * Note the metadata name and value has been denormalized in the above example.
+ *
+ * @see elgg_get_entities
+ *
+ * @param array $options Array in format:
+ *
+ * metadata_names => NULL|ARR metadata names
+ *
+ * metadata_values => NULL|ARR metadata values
+ *
+ * metadata_name_value_pairs => NULL|ARR (
+ * name => 'name',
+ * value => 'value',
+ * 'operand' => '=',
+ * 'case_sensitive' => TRUE
+ * )
+ * Currently if multiple values are sent via
+ * an array (value => array('value1', 'value2')
+ * the pair's operand will be forced to "IN".
+ * If passing "IN" as the operand and a string as the value,
+ * the value must be a properly quoted and escaped string.
+ *
+ * metadata_name_value_pairs_operator => NULL|STR The operator to use for combining
+ * (name = value) OPERATOR (name = value); default AND
+ *
+ * metadata_case_sensitive => BOOL Overall Case sensitive
+ *
+ * order_by_metadata => NULL|ARR array(
+ * 'name' => 'metadata_text1',
+ * 'direction' => ASC|DESC,
+ * 'as' => text|integer
+ * )
+ * Also supports array('name' => 'metadata_text1')
+ *
+ * metadata_owner_guids => NULL|ARR guids for metadata owners
+ *
+ * @return ElggEntity[]|mixed If count, int. If not count, array. false on errors.
+ * @since 1.7.0
+ */
+function elgg_get_entities_from_metadata(array $options = array()) {
+ $defaults = array(
+ 'metadata_names' => ELGG_ENTITIES_ANY_VALUE,
+ 'metadata_values' => ELGG_ENTITIES_ANY_VALUE,
+ 'metadata_name_value_pairs' => ELGG_ENTITIES_ANY_VALUE,
+
+ 'metadata_name_value_pairs_operator' => 'AND',
+ 'metadata_case_sensitive' => TRUE,
+ 'order_by_metadata' => array(),
+
+ 'metadata_owner_guids' => ELGG_ENTITIES_ANY_VALUE,
+ );
+
+ $options = array_merge($defaults, $options);
+
+ $singulars = array('metadata_name', 'metadata_value',
+ 'metadata_name_value_pair', 'metadata_owner_guid');
+
+ $options = elgg_normalise_plural_options_array($options, $singulars);
+
+ if (!$options = elgg_entities_get_metastrings_options('metadata', $options)) {
+ return FALSE;
+ }
+
+ return elgg_get_entities($options);
+}
+
+/**
+ * Returns metadata name and value SQL where for entities.
+ * NB: $names and $values are not paired. Use $pairs for this.
+ * Pairs default to '=' operand.
+ *
+ * This function is reused for annotations because the tables are
+ * exactly the same.
+ *
+ * @param string $e_table Entities table name
+ * @param string $n_table Normalized metastrings table name (Where entities,
+ * values, and names are joined. annotations / metadata)
+ * @param array|null $names Array of names
+ * @param array|null $values Array of values
+ * @param array|null $pairs Array of names / values / operands
+ * @param string $pair_operator ("AND" or "OR") Operator to use to join the where clauses for pairs
+ * @param bool $case_sensitive Case sensitive metadata names?
+ * @param array|null $order_by_metadata Array of names / direction
+ * @param array|null $owner_guids Array of owner GUIDs
+ *
+ * @return false|array False on fail, array('joins', 'wheres')
+ * @since 1.7.0
+ * @access private
+ */
+function elgg_get_entity_metadata_where_sql($e_table, $n_table, $names = NULL, $values = NULL,
+$pairs = NULL, $pair_operator = 'AND', $case_sensitive = TRUE, $order_by_metadata = NULL,
+$owner_guids = NULL) {
+
+ global $CONFIG;
+
+ // short circuit if nothing requested
+ // 0 is a valid (if not ill-conceived) metadata name.
+ // 0 is also a valid metadata value for FALSE, NULL, or 0
+ // 0 is also a valid(ish) owner_guid
+ if ((!$names && $names !== 0)
+ && (!$values && $values !== 0)
+ && (!$pairs && $pairs !== 0)
+ && (!$owner_guids && $owner_guids !== 0)
+ && !$order_by_metadata) {
+ return '';
+ }
+
+ // join counter for incremental joins.
+ $i = 1;
+
+ // binary forces byte-to-byte comparision of strings, making
+ // it case- and diacritical-mark- sensitive.
+ // only supported on values.
+ $binary = ($case_sensitive) ? ' BINARY ' : '';
+
+ $access = get_access_sql_suffix('n_table');
+
+ $return = array (
+ 'joins' => array (),
+ 'wheres' => array(),
+ 'orders' => array()
+ );
+
+ // will always want to join these tables if pulling metastrings.
+ $return['joins'][] = "JOIN {$CONFIG->dbprefix}{$n_table} n_table on
+ {$e_table}.guid = n_table.entity_guid";
+
+ $wheres = array();
+
+ // get names wheres and joins
+ $names_where = '';
+ if ($names !== NULL) {
+ if (!is_array($names)) {
+ $names = array($names);
+ }
+
+ $sanitised_names = array();
+ foreach ($names as $name) {
+ // normalise to 0.
+ if (!$name) {
+ $name = '0';
+ }
+ $sanitised_names[] = '\'' . sanitise_string($name) . '\'';
+ }
+
+ if ($names_str = implode(',', $sanitised_names)) {
+ $return['joins'][] = "JOIN {$CONFIG->dbprefix}metastrings msn on n_table.name_id = msn.id";
+ $names_where = "(msn.string IN ($names_str))";
+ }
+ }
+
+ // get values wheres and joins
+ $values_where = '';
+ if ($values !== NULL) {
+ if (!is_array($values)) {
+ $values = array($values);
+ }
+
+ $sanitised_values = array();
+ foreach ($values as $value) {
+ // normalize to 0
+ if (!$value) {
+ $value = 0;
+ }
+ $sanitised_values[] = '\'' . sanitise_string($value) . '\'';
+ }
+
+ if ($values_str = implode(',', $sanitised_values)) {
+ $return['joins'][] = "JOIN {$CONFIG->dbprefix}metastrings msv on n_table.value_id = msv.id";
+ $values_where = "({$binary}msv.string IN ($values_str))";
+ }
+ }
+
+ if ($names_where && $values_where) {
+ $wheres[] = "($names_where AND $values_where AND $access)";
+ } elseif ($names_where) {
+ $wheres[] = "($names_where AND $access)";
+ } elseif ($values_where) {
+ $wheres[] = "($values_where AND $access)";
+ }
+
+ // add pairs
+ // pairs must be in arrays.
+ if (is_array($pairs)) {
+ // check if this is an array of pairs or just a single pair.
+ if (isset($pairs['name']) || isset($pairs['value'])) {
+ $pairs = array($pairs);
+ }
+
+ $pair_wheres = array();
+
+ // @todo when the pairs are > 3 should probably split the query up to
+ // denormalize the strings table.
+
+ foreach ($pairs as $index => $pair) {
+ // @todo move this elsewhere?
+ // support shortcut 'n' => 'v' method.
+ if (!is_array($pair)) {
+ $pair = array(
+ 'name' => $index,
+ 'value' => $pair
+ );
+ }
+
+ // must have at least a name and value
+ if (!isset($pair['name']) || !isset($pair['value'])) {
+ // @todo should probably return false.
+ continue;
+ }
+
+ // case sensitivity can be specified per pair.
+ // default to higher level setting.
+ if (isset($pair['case_sensitive'])) {
+ $pair_binary = ($pair['case_sensitive']) ? ' BINARY ' : '';
+ } else {
+ $pair_binary = $binary;
+ }
+
+ if (isset($pair['operand'])) {
+ $operand = sanitise_string($pair['operand']);
+ } else {
+ $operand = ' = ';
+ }
+
+ // for comparing
+ $trimmed_operand = trim(strtolower($operand));
+
+ $access = get_access_sql_suffix("n_table{$i}");
+ // if the value is an int, don't quote it because str '15' < str '5'
+ // if the operand is IN don't quote it because quoting should be done already.
+ if (is_numeric($pair['value'])) {
+ $value = sanitise_string($pair['value']);
+ } else if (is_bool($pair['value'])) {
+ $value = (int) $pair['value'];
+ } else if (is_array($pair['value'])) {
+ $values_array = array();
+
+ foreach ($pair['value'] as $pair_value) {
+ if (is_numeric($pair_value)) {
+ $values_array[] = sanitise_string($pair_value);
+ } else {
+ $values_array[] = "'" . sanitise_string($pair_value) . "'";
+ }
+ }
+
+ if ($values_array) {
+ $value = '(' . implode(', ', $values_array) . ')';
+ }
+
+ // @todo allow support for non IN operands with array of values.
+ // will have to do more silly joins.
+ $operand = 'IN';
+ } else if ($trimmed_operand == 'in') {
+ $value = "({$pair['value']})";
+ } else {
+ $value = "'" . sanitise_string($pair['value']) . "'";
+ }
+
+ $name = sanitise_string($pair['name']);
+
+ // @todo The multiple joins are only needed when the operator is AND
+ $return['joins'][] = "JOIN {$CONFIG->dbprefix}{$n_table} n_table{$i}
+ on {$e_table}.guid = n_table{$i}.entity_guid";
+ $return['joins'][] = "JOIN {$CONFIG->dbprefix}metastrings msn{$i}
+ on n_table{$i}.name_id = msn{$i}.id";
+ $return['joins'][] = "JOIN {$CONFIG->dbprefix}metastrings msv{$i}
+ on n_table{$i}.value_id = msv{$i}.id";
+
+ $pair_wheres[] = "(msn{$i}.string = '$name' AND {$pair_binary}msv{$i}.string
+ $operand $value AND $access)";
+
+ $i++;
+ }
+
+ if ($where = implode(" $pair_operator ", $pair_wheres)) {
+ $wheres[] = "($where)";
+ }
+ }
+
+ // add owner_guids
+ if ($owner_guids) {
+ if (is_array($owner_guids)) {
+ $sanitised = array_map('sanitise_int', $owner_guids);
+ $owner_str = implode(',', $sanitised);
+ } else {
+ $owner_str = sanitise_int($owner_guids);
+ }
+
+ $wheres[] = "(n_table.owner_guid IN ($owner_str))";
+ }
+
+ if ($where = implode(' AND ', $wheres)) {
+ $return['wheres'][] = "($where)";
+ }
+
+ if (is_array($order_by_metadata)) {
+ if ((count($order_by_metadata) > 0) && !isset($order_by_metadata[0])) {
+ // singleton, so fix
+ $order_by_metadata = array($order_by_metadata);
+ }
+ foreach ($order_by_metadata as $order_by) {
+ if (is_array($order_by) && isset($order_by['name'])) {
+ $name = sanitise_string($order_by['name']);
+ if (isset($order_by['direction'])) {
+ $direction = sanitise_string($order_by['direction']);
+ } else {
+ $direction = 'ASC';
+ }
+ $return['joins'][] = "JOIN {$CONFIG->dbprefix}{$n_table} n_table{$i}
+ on {$e_table}.guid = n_table{$i}.entity_guid";
+ $return['joins'][] = "JOIN {$CONFIG->dbprefix}metastrings msn{$i}
+ on n_table{$i}.name_id = msn{$i}.id";
+ $return['joins'][] = "JOIN {$CONFIG->dbprefix}metastrings msv{$i}
+ on n_table{$i}.value_id = msv{$i}.id";
+
+ $access = get_access_sql_suffix("n_table{$i}");
+
+ $return['wheres'][] = "(msn{$i}.string = '$name' AND $access)";
+ if (isset($order_by['as']) && $order_by['as'] == 'integer') {
+ $return['orders'][] = "CAST(msv{$i}.string AS SIGNED) $direction";
+ } else {
+ $return['orders'][] = "msv{$i}.string $direction";
+ }
+ $i++;
+ }
+ }
+ }
+
+ return $return;
+}
+
+/**
+ * Returns a list of entities filtered by provided metadata.
+ *
+ * @see elgg_get_entities_from_metadata
+ *
+ * @param array $options Options array
+ *
+ * @return array
+ * @since 1.7.0
+ */
+function elgg_list_entities_from_metadata($options) {
+ return elgg_list_entities($options, 'elgg_get_entities_from_metadata');
+}
+
+/**
+ * Other functions
+ */
+
+/**
+ * Handler called by trigger_plugin_hook on the "export" event.
+ *
+ * @param string $hook export
+ * @param string $entity_type all
+ * @param mixed $returnvalue Value returned from previous hook
+ * @param mixed $params Params
+ *
+ * @return array
+ * @access private
+ *
+ * @throws InvalidParameterException
+ */
+function export_metadata_plugin_hook($hook, $entity_type, $returnvalue, $params) {
+ // Sanity check values
+ if ((!is_array($params)) && (!isset($params['guid']))) {
+ throw new InvalidParameterException(elgg_echo('InvalidParameterException:GUIDNotForExport'));
+ }
+
+ if (!is_array($returnvalue)) {
+ throw new InvalidParameterException(elgg_echo('InvalidParameterException:NonArrayReturnValue'));
+ }
+
+ $result = elgg_get_metadata(array(
+ 'guid' => (int)$params['guid'],
+ 'limit' => 0,
+ ));
+
+ if ($result) {
+ /* @var ElggMetadata[] $result */
+ foreach ($result as $r) {
+ $returnvalue[] = $r->export();
+ }
+ }
+
+ return $returnvalue;
+}
+
+/**
+ * Takes in a comma-separated string and returns an array of tags
+ * which have been trimmed
+ *
+ * @param string $string Comma-separated tag string
+ *
+ * @return array|false An array of strings, or false on failure
+ */
+function string_to_tag_array($string) {
+ if (is_string($string)) {
+ $ar = explode(",", $string);
+ $ar = array_map('trim', $ar);
+ $ar = array_filter($ar, 'is_not_null');
+ $ar = array_map('strip_tags', $ar);
+ return $ar;
+ }
+ return false;
+}
+
+/**
+ * Takes a metadata array (which has all kinds of properties)
+ * and turns it into a simple array of strings
+ *
+ * @param array $array Metadata array
+ *
+ * @return array Array of strings
+ */
+function metadata_array_to_values($array) {
+ $valuearray = array();
+
+ if (is_array($array)) {
+ foreach ($array as $element) {
+ $valuearray[] = $element->value;
+ }
+ }
+
+ return $valuearray;
+}
+
+/**
+ * Get the URL for this metadata
+ *
+ * By default this links to the export handler in the current view.
+ *
+ * @param int $id Metadata ID
+ *
+ * @return mixed
+ */
+function get_metadata_url($id) {
+ $id = (int)$id;
+
+ if ($extender = elgg_get_metadata_from_id($id)) {
+ return get_extender_url($extender);
+ }
+ return false;
+}
+
+/**
+ * Mark entities with a particular type and subtype as having access permissions
+ * that can be changed independently from their parent entity
+ *
+ * @param string $type The type - object, user, etc
+ * @param string $subtype The subtype; all subtypes by default
+ *
+ * @return void
+ */
+function register_metadata_as_independent($type, $subtype = '*') {
+ global $CONFIG;
+ if (!isset($CONFIG->independents)) {
+ $CONFIG->independents = array();
+ }
+ $CONFIG->independents[$type][$subtype] = true;
+}
+
+/**
+ * Determines whether entities of a given type and subtype should not change
+ * their metadata in line with their parent entity
+ *
+ * @param string $type The type - object, user, etc
+ * @param string $subtype The entity subtype
+ *
+ * @return bool
+ */
+function is_metadata_independent($type, $subtype) {
+ global $CONFIG;
+ if (empty($CONFIG->independents)) {
+ return false;
+ }
+ if (!empty($CONFIG->independents[$type][$subtype])
+ || !empty($CONFIG->independents[$type]['*'])) {
+ return true;
+ }
+ return false;
+}
+
+/**
+ * When an entity is updated, resets the access ID on all of its child metadata
+ *
+ * @param string $event The name of the event
+ * @param string $object_type The type of object
+ * @param ElggEntity $object The entity itself
+ *
+ * @return true
+ */
+function metadata_update($event, $object_type, $object) {
+ if ($object instanceof ElggEntity) {
+ if (!is_metadata_independent($object->getType(), $object->getSubtype())) {
+ $db_prefix = elgg_get_config('dbprefix');
+ $access_id = (int) $object->access_id;
+ $guid = (int) $object->getGUID();
+ $query = "update {$db_prefix}metadata set access_id = {$access_id} where entity_guid = {$guid}";
+ update_data($query);
+ }
+ }
+ return true;
+}
+
+/**
+ * Register a metadata url handler.
+ *
+ * @param string $extender_name The name, default 'all'.
+ * @param string $function The function name.
+ *
+ * @return bool
+ */
+function elgg_register_metadata_url_handler($extender_name, $function) {
+ return elgg_register_extender_url_handler('metadata', $extender_name, $function);
+}
+
+/**
+ * Get the global metadata cache instance
+ *
+ * @return ElggVolatileMetadataCache
+ *
+ * @access private
+ */
+function elgg_get_metadata_cache() {
+ global $CONFIG;
+ if (empty($CONFIG->local_metadata_cache)) {
+ $CONFIG->local_metadata_cache = new ElggVolatileMetadataCache();
+ }
+ return $CONFIG->local_metadata_cache;
+}
+
+/**
+ * Invalidate the metadata cache based on options passed to various *_metadata functions
+ *
+ * @param string $action Action performed on metadata. "delete", "disable", or "enable"
+ * @param array $options Options passed to elgg_(delete|disable|enable)_metadata
+ * @return void
+ */
+function elgg_invalidate_metadata_cache($action, array $options) {
+ // remove as little as possible, optimizing for common cases
+ $cache = elgg_get_metadata_cache();
+ if (empty($options['guid'])) {
+ // safest to clear everything unless we want to make this even more complex :(
+ $cache->flush();
+ } else {
+ if (empty($options['metadata_name'])) {
+ // safest to clear the whole entity
+ $cache->clear($options['guid']);
+ } else {
+ switch ($action) {
+ case 'delete':
+ $cache->markEmpty($options['guid'], $options['metadata_name']);
+ break;
+ default:
+ $cache->markUnknown($options['guid'], $options['metadata_name']);
+ }
+ }
+ }
+}
+
+/** Register the hook */
+elgg_register_plugin_hook_handler("export", "all", "export_metadata_plugin_hook", 2);
+
+/** Call a function whenever an entity is updated **/
+elgg_register_event_handler('update', 'all', 'metadata_update');
+
+// unit testing
+elgg_register_plugin_hook_handler('unit_test', 'system', 'metadata_test');
+
+/**
+ * Metadata unit test
+ *
+ * @param string $hook unit_test
+ * @param string $type system
+ * @param mixed $value Array of other tests
+ * @param mixed $params Params
+ *
+ * @return array
+ * @access private
+ */
+function metadata_test($hook, $type, $value, $params) {
+ global $CONFIG;
+ $value[] = $CONFIG->path . 'engine/tests/api/metadata.php';
+ $value[] = $CONFIG->path . 'engine/tests/api/metadata_cache.php';
+ return $value;
+}
diff --git a/engine/lib/metastrings.php b/engine/lib/metastrings.php
index b37456b3a..57d876c06 100644
--- a/engine/lib/metastrings.php
+++ b/engine/lib/metastrings.php
@@ -1,174 +1,903 @@
<?php
- /**
- * Elgg metastrngs
- * Functions to manage object metastrings.
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd <info@elgg.com>
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
-
- /** Cache metastrings for a page */
- $METASTRINGS_CACHE = array();
-
- /** Keep a record of strings we know don't exist */
- $METASTRINGS_DEADNAME_CACHE = array();
-
- /**
- * Return the meta string id for a given tag, or false.
- *
- * @param string $string The value (whatever that is) to be stored
- * @return mixed Integer tag or false.
- */
- function get_metastring_id($string)
- {
- global $CONFIG, $METASTRINGS_CACHE, $METASTRINGS_DEADNAME_CACHE;
-
- $string = sanitise_string($string);
- $result = array_search($string, $METASTRINGS_CACHE);
- if ($result!==false) {
-
- if (isset($CONFIG->debug) && $CONFIG->debug)
- error_log("** Returning id for string:$string from cache.");
-
+/**
+ * Elgg metastrngs
+ * Functions to manage object metastrings.
+ *
+ * @package Elgg.Core
+ * @subpackage DataModel.MetaStrings
+ */
+
+/** Cache metastrings for a page */
+global $METASTRINGS_CACHE;
+$METASTRINGS_CACHE = array();
+
+/** Keep a record of strings we know don't exist */
+global $METASTRINGS_DEADNAME_CACHE;
+$METASTRINGS_DEADNAME_CACHE = array();
+
+
+
+/**
+ * Return the meta string id for a given tag, or false.
+ *
+ * @param string $string The value to store
+ * @param bool $case_sensitive Do we want to make the query case sensitive?
+ * If not there may be more than one result
+ *
+ * @return int|array|false meta string id, array of ids or false if none found
+ */
+function get_metastring_id($string, $case_sensitive = TRUE) {
+ global $CONFIG, $METASTRINGS_CACHE, $METASTRINGS_DEADNAME_CACHE;
+
+ $string = sanitise_string($string);
+
+ // caching doesn't work for case insensitive searches
+ if ($case_sensitive) {
+ $result = array_search($string, $METASTRINGS_CACHE, true);
+
+ if ($result !== false) {
+ elgg_log("** Returning id for string:$string from cache.");
return $result;
}
-
+
// See if we have previously looked for this and found nothing
- if (in_array($string, $METASTRINGS_DEADNAME_CACHE))
+ if (in_array($string, $METASTRINGS_DEADNAME_CACHE, true)) {
return false;
-
+ }
+
// Experimental memcache
$msfc = null;
static $metastrings_memcache;
- if ((!$metastrings_memcache) && (is_memcache_available()))
+ if ((!$metastrings_memcache) && (is_memcache_available())) {
$metastrings_memcache = new ElggMemcache('metastrings_memcache');
- if ($metastrings_memcache) $msfc = $metastrings_memcache->load($string);
- if ($msfc) return $msfc;
-
- $row = get_data_row("SELECT * from {$CONFIG->dbprefix}metastrings where string='$string' limit 1");
- if ($row) {
- $METASTRINGS_CACHE[$row->id] = $row->string; // Cache it
-
- // Attempt to memcache it if memcache is available
- if ($metastrings_memcache) $metastrings_memcache->save($row->string, $row->id);
-
- if (isset($CONFIG->debug) && $CONFIG->debug)
- error_log("** Cacheing string '{$row->string}'");
-
- return $row->id;
- }
- else
- $METASTRINGS_DEADNAME_CACHE[$string] = $string;
-
+ }
+ if ($metastrings_memcache) {
+ $msfc = $metastrings_memcache->load($string);
+ }
+ if ($msfc) {
+ return $msfc;
+ }
+ }
+
+ // Case sensitive
+ if ($case_sensitive) {
+ $query = "SELECT * from {$CONFIG->dbprefix}metastrings where string= BINARY '$string' limit 1";
+ } else {
+ $query = "SELECT * from {$CONFIG->dbprefix}metastrings where string = '$string'";
+ }
+
+ $row = FALSE;
+ $metaStrings = get_data($query);
+ if (is_array($metaStrings)) {
+ if (sizeof($metaStrings) > 1) {
+ $ids = array();
+ foreach ($metaStrings as $metaString) {
+ $ids[] = $metaString->id;
+ }
+ return $ids;
+ } else if (isset($metaStrings[0])) {
+ $row = $metaStrings[0];
+ }
+ }
+
+ if ($row) {
+ $METASTRINGS_CACHE[$row->id] = $row->string; // Cache it
+
+ // Attempt to memcache it if memcache is available
+ if ($metastrings_memcache) {
+ $metastrings_memcache->save($row->string, $row->id);
+ }
+
+ elgg_log("** Cacheing string '{$row->string}'");
+
+ return $row->id;
+ } else {
+ $METASTRINGS_DEADNAME_CACHE[$string] = $string;
+ }
+
+ return false;
+}
+
+/**
+ * When given an ID, returns the corresponding metastring
+ *
+ * @param int $id Metastring ID
+ *
+ * @return string Metastring
+ */
+function get_metastring($id) {
+ global $CONFIG, $METASTRINGS_CACHE;
+
+ $id = (int) $id;
+
+ if (isset($METASTRINGS_CACHE[$id])) {
+ elgg_log("** Returning string for id:$id from cache.");
+
+ return $METASTRINGS_CACHE[$id];
+ }
+
+ $row = get_data_row("SELECT * from {$CONFIG->dbprefix}metastrings where id='$id' limit 1");
+ if ($row) {
+ $METASTRINGS_CACHE[$id] = $row->string; // Cache it
+ elgg_log("** Cacheing string '{$row->string}'");
+
+ return $row->string;
+ }
+
+ return false;
+}
+
+/**
+ * Add a metastring.
+ * It returns the id of the tag, whether by creating it or updating it.
+ *
+ * @param string $string The value (whatever that is) to be stored
+ * @param bool $case_sensitive Do we want to make the query case sensitive?
+ *
+ * @return mixed Integer tag or false.
+ */
+function add_metastring($string, $case_sensitive = true) {
+ global $CONFIG, $METASTRINGS_CACHE, $METASTRINGS_DEADNAME_CACHE;
+
+ $sanstring = sanitise_string($string);
+
+ $id = get_metastring_id($string, $case_sensitive);
+ if ($id) {
+ return $id;
+ }
+
+ $result = insert_data("INSERT into {$CONFIG->dbprefix}metastrings (string) values ('$sanstring')");
+ if ($result) {
+ $METASTRINGS_CACHE[$result] = $string;
+ if (isset($METASTRINGS_DEADNAME_CACHE[$string])) {
+ unset($METASTRINGS_DEADNAME_CACHE[$string]);
+ }
+ }
+
+ return $result;
+}
+
+/**
+ * Delete any orphaned entries in metastrings. This is run by the garbage collector.
+ *
+ * @return bool
+ * @access private
+ */
+function delete_orphaned_metastrings() {
+ global $CONFIG;
+
+ // If memcache is enabled then we need to flush it of deleted values
+ if (is_memcache_available()) {
+ $select_query = "
+ SELECT *
+ from {$CONFIG->dbprefix}metastrings where
+ (
+ (id not in (select name_id from {$CONFIG->dbprefix}metadata)) AND
+ (id not in (select value_id from {$CONFIG->dbprefix}metadata)) AND
+ (id not in (select name_id from {$CONFIG->dbprefix}annotations)) AND
+ (id not in (select value_id from {$CONFIG->dbprefix}annotations))
+ )";
+
+ $dead = get_data($select_query);
+ if ($dead) {
+ static $metastrings_memcache;
+ if (!$metastrings_memcache) {
+ $metastrings_memcache = new ElggMemcache('metastrings_memcache');
+ }
+
+ foreach ($dead as $d) {
+ $metastrings_memcache->delete($d->string);
+ }
+ }
+ }
+
+ $query = "
+ DELETE
+ from {$CONFIG->dbprefix}metastrings where
+ (
+ (id not in (select name_id from {$CONFIG->dbprefix}metadata)) AND
+ (id not in (select value_id from {$CONFIG->dbprefix}metadata)) AND
+ (id not in (select name_id from {$CONFIG->dbprefix}annotations)) AND
+ (id not in (select value_id from {$CONFIG->dbprefix}annotations))
+ )";
+
+ return delete_data($query);
+}
+
+/**
+ * Returns an array of either ElggAnnotation or ElggMetadata objects.
+ * Accepts all elgg_get_entities() options for entity restraints.
+ *
+ * @see elgg_get_entities
+ *
+ * @param array $options Array in format:
+ *
+ * metastring_names => NULL|ARR metastring names
+ *
+ * metastring_values => NULL|ARR metastring values
+ *
+ * metastring_ids => NULL|ARR metastring ids
+ *
+ * metastring_case_sensitive => BOOL Overall Case sensitive
+ *
+ * metastring_owner_guids => NULL|ARR Guids for metadata owners
+ *
+ * metastring_created_time_lower => INT Lower limit for created time.
+ *
+ * metastring_created_time_upper => INT Upper limit for created time.
+ *
+ * metastring_calculation => STR Perform the MySQL function on the metastring values
+ * returned.
+ * This differs from egef_annotation_calculation in that
+ * it returns only the calculation of all annotation values.
+ * You can sum, avg, count, etc. egef_annotation_calculation()
+ * returns ElggEntities ordered by a calculation on their
+ * annotation values.
+ *
+ * metastring_type => STR metadata or annotation(s)
+ *
+ * @return mixed
+ * @access private
+ */
+function elgg_get_metastring_based_objects($options) {
+ $options = elgg_normalize_metastrings_options($options);
+
+ switch ($options['metastring_type']) {
+ case 'metadata':
+ $type = 'metadata';
+ $callback = 'row_to_elggmetadata';
+ break;
+
+ case 'annotations':
+ case 'annotation':
+ $type = 'annotations';
+ $callback = 'row_to_elggannotation';
+ break;
+
+ default:
+ return false;
+ }
+
+ $defaults = array(
+ // entities
+ 'types' => ELGG_ENTITIES_ANY_VALUE,
+ 'subtypes' => ELGG_ENTITIES_ANY_VALUE,
+ 'type_subtype_pairs' => ELGG_ENTITIES_ANY_VALUE,
+
+ 'guids' => ELGG_ENTITIES_ANY_VALUE,
+ 'owner_guids' => ELGG_ENTITIES_ANY_VALUE,
+ 'container_guids' => ELGG_ENTITIES_ANY_VALUE,
+ 'site_guids' => get_config('site_guid'),
+
+ 'modified_time_lower' => ELGG_ENTITIES_ANY_VALUE,
+ 'modified_time_upper' => ELGG_ENTITIES_ANY_VALUE,
+ 'created_time_lower' => ELGG_ENTITIES_ANY_VALUE,
+ 'created_time_upper' => ELGG_ENTITIES_ANY_VALUE,
+
+ // options are normalized to the plural in case we ever add support for them.
+ 'metastring_names' => ELGG_ENTITIES_ANY_VALUE,
+ 'metastring_values' => ELGG_ENTITIES_ANY_VALUE,
+ //'metastring_name_value_pairs' => ELGG_ENTITIES_ANY_VALUE,
+ //'metastring_name_value_pairs_operator' => 'AND',
+
+ 'metastring_case_sensitive' => TRUE,
+ //'order_by_metastring' => array(),
+ 'metastring_calculation' => ELGG_ENTITIES_NO_VALUE,
+
+ 'metastring_created_time_lower' => ELGG_ENTITIES_ANY_VALUE,
+ 'metastring_created_time_upper' => ELGG_ENTITIES_ANY_VALUE,
+
+ 'metastring_owner_guids' => ELGG_ENTITIES_ANY_VALUE,
+
+ 'metastring_ids' => ELGG_ENTITIES_ANY_VALUE,
+
+ // sql
+ 'order_by' => 'n_table.time_created asc',
+ 'limit' => 10,
+ 'offset' => 0,
+ 'count' => FALSE,
+ 'selects' => array(),
+ 'wheres' => array(),
+ 'joins' => array(),
+
+ 'callback' => $callback
+ );
+
+ // @todo Ignore site_guid right now because of #2910
+ $options['site_guid'] = ELGG_ENTITIES_ANY_VALUE;
+
+ $options = array_merge($defaults, $options);
+
+ // can't use helper function with type_subtype_pair because
+ // it's already an array...just need to merge it
+ if (isset($options['type_subtype_pair'])) {
+ if (isset($options['type_subtype_pairs'])) {
+ $options['type_subtype_pairs'] = array_merge($options['type_subtype_pairs'],
+ $options['type_subtype_pair']);
+ } else {
+ $options['type_subtype_pairs'] = $options['type_subtype_pair'];
+ }
+ }
+
+ $singulars = array(
+ 'type', 'subtype', 'type_subtype_pair',
+ 'guid', 'owner_guid', 'container_guid', 'site_guid',
+ 'metastring_name', 'metastring_value',
+ 'metastring_owner_guid', 'metastring_id',
+ 'select', 'where', 'join'
+ );
+
+ $options = elgg_normalise_plural_options_array($options, $singulars);
+
+ if (!$options) {
return false;
- }
-
- /**
- * When given an ID, returns the corresponding metastring
- *
- * @param int $id Metastring ID
- * @return string Metastring
- */
- function get_metastring($id) {
-
- global $CONFIG, $METASTRINGS_CACHE;
-
- $id = (int) $id;
-
- if (isset($METASTRINGS_CACHE[$id])) {
-
- if ($CONFIG->debug)
- error_log("** Returning string for id:$id from cache.");
-
- return $METASTRINGS_CACHE[$id];
- }
-
- $row = get_data_row("SELECT * from {$CONFIG->dbprefix}metastrings where id='$id' limit 1");
- if ($row) {
- $METASTRINGS_CACHE[$id] = $row->string; // Cache it
-
- if ($CONFIG->debug)
- error_log("** Cacheing string '{$row->string}'");
-
- return $row->string;
- }
-
- return false;
-
- }
-
- /**
- * Add a metastring.
- * It returns the id of the tag, whether by creating it or updating it.
- *
- * @param string $string The value (whatever that is) to be stored
- * @return mixed Integer tag or false.
- */
- function add_metastring($string)
- {
- global $CONFIG, $METASTRINGS_CACHE, $METASTRINGS_DEADNAME_CACHE;
-
- $sanstring = sanitise_string($string);
-
- $id = get_metastring_id($string);
- if ($id) return $id;
-
- $result = insert_data("INSERT into {$CONFIG->dbprefix}metastrings (string) values ('$sanstring')");
- if ($result) {
- $METASTRINGS_CACHE[$result] = $string;
- if (isset($METASTRINGS_DEADNAME_CACHE[$string])) unset($METASTRINGS_DEADNAME_CACHE[$string]);
- }
-
- return $result;
}
+
+ $db_prefix = elgg_get_config('dbprefix');
+
+ // evaluate where clauses
+ if (!is_array($options['wheres'])) {
+ $options['wheres'] = array($options['wheres']);
+ }
+
+ $wheres = $options['wheres'];
+
+ // entities
+ $wheres[] = elgg_get_entity_type_subtype_where_sql('e', $options['types'],
+ $options['subtypes'], $options['type_subtype_pairs']);
+
+ $wheres[] = elgg_get_guid_based_where_sql('e.guid', $options['guids']);
+ $wheres[] = elgg_get_guid_based_where_sql('e.owner_guid', $options['owner_guids']);
+ $wheres[] = elgg_get_guid_based_where_sql('e.container_guid', $options['container_guids']);
+ $wheres[] = elgg_get_guid_based_where_sql('e.site_guid', $options['site_guids']);
+
+ $wheres[] = elgg_get_entity_time_where_sql('e', $options['created_time_upper'],
+ $options['created_time_lower'], $options['modified_time_upper'], $options['modified_time_lower']);
+
+
+ $wheres[] = elgg_get_entity_time_where_sql('n_table', $options['metastring_created_time_upper'],
+ $options['metastring_created_time_lower'], null, null);
+
+ $wheres[] = elgg_get_guid_based_where_sql('n_table.owner_guid',
+ $options['metastring_owner_guids']);
+
+ // see if any functions failed
+ // remove empty strings on successful functions
+ foreach ($wheres as $i => $where) {
+ if ($where === FALSE) {
+ return FALSE;
+ } elseif (empty($where)) {
+ unset($wheres[$i]);
+ }
+ }
+
+ // remove identical where clauses
+ $wheres = array_unique($wheres);
+
+ // evaluate join clauses
+ if (!is_array($options['joins'])) {
+ $options['joins'] = array($options['joins']);
+ }
+
+ $joins = $options['joins'];
+ $joins[] = "JOIN {$db_prefix}entities e ON n_table.entity_guid = e.guid";
+
+ // evaluate selects
+ if (!is_array($options['selects'])) {
+ $options['selects'] = array($options['selects']);
+ }
+
+ $selects = $options['selects'];
+
+ // For performance reasons we don't want the joins required for metadata / annotations
+ // unless we're going through one of their callbacks.
+ // this means we expect the functions passing different callbacks to pass their required joins.
+ // If we're doing a calculation
+ $custom_callback = ($options['callback'] == 'row_to_elggmetadata'
+ || $options['callback'] == 'row_to_elggannotation');
+ $is_calculation = $options['metastring_calculation'] ? true : false;
- /**
- * Delete any orphaned entries in metastrings. This is run by the garbage collector.
- *
- */
- function delete_orphaned_metastrings()
- {
- global $CONFIG;
-
- // If memcache is enabled then we need to flush it of deleted values
- if (is_memcache_available())
- {
- $select_query = "
- SELECT *
- from {$CONFIG->dbprefix}metastrings where
- (
- (id not in (select name_id from {$CONFIG->dbprefix}metadata)) AND
- (id not in (select value_id from {$CONFIG->dbprefix}metadata)) AND
- (id not in (select name_id from {$CONFIG->dbprefix}annotations)) AND
- (id not in (select value_id from {$CONFIG->dbprefix}annotations))
- )";
-
- $dead = get_data($select_query);
- if ($dead)
- {
- static $metastrings_memcache;
- if (!$metastrings_memcache)
- $metastrings_memcache = new ElggMemcache('metastrings_memcache');
- foreach ($dead as $d)
- $metastrings_memcache->delete($d->string);
+ if ($custom_callback || $is_calculation) {
+ $joins[] = "JOIN {$db_prefix}metastrings n on n_table.name_id = n.id";
+ $joins[] = "JOIN {$db_prefix}metastrings v on n_table.value_id = v.id";
+
+ $selects[] = 'n.string as name';
+ $selects[] = 'v.string as value';
+ }
+
+ foreach ($joins as $i => $join) {
+ if ($join === FALSE) {
+ return FALSE;
+ } elseif (empty($join)) {
+ unset($joins[$i]);
+ }
+ }
+
+ // metastrings
+ $metastring_clauses = elgg_get_metastring_sql('n_table', $options['metastring_names'],
+ $options['metastring_values'], null, $options['metastring_ids'],
+ $options['metastring_case_sensitive']);
+
+ if ($metastring_clauses) {
+ $wheres = array_merge($wheres, $metastring_clauses['wheres']);
+ $joins = array_merge($joins, $metastring_clauses['joins']);
+ } else {
+ $wheres[] = get_access_sql_suffix('n_table');
+ }
+
+ if ($options['metastring_calculation'] === ELGG_ENTITIES_NO_VALUE && !$options['count']) {
+ $selects = array_unique($selects);
+ // evalutate selects
+ $select_str = '';
+ if ($selects) {
+ foreach ($selects as $select) {
+ $select_str .= ", $select";
}
}
-
- $query = "
- DELETE
- from {$CONFIG->dbprefix}metastrings where
- (
- (id not in (select name_id from {$CONFIG->dbprefix}metadata)) AND
- (id not in (select value_id from {$CONFIG->dbprefix}metadata)) AND
- (id not in (select name_id from {$CONFIG->dbprefix}annotations)) AND
- (id not in (select value_id from {$CONFIG->dbprefix}annotations))
- )";
-
- return delete_data($query);
+
+ $query = "SELECT DISTINCT n_table.*{$select_str} FROM {$db_prefix}$type n_table";
+ } elseif ($options['count']) {
+ // count is over the entities
+ $query = "SELECT count(DISTINCT e.guid) as calculation FROM {$db_prefix}$type n_table";
+ } else {
+ $query = "SELECT {$options['metastring_calculation']}(v.string) as calculation FROM {$db_prefix}$type n_table";
}
-
-?> \ No newline at end of file
+
+ // remove identical join clauses
+ $joins = array_unique($joins);
+
+ // add joins
+ foreach ($joins as $j) {
+ $query .= " $j ";
+ }
+
+ // add wheres
+ $query .= ' WHERE ';
+
+ foreach ($wheres as $w) {
+ $query .= " $w AND ";
+ }
+
+ // Add access controls
+ $query .= get_access_sql_suffix('e');
+
+ // reverse order by
+ if (isset($options['reverse_order_by']) && $options['reverse_order_by']) {
+ $options['order_by'] = elgg_sql_reverse_order_by_clause($options['order_by'],
+ $defaults['order_by']);
+ }
+
+ if ($options['metastring_calculation'] === ELGG_ENTITIES_NO_VALUE && !$options['count']) {
+ if (isset($options['group_by'])) {
+ $options['group_by'] = sanitise_string($options['group_by']);
+ $query .= " GROUP BY {$options['group_by']}";
+ }
+
+ if (isset($options['order_by']) && $options['order_by']) {
+ $options['order_by'] = sanitise_string($options['order_by']);
+ $query .= " ORDER BY {$options['order_by']}, n_table.id";
+ }
+
+ if ($options['limit']) {
+ $limit = sanitise_int($options['limit']);
+ $offset = sanitise_int($options['offset'], false);
+ $query .= " LIMIT $offset, $limit";
+ }
+
+ $dt = get_data($query, $options['callback']);
+ return $dt;
+ } else {
+ $result = get_data_row($query);
+ return $result->calculation;
+ }
+}
+
+/**
+ * Returns an array of joins and wheres for use in metastrings.
+ *
+ * @note The $pairs is reserved for name/value pairs if we want to implement those.
+ *
+ * @param string $table The annotation or metadata table name or alias
+ * @param array $names An array of names
+ * @param array $values An array of values
+ * @param array $pairs Name / value pairs. Not currently used.
+ * @param array $ids Metastring IDs
+ * @param bool $case_sensitive Should name and values be case sensitive?
+ *
+ * @return array
+ * @access private
+ */
+function elgg_get_metastring_sql($table, $names = null, $values = null,
+ $pairs = null, $ids = null, $case_sensitive = false) {
+
+ if ((!$names && $names !== 0)
+ && (!$values && $values !== 0)
+ && !$ids
+ && (!$pairs && $pairs !== 0)) {
+
+ return array();
+ }
+
+ $db_prefix = elgg_get_config('dbprefix');
+
+ // binary forces byte-to-byte comparision of strings, making
+ // it case- and diacritical-mark- sensitive.
+ // only supported on values.
+ $binary = ($case_sensitive) ? ' BINARY ' : '';
+
+ $return = array (
+ 'joins' => array (),
+ 'wheres' => array()
+ );
+
+ $wheres = array();
+
+ // get names wheres and joins
+ $names_where = '';
+ if ($names !== NULL) {
+ if (!is_array($names)) {
+ $names = array($names);
+ }
+
+ $sanitised_names = array();
+ foreach ($names as $name) {
+ // normalise to 0.
+ if (!$name) {
+ $name = '0';
+ }
+ $sanitised_names[] = '\'' . sanitise_string($name) . '\'';
+ }
+
+ if ($names_str = implode(',', $sanitised_names)) {
+ $return['joins'][] = "JOIN {$db_prefix}metastrings msn on $table.name_id = msn.id";
+ $names_where = "(msn.string IN ($names_str))";
+ }
+ }
+
+ // get values wheres and joins
+ $values_where = '';
+ if ($values !== NULL) {
+ if (!is_array($values)) {
+ $values = array($values);
+ }
+
+ $sanitised_values = array();
+ foreach ($values as $value) {
+ // normalize to 0
+ if (!$value) {
+ $value = 0;
+ }
+ $sanitised_values[] = '\'' . sanitise_string($value) . '\'';
+ }
+
+ if ($values_str = implode(',', $sanitised_values)) {
+ $return['joins'][] = "JOIN {$db_prefix}metastrings msv on $table.value_id = msv.id";
+ $values_where = "({$binary}msv.string IN ($values_str))";
+ }
+ }
+
+ if ($ids !== NULL) {
+ if (!is_array($ids)) {
+ $ids = array($ids);
+ }
+
+ $ids_str = implode(',', $ids);
+
+ if ($ids_str) {
+ $wheres[] = "n_table.id IN ($ids_str)";
+ }
+ }
+
+ if ($names_where && $values_where) {
+ $wheres[] = "($names_where AND $values_where)";
+ } elseif ($names_where) {
+ $wheres[] = $names_where;
+ } elseif ($values_where) {
+ $wheres[] = $values_where;
+ }
+
+ $wheres[] = get_access_sql_suffix($table);
+
+ if ($where = implode(' AND ', $wheres)) {
+ $return['wheres'][] = "($where)";
+ }
+
+ return $return;
+}
+
+/**
+ * Normalizes metadata / annotation option names to their corresponding metastrings name.
+ *
+ * @param array $options An options array
+ * @since 1.8.0
+ * @return array
+ * @access private
+ */
+function elgg_normalize_metastrings_options(array $options = array()) {
+
+ // support either metastrings_type or metastring_type
+ // because I've made this mistake many times and hunting it down is a pain...
+ $type = elgg_extract('metastring_type', $options, null);
+ $type = elgg_extract('metastrings_type', $options, $type);
+
+ $options['metastring_type'] = $type;
+
+ // support annotation_ and annotations_ because they're way too easy to confuse
+ $prefixes = array('metadata_', 'annotation_', 'annotations_');
+
+ // map the metadata_* options to metastring_* options
+ $map = array(
+ 'names' => 'metastring_names',
+ 'values' => 'metastring_values',
+ 'case_sensitive' => 'metastring_case_sensitive',
+ 'owner_guids' => 'metastring_owner_guids',
+ 'created_time_lower' => 'metastring_created_time_lower',
+ 'created_time_upper' => 'metastring_created_time_upper',
+ 'calculation' => 'metastring_calculation',
+ 'ids' => 'metastring_ids'
+ );
+
+ foreach ($prefixes as $prefix) {
+ $singulars = array("{$prefix}name", "{$prefix}value", "{$prefix}owner_guid", "{$prefix}id");
+ $options = elgg_normalise_plural_options_array($options, $singulars);
+
+ foreach ($map as $specific => $normalized) {
+ $key = $prefix . $specific;
+ if (isset($options[$key])) {
+ $options[$normalized] = $options[$key];
+ }
+ }
+ }
+
+ return $options;
+}
+
+/**
+ * Enables or disables a metastrings-based object by its id.
+ *
+ * @warning To enable disabled metastrings you must first use
+ * {@link access_show_hidden_entities()}.
+ *
+ * @param int $id The object's ID
+ * @param string $enabled Value to set to: yes or no
+ * @param string $type The type of table to use: metadata or annotations
+ *
+ * @return bool
+ * @throws InvalidParameterException
+ * @since 1.8.0
+ * @access private
+ */
+function elgg_set_metastring_based_object_enabled_by_id($id, $enabled, $type) {
+ $id = (int)$id;
+ $db_prefix = elgg_get_config('dbprefix');
+
+ $object = elgg_get_metastring_based_object_from_id($id, $type);
+
+ switch($type) {
+ case 'annotation':
+ case 'annotations':
+ $table = "{$db_prefix}annotations";
+ break;
+
+ case 'metadata':
+ $table = "{$db_prefix}metadata";
+ break;
+ }
+
+ if ($enabled === 'yes' || $enabled === 1 || $enabled === true) {
+ $enabled = 'yes';
+ $event = 'enable';
+ } elseif ($enabled === 'no' || $enabled === 0 || $enabled === false) {
+ $enabled = 'no';
+ $event = 'disable';
+ } else {
+ return false;
+ }
+
+ $return = false;
+
+ if ($object) {
+ // don't set it if it's already set.
+ if ($object->enabled == $enabled) {
+ $return = false;
+ } elseif ($object->canEdit() && (elgg_trigger_event($event, $type, $object))) {
+ $return = update_data("UPDATE $table SET enabled = '$enabled' where id = $id");
+ }
+ }
+
+ return $return;
+}
+
+/**
+ * Runs metastrings-based objects found using $options through $callback
+ *
+ * @warning Unlike elgg_get_metastring_based_objects() this will not accept an
+ * empty options array!
+ *
+ * @warning This returns null on no ops.
+ *
+ * @param array $options An options array. {@See elgg_get_metastring_based_objects()}
+ * @param string $callback The callback to pass each result through
+ * @param bool $inc_offset Increment the offset? Pass false for callbacks that delete / disable
+ *
+ * @return bool|null true on success, false on failure, null if no objects are found.
+ * @since 1.8.0
+ * @access private
+ */
+function elgg_batch_metastring_based_objects(array $options, $callback, $inc_offset = true) {
+ if (!$options || !is_array($options)) {
+ return false;
+ }
+
+ $batch = new ElggBatch('elgg_get_metastring_based_objects', $options, $callback, 50, $inc_offset);
+ return $batch->callbackResult;
+}
+
+/**
+ * Returns a singular metastring-based object by its ID.
+ *
+ * @param int $id The metastring-based object's ID
+ * @param string $type The type: annotation or metadata
+ * @return ElggMetadata|ElggAnnotation
+ *
+ * @since 1.8.0
+ * @access private
+ */
+function elgg_get_metastring_based_object_from_id($id, $type) {
+ $id = (int)$id;
+ if (!$id) {
+ return false;
+ }
+
+ $options = array(
+ 'metastring_type' => $type,
+ 'metastring_id' => $id
+ );
+
+ $obj = elgg_get_metastring_based_objects($options);
+
+ if ($obj && count($obj) == 1) {
+ return $obj[0];
+ }
+
+ return false;
+}
+
+/**
+ * Deletes a metastring-based object by its id
+ *
+ * @param int $id The object's ID
+ * @param string $type The object's metastring type: annotation or metadata
+ * @return bool
+ *
+ * @since 1.8.0
+ * @access private
+ */
+function elgg_delete_metastring_based_object_by_id($id, $type) {
+ $id = (int)$id;
+ $db_prefix = elgg_get_config('dbprefix');
+
+ switch ($type) {
+ case 'annotation':
+ case 'annotations':
+ $type = 'annotations';
+ break;
+
+ case 'metadata':
+ $type = 'metadata';
+ break;
+
+ default:
+ return false;
+ }
+
+ $obj = elgg_get_metastring_based_object_from_id($id, $type);
+ $table = $db_prefix . $type;
+
+ if ($obj) {
+ // Tidy up if memcache is enabled.
+ // @todo only metadata is supported
+ if ($type == 'metadata') {
+ static $metabyname_memcache;
+ if ((!$metabyname_memcache) && (is_memcache_available())) {
+ $metabyname_memcache = new ElggMemcache('metabyname_memcache');
+ }
+
+ if ($metabyname_memcache) {
+ // @todo why name_id? is that even populated?
+ $metabyname_memcache->delete("{$obj->entity_guid}:{$obj->name_id}");
+ }
+ }
+
+ if (($obj->canEdit()) && (elgg_trigger_event('delete', $type, $obj))) {
+ return (bool)delete_data("DELETE from $table where id=$id");
+ }
+ }
+
+ return false;
+}
+
+/**
+ * Entities interface helpers
+ */
+
+/**
+ * Returns options to pass to elgg_get_entities() for metastrings operations.
+ *
+ * @param string $type Metastring type: annotations or metadata
+ * @param array $options Options
+ *
+ * @return array
+ * @since 1.7.0
+ * @access private
+ */
+function elgg_entities_get_metastrings_options($type, $options) {
+ $valid_types = array('metadata', 'annotation');
+ if (!in_array($type, $valid_types)) {
+ return FALSE;
+ }
+
+ // the options for annotations are singular (annotation_name) but the table
+ // is plural (elgg_annotations) so rewrite for the table name.
+ $n_table = ($type == 'annotation') ? 'annotations' : $type;
+
+ $singulars = array("{$type}_name", "{$type}_value",
+ "{$type}_name_value_pair", "{$type}_owner_guid");
+ $options = elgg_normalise_plural_options_array($options, $singulars);
+
+ $clauses = elgg_get_entity_metadata_where_sql('e', $n_table, $options["{$type}_names"],
+ $options["{$type}_values"], $options["{$type}_name_value_pairs"],
+ $options["{$type}_name_value_pairs_operator"], $options["{$type}_case_sensitive"],
+ $options["order_by_{$type}"], $options["{$type}_owner_guids"]);
+
+ if ($clauses) {
+ // merge wheres to pass to get_entities()
+ if (isset($options['wheres']) && !is_array($options['wheres'])) {
+ $options['wheres'] = array($options['wheres']);
+ } elseif (!isset($options['wheres'])) {
+ $options['wheres'] = array();
+ }
+
+ $options['wheres'] = array_merge($options['wheres'], $clauses['wheres']);
+
+ // merge joins to pass to get_entities()
+ if (isset($options['joins']) && !is_array($options['joins'])) {
+ $options['joins'] = array($options['joins']);
+ } elseif (!isset($options['joins'])) {
+ $options['joins'] = array();
+ }
+
+ $options['joins'] = array_merge($options['joins'], $clauses['joins']);
+
+ if ($clauses['orders']) {
+ $order_by_metadata = implode(", ", $clauses['orders']);
+ if (isset($options['order_by']) && $options['order_by']) {
+ $options['order_by'] = "$order_by_metadata, {$options['order_by']}";
+ } else {
+ $options['order_by'] = "$order_by_metadata, e.time_created DESC";
+ }
+ }
+ }
+
+ return $options;
+}
+
+// unit testing
+elgg_register_plugin_hook_handler('unit_test', 'system', 'metastrings_test');
+
+/**
+ * Metadata unit test
+ *
+ * @param string $hook unit_test
+ * @param string $type system
+ * @param mixed $value Array of other tests
+ * @param mixed $params Params
+ *
+ * @return array
+ * @access private
+ */
+function metastrings_test($hook, $type, $value, $params) {
+ global $CONFIG;
+ $value[] = $CONFIG->path . 'engine/tests/api/metastrings.php';
+ return $value;
+}
diff --git a/engine/lib/navigation.php b/engine/lib/navigation.php
new file mode 100644
index 000000000..ab9cc05e8
--- /dev/null
+++ b/engine/lib/navigation.php
@@ -0,0 +1,527 @@
+<?php
+/**
+ * Elgg navigation library
+ * Functions for managing menus and other navigational elements
+ *
+ * Breadcrumbs
+ * Elgg uses a breadcrumb stack. The page handlers (controllers in MVC terms)
+ * push the breadcrumb links onto the stack. @see elgg_push_breadcrumb()
+ *
+ *
+ * Pagination
+ * Automatically handled by Elgg when using elgg_list_entities* functions.
+ * @see elgg_list_entities()
+ *
+ *
+ * Tabs
+ * @see navigation/tabs view
+ *
+ *
+ * Menus
+ * Elgg uses a single interface to manage its menus. Menu items are added with
+ * {@link elgg_register_menu_item()}. This is generally used for menus that
+ * appear only once per page. For dynamic menus (such as the hover
+ * menu for user's avatar), a plugin hook is emitted when the menu is being
+ * created. The hook is 'register', 'menu:<menu_name>'. For more details on this,
+ * @see elgg_view_menu().
+ *
+ * Menus supported by the Elgg core
+ * Standard menus:
+ * site Site navigation shown on every page.
+ * page Page menu usually shown in a sidebar. Uses Elgg's context.
+ * topbar Topbar menu shown on every page. The default has two sections.
+ * footer Like the topbar but in the footer.
+ * extras Links about content on the page. The RSS link is added to this.
+ *
+ * Dynamic menus (also called just-in-time menus):
+ * user_hover Avatar hover menu. The user entity is passed as a parameter.
+ * entity The set of links shown in the summary of an entity.
+ * river Links shown on river items.
+ * owner_block Links shown for a user or group in their owner block.
+ * filter The tab filter for content (all, mine, friends)
+ * title The buttons shown next to a content title.
+ * long-text The links shown above the input/longtext view.
+ *
+ * @package Elgg.Core
+ * @subpackage Navigation
+ */
+
+/**
+ * Register an item for an Elgg menu
+ *
+ * @warning Generally you should not use this in response to the plugin hook:
+ * 'register', 'menu:<menu_name>'. If you do, you may end up with many incorrect
+ * links on a dynamic menu.
+ *
+ * @warning A menu item's name must be unique per menu. If more than one menu
+ * item with the same name are registered, the last menu item takes priority.
+ *
+ * @see elgg_view_menu() for the plugin hooks available for modifying a menu as
+ * it is being rendered.
+ *
+ * @param string $menu_name The name of the menu: site, page, userhover,
+ * userprofile, groupprofile, or any custom menu
+ * @param mixed $menu_item A ElggMenuItem object or an array of options in format:
+ * name => STR Menu item identifier (required)
+ * text => STR Menu item display text (required)
+ * href => STR Menu item URL (required) (false for non-links.
+ * @warning If you disable the href the <a> tag will
+ * not appear, so the link_class will not apply. If you
+ * put <a> tags in manually through the 'text' option
+ * the default CSS selector .elgg-menu-$menu > li > a
+ * may affect formatting. Wrap in a <span> if it does.)
+ * contexts => ARR Page context strings
+ * section => STR Menu section identifier
+ * title => STR Menu item tooltip
+ * selected => BOOL Is this menu item currently selected
+ * parent_name => STR Identifier of the parent menu item
+ * link_class => STR A class or classes for the <a> tag
+ * item_class => STR A class or classes for the <li> tag
+ *
+ * Additional options that the view output/url takes can be
+ * passed in the array. If the 'confirm' key is passed, the
+ * menu link uses the 'output/confirmlink' view. Custom
+ * options can be added by using the 'data' key with the
+ * value being an associative array.
+ *
+ * @return bool
+ * @since 1.8.0
+ */
+function elgg_register_menu_item($menu_name, $menu_item) {
+ global $CONFIG;
+
+ if (!isset($CONFIG->menus[$menu_name])) {
+ $CONFIG->menus[$menu_name] = array();
+ }
+
+ if (is_array($menu_item)) {
+ $item = ElggMenuItem::factory($menu_item);
+ if (!$item) {
+ elgg_log("Unable to add menu item '{$menu_item['name']}' to '$menu_name' menu", 'WARNING');
+ elgg_log(print_r($menu_item, true), 'DEBUG');
+ return false;
+ }
+ } else {
+ $item = $menu_item;
+ }
+
+ $CONFIG->menus[$menu_name][] = $item;
+ return true;
+}
+
+/**
+ * Remove an item from a menu
+ *
+ * @param string $menu_name The name of the menu
+ * @param string $item_name The unique identifier for this menu item
+ *
+ * @return bool
+ * @since 1.8.0
+ */
+function elgg_unregister_menu_item($menu_name, $item_name) {
+ global $CONFIG;
+
+ if (!isset($CONFIG->menus[$menu_name])) {
+ return false;
+ }
+
+ foreach ($CONFIG->menus[$menu_name] as $index => $menu_object) {
+ /* @var ElggMenuItem $menu_object */
+ if ($menu_object->getName() == $item_name) {
+ unset($CONFIG->menus[$menu_name][$index]);
+ return true;
+ }
+ }
+
+ return false;
+}
+
+/**
+ * Check if a menu item has been registered
+ *
+ * @param string $menu_name The name of the menu
+ * @param string $item_name The unique identifier for this menu item
+ *
+ * @return bool
+ * @since 1.8.0
+ */
+function elgg_is_menu_item_registered($menu_name, $item_name) {
+ global $CONFIG;
+
+ if (!isset($CONFIG->menus[$menu_name])) {
+ return false;
+ }
+
+ foreach ($CONFIG->menus[$menu_name] as $menu_object) {
+ /* @var ElggMenuItem $menu_object */
+ if ($menu_object->getName() == $item_name) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+/**
+ * Convenience function for registering a button to title menu
+ *
+ * The URL must be $handler/$name/$guid where $guid is the guid of the page owner.
+ * The label of the button is "$handler:$name" so that must be defined in a
+ * language file.
+ *
+ * This is used primarily to support adding an add content button
+ *
+ * @param string $handler The handler to use or null to autodetect from context
+ * @param string $name Name of the button
+ * @return void
+ * @since 1.8.0
+ */
+function elgg_register_title_button($handler = null, $name = 'add') {
+ if (elgg_is_logged_in()) {
+
+ if (!$handler) {
+ $handler = elgg_get_context();
+ }
+
+ $owner = elgg_get_page_owner_entity();
+ if (!$owner) {
+ // no owns the page so this is probably an all site list page
+ $owner = elgg_get_logged_in_user_entity();
+ }
+ if ($owner && $owner->canWriteToContainer()) {
+ $guid = $owner->getGUID();
+ elgg_register_menu_item('title', array(
+ 'name' => $name,
+ 'href' => "$handler/$name/$guid",
+ 'text' => elgg_echo("$handler:$name"),
+ 'link_class' => 'elgg-button elgg-button-action',
+ ));
+ }
+ }
+}
+
+/**
+ * Adds a breadcrumb to the breadcrumbs stack.
+ *
+ * @param string $title The title to display
+ * @param string $link Optional. The link for the title.
+ *
+ * @return void
+ * @since 1.8.0
+ *
+ * @link http://docs.elgg.org/Tutorials/UI/Breadcrumbs
+ */
+function elgg_push_breadcrumb($title, $link = NULL) {
+ global $CONFIG;
+ if (!isset($CONFIG->breadcrumbs)) {
+ $CONFIG->breadcrumbs = array();
+ }
+
+ // avoid key collisions.
+ $CONFIG->breadcrumbs[] = array('title' => elgg_get_excerpt($title, 100), 'link' => $link);
+}
+
+/**
+ * Removes last breadcrumb entry.
+ *
+ * @return array popped item.
+ * @since 1.8.0
+ * @link http://docs.elgg.org/Tutorials/UI/Breadcrumbs
+ */
+function elgg_pop_breadcrumb() {
+ global $CONFIG;
+
+ if (is_array($CONFIG->breadcrumbs)) {
+ return array_pop($CONFIG->breadcrumbs);
+ }
+
+ return FALSE;
+}
+
+/**
+ * Returns all breadcrumbs as an array of array('title' => 'Readable Title', 'link' => 'URL')
+ *
+ * @return array Breadcrumbs
+ * @since 1.8.0
+ * @link http://docs.elgg.org/Tutorials/UI/Breadcrumbs
+ */
+function elgg_get_breadcrumbs() {
+ global $CONFIG;
+
+ if (isset($CONFIG->breadcrumbs) && is_array($CONFIG->breadcrumbs)) {
+ return $CONFIG->breadcrumbs;
+ }
+
+ return array();
+}
+
+/**
+ * Set up the site menu
+ *
+ * Handles default, featured, and custom menu items
+ *
+ * @param string $hook
+ * @param string $type
+ * @param array $return Menu array
+ * @param array $params
+ * @return array
+ * @access private
+ */
+function elgg_site_menu_setup($hook, $type, $return, $params) {
+
+ $featured_menu_names = elgg_get_config('site_featured_menu_names');
+ $custom_menu_items = elgg_get_config('site_custom_menu_items');
+ if ($featured_menu_names || $custom_menu_items) {
+ // we have featured or custom menu items
+
+ $registered = $return['default'];
+
+ // set up featured menu items
+ $featured = array();
+ foreach ($featured_menu_names as $name) {
+ foreach ($registered as $index => $item) {
+ if ($item->getName() == $name) {
+ $featured[] = $item;
+ unset($registered[$index]);
+ }
+ }
+ }
+
+ // add custom menu items
+ $n = 1;
+ foreach ($custom_menu_items as $title => $url) {
+ $item = new ElggMenuItem("custom$n", $title, $url);
+ $featured[] = $item;
+ $n++;
+ }
+
+ $return['default'] = $featured;
+ if (count($registered) > 0) {
+ $return['more'] = $registered;
+ }
+ } else {
+ // no featured menu items set
+ $max_display_items = 5;
+
+ // the first n are shown, rest added to more list
+ // if only one item on more menu, stick it with the rest
+ $num_menu_items = count($return['default']);
+ if ($num_menu_items > ($max_display_items + 1)) {
+ $return['more'] = array_splice($return['default'], $max_display_items);
+ }
+ }
+
+ // check if we have anything selected
+ $selected = false;
+ foreach ($return as $section) {
+ foreach ($section as $item) {
+ if ($item->getSelected()) {
+ $selected = true;
+ break 2;
+ }
+ }
+ }
+
+ if (!$selected) {
+ // nothing selected, match name to context or match url
+ $current_url = current_page_url();
+ foreach ($return as $section_name => $section) {
+ foreach ($section as $key => $item) {
+ // only highlight internal links
+ if (strpos($item->getHref(), elgg_get_site_url()) === 0) {
+ if ($item->getName() == elgg_get_context()) {
+ $return[$section_name][$key]->setSelected(true);
+ break 2;
+ }
+ if ($item->getHref() == $current_url) {
+ $return[$section_name][$key]->setSelected(true);
+ break 2;
+ }
+ }
+ }
+ }
+ }
+
+ return $return;
+}
+
+/**
+ * Add the comment and like links to river actions menu
+ * @access private
+ */
+function elgg_river_menu_setup($hook, $type, $return, $params) {
+ if (elgg_is_logged_in()) {
+ $item = $params['item'];
+ /* @var ElggRiverItem $item */
+ $object = $item->getObjectEntity();
+ // comments and non-objects cannot be commented on or liked
+ if (!elgg_in_context('widgets') && $item->annotation_id == 0) {
+ // comments
+ if ($object->canComment()) {
+ $options = array(
+ 'name' => 'comment',
+ 'href' => "#comments-add-$object->guid",
+ 'text' => elgg_view_icon('speech-bubble'),
+ 'title' => elgg_echo('comment:this'),
+ 'rel' => 'toggle',
+ 'priority' => 50,
+ );
+ $return[] = ElggMenuItem::factory($options);
+ }
+ }
+
+ if (elgg_is_admin_logged_in()) {
+ $options = array(
+ 'name' => 'delete',
+ 'href' => elgg_add_action_tokens_to_url("action/river/delete?id=$item->id"),
+ 'text' => elgg_view_icon('delete'),
+ 'title' => elgg_echo('delete'),
+ 'confirm' => elgg_echo('deleteconfirm'),
+ 'priority' => 200,
+ );
+ $return[] = ElggMenuItem::factory($options);
+ }
+ }
+
+ return $return;
+}
+
+/**
+ * Entity menu is list of links and info on any entity
+ * @access private
+ */
+function elgg_entity_menu_setup($hook, $type, $return, $params) {
+ if (elgg_in_context('widgets')) {
+ return $return;
+ }
+
+ $entity = $params['entity'];
+ /* @var ElggEntity $entity */
+ $handler = elgg_extract('handler', $params, false);
+
+ // access
+ $access = elgg_view('output/access', array('entity' => $entity));
+ $options = array(
+ 'name' => 'access',
+ 'text' => $access,
+ 'href' => false,
+ 'priority' => 100,
+ );
+ $return[] = ElggMenuItem::factory($options);
+
+ if ($entity->canEdit() && $handler) {
+ // edit link
+ $options = array(
+ 'name' => 'edit',
+ 'text' => elgg_echo('edit'),
+ 'title' => elgg_echo('edit:this'),
+ 'href' => "$handler/edit/{$entity->getGUID()}",
+ 'priority' => 200,
+ );
+ $return[] = ElggMenuItem::factory($options);
+
+ // delete link
+ $options = array(
+ 'name' => 'delete',
+ 'text' => elgg_view_icon('delete'),
+ 'title' => elgg_echo('delete:this'),
+ 'href' => "action/$handler/delete?guid={$entity->getGUID()}",
+ 'confirm' => elgg_echo('deleteconfirm'),
+ 'priority' => 300,
+ );
+ $return[] = ElggMenuItem::factory($options);
+ }
+
+ return $return;
+}
+
+/**
+ * Widget menu is a set of widget controls
+ * @access private
+ */
+function elgg_widget_menu_setup($hook, $type, $return, $params) {
+
+ $widget = $params['entity'];
+ /* @var ElggWidget $widget */
+ $show_edit = elgg_extract('show_edit', $params, true);
+
+ $collapse = array(
+ 'name' => 'collapse',
+ 'text' => ' ',
+ 'href' => "#elgg-widget-content-$widget->guid",
+ 'class' => 'elgg-widget-collapse-button',
+ 'rel' => 'toggle',
+ 'priority' => 1
+ );
+ $return[] = ElggMenuItem::factory($collapse);
+
+ if ($widget->canEdit()) {
+ $delete = array(
+ 'name' => 'delete',
+ 'text' => elgg_view_icon('delete-alt'),
+ 'title' => elgg_echo('widget:delete', array($widget->getTitle())),
+ 'href' => "action/widgets/delete?widget_guid=$widget->guid",
+ 'is_action' => true,
+ 'class' => 'elgg-widget-delete-button',
+ 'id' => "elgg-widget-delete-button-$widget->guid",
+ 'priority' => 900
+ );
+ $return[] = ElggMenuItem::factory($delete);
+
+ if ($show_edit) {
+ $edit = array(
+ 'name' => 'settings',
+ 'text' => elgg_view_icon('settings-alt'),
+ 'title' => elgg_echo('widget:edit'),
+ 'href' => "#widget-edit-$widget->guid",
+ 'class' => "elgg-widget-edit-button",
+ 'rel' => 'toggle',
+ 'priority' => 800,
+ );
+ $return[] = ElggMenuItem::factory($edit);
+ }
+ }
+
+ return $return;
+}
+
+/**
+ * Adds a delete link to "generic_comment" annotations
+ * @access private
+ */
+function elgg_annotation_menu_setup($hook, $type, $return, $params) {
+ $annotation = $params['annotation'];
+ /* @var ElggAnnotation $annotation */
+
+ if ($annotation->name == 'generic_comment' && $annotation->canEdit()) {
+ $url = elgg_http_add_url_query_elements('action/comments/delete', array(
+ 'annotation_id' => $annotation->id,
+ ));
+
+ $options = array(
+ 'name' => 'delete',
+ 'href' => $url,
+ 'text' => "<span class=\"elgg-icon elgg-icon-delete\"></span>",
+ 'confirm' => elgg_echo('deleteconfirm'),
+ 'encode_text' => false
+ );
+ $return[] = ElggMenuItem::factory($options);
+ }
+
+ return $return;
+}
+
+
+/**
+ * Navigation initialization
+ * @access private
+ */
+function elgg_nav_init() {
+ elgg_register_plugin_hook_handler('prepare', 'menu:site', 'elgg_site_menu_setup');
+ elgg_register_plugin_hook_handler('register', 'menu:river', 'elgg_river_menu_setup');
+ elgg_register_plugin_hook_handler('register', 'menu:entity', 'elgg_entity_menu_setup');
+ elgg_register_plugin_hook_handler('register', 'menu:widget', 'elgg_widget_menu_setup');
+ elgg_register_plugin_hook_handler('register', 'menu:annotation', 'elgg_annotation_menu_setup');
+}
+
+elgg_register_event_handler('init', 'system', 'elgg_nav_init');
diff --git a/engine/lib/notification.php b/engine/lib/notification.php
index 6e984a435..be0c359d4 100644
--- a/engine/lib/notification.php
+++ b/engine/lib/notification.php
@@ -1,426 +1,536 @@
-<?php
- /**
- * Notifications
- * This file contains classes and functions which allow plugins to register and send notifications.
- *
- * There are notification methods which are provided out of the box (see notification_init() ). Each method
- * is identified by a string, e.g. "email".
- *
- * To register an event use register_notification_handler() and pass the method name and a handler function.
- *
- * To send a notification call notify() passing it the method you wish to use combined with a number of method
- * specific addressing parameters.
- *
- * Catch NotificationException to trap errors.
- *
- * @package Elgg
- * @subpackage API
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
-
- /** Notification handlers */
- $NOTIFICATION_HANDLERS = array();
-
- /**
- * This function registers a handler for a given notification type (eg "email")
- *
- * @param string $method The method
- * @param string $handler The handler function, in the format "handler(ElggEntity $from, ElggUser $to, $subject, $message, array $params = NULL)". This function should return false on failure, and true/a tracking message ID on success.
- * @param array $params A associated array of other parameters for this handler defining some properties eg. supported message length or rich text support.
- */
- function register_notification_handler($method, $handler, $params = NULL)
- {
- global $NOTIFICATION_HANDLERS;
-
- if (is_callable($handler))
- {
- $NOTIFICATION_HANDLERS[$method] = new stdClass;
-
- $NOTIFICATION_HANDLERS[$method]->handler = $handler;
- if ($params)
- {
- foreach ($params as $k => $v)
- $NOTIFICATION_HANDLERS[$method]->$k = $v;
- }
-
- return true;
- }
-
- return false;
- }
-
- /**
- * Notify a user via their preferences.
- *
- * @param mixed $to Either a guid or an array of guid's to notify.
- * @param int $from GUID of the sender, which may be a user, site or object.
- * @param string $subject Message subject.
- * @param string $message Message body.
- * @param array $params Misc additional parameters specific to various methods.
- * @param mixed $methods_override A string, or an array of strings specifying the delivery methods to use - or leave blank
- * for delivery using the user's chosen delivery methods.
- * @return array Compound array of each delivery user/delivery method's success or failure.
- * @throws NotificationException
- */
- function notify_user($to, $from, $subject, $message, array $params = NULL, $methods_override = "")
- {
- global $NOTIFICATION_HANDLERS, $CONFIG;
-
- // Sanitise
- if (!is_array($to))
- $to = array((int)$to);
- $from = (int)$from;
- //$subject = sanitise_string($subject);
-
- // Get notification methods
- if (($methods_override) && (!is_array($methods_override)))
- $methods_override = array($methods_override);
-
- $result = array();
-
- foreach ($to as $guid)
- {
- // Results for a user are...
- $result[$guid] = array();
-
- if ($guid) { // Is the guid > 0?
- // Are we overriding delivery?
- $methods = $methods_override;
- if (!$methods)
- {
- $tmp = (array)get_user_notification_settings($guid);
- $methods = array();
- foreach($tmp as $k => $v)
- if ($v) $methods[] = $k; // Add method if method is turned on for user!
- }
-
- if ($methods)
- {
- // Deliver
- foreach ($methods as $method)
- {
- // Extract method details from list
- $details = $NOTIFICATION_HANDLERS[$method];
- $handler = $details->handler;
-
- if ((!$NOTIFICATION_HANDLERS[$method]) || (!$handler))
- throw new NotificationException(sprintf(elgg_echo('NotificationException:NoHandlerFound'), $method));
-
- if ($CONFIG->debug)
- error_log("Sending message to $guid using $method");
-
- // Trigger handler and retrieve result.
- try {
- $result[$guid][$method] = $handler(
- $from ? get_entity($from) : NULL, // From entity
- get_entity($guid), // To entity
- $subject, // The subject
- $message, // Message
- $params // Params
- );
- } catch (Exception $e) {
- error_log($e->getMessage());
- }
-
- }
- }
- }
- }
-
- return $result;
- }
-
- /**
- * Get the notification settings for a given user.
- *
- * @param int $user_guid The user id
- * @return stdClass
- */
- function get_user_notification_settings($user_guid = 0)
- {
- $user_guid = (int)$user_guid;
-
- if ($user_guid == 0) $user_guid = get_loggedin_userid();
-
- $all_metadata = get_metadata_for_entity($user_guid);
- if ($all_metadata)
- {
- $prefix = "notification:method:";
- $return = new stdClass;
-
- foreach ($all_metadata as $meta)
- {
- $name = substr($meta->name, strlen($prefix));
- $value = $meta->value;
-
- if (strpos($meta->name, $prefix) === 0)
- $return->$name = $value;
- }
-
- return $return;
- }
-
- return false;
- }
-
- /**
- * Set a user notification pref.
- *
- * @param int $user_guid The user id.
- * @param string $method The delivery method (eg. email)
- * @param bool $value On(true) or off(false).
- * @return bool
- */
- function set_user_notification_setting($user_guid, $method, $value)
- {
- $user_guid = (int)$user_guid;
- $method = sanitise_string($method);
-
- $user = get_entity($user_guid);
- if (!$user) $user = get_loggedin_user();
-
- if (($user) && ($user instanceof ElggUser))
- {
- $prefix = "notification:method:$method";
- $user->$prefix = $value;
- $user->save();
-
- return true;
- }
-
- return false;
- }
-
- /**
- * Notification exception.
- * @author Curverider Ltd
- */
- class NotificationException extends Exception {}
-
-
- /**
- * Send a notification via email.
- *
- * @param ElggEntity $from The from user/site/object
- * @param ElggUser $to To which user?
- * @param string $subject The subject of the message.
- * @param string $message The message body
- * @param array $params Optional parameters (none taken in this instance)
- * @return bool
- */
- function email_notify_handler(ElggEntity $from, ElggUser $to, $subject, $message, array $params = NULL)
- {
- global $CONFIG;
-
- if (!$from)
- throw new NotificationException(sprintf(elgg_echo('NotificationException:MissingParameter'), 'from'));
-
- if (!$to)
- throw new NotificationException(sprintf(elgg_echo('NotificationException:MissingParameter'), 'to'));
-
- if ($to->email=="")
- throw new NotificationException(sprintf(elgg_echo('NotificationException:NoEmailAddress'), $to->guid));
-
- // Sanitise subject
- $subject = preg_replace("/(\r\n|\r|\n)/", " ", $subject); // Strip line endings
-
- // To
- $to = $to->email;
-
- // From
- $site = get_entity($CONFIG->site_guid);
- if ((isset($from->email)) && (!($from instanceof ElggUser))) // If there's an email address, use it - but only if its not from a user.
- $from = $from->email;
- else if (($site) && (isset($site->email))) // Has the current site got a from email address?
- $from = $site->email;
- else if (isset($from->url)) // If we have a url then try and use that.
- {
- $breakdown = parse_url($from->url);
- $from = 'noreply@' . $breakdown['host']; // Handle anything with a url
- }
- else // If all else fails, use the domain of the site.
- $from = 'noreply@' . get_site_domain($CONFIG->site_guid);
-
- if (is_callable('mb_internal_encoding')) {
- mb_internal_encoding('UTF-8');
- }
- $site = get_entity($CONFIG->site_guid);
- $sitename = $site->name;
- if (is_callable('mb_encode_mimeheader')) {
- $sitename = mb_encode_mimeheader($site->name,"UTF-8", "B");
- }
-
- $header_eol = "\r\n";
- if (
- (isset($CONFIG->broken_mta)) &&
- ($CONFIG->broken_mta)
- )
- $header_eol = "\n"; // Allow non-RFC 2822 mail headers to support some broken MTAs
-
- $headers = "From: \"$sitename\" <$from>{$header_eol}"
- . "Content-Type: text/plain; charset=UTF-8; format=flowed{$header_eol}"
- . "MIME-Version: 1.0{$header_eol}"
- . "Content-Transfer-Encoding: 8bit{$header_eol}";
-
- if (is_callable('mb_encode_mimeheader')) {
- $subject = mb_encode_mimeheader($subject,"UTF-8", "B");
- }
-
- // Format message
- $message = strip_tags($message); // Strip tags from message
- $message = preg_replace("/(\r\n|\r)/", "\n", $message); // Convert to unix line endings in body
- $message = preg_replace("/^From/", ">From", $message); // Change lines starting with From to >From
-
- return mail($to, $subject, wordwrap($message), $headers);
- }
-
- /**
- * Correctly initialise notifications and register the email handler.
- *
- */
- function notification_init()
- {
- // Register a notification handler for the default email method
- register_notification_handler("email", "email_notify_handler");
-
- // Add settings view to user settings & register action
- extend_elgg_settings_page('notifications/settings/usersettings', 'usersettings/user');
-
- register_plugin_hook('usersettings:save','user','notification_user_settings_save');
-
- //register_action("notifications/settings/usersettings/save");
-
-
- // Register some APIs
- expose_function('user.notification.get', 'get_user_notification_settings', array(
- 'user_guid' => array ('type' => 'int')
- ), elgg_echo('user.notification.get'));
-
- expose_function('user.notification.set', 'set_user_notification_settings', array(
- 'user_guid' => array ('type' => 'int'),
- 'method' => array ('type' => 'string'),
- 'value' => array ('type' => 'bool')
- ), elgg_echo('user.notification.set'));
-
- }
-
- function notification_user_settings_save() {
-
- global $CONFIG;
- @include($CONFIG->path . "actions/notifications/settings/usersettings/save.php");
-
- }
-
- /**
- * Register an entity type and subtype to be eligible for notifications
- *
- * @param string $entity_type The type of entity
- * @param string $object_subtype Its subtype
- * @param string $english_name It's English notification string (eg "New blog post")
- */
- function register_notification_object($entity_type, $object_subtype, $english_name) {
- global $CONFIG;
-
- if ($entity_type == '') $entity_type = '__BLANK__';
- if ($object_subtype == '') $object_subtype = '__BLANK__';
-
- if (!isset($CONFIG->register_objects)) {
- $CONFIG->register_objects = array();
- }
- if (!isset($CONFIG->register_objects[$entity_type])) {
- $CONFIG->register_objects[$entity_type] = array();
- }
- $CONFIG->register_objects[$entity_type][$object_subtype] = $english_name;
- }
-
- /**
- * Establish a 'notify' relationship between the user and a content author
- *
- * @param int $user_guid The GUID of the user who wants to follow a user's content
- * @param int $author_guid The GUID of the user whose content the user wants to follow
- * @return true|false Depending on success
- */
- function register_notification_interest($user_guid, $author_guid) {
- return add_entity_relationship($user_guid, 'notify', $author_guid);
- }
-
- /**
- * Remove a 'notify' relationship between the user and a content author
- *
- * @param int $user_guid The GUID of the user who is following a user's content
- * @param int $author_guid The GUID of the user whose content the user wants to unfollow
- * @return true|false Depending on success
- */
- function remove_notification_interest($user_guid, $author_guid) {
- return remove_entity_relationship($user_guid, 'notify', $author_guid);
- }
-
- /**
- * Automatically triggered notification on 'create' events that looks at registered
- * objects and attempts to send notifications to anybody who's interested
- *
- * @see register_notification_object
- */
- function object_notifications($event, $object_type, $object) {
-
- // We only want to trigger notification events for ElggEntities
- if ($object instanceof ElggEntity) {
-
- // Get config data
- global $CONFIG, $SESSION, $NOTIFICATION_HANDLERS;
-
- $hookresult = trigger_plugin_hook('object:notifications',$object_type,array(
- 'event' => $event,
- 'object_type' => $object_type,
- 'object' => $object,
- ),false);
- if ($hookresult === true) return true;
-
- // Have we registered notifications for this type of entity?
- $object_type = $object->getType(); if (empty($object_type)) $object_type = '__BLANK__';
- $object_subtype = $object->getSubtype(); if (empty($object_subtype)) $object_subtype = '__BLANK__';
- if (isset($CONFIG->register_objects[$object_type][$object_subtype])) {
-
- $descr = $CONFIG->register_objects[$object_type][$object_subtype];
- $string = $descr . ": " . $object->getURL();
-
- // Get users interested in content from this person and notify them
- // (Person defined by container_guid so we can also subscribe to groups if we want)
- foreach($NOTIFICATION_HANDLERS as $method => $foo)
- if ($interested_users = get_entities_from_relationship('notify' . $method,$object->container_guid,true,'user','',0,'',99999)) {
- if (is_array($interested_users))
- foreach($interested_users as $user) {
- if ($user instanceof ElggUser) {
-
- if ((in_array($object->access_id,get_access_list($user->guid)) ||
- $object->access_id == ACCESS_PUBLIC ||
- $object->access_id == ACCESS_LOGGED_IN)
- && $object->access_id != ACCESS_PRIVATE
- && $user->guid != $SESSION['user']->guid
- && $entity instanceof ElggEntity) {
-
- $methodstring = trigger_plugin_hook('notify:entity:message',$entity->getType(),array(
- 'entity' => $object,
- 'to_entity' => $user,
- 'method' => $method),$string);
- if (empty($methodstring)) $methodstring = $string;
- notify_user($user->guid,$object->container_guid,$descr,$methodstring,NULL,array($method));
- }
- }
- }
- }
-
- }
-
- }
-
- }
-
- // Register a startup event
- register_elgg_event_handler('init','system','notification_init',0);
- register_elgg_event_handler('create','object','object_notifications');
-
-?> \ No newline at end of file
+<?php
+/**
+ * Notifications
+ * This file contains classes and functions which allow plugins to register and send notifications.
+ *
+ * There are notification methods which are provided out of the box
+ * (see notification_init() ). Each method is identified by a string, e.g. "email".
+ *
+ * To register an event use register_notification_handler() and pass the method name and a
+ * handler function.
+ *
+ * To send a notification call notify() passing it the method you wish to use combined with a
+ * number of method specific addressing parameters.
+ *
+ * Catch NotificationException to trap errors.
+ *
+ * @package Elgg.Core
+ * @subpackage Notifications
+ */
+
+/** Notification handlers */
+global $NOTIFICATION_HANDLERS;
+$NOTIFICATION_HANDLERS = array();
+
+/**
+ * This function registers a handler for a given notification type (eg "email")
+ *
+ * @param string $method The method
+ * @param string $handler The handler function, in the format
+ * "handler(ElggEntity $from, ElggUser $to, $subject,
+ * $message, array $params = NULL)". This function should
+ * return false on failure, and true/a tracking message ID on success.
+ * @param array $params An associated array of other parameters for this handler
+ * defining some properties eg. supported msg length or rich text support.
+ *
+ * @return bool
+ */
+function register_notification_handler($method, $handler, $params = NULL) {
+ global $NOTIFICATION_HANDLERS;
+
+ if (is_callable($handler, true)) {
+ $NOTIFICATION_HANDLERS[$method] = new stdClass;
+
+ $NOTIFICATION_HANDLERS[$method]->handler = $handler;
+ if ($params) {
+ foreach ($params as $k => $v) {
+ $NOTIFICATION_HANDLERS[$method]->$k = $v;
+ }
+ }
+
+ return true;
+ }
+
+ return false;
+}
+
+/**
+ * This function unregisters a handler for a given notification type (eg "email")
+ *
+ * @param string $method The method
+ *
+ * @return void
+ * @since 1.7.1
+ */
+function unregister_notification_handler($method) {
+ global $NOTIFICATION_HANDLERS;
+
+ if (isset($NOTIFICATION_HANDLERS[$method])) {
+ unset($NOTIFICATION_HANDLERS[$method]);
+ }
+}
+
+/**
+ * Notify a user via their preferences.
+ *
+ * @param mixed $to Either a guid or an array of guid's to notify.
+ * @param int $from GUID of the sender, which may be a user, site or object.
+ * @param string $subject Message subject.
+ * @param string $message Message body.
+ * @param array $params Misc additional parameters specific to various methods.
+ * @param mixed $methods_override A string, or an array of strings specifying the delivery
+ * methods to use - or leave blank for delivery using the
+ * user's chosen delivery methods.
+ *
+ * @return array Compound array of each delivery user/delivery method's success or failure.
+ * @throws NotificationException
+ */
+function notify_user($to, $from, $subject, $message, array $params = NULL, $methods_override = "") {
+ global $NOTIFICATION_HANDLERS;
+
+ // Sanitise
+ if (!is_array($to)) {
+ $to = array((int)$to);
+ }
+ $from = (int)$from;
+ //$subject = sanitise_string($subject);
+
+ // Get notification methods
+ if (($methods_override) && (!is_array($methods_override))) {
+ $methods_override = array($methods_override);
+ }
+
+ $result = array();
+
+ foreach ($to as $guid) {
+ // Results for a user are...
+ $result[$guid] = array();
+
+ if ($guid) { // Is the guid > 0?
+ // Are we overriding delivery?
+ $methods = $methods_override;
+ if (!$methods) {
+ $tmp = get_user_notification_settings($guid);
+ $methods = array();
+ // $tmp may be false. don't cast
+ if (is_object($tmp)) {
+ foreach ($tmp as $k => $v) {
+ // Add method if method is turned on for user!
+ if ($v) {
+ $methods[] = $k;
+ }
+ }
+ }
+ }
+
+ if ($methods) {
+ // Deliver
+ foreach ($methods as $method) {
+
+ if (!isset($NOTIFICATION_HANDLERS[$method])) {
+ continue;
+ }
+
+ // Extract method details from list
+ $details = $NOTIFICATION_HANDLERS[$method];
+ $handler = $details->handler;
+ /* @var callable $handler */
+
+ if ((!$NOTIFICATION_HANDLERS[$method]) || (!$handler) || (!is_callable($handler))) {
+ error_log(elgg_echo('NotificationException:NoHandlerFound', array($method)));
+ }
+
+ elgg_log("Sending message to $guid using $method");
+
+ // Trigger handler and retrieve result.
+ try {
+ $result[$guid][$method] = call_user_func($handler,
+ $from ? get_entity($from) : NULL, // From entity
+ get_entity($guid), // To entity
+ $subject, // The subject
+ $message, // Message
+ $params // Params
+ );
+ } catch (Exception $e) {
+ error_log($e->getMessage());
+ }
+
+ }
+ }
+ }
+ }
+
+ return $result;
+}
+
+/**
+ * Get the notification settings for a given user.
+ *
+ * @param int $user_guid The user id
+ *
+ * @return stdClass|false
+ */
+function get_user_notification_settings($user_guid = 0) {
+ $user_guid = (int)$user_guid;
+
+ if ($user_guid == 0) {
+ $user_guid = elgg_get_logged_in_user_guid();
+ }
+
+ // @todo: there should be a better way now that metadata is cached. E.g. just query for MD names, then
+ // query user object directly
+ $all_metadata = elgg_get_metadata(array(
+ 'guid' => $user_guid,
+ 'limit' => 0
+ ));
+ if ($all_metadata) {
+ $prefix = "notification:method:";
+ $return = new stdClass;
+
+ foreach ($all_metadata as $meta) {
+ $name = substr($meta->name, strlen($prefix));
+ $value = $meta->value;
+
+ if (strpos($meta->name, $prefix) === 0) {
+ $return->$name = $value;
+ }
+ }
+
+ return $return;
+ }
+
+ return false;
+}
+
+/**
+ * Set a user notification pref.
+ *
+ * @param int $user_guid The user id.
+ * @param string $method The delivery method (eg. email)
+ * @param bool $value On(true) or off(false).
+ *
+ * @return bool
+ */
+function set_user_notification_setting($user_guid, $method, $value) {
+ $user_guid = (int)$user_guid;
+ $method = sanitise_string($method);
+
+ $user = get_entity($user_guid);
+ if (!$user) {
+ $user = elgg_get_logged_in_user_entity();
+ }
+
+ if (($user) && ($user instanceof ElggUser)) {
+ $prefix = "notification:method:$method";
+ $user->$prefix = $value;
+ $user->save();
+
+ return true;
+ }
+
+ return false;
+}
+
+/**
+ * Send a notification via email.
+ *
+ * @param ElggEntity $from The from user/site/object
+ * @param ElggUser $to To which user?
+ * @param string $subject The subject of the message.
+ * @param string $message The message body
+ * @param array $params Optional parameters (none taken in this instance)
+ *
+ * @return bool
+ * @throws NotificationException
+ * @access private
+ */
+function email_notify_handler(ElggEntity $from, ElggUser $to, $subject, $message,
+array $params = NULL) {
+
+ global $CONFIG;
+
+ if (!$from) {
+ $msg = elgg_echo('NotificationException:MissingParameter', array('from'));
+ throw new NotificationException($msg);
+ }
+
+ if (!$to) {
+ $msg = elgg_echo('NotificationException:MissingParameter', array('to'));
+ throw new NotificationException($msg);
+ }
+
+ if ($to->email == "") {
+ $msg = elgg_echo('NotificationException:NoEmailAddress', array($to->guid));
+ throw new NotificationException($msg);
+ }
+
+ // To
+ $to = $to->email;
+
+ // From
+ $site = elgg_get_site_entity();
+ // If there's an email address, use it - but only if its not from a user.
+ if (!($from instanceof ElggUser) && $from->email) {
+ $from = $from->email;
+ } else if ($site && $site->email) {
+ // Use email address of current site if we cannot use sender's email
+ $from = $site->email;
+ } else {
+ // If all else fails, use the domain of the site.
+ $from = 'noreply@' . get_site_domain($CONFIG->site_guid);
+ }
+
+ return elgg_send_email($from, $to, $subject, $message);
+}
+
+/**
+ * Send an email to any email address
+ *
+ * @param string $from Email address or string: "name <email>"
+ * @param string $to Email address or string: "name <email>"
+ * @param string $subject The subject of the message
+ * @param string $body The message body
+ * @param array $params Optional parameters (none used in this function)
+ *
+ * @return bool
+ * @throws NotificationException
+ * @since 1.7.2
+ */
+function elgg_send_email($from, $to, $subject, $body, array $params = NULL) {
+ global $CONFIG;
+
+ if (!$from) {
+ $msg = elgg_echo('NotificationException:MissingParameter', array('from'));
+ throw new NotificationException($msg);
+ }
+
+ if (!$to) {
+ $msg = elgg_echo('NotificationException:MissingParameter', array('to'));
+ throw new NotificationException($msg);
+ }
+
+ // return TRUE/FALSE to stop elgg_send_email() from sending
+ $mail_params = array(
+ 'to' => $to,
+ 'from' => $from,
+ 'subject' => $subject,
+ 'body' => $body,
+ 'params' => $params
+ );
+
+ $result = elgg_trigger_plugin_hook('email', 'system', $mail_params, NULL);
+ if ($result !== NULL) {
+ return $result;
+ }
+
+ $header_eol = "\r\n";
+ if (isset($CONFIG->broken_mta) && $CONFIG->broken_mta) {
+ // Allow non-RFC 2822 mail headers to support some broken MTAs
+ $header_eol = "\n";
+ }
+
+ // Windows is somewhat broken, so we use just address for to and from
+ if (strtolower(substr(PHP_OS, 0, 3)) == 'win') {
+ // strip name from to and from
+ if (strpos($to, '<')) {
+ preg_match('/<(.*)>/', $to, $matches);
+ $to = $matches[1];
+ }
+ if (strpos($from, '<')) {
+ preg_match('/<(.*)>/', $from, $matches);
+ $from = $matches[1];
+ }
+ }
+
+ $headers = "From: $from{$header_eol}"
+ . "Content-Type: text/plain; charset=UTF-8; format=flowed{$header_eol}"
+ . "MIME-Version: 1.0{$header_eol}"
+ . "Content-Transfer-Encoding: 8bit{$header_eol}";
+
+
+ // Sanitise subject by stripping line endings
+ $subject = preg_replace("/(\r\n|\r|\n)/", " ", $subject);
+ // this is because Elgg encodes everything and matches what is done with body
+ $subject = html_entity_decode($subject, ENT_COMPAT, 'UTF-8'); // Decode any html entities
+ if (is_callable('mb_encode_mimeheader')) {
+ $subject = mb_encode_mimeheader($subject, "UTF-8", "B");
+ }
+
+ // Format message
+ $body = html_entity_decode($body, ENT_COMPAT, 'UTF-8'); // Decode any html entities
+ $body = elgg_strip_tags($body); // Strip tags from message
+ $body = preg_replace("/(\r\n|\r)/", "\n", $body); // Convert to unix line endings in body
+ $body = preg_replace("/^From/", ">From", $body); // Change lines starting with From to >From
+
+ return mail($to, $subject, wordwrap($body), $headers);
+}
+
+/**
+ * Correctly initialise notifications and register the email handler.
+ *
+ * @return void
+ * @access private
+ */
+function notification_init() {
+ // Register a notification handler for the default email method
+ register_notification_handler("email", "email_notify_handler");
+
+ // Add settings view to user settings & register action
+ elgg_extend_view('forms/account/settings', 'core/settings/account/notifications');
+
+ elgg_register_plugin_hook_handler('usersettings:save', 'user', 'notification_user_settings_save');
+}
+
+/**
+ * Includes the action to save user notifications
+ *
+ * @return void
+ * @todo why can't this call action(...)?
+ * @access private
+ */
+function notification_user_settings_save() {
+ global $CONFIG;
+ //@todo Wha??
+ include($CONFIG->path . "actions/notifications/settings/usersettings/save.php");
+}
+
+/**
+ * Register an entity type and subtype to be eligible for notifications
+ *
+ * @param string $entity_type The type of entity
+ * @param string $object_subtype Its subtype
+ * @param string $language_name Its localized notification string (eg "New blog post")
+ *
+ * @return void
+ */
+function register_notification_object($entity_type, $object_subtype, $language_name) {
+ global $CONFIG;
+
+ if ($entity_type == '') {
+ $entity_type = '__BLANK__';
+ }
+ if ($object_subtype == '') {
+ $object_subtype = '__BLANK__';
+ }
+
+ if (!isset($CONFIG->register_objects)) {
+ $CONFIG->register_objects = array();
+ }
+
+ if (!isset($CONFIG->register_objects[$entity_type])) {
+ $CONFIG->register_objects[$entity_type] = array();
+ }
+
+ $CONFIG->register_objects[$entity_type][$object_subtype] = $language_name;
+}
+
+/**
+ * Establish a 'notify' relationship between the user and a content author
+ *
+ * @param int $user_guid The GUID of the user who wants to follow a user's content
+ * @param int $author_guid The GUID of the user whose content the user wants to follow
+ *
+ * @return bool Depending on success
+ */
+function register_notification_interest($user_guid, $author_guid) {
+ return add_entity_relationship($user_guid, 'notify', $author_guid);
+}
+
+/**
+ * Remove a 'notify' relationship between the user and a content author
+ *
+ * @param int $user_guid The GUID of the user who is following a user's content
+ * @param int $author_guid The GUID of the user whose content the user wants to unfollow
+ *
+ * @return bool Depending on success
+ */
+function remove_notification_interest($user_guid, $author_guid) {
+ return remove_entity_relationship($user_guid, 'notify', $author_guid);
+}
+
+/**
+ * Automatically triggered notification on 'create' events that looks at registered
+ * objects and attempts to send notifications to anybody who's interested
+ *
+ * @see register_notification_object
+ *
+ * @param string $event create
+ * @param string $object_type mixed
+ * @param mixed $object The object created
+ *
+ * @return bool
+ * @access private
+ */
+function object_notifications($event, $object_type, $object) {
+ // We only want to trigger notification events for ElggEntities
+ if ($object instanceof ElggEntity) {
+ /* @var ElggEntity $object */
+
+ // Get config data
+ global $CONFIG, $SESSION, $NOTIFICATION_HANDLERS;
+
+ $hookresult = elgg_trigger_plugin_hook('object:notifications', $object_type, array(
+ 'event' => $event,
+ 'object_type' => $object_type,
+ 'object' => $object,
+ ), false);
+ if ($hookresult === true) {
+ return true;
+ }
+
+ // Have we registered notifications for this type of entity?
+ $object_type = $object->getType();
+ if (empty($object_type)) {
+ $object_type = '__BLANK__';
+ }
+
+ $object_subtype = $object->getSubtype();
+ if (empty($object_subtype)) {
+ $object_subtype = '__BLANK__';
+ }
+
+ if (isset($CONFIG->register_objects[$object_type][$object_subtype])) {
+ $subject = $CONFIG->register_objects[$object_type][$object_subtype];
+ $string = $subject . ": " . $object->getURL();
+
+ // Get users interested in content from this person and notify them
+ // (Person defined by container_guid so we can also subscribe to groups if we want)
+ foreach ($NOTIFICATION_HANDLERS as $method => $foo) {
+ $interested_users = elgg_get_entities_from_relationship(array(
+ 'site_guids' => ELGG_ENTITIES_ANY_VALUE,
+ 'relationship' => 'notify' . $method,
+ 'relationship_guid' => $object->container_guid,
+ 'inverse_relationship' => TRUE,
+ 'type' => 'user',
+ 'limit' => false
+ ));
+ /* @var ElggUser[] $interested_users */
+
+ if ($interested_users && is_array($interested_users)) {
+ foreach ($interested_users as $user) {
+ if ($user instanceof ElggUser && !$user->isBanned()) {
+ if (($user->guid != $SESSION['user']->guid) && has_access_to_entity($object, $user)
+ && $object->access_id != ACCESS_PRIVATE) {
+ $body = elgg_trigger_plugin_hook('notify:entity:message', $object->getType(), array(
+ 'entity' => $object,
+ 'to_entity' => $user,
+ 'method' => $method), $string);
+ if (empty($body) && $body !== false) {
+ $body = $string;
+ }
+ if ($body !== false) {
+ notify_user($user->guid, $object->container_guid, $subject, $body,
+ null, array($method));
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+// Register a startup event
+elgg_register_event_handler('init', 'system', 'notification_init', 0);
+elgg_register_event_handler('create', 'object', 'object_notifications');
diff --git a/engine/lib/objects.php b/engine/lib/objects.php
index 599576e22..ff3cc733f 100644
--- a/engine/lib/objects.php
+++ b/engine/lib/objects.php
@@ -1,389 +1,120 @@
-<?php
-
- /**
- * Elgg objects
- * Functions to manage multiple or single objects in an Elgg install
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2009
- * @link http://elgg.org/
- */
-
- /**
- * ElggObject
- * Representation of an "object" in the system.
- *
- * @package Elgg
- * @subpackage Core
- */
- class ElggObject extends ElggEntity
- {
- /**
- * Initialise the attributes array.
- * This is vital to distinguish between metadata and base parameters.
- *
- * Place your base parameters here.
- */
- protected function initialise_attributes()
- {
- parent::initialise_attributes();
-
- $this->attributes['type'] = "object";
- $this->attributes['title'] = "";
- $this->attributes['description'] = "";
- $this->attributes['tables_split'] = 2;
- }
-
- /**
- * Construct a new object entity, optionally from a given id value.
- *
- * @param mixed $guid If an int, load that GUID.
- * If a db row then will attempt to load the rest of the data.
- * @throws Exception if there was a problem creating the object.
- */
- function __construct($guid = null)
- {
- $this->initialise_attributes();
-
- if (!empty($guid))
- {
- // Is $guid is a DB row - either a entity row, or a object table row.
- if ($guid instanceof stdClass) {
- // Load the rest
- if (!$this->load($guid->guid))
- throw new IOException(sprintf(elgg_echo('IOException:FailedToLoadGUID'), get_class(), $guid->guid));
- }
-
- // Is $guid is an ElggObject? Use a copy constructor
- else if ($guid instanceof ElggObject)
- {
- foreach ($guid->attributes as $key => $value)
- $this->attributes[$key] = $value;
- }
-
- // Is this is an ElggEntity but not an ElggObject = ERROR!
- else if ($guid instanceof ElggEntity)
- throw new InvalidParameterException(elgg_echo('InvalidParameterException:NonElggObject'));
-
- // We assume if we have got this far, $guid is an int
- else if (is_numeric($guid)) {
- if (!$this->load($guid)) IOException(sprintf(elgg_echo('IOException:FailedToLoadGUID'), get_class(), $guid));
- }
-
- else
- throw new InvalidParameterException(elgg_echo('InvalidParameterException:UnrecognisedValue'));
- }
- }
-
- /**
- * Override the load function.
- * This function will ensure that all data is loaded (were possible), so
- * if only part of the ElggObject is loaded, it'll load the rest.
- *
- * @param int $guid
- * @return true|false
- */
- protected function load($guid)
- {
- // Test to see if we have the generic stuff
- if (!parent::load($guid))
- return false;
-
- // Check the type
- if ($this->attributes['type']!='object')
- throw new InvalidClassException(sprintf(elgg_echo('InvalidClassException:NotValidElggStar'), $guid, get_class()));
-
- // Load missing data
- $row = get_object_entity_as_row($guid);
- if (($row) && (!$this->isFullyLoaded())) $this->attributes['tables_loaded'] ++; // If $row isn't a cached copy then increment the counter
-
- // Now put these into the attributes array as core values
- $objarray = (array) $row;
- foreach($objarray as $key => $value)
- $this->attributes[$key] = $value;
-
- return true;
- }
-
- /**
- * Override the save function.
- * @return true|false
- */
- public function save()
- {
- // Save generic stuff
- if (!parent::save())
- return false;
-
- // Now save specific stuff
- return create_object_entity($this->get('guid'), $this->get('title'), $this->get('description'), $this->get('container_guid'));
- }
-
- /**
- * Delete this object.
- * @return true|false
- */
- public function delete()
- {
- if (!delete_object_entity($this->get('guid')))
- return false;
-
- return parent::delete();
- }
-
- /**
- * Get sites that this object is a member of
- *
- * @param string $subtype Optionally, the subtype of result we want to limit to
- * @param int $limit The number of results to return
- * @param int $offset Any indexing offset
- */
- function getSites($subtype="", $limit = 10, $offset = 0) {
- return get_site_objects($this->getGUID(), $subtype, $limit, $offset);
- }
-
- /**
- * Add this object to a particular site
- *
- * @param int $site_guid The guid of the site to add it to
- * @return true|false
- */
- function addToSite($site_guid) {
- return add_site_object($this->getGUID(), $site_guid);
- }
+<?php
+/**
+ * Elgg objects
+ * Functions to manage multiple or single objects in an Elgg install
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
- /**
- * Set the container for this object.
- *
- * @param int $container_guid The ID of the container.
- * @return bool
- */
- function setContainer($container_guid)
- {
- $container_guid = (int)$container_guid;
-
- return $this->set('container_guid', $container_guid);
- }
-
- /**
- * Return the container GUID of this object.
- *
- * @return int
- */
- function getContainer()
- {
- return $this->get('container_guid');
- }
-
- /**
- * As getContainer(), but returns the whole entity.
- *
- * @return mixed ElggGroup object or false.
- */
- function getContainerEntity()
- {
- $result = get_entity($this->getContainer());
-
- if (($result) && ($result instanceof ElggGroup))
- return $result;
-
- return false;
- }
-
- /**
- * Get the collections associated with a object.
- *
- * @param string $subtype Optionally, the subtype of result we want to limit to
- * @param int $limit The number of results to return
- * @param int $offset Any indexing offset
- * @return unknown
- */
- //public function getCollections($subtype="", $limit = 10, $offset = 0) { get_object_collections($this->getGUID(), $subtype, $limit, $offset); }
-
- // EXPORTABLE INTERFACE ////////////////////////////////////////////////////////////
-
- /**
- * Return an array of fields which can be exported.
- */
- public function getExportableValues()
- {
- return array_merge(parent::getExportableValues(), array(
- 'title',
- 'description',
- ));
- }
- }
-
- /**
- * Return the object specific details of a object by a row.
- *
- * @param int $guid
- */
- function get_object_entity_as_row($guid)
- {
- global $CONFIG;
-
- $guid = (int)$guid;
-
- $row = retrieve_cached_entity_row($guid);
- if ($row)
- {
- // We have already cached this object, so retrieve its value from the cache
- if (isset($CONFIG->debug) && $CONFIG->debug)
- error_log("** Retrieving sub part of GUID:$guid from cache");
-
- return $row;
- }
- else
- {
- // Object not cached, load it.
- if ($CONFIG->debug)
- error_log("** Sub part of GUID:$guid loaded from DB");
-
- return get_data_row("SELECT * from {$CONFIG->dbprefix}objects_entity where guid=$guid");
- }
- }
-
- /**
- * Create or update the extras table for a given object.
- * Call create_entity first.
- *
- * @param int $guid The guid of the entity you're creating (as obtained by create_entity)
- * @param string $title The title of the object
- * @param string $description The object's description
- */
- function create_object_entity($guid, $title, $description)
- {
- global $CONFIG;
-
- $guid = (int)$guid;
- $title = sanitise_string($title);
- $description = sanitise_string($description);
-
- $row = get_entity_as_row($guid);
-
- if ($row)
- {
- // Core entities row exists and we have access to it
- if ($exists = get_data_row("SELECT guid from {$CONFIG->dbprefix}objects_entity where guid = {$guid}")) {
- $result = update_data("UPDATE {$CONFIG->dbprefix}objects_entity set title='$title', description='$description' where guid=$guid");
- if ($result!=false)
- {
- // Update succeeded, continue
- $entity = get_entity($guid);
- if (trigger_elgg_event('update',$entity->type,$entity)) {
- return $guid;
- } else {
- $entity->delete();
- }
- }
+/**
+ * Return the object specific details of a object by a row.
+ *
+ * @param int $guid The guid to retreive
+ *
+ * @return bool
+ * @access private
+ */
+function get_object_entity_as_row($guid) {
+ global $CONFIG;
+
+ $guid = (int)$guid;
+ return get_data_row("SELECT * from {$CONFIG->dbprefix}objects_entity where guid=$guid");
+}
+
+/**
+ * Create or update the extras table for a given object.
+ * Call create_entity first.
+ *
+ * @param int $guid The guid of the entity you're creating (as obtained by create_entity)
+ * @param string $title The title of the object
+ * @param string $description The object's description
+ *
+ * @return bool
+ * @access private
+ */
+function create_object_entity($guid, $title, $description) {
+ global $CONFIG;
+
+ $guid = (int)$guid;
+ $title = sanitise_string($title);
+ $description = sanitise_string($description);
+
+ $row = get_entity_as_row($guid);
+
+ if ($row) {
+ // Core entities row exists and we have access to it
+ $query = "SELECT guid from {$CONFIG->dbprefix}objects_entity where guid = {$guid}";
+ if ($exists = get_data_row($query)) {
+ $query = "UPDATE {$CONFIG->dbprefix}objects_entity
+ set title='$title', description='$description' where guid=$guid";
+
+ $result = update_data($query);
+ if ($result != false) {
+ // Update succeeded, continue
+ $entity = get_entity($guid);
+ elgg_trigger_event('update', $entity->type, $entity);
+ return $guid;
}
- else
- {
-
- // Update failed, attempt an insert.
- $result = insert_data("INSERT into {$CONFIG->dbprefix}objects_entity (guid, title, description) values ($guid, '$title','$description')");
- if ($result!==false) {
- $entity = get_entity($guid);
- if (trigger_elgg_event('create',$entity->type,$entity)) {
- return $guid;
- } else {
- $entity->delete();
- //delete_entity($guid);
- }
- }
- }
-
- }
-
- return false;
- }
-
- /**
- * Delete a object's extra data.
- *
- * @param int $guid
- */
- function delete_object_entity($guid)
- {
- global $CONFIG;
-
- $guid = (int)$guid;
-
- $row = get_object_entity_as_row($guid);
-
- // Check to see if we have access and it exists
- if ($row)
- {
- // Delete any existing stuff
- return delete_data("DELETE from {$CONFIG->dbprefix}objects_entity where guid=$guid");
- }
-
- return false;
- }
-
- /**
- * Searches for an object based on a complete or partial title or description using full text searching.
- *
- * IMPORTANT NOTE: With MySQL's default setup:
- * 1) $criteria must be 4 or more characters long
- * 2) If $criteria matches greater than 50% of results NO RESULTS ARE RETURNED!
- *
- * @param string $criteria The partial or full name or username.
- * @param int $limit Limit of the search.
- * @param int $offset Offset.
- * @param string $order_by The order.
- * @param boolean $count Whether to return the count of results or just the results.
- */
- function search_for_object($criteria, $limit = 10, $offset = 0, $order_by = "", $count = false)
- {
- global $CONFIG;
-
- $criteria = sanitise_string($criteria);
- $limit = (int)$limit;
- $offset = (int)$offset;
- $order_by = sanitise_string($order_by);
- $container_guid = (int)$container_guid;
-
- $access = get_access_sql_suffix("e");
-
- if ($order_by == "") $order_by = "e.time_created desc";
-
- if ($count) {
- $query = "SELECT count(e.guid) as total ";
- } else {
- $query = "SELECT e.* ";
- }
- $query .= "from {$CONFIG->dbprefix}entities e join {$CONFIG->dbprefix}objects_entity o on e.guid=o.guid where match(o.title,o.description) against ('$criteria') and $access";
-
- if (!$count) {
- $query .= " order by $order_by limit $offset, $limit"; // Add order and limit
- return get_data($query, "entity_row_to_elggstar");
} else {
- if ($count = get_data_row($query)) {
- return $count->total;
+ // Update failed, attempt an insert.
+ $query = "INSERT into {$CONFIG->dbprefix}objects_entity
+ (guid, title, description) values ($guid, '$title','$description')";
+
+ $result = insert_data($query);
+ if ($result !== false) {
+ $entity = get_entity($guid);
+ if (elgg_trigger_event('create', $entity->type, $entity)) {
+ return $guid;
+ } else {
+ $entity->delete();
+ }
}
}
- return false;
- }
-
- /**
- * Get the sites this object is part of
- *
- * @param int $object_guid The object's GUID
- * @param int $limit Number of results to return
- * @param int $offset Any indexing offset
- * @return false|array On success, an array of ElggSites
- */
- function get_object_sites($object_guid, $limit = 10, $offset = 0) {
- $object_guid = (int)$object_guid;
- $limit = (int)$limit;
- $offset = (int)$offset;
-
- return get_entities_from_relationship("member_of_site", $object_guid, false, "site", "", 0, "time_created desc", $limit, $offset);
- }
-
-?> \ No newline at end of file
+ }
+
+ return false;
+}
+
+/**
+ * Get the sites this object is part of
+ *
+ * @param int $object_guid The object's GUID
+ * @param int $limit Number of results to return
+ * @param int $offset Any indexing offset
+ *
+ * @return false|array On success, an array of ElggSites
+ */
+function get_object_sites($object_guid, $limit = 10, $offset = 0) {
+ $object_guid = (int)$object_guid;
+ $limit = (int)$limit;
+ $offset = (int)$offset;
+
+ return elgg_get_entities_from_relationship(array(
+ 'relationship' =>