aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitlab-ci.yml4
-rw-r--r--.phpcs.xml78
-rw-r--r--CHANGELOG61
-rw-r--r--Zotlabs/Access/PermissionRoles.php4
-rw-r--r--Zotlabs/Daemon/Cache_query.php7
-rw-r--r--Zotlabs/Daemon/Checksites.php4
-rw-r--r--Zotlabs/Daemon/Cron.php21
-rw-r--r--Zotlabs/Daemon/Cron_daily.php7
-rw-r--r--Zotlabs/Daemon/Cron_weekly.php4
-rw-r--r--Zotlabs/Daemon/Directory.php3
-rw-r--r--Zotlabs/Daemon/Expire.php16
-rw-r--r--Zotlabs/Daemon/Master.php2
-rw-r--r--Zotlabs/Daemon/Notifier.php7
-rw-r--r--Zotlabs/Daemon/Onepoll.php5
-rw-r--r--Zotlabs/Daemon/Poller.php16
-rw-r--r--Zotlabs/Daemon/Thumbnail.php7
-rw-r--r--Zotlabs/Daemon/Xchan_photo.php9
-rw-r--r--Zotlabs/Extend/Route.php5
-rw-r--r--Zotlabs/Extend/Widget.php5
-rw-r--r--Zotlabs/Identity/OAuth2Server.php6
-rw-r--r--Zotlabs/Lib/Activity.php6
-rw-r--r--Zotlabs/Lib/Apps.php9
-rw-r--r--Zotlabs/Lib/Cache.php9
-rw-r--r--Zotlabs/Lib/Config.php2
-rw-r--r--Zotlabs/Lib/Connect.php5
-rw-r--r--Zotlabs/Lib/Crypto.php3
-rw-r--r--Zotlabs/Lib/DB_Upgrade.php29
-rw-r--r--Zotlabs/Lib/DReport.php4
-rw-r--r--Zotlabs/Lib/Enotify.php9
-rw-r--r--Zotlabs/Lib/Libsync.php7
-rw-r--r--Zotlabs/Lib/Libzot.php52
-rw-r--r--Zotlabs/Lib/Libzotdir.php27
-rw-r--r--Zotlabs/Lib/QueueWorker.php61
-rw-r--r--Zotlabs/Lib/ThreadItem.php24
-rw-r--r--Zotlabs/Lib/Traits/HelpHelperTrait.php68
-rw-r--r--Zotlabs/Lib/Zotfinger.php3
-rw-r--r--Zotlabs/Module/Acl.php7
-rw-r--r--Zotlabs/Module/Admin.php4
-rw-r--r--Zotlabs/Module/Admin/Accounts.php6
-rw-r--r--Zotlabs/Module/Admin/Addons.php7
-rw-r--r--Zotlabs/Module/Admin/Channels.php52
-rw-r--r--Zotlabs/Module/Admin/Dbsync.php14
-rw-r--r--Zotlabs/Module/Admin/Features.php44
-rw-r--r--Zotlabs/Module/Admin/Logs.php49
-rw-r--r--Zotlabs/Module/Admin/Profs.php57
-rw-r--r--Zotlabs/Module/Admin/Queueworker.php17
-rw-r--r--Zotlabs/Module/Admin/Security.php73
-rw-r--r--Zotlabs/Module/Admin/Site.php257
-rw-r--r--Zotlabs/Module/Admin/Themes.php5
-rw-r--r--Zotlabs/Module/Api.php4
-rw-r--r--Zotlabs/Module/Apps.php4
-rw-r--r--Zotlabs/Module/Channel.php3
-rw-r--r--Zotlabs/Module/Cover_photo.php7
-rw-r--r--Zotlabs/Module/Dircensor.php6
-rw-r--r--Zotlabs/Module/Directory.php16
-rw-r--r--Zotlabs/Module/Dirsearch.php7
-rw-r--r--Zotlabs/Module/Display.php3
-rw-r--r--Zotlabs/Module/Editpost.php2
-rw-r--r--Zotlabs/Module/Email_validation.php9
-rw-r--r--Zotlabs/Module/Fhublocs.php3
-rw-r--r--Zotlabs/Module/Go.php9
-rw-r--r--Zotlabs/Module/Group.php7
-rw-r--r--Zotlabs/Module/Help.php192
-rw-r--r--Zotlabs/Module/Home.php13
-rw-r--r--Zotlabs/Module/Hq.php20
-rw-r--r--Zotlabs/Module/Import.php37
-rw-r--r--Zotlabs/Module/Import_progress.php39
-rw-r--r--Zotlabs/Module/Invite.php23
-rw-r--r--Zotlabs/Module/Item.php7
-rw-r--r--Zotlabs/Module/Linkinfo.php3
-rw-r--r--Zotlabs/Module/Lockview.php2
-rw-r--r--Zotlabs/Module/Lostpass.php10
-rw-r--r--Zotlabs/Module/New_channel.php11
-rw-r--r--Zotlabs/Module/Profile_photo.php3
-rw-r--r--Zotlabs/Module/Profiles.php16
-rw-r--r--Zotlabs/Module/Profperm.php87
-rw-r--r--Zotlabs/Module/Pubsites.php5
-rw-r--r--Zotlabs/Module/Pubstream.php26
-rw-r--r--Zotlabs/Module/Rbmark.php80
-rw-r--r--Zotlabs/Module/Regate.php11
-rw-r--r--Zotlabs/Module/Regdir.php31
-rw-r--r--Zotlabs/Module/Register.php59
-rw-r--r--Zotlabs/Module/Rpost.php248
-rw-r--r--Zotlabs/Module/Search.php7
-rw-r--r--Zotlabs/Module/Service_limits.php14
-rw-r--r--Zotlabs/Module/Settings/Account.php4
-rw-r--r--Zotlabs/Module/Settings/Channel.php7
-rw-r--r--Zotlabs/Module/Settings/Display.php7
-rw-r--r--Zotlabs/Module/Settings/Privacy.php3
-rw-r--r--Zotlabs/Module/Setup.php31
-rw-r--r--Zotlabs/Module/Siteinfo.php11
-rw-r--r--Zotlabs/Module/Sources.php10
-rw-r--r--Zotlabs/Module/Sse.php5
-rw-r--r--Zotlabs/Module/Sse_bs.php13
-rw-r--r--Zotlabs/Module/Toggle_mobile.php23
-rw-r--r--Zotlabs/Module/Toggle_safesearch.php31
-rw-r--r--Zotlabs/Module/Wall_attach.php14
-rw-r--r--Zotlabs/Module/Well_known.php3
-rw-r--r--Zotlabs/Module/Wfinger.php3
-rw-r--r--Zotlabs/Photo/PhotoDriver.php5
-rw-r--r--Zotlabs/Photo/PhotoGd.php8
-rw-r--r--Zotlabs/Photo/PhotoImagick.php8
-rw-r--r--Zotlabs/Render/Comanche.php28
-rw-r--r--Zotlabs/Render/SmartyInterface.php2
-rw-r--r--Zotlabs/Render/SmartyTemplate.php2
-rw-r--r--Zotlabs/Render/Theme.php6
-rw-r--r--Zotlabs/Storage/Browser.php7
-rw-r--r--Zotlabs/Storage/Directory.php9
-rw-r--r--Zotlabs/Storage/File.php3
-rw-r--r--Zotlabs/Thumbs/Pdf.php3
-rw-r--r--Zotlabs/Thumbs/Video.php3
-rw-r--r--Zotlabs/Update/_1103.php6
-rw-r--r--Zotlabs/Update/_1226.php7
-rw-r--r--Zotlabs/Update/_1236.php11
-rw-r--r--Zotlabs/Update/_1242.php6
-rw-r--r--Zotlabs/Update/_1243.php12
-rw-r--r--Zotlabs/Web/Controller.php56
-rw-r--r--Zotlabs/Web/HTTPSig.php5
-rw-r--r--Zotlabs/Web/Router.php38
-rw-r--r--Zotlabs/Web/Session.php13
-rw-r--r--Zotlabs/Web/WebServer.php12
-rw-r--r--Zotlabs/Widget/Helpindex.php63
-rw-r--r--Zotlabs/Widget/Newmember.php6
-rw-r--r--Zotlabs/Widget/Pinned.php4
-rw-r--r--Zotlabs/Widget/Pubtagcloud.php8
-rw-r--r--Zotlabs/Widget/Rating.php4
-rw-r--r--boot.php88
-rw-r--r--composer.json6
-rw-r--r--composer.lock767
-rw-r--r--doc/context/de/apps/edit/help.html4
-rw-r--r--doc/context/de/apps/help.html6
-rw-r--r--doc/context/en/apps/edit/help.html4
-rw-r--r--doc/context/en/apps/help.html6
-rw-r--r--doc/context/es-es/apps/edit/help.html4
-rw-r--r--doc/context/es-es/apps/help.html6
-rw-r--r--doc/context/fr/apps/edit/index.html4
-rw-r--r--doc/context/fr/apps/help.html7
-rw-r--r--doc/context/pl/apps/edit/help.html7
-rw-r--r--doc/context/pl/apps/help.html15
-rw-r--r--doc/en/AdvancedSearch.md (renamed from doc/AdvancedSearch.md)0
-rw-r--r--doc/en/Comparison-of-activity-stream-networks.md (renamed from doc/Comparison-of-activity-stream-networks.md)0
-rw-r--r--doc/en/Creating-Templates.md (renamed from doc/Creating-Templates.md)0
-rw-r--r--doc/en/DerivedTheme1.md (renamed from doc/DerivedTheme1.md)0
-rw-r--r--doc/en/Developers.md (renamed from doc/Developers.md)0
-rw-r--r--doc/en/Features.md (renamed from doc/Features.md)0
-rw-r--r--doc/en/Hubzilla_on_OpenShift.bb (renamed from doc/Hubzilla_on_OpenShift.bb)0
-rw-r--r--doc/en/Plugins.md (renamed from doc/Plugins.md)0
-rw-r--r--doc/en/Primary-Directory.md (renamed from doc/Primary-Directory.md)0
-rw-r--r--doc/en/Remove-Account.md (renamed from doc/Remove-Account.md)0
-rw-r--r--doc/en/Schema-development.md (renamed from doc/Schema-development.md)0
-rw-r--r--doc/en/TermsOfService.md (renamed from doc/TermsOfService.md)0
-rw-r--r--doc/en/Translations.md (renamed from doc/Translations.md)0
-rw-r--r--doc/en/Widgets.md (renamed from doc/Widgets.md)0
-rw-r--r--doc/en/Zot---A-High-Level-Overview.md (renamed from doc/Zot---A-High-Level-Overview.md)0
-rw-r--r--doc/en/about/about.bb (renamed from doc/about/about.bb)0
-rw-r--r--doc/en/about/about_hub.bb (renamed from doc/about/about_hub.bb)0
-rw-r--r--doc/en/about/project.bb (renamed from doc/about/project.bb)0
-rw-r--r--doc/en/accounts_profiles_channels_basics.bb (renamed from doc/accounts_profiles_channels_basics.bb)0
-rw-r--r--doc/en/acl_dialog_post.html (renamed from doc/acl_dialog_post.html)0
-rw-r--r--doc/en/addons.bb (renamed from doc/addons.bb)0
-rw-r--r--doc/en/addons_gnusocial.bb (renamed from doc/addons_gnusocial.bb)0
-rw-r--r--doc/en/admin/administrator_guide.md (renamed from doc/admin/administrator_guide.md)0
-rw-r--r--doc/en/admin/hub_snapshots.md (renamed from doc/admin/hub_snapshots.md)0
-rw-r--r--doc/en/admin/zarlog_msgs.md (renamed from doc/admin/zarlog_msgs.md)0
-rw-r--r--doc/en/admins.bb (renamed from doc/admins.bb)0
-rw-r--r--doc/en/api/api_albums.md (renamed from doc/api/api_albums.md)0
-rw-r--r--doc/en/api/api_filedata.md (renamed from doc/api/api_filedata.md)0
-rw-r--r--doc/en/api/api_files.md (renamed from doc/api/api_files.md)0
-rw-r--r--doc/en/api/api_functions.bb (renamed from doc/api/api_functions.bb)0
-rw-r--r--doc/en/api/api_group_members.md (renamed from doc/api/api_group_members.md)0
-rw-r--r--doc/en/api/api_item_update.md (renamed from doc/api/api_item_update.md)0
-rw-r--r--doc/en/api/api_posting.bb (renamed from doc/api/api_posting.bb)0
-rw-r--r--doc/en/api/api_xchan.md (renamed from doc/api/api_xchan.md)0
-rw-r--r--doc/en/api/group.md (renamed from doc/api/group.md)0
-rw-r--r--doc/en/api/statuses_update.bb (renamed from doc/api/statuses_update.bb)0
-rw-r--r--doc/en/bugs.bb (renamed from doc/bugs.bb)0
-rw-r--r--doc/en/campaign.bb (renamed from doc/campaign.bb)0
-rw-r--r--doc/en/checking_account_quota_usage.bb (renamed from doc/checking_account_quota_usage.bb)0
-rw-r--r--doc/en/comanche.bb (renamed from doc/comanche.bb)0
-rw-r--r--doc/en/context/de/admin/logs/help.html (renamed from doc/context/de/admin/logs/help.html)0
-rw-r--r--doc/en/context/de/admin/queue/help.html (renamed from doc/context/de/admin/queue/help.html)0
-rw-r--r--doc/en/context/de/admin/security/help.html (renamed from doc/context/de/admin/security/help.html)0
-rw-r--r--doc/en/context/de/appman/help.html (renamed from doc/context/de/appman/help.html)0
-rw-r--r--doc/en/context/de/channel/help.html (renamed from doc/context/de/channel/help.html)0
-rw-r--r--doc/en/context/de/chat/help.html (renamed from doc/context/de/chat/help.html)0
-rw-r--r--doc/en/context/de/cloud/help.html (renamed from doc/context/de/cloud/help.html)0
-rw-r--r--doc/en/context/de/connections/help.html (renamed from doc/context/de/connections/help.html)0
-rw-r--r--doc/en/context/de/connections/ifpending/help.html (renamed from doc/context/de/connections/ifpending/help.html)0
-rw-r--r--doc/en/context/de/events/help.html (renamed from doc/context/de/events/help.html)0
-rw-r--r--doc/en/context/de/mail/help.html (renamed from doc/context/de/mail/help.html)0
-rw-r--r--doc/en/context/de/network/help.html (renamed from doc/context/de/network/help.html)0
-rw-r--r--doc/en/context/de/photos/help.html (renamed from doc/context/de/photos/help.html)0
-rw-r--r--doc/en/context/de/profile/help.html (renamed from doc/context/de/profile/help.html)0
-rw-r--r--doc/en/context/de/register/help.html (renamed from doc/context/de/register/help.html)0
-rw-r--r--doc/en/context/de/settings/account/help.html (renamed from doc/context/de/settings/account/help.html)0
-rw-r--r--doc/en/context/de/settings/channel/help.html (renamed from doc/context/de/settings/channel/help.html)0
-rw-r--r--doc/en/context/de/settings/features/help.html (renamed from doc/context/de/settings/features/help.html)0
-rw-r--r--doc/en/context/de/settings/tokens/help.html (renamed from doc/context/de/settings/tokens/help.html)0
-rw-r--r--doc/en/context/de/wiki/help.html (renamed from doc/context/de/wiki/help.html)0
-rw-r--r--doc/en/context/en/admin/addons/assets/addon_repo_gui_1.png (renamed from doc/context/en/admin/addons/assets/addon_repo_gui_1.png)bin16983 -> 16983 bytes
-rw-r--r--doc/en/context/en/admin/addons/help.html (renamed from doc/context/en/admin/addons/help.html)0
-rw-r--r--doc/en/context/en/admin/logs/help.html (renamed from doc/context/en/admin/logs/help.html)0
-rw-r--r--doc/en/context/en/admin/queue/help.html (renamed from doc/context/en/admin/queue/help.html)0
-rw-r--r--doc/en/context/en/admin/security/help.html (renamed from doc/context/en/admin/security/help.html)0
-rw-r--r--doc/en/context/en/appman/help.html (renamed from doc/context/en/appman/help.html)0
-rw-r--r--doc/en/context/en/cards/help.html (renamed from doc/context/en/cards/help.html)0
-rw-r--r--doc/en/context/en/channel/help.html (renamed from doc/context/en/channel/help.html)0
-rw-r--r--doc/en/context/en/chat/help.html (renamed from doc/context/en/chat/help.html)0
-rw-r--r--doc/en/context/en/cloud/help.html (renamed from doc/context/en/cloud/help.html)0
-rw-r--r--doc/en/context/en/connections/help.html (renamed from doc/context/en/connections/help.html)0
-rw-r--r--doc/en/context/en/connections/ifpending/help.html (renamed from doc/context/en/connections/ifpending/help.html)0
-rw-r--r--doc/en/context/en/connedit/help.html (renamed from doc/context/en/connedit/help.html)0
-rw-r--r--doc/en/context/en/events/help.html (renamed from doc/context/en/events/help.html)0
-rw-r--r--doc/en/context/en/mail/help.html (renamed from doc/context/en/mail/help.html)0
-rw-r--r--doc/en/context/en/network/help.html (renamed from doc/context/en/network/help.html)0
-rw-r--r--doc/en/context/en/photos/help.html (renamed from doc/context/en/photos/help.html)0
-rw-r--r--doc/en/context/en/profile/help.html (renamed from doc/context/en/profile/help.html)0
-rw-r--r--doc/en/context/en/profiles/help.html (renamed from doc/context/en/profiles/help.html)0
-rw-r--r--doc/en/context/en/register/help.html (renamed from doc/context/en/register/help.html)0
-rw-r--r--doc/en/context/en/settings/account/help.html (renamed from doc/context/en/settings/account/help.html)0
-rw-r--r--doc/en/context/en/settings/channel/help.html (renamed from doc/context/en/settings/channel/help.html)0
-rw-r--r--doc/en/context/en/settings/features/help.html (renamed from doc/context/en/settings/features/help.html)0
-rw-r--r--doc/en/context/en/settings/tokens/help.html (renamed from doc/context/en/settings/tokens/help.html)0
-rw-r--r--doc/en/context/en/webpages/help.html (renamed from doc/context/en/webpages/help.html)0
-rw-r--r--doc/en/context/en/wiki/help.html (renamed from doc/context/en/wiki/help.html)0
l---------doc/en/context/es (renamed from doc/context/es)0
-rw-r--r--doc/en/context/es-es/admin/addons/assets/addon_repo_gui_1.png (renamed from doc/context/es-es/admin/addons/assets/addon_repo_gui_1.png)bin16983 -> 16983 bytes
-rw-r--r--doc/en/context/es-es/admin/addons/help.html (renamed from doc/context/es-es/admin/addons/help.html)0
-rw-r--r--doc/en/context/es-es/admin/logs/help.html (renamed from doc/context/es-es/admin/logs/help.html)0
-rw-r--r--doc/en/context/es-es/admin/queue/help.html (renamed from doc/context/es-es/admin/queue/help.html)0
-rw-r--r--doc/en/context/es-es/admin/security/help.html (renamed from doc/context/es-es/admin/security/help.html)0
-rw-r--r--doc/en/context/es-es/appman/help.html (renamed from doc/context/es-es/appman/help.html)0
-rw-r--r--doc/en/context/es-es/articles/help.html (renamed from doc/context/es-es/articles/help.html)0
-rw-r--r--doc/en/context/es-es/cards/help.html (renamed from doc/context/es-es/cards/help.html)0
-rw-r--r--doc/en/context/es-es/channel/help.html (renamed from doc/context/es-es/channel/help.html)0
-rw-r--r--doc/en/context/es-es/chat/help.html (renamed from doc/context/es-es/chat/help.html)0
-rw-r--r--doc/en/context/es-es/cloud/help.html (renamed from doc/context/es-es/cloud/help.html)0
-rw-r--r--doc/en/context/es-es/connections/help.html (renamed from doc/context/es-es/connections/help.html)0
-rw-r--r--doc/en/context/es-es/connections/ifpending/help.html (renamed from doc/context/es-es/connections/ifpending/help.html)0
-rw-r--r--doc/en/context/es-es/connedit/help.html (renamed from doc/context/es-es/connedit/help.html)0
-rw-r--r--doc/en/context/es-es/events/help.html (renamed from doc/context/es-es/events/help.html)0
-rw-r--r--doc/en/context/es-es/mail/help.html (renamed from doc/context/es-es/mail/help.html)0
-rw-r--r--doc/en/context/es-es/network/help.html (renamed from doc/context/es-es/network/help.html)0
-rw-r--r--doc/en/context/es-es/photos/help.html (renamed from doc/context/es-es/photos/help.html)0
-rw-r--r--doc/en/context/es-es/profile/help.html (renamed from doc/context/es-es/profile/help.html)0
-rw-r--r--doc/en/context/es-es/profiles/help.html (renamed from doc/context/es-es/profiles/help.html)0
-rw-r--r--doc/en/context/es-es/settings/account/help.html (renamed from doc/context/es-es/settings/account/help.html)0
-rw-r--r--doc/en/context/es-es/settings/channel/help.html (renamed from doc/context/es-es/settings/channel/help.html)0
-rw-r--r--doc/en/context/es-es/settings/features/help.html (renamed from doc/context/es-es/settings/features/help.html)0
-rw-r--r--doc/en/context/es-es/settings/tokens/help.html (renamed from doc/context/es-es/settings/tokens/help.html)0
-rw-r--r--doc/en/context/es-es/webpages/help.html (renamed from doc/context/es-es/webpages/help.html)0
-rw-r--r--doc/en/context/es-es/wiki/help.html (renamed from doc/context/es-es/wiki/help.html)0
-rw-r--r--doc/en/context/fr/admin/logs/help.html (renamed from doc/context/fr/admin/logs/help.html)0
-rw-r--r--doc/en/context/fr/admin/queue/help.html (renamed from doc/context/fr/admin/queue/help.html)0
-rw-r--r--doc/en/context/fr/appman/help.html (renamed from doc/context/fr/appman/help.html)0
-rw-r--r--doc/en/context/fr/cards/help.html (renamed from doc/context/fr/cards/help.html)0
-rw-r--r--doc/en/context/fr/channel/help.html (renamed from doc/context/fr/channel/help.html)0
-rw-r--r--doc/en/context/fr/chat/help.html (renamed from doc/context/fr/chat/help.html)0
-rw-r--r--doc/en/context/fr/cloud/help.html (renamed from doc/context/fr/cloud/help.html)0
-rw-r--r--doc/en/context/fr/connections/help.html (renamed from doc/context/fr/connections/help.html)0
-rw-r--r--doc/en/context/fr/connections/ifpending/help.html (renamed from doc/context/fr/connections/ifpending/help.html)0
-rw-r--r--doc/en/context/fr/connedit/help.html (renamed from doc/context/fr/connedit/help.html)0
-rw-r--r--doc/en/context/fr/events/help.html (renamed from doc/context/fr/events/help.html)0
-rw-r--r--doc/en/context/fr/mail/help.html (renamed from doc/context/fr/mail/help.html)0
-rw-r--r--doc/en/context/fr/photos/help.html (renamed from doc/context/fr/photos/help.html)0
-rw-r--r--doc/en/context/fr/profile/help.html (renamed from doc/context/fr/profile/help.html)0
-rw-r--r--doc/en/context/fr/settings/account/help.html (renamed from doc/context/fr/settings/account/help.html)0
-rw-r--r--doc/en/context/fr/settings/channel/help.html (renamed from doc/context/fr/settings/channel/help.html)0
-rw-r--r--doc/en/context/fr/settings/features/help.html (renamed from doc/context/fr/settings/features/help.html)0
-rw-r--r--doc/en/context/fr/settings/tokens (renamed from doc/context/fr/settings/tokens)0
-rw-r--r--doc/en/context/fr/webpages/help.html (renamed from doc/context/fr/webpages/help.html)0
-rw-r--r--doc/en/context/fr/wiki/help.html (renamed from doc/context/fr/wiki/help.html)0
-rw-r--r--doc/en/context/it/wiki/help.html (renamed from doc/context/it/wiki/help.html)0
-rw-r--r--doc/en/context/pl/admin/addons/assets/addon_repo_gui_1.png (renamed from doc/context/pl/admin/addons/assets/addon_repo_gui_1.png)bin16983 -> 16983 bytes
-rw-r--r--doc/en/context/pl/admin/addons/help.html (renamed from doc/context/pl/admin/addons/help.html)0
-rw-r--r--doc/en/context/pl/admin/logs/help.html (renamed from doc/context/pl/admin/logs/help.html)0
-rw-r--r--doc/en/context/pl/admin/queue/help.html (renamed from doc/context/pl/admin/queue/help.html)0
-rw-r--r--doc/en/context/pl/admin/security/help.html (renamed from doc/context/pl/admin/security/help.html)0
-rw-r--r--doc/en/context/pl/appman/help.html (renamed from doc/context/pl/appman/help.html)0
-rw-r--r--doc/en/context/pl/cards/help.html (renamed from doc/context/pl/cards/help.html)0
-rw-r--r--doc/en/context/pl/channel/help.html (renamed from doc/context/pl/channel/help.html)0
-rw-r--r--doc/en/context/pl/chat/help.html (renamed from doc/context/pl/chat/help.html)0
-rw-r--r--doc/en/context/pl/cloud/help.html (renamed from doc/context/pl/cloud/help.html)0
-rw-r--r--doc/en/context/pl/connections/help.html (renamed from doc/context/pl/connections/help.html)0
-rw-r--r--doc/en/context/pl/connections/ifpending/help.html (renamed from doc/context/pl/connections/ifpending/help.html)0
-rw-r--r--doc/en/context/pl/connedit/help.html (renamed from doc/context/pl/connedit/help.html)0
-rw-r--r--doc/en/context/pl/events/help.html (renamed from doc/context/pl/events/help.html)0
-rw-r--r--doc/en/context/pl/mail/help.html (renamed from doc/context/pl/mail/help.html)0
-rw-r--r--doc/en/context/pl/network/help.html (renamed from doc/context/pl/network/help.html)0
-rw-r--r--doc/en/context/pl/photos/help.html (renamed from doc/context/pl/photos/help.html)0
-rw-r--r--doc/en/context/pl/profile/help.html (renamed from doc/context/pl/profile/help.html)0
-rw-r--r--doc/en/context/pl/profiles/help.html (renamed from doc/context/pl/profiles/help.html)0
-rw-r--r--doc/en/context/pl/register/help.html (renamed from doc/context/pl/register/help.html)0
-rw-r--r--doc/en/context/pl/settings/account/help.html (renamed from doc/context/pl/settings/account/help.html)0
-rw-r--r--doc/en/context/pl/settings/channel/help.html (renamed from doc/context/pl/settings/channel/help.html)0
-rw-r--r--doc/en/context/pl/settings/features/help.html (renamed from doc/context/pl/settings/features/help.html)0
-rw-r--r--doc/en/context/pl/settings/tokens/help.html (renamed from doc/context/pl/settings/tokens/help.html)0
-rw-r--r--doc/en/context/pl/webpages/help.html (renamed from doc/context/pl/webpages/help.html)0
-rw-r--r--doc/en/context/pl/wiki/help.html (renamed from doc/context/pl/wiki/help.html)0
-rw-r--r--doc/en/context/ru/cards/help.html (renamed from doc/context/ru/cards/help.html)0
-rw-r--r--doc/en/context/ru/connections/help.html (renamed from doc/context/ru/connections/help.html)0
-rw-r--r--doc/en/context/ru/network/help.html (renamed from doc/context/ru/network/help.html)0
-rw-r--r--doc/en/database.bb (renamed from doc/database.bb)0
-rw-r--r--doc/en/database/db_abook.bb (renamed from doc/database/db_abook.bb)0
-rw-r--r--doc/en/database/db_account.bb (renamed from doc/database/db_account.bb)0
-rw-r--r--doc/en/database/db_addon.bb (renamed from doc/database/db_addon.bb)0
-rw-r--r--doc/en/database/db_app.bb (renamed from doc/database/db_app.bb)0
-rw-r--r--doc/en/database/db_attach.bb (renamed from doc/database/db_attach.bb)0
-rw-r--r--doc/en/database/db_auth_codes.bb (renamed from doc/database/db_auth_codes.bb)0
-rw-r--r--doc/en/database/db_cache.bb (renamed from doc/database/db_cache.bb)0
-rw-r--r--doc/en/database/db_channel.bb (renamed from doc/database/db_channel.bb)0
-rw-r--r--doc/en/database/db_chat.bb (renamed from doc/database/db_chat.bb)0
-rw-r--r--doc/en/database/db_chatpresence.bb (renamed from doc/database/db_chatpresence.bb)0
-rw-r--r--doc/en/database/db_chatroom.bb (renamed from doc/database/db_chatroom.bb)0
-rw-r--r--doc/en/database/db_clients.bb (renamed from doc/database/db_clients.bb)0
-rw-r--r--doc/en/database/db_config.bb (renamed from doc/database/db_config.bb)0
-rw-r--r--doc/en/database/db_conv.bb (renamed from doc/database/db_conv.bb)0
-rw-r--r--doc/en/database/db_event.bb (renamed from doc/database/db_event.bb)0
-rw-r--r--doc/en/database/db_fcontact.bb (renamed from doc/database/db_fcontact.bb)0
-rw-r--r--doc/en/database/db_ffinder.bb (renamed from doc/database/db_ffinder.bb)0
-rw-r--r--doc/en/database/db_fserver.bb (renamed from doc/database/db_fserver.bb)0
-rw-r--r--doc/en/database/db_fsuggest.bb (renamed from doc/database/db_fsuggest.bb)0
-rw-r--r--doc/en/database/db_hook.bb (renamed from doc/database/db_hook.bb)0
-rw-r--r--doc/en/database/db_hubloc.bb (renamed from doc/database/db_hubloc.bb)0
-rw-r--r--doc/en/database/db_issue.bb (renamed from doc/database/db_issue.bb)0
-rw-r--r--doc/en/database/db_item.bb (renamed from doc/database/db_item.bb)0
-rw-r--r--doc/en/database/db_item_id.bb (renamed from doc/database/db_item_id.bb)0
-rw-r--r--doc/en/database/db_likes.bb (renamed from doc/database/db_likes.bb)0
-rw-r--r--doc/en/database/db_mail.bb (renamed from doc/database/db_mail.bb)0
-rw-r--r--doc/en/database/db_menu.bb (renamed from doc/database/db_menu.bb)0
-rw-r--r--doc/en/database/db_menu_item.bb (renamed from doc/database/db_menu_item.bb)0
-rw-r--r--doc/en/database/db_notify.bb (renamed from doc/database/db_notify.bb)0
-rw-r--r--doc/en/database/db_obj.bb (renamed from doc/database/db_obj.bb)0
-rw-r--r--doc/en/database/db_outq.bb (renamed from doc/database/db_outq.bb)0
-rw-r--r--doc/en/database/db_pconfig.bb (renamed from doc/database/db_pconfig.bb)0
-rw-r--r--doc/en/database/db_pgrp.bb (renamed from doc/database/db_pgrp.bb)0
-rw-r--r--doc/en/database/db_pgrp_member.bb (renamed from doc/database/db_pgrp_member.bb)0
-rw-r--r--doc/en/database/db_photo.bb (renamed from doc/database/db_photo.bb)0
-rw-r--r--doc/en/database/db_poll.bb (renamed from doc/database/db_poll.bb)0
-rw-r--r--doc/en/database/db_poll_elm.bb (renamed from doc/database/db_poll_elm.bb)0
-rw-r--r--doc/en/database/db_profdef.bb (renamed from doc/database/db_profdef.bb)0
-rw-r--r--doc/en/database/db_profext.bb (renamed from doc/database/db_profext.bb)0
-rw-r--r--doc/en/database/db_profile.bb (renamed from doc/database/db_profile.bb)0
-rw-r--r--doc/en/database/db_profile_check.bb (renamed from doc/database/db_profile_check.bb)0
-rw-r--r--doc/en/database/db_register.bb (renamed from doc/database/db_register.bb)0
-rw-r--r--doc/en/database/db_session.bb (renamed from doc/database/db_session.bb)0
-rw-r--r--doc/en/database/db_shares.bb (renamed from doc/database/db_shares.bb)0
-rw-r--r--doc/en/database/db_sign.bb (renamed from doc/database/db_sign.bb)0
-rw-r--r--doc/en/database/db_site.bb (renamed from doc/database/db_site.bb)0
-rw-r--r--doc/en/database/db_source.bb (renamed from doc/database/db_source.bb)0
-rw-r--r--doc/en/database/db_spam.bb (renamed from doc/database/db_spam.bb)0
-rw-r--r--doc/en/database/db_sys_perms.bb (renamed from doc/database/db_sys_perms.bb)0
-rw-r--r--doc/en/database/db_term.bb (renamed from doc/database/db_term.bb)0
-rw-r--r--doc/en/database/db_tokens.bb (renamed from doc/database/db_tokens.bb)0
-rw-r--r--doc/en/database/db_updates.bb (renamed from doc/database/db_updates.bb)0
-rw-r--r--doc/en/database/db_verify.bb (renamed from doc/database/db_verify.bb)0
-rw-r--r--doc/en/database/db_vote.bb (renamed from doc/database/db_vote.bb)0
-rw-r--r--doc/en/database/db_xchan.bb (renamed from doc/database/db_xchan.bb)0
-rw-r--r--doc/en/database/db_xchat.bb (renamed from doc/database/db_xchat.bb)0
-rw-r--r--doc/en/database/db_xconfig.bb (renamed from doc/database/db_xconfig.bb)0
-rw-r--r--doc/en/database/db_xign.bb (renamed from doc/database/db_xign.bb)0
-rw-r--r--doc/en/database/db_xlink.bb (renamed from doc/database/db_xlink.bb)0
-rw-r--r--doc/en/database/db_xprof.bb (renamed from doc/database/db_xprof.bb)0
-rw-r--r--doc/en/database/db_xtag.bb (renamed from doc/database/db_xtag.bb)0
-rw-r--r--doc/en/dev-function-overview.md (renamed from doc/dev-function-overview.md)10
-rw-r--r--doc/en/dev_beginner.bb (renamed from doc/dev_beginner.bb)0
-rw-r--r--doc/en/develop.bb (renamed from doc/develop.bb)0
-rw-r--r--doc/en/developer/api_zot.bb (renamed from doc/developer/api_zot.bb)0
-rw-r--r--doc/en/developer/covenant.bb (renamed from doc/developer/covenant.bb)0
-rw-r--r--doc/en/developer/developer_guide.bb (renamed from doc/developer/developer_guide.bb)0
-rw-r--r--doc/en/developer/testing.md (renamed from doc/developer/testing.md)0
-rw-r--r--doc/en/developer/unorganized.md (renamed from doc/developer/unorganized.md)0
-rw-r--r--doc/en/developer/zot_protocol.bb (renamed from doc/developer/zot_protocol.bb)0
-rw-r--r--doc/en/developer_function_primer.bb (renamed from doc/developer_function_primer.bb)4
-rw-r--r--doc/en/developers.bb (renamed from doc/developers.bb)0
-rw-r--r--doc/en/diaspora_compat.bb (renamed from doc/diaspora_compat.bb)0
-rw-r--r--doc/en/directories.bb (renamed from doc/directories.bb)0
-rw-r--r--doc/en/dnt-policy.txt (renamed from doc/dnt-policy.txt)0
-rw-r--r--doc/en/doco.bb (renamed from doc/doco.bb)0
-rw-r--r--doc/en/encryption.bb (renamed from doc/encryption.bb)0
-rw-r--r--doc/en/external-resource-links.bb (renamed from doc/external-resource-links.bb)0
-rw-r--r--doc/en/extra_features.bb (renamed from doc/extra_features.bb)0
-rw-r--r--doc/en/faq_admins.bb (renamed from doc/faq_admins.bb)0
-rw-r--r--doc/en/feature/access_tokens.bb (renamed from doc/feature/access_tokens.bb)0
-rw-r--r--doc/en/feature/additional/access.md (renamed from doc/feature/additional/access.md)0
-rw-r--r--doc/en/feature/additional/composition.md (renamed from doc/feature/additional/composition.md)0
-rw-r--r--doc/en/feature/additional/filtering.md (renamed from doc/feature/additional/filtering.md)0
-rw-r--r--doc/en/feature/additional/general.md (renamed from doc/feature/additional/general.md)0
-rw-r--r--doc/en/feature/additional/overview.md (renamed from doc/feature/additional/overview.md)0
-rw-r--r--doc/en/feature/additional/posts.md (renamed from doc/feature/additional/posts.md)0
-rw-r--r--doc/en/federate.bb (renamed from doc/federate.bb)0
-rw-r--r--doc/en/filesync.md (renamed from doc/filesync.md)0
-rw-r--r--doc/en/first-post.bb (renamed from doc/first-post.bb)0
-rw-r--r--doc/en/gdpr1.md (renamed from doc/gdpr1.md)0
-rw-r--r--doc/en/general.bb (renamed from doc/general.bb)0
-rw-r--r--doc/en/git_for_non_developers.bb (renamed from doc/git_for_non_developers.bb)0
-rw-r--r--doc/en/hidden_configs.bb (renamed from doc/hidden_configs.bb)0
-rw-r--r--doc/en/hook/about_hook.bb (renamed from doc/hook/about_hook.bb)0
-rw-r--r--doc/en/hook/accept_follow.bb (renamed from doc/hook/accept_follow.bb)0
-rw-r--r--doc/en/hook/account_downgrade.bb (renamed from doc/hook/account_downgrade.bb)0
-rw-r--r--doc/en/hook/account_settings.bb (renamed from doc/hook/account_settings.bb)0
-rw-r--r--doc/en/hook/account_settings_post.bb (renamed from doc/hook/account_settings_post.bb)0
-rw-r--r--doc/en/hook/activity_decode_mapper.bb (renamed from doc/hook/activity_decode_mapper.bb)0
-rw-r--r--doc/en/hook/activity_filter.bb (renamed from doc/hook/activity_filter.bb)0
-rw-r--r--doc/en/hook/activity_mapper.bb (renamed from doc/hook/activity_mapper.bb)0
-rw-r--r--doc/en/hook/activity_obj_decode_mapper.bb (renamed from doc/hook/activity_obj_decode_mapper.bb)0
-rw-r--r--doc/en/hook/activity_obj_mapper.bb (renamed from doc/hook/activity_obj_mapper.bb)0
-rw-r--r--doc/en/hook/activity_order.bb (renamed from doc/hook/activity_order.bb)0
-rw-r--r--doc/en/hook/activity_received.bb (renamed from doc/hook/activity_received.bb)0
-rw-r--r--doc/en/hook/addon_app_installed_filter.bb (renamed from doc/hook/addon_app_installed_filter.bb)0
-rw-r--r--doc/en/hook/affinity_labels.bb (renamed from doc/hook/affinity_labels.bb)0
-rw-r--r--doc/en/hook/api_perm_is_allowed.bb (renamed from doc/hook/api_perm_is_allowed.bb)0
-rw-r--r--doc/en/hook/app_destroy.bb (renamed from doc/hook/app_destroy.bb)0
-rw-r--r--doc/en/hook/app_installed_filter.bb (renamed from doc/hook/app_installed_filter.bb)0
-rw-r--r--doc/en/hook/atom_author.bb (renamed from doc/hook/atom_author.bb)0
-rw-r--r--doc/en/hook/atom_entry.bb (renamed from doc/hook/atom_entry.bb)0
-rw-r--r--doc/en/hook/atom_feed.bb (renamed from doc/hook/atom_feed.bb)0
-rw-r--r--doc/en/hook/atom_feed_end.bb (renamed from doc/hook/atom_feed_end.bb)0
-rw-r--r--doc/en/hook/attach_delete.bb (renamed from doc/hook/attach_delete.bb)0
-rw-r--r--doc/en/hook/attach_upload_file.bb (renamed from doc/hook/attach_upload_file.bb)0
-rw-r--r--doc/en/hook/authenticate.bb (renamed from doc/hook/authenticate.bb)0
-rw-r--r--doc/en/hook/author_is_pmable.bb (renamed from doc/hook/author_is_pmable.bb)0
-rw-r--r--doc/en/hook/bb2diaspora.bb (renamed from doc/hook/bb2diaspora.bb)0
-rw-r--r--doc/en/hook/bbcode.bb (renamed from doc/hook/bbcode.bb)0
-rw-r--r--doc/en/hook/bbcode_filter.bb (renamed from doc/hook/bbcode_filter.bb)0
-rw-r--r--doc/en/hook/build_pagehead.bb (renamed from doc/hook/build_pagehead.bb)0
-rw-r--r--doc/en/hook/can_comment_on_post.bb (renamed from doc/hook/can_comment_on_post.bb)0
-rw-r--r--doc/en/hook/change_channel.bb (renamed from doc/hook/change_channel.bb)0
-rw-r--r--doc/en/hook/channel_links.bb (renamed from doc/hook/channel_links.bb)0
-rw-r--r--doc/en/hook/channel_remove.bb (renamed from doc/hook/channel_remove.bb)0
-rw-r--r--doc/en/hook/chat_message.bb (renamed from doc/hook/chat_message.bb)0
-rw-r--r--doc/en/hook/chat_post.bb (renamed from doc/hook/chat_post.bb)0
-rw-r--r--doc/en/hook/check_account_email.bb (renamed from doc/hook/check_account_email.bb)0
-rw-r--r--doc/en/hook/check_account_invite.bb (renamed from doc/hook/check_account_invite.bb)0
-rw-r--r--doc/en/hook/check_account_password.bb (renamed from doc/hook/check_account_password.bb)0
-rw-r--r--doc/en/hook/check_channelallowed.bb (renamed from doc/hook/check_channelallowed.bb)0
-rw-r--r--doc/en/hook/check_siteallowed.bb (renamed from doc/hook/check_siteallowed.bb)0
-rw-r--r--doc/en/hook/collect_public_recipients.bb (renamed from doc/hook/collect_public_recipients.bb)0
-rw-r--r--doc/en/hook/comments_are_now_closed.bb (renamed from doc/hook/comments_are_now_closed.bb)0
-rw-r--r--doc/en/hook/connect_premium.bb (renamed from doc/hook/connect_premium.bb)0
-rw-r--r--doc/en/hook/connection_remove.bb (renamed from doc/hook/connection_remove.bb)0
-rw-r--r--doc/en/hook/connector_settings.bb (renamed from doc/hook/connector_settings.bb)0
-rw-r--r--doc/en/hook/construct_page.bb (renamed from doc/hook/construct_page.bb)0
-rw-r--r--doc/en/hook/contact_block_end.bb (renamed from doc/hook/contact_block_end.bb)0
-rw-r--r--doc/en/hook/contact_edit.bb (renamed from doc/hook/contact_edit.bb)0
-rw-r--r--doc/en/hook/contact_edit_post.bb (renamed from doc/hook/contact_edit_post.bb)0
-rw-r--r--doc/en/hook/contact_select_options.bb (renamed from doc/hook/contact_select_options.bb)0
-rw-r--r--doc/en/hook/content_security_policy.bb (renamed from doc/hook/content_security_policy.bb)0
-rw-r--r--doc/en/hook/conversation_start.bb (renamed from doc/hook/conversation_start.bb)0
-rw-r--r--doc/en/hook/create_identity.bb (renamed from doc/hook/create_identity.bb)0
-rw-r--r--doc/en/hook/cron.bb (renamed from doc/hook/cron.bb)0
-rw-r--r--doc/en/hook/cron_daily.bb (renamed from doc/hook/cron_daily.bb)0
-rw-r--r--doc/en/hook/cron_weekly.bb (renamed from doc/hook/cron_weekly.bb)0
-rw-r--r--doc/en/hook/crypto_methods.bb (renamed from doc/hook/crypto_methods.bb)0
-rw-r--r--doc/en/hook/daemon_addon.bb (renamed from doc/hook/daemon_addon.bb)0
-rw-r--r--doc/en/hook/daemon_master_release.bb (renamed from doc/hook/daemon_master_release.bb)0
-rw-r--r--doc/en/hook/directory_item.bb (renamed from doc/hook/directory_item.bb)0
-rw-r--r--doc/en/hook/discover_channel_webfinger.bb (renamed from doc/hook/discover_channel_webfinger.bb)0
-rw-r--r--doc/en/hook/display_item.bb (renamed from doc/hook/display_item.bb)0
-rw-r--r--doc/en/hook/display_settings.bb (renamed from doc/hook/display_settings.bb)0
-rw-r--r--doc/en/hook/display_settings_post.bb (renamed from doc/hook/display_settings_post.bb)0
-rw-r--r--doc/en/hook/donate_contributors.bb (renamed from doc/hook/donate_contributors.bb)0
-rw-r--r--doc/en/hook/donate_plugin.bb (renamed from doc/hook/donate_plugin.bb)0
-rw-r--r--doc/en/hook/donate_sponsors.bb (renamed from doc/hook/donate_sponsors.bb)0
-rw-r--r--doc/en/hook/dreport_is_storable.bb (renamed from doc/hook/dreport_is_storable.bb)0
-rw-r--r--doc/en/hook/dreport_process.bb (renamed from doc/hook/dreport_process.bb)0
-rw-r--r--doc/en/hook/drop_item.bb (renamed from doc/hook/drop_item.bb)0
-rw-r--r--doc/en/hook/dropdown_extras.bb (renamed from doc/hook/dropdown_extras.bb)0
-rw-r--r--doc/en/hook/encode_object.bb (renamed from doc/hook/encode_object.bb)0
-rw-r--r--doc/en/hook/enotify.bb (renamed from doc/hook/enotify.bb)0
-rw-r--r--doc/en/hook/enotify_mail.bb (renamed from doc/hook/enotify_mail.bb)0
-rw-r--r--doc/en/hook/enotify_store.bb (renamed from doc/hook/enotify_store.bb)0
-rw-r--r--doc/en/hook/event_created.bb (renamed from doc/hook/event_created.bb)0
-rw-r--r--doc/en/hook/event_store_event.bb (renamed from doc/hook/event_store_event.bb)0
-rw-r--r--doc/en/hook/event_updated.bb (renamed from doc/hook/event_updated.bb)0
-rw-r--r--doc/en/hook/externals_url_select.bb (renamed from doc/hook/externals_url_select.bb)0
-rw-r--r--doc/en/hook/feature_enabled.bb (renamed from doc/hook/feature_enabled.bb)0
-rw-r--r--doc/en/hook/feature_settings.bb (renamed from doc/hook/feature_settings.bb)0
-rw-r--r--doc/en/hook/feature_settings_post.bb (renamed from doc/hook/feature_settings_post.bb)0
-rw-r--r--doc/en/hook/fetch_and_store.bb (renamed from doc/hook/fetch_and_store.bb)0
-rw-r--r--doc/en/hook/follow.bb (renamed from doc/hook/follow.bb)0
-rw-r--r--doc/en/hook/follow_allow.bb (renamed from doc/hook/follow_allow.bb)0
-rw-r--r--doc/en/hook/gender_selector.bb (renamed from doc/hook/gender_selector.bb)0
-rw-r--r--doc/en/hook/gender_selector_min.bb (renamed from doc/hook/gender_selector_min.bb)0
-rw-r--r--doc/en/hook/generate_map.bb (renamed from doc/hook/generate_map.bb)0
-rw-r--r--doc/en/hook/generate_named_map.bb (renamed from doc/hook/generate_named_map.bb)0
-rw-r--r--doc/en/hook/get_all_api_perms.bb (renamed from doc/hook/get_all_api_perms.bb)0
-rw-r--r--doc/en/hook/get_all_perms.bb (renamed from doc/hook/get_all_perms.bb)0
-rw-r--r--doc/en/hook/get_default_export_sections (renamed from doc/hook/get_default_export_sections)0
-rw-r--r--doc/en/hook/get_features.bb (renamed from doc/hook/get_features.bb)0
-rw-r--r--doc/en/hook/get_photo.bb (renamed from doc/hook/get_photo.bb)0
-rw-r--r--doc/en/hook/get_profile_photo.bb (renamed from doc/hook/get_profile_photo.bb)0
-rw-r--r--doc/en/hook/get_role_perms.bb (renamed from doc/hook/get_role_perms.bb)0
-rw-r--r--doc/en/hook/global_permissions.bb (renamed from doc/hook/global_permissions.bb)0
-rw-r--r--doc/en/hook/home_content.bb (renamed from doc/hook/home_content.bb)0
-rw-r--r--doc/en/hook/home_init.bb (renamed from doc/hook/home_init.bb)0
-rw-r--r--doc/en/hook/hostxrd.bb (renamed from doc/hook/hostxrd.bb)0
-rw-r--r--doc/en/hook/html2bbcode.bb (renamed from doc/hook/html2bbcode.bb)0
-rw-r--r--doc/en/hook/identity_basic_export.bb (renamed from doc/hook/identity_basic_export.bb)0
-rw-r--r--doc/en/hook/import_author_xchan.bb (renamed from doc/hook/import_author_xchan.bb)0
-rw-r--r--doc/en/hook/import_channel.bb (renamed from doc/hook/import_channel.bb)0
-rw-r--r--doc/en/hook/import_directory_profile.bb (renamed from doc/hook/import_directory_profile.bb)0
-rw-r--r--doc/en/hook/import_xchan.bb (renamed from doc/hook/import_xchan.bb)0
-rw-r--r--doc/en/hook/item_custom.bb (renamed from doc/hook/item_custom.bb)0
-rw-r--r--doc/en/hook/item_photo_menu.bb (renamed from doc/hook/item_photo_menu.bb)0
-rw-r--r--doc/en/hook/item_store.bb (renamed from doc/hook/item_store.bb)0
-rw-r--r--doc/en/hook/item_store_update.bb (renamed from doc/hook/item_store_update.bb)0
-rw-r--r--doc/en/hook/item_stored.bb (renamed from doc/hook/item_stored.bb)0
-rw-r--r--doc/en/hook/item_stored_update.bb (renamed from doc/hook/item_stored_update.bb)0
-rw-r--r--doc/en/hook/item_translate.bb (renamed from doc/hook/item_translate.bb)0
-rw-r--r--doc/en/hook/jot_header_tpl_filter.bb (renamed from doc/hook/jot_header_tpl_filter.bb)0
-rw-r--r--doc/en/hook/jot_networks.bb (renamed from doc/hook/jot_networks.bb)0
-rw-r--r--doc/en/hook/jot_tool.bb (renamed from doc/hook/jot_tool.bb)0
-rw-r--r--doc/en/hook/jot_tpl_filter.bb (renamed from doc/hook/jot_tpl_filter.bb)0
-rw-r--r--doc/en/hook/legal_webbie.bb (renamed from doc/hook/legal_webbie.bb)0
-rw-r--r--doc/en/hook/legal_webbie_text.bb (renamed from doc/hook/legal_webbie_text.bb)0
-rw-r--r--doc/en/hook/load_pdl.bb (renamed from doc/hook/load_pdl.bb)0
-rw-r--r--doc/en/hook/local_dir_update.bb (renamed from doc/hook/local_dir_update.bb)0
-rw-r--r--doc/en/hook/logged_in.bb (renamed from doc/hook/logged_in.bb)0
-rw-r--r--doc/en/hook/logger.bb (renamed from doc/hook/logger.bb)0
-rw-r--r--doc/en/hook/logging_out.bb (renamed from doc/hook/logging_out.bb)0
-rw-r--r--doc/en/hook/login_hook.bb (renamed from doc/hook/login_hook.bb)0
-rw-r--r--doc/en/hook/magic_auth.bb (renamed from doc/hook/magic_auth.bb)0
-rw-r--r--doc/en/hook/magic_auth_openid_success.bb (renamed from doc/hook/magic_auth_openid_success.bb)0
-rw-r--r--doc/en/hook/magic_auth_success.bb (renamed from doc/hook/magic_auth_success.bb)0
-rw-r--r--doc/en/hook/main_slider.bb (renamed from doc/hook/main_slider.bb)0
-rw-r--r--doc/en/hook/marital_selector.bb (renamed from doc/hook/marital_selector.bb)0
-rw-r--r--doc/en/hook/marital_selector_min.bb (renamed from doc/hook/marital_selector_min.bb)0
-rw-r--r--doc/en/hook/markdown_to_bb.bb (renamed from doc/hook/markdown_to_bb.bb)0
-rw-r--r--doc/en/hook/module_loaded.bb (renamed from doc/hook/module_loaded.bb)0
-rw-r--r--doc/en/hook/module_mod_aftercontent.bb (renamed from doc/hook/module_mod_aftercontent.bb)0
-rw-r--r--doc/en/hook/module_mod_content.bb (renamed from doc/hook/module_mod_content.bb)0
-rw-r--r--doc/en/hook/module_mod_init.bb (renamed from doc/hook/module_mod_init.bb)0
-rw-r--r--doc/en/hook/module_mod_post.bb (renamed from doc/hook/module_mod_post.bb)0
-rw-r--r--doc/en/hook/mood_verbs.bb (renamed from doc/hook/mood_verbs.bb)0
-rw-r--r--doc/en/hook/nav.bb (renamed from doc/hook/nav.bb)0
-rw-r--r--doc/en/hook/network_content_init.bb (renamed from doc/hook/network_content_init.bb)0
-rw-r--r--doc/en/hook/network_ping.bb (renamed from doc/hook/network_ping.bb)0
-rw-r--r--doc/en/hook/network_to_name.bb (renamed from doc/hook/network_to_name.bb)0
-rw-r--r--doc/en/hook/notifier_end.bb (renamed from doc/hook/notifier_end.bb)0
-rw-r--r--doc/en/hook/notifier_hub.bb (renamed from doc/hook/notifier_hub.bb)0
-rw-r--r--doc/en/hook/notifier_normal.bb (renamed from doc/hook/notifier_normal.bb)0
-rw-r--r--doc/en/hook/obj_verbs.bb (renamed from doc/hook/obj_verbs.bb)0
-rw-r--r--doc/en/hook/oembed_probe.bb (renamed from doc/hook/oembed_probe.bb)0
-rw-r--r--doc/en/hook/other_encapsulate.bb (renamed from doc/hook/other_encapsulate.bb)0
-rw-r--r--doc/en/hook/other_unencapsulate.bb (renamed from doc/hook/other_unencapsulate.bb)0
-rw-r--r--doc/en/hook/page_content_top.bb (renamed from doc/hook/page_content_top.bb)0
-rw-r--r--doc/en/hook/page_end.bb (renamed from doc/hook/page_end.bb)0
-rw-r--r--doc/en/hook/page_header.bb (renamed from doc/hook/page_header.bb)0
-rw-r--r--doc/en/hook/page_meta.bb (renamed from doc/hook/page_meta.bb)0
-rw-r--r--doc/en/hook/parse_atom.bb (renamed from doc/hook/parse_atom.bb)0
-rw-r--r--doc/en/hook/parse_link.bb (renamed from doc/hook/parse_link.bb)0
-rw-r--r--doc/en/hook/pdl_selector.bb (renamed from doc/hook/pdl_selector.bb)0
-rw-r--r--doc/en/hook/perm_is_allowed.bb (renamed from doc/hook/perm_is_allowed.bb)0
-rw-r--r--doc/en/hook/permissions_create.bb (renamed from doc/hook/permissions_create.bb)0
-rw-r--r--doc/en/hook/permissions_update.bb (renamed from doc/hook/permissions_update.bb)0
-rw-r--r--doc/en/hook/permit_hook.bb (renamed from doc/hook/permit_hook.bb)0
-rw-r--r--doc/en/hook/personal_xrd.bb (renamed from doc/hook/personal_xrd.bb)0
-rw-r--r--doc/en/hook/photo_post_end.bb (renamed from doc/hook/photo_post_end.bb)0
-rw-r--r--doc/en/hook/photo_upload_begin.bb (renamed from doc/hook/photo_upload_begin.bb)0
-rw-r--r--doc/en/hook/photo_upload_end.bb (renamed from doc/hook/photo_upload_end.bb)0
-rw-r--r--doc/en/hook/photo_upload_file.bb (renamed from doc/hook/photo_upload_file.bb)0
-rw-r--r--doc/en/hook/photo_upload_form.bb (renamed from doc/hook/photo_upload_form.bb)0
-rw-r--r--doc/en/hook/photo_view_filter.bb (renamed from doc/hook/photo_view_filter.bb)0
-rw-r--r--doc/en/hook/poke_verbs.bb (renamed from doc/hook/poke_verbs.bb)0
-rw-r--r--doc/en/hook/post_local.bb (renamed from doc/hook/post_local.bb)0
-rw-r--r--doc/en/hook/post_local_end.bb (renamed from doc/hook/post_local_end.bb)0
-rw-r--r--doc/en/hook/post_local_start.bb (renamed from doc/hook/post_local_start.bb)0
-rw-r--r--doc/en/hook/post_mail.bb (renamed from doc/hook/post_mail.bb)0
-rw-r--r--doc/en/hook/post_mail_end.bb (renamed from doc/hook/post_mail_end.bb)0
-rw-r--r--doc/en/hook/post_remote.bb (renamed from doc/hook/post_remote.bb)0
-rw-r--r--doc/en/hook/post_remote_end.bb (renamed from doc/hook/post_remote_end.bb)0
-rw-r--r--doc/en/hook/post_remote_update.bb (renamed from doc/hook/post_remote_update.bb)0
-rw-r--r--doc/en/hook/post_remote_update_end.bb (renamed from doc/hook/post_remote_update_end.bb)0
-rw-r--r--doc/en/hook/prepare_body.bb (renamed from doc/hook/prepare_body.bb)0
-rw-r--r--doc/en/hook/prepare_body_final.bb (renamed from doc/hook/prepare_body_final.bb)0
-rw-r--r--doc/en/hook/prepare_body_init.bb (renamed from doc/hook/prepare_body_init.bb)0
-rw-r--r--doc/en/hook/privacygroup_extras.bb (renamed from doc/hook/privacygroup_extras.bb)0
-rw-r--r--doc/en/hook/privacygroup_extras_drop.bb (renamed from doc/hook/privacygroup_extras_drop.bb)0
-rw-r--r--doc/en/hook/privacygroup_extras_post.bb (renamed from doc/hook/privacygroup_extras_post.bb)0
-rw-r--r--doc/en/hook/proc_run.bb (renamed from doc/hook/proc_run.bb)0
-rw-r--r--doc/en/hook/process_channel_sync_delivery.bb (renamed from doc/hook/process_channel_sync_delivery.bb)0
-rw-r--r--doc/en/hook/profile_advanced.bb (renamed from doc/hook/profile_advanced.bb)0
-rw-r--r--doc/en/hook/profile_edit.bb (renamed from doc/hook/profile_edit.bb)0
-rw-r--r--doc/en/hook/profile_photo_content_end.bb (renamed from doc/hook/profile_photo_content_end.bb)0
-rw-r--r--doc/en/hook/profile_post.bb (renamed from doc/hook/profile_post.bb)0
-rw-r--r--doc/en/hook/profile_sidebar.bb (renamed from doc/hook/profile_sidebar.bb)0
-rw-r--r--doc/en/hook/profile_sidebar_enter.bb (renamed from doc/hook/profile_sidebar_enter.bb)0
-rw-r--r--doc/en/hook/register_account.bb (renamed from doc/hook/register_account.bb)0
-rw-r--r--doc/en/hook/render_location.bb (renamed from doc/hook/render_location.bb)0
-rw-r--r--doc/en/hook/replace_macros.bb (renamed from doc/hook/replace_macros.bb)0
-rw-r--r--doc/en/hook/reverse_magic_auth.bb (renamed from doc/hook/reverse_magic_auth.bb)0
-rw-r--r--doc/en/hook/settings_form.bb (renamed from doc/hook/settings_form.bb)0
-rw-r--r--doc/en/hook/settings_post.bb (renamed from doc/hook/settings_post.bb)0
-rw-r--r--doc/en/hook/sexpref_selector.bb (renamed from doc/hook/sexpref_selector.bb)0
-rw-r--r--doc/en/hook/sexpref_selector_min.bb (renamed from doc/hook/sexpref_selector_min.bb)0
-rw-r--r--doc/en/hook/smilie.bb (renamed from doc/hook/smilie.bb)0
-rw-r--r--doc/en/hook/status_editor.bb (renamed from doc/hook/status_editor.bb)0
-rw-r--r--doc/en/hook/stream_item.bb (renamed from doc/hook/stream_item.bb)0
-rw-r--r--doc/en/hook/system_app_installed_filter.bb (renamed from doc/hook/system_app_installed_filter.bb)0
-rw-r--r--doc/en/hook/tagged.bb (renamed from doc/hook/tagged.bb)0
-rw-r--r--doc/en/hook/update_unseen.bb (renamed from doc/hook/update_unseen.bb)0
-rw-r--r--doc/en/hook/validate_channelname.bb (renamed from doc/hook/validate_channelname.bb)0
-rw-r--r--doc/en/hook/webfinger.bb (renamed from doc/hook/webfinger.bb)0
-rw-r--r--doc/en/hook/well_known.bb (renamed from doc/hook/well_known.bb)0
-rw-r--r--doc/en/hook/wiki_preprocess.bb (renamed from doc/hook/wiki_preprocess.bb)0
-rw-r--r--doc/en/hook/zid.bb (renamed from doc/hook/zid.bb)0
-rw-r--r--doc/en/hook/zid_init.bb (renamed from doc/hook/zid_init.bb)0
-rw-r--r--doc/en/hook/zot_best_algorithm.bb (renamed from doc/hook/zot_best_algorithm.bb)0
-rw-r--r--doc/en/hook/zot_finger.bb (renamed from doc/hook/zot_finger.bb)0
-rw-r--r--doc/en/hooklist.bb (renamed from doc/hooklist.bb)0
-rw-r--r--doc/en/hooks.html (renamed from doc/hooks.html)0
-rw-r--r--doc/en/intro_for_developers.bb (renamed from doc/intro_for_developers.bb)0
-rw-r--r--doc/en/macros/addons_footer.bb (renamed from doc/macros/addons_footer.bb)0
-rw-r--r--doc/en/macros/cloud_footer.bb (renamed from doc/macros/cloud_footer.bb)0
-rw-r--r--doc/en/macros/de/addons_footer.bb (renamed from doc/macros/de/addons_footer.bb)0
-rw-r--r--doc/en/macros/de/cloud_footer.bb (renamed from doc/macros/de/cloud_footer.bb)0
-rw-r--r--doc/en/macros/de/main_footer.bb (renamed from doc/macros/de/main_footer.bb)0
-rw-r--r--doc/en/macros/de/troubleshooting_footer.bb (renamed from doc/macros/de/troubleshooting_footer.bb)0
-rw-r--r--doc/en/macros/main_footer.bb (renamed from doc/macros/main_footer.bb)0
-rw-r--r--doc/en/macros/pl/addons_footer.bb (renamed from doc/macros/pl/addons_footer.bb)0
-rw-r--r--doc/en/macros/pl/cloud_footer.bb (renamed from doc/macros/pl/cloud_footer.bb)0
-rw-r--r--doc/en/macros/pl/main_footer.bb (renamed from doc/macros/pl/main_footer.bb)0
-rw-r--r--doc/en/macros/pl/troubleshooting_footer.bb (renamed from doc/macros/pl/troubleshooting_footer.bb)0
-rw-r--r--doc/en/macros/troubleshooting_footer.bb (renamed from doc/macros/troubleshooting_footer.bb)0
-rw-r--r--doc/en/member/assets/bookmarker-save-icon.pngbin0 -> 33987 bytes
-rw-r--r--doc/en/member/assets/bookmarks-menu-dropdown.pngbin0 -> 53526 bytes
-rw-r--r--doc/en/member/assets/privacy-group-tool-public.pngbin0 -> 39262 bytes
-rw-r--r--doc/en/member/assets/privacy-tool-3.pngbin0 -> 140093 bytes
-rw-r--r--doc/en/member/assets/qr_text_to_post.png (renamed from doc/member/assets/qr_text_to_post.png)bin273 -> 273 bytes
-rw-r--r--doc/en/member/assets/zat_dialog.png (renamed from doc/member/assets/zat_dialog.png)bin81837 -> 81837 bytes
-rw-r--r--doc/en/member/bbcode.html (renamed from doc/member/bbcode.html)0
-rw-r--r--doc/en/member/member_faq.bb (renamed from doc/member/member_faq.bb)0
-rw-r--r--doc/en/member/member_guide.bb (renamed from doc/member/member_guide.bb)177
-rw-r--r--doc/en/plugins.bb (renamed from doc/plugins.bb)0
-rw-r--r--doc/en/problems-following-an-update.bb (renamed from doc/problems-following-an-update.bb)0
-rw-r--r--doc/en/red2pi.bb (renamed from doc/red2pi.bb)0
-rw-r--r--doc/en/roadmap.bb (renamed from doc/roadmap.bb)0
-rw-r--r--doc/en/schema_development.bb (renamed from doc/schema_development.bb)0
-rw-r--r--doc/en/schemaspy_hubzilla/zot.meta.xml (renamed from doc/schemaspy_hubzilla/zot.meta.xml)0
-rw-r--r--doc/en/sql_conventions.bb (renamed from doc/sql_conventions.bb)0
-rw-r--r--doc/en/toc.html75
-rw-r--r--doc/en/tutorials/assets/0965ace945f0c95ae38aa5bfedd230d2a7233d3915ac15d629f9dd845854.png (renamed from doc/tutorials/assets/0965ace945f0c95ae38aa5bfedd230d2a7233d3915ac15d629f9dd845854.png)bin249151 -> 249151 bytes
-rw-r--r--doc/en/tutorials/assets/1ebe02c205962dd25035c441631745d16acdb7a44e50d148256c8ad26a67.png (renamed from doc/tutorials/assets/1ebe02c205962dd25035c441631745d16acdb7a44e50d148256c8ad26a67.png)bin293314 -> 293314 bytes
-rw-r--r--doc/en/tutorials/assets/2243e48ccea25bd907cce3dbd6fc9f7cd832a4c91a4c5dd294b7b219e7d8.png (renamed from doc/tutorials/assets/2243e48ccea25bd907cce3dbd6fc9f7cd832a4c91a4c5dd294b7b219e7d8.png)bin178913 -> 178913 bytes
-rw-r--r--doc/en/tutorials/assets/25eaad2435200f72a1dd3a00ba17a76ca6db4c246b3c4fa286b390cae7c8.png (renamed from doc/tutorials/assets/25eaad2435200f72a1dd3a00ba17a76ca6db4c246b3c4fa286b390cae7c8.png)bin43797 -> 43797 bytes
-rw-r--r--doc/en/tutorials/assets/2b539d5a8474d6ec6dc91155b628d9be5f99ab04a78108ec404f53ec7bb5.png (renamed from doc/tutorials/assets/2b539d5a8474d6ec6dc91155b628d9be5f99ab04a78108ec404f53ec7bb5.png)bin46752 -> 46752 bytes
-rw-r--r--doc/en/tutorials/assets/31f42a02bdbae095e0329db6c3814e2975979aff12f873f43d81724c5e61.png (renamed from doc/tutorials/assets/31f42a02bdbae095e0329db6c3814e2975979aff12f873f43d81724c5e61.png)bin257211 -> 257211 bytes
-rw-r--r--doc/en/tutorials/assets/324247680b605fd214fd61aecd8f216fa8f5dfa0f16a04c8e968fdbc43d0.png (renamed from doc/tutorials/assets/324247680b605fd214fd61aecd8f216fa8f5dfa0f16a04c8e968fdbc43d0.png)bin91478 -> 91478 bytes
-rw-r--r--doc/en/tutorials/assets/3656a67dce40a1fc2515e9089217f2e136d4fcf8babe77bac00ecaad43ce.png (renamed from doc/tutorials/assets/3656a67dce40a1fc2515e9089217f2e136d4fcf8babe77bac00ecaad43ce.png)bin293611 -> 293611 bytes
-rw-r--r--doc/en/tutorials/assets/458a842c2ea0fbe3b7869bb14dfffe1e5be098d1cd6e590bbead25b4cc05.png (renamed from doc/tutorials/assets/458a842c2ea0fbe3b7869bb14dfffe1e5be098d1cd6e590bbead25b4cc05.png)bin318766 -> 318766 bytes
-rw-r--r--doc/en/tutorials/assets/4aaaf1e124514c8d6999a5fe1d07be5af460cda4ba6cde9106ebc1564bb0.png (renamed from doc/tutorials/assets/4aaaf1e124514c8d6999a5fe1d07be5af460cda4ba6cde9106ebc1564bb0.png)bin298857 -> 298857 bytes
-rw-r--r--doc/en/tutorials/assets/4cf326152797a8ecdf5630e921756f825ee00f8ee464d3ef9fed971d2852.png (renamed from doc/tutorials/assets/4cf326152797a8ecdf5630e921756f825ee00f8ee464d3ef9fed971d2852.png)bin532838 -> 532838 bytes
-rw-r--r--doc/en/tutorials/assets/75d2927b7ad0d2043d4d3b6ba1364fac8ead173edd39340adaf78be11c9d.png (renamed from doc/tutorials/assets/75d2927b7ad0d2043d4d3b6ba1364fac8ead173edd39340adaf78be11c9d.png)bin137827 -> 137827 bytes
-rw-r--r--doc/en/tutorials/assets/7c976a06662a1357b3da8ed0680d1a721c85f2ae2bdd5739a8def466010e.png (renamed from doc/tutorials/assets/7c976a06662a1357b3da8ed0680d1a721c85f2ae2bdd5739a8def466010e.png)bin466641 -> 466641 bytes
-rw-r--r--doc/en/tutorials/assets/99a6efda4df631dfb2d2a849412044cc6a0f8aebeac289d28786f2649d24.png (renamed from doc/tutorials/assets/99a6efda4df631dfb2d2a849412044cc6a0f8aebeac289d28786f2649d24.png)bin240495 -> 240495 bytes
-rw-r--r--doc/en/tutorials/assets/9eae9fad774a4cd29e665961d35affbd053368056f562c58200fb41027b0.png (renamed from doc/tutorials/assets/9eae9fad774a4cd29e665961d35affbd053368056f562c58200fb41027b0.png)bin665755 -> 665755 bytes
-rw-r--r--doc/en/tutorials/assets/b0bfdf02aef3710a37bb6092c3240b291eca8afa73133b3ac03b86f3302d.png (renamed from doc/tutorials/assets/b0bfdf02aef3710a37bb6092c3240b291eca8afa73133b3ac03b86f3302d.png)bin324092 -> 324092 bytes
-rw-r--r--doc/en/tutorials/assets/b334915c03a665493915598c69c17a87c910a39db2cd3b5292e4623ea4c4.png (renamed from doc/tutorials/assets/b334915c03a665493915598c69c17a87c910a39db2cd3b5292e4623ea4c4.png)bin466584 -> 466584 bytes
-rw-r--r--doc/en/tutorials/assets/b3eece28e8db67f1024af42055f0f24ed5e81ba622aca8cac576ccf5930e.png (renamed from doc/tutorials/assets/b3eece28e8db67f1024af42055f0f24ed5e81ba622aca8cac576ccf5930e.png)bin155763 -> 155763 bytes
-rw-r--r--doc/en/tutorials/assets/bdbcf0ffd9004657237f6b7b7863da5a8e39a5bc17d2c67fa160efef2056.png (renamed from doc/tutorials/assets/bdbcf0ffd9004657237f6b7b7863da5a8e39a5bc17d2c67fa160efef2056.png)bin134643 -> 134643 bytes
-rw-r--r--doc/en/tutorials/assets/c4cad3e4c356dd2a227df79bd4dc6d47edf1b66ea243f005b6b452ec366b.png (renamed from doc/tutorials/assets/c4cad3e4c356dd2a227df79bd4dc6d47edf1b66ea243f005b6b452ec366b.png)bin306069 -> 306069 bytes
-rw-r--r--doc/en/tutorials/assets/c9a880cc82ffa1f7c2f460397bb083bf7dc2a2b8f065e64da598b45b4a2b.png (renamed from doc/tutorials/assets/c9a880cc82ffa1f7c2f460397bb083bf7dc2a2b8f065e64da598b45b4a2b.png)bin57185 -> 57185 bytes
-rw-r--r--doc/en/tutorials/assets/d080e92d797af5e863fa39b2084c16a8410de1f7a6559633435817444aef.png (renamed from doc/tutorials/assets/d080e92d797af5e863fa39b2084c16a8410de1f7a6559633435817444aef.png)bin255688 -> 255688 bytes
-rw-r--r--doc/en/tutorials/assets/e05248fdc5688d6d24bde52432fdc7b39692a094559aa504de99352940b1.png (renamed from doc/tutorials/assets/e05248fdc5688d6d24bde52432fdc7b39692a094559aa504de99352940b1.png)bin83265 -> 83265 bytes
-rw-r--r--doc/en/tutorials/assets/e5d5674a34e848e2cce90a60fc416415271d9c51b81ad2a950fb0157222a.png (renamed from doc/tutorials/assets/e5d5674a34e848e2cce90a60fc416415271d9c51b81ad2a950fb0157222a.png)bin264916 -> 264916 bytes
-rw-r--r--doc/en/tutorials/assets/ef78bc6aa3fafebd46f353514c907b3fdfe019918fc5553bb3f31388a36f.png (renamed from doc/tutorials/assets/ef78bc6aa3fafebd46f353514c907b3fdfe019918fc5553bb3f31388a36f.png)bin68194 -> 68194 bytes
-rw-r--r--doc/en/tutorials/assets/facb0bdfdecb4c779de9048cd14b417c0d76de17af476be5f296b78d70e9.png (renamed from doc/tutorials/assets/facb0bdfdecb4c779de9048cd14b417c0d76de17af476be5f296b78d70e9.png)bin99210 -> 99210 bytes
-rw-r--r--doc/en/tutorials/personal_channel.html (renamed from doc/tutorials/personal_channel.html)110
-rw-r--r--doc/toc.html75
-rw-r--r--include/account.php51
-rw-r--r--include/api_zot.php3
-rw-r--r--include/attach.php30
-rw-r--r--include/auth.php52
-rw-r--r--include/bbcode.php15
-rw-r--r--include/channel.php31
-rw-r--r--include/cli_startup.php4
-rw-r--r--include/config.php69
-rw-r--r--include/connections.php15
-rw-r--r--include/contact_widgets.php3
-rw-r--r--include/conversation.php8
-rw-r--r--include/crypto.php8
-rw-r--r--include/event.php9
-rw-r--r--include/features.php80
-rw-r--r--include/feedutils.php8
-rw-r--r--include/help.php197
-rw-r--r--include/html2bbcode.php29
-rw-r--r--include/html2plain.php8
-rw-r--r--include/hubloc.php9
-rw-r--r--include/import.php3
-rw-r--r--include/items.php26
-rw-r--r--include/language.php11
-rw-r--r--include/menu.php7
-rw-r--r--include/nav.php13
-rw-r--r--include/network.php116
-rw-r--r--include/oauth.php60
-rw-r--r--include/oauth2.php10
-rw-r--r--include/oembed.php33
-rw-r--r--include/permissions.php8
-rw-r--r--include/photo/photo_driver.php7
-rw-r--r--include/photos.php9
-rw-r--r--include/plugin.php30
-rw-r--r--include/security.php8
-rw-r--r--include/socgraph.php3
-rw-r--r--include/statistics_fns.php22
-rw-r--r--include/taxonomy.php4
-rw-r--r--include/text.php34
-rw-r--r--include/zid.php11
-rw-r--r--library/jgrowl/.gitignore5
-rw-r--r--library/jgrowl/Gruntfile.js61
-rw-r--r--library/jgrowl/LICENSE7
-rw-r--r--library/jgrowl/README.md75
-rw-r--r--library/jgrowl/bower.json32
-rw-r--r--library/jgrowl/examples/appendTo.html103
-rw-r--r--library/jgrowl/examples/bootstrap.html91
-rw-r--r--library/jgrowl/examples/jgrowl.html171
-rw-r--r--library/jgrowl/jgrowl.jquery.json40
-rw-r--r--library/jgrowl/jquery.jgrowl.css100
-rw-r--r--library/jgrowl/jquery.jgrowl.js399
-rw-r--r--library/jgrowl/jquery.jgrowl.map1
-rw-r--r--library/jgrowl/jquery.jgrowl.min.css1
-rw-r--r--library/jgrowl/jquery.jgrowl.min.js2
-rw-r--r--library/jgrowl/less/jgrowl.core.less101
-rw-r--r--library/jgrowl/less/jgrowl.less2
-rw-r--r--library/jgrowl/less/jgrowl.variables.less8
-rw-r--r--library/jgrowl/package.json23
-rw-r--r--tests/phpunit.xml15
-rw-r--r--tests/unit/Access/AccessListTest.php2
-rw-r--r--tests/unit/Access/PermissionRolesTest.php2
-rw-r--r--tests/unit/Access/PermissionsTest.php32
-rw-r--r--tests/unit/AntiXSSTest.php2
-rw-r--r--tests/unit/CallHooksTest.php65
-rw-r--r--tests/unit/CreateIdentityTest.php65
-rw-r--r--tests/unit/Lib/ActivityTest.php2
-rw-r--r--tests/unit/Lib/PermissionDescriptionTest.php20
-rw-r--r--tests/unit/Lib/ZotlibTest.php38
-rw-r--r--tests/unit/Module/HelpTest.php179
-rw-r--r--tests/unit/Module/RbmarkTest.php80
-rw-r--r--tests/unit/Module/RpostTest.php81
-rw-r--r--tests/unit/Module/SetupTest.php76
-rw-r--r--tests/unit/Module/TestCase.php192
-rw-r--r--tests/unit/Photo/PhotoGdTest.php17
-rw-r--r--tests/unit/UnitTestCase.php91
-rw-r--r--tests/unit/Web/HttpSigTest.php7
-rw-r--r--tests/unit/Widget/HelpindexTest.php80
-rw-r--r--tests/unit/includes/AccountTest.php2
-rw-r--r--tests/unit/includes/AuthTest.php81
-rw-r--r--tests/unit/includes/BBCodeTest.php42
-rw-r--r--tests/unit/includes/FeedutilsTest.php66
-rw-r--r--tests/unit/includes/LanguageTest.php50
-rw-r--r--tests/unit/includes/MarkdownTest.php4
-rw-r--r--tests/unit/includes/NetworkTest.php12
-rw-r--r--tests/unit/includes/TextTest.php4
-rw-r--r--tests/unit/includes/dba/TransactionTest.php6
-rw-r--r--tests/unit/includes/dba/_files/account.yml2
-rw-r--r--tests/unit/includes/dba/_files/config.yml4
-rwxr-xr-xutil/addons20
-rwxr-xr-xutil/config17
-rwxr-xr-xutil/db_update.php4
-rw-r--r--util/hmessages.po3744
-rwxr-xr-xutil/service_class34
-rwxr-xr-xutil/storageconv21
-rw-r--r--vendor/composer/autoload_classmap.php3
-rw-r--r--vendor/composer/autoload_static.php3
-rw-r--r--view/css/mod_help.css7
-rw-r--r--view/es-es/hmessages.po3150
-rw-r--r--view/es-es/hstrings.php244
-rw-r--r--view/js/main.js31
-rw-r--r--view/js/mod_cloud.js4
-rw-r--r--view/pdl/mod_admin.pdl5
-rw-r--r--view/php/doubleleft.php2
-rw-r--r--view/php/theme_init.php2
-rw-r--r--view/theme/redbasic/css/narrow_navbar.css5
-rw-r--r--view/theme/redbasic/css/style.css48
-rw-r--r--view/theme/redbasic/php/theme_init.php6
-rw-r--r--view/tpl/admin_accounts.tpl2
-rw-r--r--view/tpl/admin_channels.tpl2
-rw-r--r--view/tpl/cdav_calendar.tpl4
-rw-r--r--view/tpl/contact_edit_modal.tpl8
-rw-r--r--view/tpl/field_input.tpl17
-rw-r--r--view/tpl/hdr.tpl1
-rw-r--r--view/tpl/help.tpl8
-rw-r--r--view/tpl/install.tpl4
-rw-r--r--view/tpl/invite.tpl1
-rw-r--r--view/tpl/jot-header.tpl2
-rw-r--r--view/tpl/notifications_widget.tpl5
-rw-r--r--view/tpl/nwiki_page_history.tpl59
-rw-r--r--view/tpl/oembed_video.tpl5
-rw-r--r--view/tpl/profile_vcard.tpl3
-rw-r--r--view/tpl/register.tpl2
-rw-r--r--view/tpl/siteinfo.tpl2
-rw-r--r--view/tpl/totp_setup.tpl4
-rw-r--r--view/tpl/widget.tpl12
793 files changed, 7330 insertions, 7826 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 76dc41334..04ae550b2 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -58,7 +58,7 @@ before_script:
- echo "USE $MYSQL_DATABASE; SHOW TABLES;" | mysql --user=root --password="$MYSQL_ROOT_PASSWORD" --host="$DB_HOST" "$MYSQL_DATABASE"
# Run the actual tests
- touch dbfail.out
- - vendor/bin/phpunit --configuration tests/phpunit.xml --verbose --stop-on-error --coverage-text --colors=never --log-junit tests/results/junit.xml || exit_code=$?
+ - vendor/bin/phpunit --configuration tests/phpunit.xml --no-progress --stop-on-error --coverage-text --colors=never --log-junit tests/results/junit.xml || exit_code=$?
- if [ $exit_code -ne 0 ]; then echo "Test barfed!"; cat dbfail.out; exit $exit_code; fi
coverage: '/^\s*Lines:\s*\d+.\d+\%/'
@@ -83,7 +83,7 @@ before_script:
- psql -h "postgres" -U "$POSTGRES_USER" -d "$POSTGRES_DB" -c "\dt;"
# Run the actual tests
- touch dbfail.out
- - vendor/bin/phpunit --configuration tests/phpunit.xml --verbose --stop-on-error --coverage-text --colors=never --log-junit tests/results/junit.xml || exit_code=$?
+ - vendor/bin/phpunit --configuration tests/phpunit.xml --no-progress --stop-on-error --coverage-text --colors=never --log-junit tests/results/junit.xml || exit_code=$?
- if [ $exit_code -ne 0 ]; then echo "Test barfed!"; cat dbfail.out; exit $exit_code; fi
coverage: '/^\s*Lines:\s*\d+.\d+\%/'
diff --git a/.phpcs.xml b/.phpcs.xml
new file mode 100644
index 000000000..0054e4cda
--- /dev/null
+++ b/.phpcs.xml
@@ -0,0 +1,78 @@
+<?xml version="1.0"?>
+<ruleset
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ name="PHP_CodeSniffer"
+ xsi:noNamespaceSchemaLocation="phpcs.xsd"
+ >
+
+ <description>PHP CodeSniffer config for Hubzilla</description>
+
+ <file>app</file>
+ <file>boot.php</file>
+ <file>include</file>
+ <file>index.php</file>
+ <file>install</file>
+ <file>library</file>
+ <file>tests</file>
+ <file>util</file>
+ <file>view</file>
+ <file>Zotlabs</file>
+
+ <rule ref="Generic">
+ <exclude name="Generic.Arrays.ArrayIndent"/>
+ <exclude name="Generic.Arrays.DisallowLongArraySyntax"/>
+ <exclude name="Generic.Arrays.DisallowShortArraySyntax"/>
+ <exclude name="Generic.Files.EndFileNoNewline"/>
+ <exclude name="Generic.Files.LowercasedFilename"/>
+ <exclude name="Generic.Formatting.MultipleStatementAlignment"/>
+ <exclude name="Generic.Formatting.SpaceAfterNot"/>
+ <exclude name="Generic.Functions.FunctionCallArgumentSpacing"/>
+ <exclude name="Generic.Functions.OpeningFunctionBraceBsdAllman"/>
+ <exclude name="Generic.NamingConventions.CamelCapsFunctionName"/>
+ <exclude name="Generic.PHP.ClosingPHPTag"/>
+ <exclude name="Generic.PHP.RequireStrictTypes"/>
+ <exclude name="Generic.PHP.UpperCaseConstant"/>
+ <exclude name="Generic.WhiteSpace.DisallowTabIndent"/>
+ <exclude name="Generic.WhiteSpace.ScopeIndent"/>
+ <exclude name="Generic.Commenting.DocComment.ContentAfterOpen"/>
+ <exclude name="Generic.Commenting.DocComment.ContentBeforeClose"/>
+ <exclude name="Generic.Commenting.DocComment.LongNotCapital"/>
+ <exclude name="Generic.Commenting.DocComment.MissingShort"/>
+ <exclude name="Generic.Commenting.DocComment.NonParamGroup"/>
+ <exclude name="Generic.Commenting.DocComment.ParamNotFirst"/>
+ <exclude name="Generic.Commenting.DocComment.ShortNotCapital"/>
+ <exclude name="Generic.Commenting.DocComment.SpacingAfter"/>
+ <exclude name="Generic.Commenting.DocComment.SpacingBeforeShort"/>
+ <exclude name="Generic.Commenting.DocComment.TagValueIndent"/>
+ <exclude name="Generic.ControlStructures.InlineControlStructure.NotAllowed"/>
+ <exclude name="Generic.Files.OneClassPerFile.MultipleFound"/>
+ <exclude name="Generic.Files.OneObjectStructurePerFile.MultipleFound"/>
+ <exclude name="Generic.Formatting.SpaceAfterCast.NoSpace"/>
+ </rule>
+
+ <!--
+ Warn about lines longer than 100 columns, lines longer than 150
+ columns will flag an error.
+ -->
+ <rule ref="Generic.Files.LineLength">
+ <properties>
+ <property name="lineLimit" value="100" />
+ <property name="absoluteLineLimit" value="150" />
+ </properties>
+ </rule>
+
+ <!--
+ Mark deprecated functions.
+ -->
+ <rule ref="Generic.PHP.DeprecatedFunctions">
+ <properties>
+ <property name="forbiddenFunctions" type="array" extend="true">
+ <element key="load_config" value="Zotlabs\Lib\Config::Load" />
+ <element key="get_config" value="Zotlabs\Lib\Config::Get" />
+ <element key="set_config" value="Zotlabs\Lib\Config::Set" />
+ <element key="del_config" value="Zotlabs\Lib\Config::Delete" />
+ </property>
+ </properties>
+ </rule>
+
+</ruleset>
diff --git a/CHANGELOG b/CHANGELOG
index b5cd098a4..9d8b2178f 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,64 @@
+Hubzilla 9.2 (2024-??-??)
+ - Fail to import more gracefully if a channel has already been imported at some point but was deleted again
+ - Use the doubleleft template by default for admin pages to work around some display issues
+ - Reflect the censored state in the local xchan
+ - Exclude toplevel posts by censored channels in the public stream
+ - Update API docs for Module test case base class
+ - Add helper expectRedirectTo to module test class
+ - Refactor is_local_url() and add api doc
+ - Use empty() to check if array entry exist in create_identity()
+ - Add basic test for create_identity function
+ - Allow passing callable as array to hooks
+ - Use DbaTransaction class for db transactions in queueworker
+ - Remove obsolete stubs from Permissions tests
+ - Refactor mod rpost to fix open redirect issue and add tests
+ - Configure system.baseurl for tests
+ - Add basic test and fix session access for mod rpost
+ - Add config file and rules for PHP Code Sniffer
+ - Refactor mod setup
+ - Pass the force argument to the xchan_photo daemon
+ - Declare arg and return types for unparse_url()
+ - Skip checking MFA status for WebDAV and CardDAV requests
+ - Upgrade test framework to PHPUnit 10.5
+ - Minor style update for the .abook-self CSS class
+ - Update docs on tags and mentions.
+ - Refactor and cleanup Rbmark module and add tests
+ - Remove unused Toggle_(safesearch|mobile) modules
+ - Make mod regate return to system.workflow_channel_next
+ - Show register message field only if registration is set to register_approve
+ - Add bbcode support for the HTML5 del tag
+ - Rename HelpHelper to HelpHelperTrait
+ - Remove jgrowl in favour of bootstrap toast
+ - Refactor mod help
+ - Reduce some global state and add some docs
+ - Make save_chunk() deal with userfile and file array keys
+ - Update siteinfo to remove traces of zotlabs.org
+ - Minor refactor for in mod import and store import host for possible later use
+ - Allow to kick off import sync process in case it did not start at all
+ - Updated spanish translations
+
+ Bugfixes
+ - Fix possible PHP error in zid()
+ - Fix display issue for doubleleft template
+ - Fix issue where event items were parsed multiple times on display
+ - Fix return to blank page after editing post under some circumstances
+ - Fix missing include in QueueWorker
+ - Fix warnings exposed by tests
+ - Fix timestamp handling in menu_create()
+ - Fix updated arg not supported in pconfig wrapper function
+ - Fix default timeouts for z_(fetch|post)_url
+ - Fix hcard addon markup not available if profile entries were missing
+ - Fix nested lists parsing
+ - Fix help menu CSS
+ - Fix get_rpost_path() broken for URL's with no port
+ - Fix passing an empty filter to deliverable_abook_xchans() will return all deliverable abook xchans
+
+ Addons
+ - Wiki: fix revert if editor is not ace
+ - Wiki: do not slate deleted wiki pages for download
+ - Pubcrawl: do not use mentions for addressing if post is restricted
+
+
Hubzilla 9.0.2 (2024-06-07)
- Fix buttons in event viewer
- Fix some PHP warnings and errors
diff --git a/Zotlabs/Access/PermissionRoles.php b/Zotlabs/Access/PermissionRoles.php
index 2078b52a8..5dfedfcd7 100644
--- a/Zotlabs/Access/PermissionRoles.php
+++ b/Zotlabs/Access/PermissionRoles.php
@@ -2,6 +2,8 @@
namespace Zotlabs\Access;
+use Zotlabs\Lib\Config;
+
/**
* @brief PermissionRoles class.
*
@@ -247,7 +249,7 @@ class PermissionRoles {
break;
}
- $x = get_config('system','role_perms');
+ $x = Config::Get('system','role_perms');
// let system settings over-ride any or all
if($x && is_array($x) && array_key_exists($role,$x))
diff --git a/Zotlabs/Daemon/Cache_query.php b/Zotlabs/Daemon/Cache_query.php
index d6f66f1f0..d5788795f 100644
--- a/Zotlabs/Daemon/Cache_query.php
+++ b/Zotlabs/Daemon/Cache_query.php
@@ -3,6 +3,7 @@
namespace Zotlabs\Daemon;
use Zotlabs\Lib\Cache;
+use Zotlabs\Lib\Config;
class Cache_query {
@@ -14,14 +15,14 @@ class Cache_query {
$r = null;
$key = $argv[1];
- $pid = get_config('procid', $key, false);
+ $pid = Config::Get('procid', $key, false);
if ($pid && (function_exists('posix_kill') ? posix_kill($pid, 0) : true)) {
logger($key . ': procedure already run with pid ' . $pid, LOGGER_DEBUG);
return;
}
$pid = getmypid();
- set_config('procid', $key, $pid);
+ Config::Set('procid', $key, $pid);
array_shift($argv);
array_shift($argv);
@@ -34,7 +35,7 @@ class Cache_query {
Cache::set($key, serialize($r));
}
- del_config('procid', $key);
+ Config::Delete('procid', $key);
return;
}
diff --git a/Zotlabs/Daemon/Checksites.php b/Zotlabs/Daemon/Checksites.php
index eacf8c6bc..8f6319edb 100644
--- a/Zotlabs/Daemon/Checksites.php
+++ b/Zotlabs/Daemon/Checksites.php
@@ -2,6 +2,8 @@
namespace Zotlabs\Daemon;
+use Zotlabs\Lib\Config;
+
require_once('include/hubloc.php');
class Checksites {
@@ -19,7 +21,7 @@ class Checksites {
if ($site_id)
$sql_options = " and site_url = '" . dbesc($argv[1]) . "' ";
- $days = intval(get_config('system', 'sitecheckdays'));
+ $days = intval(Config::Get('system', 'sitecheckdays'));
if ($days < 1)
$days = 30;
diff --git a/Zotlabs/Daemon/Cron.php b/Zotlabs/Daemon/Cron.php
index e0fa2d629..d2c863572 100644
--- a/Zotlabs/Daemon/Cron.php
+++ b/Zotlabs/Daemon/Cron.php
@@ -2,6 +2,7 @@
namespace Zotlabs\Daemon;
+use Zotlabs\Lib\Config;
use Zotlabs\Lib\Libsync;
use Zotlabs\Lib\Libzotdir;
@@ -9,7 +10,7 @@ class Cron {
static public function run($argc, $argv) {
- $maxsysload = intval(get_config('system', 'maxloadavg'));
+ $maxsysload = intval(Config::Get('system', 'maxloadavg'));
if ($maxsysload < 1)
$maxsysload = 50;
if (function_exists('sys_getloadavg')) {
@@ -24,7 +25,7 @@ class Cron {
// Check for a lockfile. If it exists, but is over an hour old, it's stale. Ignore it.
$lockfile = 'store/[data]/cron';
if ((file_exists($lockfile)) && (filemtime($lockfile) > (time() - 3600))
- && (!get_config('system', 'override_cron_lockfile'))) {
+ && (!Config::Get('system', 'override_cron_lockfile'))) {
logger("cron: Already running");
return;
}
@@ -41,7 +42,7 @@ class Cron {
// Pull remote changes and push local changes.
// potential issue: how do we keep from creating an endless update loop?
- $dirmode = get_config('system', 'directory_mode');
+ $dirmode = Config::Get('system', 'directory_mode');
if ($dirmode == DIRECTORY_MODE_SECONDARY || $dirmode == DIRECTORY_MODE_PRIMARY) {
Libzotdir::sync_directories($dirmode);
@@ -64,7 +65,7 @@ class Cron {
require_once('include/account.php');
remove_expired_registrations();
- $interval = get_config('queueworker', 'queue_interval', 500000);
+ $interval = Config::Get('queueworker', 'queue_interval', 500000);
// expire any expired items
@@ -124,13 +125,13 @@ class Cron {
$r = q("SELECT DISTINCT xchan, content FROM photo WHERE photo_usage = %d AND expires < %s - INTERVAL %s",
intval(PHOTO_CACHE),
db_utcnow(),
- db_quoteinterval(get_config('system', 'cache_expire_days', 7) . ' DAY')
+ db_quoteinterval(Config::Get('system', 'cache_expire_days', 7) . ' DAY')
);
if ($r) {
q("DELETE FROM photo WHERE photo_usage = %d AND expires < %s - INTERVAL %s",
intval(PHOTO_CACHE),
db_utcnow(),
- db_quoteinterval(get_config('system', 'cache_expire_days', 7) . ' DAY')
+ db_quoteinterval(Config::Get('system', 'cache_expire_days', 7) . ' DAY')
);
foreach ($r as $rr) {
$file = dbunescbin($rr['content']);
@@ -185,13 +186,13 @@ class Cron {
// FIXME: add birthday updates, both locally and for xprof for use
// by directory servers
- $d1 = intval(get_config('system', 'last_expire_day'));
+ $d1 = intval(Config::Get('system', 'last_expire_day'));
$d2 = intval(datetime_convert('UTC', 'UTC', 'now', 'd'));
// Allow somebody to staggger daily activities if they have more than one site on their server,
// or if it happens at an inconvenient (busy) hour.
- $h1 = intval(get_config('system', 'cron_hour'));
+ $h1 = intval(Config::Get('system', 'cron_hour'));
$h2 = intval(datetime_convert('UTC', 'UTC', 'now', 'G'));
@@ -225,7 +226,7 @@ class Cron {
// pull in some public posts if allowed
- $disable_externals = get_config('system', 'disable_discover_tab') || get_config('system', 'disable_discover_tab') === false || get_config('system', 'site_firehose');
+ $disable_externals = Config::Get('system', 'disable_discover_tab') || Config::Get('system', 'disable_discover_tab') === false || Config::Get('system', 'site_firehose');
if (!$disable_externals)
Master::Summon(['Externals']);
@@ -245,7 +246,7 @@ class Cron {
if (!$restart)
Master::Summon(array('Cronhooks'));
- set_config('system', 'lastcron', datetime_convert());
+ Config::Set('system', 'lastcron', datetime_convert());
//All done - clear the lockfile
//@unlink($lockfile);
diff --git a/Zotlabs/Daemon/Cron_daily.php b/Zotlabs/Daemon/Cron_daily.php
index 98379be1b..3bc267f08 100644
--- a/Zotlabs/Daemon/Cron_daily.php
+++ b/Zotlabs/Daemon/Cron_daily.php
@@ -2,6 +2,7 @@
namespace Zotlabs\Daemon;
+use Zotlabs\Lib\Config;
use Zotlabs\Lib\Libzotdir;
class Cron_daily {
@@ -68,7 +69,7 @@ class Cron_daily {
// Clean up cache
q("DELETE FROM cache WHERE updated < %s - INTERVAL %s",
db_utcnow(),
- db_quoteinterval(get_config('system', 'cache_expire_days', 7) . ' DAY')
+ db_quoteinterval(Config::Get('system', 'cache_expire_days', 7) . ' DAY')
);
//update statistics in config
@@ -82,7 +83,7 @@ class Cron_daily {
// expire old delivery reports
- $keep_reports = intval(get_config('system', 'expire_delivery_reports'));
+ $keep_reports = intval(Config::Get('system', 'expire_delivery_reports'));
if ($keep_reports === 0)
$keep_reports = 10;
@@ -103,7 +104,7 @@ class Cron_daily {
$date = datetime_convert();
call_hooks('cron_daily', $date);
- set_config('system', 'last_expire_day', intval(datetime_convert('UTC', 'UTC', 'now', 'd')));
+ Config::Set('system', 'last_expire_day', intval(datetime_convert('UTC', 'UTC', 'now', 'd')));
/**
* End Cron Daily
diff --git a/Zotlabs/Daemon/Cron_weekly.php b/Zotlabs/Daemon/Cron_weekly.php
index 75fb94700..f9ea5aae7 100644
--- a/Zotlabs/Daemon/Cron_weekly.php
+++ b/Zotlabs/Daemon/Cron_weekly.php
@@ -2,6 +2,8 @@
namespace Zotlabs\Daemon;
+use Zotlabs\Lib\Config;
+
class Cron_weekly {
static public function run($argc, $argv) {
@@ -44,7 +46,7 @@ class Cron_weekly {
db_utcnow(), db_quoteinterval('14 DAY')
);
- $dirmode = intval(get_config('system', 'directory_mode'));
+ $dirmode = intval(Config::Get('system', 'directory_mode'));
if ($dirmode === DIRECTORY_MODE_SECONDARY || $dirmode === DIRECTORY_MODE_PRIMARY) {
logger('regdir: ' . print_r(z_fetch_url(get_directory_primary() . '/regdir?f=&url=' . urlencode(z_root()) . '&realm=' . urlencode(get_directory_realm())), true));
}
diff --git a/Zotlabs/Daemon/Directory.php b/Zotlabs/Daemon/Directory.php
index 19adf8273..1c4c29ac2 100644
--- a/Zotlabs/Daemon/Directory.php
+++ b/Zotlabs/Daemon/Directory.php
@@ -2,6 +2,7 @@
namespace Zotlabs\Daemon;
+use Zotlabs\Lib\Config;
use Zotlabs\Lib\Libzot;
use Zotlabs\Lib\Libzotdir;
use Zotlabs\Lib\Queue;
@@ -25,7 +26,7 @@ class Directory {
logger('directory update', LOGGER_DEBUG);
- $dirmode = get_config('system', 'directory_mode');
+ $dirmode = Config::Get('system', 'directory_mode');
if ($dirmode === false)
$dirmode = DIRECTORY_MODE_NORMAL;
diff --git a/Zotlabs/Daemon/Expire.php b/Zotlabs/Daemon/Expire.php
index 6ab67150f..ad52a6b71 100644
--- a/Zotlabs/Daemon/Expire.php
+++ b/Zotlabs/Daemon/Expire.php
@@ -2,6 +2,8 @@
namespace Zotlabs\Daemon;
+use Zotlabs\Lib\Config;
+
require_once('include/items.php');
class Expire {
@@ -10,14 +12,14 @@ class Expire {
cli_startup();
- $pid = get_config('procid', 'expire', false);
+ $pid = Config::Get('procid', 'expire', false);
if ($pid && (function_exists('posix_kill') ? posix_kill($pid, 0) : true)) {
logger('procedure already run with pid ' . $pid, LOGGER_DEBUG);
return;
}
$pid = getmypid();
- set_config('procid', 'expire', $pid);
+ Config::Set('procid', 'expire', $pid);
// perform final cleanup on previously delete items
@@ -38,13 +40,13 @@ class Expire {
db_quoteinterval('36 DAY')
);
- if (intval(get_config('system', 'optimize_items')))
+ if (intval(Config::Get('system', 'optimize_items')))
q("optimize table item");
logger('expire: start with pid ' . $pid, LOGGER_DEBUG);
- $site_expire = intval(get_config('system', 'default_expire_days', 30));
- $commented_days = intval(get_config('system', 'active_expire_days', 7));
+ $site_expire = intval(Config::Get('system', 'default_expire_days', 30));
+ $commented_days = intval(Config::Get('system', 'active_expire_days', 7));
logger('site_expire: ' . $site_expire);
@@ -84,7 +86,7 @@ class Expire {
// this should probably just fetch the channel_expire_days from the sys channel,
// but there's no convenient way to set it.
- $expire_days = get_config('system', 'sys_expire_days');
+ $expire_days = Config::Get('system', 'sys_expire_days');
if ($expire_days === false)
$expire_days = 30;
@@ -101,7 +103,7 @@ class Expire {
logger('Expire: sys: done', LOGGER_DEBUG);
}
- del_config('procid', 'expire');
+ Config::Delete('procid', 'expire');
return;
}
diff --git a/Zotlabs/Daemon/Master.php b/Zotlabs/Daemon/Master.php
index c9ed91aaa..d28e462dd 100644
--- a/Zotlabs/Daemon/Master.php
+++ b/Zotlabs/Daemon/Master.php
@@ -37,7 +37,7 @@ class Master {
return;
}
- $phpbin = get_config('system', 'phpbin', 'php');
+ $phpbin = Config::Get('system', 'phpbin', 'php');
proc_run($phpbin, 'Zotlabs/Daemon/Master.php', $arr);
*/
}
diff --git a/Zotlabs/Daemon/Notifier.php b/Zotlabs/Daemon/Notifier.php
index 4e7ca3911..20134b8fe 100644
--- a/Zotlabs/Daemon/Notifier.php
+++ b/Zotlabs/Daemon/Notifier.php
@@ -2,8 +2,9 @@
namespace Zotlabs\Daemon;
-use Zotlabs\Lib\Libzot;
use Zotlabs\Lib\Activity;
+use Zotlabs\Lib\Config;
+use Zotlabs\Lib\Libzot;
use Zotlabs\Lib\Queue;
require_once('include/html2plain.php');
@@ -668,7 +669,7 @@ class Notifier {
);
// only create delivery reports for normal undeleted items
- if (is_array($target_item) && (!$target_item['item_deleted']) && (!get_config('system', 'disable_dreport'))) {
+ if (is_array($target_item) && (!$target_item['item_deleted']) && (!Config::Get('system', 'disable_dreport'))) {
q("insert into dreport ( dreport_mid, dreport_site, dreport_recip, dreport_name, dreport_result, dreport_time, dreport_xchan, dreport_queue )
values ( '%s', '%s','%s','%s','%s','%s','%s','%s' ) ",
dbesc($target_item['mid']),
@@ -698,7 +699,7 @@ class Notifier {
do_delivery(self::$deliveries);
}
- if ($dead_hosts && is_array($target_item) && (!$target_item['item_deleted']) && (!get_config('system', 'disable_dreport'))) {
+ if ($dead_hosts && is_array($target_item) && (!$target_item['item_deleted']) && (!Config::Get('system', 'disable_dreport'))) {
foreach ($dead_hosts as $deceased_host) {
$r = q("insert into dreport ( dreport_mid, dreport_site, dreport_recip, dreport_name, dreport_result, dreport_time, dreport_xchan, dreport_queue )
values ( '%s', '%s','%s','%s','%s','%s','%s','%s' ) ",
diff --git a/Zotlabs/Daemon/Onepoll.php b/Zotlabs/Daemon/Onepoll.php
index 973bcf402..e525d138c 100644
--- a/Zotlabs/Daemon/Onepoll.php
+++ b/Zotlabs/Daemon/Onepoll.php
@@ -5,6 +5,7 @@ namespace Zotlabs\Daemon;
use Zotlabs\Lib\Activity;
use Zotlabs\Lib\ActivityStreams;
use Zotlabs\Lib\ASCollection;
+use Zotlabs\Lib\Config;
use Zotlabs\Lib\Libzot;
require_once('include/socgraph.php');
@@ -25,7 +26,7 @@ class Onepoll {
}
$sql_extra = '';
- $allow_feeds = get_config('system', 'feed_contacts');
+ $allow_feeds = Config::Get('system', 'feed_contacts');
if(!$allow_feeds) {
$sql_extra = ' and abook_feed = 0 ';
}
@@ -125,7 +126,7 @@ class Onepoll {
if ($fetch_feed) {
- $max = intval(get_config('system', 'max_imported_posts', 30));
+ $max = intval(Config::Get('system', 'max_imported_posts', 30));
if (intval($max)) {
$cl = Activity::get_actor_collections($contact['abook_xchan']);
diff --git a/Zotlabs/Daemon/Poller.php b/Zotlabs/Daemon/Poller.php
index 77a428ec3..2103310b9 100644
--- a/Zotlabs/Daemon/Poller.php
+++ b/Zotlabs/Daemon/Poller.php
@@ -2,11 +2,13 @@
namespace Zotlabs\Daemon;
+use Zotlabs\Lib\Config;
+
class Poller {
static public function run($argc, $argv) {
- $maxsysload = intval(get_config('system', 'maxloadavg'));
+ $maxsysload = intval(Config::Get('system', 'maxloadavg'));
if ($maxsysload < 1)
$maxsysload = 50;
if (function_exists('sys_getloadavg')) {
@@ -17,7 +19,7 @@ class Poller {
}
}
- $interval = get_config('queueworker', 'queue_interval', 500000);
+ $interval = Config::Get('queueworker', 'queue_interval', 500000);
logger('poller: start');
@@ -43,13 +45,13 @@ class Poller {
reload_plugins();
// Only poll from those with suitable relationships
- $abandon_days = intval(get_config('system', 'account_abandon_days', 0));
+ $abandon_days = intval(Config::Get('system', 'account_abandon_days', 0));
$abandon_sql = (($abandon_days)
? sprintf(" AND account_lastlog > %s - INTERVAL %s ", db_utcnow(), db_quoteinterval(intval($abandon_days) . ' DAY'))
: ''
);
- $allow_feeds = get_config('system', 'feed_contacts');
+ $allow_feeds = Config::Get('system', 'feed_contacts');
if(!$allow_feeds) {
$sql_extra .= ' and abook_feed = 0 ';
}
@@ -81,7 +83,7 @@ class Poller {
if (intval($contact['abook_feed'])) {
$min = service_class_fetch($contact['abook_channel'], 'minimum_feedcheck_minutes');
if (!$min)
- $min = intval(get_config('system', 'minimum_feedcheck_minutes'));
+ $min = intval(Config::Get('system', 'minimum_feedcheck_minutes'));
if (!$min)
$min = 60;
@@ -167,7 +169,7 @@ class Poller {
}
}
- $dirmode = intval(get_config('system', 'directory_mode'));
+ $dirmode = intval(Config::Get('system', 'directory_mode'));
if ($dirmode == DIRECTORY_MODE_SECONDARY || $dirmode == DIRECTORY_MODE_PRIMARY) {
$r = q("SELECT * FROM updates WHERE ud_update = 1 AND (ud_last = '%s' OR ud_last > %s - INTERVAL %s)",
@@ -195,7 +197,7 @@ class Poller {
}
}
- set_config('system', 'lastpoll', datetime_convert());
+ Config::Set('system', 'lastpoll', datetime_convert());
return;
}
diff --git a/Zotlabs/Daemon/Thumbnail.php b/Zotlabs/Daemon/Thumbnail.php
index fa9570658..85fcb8b72 100644
--- a/Zotlabs/Daemon/Thumbnail.php
+++ b/Zotlabs/Daemon/Thumbnail.php
@@ -2,6 +2,7 @@
namespace Zotlabs\Daemon;
+use Zotlabs\Lib\Config;
class Thumbnail {
@@ -19,9 +20,9 @@ class Thumbnail {
$attach = $c[0];
- $preview_style = intval(get_config('system', 'thumbnail_security', 0));
- $preview_width = intval(get_config('system', 'thumbnail_width', 300));
- $preview_height = intval(get_config('system', 'thumbnail_height', 300));
+ $preview_style = intval(Config::Get('system', 'thumbnail_security', 0));
+ $preview_width = intval(Config::Get('system', 'thumbnail_width', 300));
+ $preview_height = intval(Config::Get('system', 'thumbnail_height', 300));
$p = [
'attach' => $attach,
diff --git a/Zotlabs/Daemon/Xchan_photo.php b/Zotlabs/Daemon/Xchan_photo.php
index f90d1d726..662fc967c 100644
--- a/Zotlabs/Daemon/Xchan_photo.php
+++ b/Zotlabs/Daemon/Xchan_photo.php
@@ -8,14 +8,15 @@ class Xchan_photo {
static public function run($argc, $argv) {
- if ($argc != 3) {
+ if ($argc < 3) {
return;
}
$url = hex2bin($argv[1]);
$xchan = hex2bin($argv[2]);
+ $force = $argv[3];
- $photos = import_xchan_photo($url, $xchan);
+ $photos = import_xchan_photo($url, $xchan, false, $force);
if ($photos) {
$result = q("update xchan set xchan_photo_date = '%s', xchan_photo_l = '%s', xchan_photo_m = '%s', xchan_photo_s = '%s', xchan_photo_mimetype = '%s' where xchan_hash = '%s'",
dbescdate(datetime_convert()),
@@ -27,8 +28,10 @@ class Xchan_photo {
);
if (! $result) {
- logger("xchan update failed for $url");
+ logger("xchan photo update failed for $url");
}
}
+
+ return;
}
}
diff --git a/Zotlabs/Extend/Route.php b/Zotlabs/Extend/Route.php
index f7b90ec6e..95b83e11b 100644
--- a/Zotlabs/Extend/Route.php
+++ b/Zotlabs/Extend/Route.php
@@ -2,6 +2,7 @@
namespace Zotlabs\Extend;
+use Zotlabs\Lib\Config;
class Route {
@@ -38,11 +39,11 @@ class Route {
}
static function get() {
- return get_config('system','routes',[]);
+ return Config::Get('system','routes',[]);
}
static function set($r) {
- return set_config('system','routes',$r);
+ return Config::Set('system','routes',$r);
}
}
diff --git a/Zotlabs/Extend/Widget.php b/Zotlabs/Extend/Widget.php
index dee64c61b..6ab95237d 100644
--- a/Zotlabs/Extend/Widget.php
+++ b/Zotlabs/Extend/Widget.php
@@ -2,6 +2,7 @@
namespace Zotlabs\Extend;
+use Zotlabs\Lib\Config;
class Widget {
@@ -38,10 +39,10 @@ class Widget {
}
static function get() {
- return get_config('system','widgets',[]);
+ return Config::Get('system','widgets',[]);
}
static function set($r) {
- return set_config('system','widgets',$r);
+ return Config::Set('system','widgets',$r);
}
}
diff --git a/Zotlabs/Identity/OAuth2Server.php b/Zotlabs/Identity/OAuth2Server.php
index b747b95db..67326b599 100644
--- a/Zotlabs/Identity/OAuth2Server.php
+++ b/Zotlabs/Identity/OAuth2Server.php
@@ -2,6 +2,8 @@
namespace Zotlabs\Identity;
+use Zotlabs\Lib\Config;
+
class OAuth2Server extends \OAuth2\Server {
public function __construct(OAuth2Storage $storage, $config = null) {
@@ -24,8 +26,8 @@ class OAuth2Server extends \OAuth2\Server {
$keyStorage = new \OAuth2\Storage\Memory( [
'keys' => [
- 'public_key' => get_config('system', 'pubkey'),
- 'private_key' => get_config('system', 'prvkey')
+ 'public_key' => Config::Get('system', 'pubkey'),
+ 'private_key' => Config::Get('system', 'prvkey')
]
]);
diff --git a/Zotlabs/Lib/Activity.php b/Zotlabs/Lib/Activity.php
index b628221fb..9178dac39 100644
--- a/Zotlabs/Lib/Activity.php
+++ b/Zotlabs/Lib/Activity.php
@@ -70,7 +70,7 @@ class Activity {
}
if ($items) {
- return self::encode_item(array_shift($items), true);
+ return self::encode_item(array_shift($items));
}
return null;
@@ -1875,7 +1875,7 @@ class Activity {
}
if ($icon) {
- Master::Summon(['Xchan_photo', bin2hex($icon), bin2hex($url)]);
+ Master::Summon(['Xchan_photo', bin2hex($icon), bin2hex($url), $force]);
}
}
@@ -2902,7 +2902,7 @@ class Activity {
if (intval($parent[0]['item_private'])) {
if (!intval($item['item_private'])) {
- $item['item_private'] = intval($parent_item['item_private']);
+ $item['item_private'] = intval($parent[0]['item_private']);
$item['allow_cid'] = '<' . $channel['channel_hash'] . '>';
$item['allow_gid'] = $item['deny_cid'] = $item['deny_gid'] = '';
}
diff --git a/Zotlabs/Lib/Apps.php b/Zotlabs/Lib/Apps.php
index 1c05d69b1..0dc405ea9 100644
--- a/Zotlabs/Lib/Apps.php
+++ b/Zotlabs/Lib/Apps.php
@@ -3,6 +3,7 @@
namespace Zotlabs\Lib;
use App;
+use Zotlabs\Lib\Config;
require_once('include/plugin.php');
require_once('include/channel.php');
@@ -65,7 +66,7 @@ class Apps {
}
static public function get_base_apps() {
- $x = get_config('system','base_apps',[
+ $x = Config::Get('system','base_apps',[
'Connections',
'Contact Roles',
'Network',
@@ -301,7 +302,7 @@ class Apps {
break;
default:
if($config)
- $unset = ((get_config('system', $require[0]) == $require[1]) ? false : true);
+ $unset = ((Config::Get('system', $require[0]) == $require[1]) ? false : true);
else
$unset = ((local_channel() && feature_enabled(local_channel(),$require)) ? false : true);
if($unset)
@@ -523,7 +524,7 @@ class Apps {
break;
default:
if($config)
- $unset = ((get_config('system', $require[0]) === $require[1]) ? false : true);
+ $unset = ((Config::Get('system', $require[0]) === $require[1]) ? false : true);
else
$unset = ((local_channel() && feature_enabled(local_channel(),$require)) ? false : true);
if($unset)
@@ -960,7 +961,7 @@ class Apps {
$conf = (($menu === 'nav_featured_app') ? 'app_order' : 'app_pin_order');
- $x = (($uid) ? get_pconfig($uid,'system',$conf) : get_config('system',$conf));
+ $x = (($uid) ? get_pconfig($uid,'system',$conf) : Config::Get('system',$conf));
if(($x) && (! is_array($x))) {
$y = explode(',',$x);
$y = array_map('trim',$y);
diff --git a/Zotlabs/Lib/Cache.php b/Zotlabs/Lib/Cache.php
index f3f520496..4b5beb2aa 100644
--- a/Zotlabs/Lib/Cache.php
+++ b/Zotlabs/Lib/Cache.php
@@ -2,10 +2,11 @@
namespace Zotlabs\Lib;
- /**
- * cache api
- */
+use Zotlabs\Lib\Config;
+/**
+ * cache api
+ */
class Cache {
/**
@@ -23,7 +24,7 @@ class Cache {
$r = q("SELECT v FROM cache WHERE k = '%s' AND updated > %s - INTERVAL %s LIMIT 1",
dbesc($hash),
db_utcnow(),
- db_quoteinterval(($age ? $age : get_config('system','object_cache_days', '30') . ' DAY'))
+ db_quoteinterval(($age ? $age : Config::Get('system','object_cache_days', '30') . ' DAY'))
);
if ($r)
diff --git a/Zotlabs/Lib/Config.php b/Zotlabs/Lib/Config.php
index 95df8ed6f..cd8b08991 100644
--- a/Zotlabs/Lib/Config.php
+++ b/Zotlabs/Lib/Config.php
@@ -115,7 +115,7 @@ class Config {
* The category of the configuration value
* @param string $key
* The configuration key to query
- * @param string $default (optional) default false
+ * @param mixed $default (optional) default false
* @return mixed Return value or false on error or if not set
*/
public static function Get($family, $key, $default = false) {
diff --git a/Zotlabs/Lib/Connect.php b/Zotlabs/Lib/Connect.php
index 4de41526b..b8e7a5c4e 100644
--- a/Zotlabs/Lib/Connect.php
+++ b/Zotlabs/Lib/Connect.php
@@ -5,8 +5,7 @@ namespace Zotlabs\Lib;
use App;
use Zotlabs\Access\Permissions;
use Zotlabs\Daemon\Master;
-
-
+use Zotlabs\Lib\Config;
class Connect {
@@ -96,7 +95,7 @@ class Connect {
$wf = discover_by_webbie($url,$protocol);
if (! $wf) {
- $feeds = get_config('system','feed_contacts');
+ $feeds = Config::Get('system','feed_contacts');
if (($feeds) && (in_array($protocol, [ '', 'feed', 'rss' ]))) {
$d = discover_by_url($url);
diff --git a/Zotlabs/Lib/Crypto.php b/Zotlabs/Lib/Crypto.php
index 188c6bd81..46a25d3b5 100644
--- a/Zotlabs/Lib/Crypto.php
+++ b/Zotlabs/Lib/Crypto.php
@@ -3,6 +3,7 @@
namespace Zotlabs\Lib;
use Exception;
+use Zotlabs\Lib\Config;
class Crypto {
@@ -44,7 +45,7 @@ class Crypto {
'encrypt_key' => false
];
- $conf = get_config('system', 'openssl_conf_file');
+ $conf = Config::Get('system', 'openssl_conf_file');
if ($conf) {
$openssl_options['config'] = $conf;
diff --git a/Zotlabs/Lib/DB_Upgrade.php b/Zotlabs/Lib/DB_Upgrade.php
index b6e3f7b7b..981c354a4 100644
--- a/Zotlabs/Lib/DB_Upgrade.php
+++ b/Zotlabs/Lib/DB_Upgrade.php
@@ -2,6 +2,7 @@
namespace Zotlabs\Lib;
+use Zotlabs\Lib\Config;
class DB_Upgrade {
@@ -13,9 +14,9 @@ class DB_Upgrade {
$this->config_name = 'db_version';
$this->func_prefix = '_';
- $build = get_config('system', 'db_version', 0);
+ $build = Config::Get('system', 'db_version', 0);
if(! intval($build))
- $build = set_config('system', 'db_version', $db_revision);
+ $build = Config::Set('system', 'db_version', $db_revision);
if($build == $db_revision) {
// Nothing to be done.
@@ -27,7 +28,7 @@ class DB_Upgrade {
logger('Critical: check_config unable to determine database schema version');
return;
}
-
+
$current = intval($db_revision);
if($stored < $current) {
@@ -38,7 +39,7 @@ class DB_Upgrade {
for($x = $stored + 1; $x <= $current; $x ++) {
$s = '_' . $x;
$cls = '\\Zotlabs\Update\\' . $s ;
- if(! class_exists($cls)) {
+ if(! class_exists($cls)) {
return;
}
@@ -52,10 +53,10 @@ class DB_Upgrade {
Config::Load('database');
- if(get_config('database', $s))
+ if(Config::Get('database', $s))
break;
- set_config('database',$s, '1');
-
+ Config::Set('database',$s, '1');
+
$c = new $cls();
@@ -65,10 +66,10 @@ class DB_Upgrade {
$source = t('Source code of failed update: ') . "\n\n" . @file_get_contents('Zotlabs/Update/' . $s . '.php');
-
+
// Prevent sending hundreds of thousands of emails by creating
- // a lockfile.
+ // a lockfile.
$lockfile = 'store/[data]/mailsent';
@@ -77,7 +78,7 @@ class DB_Upgrade {
@unlink($lockfile);
//send the administrator an e-mail
file_put_contents($lockfile, $x);
-
+
$r = q("select account_language from account where account_email = '%s' limit 1",
dbesc(\App::$config['system']['admin_email'])
);
@@ -86,7 +87,7 @@ class DB_Upgrade {
[
'toEmail' => \App::$config['system']['admin_email'],
'messageSubject' => sprintf( t('Update Error at %s'), z_root()),
- 'textVersion' => replace_macros(get_intltext_template('update_fail_eml.tpl'),
+ 'textVersion' => replace_macros(get_intltext_template('update_fail_eml.tpl'),
[
'$sitename' => \App::$config['system']['sitename'],
'$siteurl' => z_root(),
@@ -104,11 +105,11 @@ class DB_Upgrade {
pop_lang();
}
else {
- set_config('database',$s, 'success');
+ Config::Set('database',$s, 'success');
}
}
}
- set_config('system', 'db_version', $db_revision);
+ Config::Set('system', 'db_version', $db_revision);
}
}
-} \ No newline at end of file
+}
diff --git a/Zotlabs/Lib/DReport.php b/Zotlabs/Lib/DReport.php
index 71e39a9d7..ac8e0d377 100644
--- a/Zotlabs/Lib/DReport.php
+++ b/Zotlabs/Lib/DReport.php
@@ -1,6 +1,8 @@
<?php
namespace Zotlabs\Lib;
+use Zotlabs\Lib\Config;
+
class DReport {
private $location;
@@ -70,7 +72,7 @@ class DReport {
static function is_storable($dr) {
- if(get_config('system', 'disable_dreport'))
+ if(Config::Get('system', 'disable_dreport'))
return false;
/**
diff --git a/Zotlabs/Lib/Enotify.php b/Zotlabs/Lib/Enotify.php
index 48a255e95..121ad9b09 100644
--- a/Zotlabs/Lib/Enotify.php
+++ b/Zotlabs/Lib/Enotify.php
@@ -6,6 +6,7 @@ namespace Zotlabs\Lib;
* @brief File with functions and a class for generating system and email notifications.
*/
+use Zotlabs\Lib\Config;
class Enotify {
@@ -61,7 +62,7 @@ class Enotify {
$product = t('$projectname'); // PLATFORM_NAME;
$siteurl = z_root();
$thanks = t('Thank You,');
- $sitename = get_config('system','sitename');
+ $sitename = Config::Get('system','sitename');
$site_admin = sprintf( t('%s Administrator'), $sitename);
$opt_out1 = sprintf( t('This email was sent by %1$s at %2$s.'), t('$Projectname'), \App::get_hostname());
$opt_out2 = sprintf( t('To stop receiving these messages, please adjust your Notification Settings at %s'), z_root() . '/settings');
@@ -73,15 +74,15 @@ class Enotify {
// Do not translate 'noreply' as it must be a legal 7-bit email address
- $reply_email = get_config('system', 'reply_address');
+ $reply_email = Config::Get('system', 'reply_address');
if(! $reply_email)
$reply_email = 'noreply' . '@' . $hostname;
- $sender_email = get_config('system', 'from_email');
+ $sender_email = Config::Get('system', 'from_email');
if(! $sender_email)
$sender_email = 'Administrator' . '@' . $hostname;
- $sender_name = get_config('system', 'from_email_name');
+ $sender_name = Config::Get('system', 'from_email_name');
if(! $sender_name)
$sender_name = \Zotlabs\Lib\System::get_site_name();
diff --git a/Zotlabs/Lib/Libsync.php b/Zotlabs/Lib/Libsync.php
index 3130290f7..a7e33ba6b 100644
--- a/Zotlabs/Lib/Libsync.php
+++ b/Zotlabs/Lib/Libsync.php
@@ -5,6 +5,7 @@ namespace Zotlabs\Lib;
use App;
use Zotlabs\Daemon\Master;
+use Zotlabs\Lib\Config;
class Libsync {
@@ -135,7 +136,7 @@ class Libsync {
$info['collection_members'] = $r;
}
- $interval = get_config('queueworker', 'queue_interval', 500000);
+ $interval = Config::Get('queueworker', 'queue_interval', 500000);
logger('Packet: ' . print_r($info, true), LOGGER_DATA, LOG_DEBUG);
@@ -157,7 +158,7 @@ class Libsync {
/*
$x = q("select count(outq_hash) as total from outq where outq_delivered = 0");
- if (intval($x[0]['total']) > intval(get_config('system', 'force_queue_threshold', 3000))) {
+ if (intval($x[0]['total']) > intval(Config::Get('system', 'force_queue_threshold', 3000))) {
logger('immediate delivery deferred.', LOGGER_DEBUG, LOG_INFO);
Queue::update($hash);
continue;
@@ -266,7 +267,7 @@ class Libsync {
}
if ($cat !== 'hz_delpconfig') {
- set_pconfig($channel['channel_id'],$cat,$k,$v,$pconfig_updated[$k]);
+ set_pconfig($channel['channel_id'], $cat, $k, $v, $pconfig_updated[$k]);
}
}
}
diff --git a/Zotlabs/Lib/Libzot.php b/Zotlabs/Lib/Libzot.php
index 3495ede06..bc944c97c 100644
--- a/Zotlabs/Lib/Libzot.php
+++ b/Zotlabs/Lib/Libzot.php
@@ -3,10 +3,11 @@
namespace Zotlabs\Lib;
use App;
-use Zotlabs\Web\HTTPSig;
-use Zotlabs\Access\Permissions;
use Zotlabs\Access\PermissionLimits;
+use Zotlabs\Access\Permissions;
use Zotlabs\Daemon\Master;
+use Zotlabs\Lib\Config;
+use Zotlabs\Web\HTTPSig;
require_once('include/crypto.php');
@@ -101,12 +102,12 @@ class Libzot {
*/
static function build_packet($channel, $type = 'activity', $recipients = null, $msg = [], $encoding = 'activitystreams', $remote_key = null, $methods = '') {
- $sig_method = get_config('system', 'signature_algorithm', 'sha256');
+ $sig_method = Config::Get('system', 'signature_algorithm', 'sha256');
$data = [
'type' => $type,
'encoding' => $encoding,
'sender' => $channel['channel_hash'],
- 'site_id' => self::make_xchan_hash(z_root(), get_config('system', 'pubkey')),
+ 'site_id' => self::make_xchan_hash(z_root(), Config::Get('system', 'pubkey')),
'version' => System::get_zot_revision(),
];
@@ -661,7 +662,7 @@ class Libzot {
*/
call_hooks('import_xchan', $arr);
- $dirmode = intval(get_config('system', 'directory_mode', DIRECTORY_MODE_NORMAL));
+ $dirmode = intval(Config::Get('system', 'directory_mode', DIRECTORY_MODE_NORMAL));
$changed = false;
$what = '';
@@ -710,7 +711,7 @@ class Libzot {
// if we import an entry from a site that's not ours and either or both of us is off the grid - hide the entry.
/** @TODO: check if we're the same directory realm, which would mean we are allowed to see it */
- $dirmode = get_config('system', 'directory_mode');
+ $dirmode = Config::Get('system', 'directory_mode');
if (((isset($arr['site']['directory_mode']) && $arr['site']['directory_mode'] === 'standalone') || ($dirmode & DIRECTORY_MODE_STANDALONE)) && ($arr['site']['url'] != z_root()))
$arr['searchable'] = false;
@@ -1008,7 +1009,7 @@ class Libzot {
logger('Headers: ' . print_r($arr['header'], true), LOGGER_DATA, LOG_DEBUG);
}
- $x = Crypto::unencapsulate($x, get_config('system', 'prvkey'));
+ $x = Crypto::unencapsulate($x, Config::Get('system', 'prvkey'));
if ($x && !is_array($x)) {
$x = json_decode($x, true);
@@ -1416,7 +1417,7 @@ class Libzot {
$include_sys = false;
if ($msg['type'] === 'activity') {
- $disable_discover_tab = get_config('system', 'disable_discover_tab') || get_config('system', 'disable_discover_tab') === false;
+ $disable_discover_tab = Config::Get('system', 'disable_discover_tab') || Config::Get('system', 'disable_discover_tab') === false;
if (!$disable_discover_tab)
$include_sys = true;
@@ -1632,8 +1633,8 @@ class Libzot {
continue;
}
- $incl = get_config('system','pubstream_incl');
- $excl = get_config('system','pubstream_excl');
+ $incl = Config::Get('system','pubstream_incl');
+ $excl = Config::Get('system','pubstream_excl');
if(($incl || $excl) && !MessageFilter::evaluate($arr, $incl, $excl)) {
$local_public = false;
@@ -2568,9 +2569,14 @@ class Libzot {
if (!$observer)
return '';
- $parsed = parse_url($observer['xchan_url']);
+ $url = $observer['xchan_url'];
+ if (preg_match('|^https?://|', $url) === 0) {
+ $url = "https://{$url}";
+ }
+
+ $parsed = parse_url($url);
- return $parsed['scheme'] . '://' . $parsed['host'] . (($parsed['port']) ? ':' . $parsed['port'] : '') . '/rpost?f=';
+ return $parsed['scheme'] . '://' . $parsed['host'] . (isset($parsed['port']) ? ':' . $parsed['port'] : '') . '/rpost?f=';
}
/**
@@ -2924,8 +2930,8 @@ class Libzot {
*/
static function site_info() {
- $signing_key = get_config('system', 'prvkey');
- $sig_method = get_config('system', 'signature_algorithm', 'sha256');
+ $signing_key = Config::Get('system', 'prvkey');
+ $sig_method = Config::Get('system', 'signature_algorithm', 'sha256');
$ret = [];
$ret['site'] = [];
@@ -2934,10 +2940,10 @@ class Libzot {
$ret['site']['post'] = z_root() . '/zot';
$ret['site']['openWebAuth'] = z_root() . '/owa';
$ret['site']['authRedirect'] = z_root() . '/magic';
- $ret['site']['sitekey'] = get_config('system', 'pubkey');
+ $ret['site']['sitekey'] = Config::Get('system', 'pubkey');
$ret['site']['directory_mode'] = 'normal';
- $dirmode = get_config('system', 'directory_mode');
+ $dirmode = Config::Get('system', 'directory_mode');
if ($dirmode == DIRECTORY_MODE_PRIMARY)
$ret['site']['directory_mode'] = 'primary';
@@ -2956,7 +2962,7 @@ class Libzot {
if ($dirmode != DIRECTORY_MODE_STANDALONE) {
- $register_policy = intval(get_config('system', 'register_policy'));
+ $register_policy = intval(Config::Get('system', 'register_policy'));
if ($register_policy == REGISTER_CLOSED)
$ret['site']['register_policy'] = 'closed';
@@ -2966,7 +2972,7 @@ class Libzot {
$ret['site']['register_policy'] = 'open';
- $access_policy = intval(get_config('system', 'access_policy'));
+ $access_policy = intval(Config::Get('system', 'access_policy'));
if ($access_policy == ACCESS_PRIVATE)
$ret['site']['access_policy'] = 'private';
@@ -2982,7 +2988,7 @@ class Libzot {
require_once('include/channel.php');
$ret['site']['channels'] = channel_total();
- $ret['site']['admin'] = get_config('system', 'admin_email');
+ $ret['site']['admin'] = Config::Get('system', 'admin_email');
$visible_plugins = [];
if (is_array(App::$plugins) && count(App::$plugins)) {
@@ -2993,10 +2999,10 @@ class Libzot {
}
$ret['site']['plugins'] = $visible_plugins;
- $ret['site']['sitehash'] = get_config('system', 'location_hash');
- $ret['site']['sitename'] = get_config('system', 'sitename');
- $ret['site']['sellpage'] = get_config('system', 'sellpage');
- $ret['site']['location'] = get_config('system', 'site_location');
+ $ret['site']['sitehash'] = Config::Get('system', 'location_hash');
+ $ret['site']['sitename'] = Config::Get('system', 'sitename');
+ $ret['site']['sellpage'] = Config::Get('system', 'sellpage');
+ $ret['site']['location'] = Config::Get('system', 'site_location');
$ret['site']['realm'] = get_directory_realm();
$ret['site']['project'] = System::get_platform_name();
$ret['site']['version'] = System::get_project_version();
diff --git a/Zotlabs/Lib/Libzotdir.php b/Zotlabs/Lib/Libzotdir.php
index ca3902a9e..25f308fc2 100644
--- a/Zotlabs/Lib/Libzotdir.php
+++ b/Zotlabs/Lib/Libzotdir.php
@@ -2,6 +2,7 @@
namespace Zotlabs\Lib;
+use Zotlabs\Lib\Config;
use Zotlabs\Lib\Libzot;
use Zotlabs\Lib\Zotfinger;
use Zotlabs\Lib\Webfinger;
@@ -20,7 +21,7 @@ class Libzotdir {
static function find_upstream_directory($dirmode) {
- $preferred = get_config('system','directory_server');
+ $preferred = Config::Get('system','directory_server');
// Thwart attempts to use a private directory
@@ -47,17 +48,17 @@ class Libzotdir {
$directory_fallback_servers = get_directory_fallback_servers();
- $dirmode = intval(get_config('system','directory_mode'));
+ $dirmode = intval(Config::Get('system','directory_mode'));
if ($dirmode == DIRECTORY_MODE_NORMAL) {
$toss = mt_rand(0,count($directory_fallback_servers));
$preferred = $directory_fallback_servers[$toss];
if(! $preferred) {
$preferred = DIRECTORY_FALLBACK_MASTER;
}
- set_config('system','directory_server',$preferred);
+ Config::Set('system','directory_server',$preferred);
}
else {
- set_config('system','directory_server',z_root());
+ Config::Set('system','directory_server',z_root());
}
}
if($preferred) {
@@ -77,7 +78,7 @@ class Libzotdir {
static function check_upstream_directory() {
- $directory = get_config('system', 'directory_server');
+ $directory = Config::Get('system', 'directory_server');
// it's possible there is no directory server configured and the local hub is being used.
// If so, default to preserving the absence of a specific server setting.
@@ -94,7 +95,7 @@ class Libzotdir {
}
if (! $isadir)
- set_config('system', 'directory_server', '');
+ Config::Set('system', 'directory_server', '');
}
@@ -106,7 +107,7 @@ class Libzotdir {
$ret = ((array_key_exists($setting,$_SESSION)) ? intval($_SESSION[$setting]) : false);
if($ret === false)
- $ret = get_config('directory', $setting);
+ $ret = Config::Get('directory', $setting);
// 'safemode' is the default if there is no observer or no established preference.
@@ -114,7 +115,7 @@ class Libzotdir {
if($setting === 'safemode' && $ret === false)
$ret = 1;
- if($setting === 'globaldir' && intval(get_config('system','localdir_hide')))
+ if($setting === 'globaldir' && intval(Config::Get('system','localdir_hide')))
$ret = 1;
return $ret;
@@ -133,7 +134,7 @@ class Libzotdir {
$globaldir = self::get_directory_setting($observer, 'globaldir');
$pubforums = self::get_directory_setting($observer, 'pubforums');
- $hide_local = intval(get_config('system','localdir_hide'));
+ $hide_local = intval(Config::Get('system','localdir_hide'));
if($hide_local)
$globaldir = 1;
@@ -141,7 +142,7 @@ class Libzotdir {
// Build urls without order and pubforums so it's easy to tack on the changed value
// Probably there's an easier way to do this
- $directory_sort_order = get_config('system','directory_sort_order');
+ $directory_sort_order = Config::Get('system','directory_sort_order');
if(! $directory_sort_order)
$directory_sort_order = 'date';
@@ -232,7 +233,7 @@ class Libzotdir {
if (! $r)
return;
- $dir_trusted_hosts = array_merge(get_directory_fallback_servers(), get_config('system', 'trusted_directory_servers', []));
+ $dir_trusted_hosts = array_merge(get_directory_fallback_servers(), Config::Get('system', 'trusted_directory_servers', []));
foreach ($r as $rr) {
if (! $rr['site_directory'])
@@ -244,7 +245,7 @@ class Libzotdir {
// It will take about a month for a new directory to obtain the full current repertoire of channels.
/** @FIXME Go back and pick up earlier ratings if this is a new directory server. These do not get refreshed. */
- $token = get_config('system','realm_token');
+ $token = Config::Get('system','realm_token');
$syncdate = (($rr['site_sync'] <= NULL_DATE) ? datetime_convert('UTC','UTC','now - 2 days') : $rr['site_sync']);
$x = z_fetch_url($rr['site_directory'] . '?f=&sync=' . urlencode($syncdate) . (($token) ? '&t=' . $token : ''));
@@ -696,7 +697,7 @@ class Libzotdir {
static function update($hash, $addr, $bump_date = true, $flag = null) {
- $dirmode = intval(get_config('system', 'directory_mode'));
+ $dirmode = intval(Config::Get('system', 'directory_mode'));
if($dirmode == DIRECTORY_MODE_NORMAL) {
return;
diff --git a/Zotlabs/Lib/QueueWorker.php b/Zotlabs/Lib/QueueWorker.php
index 68e747b0f..24114438e 100644
--- a/Zotlabs/Lib/QueueWorker.php
+++ b/Zotlabs/Lib/QueueWorker.php
@@ -4,6 +4,9 @@ namespace Zotlabs\Lib;
use Ramsey\Uuid\Uuid;
use Ramsey\Uuid\Exception\UnableToBuildUuidException;
+use Zotlabs\Lib\Config;
+
+require_once 'include/dba/dba_transaction.php';
class QueueWorker {
@@ -28,18 +31,6 @@ class QueueWorker {
'Expire'
];
- private static function qstart() {
- q('START TRANSACTION');
- }
-
- private static function qcommit() {
- q("COMMIT");
- }
-
- private static function qrollback() {
- q("ROLLBACK");
- }
-
public static function Summon($argv) {
if ($argv[0] !== 'Queueworker') {
@@ -65,7 +56,7 @@ class QueueWorker {
logger('queueworker_stats_summon: cmd:' . $argv[0] . ' ' . 'timestamp:' . time());
- self::qstart();
+ $transaction = new \DbaTransaction(\DBA::$dba);
$r = q("INSERT INTO workerq (workerq_priority, workerq_data, workerq_uuid, workerq_cmd) VALUES (%d, '%s', '%s', '%s')",
intval($priority),
$workinfo_json,
@@ -73,18 +64,18 @@ class QueueWorker {
dbesc($argv[0])
);
if (!$r) {
- self::qrollback();
+ // Transaction is autmatically rolled back on return
logger("INSERT FAILED", LOGGER_DEBUG);
return;
}
- self::qcommit();
+ $transaction->commit();
logger('INSERTED: ' . $workinfo_json, LOGGER_DEBUG);
}
$workers = self::GetWorkerCount();
if ($workers < self::$maxworkers) {
logger($workers . '/' . self::$maxworkers . ' workers active', LOGGER_DEBUG);
- $phpbin = get_config('system', 'phpbin', 'php');
+ $phpbin = Config::Get('system', 'phpbin', 'php');
proc_run($phpbin, 'Zotlabs/Daemon/Master.php', ['Queueworker']);
}
}
@@ -111,7 +102,7 @@ class QueueWorker {
return;
}
- self::qstart();
+ $transaction = new \DbaTransaction(\DBA::$dba);
$r = q("INSERT INTO workerq (workerq_priority, workerq_data, workerq_uuid, workerq_cmd) VALUES (%d, '%s', '%s', '%s')",
intval($priority),
$workinfo_json,
@@ -119,11 +110,11 @@ class QueueWorker {
dbesc($argv[0])
);
if (!$r) {
- self::qrollback();
+ // Transaction is automatically rolled back on return
logger("Insert failed: " . $workinfo_json, LOGGER_DEBUG);
return;
}
- self::qcommit();
+ $transaction->commit();
logger('INSERTED: ' . $workinfo_json, LOGGER_DEBUG);
}
@@ -132,18 +123,18 @@ class QueueWorker {
public static function GetWorkerCount() {
if (self::$maxworkers == 0) {
- self::$maxworkers = get_config('queueworker', 'max_queueworkers', 4);
+ self::$maxworkers = Config::Get('queueworker', 'max_queueworkers', 4);
self::$maxworkers = self::$maxworkers > 3 ? self::$maxworkers : 4;
}
if (self::$workermaxage == 0) {
- self::$workermaxage = get_config('queueworker', 'max_queueworker_age');
+ self::$workermaxage = Config::Get('queueworker', 'max_queueworker_age');
self::$workermaxage = self::$workermaxage > 120 ? self::$workermaxage : 300;
}
- self::qstart();
+ $transaction = new \DbaTransaction(\DBA::$dba);
// skip locked is preferred but is not supported by mariadb < 10.6 which is still used a lot - hence make it optional
- $sql_quirks = ((get_config('system', 'db_skip_locked_supported')) ? 'SKIP LOCKED' : 'NOWAIT');
+ $sql_quirks = ((Config::Get('system', 'db_skip_locked_supported')) ? 'SKIP LOCKED' : 'NOWAIT');
$r = q("SELECT workerq_id FROM workerq WHERE workerq_reservationid IS NOT NULL AND workerq_processtimeout < %s FOR UPDATE $sql_quirks",
db_utcnow()
@@ -158,7 +149,7 @@ class QueueWorker {
$u = dbq("update workerq set workerq_reservationid = null where workerq_id in ($ids)");
}
- self::qcommit();
+ $transaction->commit();
//q("update workerq set workerq_reservationid = null where workerq_reservationid is not null and workerq_processtimeout < %s",
//db_utcnow()
@@ -196,15 +187,15 @@ class QueueWorker {
private static function getWorkId() {
self::GetWorkerCount();
- self::qstart();
+ $transaction = new \DbaTransaction(\DBA::$dba);
// skip locked is preferred but is not supported by mariadb < 10.6 which is still used a lot - hence make it optional
- $sql_quirks = ((get_config('system', 'db_skip_locked_supported')) ? 'SKIP LOCKED' : 'NOWAIT');
+ $sql_quirks = ((Config::Get('system', 'db_skip_locked_supported')) ? 'SKIP LOCKED' : 'NOWAIT');
$work = dbq("SELECT workerq_id, workerq_cmd FROM workerq WHERE workerq_reservationid IS NULL ORDER BY workerq_priority DESC, workerq_id ASC LIMIT 1 FOR UPDATE $sql_quirks");
if (!$work) {
- self::qrollback();
+ // Transaction automatically rolled back on return
return false;
}
@@ -224,24 +215,24 @@ class QueueWorker {
);
if (!$work) {
- self::qrollback();
+ // Transaction automatically rolled back on return
logger("Could not update workerq.", LOGGER_DEBUG);
return false;
}
logger("GOTWORK: " . json_encode($work), LOGGER_DEBUG);
- self::qcommit();
+ $transaction->commit();
return $id;
}
public static function Process() {
- $sleep = intval(get_config('queueworker', 'queue_worker_sleep', 100));
- $auto_queue_worker_sleep = get_config('queueworker', 'auto_queue_worker_sleep', 0);
+ $sleep = intval(Config::Get('queueworker', 'queue_worker_sleep', 100));
+ $auto_queue_worker_sleep = Config::Get('queueworker', 'auto_queue_worker_sleep', 0);
if (!self::GetWorkerID()) {
if ($auto_queue_worker_sleep) {
- set_config('queueworker', 'queue_worker_sleep', $sleep + 100);
+ Config::Set('queueworker', 'queue_worker_sleep', $sleep + 100);
}
logger('Unable to get worker ID. Exiting.', LOGGER_DEBUG);
@@ -250,7 +241,7 @@ class QueueWorker {
if ($auto_queue_worker_sleep && $sleep > 100) {
$next_sleep = $sleep - 100;
- set_config('queueworker', 'queue_worker_sleep', (($next_sleep < 100) ? 100 : $next_sleep));
+ Config::Set('queueworker', 'queue_worker_sleep', (($next_sleep < 100) ? 100 : $next_sleep));
}
$jobs = 0;
@@ -259,7 +250,7 @@ class QueueWorker {
self::$workersleep = $sleep;
self::$workersleep = ((intval(self::$workersleep) > 100) ? intval(self::$workersleep) : 100);
- if (function_exists('sys_getloadavg') && get_config('queueworker', 'load_average_sleep')) {
+ if (function_exists('sys_getloadavg') && Config::Get('queueworker', 'load_average_sleep')) {
// very experimental!
$load_average_sleep = true;
}
@@ -287,7 +278,7 @@ class QueueWorker {
if ($workers < self::$maxworkers) {
logger($workers . '/' . self::$maxworkers . ' workers active', LOGGER_DEBUG);
- $phpbin = get_config('system', 'phpbin', 'php');
+ $phpbin = Config::Get('system', 'phpbin', 'php');
proc_run($phpbin, 'Zotlabs/Daemon/Master.php', ['Queueworker']);
}
diff --git a/Zotlabs/Lib/ThreadItem.php b/Zotlabs/Lib/ThreadItem.php
index 8f364e945..1082bf642 100644
--- a/Zotlabs/Lib/ThreadItem.php
+++ b/Zotlabs/Lib/ThreadItem.php
@@ -3,8 +3,9 @@
namespace Zotlabs\Lib;
use App;
-use Zotlabs\Lib\Apps;
use Zotlabs\Access\AccessList;
+use Zotlabs\Lib\Apps;
+use Zotlabs\Lib\Config;
require_once('include/text.php');
@@ -41,9 +42,7 @@ class ThreadItem {
$this->data = $data;
$this->toplevel = ($this->get_id() == $this->get_data_value('parent'));
- $this->threaded = get_config('system','thread_allow');
-
- $observer = \App::get_observer();
+ $this->threaded = Config::Get('system','thread_allow');
// Prepare the children
if(isset($data['children'])) {
@@ -70,7 +69,7 @@ class ThreadItem {
// allow a site to configure the order and content of the reaction emoji list
if($this->toplevel) {
- $x = get_config('system','reactions');
+ $x = Config::Get('system','reactions');
if($x && is_array($x) && count($x)) {
$this->reactions = $x;
}
@@ -347,12 +346,12 @@ class ThreadItem {
$dreport = '';
- $keep_reports = intval(get_config('system','expire_delivery_reports'));
+ $keep_reports = intval(Config::Get('system','expire_delivery_reports'));
if($keep_reports === 0)
$keep_reports = 10;
$dreport_link = '';
- if((intval($item['item_type']) == ITEM_TYPE_POST) && (! get_config('system','disable_dreport')) && strcmp(datetime_convert('UTC','UTC',$item['created']),datetime_convert('UTC','UTC',"now - $keep_reports days")) > 0) {
+ if((intval($item['item_type']) == ITEM_TYPE_POST) && (! Config::Get('system','disable_dreport')) && strcmp(datetime_convert('UTC','UTC',$item['created']),datetime_convert('UTC','UTC',"now - $keep_reports days")) > 0) {
$dreport = t('Delivery Report');
$dreport_link = '?mid=' . $item['mid'];
}
@@ -363,7 +362,8 @@ class ThreadItem {
localize_item($item);
- $body = prepare_body($item,true);
+ $opts = (($item['resource_type'] === 'event') ? ['is_event_item' => true] : []);
+ $body = prepare_body($item, true, $opts);
// $viewthread (below) is only valid in list mode. If this is a channel page, build the thread viewing link
// since we can't depend on llink or plink pointing to the right local location.
@@ -397,7 +397,7 @@ class ThreadItem {
$json_mids = json_encode($mids);
// Pinned item processing
- $allowed_type = (in_array($item['item_type'], get_config('system', 'pin_types', [ ITEM_TYPE_POST ])) ? true : false);
+ $allowed_type = (in_array($item['item_type'], Config::Get('system', 'pin_types', [ ITEM_TYPE_POST ])) ? true : false);
$pinned_items = ($allowed_type ? get_pconfig($item['uid'], 'pinned', $item['item_type'], []) : []);
$pinned = ((!empty($pinned_items) && in_array($midb64, $pinned_items)) ? true : false);
@@ -549,7 +549,7 @@ class ThreadItem {
$result['children'] = array();
$nb_children = count($children);
- $visible_comments = get_config('system','expanded_comments');
+ $visible_comments = Config::Get('system','expanded_comments');
if($visible_comments === false)
$visible_comments = 3;
@@ -826,7 +826,7 @@ class ThreadItem {
*/
private function get_comment_box() {
- if(!$this->is_toplevel() && !get_config('system','thread_allow')) {
+ if(!$this->is_toplevel() && !Config::Get('system','thread_allow')) {
return '';
}
@@ -874,7 +874,7 @@ class ThreadItem {
'$feature_encrypt' => ((feature_enabled($conv->get_profile_owner(),'content_encrypt')) ? true : false),
'$encrypt' => t('Encrypt text'),
'$cipher' => $conv->get_cipher(),
- '$sourceapp' => \App::$sourcename,
+ '$sourceapp' => App::$sourcename,
'$observer' => get_observer_hash(),
'$anoncomments' => ((in_array($conv->get_mode(), ['channel', 'display', 'cards', 'articles']) && perm_is_allowed($conv->get_profile_owner(),'','post_comments')) ? true : false),
'$anonname' => [ 'anonname', t('Your full name (required)') ],
diff --git a/Zotlabs/Lib/Traits/HelpHelperTrait.php b/Zotlabs/Lib/Traits/HelpHelperTrait.php
new file mode 100644
index 000000000..b7711bbd5
--- /dev/null
+++ b/Zotlabs/Lib/Traits/HelpHelperTrait.php
@@ -0,0 +1,68 @@
+<?php
+
+namespace Zotlabs\Lib\Traits;
+
+use CommerceGuys\Intl\Language\LanguageRepository;
+
+trait HelpHelperTrait {
+
+ // PHP versions before 8.2 does not support trait constants,
+ // Leave this commented out until we drop support for PHP 8.1.
+ //
+ // const VALID_FILE_EXT = ['md', 'bb', 'html'];
+
+ private string $file_name = '';
+ private string $file_type = '';
+
+ /**
+ * Determines help language.
+ *
+ * If the language was specified in the URL, override the language preference
+ * of the browser. Default to English if both of these are absent.
+ *
+ * Updates the `$lang` property of the module.
+ */
+ private function determine_help_language() {
+
+ $language_repository = new LanguageRepository;
+ $languages = $language_repository->getList();
+
+ if(array_key_exists(argv(1), $languages)) {
+ $lang = argv(1);
+ $from_url = true;
+ } else {
+ $lang = \App::$language;
+ if(! isset($lang))
+ $lang = 'en';
+
+ $from_url = false;
+ }
+
+ $this->lang = array('language' => $lang, 'from_url' => $from_url);
+ }
+
+ /**
+ * Find the full path name of the file, given it's base path and
+ * the language of the request.
+ *
+ * @param string $base_path The path of the file to find, relative to the
+ * doc root path, and without the extension.
+ */
+ private function find_help_file(string $base_path, string $lang): void {
+
+ // Use local variable until we can use trait constants.
+ $valid_file_ext = ['md', 'bb', 'html'];
+
+ $base_path = "doc/{$lang}/${base_path}";
+
+ foreach ($valid_file_ext as $ext) {
+ $path = "{$base_path}.{$ext}";
+ if (file_exists($path)) {
+ $this->file_name = $path;
+ $this->file_type = $ext;
+
+ break;
+ }
+ }
+ }
+}
diff --git a/Zotlabs/Lib/Zotfinger.php b/Zotlabs/Lib/Zotfinger.php
index ccf64d6d1..2a16fc8cf 100644
--- a/Zotlabs/Lib/Zotfinger.php
+++ b/Zotlabs/Lib/Zotfinger.php
@@ -2,6 +2,7 @@
namespace Zotlabs\Lib;
+use Zotlabs\Lib\Config;
use Zotlabs\Web\HTTPSig;
class Zotfinger {
@@ -75,7 +76,7 @@ class Zotfinger {
$result['data'] = json_decode($x['body'],true);
if($result['data'] && is_array($result['data']) && array_key_exists('encrypted',$result['data']) && $result['data']['encrypted']) {
- $result['data'] = json_decode(Crypto::unencapsulate($result['data'],get_config('system','prvkey')),true);
+ $result['data'] = json_decode(Crypto::unencapsulate($result['data'],Config::Get('system','prvkey')),true);
}
logger('decrypted: ' . print_r($result,true), LOGGER_DATA);
diff --git a/Zotlabs/Module/Acl.php b/Zotlabs/Module/Acl.php
index b98f5621e..1de7a3d02 100644
--- a/Zotlabs/Module/Acl.php
+++ b/Zotlabs/Module/Acl.php
@@ -2,8 +2,9 @@
namespace Zotlabs\Module;
-use Zotlabs\Lib\Libzotdir;
use Zotlabs\Lib\AccessList;
+use Zotlabs\Lib\Config;
+use Zotlabs\Lib\Libzotdir;
require_once 'include/acl_selectors.php';
@@ -414,7 +415,7 @@ class Acl extends \Zotlabs\Web\Controller {
return;
}
- $dirmode = intval(get_config('system','directory_mode'));
+ $dirmode = intval(Config::Get('system','directory_mode'));
$search = ((x($_REQUEST,'search')) ? htmlentities($_REQUEST['search'],ENT_COMPAT,'UTF-8',false) : '');
if(! $search || mb_strlen($search) < 2)
return array();
@@ -443,7 +444,7 @@ class Acl extends \Zotlabs\Web\Controller {
$url = $directory['url'] . '/dirsearch';
}
- $token = get_config('system','realm_token');
+ $token = Config::Get('system','realm_token');
$count = (x($_REQUEST,'count') ? $_REQUEST['count'] : 100);
if($url) {
diff --git a/Zotlabs/Module/Admin.php b/Zotlabs/Module/Admin.php
index 59a9e22b2..89eaeccfe 100644
--- a/Zotlabs/Module/Admin.php
+++ b/Zotlabs/Module/Admin.php
@@ -8,6 +8,8 @@
namespace Zotlabs\Module;
+use Zotlabs\Lib\Config;
+
require_once('include/account.php');
/**
@@ -149,7 +151,7 @@ class Admin extends \Zotlabs\Web\Controller {
'$vmaster' => array( t('Repository version (master)'), $vmaster),
'$vdev' => array( t('Repository version (dev)'), $vdev),
'$upgrade' => $upgrade,
- '$build' => get_config('system', 'db_version')
+ '$build' => Config::Get('system', 'db_version')
));
}
diff --git a/Zotlabs/Module/Admin/Accounts.php b/Zotlabs/Module/Admin/Accounts.php
index b067b4bf6..6f7cb0311 100644
--- a/Zotlabs/Module/Admin/Accounts.php
+++ b/Zotlabs/Module/Admin/Accounts.php
@@ -2,7 +2,7 @@
namespace Zotlabs\Module\Admin;
-
+use Zotlabs\Lib\Config;
class Accounts {
@@ -76,7 +76,7 @@ class Accounts {
if ( $ac['success'] ) {
$rc .= '✔';
- $auto_create = get_config('system','auto_channel_create',1);
+ $auto_create = Config::Get('system','auto_channel_create',1);
if($auto_create) {
$reonar = json_decode($rs[0]['reg_stuff'], true);
@@ -87,7 +87,7 @@ class Accounts {
if($reonar['chan.did1'])
set_aconfig($ac['account']['account_id'], 'register', 'channel_address', $reonar['chan.did1']);
- $permissions_role = get_config('system','default_permissions_role');
+ $permissions_role = Config::Get('system','default_permissions_role');
if($permissions_role)
set_aconfig($ac['account']['account_id'], 'register', 'permissions_role', $permissions_role);
diff --git a/Zotlabs/Module/Admin/Addons.php b/Zotlabs/Module/Admin/Addons.php
index e088353e3..b7cfb651c 100644
--- a/Zotlabs/Module/Admin/Addons.php
+++ b/Zotlabs/Module/Admin/Addons.php
@@ -3,6 +3,7 @@
namespace Zotlabs\Module\Admin;
use App;
+use \Zotlabs\Lib\Config;
use \Zotlabs\Storage\GitRepo;
use \Michelf\MarkdownExtra;
@@ -276,7 +277,7 @@ class Addons {
if ($idz !== false) {
unset(App::$plugins[$idz]);
uninstall_plugin($plugin);
- set_config("system","addon", implode(", ",App::$plugins));
+ Config::Set("system","addon", implode(", ",App::$plugins));
}
}
$info['disabled'] = 1-intval($x);
@@ -297,7 +298,7 @@ class Addons {
$pinstalled = true;
info( sprintf( t("Plugin %s enabled."), $plugin ) );
}
- set_config("system","addon", implode(", ",App::$plugins));
+ Config::Set("system","addon", implode(", ",App::$plugins));
if($pinstalled) {
@require_once("addon/$plugin/$plugin.php");
@@ -395,7 +396,7 @@ class Addons {
if ($idz !== false) {
unset(App::$plugins[$idz]);
uninstall_plugin($id);
- set_config("system","addon", implode(", ",App::$plugins));
+ Config::Set("system","addon", implode(", ",App::$plugins));
}
}
$info['disabled'] = 1-intval($x);
diff --git a/Zotlabs/Module/Admin/Channels.php b/Zotlabs/Module/Admin/Channels.php
index c6b7ad17a..52b661420 100644
--- a/Zotlabs/Module/Admin/Channels.php
+++ b/Zotlabs/Module/Admin/Channels.php
@@ -14,7 +14,7 @@ class Channels {
*/
function post() {
- $channels = ( x($_POST, 'channel') ? $_POST['channel'] : Array() );
+ $channels = (x($_POST, 'channel') ? $_POST['channel'] : []);
check_form_security_token_redirectOnErr('/admin/channels', 'admin_channels');
@@ -22,11 +22,28 @@ class Channels {
if(x($_POST, 'page_channels_block')) {
foreach($channels as $uid) {
- q("UPDATE channel SET channel_pageflags = ( channel_pageflags $xor %d ) where channel_id = %d",
- intval(PAGE_CENSORED),
- intval( $uid )
+ $channel = channelx_by_n($uid);
+
+ if (!$channel) {
+ notice( t('Channel not found') . EOL);
+ continue;
+ }
+
+ $pflags = $channel['channel_pageflags'] ^ PAGE_CENSORED;
+
+ q("UPDATE channel SET channel_pageflags = %d where channel_id = %d",
+ intval($pflags),
+ intval($uid)
);
+
\Zotlabs\Daemon\Master::Summon(array('Directory', $uid, 'nopush'));
+
+ $censored = (($pflags & PAGE_CENSORED) ? 1 : 0);
+
+ q("UPDATE xchan SET xchan_censored = %d WHERE xchan_hash = '%s'",
+ intval($censored),
+ dbesc($channel['channel_hash'])
+ );
}
notice( sprintf( tt("%s channel censored/uncensored", "%s channels censored/uncensored", count($channels)), count($channels)) );
}
@@ -57,11 +74,9 @@ class Channels {
function get() {
if(argc() > 2) {
$uid = argv(3);
- $channel = q("SELECT * FROM channel WHERE channel_id = %d",
- intval($uid)
- );
+ $channel = channelx_by_n($uid);
- if(! $channel) {
+ if(!$channel) {
notice( t('Channel not found') . EOL);
goaway(z_root() . '/admin/channels' );
}
@@ -72,30 +87,37 @@ class Channels {
// delete channel
channel_remove($uid,true);
- notice( sprintf(t("Channel '%s' deleted"), $channel[0]['channel_name']) . EOL);
+ notice( sprintf(t("Channel '%s' deleted"), $channel['channel_name']) . EOL);
}; break;
case "block":{
check_form_security_token_redirectOnErr('/admin/channels', 'admin_channels', 't');
- $pflags = $channel[0]['channel_pageflags'] ^ PAGE_CENSORED;
+ $pflags = $channel['channel_pageflags'] ^ PAGE_CENSORED;
q("UPDATE channel SET channel_pageflags = %d where channel_id = %d",
intval($pflags),
- intval( $uid )
+ intval($uid)
);
\Zotlabs\Daemon\Master::Summon(array('Directory',$uid,'nopush'));
- notice( sprintf( (($pflags & PAGE_CENSORED) ? t("Channel '%s' censored"): t("Channel '%s' uncensored")) , $channel[0]['channel_name'] . ' (' . $channel[0]['channel_address'] . ')' ) . EOL);
+ $censored = (($pflags & PAGE_CENSORED) ? 1 : 0);
+
+ q("UPDATE xchan SET xchan_censored = %d WHERE xchan_hash = '%s'",
+ intval($censored),
+ dbesc($channel['channel_hash'])
+ );
+
+ notice( sprintf( (($censored) ? t("Channel '%s' censored"): t("Channel '%s' uncensored")) , $channel['channel_name'] . ' (' . $channel['channel_address'] . ')' ) . EOL);
}; break;
case "code":{
check_form_security_token_redirectOnErr('/admin/channels', 'admin_channels', 't');
- $pflags = $channel[0]['channel_pageflags'] ^ PAGE_ALLOWCODE;
+ $pflags = $channel['channel_pageflags'] ^ PAGE_ALLOWCODE;
q("UPDATE channel SET channel_pageflags = %d where channel_id = %d",
intval($pflags),
- intval( $uid )
+ intval($uid)
);
- notice( sprintf( (($pflags & PAGE_ALLOWCODE) ? t("Channel '%s' code allowed"): t("Channel '%s' code disallowed")) , $channel[0]['channel_name'] . ' (' . $channel[0]['channel_address'] . ')' ) . EOL);
+ notice( sprintf( (($pflags & PAGE_ALLOWCODE) ? t("Channel '%s' code allowed"): t("Channel '%s' code disallowed")) , $channel['channel_name'] . ' (' . $channel['channel_address'] . ')' ) . EOL);
}; break;
default:
diff --git a/Zotlabs/Module/Admin/Dbsync.php b/Zotlabs/Module/Admin/Dbsync.php
index b68e7bbc2..9f202993d 100644
--- a/Zotlabs/Module/Admin/Dbsync.php
+++ b/Zotlabs/Module/Admin/Dbsync.php
@@ -2,7 +2,7 @@
namespace Zotlabs\Module\Admin;
-
+use Zotlabs\Lib\Config;
class Dbsync {
@@ -12,10 +12,10 @@ class Dbsync {
if(argc() > 3 && intval(argv(3)) && argv(2) === 'mark') {
// remove the old style config if it exists
- del_config('database', 'update_r' . intval(argv(3)));
- set_config('database', '_' . intval(argv(3)), 'success');
- if(intval(get_config('system','db_version')) < intval(argv(3)))
- set_config('system','db_version',intval(argv(3)));
+ Config::Delete('database', 'update_r' . intval(argv(3)));
+ Config::Set('database', '_' . intval(argv(3)), 'success');
+ if(intval(Config::Get('system','db_version')) < intval(argv(3)))
+ Config::Set('system','db_version',intval(argv(3)));
info( t('Update has been marked successful') . EOL);
goaway(z_root() . '/admin/dbsync');
}
@@ -33,7 +33,7 @@ class Dbsync {
}
elseif($retval === UPDATE_SUCCESS) {
$o .= sprintf( t('Update %s was successfully applied.'), $s);
- set_config('database',$s, 'success');
+ Config::Set('database',$s, 'success');
}
else
$o .= sprintf( t('Verifying update %s did not return a status. Unknown if it succeeded.'), $s);
@@ -60,7 +60,7 @@ class Dbsync {
}
elseif($retval === UPDATE_SUCCESS) {
$o .= sprintf( t('Update %s was successfully applied.'), $s);
- set_config('database',$s, 'success');
+ Config::Set('database',$s, 'success');
}
else
$o .= sprintf( t('Update %s did not return a status. It cannot be determined if it was successful.'), $s);
diff --git a/Zotlabs/Module/Admin/Features.php b/Zotlabs/Module/Admin/Features.php
index 504caae79..e0b3a3fd4 100644
--- a/Zotlabs/Module/Admin/Features.php
+++ b/Zotlabs/Module/Admin/Features.php
@@ -2,53 +2,53 @@
namespace Zotlabs\Module\Admin;
-
+use Zotlabs\Lib\Config;
class Features {
-
+
function post() {
-
+
check_form_security_token_redirectOnErr('/admin/features', 'admin_manage_features');
-
+
logger('postvars: ' . print_r($_POST,true));
-
+
$arr = array();
$features = get_features(false);
-
+
foreach($features as $fname => $fdata) {
foreach(array_slice($fdata,1) as $f) {
$feature = $f[0];
-
+
if(array_key_exists('feature_' . $feature,$_POST))
$val = intval($_POST['feature_' . $feature]);
else
$val = 0;
- set_config('feature',$feature,$val);
-
+ Config::Set('feature',$feature,$val);
+
if(array_key_exists('featurelock_' . $feature,$_POST))
- set_config('feature_lock',$feature,$val);
+ Config::Set('feature_lock',$feature,$val);
else
- del_config('feature_lock',$feature);
+ Config::Delete('feature_lock',$feature);
}
}
-
+
goaway(z_root() . '/admin/features' );
-
+
}
-
+
function get() {
-
+
if((argc() > 1) && (argv(1) === 'features')) {
$arr = array();
$features = get_features(false);
-
+
foreach($features as $fname => $fdata) {
$arr[$fname] = array();
$arr[$fname][0] = $fdata[0];
foreach(array_slice($fdata,1) as $f) {
-
- $set = get_config('feature',$f[0]);
+
+ $set = Config::Get('feature',$f[0]);
if($set === false)
$set = $f[3];
$arr[$fname][1][] = array(
@@ -57,7 +57,7 @@ class Features {
);
}
}
-
+
$tpl = get_markup_template("admin_settings_features.tpl");
$o .= replace_macros($tpl, array(
'$form_security_token' => get_form_security_token("admin_manage_features"),
@@ -65,10 +65,10 @@ class Features {
'$features' => $arr,
'$submit' => t('Submit'),
));
-
+
return $o;
}
}
-
-} \ No newline at end of file
+
+}
diff --git a/Zotlabs/Module/Admin/Logs.php b/Zotlabs/Module/Admin/Logs.php
index c83fc6a9a..73c890e26 100644
--- a/Zotlabs/Module/Admin/Logs.php
+++ b/Zotlabs/Module/Admin/Logs.php
@@ -2,11 +2,12 @@
namespace Zotlabs\Module\Admin;
+use Zotlabs\Lib\Config;
class Logs {
-
+
/**
* @brief POST handler for logs admin page.
*
@@ -15,20 +16,20 @@ class Logs {
function post() {
if (x($_POST, 'page_logs')) {
check_form_security_token_redirectOnErr('/admin/logs', 'admin_logs');
-
+
$logfile = ((x($_POST,'logfile')) ? notags(trim($_POST['logfile'])) : '');
$debugging = ((x($_POST,'debugging')) ? true : false);
$loglevel = ((x($_POST,'loglevel')) ? intval(trim($_POST['loglevel'])) : 0);
-
- set_config('system','logfile', $logfile);
- set_config('system','debugging', $debugging);
- set_config('system','loglevel', $loglevel);
+
+ Config::Set('system','logfile', $logfile);
+ Config::Set('system','debugging', $debugging);
+ Config::Set('system','loglevel', $loglevel);
}
-
+
info( t('Log settings updated.') );
goaway(z_root() . '/admin/logs' );
}
-
+
/**
* @brief Logs admin page.
*
@@ -36,7 +37,7 @@ class Logs {
*/
function get() {
-
+
$log_choices = Array(
LOGGER_NORMAL => 'Normal',
LOGGER_TRACE => 'Trace',
@@ -44,15 +45,15 @@ class Logs {
LOGGER_DATA => 'Data',
LOGGER_ALL => 'All'
);
-
+
$t = get_markup_template('admin_logs.tpl');
-
- $f = get_config('system', 'logfile');
-
+
+ $f = Config::Get('system', 'logfile');
+
$data = '';
-
+
if(!file_exists($f)) {
- $data = t("Error trying to open <strong>$f</strong> log file.\r\n<br/>Check to see if file $f exist and is
+ $data = t("Error trying to open <strong>$f</strong> log file.\r\n<br/>Check to see if file $f exist and is
readable.");
}
else {
@@ -77,7 +78,7 @@ class Logs {
fclose($fp);
}
}
-
+
return replace_macros($t, array(
'$title' => t('Administration'),
'$page' => t('Logs'),
@@ -85,17 +86,17 @@ class Logs {
'$clear' => t('Clear'),
'$data' => $data,
'$baseurl' => z_root(),
- '$logname' => get_config('system','logfile'),
-
+ '$logname' => Config::Get('system','logfile'),
+
// name, label, value, help string, extra data...
- '$debugging' => array('debugging', t("Debugging"),get_config('system','debugging'), ""),
- '$logfile' => array('logfile', t("Log file"), get_config('system','logfile'), t("Must be writable by web server. Relative to your top-level webserver directory.")),
- '$loglevel' => array('loglevel', t("Log level"), get_config('system','loglevel'), "", $log_choices),
-
+ '$debugging' => array('debugging', t("Debugging"),Config::Get('system','debugging'), ""),
+ '$logfile' => array('logfile', t("Log file"), Config::Get('system','logfile'), t("Must be writable by web server. Relative to your top-level webserver directory.")),
+ '$loglevel' => array('loglevel', t("Log level"), Config::Get('system','loglevel'), "", $log_choices),
+
'$form_security_token' => get_form_security_token('admin_logs'),
));
}
-
-} \ No newline at end of file
+
+}
diff --git a/Zotlabs/Module/Admin/Profs.php b/Zotlabs/Module/Admin/Profs.php
index eb2501d43..9965cab19 100644
--- a/Zotlabs/Module/Admin/Profs.php
+++ b/Zotlabs/Module/Admin/Profs.php
@@ -2,11 +2,12 @@
namespace Zotlabs\Module\Admin;
+use Zotlabs\Lib\Config;
class Profs {
function post() {
-
+
if(array_key_exists('basic',$_REQUEST)) {
$arr = explode(',',$_REQUEST['basic']);
array_walk($arr,'array_trim');
@@ -19,9 +20,9 @@ class Profs {
}
}
if(! $narr)
- del_config('system','profile_fields_basic');
+ Config::Delete('system','profile_fields_basic');
else
- set_config('system','profile_fields_basic',$narr);
+ Config::Set('system','profile_fields_basic',$narr);
if(array_key_exists('advanced',$_REQUEST)) {
@@ -36,15 +37,15 @@ class Profs {
}
}
if(! $narr)
- del_config('system','profile_fields_advanced');
+ Config::Delete('system','profile_fields_advanced');
else
- set_config('system','profile_fields_advanced',$narr);
+ Config::Set('system','profile_fields_advanced',$narr);
}
goaway(z_root() . '/admin/profs');
}
-
-
+
+
if(array_key_exists('field_name',$_REQUEST)) {
if($_REQUEST['id']) {
$r = q("update profdef set field_name = '%s', field_type = '%s', field_desc = '%s' field_help = '%s', field_inputs = '%s' where id = %d",
@@ -66,24 +67,24 @@ class Profs {
);
}
}
-
-
+
+
// add to chosen array basic or advanced
-
+
goaway(z_root() . '/admin/profs');
}
-
+
function get() {
-
+
if((argc() > 3) && argv(2) == 'drop' && intval(argv(3))) {
$r = q("delete from profdef where id = %d",
intval(argv(3))
);
// remove from allowed fields
-
- goaway(z_root() . '/admin/profs');
+
+ goaway(z_root() . '/admin/profs');
}
-
+
if((argc() > 2) && argv(2) === 'new') {
return replace_macros(get_markup_template('profdef_edit.tpl'),array(
'$header' => t('New Profile Field'),
@@ -94,7 +95,7 @@ class Profs {
'$submit' => t('Save')
));
}
-
+
if((argc() > 2) && intval(argv(2))) {
$r = q("select * from profdef where id = %d limit 1",
intval(argv(2))
@@ -103,7 +104,7 @@ class Profs {
notice( t('Field definition not found') . EOL);
goaway(z_root() . '/admin/profs');
}
-
+
return replace_macros(get_markup_template('profdef_edit.tpl'),array(
'$id' => intval($r[0]['id']),
'$header' => t('Edit Profile Field'),
@@ -114,7 +115,7 @@ class Profs {
'$submit' => t('Save')
));
}
-
+
$basic = '';
$barr = array();
$fields = get_profile_fields_basic();
@@ -129,7 +130,7 @@ class Profs {
$barr[] = trim($k);
}
}
-
+
$advanced = '';
$fields = get_profile_fields_advanced();
if(! $fields)
@@ -143,7 +144,7 @@ class Profs {
$advanced .= trim($k);
}
}
-
+
$all = '';
$fields = get_profile_fields_advanced(1);
if($fields) {
@@ -153,7 +154,7 @@ class Profs {
$all .= trim($k);
}
}
-
+
$r = q("select * from profdef where true");
if($r) {
foreach($r as $rr) {
@@ -162,8 +163,8 @@ class Profs {
$all .= $rr['field_name'];
}
}
-
-
+
+
$o = replace_macros(get_markup_template('admin_profiles.tpl'),array(
'$title' => t('Profile Fields'),
'$basic' => array('basic',t('Basic Profile Fields'),$basic,''),
@@ -174,17 +175,17 @@ class Profs {
'$cust_fields' => $r,
'$edit' => t('Edit'),
'$drop' => t('Delete'),
- '$new' => t('Create Custom Field'),
+ '$new' => t('Create Custom Field'),
'$submit' => t('Submit')
));
-
+
return $o;
-
-
+
+
}
-} \ No newline at end of file
+}
diff --git a/Zotlabs/Module/Admin/Queueworker.php b/Zotlabs/Module/Admin/Queueworker.php
index a4f38d07c..c98df6ac0 100644
--- a/Zotlabs/Module/Admin/Queueworker.php
+++ b/Zotlabs/Module/Admin/Queueworker.php
@@ -3,6 +3,7 @@
namespace Zotlabs\Module\Admin;
use App;
+use Zotlabs\Lib\Config;
use Zotlabs\Web\Controller;
class Queueworker extends Controller {
@@ -17,18 +18,18 @@ class Queueworker extends Controller {
$maxqueueworkers = intval($_POST['queueworker_maxworkers']);
$maxqueueworkers = ($maxqueueworkers > 3) ? $maxqueueworkers : 4;
- set_config('queueworker', 'max_queueworkers', $maxqueueworkers);
+ Config::Set('queueworker', 'max_queueworkers', $maxqueueworkers);
$maxworkerage = intval($_POST['queueworker_max_age']);
$maxworkerage = ($maxworkerage >= 120) ? $maxworkerage : 300;
- set_config('queueworker', 'queueworker_max_age', $maxworkerage);
+ Config::Set('queueworker', 'queueworker_max_age', $maxworkerage);
$queueworkersleep = intval($_POST['queue_worker_sleep']);
$queueworkersleep = ($queueworkersleep > 100) ? $queueworkersleep : 100;
- set_config('queueworker', 'queue_worker_sleep', $queueworkersleep);
+ Config::Set('queueworker', 'queue_worker_sleep', $queueworkersleep);
$auto_queue_worker_sleep = intval($_POST['auto_queue_worker_sleep']);
- set_config('queueworker', 'auto_queue_worker_sleep', $auto_queue_worker_sleep);
+ Config::Set('queueworker', 'auto_queue_worker_sleep', $auto_queue_worker_sleep);
goaway(z_root() . '/admin/queueworker');
}
@@ -54,7 +55,7 @@ class Queueworker extends Controller {
}
}
- $maxqueueworkers = get_config('queueworker', 'max_queueworkers', 4);
+ $maxqueueworkers = Config::Get('queueworker', 'max_queueworkers', 4);
$maxqueueworkers = ($maxqueueworkers > 3) ? $maxqueueworkers : 4;
$sc = '';
@@ -68,7 +69,7 @@ class Queueworker extends Controller {
]
]);
- $workermaxage = get_config('queueworker', 'queueworker_max_age');
+ $workermaxage = Config::Get('queueworker', 'queueworker_max_age');
$workermaxage = ($workermaxage >= 120) ? $workermaxage : 300;
$sc .= replace_macros(get_markup_template('field_input.tpl'), [
@@ -80,10 +81,10 @@ class Queueworker extends Controller {
]
]);
- $queueworkersleep = get_config('queueworker', 'queue_worker_sleep');
+ $queueworkersleep = Config::Get('queueworker', 'queue_worker_sleep');
$queueworkersleep = ($queueworkersleep > 100) ? $queueworkersleep : 100;
- $auto_queue_worker_sleep = get_config('queueworker', 'auto_queue_worker_sleep', 0);
+ $auto_queue_worker_sleep = Config::Get('queueworker', 'auto_queue_worker_sleep', 0);
$sc .= replace_macros(get_markup_template('field_input.tpl'), [
'$field' => [
diff --git a/Zotlabs/Module/Admin/Security.php b/Zotlabs/Module/Admin/Security.php
index 499572170..559097df2 100644
--- a/Zotlabs/Module/Admin/Security.php
+++ b/Zotlabs/Module/Admin/Security.php
@@ -2,6 +2,7 @@
namespace Zotlabs\Module\Admin;
+use Zotlabs\Lib\Config;
class Security {
@@ -11,53 +12,53 @@ class Security {
$allowed_email = ((x($_POST,'allowed_email')) ? notags(trim($_POST['allowed_email'])) : '');
$not_allowed_email = ((x($_POST,'not_allowed_email')) ? notags(trim($_POST['not_allowed_email'])) : '');
- set_config('system','allowed_email', $allowed_email);
- set_config('system','not_allowed_email', $not_allowed_email);
+ Config::Set('system','allowed_email', $allowed_email);
+ Config::Set('system','not_allowed_email', $not_allowed_email);
$block_public = ((x($_POST,'block_public')) ? True : False);
- set_config('system','block_public',$block_public);
+ Config::Set('system','block_public',$block_public);
$cloud_noroot = ((x($_POST,'cloud_noroot')) ? 1 : 0);
- set_config('system','cloud_disable_siteroot',1 - $cloud_noroot);
+ Config::Set('system','cloud_disable_siteroot',1 - $cloud_noroot);
$cloud_disksize = ((x($_POST,'cloud_disksize')) ? 1 : 0);
- set_config('system','cloud_report_disksize',$cloud_disksize);
+ Config::Set('system','cloud_report_disksize',$cloud_disksize);
$ws = $this->trim_array_elems(explode("\n",$_POST['whitelisted_sites']));
- set_config('system','whitelisted_sites',$ws);
+ Config::Set('system','whitelisted_sites',$ws);
$bs = $this->trim_array_elems(explode("\n",$_POST['blacklisted_sites']));
- set_config('system','blacklisted_sites',$bs);
+ Config::Set('system','blacklisted_sites',$bs);
$wc = $this->trim_array_elems(explode("\n",$_POST['whitelisted_channels']));
- set_config('system','whitelisted_channels',$wc);
+ Config::Set('system','whitelisted_channels',$wc);
$bc = $this->trim_array_elems(explode("\n",$_POST['blacklisted_channels']));
- set_config('system','blacklisted_channels',$bc);
+ Config::Set('system','blacklisted_channels',$bc);
$embed_sslonly = ((x($_POST,'embed_sslonly')) ? True : False);
- set_config('system','embed_sslonly',$embed_sslonly);
+ Config::Set('system','embed_sslonly',$embed_sslonly);
$we = $this->trim_array_elems(explode("\n",$_POST['embed_allow']));
- set_config('system','embed_allow',$we);
+ Config::Set('system','embed_allow',$we);
$be = $this->trim_array_elems(explode("\n",$_POST['embed_deny']));
- set_config('system','embed_deny',$be);
+ Config::Set('system','embed_deny',$be);
$thumbnail_security = ((x($_POST,'thumbnail_security')) ? intval($_POST['thumbnail_security']) : 0);
- set_config('system', 'thumbnail_security' , $thumbnail_security);
+ Config::Set('system', 'thumbnail_security' , $thumbnail_security);
$inline_pdf = ((x($_POST,'inline_pdf')) ? intval($_POST['inline_pdf']) : 0);
- set_config('system', 'inline_pdf' , $inline_pdf);
+ Config::Set('system', 'inline_pdf' , $inline_pdf);
$ts = ((x($_POST,'transport_security')) ? True : False);
- set_config('system','transport_security_header',$ts);
+ Config::Set('system','transport_security_header',$ts);
$cs = ((x($_POST,'content_security')) ? True : False);
- set_config('system','content_security_policy',$cs);
+ Config::Set('system','content_security_policy',$cs);
$trusted_directory_servers = $this->trim_array_elems(explode("\n", $_POST['trusted_directory_servers']));
- set_config('system', 'trusted_directory_servers', $trusted_directory_servers);
+ Config::Set('system', 'trusted_directory_servers', $trusted_directory_servers);
goaway(z_root() . '/admin/security');
}
@@ -66,31 +67,31 @@ class Security {
function get() {
- $whitesites = get_config('system','whitelisted_sites');
+ $whitesites = Config::Get('system','whitelisted_sites');
$whitesites_str = ((is_array($whitesites)) ? implode("\n",$whitesites) : '');
- $blacksites = get_config('system','blacklisted_sites');
+ $blacksites = Config::Get('system','blacklisted_sites');
$blacksites_str = ((is_array($blacksites)) ? implode("\n",$blacksites) : '');
- $whitechannels = get_config('system','whitelisted_channels');
+ $whitechannels = Config::Get('system','whitelisted_channels');
$whitechannels_str = ((is_array($whitechannels)) ? implode("\n",$whitechannels) : '');
- $blackchannels = get_config('system','blacklisted_channels');
+ $blackchannels = Config::Get('system','blacklisted_channels');
$blackchannels_str = ((is_array($blackchannels)) ? implode("\n",$blackchannels) : '');
- $whiteembeds = get_config('system','embed_allow');
+ $whiteembeds = Config::Get('system','embed_allow');
$whiteembeds_str = ((is_array($whiteembeds)) ? implode("\n",$whiteembeds) : '');
- $blackembeds = get_config('system','embed_deny');
+ $blackembeds = Config::Get('system','embed_deny');
$blackembeds_str = ((is_array($blackembeds)) ? implode("\n",$blackembeds) : '');
- $trusted_directory_servers = get_config('system', 'trusted_directory_servers');
+ $trusted_directory_servers = Config::Get('system', 'trusted_directory_servers');
$trusted_directory_servers_str = ((is_array($trusted_directory_servers)) ? implode("\n", $trusted_directory_servers) : '');
- $is_dir = (intval(get_config('system', 'directory_mode', DIRECTORY_MODE_NORMAL)) !== DIRECTORY_MODE_NORMAL);
+ $is_dir = (intval(Config::Get('system', 'directory_mode', DIRECTORY_MODE_NORMAL)) !== DIRECTORY_MODE_NORMAL);
- $embed_coop = intval(get_config('system','embed_coop'));
+ $embed_coop = intval(Config::Get('system','embed_coop'));
if((! $whiteembeds) && (! $blackembeds)) {
$embedhelp1 = t("By default, unfiltered HTML is allowed in embedded media. This is inherently insecure.");
@@ -105,22 +106,22 @@ class Security {
'$title' => t('Administration'),
'$page' => t('Security'),
'$form_security_token' => get_form_security_token('admin_security'),
- '$block_public' => array('block_public', t("Block public"), get_config('system','block_public'), t("Check to block public access to all otherwise public personal pages on this site unless you are currently authenticated.")),
- '$cloud_noroot' => [ 'cloud_noroot', t('Provide a cloud root directory'), 1 - intval(get_config('system','cloud_disable_siteroot')), t('The cloud root directory lists all channel names which provide public files') ],
- '$cloud_disksize' => [ 'cloud_disksize', t('Show total disk space available to cloud uploads'), intval(get_config('system','cloud_report_disksize')), '' ],
- '$transport_security' => array('transport_security', t('Set "Transport Security" HTTP header'),intval(get_config('system','transport_security_header')),''),
- '$content_security' => array('content_security', t('Set "Content Security Policy" HTTP header'),intval(get_config('system','content_security_policy')),''),
- '$allowed_email' => array('allowed_email', t("Allowed email domains"), get_config('system','allowed_email'), t("Comma separated list of domains which are allowed in email addresses for registrations to this site. Wildcards are accepted. Empty to allow any domains")),
- '$not_allowed_email' => array('not_allowed_email', t("Not allowed email domains"), get_config('system','not_allowed_email'), t("Comma separated list of domains which are not allowed in email addresses for registrations to this site. Wildcards are accepted. Empty to allow any domains, unless allowed domains have been defined.")),
+ '$block_public' => array('block_public', t("Block public"), Config::Get('system','block_public'), t("Check to block public access to all otherwise public personal pages on this site unless you are currently authenticated.")),
+ '$cloud_noroot' => [ 'cloud_noroot', t('Provide a cloud root directory'), 1 - intval(Config::Get('system','cloud_disable_siteroot')), t('The cloud root directory lists all channel names which provide public files') ],
+ '$cloud_disksize' => [ 'cloud_disksize', t('Show total disk space available to cloud uploads'), intval(Config::Get('system','cloud_report_disksize')), '' ],
+ '$transport_security' => array('transport_security', t('Set "Transport Security" HTTP header'),intval(Config::Get('system','transport_security_header')),''),
+ '$content_security' => array('content_security', t('Set "Content Security Policy" HTTP header'),intval(Config::Get('system','content_security_policy')),''),
+ '$allowed_email' => array('allowed_email', t("Allowed email domains"), Config::Get('system','allowed_email'), t("Comma separated list of domains which are allowed in email addresses for registrations to this site. Wildcards are accepted. Empty to allow any domains")),
+ '$not_allowed_email' => array('not_allowed_email', t("Not allowed email domains"), Config::Get('system','not_allowed_email'), t("Comma separated list of domains which are not allowed in email addresses for registrations to this site. Wildcards are accepted. Empty to allow any domains, unless allowed domains have been defined.")),
'$whitelisted_sites' => array('whitelisted_sites', t('Allow communications only from these sites'), $whitesites_str, t('One site per line. Leave empty to allow communication from anywhere by default')),
'$blacklisted_sites' => array('blacklisted_sites', t('Block communications from these sites'), $blacksites_str, ''),
'$whitelisted_channels' => array('whitelisted_channels', t('Allow communications only from these channels'), $whitechannels_str, t('One channel (hash) per line. Leave empty to allow from any channel by default')),
'$blacklisted_channels' => array('blacklisted_channels', t('Block communications from these channels'), $blackchannels_str, ''),
- '$embed_sslonly' => array('embed_sslonly',t('Only allow embeds from secure (SSL) websites and links.'), intval(get_config('system','embed_sslonly')),''),
+ '$embed_sslonly' => array('embed_sslonly',t('Only allow embeds from secure (SSL) websites and links.'), intval(Config::Get('system','embed_sslonly')),''),
'$embed_allow' => array('embed_allow', t('Allow unfiltered embedded HTML content only from these domains'), $whiteembeds_str, t('One site per line. By default embedded content is filtered.')),
'$embed_deny' => array('embed_deny', t('Block embedded HTML from these domains'), $blackembeds_str, ''),
- '$thumbnail_security' => [ 'thumbnail_security', t("Allow SVG thumbnails in file browser"), get_config('system','thumbnail_security',0), t("WARNING: SVG images may contain malicious code.") ],
- '$inline_pdf' => [ 'inline_pdf', t("Allow embedded (inline) PDF files"), get_config('system','inline_pdf',0), '' ],
+ '$thumbnail_security' => [ 'thumbnail_security', t("Allow SVG thumbnails in file browser"), Config::Get('system','thumbnail_security',0), t("WARNING: SVG images may contain malicious code.") ],
+ '$inline_pdf' => [ 'inline_pdf', t("Allow embedded (inline) PDF files"), Config::Get('system','inline_pdf',0), '' ],
'$trusted_directory_servers' => (($is_dir) ? ['trusted_directory_servers', t('Additional trusted directory server URLs'), $trusted_directory_servers_str, t('Accept directory flags (spam, nsfw) from those servers. One per line like https://example.tld')] : ''),
diff --git a/Zotlabs/Module/Admin/Site.php b/Zotlabs/Module/Admin/Site.php
index dae5e7c77..abc56d298 100644
--- a/Zotlabs/Module/Admin/Site.php
+++ b/Zotlabs/Module/Admin/Site.php
@@ -2,6 +2,7 @@
namespace Zotlabs\Module\Admin;
+use Zotlabs\Lib\Config;
class Site {
@@ -125,8 +126,8 @@ class Site {
//logger( print_r( $this->msgbg, true) );
//logger( print_r( $this->joo, true) );
if ($this->error === 0) {
- set_config('system', 'register_duty', $this->register_duty);
- set_config('system', 'register_duty_jso', $this->joo);
+ Config::Set('system', 'register_duty', $this->register_duty);
+ Config::Set('system', 'register_duty_jso', $this->joo);
} else {
notice('ZAR0130E,' . t('Errors') . ': ' . $this->error . EOL . $this->msgfg . EOL);
}
@@ -134,87 +135,87 @@ class Site {
}
// <-hilmar]
- set_config('system', 'feed_contacts', $feed_contacts);
- set_config('system', 'delivery_interval', $delivery_interval);
- set_config('system', 'delivery_batch_count', $delivery_batch_count);
- set_config('system', 'poll_interval', $poll_interval);
- set_config('system', 'maxloadavg', $maxloadavg);
- set_config('system', 'frontpage', $frontpage);
- set_config('system', 'sellpage', $site_sellpage);
- set_config('system', 'workflow_channel_next', $first_page);
- set_config('system', 'site_location', $site_location);
- set_config('system', 'mirror_frontpage', $mirror_frontpage);
- set_config('system', 'sitename', $sitename);
- set_config('system', 'login_on_homepage', $login_on_homepage);
- set_config('system', 'enable_context_help', $enable_context_help);
- set_config('system', 'verify_email', $verify_email);
- set_config('system', 'max_daily_registrations', $register_perday);
- set_config('system', 'register_sameip', $register_sameip);
- set_config('system', 'register_delay', $reg_delay);
- set_config('system', 'register_expire', $reg_expire);
- set_config('system', 'default_expire_days', $default_expire_days);
- set_config('system', 'active_expire_days', $active_expire_days);
- set_config('system', 'reply_address', $reply_address);
- set_config('system', 'from_email', $from_email);
- set_config('system', 'from_email_name' , $from_email_name);
- set_config('system', 'imagick_convert_path' , $imagick_path);
- set_config('system', 'default_permissions_role', $permissions_role);
- set_config('system', 'pubstream_incl',$pub_incl);
- set_config('system', 'pubstream_excl',$pub_excl);
+ Config::Set('system', 'feed_contacts', $feed_contacts);
+ Config::Set('system', 'delivery_interval', $delivery_interval);
+ Config::Set('system', 'delivery_batch_count', $delivery_batch_count);
+ Config::Set('system', 'poll_interval', $poll_interval);
+ Config::Set('system', 'maxloadavg', $maxloadavg);
+ Config::Set('system', 'frontpage', $frontpage);
+ Config::Set('system', 'sellpage', $site_sellpage);
+ Config::Set('system', 'workflow_channel_next', $first_page);
+ Config::Set('system', 'site_location', $site_location);
+ Config::Set('system', 'mirror_frontpage', $mirror_frontpage);
+ Config::Set('system', 'sitename', $sitename);
+ Config::Set('system', 'login_on_homepage', $login_on_homepage);
+ Config::Set('system', 'enable_context_help', $enable_context_help);
+ Config::Set('system', 'verify_email', $verify_email);
+ Config::Set('system', 'max_daily_registrations', $register_perday);
+ Config::Set('system', 'register_sameip', $register_sameip);
+ Config::Set('system', 'register_delay', $reg_delay);
+ Config::Set('system', 'register_expire', $reg_expire);
+ Config::Set('system', 'default_expire_days', $default_expire_days);
+ Config::Set('system', 'active_expire_days', $active_expire_days);
+ Config::Set('system', 'reply_address', $reply_address);
+ Config::Set('system', 'from_email', $from_email);
+ Config::Set('system', 'from_email_name' , $from_email_name);
+ Config::Set('system', 'imagick_convert_path' , $imagick_path);
+ Config::Set('system', 'default_permissions_role', $permissions_role);
+ Config::Set('system', 'pubstream_incl',$pub_incl);
+ Config::Set('system', 'pubstream_excl',$pub_excl);
if($directory_server)
- set_config('system','directory_server',$directory_server);
+ Config::Set('system','directory_server',$directory_server);
if ($banner == '') {
- del_config('system', 'banner');
+ Config::Delete('system', 'banner');
} else {
- set_config('system', 'banner', $banner);
+ Config::Set('system', 'banner', $banner);
}
if ($admininfo == ''){
- del_config('system', 'admininfo');
+ Config::Delete('system', 'admininfo');
} else {
require_once('include/text.php');
linkify_tags($admininfo, local_channel());
- set_config('system', 'admininfo', $admininfo);
+ Config::Set('system', 'admininfo', $admininfo);
}
- set_config('system','siteinfo',$siteinfo);
- //set_config('system', 'language', $language);
- set_config('system', 'theme', $theme);
+ Config::Set('system','siteinfo',$siteinfo);
+ //Config::Set('system', 'language', $language);
+ Config::Set('system', 'theme', $theme);
// if ( $theme_mobile === '---' ) {
- // del_config('system', 'mobile_theme');
+ // Config::Delete('system', 'mobile_theme');
// } else {
- // set_config('system', 'mobile_theme', $theme_mobile);
+ // Config::Set('system', 'mobile_theme', $theme_mobile);
// }
- // set_config('system','site_channel', $site_channel);
- set_config('system','maximagesize', $maximagesize);
-
- set_config('system','register_policy', $register_policy);
- set_config('system','register_wo_email', $register_wo_email);
- set_config('system','minimum_age', $minimum_age);
- set_config('system','auto_channel_create', $reg_autochannel);
- set_config('system', 'invitation_only', $invitation_only);
- set_config('system', 'invitation_also', $invitation_also);
- set_config('system','access_policy', $access_policy);
- set_config('system','account_abandon_days', $abandon_days);
- set_config('system','register_text', $register_text);
- set_config('system','allowed_sites', $allowed_sites);
- set_config('system','publish_all', $force_publish);
- set_config('system','disable_discover_tab', $disable_discover_tab);
- set_config('system','site_firehose', $site_firehose);
- set_config('system','open_pubstream', $open_pubstream);
- //set_config('system','force_queue_threshold', $force_queue);
-
- set_config('system','no_community_page', $no_community_page);
- set_config('system','no_utf', $no_utf);
-
- set_config('system','sse_enabled', $sse_enabled);
-
- set_config('system','verifyssl', $verifyssl);
- set_config('system','proxyuser', $proxyuser);
- set_config('system','proxy', $proxy);
- set_config('system','curl_timeout', $timeout);
+ // Config::Set('system','site_channel', $site_channel);
+ Config::Set('system','maximagesize', $maximagesize);
+
+ Config::Set('system','register_policy', $register_policy);
+ Config::Set('system','register_wo_email', $register_wo_email);
+ Config::Set('system','minimum_age', $minimum_age);
+ Config::Set('system','auto_channel_create', $reg_autochannel);
+ Config::Set('system', 'invitation_only', $invitation_only);
+ Config::Set('system', 'invitation_also', $invitation_also);
+ Config::Set('system','access_policy', $access_policy);
+ Config::Set('system','account_abandon_days', $abandon_days);
+ Config::Set('system','register_text', $register_text);
+ Config::Set('system','allowed_sites', $allowed_sites);
+ Config::Set('system','publish_all', $force_publish);
+ Config::Set('system','disable_discover_tab', $disable_discover_tab);
+ Config::Set('system','site_firehose', $site_firehose);
+ Config::Set('system','open_pubstream', $open_pubstream);
+ //Config::Set('system','force_queue_threshold', $force_queue);
+
+ Config::Set('system','no_community_page', $no_community_page);
+ Config::Set('system','no_utf', $no_utf);
+
+ Config::Set('system','sse_enabled', $sse_enabled);
+
+ Config::Set('system','verifyssl', $verifyssl);
+ Config::Set('system','proxyuser', $proxyuser);
+ Config::Set('system','proxy', $proxy);
+ Config::Set('system','curl_timeout', $timeout);
info( t('Site settings updated.') . EOL);
goaway(z_root() . '/admin/site' );
@@ -263,7 +264,7 @@ class Site {
}
$dir_choices = null;
- $dirmode = get_config('system', 'directory_mode', DIRECTORY_MODE_NORMAL);
+ $dirmode = Config::Get('system', 'directory_mode', DIRECTORY_MODE_NORMAL);
$realm = get_directory_realm();
// directory server should not be set or settable unless we are a directory client
@@ -291,14 +292,14 @@ class Site {
/* Banner */
- $banner = get_config('system', 'banner');
+ $banner = Config::Get('system', 'banner');
if($banner === false)
- $banner = get_config('system','sitename');
+ $banner = Config::Get('system','sitename');
$banner = htmlspecialchars($banner);
/* Admin Info */
- $admininfo = get_config('system', 'admininfo');
+ $admininfo = Config::Get('system', 'admininfo');
/* Register policy */
$register_choices = Array(
@@ -306,8 +307,8 @@ class Site {
REGISTER_APPROVE => t("Yes - with approval"),
REGISTER_OPEN => t("Yes")
);
- $this->register_duty = get_config('system', 'register_duty', '-:-');
- $register_perday = get_config('system','max_daily_registrations', 50);
+ $this->register_duty = Config::Get('system', 'register_duty', '-:-');
+ $register_perday = Config::Get('system','max_daily_registrations', 50);
/* Acess policy */
$access_choices = Array(
@@ -317,7 +318,7 @@ class Site {
ACCESS_TIERED => t("My site offers free accounts with optional paid upgrades")
);
- $discover_tab = get_config('system','disable_discover_tab');
+ $discover_tab = Config::Get('system','disable_discover_tab');
// $disable public streams by default
if($discover_tab === false)
@@ -326,7 +327,7 @@ class Site {
$discover_tab = (1 - $discover_tab);
$perm_roles = \Zotlabs\Access\PermissionRoles::channel_roles();
- $default_role = get_config('system', 'default_permissions_role', 'personal');
+ $default_role = Config::Get('system', 'default_permissions_role', 'personal');
if (!in_array($default_role, array_keys($perm_roles))) {
$default_role = 'personal';
@@ -334,8 +335,8 @@ class Site {
$role = array('permissions_role' , t('Default permission role for new accounts'), $default_role, t('This role will be used for the first channel created after registration.'),$perm_roles);
- $homelogin = get_config('system','login_on_homepage');
- $enable_context_help = get_config('system','enable_context_help');
+ $homelogin = Config::Get('system','login_on_homepage');
+ $enable_context_help = Config::Get('system','enable_context_help');
// for reuse reg_delay and reg_expire
$reg_rabots = array(
@@ -347,7 +348,7 @@ class Site {
'y' => t('Year(s)')
);
$regdelay_n = $regdelay_u = false;
- $regdelay = get_config('system','register_delay');
+ $regdelay = Config::Get('system','register_delay');
if ($regdelay)
list($regdelay_n, $regdelay_u) = array(substr($regdelay,0,-1),substr($regdelay,-1));
$reg_delay = replace_macros(get_markup_template('field_duration.qmc.tpl'),
@@ -369,7 +370,7 @@ class Site {
)
);
$regexpire_n = $regexpire_u = false;
- $regexpire = get_config('system','register_expire');
+ $regexpire = Config::Get('system','register_expire');
if ($regexpire)
list($regexpire_n, $regexpire_u) = array(substr($regexpire,0,-1),substr($regexpire,-1));
$reg_expire = replace_macros(get_markup_template('field_duration.qmc.tpl'),
@@ -406,38 +407,38 @@ class Site {
'$baseurl' => z_root(),
// name, label, value, help string, extra data...
- '$sitename' => array('sitename', t("Site name"), htmlspecialchars(get_config('system','sitename'), ENT_QUOTES, 'UTF-8'),''),
+ '$sitename' => array('sitename', t("Site name"), htmlspecialchars(Config::Get('system','sitename'), ENT_QUOTES, 'UTF-8'),''),
'$banner' => array('banner', t("Banner/Logo"), $banner, t('Unfiltered HTML/CSS/JS is allowed')),
'$admininfo' => array('admininfo', t("Administrator Information"), $admininfo, t("Contact information for site administrators. Displayed on siteinfo page. BBCode can be used here")),
- '$siteinfo' => array('siteinfo', t('Site Information'), get_config('system','siteinfo'), t("Publicly visible description of this site. Displayed on siteinfo page. BBCode can be used here")),
- '$theme' => array('theme', t("System theme"), get_config('system','theme'), t("Default system theme - may be over-ridden by user profiles - <a href='#' id='cnftheme'>change theme settings</a>"), $theme_choices),
- // '$theme_mobile' => array('theme_mobile', t("Mobile system theme"), get_config('system','mobile_theme'), t("Theme for mobile devices"), $theme_choices_mobile),
- // '$site_channel' => array('site_channel', t("Channel to use for this website's static pages"), get_config('system','site_channel'), t("Site Channel")),
- '$feed_contacts' => array('feed_contacts', t('Allow Feeds as Connections'),get_config('system','feed_contacts'),t('(Heavy system resource usage)')),
- '$maximagesize' => array('maximagesize', t("Maximum image size"), intval(get_config('system','maximagesize')), t("Maximum size in bytes of uploaded images. Default is 0, which means no limits.")),
- '$minimum_age' => array('minimum_age', t("Minimum age"), (x(get_config('system','minimum_age'))?get_config('system','minimum_age'):13), t("Minimum age (in years) for who may register on this site.")),
- '$access_policy' => array('access_policy', t("Which best describes the types of account offered by this hub?"), get_config('system','access_policy'), t("This is displayed on the public server site list."), $access_choices),
+ '$siteinfo' => array('siteinfo', t('Site Information'), Config::Get('system','siteinfo'), t("Publicly visible description of this site. Displayed on siteinfo page. BBCode can be used here")),
+ '$theme' => array('theme', t("System theme"), Config::Get('system','theme'), t("Default system theme - may be over-ridden by user profiles - <a href='#' id='cnftheme'>change theme settings</a>"), $theme_choices),
+ // '$theme_mobile' => array('theme_mobile', t("Mobile system theme"), Config::Get('system','mobile_theme'), t("Theme for mobile devices"), $theme_choices_mobile),
+ // '$site_channel' => array('site_channel', t("Channel to use for this website's static pages"), Config::Get('system','site_channel'), t("Site Channel")),
+ '$feed_contacts' => array('feed_contacts', t('Allow Feeds as Connections'),Config::Get('system','feed_contacts'),t('(Heavy system resource usage)')),
+ '$maximagesize' => array('maximagesize', t("Maximum image size"), intval(Config::Get('system','maximagesize')), t("Maximum size in bytes of uploaded images. Default is 0, which means no limits.")),
+ '$minimum_age' => array('minimum_age', t("Minimum age"), (x(Config::Get('system','minimum_age'))?Config::Get('system','minimum_age'):13), t("Minimum age (in years) for who may register on this site.")),
+ '$access_policy' => array('access_policy', t("Which best describes the types of account offered by this hub?"), Config::Get('system','access_policy'), t("This is displayed on the public server site list."), $access_choices),
// Register
// [hilmar->
'$register_text' => [
'register_text',
t("Register text"),
- htmlspecialchars(get_config('system','register_text'), ENT_QUOTES, 'UTF-8'),
+ htmlspecialchars(Config::Get('system','register_text'), ENT_QUOTES, 'UTF-8'),
t("This text will be displayed prominently at the registration page")
],
'$register_policy' => [
'register_policy',
t("Does this site allow new member registration?"),
- get_config('system','register_policy'),
+ Config::Get('system','register_policy'),
"",
$register_choices,
],
'$register_duty' => [
'register_duty',
t('Configure the registration open days/hours'),
- get_config('system', 'register_duty', '-:-'),
+ Config::Get('system', 'register_duty', '-:-'),
t('Empty or \'-:-\' value will keep registration open 24/7 (default)') . EOL .
t('Weekdays and hours must be separated by colon \':\', From-To ranges with a dash `-` example: 1:800-1200') . EOL .
t('Weekday:Hour pairs must be separated by space \' \' example: 1:900-1700 2:900-1700') . EOL .
@@ -448,13 +449,13 @@ class Site {
'$register_perday' => [
'register_perday',
t('Max account registrations per day'),
- get_config('system', 'max_daily_registrations', 50),
+ Config::Get('system', 'max_daily_registrations', 50),
t('Unlimited if zero or no value - default 50')
],
'$register_sameip' => [
'register_sameip',
t('Max account registrations from same IP'),
- get_config('system', 'register_sameip', 3),
+ Config::Get('system', 'register_sameip', 3),
t('Unlimited if zero or no value - default 3')
],
'$reg_delay' => $reg_delay,
@@ -462,70 +463,70 @@ class Site {
'$reg_autochannel' => [
'auto_channel_create',
t("Auto channel create"),
- get_config('system','auto_channel_create', 1),
+ Config::Get('system','auto_channel_create', 1),
t("If disabled the channel will be created in a separate step during the registration process")
],
'$invitation_only' => [
'invitation_only',
t("Require invite code"),
- get_config('system', 'invitation_only', 0)
+ Config::Get('system', 'invitation_only', 0)
],
'$invitation_also' => [
'invitation_also',
t("Allow invite code"),
- get_config('system', 'invitation_also', 0)
+ Config::Get('system', 'invitation_also', 0)
],
'$verify_email' => [
'verify_email',
t("Require email address"),
- get_config('system','verify_email'),
+ Config::Get('system','verify_email'),
t("The provided email address will be verified (recommended)")
],
'$abandon_days' => [
'abandon_days',
t('Abandon account after x days'),
- get_config('system','account_abandon_days'),
+ Config::Get('system','account_abandon_days'),
t('Will not waste system resources polling external sites for abandonded accounts. Enter 0 for no time limit.')
],
// <-hilmar]
'$role' => $role,
- '$frontpage' => array('frontpage', t("Site homepage to show visitors (default: login box)"), get_config('system','frontpage'), t("example: 'pubstream' to show public stream, 'page/sys/home' to show a system webpage called 'home' or 'include:home.html' to include a file.")),
- '$mirror_frontpage' => array('mirror_frontpage', t("Preserve site homepage URL"), get_config('system','mirror_frontpage'), t('Present the site homepage in a frame at the original location instead of redirecting')),
- '$allowed_sites' => array('allowed_sites', t("Allowed friend domains"), get_config('system','allowed_sites'), t("Comma separated list of domains which are allowed to establish friendships with this site. Wildcards are accepted. Empty to allow any domains")),
- '$force_publish' => array('publish_all', t("Force publish"), get_config('system','publish_all'), t("Check to force all profiles on this site to be listed in the site directory")),
+ '$frontpage' => array('frontpage', t("Site homepage to show visitors (default: login box)"), Config::Get('system','frontpage'), t("example: 'pubstream' to show public stream, 'page/sys/home' to show a system webpage called 'home' or 'include:home.html' to include a file.")),
+ '$mirror_frontpage' => array('mirror_frontpage', t("Preserve site homepage URL"), Config::Get('system','mirror_frontpage'), t('Present the site homepage in a frame at the original location instead of redirecting')),
+ '$allowed_sites' => array('allowed_sites', t("Allowed friend domains"), Config::Get('system','allowed_sites'), t("Comma separated list of domains which are allowed to establish friendships with this site. Wildcards are accepted. Empty to allow any domains")),
+ '$force_publish' => array('publish_all', t("Force publish"), Config::Get('system','publish_all'), t("Check to force all profiles on this site to be listed in the site directory")),
'$disable_discover_tab' => array('disable_discover_tab', t('Enable public stream'), $discover_tab, t('Enable the public stream. Warning: this content is unmoderated')),
- '$site_firehose' => array('site_firehose', t('Site only public stream'), get_config('system','site_firehose'), t('Restrict the public stream to content originating at this site')),
- '$open_pubstream' => array('open_pubstream', t('Allow anybody on the internet to access the public streams'), get_config('system','open_pubstream',1), t('Disable to require authentication before viewing')),
- '$incl' => array('pub_incl',t('Only import Public stream posts with this text'), get_config('system','pubstream_incl'),t('words one per line or #tags or /patterns/ or lang=xx, leave blank to import all posts')),
- '$excl' => array('pub_excl',t('Do not import Public stream posts with this text'), get_config('system','pubstream_excl'),t('words one per line or #tags or /patterns/ or lang=xx, leave blank to import all posts')),
+ '$site_firehose' => array('site_firehose', t('Site only public stream'), Config::Get('system','site_firehose'), t('Restrict the public stream to content originating at this site')),
+ '$open_pubstream' => array('open_pubstream', t('Allow anybody on the internet to access the public streams'), Config::Get('system','open_pubstream',1), t('Disable to require authentication before viewing')),
+ '$incl' => array('pub_incl',t('Only import Public stream posts with this text'), Config::Get('system','pubstream_incl'),t('words one per line or #tags or /patterns/ or lang=xx, leave blank to import all posts')),
+ '$excl' => array('pub_excl',t('Do not import Public stream posts with this text'), Config::Get('system','pubstream_excl'),t('words one per line or #tags or /patterns/ or lang=xx, leave blank to import all posts')),
'$login_on_homepage' => array('login_on_homepage', t("Login on Homepage"),((intval($homelogin) || $homelogin === false) ? 1 : '') , t("Present a login box to visitors on the home page if no other content has been configured.")),
'$enable_context_help' => array('enable_context_help', t("Enable context help"),((intval($enable_context_help) === 1 || $enable_context_help === false) ? 1 : 0) , t("Display contextual help for the current page when the help button is pressed.")),
- '$reply_address' => [ 'reply_address', t('Reply-to email address for system generated email.'), get_config('system','reply_address','noreply@' . \App::get_hostname()),'' ],
- '$from_email' => [ 'from_email', t('Sender (From) email address for system generated email.'), get_config('system','from_email','Administrator@' . \App::get_hostname()),'' ],
- '$from_email_name' => [ 'from_email_name', t('Name of email sender for system generated email.'), get_config('system','from_email_name',\Zotlabs\Lib\System::get_site_name()),'' ],
-
- '$directory_server' => (($dir_choices) ? array('directory_server', t("Directory Server URL"), get_config('system','directory_server'), t("Default directory server"), $dir_choices) : null),
-
- '$sse_enabled' => array('sse_enabled', t('Enable SSE Notifications'), get_config('system', 'sse_enabled', 0), t('If disabled, traditional polling will be used. Warning: this setting might not be suited for shared hosting')),
-
- '$proxyuser' => array('proxyuser', t("Proxy user"), get_config('system','proxyuser'), ""),
- '$proxy' => array('proxy', t("Proxy URL"), get_config('system','proxy'), ""),
- '$timeout' => array('timeout', t("Network timeout"), (x(get_config('system','curl_timeout'))?get_config('system','curl_timeout'):60), t("Value is in seconds. Set to 0 for unlimited (not recommended).")),
- '$delivery_interval' => array('delivery_interval', t("Delivery interval"), (x(get_config('system','delivery_interval'))?get_config('system','delivery_interval'):2), t("Delay background delivery processes by this many seconds to reduce system load. Recommend: 4-5 for shared hosts, 2-3 for virtual private servers. 0-1 for large dedicated servers.")),
- '$delivery_batch_count' => array('delivery_batch_count', t('Deliveries per process'),(x(get_config('system','delivery_batch_count'))?get_config('system','delivery_batch_count'):1), t("Number of deliveries to attempt in a single operating system process. Adjust if necessary to tune system performance. Recommend: 1-5.")),
- //'$force_queue' => array('force_queue', t("Queue Threshold"), get_config('system','force_queue_threshold',3000), t("Always defer immediate delivery if queue contains more than this number of entries.")),
- '$poll_interval' => array('poll_interval', t("Poll interval"), (x(get_config('system','poll_interval'))?get_config('system','poll_interval'):2), t("Delay background polling processes by this many seconds to reduce system load. If 0, use delivery interval.")),
- '$imagick_path' => array('imagick_path', t("Path to ImageMagick convert program"), get_config('system','imagick_convert_path'), t("If set, use this program to generate photo thumbnails for huge images ( > 4000 pixels in either dimension), otherwise memory exhaustion may occur. Example: /usr/bin/convert")),
- '$maxloadavg' => array('maxloadavg', t("Maximum Load Average"), ((intval(get_config('system','maxloadavg')) > 0)?get_config('system','maxloadavg'):50), t("Maximum system load before delivery and poll processes are deferred - default 50.")),
- '$default_expire_days' => array('default_expire_days', t('Expiration period in days for imported (grid/network) content'), intval(get_config('system','default_expire_days', 30)), t('0 for no expiration of imported content')),
- '$active_expire_days' => array('active_expire_days', t('Do not expire any posts which have comments less than this many days ago'), intval(get_config('system','active_expire_days',7)), ''),
- '$sellpage' => array('site_sellpage', t('Public servers: Optional landing (marketing) webpage for new registrants'), get_config('system','sellpage',''), sprintf( t('Create this page first. Default is %s/register'),z_root())),
- '$first_page' => array('first_page', t('Page to display after creating a new channel'), get_config('system','workflow_channel_next','profiles'), t('Default: profiles')),
- '$location' => array('site_location', t('Optional: site location'), get_config('system','site_location',''), t('Region or country')),
+ '$reply_address' => [ 'reply_address', t('Reply-to email address for system generated email.'), Config::Get('system','reply_address','noreply@' . \App::get_hostname()),'' ],
+ '$from_email' => [ 'from_email', t('Sender (From) email address for system generated email.'), Config::Get('system','from_email','Administrator@' . \App::get_hostname()),'' ],
+ '$from_email_name' => [ 'from_email_name', t('Name of email sender for system generated email.'), Config::Get('system','from_email_name',\Zotlabs\Lib\System::get_site_name()),'' ],
+
+ '$directory_server' => (($dir_choices) ? array('directory_server', t("Directory Server URL"), Config::Get('system','directory_server'), t("Default directory server"), $dir_choices) : null),
+
+ '$sse_enabled' => array('sse_enabled', t('Enable SSE Notifications'), Config::Get('system', 'sse_enabled', 0), t('If disabled, traditional polling will be used. Warning: this setting might not be suited for shared hosting')),
+
+ '$proxyuser' => array('proxyuser', t("Proxy user"), Config::Get('system','proxyuser'), ""),
+ '$proxy' => array('proxy', t("Proxy URL"), Config::Get('system','proxy'), ""),
+ '$timeout' => array('timeout', t("Network timeout"), (x(Config::Get('system','curl_timeout'))?Config::Get('system','curl_timeout'):60), t("Value is in seconds. Set to 0 for unlimited (not recommended).")),
+ '$delivery_interval' => array('delivery_interval', t("Delivery interval"), (x(Config::Get('system','delivery_interval'))?Config::Get('system','delivery_interval'):2), t("Delay background delivery processes by this many seconds to reduce system load. Recommend: 4-5 for shared hosts, 2-3 for virtual private servers. 0-1 for large dedicated servers.")),
+ '$delivery_batch_count' => array('delivery_batch_count', t('Deliveries per process'),(x(Config::Get('system','delivery_batch_count'))?Config::Get('system','delivery_batch_count'):1), t("Number of deliveries to attempt in a single operating system process. Adjust if necessary to tune system performance. Recommend: 1-5.")),
+ //'$force_queue' => array('force_queue', t("Queue Threshold"), Config::Get('system','force_queue_threshold',3000), t("Always defer immediate delivery if queue contains more than this number of entries.")),
+ '$poll_interval' => array('poll_interval', t("Poll interval"), (x(Config::Get('system','poll_interval'))?Config::Get('system','poll_interval'):2), t("Delay background polling processes by this many seconds to reduce system load. If 0, use delivery interval.")),
+ '$imagick_path' => array('imagick_path', t("Path to ImageMagick convert program"), Config::Get('system','imagick_convert_path'), t("If set, use this program to generate photo thumbnails for huge images ( > 4000 pixels in either dimension), otherwise memory exhaustion may occur. Example: /usr/bin/convert")),
+ '$maxloadavg' => array('maxloadavg', t("Maximum Load Average"), ((intval(Config::Get('system','maxloadavg')) > 0)?Config::Get('system','maxloadavg'):50), t("Maximum system load before delivery and poll processes are deferred - default 50.")),
+ '$default_expire_days' => array('default_expire_days', t('Expiration period in days for imported (grid/network) content'), intval(Config::Get('system','default_expire_days', 30)), t('0 for no expiration of imported content')),
+ '$active_expire_days' => array('active_expire_days', t('Do not expire any posts which have comments less than this many days ago'), intval(Config::Get('system','active_expire_days',7)), ''),
+ '$sellpage' => array('site_sellpage', t('Public servers: Optional landing (marketing) webpage for new registrants'), Config::Get('system','sellpage',''), sprintf( t('Create this page first. Default is %s/register'),z_root())),
+ '$first_page' => array('first_page', t('Page to display after creating a new channel'), Config::Get('system','workflow_channel_next','profiles'), t('Default: profiles')),
+ '$location' => array('site_location', t('Optional: site location'), Config::Get('system','site_location',''), t('Region or country')),
'$form_security_token' => get_form_security_token("admin_site"),
));
}
diff --git a/Zotlabs/Module/Admin/Themes.php b/Zotlabs/Module/Admin/Themes.php
index 7f615afa8..6793f56b1 100644
--- a/Zotlabs/Module/Admin/Themes.php
+++ b/Zotlabs/Module/Admin/Themes.php
@@ -3,6 +3,7 @@
namespace Zotlabs\Module\Admin;
use \Michelf\MarkdownExtra;
+use Zotlabs\Lib\Config;
/**
* @brief Admin area theme settings.
@@ -37,7 +38,7 @@ class Themes {
* @return string with parsed HTML
*/
function get(){
- $allowed_themes_str = get_config('system', 'allowed_themes');
+ $allowed_themes_str = Config::Get('system', 'allowed_themes');
$allowed_themes_raw = explode(',', $allowed_themes_str);
$allowed_themes = array();
if(count($allowed_themes_raw))
@@ -100,7 +101,7 @@ class Themes {
info(sprintf('Theme %s disabled.', $theme));
}
- set_config('system', 'allowed_themes', $s);
+ Config::Set('system', 'allowed_themes', $s);
goaway(z_root() . '/admin/themes' );
}
diff --git a/Zotlabs/Module/Api.php b/Zotlabs/Module/Api.php
index 5b835ac51..8574ae1cd 100644
--- a/Zotlabs/Module/Api.php
+++ b/Zotlabs/Module/Api.php
@@ -1,6 +1,8 @@
<?php
namespace Zotlabs\Module;
+use Zotlabs\Lib\Config;
+
require_once('include/api.php');
class Api extends \Zotlabs\Web\Controller {
@@ -57,7 +59,7 @@ class Api extends \Zotlabs\Web\Controller {
$consumer = new \OAuth1Consumer($app['client_id'], $app['pw'], $app['redirect_uri']);
$verifier = md5($app['secret'] . local_channel());
- set_config('oauth', $verifier, local_channel());
+ Config::Set('oauth', $verifier, local_channel());
if($consumer->callback_url != null) {
diff --git a/Zotlabs/Module/Apps.php b/Zotlabs/Module/Apps.php
index a955d572a..a8817111e 100644
--- a/Zotlabs/Module/Apps.php
+++ b/Zotlabs/Module/Apps.php
@@ -1,7 +1,7 @@
<?php
namespace Zotlabs\Module;
-
+use \Zotlabs\Lib\Config;
use \Zotlabs\Lib as Zlib;
class Apps extends \Zotlabs\Web\Controller {
@@ -46,7 +46,7 @@ class Apps extends \Zotlabs\Web\Controller {
}
return replace_macros(get_markup_template('myapps.tpl'), array(
- '$sitename' => get_config('system','sitename'),
+ '$sitename' => Config::Get('system','sitename'),
'$cat' => $cat,
'$title' => (($available) ? t('Available Apps') : t('Installed Apps')),
'$apps' => $apps,
diff --git a/Zotlabs/Module/Channel.php b/Zotlabs/Module/Channel.php
index 4e6811a10..f3855b7e8 100644
--- a/Zotlabs/Module/Channel.php
+++ b/Zotlabs/Module/Channel.php
@@ -6,6 +6,7 @@ namespace Zotlabs\Module;
use App;
use Zotlabs\Lib\Activity;
use Zotlabs\Lib\ActivityStreams;
+use Zotlabs\Lib\Config;
use Zotlabs\Lib\Crypto;
use Zotlabs\Lib\Libzot;
use Zotlabs\Lib\PermissionDescription;
@@ -176,7 +177,7 @@ class Channel extends Controller {
function get($update = 0, $load = false) {
- $noscript_content = get_config('system', 'noscript_content', '1');
+ $noscript_content = Config::Get('system', 'noscript_content', '1');
$category = $datequery = $datequery2 = '';
diff --git a/Zotlabs/Module/Cover_photo.php b/Zotlabs/Module/Cover_photo.php
index 1c1240e29..aa2464ac2 100644
--- a/Zotlabs/Module/Cover_photo.php
+++ b/Zotlabs/Module/Cover_photo.php
@@ -1,6 +1,7 @@
<?php
namespace Zotlabs\Module;
+use Zotlabs\Lib\Config;
use Zotlabs\Lib\Libsync;
/*
@@ -112,10 +113,10 @@ class Cover_photo extends \Zotlabs\Web\Controller {
if($r) {
- $max_thumb = intval(get_config('system','max_thumbnail',1600));
+ $max_thumb = intval(Config::Get('system','max_thumbnail',1600));
$iscaled = false;
if(intval($r[0]['height']) > $max_thumb || intval($r[0]['width']) > $max_thumb) {
- $imagick_path = get_config('system','imagick_convert_path');
+ $imagick_path = Config::Get('system','imagick_convert_path');
if($imagick_path && @file_exists($imagick_path) && intval($r[0]['os_storage'])) {
$fname = dbunescbin($r[0]['content']);
@@ -428,7 +429,7 @@ class Cover_photo extends \Zotlabs\Web\Controller {
function cover_photo_crop_ui_head(&$a, $ph, $hash, $smallest){
- $max_length = get_config('system','max_image_length');
+ $max_length = Config::Get('system','max_image_length');
if(! $max_length)
$max_length = MAX_IMAGE_LENGTH;
if($max_length > 0)
diff --git a/Zotlabs/Module/Dircensor.php b/Zotlabs/Module/Dircensor.php
index 4ce3a81c4..7caefa37c 100644
--- a/Zotlabs/Module/Dircensor.php
+++ b/Zotlabs/Module/Dircensor.php
@@ -3,9 +3,9 @@
namespace Zotlabs\Module;
use App;
-use Zotlabs\Web\Controller;
+use Zotlabs\Lib\Config;
use Zotlabs\Lib\Libzotdir;
-
+use Zotlabs\Web\Controller;
class Dircensor extends Controller {
@@ -14,7 +14,7 @@ class Dircensor extends Controller {
return;
}
- $dirmode = intval(get_config('system','directory_mode'));
+ $dirmode = intval(Config::Get('system','directory_mode'));
if(!in_array($dirmode, [DIRECTORY_MODE_PRIMARY, DIRECTORY_MODE_SECONDARY, DIRECTORY_MODE_STANDALONE])) {
return;
diff --git a/Zotlabs/Module/Directory.php b/Zotlabs/Module/Directory.php
index 53e2edd55..05aa735c8 100644
--- a/Zotlabs/Module/Directory.php
+++ b/Zotlabs/Module/Directory.php
@@ -3,9 +3,9 @@
namespace Zotlabs\Module;
use App;
-use Zotlabs\Web\Controller;
+use Zotlabs\Lib\Config;
use Zotlabs\Lib\Libzotdir;
-
+use Zotlabs\Web\Controller;
require_once('include/socgraph.php');
require_once('include/bbcode.php');
@@ -73,7 +73,7 @@ class Directory extends Controller {
return;
}
- if(get_config('system','block_public_directory',false) && (! get_observer_hash())) {
+ if(Config::Get('system','block_public_directory',false) && (! get_observer_hash())) {
notice( t('Public access denied.') . EOL);
return;
}
@@ -145,7 +145,7 @@ class Directory extends Controller {
$tpl = get_markup_template('directory_header.tpl');
- $dirmode = intval(get_config('system','directory_mode'));
+ $dirmode = intval(Config::Get('system','directory_mode'));
$directory_admin = false;
@@ -165,7 +165,7 @@ class Directory extends Controller {
$url = $directory['url'] . '/dirsearch';
}
- $token = get_config('system','realm_token');
+ $token = Config::Get('system','realm_token');
logger('mod_directory: URL = ' . $url, LOGGER_DEBUG);
@@ -184,11 +184,11 @@ class Directory extends Controller {
if($url) {
- $numtags = get_config('system','directorytags');
+ $numtags = Config::Get('system','directorytags');
$kw = ((intval($numtags) > 0) ? intval($numtags) : 50);
- if(get_config('system','disable_directory_keywords'))
+ if(Config::Get('system','disable_directory_keywords'))
$kw = 0;
if (intval($safe_mode) === 0 && $directory_admin)
@@ -213,7 +213,7 @@ class Directory extends Controller {
if(! is_null($pubforums))
$query .= '&pubforums=' . intval($pubforums);
- $directory_sort_order = get_config('system','directory_sort_order');
+ $directory_sort_order = Config::Get('system','directory_sort_order');
if(! $directory_sort_order)
$directory_sort_order = 'date';
diff --git a/Zotlabs/Module/Dirsearch.php b/Zotlabs/Module/Dirsearch.php
index aa42833c3..d27b195e4 100644
--- a/Zotlabs/Module/Dirsearch.php
+++ b/Zotlabs/Module/Dirsearch.php
@@ -2,6 +2,7 @@
namespace Zotlabs\Module;
use App;
+use Zotlabs\Lib\Config;
use Zotlabs\Web\Controller;
class Dirsearch extends Controller {
@@ -17,7 +18,7 @@ class Dirsearch extends Controller {
// logger('request: ' . print_r($_REQUEST,true));
- $dirmode = intval(get_config('system','directory_mode'));
+ $dirmode = intval(Config::Get('system','directory_mode'));
if($dirmode == DIRECTORY_MODE_NORMAL) {
$ret['message'] = t('This site is not a directory server');
@@ -26,7 +27,7 @@ class Dirsearch extends Controller {
$access_token = $_REQUEST['t'] ?? '';
- $token = get_config('system','realm_token');
+ $token = Config::Get('system','realm_token');
if($token && $access_token != $token) {
$ret['message'] = t('This directory server requires an access token');
json_return_and_die($ret);
@@ -79,7 +80,7 @@ class Dirsearch extends Controller {
$forums = ((array_key_exists('pubforums',$_REQUEST)) ? intval($_REQUEST['pubforums']) : 0);
- if(get_config('system','disable_directory_keywords'))
+ if(Config::Get('system','disable_directory_keywords'))
$kw = 0;
diff --git a/Zotlabs/Module/Display.php b/Zotlabs/Module/Display.php
index f08aedc95..451ddeb1f 100644
--- a/Zotlabs/Module/Display.php
+++ b/Zotlabs/Module/Display.php
@@ -2,6 +2,7 @@
namespace Zotlabs\Module;
use App;
+use Zotlabs\Lib\Config;
use Zotlabs\Web\Controller;
class Display extends Controller {
@@ -12,7 +13,7 @@ class Display extends Controller {
function get($update = 0, $load = false) {
- $noscript_content = (get_config('system', 'noscript_content', '1') && (! $update));
+ $noscript_content = (Config::Get('system', 'noscript_content', '1') && (! $update));
$module_format = 'html';
diff --git a/Zotlabs/Module/Editpost.php b/Zotlabs/Module/Editpost.php
index 5e405bdbc..6f524cdb8 100644
--- a/Zotlabs/Module/Editpost.php
+++ b/Zotlabs/Module/Editpost.php
@@ -84,7 +84,7 @@ class Editpost extends \Zotlabs\Web\Controller {
'item' => $itm[0],
'editor_autocomplete'=> true,
'bbco_autocomplete'=> 'bbcode',
- 'return_path' => $_SESSION['return_url'],
+ 'return_path' => 'hq',
'button' => t('Submit'),
'hide_voting' => true,
'hide_future' => true,
diff --git a/Zotlabs/Module/Email_validation.php b/Zotlabs/Module/Email_validation.php
index c1ba9a01a..c5799560f 100644
--- a/Zotlabs/Module/Email_validation.php
+++ b/Zotlabs/Module/Email_validation.php
@@ -2,6 +2,7 @@
namespace Zotlabs\Module;
+use Zotlabs\Lib\Config;
class Email_validation extends \Zotlabs\Web\Controller {
@@ -12,8 +13,8 @@ class Email_validation extends \Zotlabs\Web\Controller {
// This will redirect internally on success unless the channel is auto_created
if(account_approve(trim(basename($_POST['token'])))) {
$success = true;
- if(get_config('system','auto_channel_create')) {
- $next_page = get_config('system', 'workflow_channel_next', 'profiles');
+ if(Config::Get('system','auto_channel_create')) {
+ $next_page = Config::Get('system', 'workflow_channel_next', 'profiles');
}
if($next_page) {
goaway(z_root() . '/' . $next_page);
@@ -40,9 +41,9 @@ class Email_validation extends \Zotlabs\Web\Controller {
'$submit' => t('Submit'),
'$token' => [ 'token', t('Validation token'),'','' ],
]);
-
+
return $o;
}
-} \ No newline at end of file
+}
diff --git a/Zotlabs/Module/Fhublocs.php b/Zotlabs/Module/Fhublocs.php
index a4d335a94..6cfee94f0 100644
--- a/Zotlabs/Module/Fhublocs.php
+++ b/Zotlabs/Module/Fhublocs.php
@@ -1,6 +1,7 @@
<?php
namespace Zotlabs\Module;
+use Zotlabs\Lib\Config;
use Zotlabs\Lib\Libzot;
require_once('include/crypto.php');
@@ -18,7 +19,7 @@ class Fhublocs extends \Zotlabs\Web\Controller {
$o = '';
$r = q("select * from channel where channel_removed = 0");
- $sitekey = get_config('system','pubkey');
+ $sitekey = Config::Get('system','pubkey');
if($r) {
foreach($r as $rr) {
diff --git a/Zotlabs/Module/Go.php b/Zotlabs/Module/Go.php
index d33136d9e..ec528fb1a 100644
--- a/Zotlabs/Module/Go.php
+++ b/Zotlabs/Module/Go.php
@@ -2,6 +2,7 @@
namespace Zotlabs\Module;
+use Zorlabs\Lib\Config;
class Go extends \Zotlabs\Web\Controller {
@@ -44,9 +45,9 @@ class Go extends \Zotlabs\Web\Controller {
'network' => t('View your personal stream (this may be empty until you add some connections)'),
];
-
- $site_firehose = ((intval(get_config('system','site_firehose',0))) ? true : false);
- $net_firehose = ((get_config('system','disable_discover_tab',1)) ? false : true);
+
+ $site_firehose = ((intval(Config::Get('system','site_firehose',0))) ? true : false);
+ $net_firehose = ((Config::Get('system','disable_discover_tab',1)) ? false : true);
if($site_firehose || $net_firehose) {
$options['pubstream'] = t('View the public stream. Warning: this content is not moderated');
@@ -64,4 +65,4 @@ class Go extends \Zotlabs\Web\Controller {
}
-} \ No newline at end of file
+}
diff --git a/Zotlabs/Module/Group.php b/Zotlabs/Module/Group.php
index 1dce08757..63fdee7f0 100644
--- a/Zotlabs/Module/Group.php
+++ b/Zotlabs/Module/Group.php
@@ -2,10 +2,11 @@
namespace Zotlabs\Module;
use App;
-use Zotlabs\Web\Controller;
+use Zotlabs\Lib\AccessList;
use Zotlabs\Lib\Apps;
+use Zotlabs\Lib\Config;
use Zotlabs\Lib\Libsync;
-use Zotlabs\Lib\AccessList;
+use Zotlabs\Web\Controller;
class Group extends Controller {
@@ -123,7 +124,7 @@ class Group extends Controller {
// Switch to text mode interface if we have more than 'n' contacts or group members
$switchtotext = get_pconfig(local_channel(),'system','groupedit_image_limit');
if($switchtotext === false)
- $switchtotext = get_config('system','groupedit_image_limit');
+ $switchtotext = Config::Get('system','groupedit_image_limit');
if($switchtotext === false)
$switchtotext = 400;
diff --git a/Zotlabs/Module/Help.php b/Zotlabs/Module/Help.php
index 55ac80842..fd5cacee6 100644
--- a/Zotlabs/Module/Help.php
+++ b/Zotlabs/Module/Help.php
@@ -1,7 +1,7 @@
<?php
namespace Zotlabs\Module;
-require_once('include/help.php');
+use Michelf\MarkdownExtra;
/**
* You can create local site resources in doc/Site.md and either link to doc/Home.md for the standard resources
@@ -14,7 +14,50 @@ require_once('include/help.php');
*/
class Help extends \Zotlabs\Web\Controller {
- function get() {
+ use \Zotlabs\Lib\Traits\HelpHelperTrait;
+
+ private string $heading_slug = '';
+
+ /**
+ * Associative array containing the detected language.
+ */
+ public array $lang = [
+ 'language' => 'en', //! Detected language, 2-letter ISO 639-1 code ("en")
+ 'from_url' => false, //! true if language from URL overrides browser default
+ ];
+
+ /**
+ * Pre-check before processing request.
+ *
+ * Determine language requested, and ensure that a topic was requested.
+ * If no topic was requested, redirect to the about page, and abort
+ * processing.
+ */
+ public function init() {
+ $this->determine_help_language();
+
+ if (argc() === 1) {
+ goaway("/help/{$this->lang['language']}/about/about");
+ killme();
+ }
+ }
+
+ /**
+ * Process get request for the help module.
+ *
+ * Loads the correct help file from the `doc/` directory, and passes it to
+ * the help template in `view/tpl/help.tpl`.
+ *
+ * If the requested help topic does not exist for the currently selected
+ * language, a 404 status is returned instead.
+ *
+ * This function currently also handles search and serving static assets
+ * that may be used by the help files.
+ *
+ * @return string The rendered help page or a 404 page if help topic was
+ * not found.
+ */
+ public function get() {
nav_set_selected('Help');
$o = '';
@@ -81,6 +124,120 @@ class Help extends \Zotlabs\Web\Controller {
killme();
}
+ //
+ // The args to the module will be along this pattern:
+ //
+ // help/<lang>/<subdir..>/<topic>
+ //
+ // Where `<lang>` is the language which we want to fetch the topic. This
+ // element is optional, but will be used to override the browser language
+ // preference if it exists.
+ //
+ // There may be zero or more `<subdir...>` elements. If there are any
+ // present, the first subdir will be used as the slug to find the
+ // heading of the help page.
+ //
+ // The `<topic>` should be the name of a file within the given language
+ // and subdirectory tree under the `doc/` directory of the site file
+ // system. The topic is given _without_ the file extension, which will be
+ // determined by the module.
+ //
+ // The valid file extensions for help topic are:
+ //
+ // - `.md` for markdown formatted source files.
+ // - `.bb` for bbcode formatted source files.
+ // - `.html` for help topics in html format.
+ //
+
+ // Strip away the module name from the args
+ $args = array_slice(\App::$argv, 1);
+
+ // Remove language if necessary
+ //
+ // The language was determined during pre-request processing in the
+ // `init` function.
+ if ($this->lang['from_url']) {
+ array_shift($args);
+ }
+
+ // Keep the first remaining arg as the heading slug
+ $this->heading_slug = $args[0];
+
+ // Locate the file for the topic in the doc directory
+ $this->find_help_file(implode('/', $args), $this->lang['language']);
+
+ $this->set_page_title();
+
+ if (empty($this->file_name)) {
+ header($_SERVER["SERVER_PROTOCOL"] . ' 404 ' . t('Not Found'));
+ $tpl = get_markup_template("404.tpl");
+ return replace_macros($tpl, array(
+ '$message' => t('Page not found.')
+ ));
+
+ } else {
+ $tpl = get_markup_template('help.tpl');
+ return replace_macros($tpl, [ '$module' => $this ]);
+ }
+ }
+
+ public function render_content(): string {
+ return $this->render_help_file($this->file_name, $this->file_type);
+ }
+
+ public function render_help_file(string $file_name, string $file_type): string {
+ $raw_text = file_get_contents($file_name);
+
+ switch ($file_type) {
+ case 'md':
+ // We need to escape the `#include` statements in the original file,
+ // to be sure it's not rendered as a heading by markdown.
+ $raw_text = preg_replace('/#include/ism', '%%include', $raw_text);
+ $content = MarkdownExtra::defaultTransform($raw_text);
+ $content = preg_replace('/%%include/ism', '#include', $content);
+ break;
+
+ case 'bb':
+ $content = zidify_links(bbcode($raw_text));
+ break;
+
+ case 'html':
+ $content = parseIdentityAwareHTML($raw_text);
+ break;
+ }
+
+ // Replace includes with the contents of the included file
+ $content = preg_replace_callback(
+ "/#include (.*?)\;/ism",
+ function ($matches) {
+ $parts = explode('.', $matches[1]);
+ $sub_file_type = array_pop($parts);
+ $included_content = $this->render_help_file($matches[1], $sub_file_type);
+ return str_replace($matches[0], $included_content, $matches[0]);
+ },
+ $content
+ );
+
+ return translate_projectname($content);
+ }
+
+ public function get_page_title(): string {
+ $title = t('$Projectname Documentation');
+ $heading = $this->get_heading();
+
+ if (! empty($heading)) {
+ $title .= ': ' . $heading;
+ }
+
+ return $title;
+ }
+
+ public function get_toc_heading(): string {
+ return t('Contents');
+ }
+
+
+ private function get_heading(): string {
$headings = [
'about' => t('About'),
'member' => t('Members'),
@@ -89,21 +246,22 @@ class Help extends \Zotlabs\Web\Controller {
'tutorials' => t('Tutorials')
];
- $heading = '';
- if(array_key_exists(argv(1), $headings))
- $heading = $headings[argv(1)];
-
- $content = get_help_content();
-
- $language = determine_help_language()['language'];
-
- return replace_macros(get_markup_template('help.tpl'), array(
- '$title' => t('$Projectname Documentation'),
- '$tocHeading' => t('Contents'),
- '$content' => $content,
- '$heading' => $heading,
- '$language' => $language
- ));
+ if(array_key_exists($this->heading_slug, $headings)) {
+ return $headings[$this->heading_slug];
+ } else {
+ return '';
+ }
}
+ /**
+ * Set the page title to an unslugified version of the file name.
+ *
+ * @Note This modifies the global `App::$page['title']` property.
+ */
+ private function set_page_title(): void {
+ $title = basename($this->file_name, ".{$this->file_type}");
+ \App::$page['title'] =
+ t('Help:') . ' '
+ . ucwords(str_replace(['-', '_'],' ',notags($title)));
+ }
}
diff --git a/Zotlabs/Module/Home.php b/Zotlabs/Module/Home.php
index 8d78960cc..691ca1af9 100644
--- a/Zotlabs/Module/Home.php
+++ b/Zotlabs/Module/Home.php
@@ -3,6 +3,7 @@
namespace Zotlabs\Module;
use App;
+use Zotlabs\Lib\Config;
use Zotlabs\Lib\Libzot;
use Zotlabs\Web\Controller;
use Zotlabs\Web\HTTPSig;
@@ -20,7 +21,7 @@ class Home extends Controller {
call_hooks('home_init', $ret);
if (Libzot::is_zot_request()) {
- $key = get_config('system', 'prvkey');
+ $key = Config::Get('system', 'prvkey');
$ret = json_encode(Libzot::site_info());
$headers = ['Content-Type' => 'application/x-zot+json', 'Digest' => HTTPSig::generate_digest_header($ret)];
@@ -38,7 +39,7 @@ class Home extends Controller {
if (local_channel() && $channel && $channel['xchan_url'] && !$splash) {
$dest = $ret['startpage'] ?? '';
if (!$dest)
- $dest = get_config('system', 'startpage');
+ $dest = Config::Get('system', 'startpage');
if (!$dest)
$dest = z_root() . '/hq';
@@ -78,7 +79,7 @@ class Home extends Controller {
if ($o)
return $o;
- $frontpage = get_config('system', 'frontpage');
+ $frontpage = Config::Get('system', 'frontpage');
if ($frontpage) {
if (strpos($frontpage, 'include:') !== false) {
$file = trim(str_replace('include:', '', $frontpage));
@@ -91,7 +92,7 @@ class Home extends Controller {
}
if (strpos($frontpage, 'http') !== 0)
$frontpage = z_root() . '/' . $frontpage;
- if (intval(get_config('system', 'mirror_frontpage'))) {
+ if (intval(Config::Get('system', 'mirror_frontpage'))) {
$o = '<html><head><title>' . t('$Projectname') . '</title></head><body style="margin: 0; padding: 0; border: none;" ><iframe src="' . $frontpage . '" width="100%" height="100%" style="margin: 0; padding: 0; border: none;" ></iframe></body></html>';
echo $o;
killme();
@@ -99,11 +100,11 @@ class Home extends Controller {
goaway($frontpage);
}
- $sitename = get_config('system', 'sitename');
+ $sitename = Config::Get('system', 'sitename');
if ($sitename)
$o .= '<h1 class="home-welcome">' . sprintf(t('Welcome to %s'), $sitename) . '</h1>';
- $loginbox = get_config('system', 'login_on_homepage');
+ $loginbox = Config::Get('system', 'login_on_homepage');
if (intval($loginbox) || $loginbox === false)
$o .= login(true);
diff --git a/Zotlabs/Module/Hq.php b/Zotlabs/Module/Hq.php
index ae6a016fc..c8e6efe38 100644
--- a/Zotlabs/Module/Hq.php
+++ b/Zotlabs/Module/Hq.php
@@ -4,14 +4,6 @@ namespace Zotlabs\Module;
use App;
use Zotlabs\Widget\Messages;
-
-require_once("include/bbcode.php");
-require_once('include/security.php');
-require_once('include/conversation.php');
-require_once('include/acl_selectors.php');
-require_once('include/items.php');
-
-
class Hq extends \Zotlabs\Web\Controller {
function init() {
@@ -98,7 +90,6 @@ class Hq extends \Zotlabs\Web\Controller {
'permissions' => $channel_acl,
'bang' => '',
'visitor' => true,
- 'profile_uid' => local_channel(),
'return_path' => 'hq',
'expanded' => true,
'editor_autocomplete' => true,
@@ -117,17 +108,6 @@ class Hq extends \Zotlabs\Web\Controller {
nav_set_selected('HQ');
- if($target_item) {
- // if the target item is not a post (eg a like) we want to address its thread parent
- //$mid = ((($target_item['verb'] == ACTIVITY_LIKE) || ($target_item['verb'] == ACTIVITY_DISLIKE)) ? $target_item['thr_parent'] : $target_item['mid']);
-
- // if we got a decoded hash we must encode it again before handing to javascript
- // $mid = gen_link_id($target_item['mid']);
- }
- else {
- $mid = '';
- }
-
$o .= '<div id="live-hq"></div>' . "\r\n";
$o .= "<script> var profile_uid = " . local_channel()
. "; var netargs = '?f='; var profile_page = " . App::$pager['page'] . ";</script>\r\n";
diff --git a/Zotlabs/Module/Import.php b/Zotlabs/Module/Import.php
index c8a9ac5ed..5ace4e72d 100644
--- a/Zotlabs/Module/Import.php
+++ b/Zotlabs/Module/Import.php
@@ -9,6 +9,7 @@ require_once('include/perm_upgrade.php');
use App;
use URLify;
use Zotlabs\Daemon\Master;
+use Zotlabs\Lib\Config;
use Zotlabs\Lib\Libzot;
use Zotlabs\Web\Controller;
@@ -168,7 +169,7 @@ class Import extends Controller {
if ($newname) {
$x = false;
- if (get_config('system', 'unicode_usernames')) {
+ if (Config::Get('system', 'unicode_usernames')) {
$x = punify(mb_strtolower($newname));
}
@@ -191,6 +192,12 @@ class Import extends Controller {
return;
}
+ if ($channel['channel_removed']) {
+ logger('Channel exists but has been marked removed on this hub. ', print_r($channel,true));
+ notice( t('Channel exists but has been marked removed on this hub. Import failed.') . EOL);
+ return;
+ }
+
if (is_array($data['config'])) {
import_config($channel, $data['config']);
}
@@ -227,10 +234,10 @@ class Import extends Controller {
'hubloc_url_sig' => Libzot::sign(z_root(), $channel['channel_prvkey']),
'hubloc_host' => App::get_hostname(),
'hubloc_callback' => z_root() . '/zot',
- 'hubloc_sitekey' => get_config('system', 'pubkey'),
+ 'hubloc_sitekey' => Config::Get('system', 'pubkey'),
'hubloc_updated' => datetime_convert(),
'hubloc_id_url' => channel_url($channel),
- 'hubloc_site_id' => Libzot::make_xchan_hash(z_root(), get_config('system', 'pubkey'))
+ 'hubloc_site_id' => Libzot::make_xchan_hash(z_root(), Config::Get('system', 'pubkey'))
]
);
@@ -524,27 +531,31 @@ class Import extends Controller {
// This will indirectly perform a refresh_all *and* update the directory
Master::Summon(['Directory', $channel['channel_id']]);
- $cf_api_compat = true;
+ if ($api_path) {
+ $parsed = parse_url($api_path);
+ unset($parsed['path']);
- if ($api_path && $import_posts) { // we are importing from a server and not a file
- if (version_compare($data['compatibility']['version'], '6.3.4', '>=')) {
+ // store the import host so we can manually kick off item/file sync later in case anything did not work out
+ set_pconfig($channel['channel_id'], 'import', 'host', $parsed['host']);
- $m = parse_url($api_path);
+ $hz_server = unparse_url($parsed);
+ }
- $hz_server = $m['scheme'] . '://' . $m['host'];
+ $cf_api_compat = false;
+
+ if ($api_path && $hz_server && $import_posts) { // we are importing from a server and not a file
+ if (version_compare($data['compatibility']['version'], '6.3.4', '>=')) {
+ $cf_api_compat = true;
$since = datetime_convert(date_default_timezone_get(), date_default_timezone_get(), '0001-01-01 00:00');
$until = datetime_convert(date_default_timezone_get(), date_default_timezone_get(), 'now + 1 day');
- //$poll_interval = get_config('system', 'poll_interval', 3);
+ //$poll_interval = Config::Get('system', 'poll_interval', 3);
$page = 0;
Master::Summon(['Content_importer', sprintf('%d', $page), $since, $until, $channel['channel_address'], urlencode($hz_server)]);
Master::Summon(['File_importer', sprintf('%d', $page), $channel['channel_address'], urlencode($hz_server)]);
}
- else {
- $cf_api_compat = false;
- }
}
change_channel($channel['channel_id']);
@@ -553,7 +564,7 @@ class Import extends Controller {
goaway(z_root() . '/import_progress');
}
- if (!$cf_api_compat) {
+ if ($import_posts && !$cf_api_compat) {
notice(t('Automatic content and files import was not possible due to API version incompatiblity. Please import content and files manually!') . EOL);
}
diff --git a/Zotlabs/Module/Import_progress.php b/Zotlabs/Module/Import_progress.php
index 5c68f9ff1..d9b13e8a8 100644
--- a/Zotlabs/Module/Import_progress.php
+++ b/Zotlabs/Module/Import_progress.php
@@ -1,6 +1,7 @@
<?php
namespace Zotlabs\Module;
+use App;
use Zotlabs\Lib\PConfig;
use Zotlabs\Daemon\Master;
@@ -21,6 +22,9 @@ class Import_progress extends \Zotlabs\Web\Controller {
nav_set_selected('Channel Import');
+ $channel = App::get_channel();
+ $import_host = PConfig::Get(local_channel(), 'import', 'host');
+
// items
$c = PConfig::Get(local_channel(), 'import', 'content_progress');
@@ -41,6 +45,24 @@ class Import_progress extends \Zotlabs\Web\Controller {
}
}
else {
+ if(argv(1) === 'resume_itemsync' && $import_host) {
+ $alive = probe_api_path($import_host);
+ if ($alive) {
+ $parsed = parse_url($alive);
+ unset($parsed['path']);
+
+ $hz_server = unparse_url($parsed);
+ $since = datetime_convert(date_default_timezone_get(), date_default_timezone_get(), '0001-01-01 00:00');
+ $until = datetime_convert(date_default_timezone_get(), date_default_timezone_get(), 'now + 1 day');
+ $page = 0;
+ Master::Summon(['Content_importer', sprintf('%d', $page), $since, $until, $channel['channel_address'], urlencode($hz_server)]);
+ goaway('/import_progress');
+ }
+ else {
+ notice(t('Import host does not seem to be online or compatible') . EOL);
+ }
+ }
+
$cprogress = 'waiting to start...';
if (PConfig::Get(local_channel(), 'import', 'content_completed')) {
@@ -73,6 +95,23 @@ class Import_progress extends \Zotlabs\Web\Controller {
}
}
else {
+ if(argv(1) === 'resume_filesync' && $import_host) {
+ $alive = probe_api_path($import_host);
+ if ($alive) {
+ $parsed = parse_url($alive);
+ unset($parsed['path']);
+
+ $hz_server = unparse_url($parsed);
+ $page = 0;
+
+ Master::Summon(['File_importer', sprintf('%d', $page), $channel['channel_address'], urlencode($hz_server)]);
+ goaway('/import_progress');
+ }
+ else {
+ notice(t('Import host does not seem to be online or compatible') . EOL);
+ }
+ }
+
$fprogress = 'waiting to start...';
if (PConfig::Get(local_channel(), 'import', 'files_completed')) {
diff --git a/Zotlabs/Module/Invite.php b/Zotlabs/Module/Invite.php
index bb552e4c7..3e1e98f89 100644
--- a/Zotlabs/Module/Invite.php
+++ b/Zotlabs/Module/Invite.php
@@ -3,6 +3,7 @@ namespace Zotlabs\Module;
use App;
use Zotlabs\Lib\Apps;
+use Zotlabs\Lib\Config;
use Zotlabs\Web\Controller;
/**
@@ -76,7 +77,7 @@ class Invite extends Controller {
$feedbk = '';
$isajax = is_ajax();
$eol = $isajax ? "\n" : EOL;
- $policy = intval(get_config('system','register_policy'));
+ $policy = intval(Config::Get('system','register_policy'));
if ($policy == REGISTER_CLOSED) {
notice( 'ZAI0212E,' . t('Register is closed') . ')' . EOL);
return;
@@ -85,13 +86,13 @@ class Invite extends Controller {
$flags = 0;
elseif ($policy == REGISTER_APPROVE)
$flags = ACCOUNT_PENDING;
- $flags = ($flags | intval(get_config('system','verify_email')));
+ $flags = ($flags | intval(Config::Get('system','verify_email')));
// how many max recipients in one mail submit
- $maxto = get_config('system','invitation_max_recipients', 'na');
+ $maxto = Config::Get('system','invitation_max_recipients', 'na');
If (is_site_admin()) {
// set, if admin is operator, default to 12
- if ($maxto === 'na') set_config('system','invitation_max_recipients', 12);
+ if ($maxto === 'na') Config::Set('system','invitation_max_recipients', 12);
}
$maxto = ($maxto === 'na') ? 12 : $maxto;
@@ -323,7 +324,7 @@ class Invite extends Controller {
return Apps::app_render($papp, 'module');
}
- if (! (get_config('system','invitation_also') || get_config('system','invitation_only')) ) {
+ if (! (Config::Get('system','invitation_also') || Config::Get('system','invitation_only')) ) {
$o = 'ZAI0103E,' . t('Invites not proposed by configuration') . '. ';
$o .= t('Contact the site admin');
return $o;
@@ -331,7 +332,7 @@ class Invite extends Controller {
// invitation_by_user may still not configured, the default 'na' will tell this
// if configured, 0 disables invitations by users, other numbers are how many invites a user may propagate
- $invuser = get_config('system','invitation_by_user', 'na');
+ $invuser = Config::Get('system','invitation_by_user', 'na');
// if the mortal user drives the invitation
If (! is_site_admin()) {
@@ -352,7 +353,7 @@ class Invite extends Controller {
} else {
// general deity admin invite limit infinite (theoretical)
- if ($invuser === 'na') set_config('system','invitation_by_user', 4);
+ if ($invuser === 'na') Config::Set('system','invitation_by_user', 4);
// for display only
$invuser = '∞';
}
@@ -385,11 +386,11 @@ class Invite extends Controller {
$wehave = ($r ? $r[0]['ct'] : 0);
// invites max for all users except admins
- $invmaxau = intval(get_config('system','invitations_max_users'));
+ $invmaxau = intval(Config::Get('system','invitations_max_users'));
if(! $invmaxau) {
$invmaxau = 50;
if (is_site_admin()) {
- set_config('system','invitations_max_users',intval($invmaxau));
+ Config::Set('system','invitations_max_users',intval($invmaxau));
}
}
@@ -519,7 +520,7 @@ class Invite extends Controller {
$ts = replace_macros(get_intltext_template('invite.'.$t1.'.subject.tpl'),
array(
'$projectname' => t('$Projectname'),
- '$invite_loc' => get_config('system','sitename')
+ '$invite_loc' => Config::Get('system','sitename')
)
);
@@ -569,7 +570,7 @@ class Invite extends Controller {
function calcdue($duri=false) {
// expirations, duration interval
if ($duri===false)
- $duri = get_config('system','register_expire', '2d');
+ $duri = Config::Get('system','register_expire', '2d');
if ( preg_match( '/^[0-9]{1,2}[ihdwmy]{1}$/', $duri ) ) {
$durq = substr($duri, -1);
$durn = substr($duri, 0, -1);
diff --git a/Zotlabs/Module/Item.php b/Zotlabs/Module/Item.php
index 0324bf662..3d13655d2 100644
--- a/Zotlabs/Module/Item.php
+++ b/Zotlabs/Module/Item.php
@@ -1262,6 +1262,11 @@ class Item extends Controller {
if ((x($_REQUEST, 'return')) && strlen($return_path)) {
logger('return: ' . $return_path);
+
+ if ($return_path === 'hq') {
+ goaway(z_root() . '/hq/' . $datarray['uuid']);
+ }
+
goaway(z_root() . "/" . $return_path);
}
killme();
@@ -1654,7 +1659,7 @@ class Item extends Controller {
$listener = Libzot::zot_record_preferred($listener);
$c = q("select abook_id from abook where abook_channel = %d and abook_xchan = '%s'",
- intval($profile_uid),
+ intval($item['uid']),
dbesc($listener['hubloc_hash'])
);
diff --git a/Zotlabs/Module/Linkinfo.php b/Zotlabs/Module/Linkinfo.php
index 081966dba..8eb9a8c6d 100644
--- a/Zotlabs/Module/Linkinfo.php
+++ b/Zotlabs/Module/Linkinfo.php
@@ -1,6 +1,7 @@
<?php
namespace Zotlabs\Module;
+use Zotlabs\Lib\Config;
class Linkinfo extends \Zotlabs\Web\Controller {
@@ -168,7 +169,7 @@ class Linkinfo extends \Zotlabs\Web\Controller {
/* Execute below code only if image is present in siteinfo */
$total_images = 0;
- $max_images = get_config('system','max_bookmark_images');
+ $max_images = Config::Get('system','max_bookmark_images');
if($max_images === false)
$max_images = 2;
else
diff --git a/Zotlabs/Module/Lockview.php b/Zotlabs/Module/Lockview.php
index 0c8e23f8c..f3ae07f74 100644
--- a/Zotlabs/Module/Lockview.php
+++ b/Zotlabs/Module/Lockview.php
@@ -227,7 +227,7 @@ class Lockview extends Controller {
$allowed_xchans = array_unique($allowed_xchans);
foreach ($atokens as $atoken) {
if (in_array($atoken['xchan_hash'], $allowed_xchans)) {
- $guest_access_list[] = '<div class="dropdown-item d-flex justify-content-between cursor-pointer" title="' . sprintf(t('Click to copy link to this ressource for guest %s to clipboard'), $atoken['xchan_name']) . '" data-token="' . $url . '?zat=' . $atoken['atoken_token'] . '" onclick="navigator.clipboard.writeText(this.dataset.token); $.jGrowl(\'' . t('Link copied') . '\', { sticky: false, theme: \'info\', life: 1000 });"><span>' . $atoken['xchan_name'] . '</span><i class="fa fa-copy p-1"></i></div>';
+ $guest_access_list[] = '<div class="dropdown-item d-flex justify-content-between cursor-pointer" title="' . sprintf(t('Click to copy link to this ressource for guest %s to clipboard'), $atoken['xchan_name']) . '" data-token="' . $url . '?zat=' . $atoken['atoken_token'] . '" onclick="navigator.clipboard.writeText(this.dataset.token); toast(\'' . t('Link copied') . '\', \'info\');"><span>' . $atoken['xchan_name'] . '</span><i class="fa fa-copy p-1"></i></div>';
}
}
}
diff --git a/Zotlabs/Module/Lostpass.php b/Zotlabs/Module/Lostpass.php
index a0f9018b2..9846c541e 100644
--- a/Zotlabs/Module/Lostpass.php
+++ b/Zotlabs/Module/Lostpass.php
@@ -1,7 +1,7 @@
<?php
namespace Zotlabs\Module;
-
+use Zotlabs\Lib\Config;
class Lostpass extends \Zotlabs\Web\Controller {
@@ -34,19 +34,19 @@ class Lostpass extends \Zotlabs\Web\Controller {
$email_tpl = get_intltext_template("lostpass_eml.tpl");
$message = replace_macros($email_tpl, array(
- '$sitename' => get_config('system','sitename'),
+ '$sitename' => Config::Get('system','sitename'),
'$siteurl' => z_root(),
'$username' => sprintf( t('Site Member (%s)'), $email),
'$email' => $email,
'$reset_link' => z_root() . '/lostpass?verify=' . $hash
));
- $subject = email_header_encode(sprintf( t('Password reset requested at %s'),get_config('system','sitename')), 'UTF-8');
+ $subject = email_header_encode(sprintf( t('Password reset requested at %s'),Config::Get('system','sitename')), 'UTF-8');
$res = z_mail(
[
'toEmail' => $email,
- 'messageSubject' => sprintf( t('Password reset requested at %s'), get_config('system','sitename')),
+ 'messageSubject' => sprintf( t('Password reset requested at %s'), Config::Get('system','sitename')),
'textVersion' => $message,
]
);
@@ -114,7 +114,7 @@ class Lostpass extends \Zotlabs\Web\Controller {
$res = z_mail(
[
'toEmail' => $email,
- 'messageSubject' => sprintf( t('Your password has changed at %s'), get_config('system','sitename')),
+ 'messageSubject' => sprintf( t('Your password has changed at %s'), Config::Get('system','sitename')),
'textVersion' => $message,
]
);
diff --git a/Zotlabs/Module/New_channel.php b/Zotlabs/Module/New_channel.php
index 24dbe2944..48fcd9e10 100644
--- a/Zotlabs/Module/New_channel.php
+++ b/Zotlabs/Module/New_channel.php
@@ -2,6 +2,7 @@
namespace Zotlabs\Module;
use URLify;
+use Zotlabs\Lib\Config;
require_once('include/channel.php');
require_once('include/permissions.php');
@@ -20,7 +21,7 @@ class New_channel extends \Zotlabs\Web\Controller {
$x = false;
- if(get_config('system','unicode_usernames')) {
+ if(Config::Get('system','unicode_usernames')) {
$x = punify(mb_strtolower($n));
}
@@ -55,7 +56,7 @@ class New_channel extends \Zotlabs\Web\Controller {
$x = false;
- if(get_config('system','unicode_usernames')) {
+ if(Config::Get('system','unicode_usernames')) {
$x = punify(mb_strtolower($n));
}
@@ -117,7 +118,7 @@ class New_channel extends \Zotlabs\Web\Controller {
change_channel($result['channel']['channel_id']);
- $next_page = get_config('system', 'workflow_channel_next', 'profiles');
+ $next_page = Config::Get('system', 'workflow_channel_next', 'profiles');
goaway(z_root() . '/' . $next_page);
}
@@ -138,7 +139,7 @@ class New_channel extends \Zotlabs\Web\Controller {
intval($aid)
);
if($r && (! intval($r[0]['total']))) {
- $default_role = get_config('system','default_permissions_role','personal');
+ $default_role = Config::Get('system','default_permissions_role','personal');
}
$limit = account_service_class_fetch(get_account_id(),'total_identities');
@@ -163,7 +164,7 @@ class New_channel extends \Zotlabs\Web\Controller {
$nick_help = '<span id="nick_help_loading" style="display:none">' . t('Loading') . '</span><span id="nick_help_text">';
$nick_help .= t('This will be used to create a unique network address (like an email address).');
- if(! get_config('system','unicode_usernames')) {
+ if(! Config::Get('system','unicode_usernames')) {
$nick_help .= ' ' . t('Allowed characters are a-z 0-9, - and _');
}
$nick_help .= '<span>';
diff --git a/Zotlabs/Module/Profile_photo.php b/Zotlabs/Module/Profile_photo.php
index dc47d213b..8c9d4d90c 100644
--- a/Zotlabs/Module/Profile_photo.php
+++ b/Zotlabs/Module/Profile_photo.php
@@ -4,6 +4,7 @@ namespace Zotlabs\Module;
use App;
use Zotlabs\Daemon\Master;
+use Zotlabs\Lib\Config;
use Zotlabs\Lib\Libsync;
use Zotlabs\Web\Controller;
@@ -599,7 +600,7 @@ class Profile_photo extends Controller {
function profile_photo_crop_ui_head($ph, $hash, $smallest) {
- $max_length = get_config('system', 'max_image_length');
+ $max_length = Config::Get('system', 'max_image_length');
if (!$max_length) {
$max_length = MAX_IMAGE_LENGTH;
diff --git a/Zotlabs/Module/Profiles.php b/Zotlabs/Module/Profiles.php
index 15252d6e6..a06193e12 100644
--- a/Zotlabs/Module/Profiles.php
+++ b/Zotlabs/Module/Profiles.php
@@ -1,6 +1,7 @@
<?php
namespace Zotlabs\Module;
+use Zotlabs\Lib\Config;
use Zotlabs\Lib\Libsync;
class Profiles extends \Zotlabs\Web\Controller {
@@ -619,14 +620,16 @@ class Profiles extends \Zotlabs\Web\Controller {
$profile_fields_advanced = get_profile_fields_advanced();
if(((argc() > 1) && (intval(argv(1)))) || !feature_enabled(local_channel(),'multi_profiles')) {
- if(feature_enabled(local_channel(),'multi_profiles'))
+ if (feature_enabled(local_channel(), 'multi_profiles')) {
$id = \App::$argv[1];
+ }
else {
$x = q("select id from profile where uid = %d and is_default = 1",
intval(local_channel())
);
- if($x)
+ if ($x) {
$id = $x[0]['id'];
+ }
}
$r = q("SELECT * FROM profile WHERE id = %d AND uid = %d LIMIT 1",
@@ -634,7 +637,7 @@ class Profiles extends \Zotlabs\Web\Controller {
intval(local_channel())
);
- if(! $r) {
+ if (!$r) {
notice( t('Profile not found.') . EOL);
return;
}
@@ -673,7 +676,7 @@ class Profiles extends \Zotlabs\Web\Controller {
$opt_tpl = get_markup_template("field_checkbox.tpl");
- if (get_config('system', 'publish_all')) {
+ if (Config::Get('system', 'publish_all')) {
$profile_in_dir = '<input type="hidden" name="profile_in_directory" value="1" />';
}
else {
@@ -716,7 +719,7 @@ class Profiles extends \Zotlabs\Web\Controller {
//$vctmp = (($vc) ? \Sabre\VObject\Reader::read($vc) : null);
//$vcard = (($vctmp) ? get_vcard_array($vctmp,$r[0]['id']) : [] );
- $f = get_config('system','birthday_input_format');
+ $f = Config::Get('system','birthday_input_format');
if(! $f)
$f = 'ymd';
@@ -826,7 +829,8 @@ class Profiles extends \Zotlabs\Web\Controller {
else {
$r = q("SELECT * FROM profile WHERE uid = %d",
- local_channel());
+ intval(local_channel())
+ );
if($r) {
$tpl = get_markup_template('profile_entry.tpl');
diff --git a/Zotlabs/Module/Profperm.php b/Zotlabs/Module/Profperm.php
index 900e2f981..842197415 100644
--- a/Zotlabs/Module/Profperm.php
+++ b/Zotlabs/Module/Profperm.php
@@ -1,6 +1,7 @@
<?php
namespace Zotlabs\Module;
+use Zotlabs\Lib\Config;
require_once('include/photos.php');
@@ -8,42 +9,42 @@ require_once('include/photos.php');
class Profperm extends \Zotlabs\Web\Controller {
function init() {
-
+
if(! local_channel())
return;
-
+
$channel = \App::get_channel();
$which = $channel['channel_address'];
-
+
$profile = \App::$argv[1];
-
+
profile_load($which,$profile);
-
+
}
-
-
+
+
function get() {
-
+
if(! local_channel()) {
notice( t('Permission denied') . EOL);
return;
}
-
-
+
+
if(argc() < 2) {
notice( t('Invalid profile identifier.') . EOL );
return;
}
-
+
// Switch to text mod interface if we have more than 'n' contacts or group members
-
+
$switchtotext = get_pconfig(local_channel(),'system','groupedit_image_limit');
if($switchtotext === false)
- $switchtotext = get_config('system','groupedit_image_limit');
+ $switchtotext = Config::Get('system','groupedit_image_limit');
if($switchtotext === false)
$switchtotext = 400;
-
-
+
+
if((argc() > 2) && intval(argv(1)) && intval(argv(2))) {
$r = q("SELECT abook_id FROM abook WHERE abook_id = %d and abook_channel = %d limit 1",
intval(argv(2)),
@@ -52,8 +53,8 @@ class Profperm extends \Zotlabs\Web\Controller {
if($r)
$change = intval(argv(2));
}
-
-
+
+
if((argc() > 1) && (intval(argv(1)))) {
$r = q("SELECT * FROM profile WHERE id = %d AND uid = %d AND is_default = 0 LIMIT 1",
intval(argv(1)),
@@ -63,21 +64,21 @@ class Profperm extends \Zotlabs\Web\Controller {
notice( t('Invalid profile identifier.') . EOL );
return;
}
-
+
$profile = $r[0];
-
+
$r = q("SELECT * FROM abook left join xchan on abook_xchan = xchan_hash WHERE abook_channel = %d AND abook_profile = '%s'",
intval(local_channel()),
dbesc($profile['profile_guid'])
);
-
+
$ingroup = array();
if($r)
foreach($r as $member)
$ingroup[] = $member['abook_id'];
-
+
$members = $r;
-
+
if($change) {
if(in_array($change,$ingroup)) {
q("UPDATE abook SET abook_profile = '' WHERE abook_id = %d AND abook_channel = %d",
@@ -91,42 +92,42 @@ class Profperm extends \Zotlabs\Web\Controller {
intval($change),
intval(local_channel())
);
-
+
}
-
- $r = q("SELECT * FROM abook left join xchan on abook_xchan = xchan_hash
+
+ $r = q("SELECT * FROM abook left join xchan on abook_xchan = xchan_hash
WHERE abook_channel = %d AND abook_profile = '%s'",
intval(local_channel()),
dbesc($profile['profile_guid'])
);
-
+
$members = $r;
-
+
$ingroup = array();
if(count($r))
foreach($r as $member)
$ingroup[] = $member['abook_id'];
}
-
+
$o .= '<h2>' . t('Profile Visibility Editor') . '</h2>';
-
+
$o .= '<h3>' . t('Profile') . ' \'' . $profile['profile_name'] . '\'</h3>';
-
+
$o .= '<div id="prof-edit-desc">' . t('Click on a contact to add or remove.') . '</div>';
-
+
}
-
+
$o .= '<div id="prof-update-wrapper">';
if($change)
$o = '';
-
+
$o .= '<div id="prof-members-title">';
$o .= '<h3>' . t('Visible To') . '</h3>';
$o .= '</div>';
$o .= '<div id="prof-members">';
-
+
$textmode = (($switchtotext && (count($members) > $switchtotext)) ? true : false);
-
+
foreach($members as $member) {
if($member['xchan_url']) {
$member['click'] = 'profChangeMember(' . $profile['id'] . ',' . $member['abook_id'] . '); return false;';
@@ -135,14 +136,14 @@ class Profperm extends \Zotlabs\Web\Controller {
}
$o .= '</div><div id="prof-members-end"></div>';
$o .= '<hr id="prof-separator" />';
-
+
$o .= '<div id="prof-all-contcts-title">';
$o .= '<h3>' . t("All Connections") . '</h3>';
$o .= '</div>';
$o .= '<div id="prof-all-contacts">';
-
+
$r = abook_connections(local_channel());
-
+
if($r) {
$textmode = (($switchtotext && (count($r) > $switchtotext)) ? true : false);
foreach($r as $member) {
@@ -152,17 +153,17 @@ class Profperm extends \Zotlabs\Web\Controller {
}
}
}
-
+
$o .= '</div><div id="prof-all-contacts-end"></div>';
-
+
if($change) {
echo $o;
killme();
}
$o .= '</div>';
return $o;
-
+
}
-
-
+
+
}
diff --git a/Zotlabs/Module/Pubsites.php b/Zotlabs/Module/Pubsites.php
index 032406be4..cbaa66042 100644
--- a/Zotlabs/Module/Pubsites.php
+++ b/Zotlabs/Module/Pubsites.php
@@ -1,12 +1,13 @@
<?php
namespace Zotlabs\Module;
+use Zotlabs\Lib\Config;
use Zotlabs\Lib\Libzotdir;
class Pubsites extends \Zotlabs\Web\Controller {
function get() {
- $dirmode = intval(get_config('system','directory_mode'));
+ $dirmode = intval(Config::Get('system','directory_mode'));
$url = '';
@@ -19,7 +20,7 @@ class Pubsites extends \Zotlabs\Web\Controller {
}
$url .= '/sites';
- $rating_enabled = get_config('system','rating_enabled');
+ $rating_enabled = Config::Get('system','rating_enabled');
$o = '<div class="generic-content-wrapper">';
diff --git a/Zotlabs/Module/Pubstream.php b/Zotlabs/Module/Pubstream.php
index c40751fdc..6d8edf4d8 100644
--- a/Zotlabs/Module/Pubstream.php
+++ b/Zotlabs/Module/Pubstream.php
@@ -3,6 +3,7 @@ namespace Zotlabs\Module;
use App;
use Zotlabs\Lib\Apps;
+use Zotlabs\Lib\Config;
require_once('include/conversation.php');
require_once('include/acl_selectors.php');
@@ -26,19 +27,19 @@ class Pubstream extends \Zotlabs\Web\Controller {
return login();
}
- if(! intval(get_config('system','open_pubstream',1))) {
+ if(! intval(Config::Get('system','open_pubstream',1))) {
if(! get_observer_hash()) {
return login();
}
}
- $net_firehose = ((get_config('system','disable_discover_tab',1)) ? false : true);
+ $net_firehose = ((Config::Get('system','disable_discover_tab',1)) ? false : true);
if(!$net_firehose) {
return '';
}
- $site_firehose = ((intval(get_config('system','site_firehose',0))) ? true : false);
+ $site_firehose = ((intval(Config::Get('system','site_firehose',0))) ? true : false);
$mid = $_REQUEST['mid'] ?? '';
$identifier = 'uuid';
@@ -107,7 +108,7 @@ class Pubstream extends \Zotlabs\Web\Controller {
nav_set_selected(t('Public Stream'));
- $maxheight = get_config('system','home_divmore_height');
+ $maxheight = Config::Get('system','home_divmore_height');
if(! $maxheight)
$maxheight = 400;
@@ -172,7 +173,7 @@ class Pubstream extends \Zotlabs\Web\Controller {
$site_firehose_sql = " and owner_xchan in (select channel_hash from channel where channel_system = 0 and channel_removed = 0) ";
}
- if(get_config('system','public_list_mode'))
+ if(Config::Get('system','public_list_mode'))
$page_mode = 'list';
else
$page_mode = 'client';
@@ -184,7 +185,6 @@ class Pubstream extends \Zotlabs\Web\Controller {
$thread_top = '';
}
- $net_query = (($net) ? " left join xchan on xchan_hash = author_xchan " : '');
$net_query2 = (($net) ? " and xchan_network = '" . protect_sprintf(dbesc($net)) . "' " : '');
if($update && $_SESSION['loadtime'])
@@ -196,16 +196,17 @@ class Pubstream extends \Zotlabs\Web\Controller {
if($update) {
- $ordering = get_config('system', 'pubstream_ordering', 'commented');
+ $ordering = Config::Get('system', 'pubstream_ordering', 'commented');
if($load) {
if($mid) {
$r = q("SELECT parent AS item_id FROM item
left join abook on item.author_xchan = abook.abook_xchan
- $net_query
+ left join xchan on item.author_xchan = xchan.xchan_hash
WHERE item.$identifier = '%s' and item.item_private = 0
$uids $site_firehose_sql
$item_normal
+ and xchan.xchan_censored = 0
and (abook.abook_blocked = 0 or abook.abook_flags is null)
$sql_extra $net_query2",
dbesc($mid)
@@ -215,10 +216,11 @@ class Pubstream extends \Zotlabs\Web\Controller {
// Fetch a page full of parent items for this page
$r = dbq("SELECT parent AS item_id FROM item
left join abook on ( item.author_xchan = abook.abook_xchan $abook_uids )
- $net_query
+ left join xchan on item.author_xchan = xchan.xchan_hash
WHERE item.item_private = 0 $thread_top
$uids $site_firehose_sql
$item_normal
+ and xchan.xchan_censored = 0
and (abook.abook_blocked = 0 or abook.abook_flags is null)
$sql_extra $net_query2
ORDER BY $ordering DESC $pager_sql "
@@ -229,9 +231,10 @@ class Pubstream extends \Zotlabs\Web\Controller {
if($mid) {
$r = q("SELECT parent AS item_id FROM item
left join abook on item.author_xchan = abook.abook_xchan
- $net_query
+ left join xchan on item.author_xchan = xchan.xchan_hash
WHERE item.$identifier = '%s' and item.item_private = 0
$uids $site_firehose_sql $item_normal_update $simple_update
+ and xchan.xchan_censored = 0
and (abook.abook_blocked = 0 or abook.abook_flags is null)
$sql_extra $net_query2",
dbesc($mid)
@@ -240,10 +243,11 @@ class Pubstream extends \Zotlabs\Web\Controller {
else {
$r = dbq("SELECT parent AS item_id FROM item
left join abook on item.author_xchan = abook.abook_xchan
- $net_query
+ left join xchan on item.author_xchan = xchan.xchan_hash
WHERE item.item_private = 0 $thread_top
$uids $site_firehose_sql $item_normal_update
$simple_update
+ and xchan.xchan_censored = 0
and (abook.abook_blocked = 0 or abook.abook_flags is null)
$sql_extra $net_query2"
);
diff --git a/Zotlabs/Module/Rbmark.php b/Zotlabs/Module/Rbmark.php
index 87b774495..df32a97c2 100644
--- a/Zotlabs/Module/Rbmark.php
+++ b/Zotlabs/Module/Rbmark.php
@@ -1,5 +1,5 @@
<?php
-namespace Zotlabs\Module; /** @file */
+namespace Zotlabs\Module;
require_once('include/acl_selectors.php');
require_once('include/crypto.php');
@@ -23,11 +23,9 @@ require_once('include/bookmarks.php');
* remote_return= absolute URL to return after posting is finished
*
*/
-
-
class Rbmark extends \Zotlabs\Web\Controller {
- function post() {
+ public function post(): void {
if($_POST['submit'] !== t('Save'))
return;
@@ -36,22 +34,21 @@ class Rbmark extends \Zotlabs\Web\Controller {
$channel = \App::get_channel();
$t = array('url' => escape_tags($_REQUEST['url']),'term' => escape_tags($_REQUEST['title']));
+
bookmark_add($channel,$channel,$t,((x($_REQUEST,'private')) ? intval($_REQUEST['private']) : 0),
array('menu_id' => ((x($_REQUEST,'menu_id')) ? intval($_REQUEST['menu_id']) : 0),
- 'menu_name' => ((x($_REQUEST,'menu_name')) ? escape_tags($_REQUEST['menu_name']) : ''),
- 'ischat' => ((x($_REQUEST['ischat'])) ? intval($_REQUEST['ischat']) : 0)
+ 'menu_name' => ((x($_REQUEST,'menu_name')) ? escape_tags($_REQUEST['menu_name']) : ''),
+ 'ischat' => ((x($_REQUEST['ischat'])) ? intval($_REQUEST['ischat']) : 0)
));
goaway(z_root() . '/bookmarks');
-
}
- function get() {
+ public function get(): string {
- $o = '';
-
- if(! local_channel()) {
+ $channel_id = local_channel();
+ if($channel_id === false) {
// The login procedure is going to bugger our $_REQUEST variables
// so save them in the session.
@@ -62,59 +59,46 @@ class Rbmark extends \Zotlabs\Web\Controller {
return login();
}
- // If we have saved rbmark session variables, but nothing in the current $_REQUEST, recover the saved variables
+ // If we have saved rbmark session variables, but nothing in the
+ // current $_REQUEST, recover the saved variables
if((! array_key_exists('url',$_REQUEST)) && (array_key_exists('bookmark',$_SESSION))) {
$_REQUEST = $_SESSION['bookmark'];
unset($_SESSION['bookmark']);
}
- if($_REQUEST['remote_return']) {
- $_SESSION['remote_return'] = $_REQUEST['remote_return'];
- }
- if(argc() > 1 && argv(1) === 'return') {
- if($_SESSION['remote_return'])
- goaway($_SESSION['remote_return']);
- goaway(z_root() . '/bookmarks');
- }
-
- $channel = \App::get_channel();
-
-
- $m = menu_list($channel['channel_id'],'',MENU_BOOKMARK);
-
- $menus = array();
- if($m) {
- $menus = array(0 => '');
- foreach($m as $n) {
- $menus[$n['menu_id']] = $n['menu_name'];
- }
- }
- $menu_select = array('menu_id',t('Select a bookmark folder'),false,'',$menus);
-
-
- $o .= replace_macros(get_markup_template('rbmark.tpl'), array(
+ $menu_select = [
+ 'menu_id',
+ t('Select a bookmark folder'),
+ false,
+ '',
+ $this->get_bookmark_folders(intval($channel_id)),
+ null,
+ ];
+ return replace_macros(get_markup_template('rbmark.tpl'), array(
'$header' => t('Save Bookmark'),
- '$url' => array('url',t('URL of bookmark'),escape_tags($_REQUEST['url'])),
- '$title' => array('title',t('Description'),escape_tags($_REQUEST['title'])),
+ '$url' => array('url',t('URL of bookmark'),$_REQUEST['url'], null, null, null),
+ '$title' => array('title',t('Description'),$_REQUEST['title'], null, null, null),
'$ischat' => ((x($_REQUEST,'ischat')) ? intval($_REQUEST['ischat']) : 0),
'$private' => ((x($_REQUEST,'private')) ? intval($_REQUEST['private']) : 0),
'$submit' => t('Save'),
- '$menu_name' => array('menu_name',t('Or enter new bookmark folder name'),'',''),
+ '$menu_name' => array('menu_name',t('Or enter new bookmark folder name'),'','', null, null),
'$menus' => $menu_select
-
));
+ }
+ private function get_bookmark_folders(int $channel_id): array {
+ $menu_list = menu_list($channel_id, '', MENU_BOOKMARK);
+ $menus = [ 0 => '' ];
+ if ($menu_list !== false) {
+ foreach($menu_list as $n) {
+ $menus[$n['menu_id']] = $n['menu_name'];
+ }
+ }
-
-
- return $o;
-
+ return $menus;
}
-
-
-
}
diff --git a/Zotlabs/Module/Regate.php b/Zotlabs/Module/Regate.php
index ac6273951..c67f45a88 100644
--- a/Zotlabs/Module/Regate.php
+++ b/Zotlabs/Module/Regate.php
@@ -2,6 +2,7 @@
namespace Zotlabs\Module;
+use Zotlabs\Lib\Config;
use Zotlabs\Lib\Connect;
use Zotlabs\Daemon\Master;
@@ -58,7 +59,7 @@ class Regate extends \Zotlabs\Web\Controller {
// normally, that should never happen here
// log suitable for fail2ban also
$logmsg = 'ZAR1230S Unexpected registration verification request for '
- . get_config('system','sitename') . ' arrived from § ' . $ip . ' §';
+ . Config::Get('system','sitename') . ' arrived from § ' . $ip . ' §';
zar_log($logmsg);
goaway(z_root());
}
@@ -118,7 +119,7 @@ class Regate extends \Zotlabs\Web\Controller {
$isa = ($isa && ($isa['account_roles'] && ACCOUNT_ROLE_ADMIN));
// approve contra invite by admin
- if ($isa && get_config('system','register_policy') == REGISTER_APPROVE) {
+ if ($isa && Config::Get('system','register_policy') == REGISTER_APPROVE) {
$flags &= $flags ^ ACCOUNT_PENDING;
}
@@ -159,7 +160,7 @@ class Regate extends \Zotlabs\Web\Controller {
$nextpage = 'new_channel';
- $auto_create = get_config('system', 'auto_channel_create', 1);
+ $auto_create = Config::Get('system', 'auto_channel_create', 1);
if($auto_create) {
@@ -179,7 +180,7 @@ class Regate extends \Zotlabs\Web\Controller {
if($reonar['chan.did1'])
set_aconfig($cra['account']['account_id'], 'register', 'channel_address', $reonar['chan.did1']);
- $permissions_role = get_config('system','default_permissions_role');
+ $permissions_role = Config::Get('system','default_permissions_role');
if($permissions_role)
set_aconfig($cra['account']['account_id'], 'register', 'permissions_role', $permissions_role);
@@ -206,7 +207,7 @@ class Regate extends \Zotlabs\Web\Controller {
}
change_channel($channel_id);
- $nextpage = 'profiles/' . $channel_id;
+ $nextpage = Config::Get('system', 'workflow_channel_next', 'profiles');
$msg_code = 'ZAR1239I';
$msg = t('Channel successfull created') . ' ' . $did2;
}
diff --git a/Zotlabs/Module/Regdir.php b/Zotlabs/Module/Regdir.php
index e49f89231..70e021715 100644
--- a/Zotlabs/Module/Regdir.php
+++ b/Zotlabs/Module/Regdir.php
@@ -1,6 +1,7 @@
<?php
namespace Zotlabs\Module;
+use Zotlabs\Lib\Config;
use Zotlabs\Lib\Zotfinger;
use Zotlabs\Web\Controller;
@@ -13,55 +14,55 @@ use Zotlabs\Web\Controller;
* We would then need a flag in the site table to indicate that they've been
* validated by the PRIMARY directory for that realm. Sites claiming to be PRIMARY
* but are not the realm PRIMARY will be marked invalid.
- *
+ *
* @param App &$a
*/
class Regdir extends Controller {
function init() {
-
+
$result = array('success' => false);
-
+
$url = $_REQUEST['url'];
$access_token = $_REQUEST['t'];
$valid = 0;
-
+
// we probably don't need the realm as we will find out in the probe.
// What we may want to do is throw an error if you're trying to register in a different realm
// so this configuration issue can be discovered.
-
+
$realm = $_REQUEST['realm'];
if(! $realm)
$realm = DIRECTORY_REALM;
-
+
if($realm === DIRECTORY_REALM) {
$valid = 1;
} else {
- $token = get_config('system','realm_token');
+ $token = Config::Get('system','realm_token');
if($token && $access_token != $token) {
$result['message'] = 'This realm requires an access token';
return;
}
$valid = 1;
}
-
- $dirmode = intval(get_config('system','directory_mode'));
-
+
+ $dirmode = intval(Config::Get('system','directory_mode'));
+
if ($dirmode == DIRECTORY_MODE_NORMAL) {
$ret['message'] = t('This site is not a directory server');
json_return_and_die($ret);
}
-
+
$m = null;
if ($url) {
$m = parse_url($url);
-
+
if ((! $m) || (! z_dns_check($m['host']))) {
$result['message'] = 'unparseable url';
json_return_and_die($result);
}
-
+
$j = Zotfinger::exec($url);
if($j) {
$result['success'] = true;
@@ -79,7 +80,7 @@ class Regdir extends Controller {
}
else {
-
+
if ($dirmode == DIRECTORY_MODE_STANDALONE) {
$r = array(array('site_url' => z_root()));
} else {
@@ -93,7 +94,7 @@ class Regdir extends Controller {
$result['directories'] = array();
foreach ($r as $rr)
$result['directories'][] = $rr['site_url'];
-
+
json_return_and_die($result);
}
}
diff --git a/Zotlabs/Module/Register.php b/Zotlabs/Module/Register.php
index 5a50b4de0..f0163768c 100644
--- a/Zotlabs/Module/Register.php
+++ b/Zotlabs/Module/Register.php
@@ -3,6 +3,7 @@
namespace Zotlabs\Module;
use App;
+use Zotlabs\Lib\Config;
use Zotlabs\Web\Controller;
require_once('include/security.php');
@@ -63,7 +64,7 @@ class Register extends Controller {
$act = q("SELECT COUNT(*) AS act FROM account")[0]['act'];
$is247 = false;
$ip = $_SERVER['REMOTE_ADDR'];
- $sameip = intval(get_config('system','register_sameip', 3));
+ $sameip = intval(Config::Get('system','register_sameip', 3));
$arr = $_POST;
$invite_code = ((x($arr,'invite_code')) ? notags(trim($arr['invite_code'])) : '');
$name = '';
@@ -73,10 +74,10 @@ class Register extends Controller {
$password2 = ((x($arr,'password2')) ? trim($arr['password2']) : '');
$register_msg = ((x($arr,'register_msg')) ? notags(trim($arr['register_msg'])) : '');
$reonar = [];
- $auto_create = get_config('system','auto_channel_create', 1);
+ $auto_create = Config::Get('system','auto_channel_create', 1);
$duty = zar_register_dutystate();
- if (!get_config('system', 'register_duty_jso')) {
+ if (!Config::Get('system', 'register_duty_jso')) {
// if not yet configured default to true
$duty = array( 'isduty' => true, 'atfrm' => '', 'nowfmt' => '');
}
@@ -107,7 +108,7 @@ class Register extends Controller {
}
}
- $email_verify = get_config('system', 'verify_email');
+ $email_verify = Config::Get('system', 'verify_email');
if ($email_verify && !$email) {
notice(t('Email address required') . EOL);
return;
@@ -180,9 +181,9 @@ class Register extends Controller {
return;
}
- $policy = get_config('system','register_policy');
- $invonly = get_config('system','invitation_only');
- $invalso = get_config('system','invitation_also');
+ $policy = Config::Get('system','register_policy');
+ $invonly = Config::Get('system','invitation_only');
+ $invalso = Config::Get('system','invitation_also');
switch($policy) {
@@ -306,11 +307,11 @@ class Register extends Controller {
if($policy == REGISTER_OPEN || $policy == REGISTER_APPROVE ) {
- $cfgdelay = get_config('system', 'register_delay', '0i');
+ $cfgdelay = Config::Get('system', 'register_delay', '0i');
$reg_delayed = calculate_adue( $cfgdelay );
$regdelay = (($reg_delayed) ? datetime_convert(date_default_timezone_get(), 'UTC', $reg_delayed['due']) : $now);
- $cfgexpire = get_config('system', 'register_expire', '3d');
+ $cfgexpire = Config::Get('system', 'register_expire', '3d');
$reg_expires = calculate_adue( $cfgexpire );
$regexpire = (($reg_expires) ? datetime_convert(date_default_timezone_get(), 'UTC', $reg_expires['due']) : datetime_convert('UTC', 'UTC', 'now + 99 years'));
@@ -323,12 +324,12 @@ class Register extends Controller {
$didx = 'e';
push_lang(($reg['lang']) ? $reg['lang'] : App::$language);
- $reonar['from'] = get_config('system', 'from_email');
+ $reonar['from'] = Config::Get('system', 'from_email');
$reonar['to'] = $email;
- $reonar['subject'] = sprintf( t('Registration confirmation for %s'), get_config('system','sitename'));
+ $reonar['subject'] = sprintf( t('Registration confirmation for %s'), Config::Get('system','sitename'));
$reonar['txttemplate']= replace_macros(get_intltext_template('register_verify_member.tpl'),
[
- '$sitename' => get_config('system','sitename'),
+ '$sitename' => Config::Get('system','sitename'),
'$siteurl' => z_root(),
'$email' => $email,
'$timeframe' => [$regdelay, $regexpire],
@@ -428,10 +429,11 @@ class Register extends Controller {
function get() {
$registration_is = '';
+ $register_msg = '';
$other_sites = '';
- if(intval(get_config('system','register_policy')) === REGISTER_CLOSED) {
- if(intval(get_config('system','directory_mode')) === DIRECTORY_MODE_STANDALONE) {
+ if(intval(Config::Get('system','register_policy')) === REGISTER_CLOSED) {
+ if(intval(Config::Get('system','directory_mode')) === DIRECTORY_MODE_STANDALONE) {
notice(t('Registration on this hub is disabled.') . EOL);
return;
}
@@ -440,24 +442,25 @@ class Register extends Controller {
return $mod->get();
}
- if(intval(get_config('system','register_policy')) == REGISTER_APPROVE) {
+ if(intval(Config::Get('system','register_policy')) == REGISTER_APPROVE) {
+ $register_msg = ['register_msg', t('Why do you want to join this hub?'), ((x($_REQUEST,'register_msg')) ? $_REQUEST['register_msg'] : ''), t('This will help to review your registration')];
$registration_is = t('Registration on this hub is by approval only.');
$other_sites = '<a href="pubsites">' . t('Register at another affiliated hub in case when prefered') . '</a>';
}
$duty = zar_register_dutystate();
- if (!get_config('system', 'register_duty_jso')) {
+ if (!Config::Get('system', 'register_duty_jso')) {
// if not yet configured default to true
$duty = array( 'isduty' => true, 'atfrm' => '', 'nowfmt' => '');
}
$invitations = false;
- if(intval(get_config('system','invitation_only'))) {
+ if(intval(Config::Get('system','invitation_only'))) {
$invitations = true;
$registration_is = t('Registration on this hub is by invitation only.');
$other_sites = '<a href="pubsites">' . t('Register at another affiliated hub') . '</a>';
- } elseif (intval(get_config('system','invitation_also'))) {
+ } elseif (intval(Config::Get('system','invitation_also'))) {
$invitations = true;
}
@@ -466,7 +469,7 @@ class Register extends Controller {
$duty['atform'] = 'disabled';
// Configurable terms of service link
- $tosurl = get_config('system','tos_url');
+ $tosurl = Config::Get('system','tos_url');
if(! $tosurl)
$tosurl = z_root() . '/help/TermsOfService';
@@ -475,21 +478,21 @@ class Register extends Controller {
// Configurable whether to restrict age or not - default is based on international legal requirements
// This can be relaxed if you are on a restricted server that does not share with public servers
- if(get_config('system','no_age_restriction')) {
+ if(Config::Get('system','no_age_restriction')) {
$label_tos = sprintf( t('I accept the %s for this website'), $toslink);
}
else {
- $age = get_config('system','minimum_age');
+ $age = Config::Get('system','minimum_age');
if(!$age) {
$age = 13;
}
$label_tos = sprintf( t('I am over %s years of age and accept the %s for this website'), $age, $toslink);
}
- $enable_tos = 1 - intval(get_config('system','no_termsofservice'));
+ $enable_tos = 1 - intval(Config::Get('system','no_termsofservice'));
- $auto_create = get_config('system', 'auto_channel_create', 1);
- $email_verify = get_config('system','verify_email');
+ $auto_create = Config::Get('system', 'auto_channel_create', 1);
+ $email_verify = Config::Get('system','verify_email');
$emailval = ((x($_REQUEST,'email')) ? strip_tags(trim($_REQUEST['email'])) : "");
$email = ['email',
@@ -506,13 +509,11 @@ class Register extends Controller {
$invite_code = array('invite_code', t('Please enter your invitation code'), ((x($_REQUEST,'invite_code')) ? strip_tags(trim($_REQUEST['invite_code'])) : ""));
$name = array('name', t('Your name'), ((x($_REQUEST,'name')) ? $_REQUEST['name'] : ''), t('Real name is preferred'), '', '', $duty['atform']);
- $nickhub = '@' . str_replace(array('http://','https://','/'), '', get_config('system','baseurl'));
+ $nickhub = '@' . str_replace(array('http://','https://','/'), '', Config::Get('system','baseurl'));
$nickname = array('nickname', t('Choose a short nickname'), ((x($_REQUEST,'nickname')) ? $_REQUEST['nickname'] : ''), t('Your nickname will be used to create an easy to remember channel address'), '', '', $duty['atform']);
$tos = array('tos', $label_tos, ((x($_REQUEST,'tos')) ? $_REQUEST['tos'] : ''), '', [t('No'),t('Yes')], $duty['atform']);
- $register_msg = ['register_msg', t('Why do you want to join this hub?'), ((x($_REQUEST,'register_msg')) ? $_REQUEST['register_msg'] : ''), t('This will help to review your registration')];
-
require_once('include/bbcode.php');
$o = replace_macros(get_markup_template('register.tpl'), array(
@@ -520,7 +521,7 @@ class Register extends Controller {
'$title' => t('Registration'),
'$reg_is' => $registration_is,
'$register_msg' => $register_msg,
- '$registertext' => bbcode(get_config('system','register_text')),
+ '$registertext' => bbcode(Config::Get('system','register_text')),
'$other_sites' => $other_sites,
'$msg' => $opal['msg'],
'$invitations' => $invitations,
@@ -551,7 +552,7 @@ class Register extends Controller {
// check against register, account
$rear = array( 'is' => false, 'rn' => 0, 'an' => 0, 'msg' => '' );
- $max_dailies = intval(get_config('system', 'max_daily_registrations', 50));
+ $max_dailies = intval(Config::Get('system', 'max_daily_registrations', 50));
if ($max_dailies) {
diff --git a/Zotlabs/Module/Rpost.php b/Zotlabs/Module/Rpost.php
index 23324ee3a..45f19d7e7 100644
--- a/Zotlabs/Module/Rpost.php
+++ b/Zotlabs/Module/Rpost.php
@@ -28,119 +28,31 @@ require_once('include/conversation.php');
* type= choices are 'html' or 'bbcode', default is 'bbcode'
*
*/
-
-
-
-
class Rpost extends \Zotlabs\Web\Controller {
- function get() {
-
- $o = '';
-
- if(! local_channel()) {
- if(remote_channel()) {
- // redirect to your own site.
- // We can only do this with a GET request so you'll need to keep the text short or risk getting truncated
- // by the wretched beast called 'suhosin'. All the browsers now allow long GET requests, but suhosin
- // blocks them.
-
- $url = Libzot::get_rpost_path(App::get_observer());
- // make sure we're not looping to our own hub
- if(($url) && (! stristr($url, App::get_hostname()))) {
- foreach($_GET as $key => $arg) {
- if($key === 'q')
- continue;
- $url .= '&' . $key . '=' . $arg;
- }
- goaway($url);
- }
- }
+ /**
+ * Handle requests.
+ *
+ * Despite it's name, this method handles both POST and GET requests
+ * to the module.
+ */
+ public function get(): string {
- // The login procedure is going to bugger our $_REQUEST variables
- // so save them in the session.
+ $channel_id = local_channel();
- if(array_key_exists('body',$_REQUEST)) {
- $_SESSION['rpost'] = $_REQUEST;
- }
- return login();
+ if(! $channel_id) {
+ return $this->redirect_or_login();
}
nav_set_selected('Post');
- if (local_channel() && array_key_exists('userfile',$_FILES)) {
-
- $channel = App::get_channel();
- $observer = App::get_observer();
-
- $def_album = get_pconfig($channel['channel_id'],'system','photo_path');
- $def_attach = get_pconfig($channel['channel_id'],'system','attach_path');
-
- $r = attach_store($channel, (($observer) ? $observer['xchan_hash'] : ''), '', [
- 'source' => 'editor',
- 'visible' => 0,
- 'album' => $def_album,
- 'directory' => $def_attach,
- 'flags' => 1, // indicates temporary permissions are created
- 'allow_cid' => '<' . $channel['channel_hash'] . '>',
- 'allow_gid' => '',
- 'deny_cid' => '',
- 'deny_gid' => ''
- ]);
-
- if (! $r['success']) {
- notice( $r['message'] . EOL);
- }
-
- $s = EMPTY_STR;
-
- if (intval($r['data']['is_photo'])) {
- $s .= "\n\n" . $r['body'] . "\n\n";
- }
-
- $url = z_root() . '/cloud/' . $channel['channel_address'] . '/' . $r['data']['display_path'];
-
- if (strpos($r['data']['filetype'],'video') === 0) {
- $s .= "\n\n" . '[zvideo]' . $url . '[/zvideo]' . "\n\n";
- }
-
- if (strpos($r['data']['filetype'],'audio') === 0) {
- $s .= "\n\n" . '[zaudio]' . $url . '[/zaudio]' . "\n\n";
- }
-
- if ($r['data']['filetype'] === 'image/svg+xml') {
- $x = @file_get_contents('store/' . $channel['channel_address'] . '/' . $r['data']['os_path']);
- if ($x) {
- $bb = svg2bb($x);
- if ($bb) {
- $s .= "\n\n" . $bb;
- }
- else {
- logger('empty return from svgbb');
- }
- }
- else {
- logger('unable to read svg data file: ' . 'store/' . $channel['channel_address'] . '/' . $r['data']['os_path']);
- }
- }
-
- if ($r['data']['filetype'] === 'text/calendar') {
- $content = @file_get_contents('store/' . $channel['channel_address'] . '/' . $r['data']['os_path']);
- if ($content) {
- $ev = ical_to_ev($content);
- if ($ev) {
- $s .= "\n\n" . format_event_bbcode($ev[0]) . "\n\n";
- }
- }
- }
-
- $s .= "\n\n" . '[attachment]' . $r['data']['hash'] . ',' . $r['data']['revision'] . '[/attachment]' . "\n";
- $_REQUEST['body'] = ((array_key_exists('body',$_REQUEST)) ? $_REQUEST['body'] . $s : $s);
+ if (! empty($_FILES['userfile'])) {
+ $this->handle_attachments();
}
// If we have saved rpost session variables, but nothing in the current $_REQUEST, recover the saved variables
- if((! array_key_exists('body',$_REQUEST)) && (array_key_exists('rpost',$_SESSION))) {
+ if((! array_key_exists('body',$_REQUEST)) && isset($_SESSION['rpost'])) {
$_REQUEST = $_SESSION['rpost'];
unset($_SESSION['rpost']);
}
@@ -152,21 +64,10 @@ class Rpost extends \Zotlabs\Web\Controller {
);
if($r) {
require_once('include/security.php');
- $change = change_channel($r[0]['channel_id']);
+ change_channel($r[0]['channel_id']);
}
}
- if(isset($_REQUEST['remote_return']) && $_REQUEST['remote_return']) {
- $_SESSION['remote_return'] = $_REQUEST['remote_return'];
- }
- if(argc() > 1 && argv(1) === 'return') {
- if($_SESSION['remote_return'])
- goaway($_SESSION['remote_return']);
- goaway(z_root() . '/network');
- }
-
- $plaintext = true;
-
if(isset($_REQUEST['type']) && $_REQUEST['type'] === 'html') {
require_once('include/html2bbcode.php');
$_REQUEST['body'] = html2bbcode($_REQUEST['body']);
@@ -197,12 +98,12 @@ class Rpost extends \Zotlabs\Web\Controller {
'permissions' => $channel_acl,
'bang' => '',
'visitor' => true,
- 'profile_uid' => local_channel(),
+ 'profile_uid' => $channel_id,
'title' => $_REQUEST['title'] ?? '',
'body' => $_REQUEST['body'] ?? '',
'attachment' => $_REQUEST['attachment'] ?? '',
'source' => ((x($_REQUEST,'source')) ? strip_tags($_REQUEST['source']) : ''),
- 'return_path' => 'rpost/return',
+ 'return_path' => 'hq',
'bbco_autocomplete' => 'bbcode',
'editor_autocomplete' => true,
'bbcode' => true,
@@ -210,19 +111,128 @@ class Rpost extends \Zotlabs\Web\Controller {
'reset' => t('Reset form')
);
- $a = '';
$editor = status_editor($x, false, 'Rpost');
- $o .= replace_macros(get_markup_template('edpost_head.tpl'), array(
+ return replace_macros(get_markup_template('edpost_head.tpl'), array(
'$title' => t('Edit post'),
'$cancel' => '',
- '$editor' => $editor
+ '$editor' => $editor,
+ '$delete' => null,
));
+ }
+
+ /**
+ * Redirect to the observer's instance if not local, or return login form.
+ *
+ * The request is saved in the session if there's a `body` request
+ * param present. (Otherwise not.)
+ *
+ * @return string A login form if not redirected. If the session was
+ * determned to belong to a remote channel, the function does not
+ * return.
+ */
+ private function redirect_or_login(): string {
+ if(remote_channel()) {
+ // redirect to your own site.
+ // We can only do this with a GET request so you'll need to keep the text short or risk getting truncated
+ // by the wretched beast called 'suhosin'. All the browsers now allow long GET requests, but suhosin
+ // blocks them.
+
+ $url = Libzot::get_rpost_path(App::get_observer());
+ // make sure we're not looping to our own hub
+ if(($url) && (! stristr($url, App::get_hostname()))) {
+ foreach($_GET as $key => $arg) {
+ if($key === 'q')
+ continue;
+ $url .= '&' . $key . '=' . $arg;
+ }
+ goaway($url);
+ }
+ }
- return $o;
+ // The login procedure is going to bugger our $_REQUEST variables
+ // so save them in the session.
+ if(array_key_exists('body',$_REQUEST)) {
+ $_SESSION['rpost'] = $_REQUEST;
+ }
+ return login();
}
+ /**
+ * Handle uplads of attachments in the rpost call.
+ *
+ * This is only relevant for POST requests.
+ *
+ * The function will modify the `$_REQUEST['body']` superglobal
+ * (or add it if it does not exist).
+ */
+ private function handle_attachments(): void {
+ $channel = App::get_channel();
+ $observer = App::get_observer();
+
+ $def_album = get_pconfig($channel['channel_id'],'system','photo_path');
+ $def_attach = get_pconfig($channel['channel_id'],'system','attach_path');
+
+ $r = attach_store($channel, (($observer) ? $observer['xchan_hash'] : ''), '', [
+ 'source' => 'editor',
+ 'visible' => 0,
+ 'album' => $def_album,
+ 'directory' => $def_attach,
+ 'flags' => 1, // indicates temporary permissions are created
+ 'allow_cid' => '<' . $channel['channel_hash'] . '>',
+ 'allow_gid' => '',
+ 'deny_cid' => '',
+ 'deny_gid' => ''
+ ]);
+
+ if (! $r['success']) {
+ notice( $r['message'] . EOL);
+ }
+
+ $s = EMPTY_STR;
+
+ if (intval($r['data']['is_photo'])) {
+ $s .= "\n\n" . $r['body'] . "\n\n";
+ }
+
+ $url = z_root() . '/cloud/' . $channel['channel_address'] . '/' . $r['data']['display_path'];
+ if (strpos($r['data']['filetype'],'video') === 0) {
+ $s .= "\n\n" . '[zvideo]' . $url . '[/zvideo]' . "\n\n";
+ }
+
+ if (strpos($r['data']['filetype'],'audio') === 0) {
+ $s .= "\n\n" . '[zaudio]' . $url . '[/zaudio]' . "\n\n";
+ }
+ if ($r['data']['filetype'] === 'image/svg+xml') {
+ $x = @file_get_contents('store/' . $channel['channel_address'] . '/' . $r['data']['os_path']);
+ if ($x) {
+ $bb = svg2bb($x);
+ if ($bb) {
+ $s .= "\n\n" . $bb;
+ }
+ else {
+ logger('empty return from svgbb');
+ }
+ }
+ else {
+ logger('unable to read svg data file: ' . 'store/' . $channel['channel_address'] . '/' . $r['data']['os_path']);
+ }
+ }
+
+ if ($r['data']['filetype'] === 'text/calendar') {
+ $content = @file_get_contents('store/' . $channel['channel_address'] . '/' . $r['data']['os_path']);
+ if ($content) {
+ $ev = ical_to_ev($content);
+ if ($ev) {
+ $s .= "\n\n" . format_event_bbcode($ev[0]) . "\n\n";
+ }
+ }
+ }
+
+ $s .= "\n\n" . '[attachment]' . $r['data']['hash'] . ',' . $r['data']['revision'] . '[/attachment]' . "\n";
+ $_REQUEST['body'] = ((array_key_exists('body',$_REQUEST)) ? $_REQUEST['body'] . $s : $s);
+ }
}
diff --git a/Zotlabs/Module/Search.php b/Zotlabs/Module/Search.php
index 9511c0389..3753e2a5f 100644
--- a/Zotlabs/Module/Search.php
+++ b/Zotlabs/Module/Search.php
@@ -3,11 +3,12 @@
namespace Zotlabs\Module;
use App;
-use Zotlabs\Lib\Libzot;
use Zotlabs\Lib\Activity;
use Zotlabs\Lib\ActivityStreams;
-use Zotlabs\Web\Controller;
+use Zotlabs\Lib\Config;
+use Zotlabs\Lib\Libzot;
use Zotlabs\Lib\Zotfinger;
+use Zotlabs\Web\Controller;
class Search extends Controller {
@@ -18,7 +19,7 @@ class Search extends Controller {
function get($update = 0, $load = false) {
- if ((get_config('system', 'block_public')) || (get_config('system', 'block_public_search'))) {
+ if ((Config::Get('system', 'block_public')) || (Config::Get('system', 'block_public_search'))) {
if ((!local_channel()) && (!remote_channel())) {
notice(t('Public access denied.') . EOL);
return;
diff --git a/Zotlabs/Module/Service_limits.php b/Zotlabs/Module/Service_limits.php
index 2a1f78054..aa27f7a9c 100644
--- a/Zotlabs/Module/Service_limits.php
+++ b/Zotlabs/Module/Service_limits.php
@@ -1,20 +1,20 @@
<?php
namespace Zotlabs\Module; /** @file */
-
+use Zotlabs\Lib\Config;
class Service_limits extends \Zotlabs\Web\Controller {
function get() {
-
+
if(! local_channel()) {
notice( t('Permission denied.') . EOL);
return;
}
-
+
$account = \App::get_account();
if($account['account_service_class']) {
- $x = get_config('service_class',$account['account_service_class']);
+ $x = Config::Get('service_class',$account['account_service_class']);
if($x) {
$o = print_r($x,true);
return $o;
@@ -22,7 +22,7 @@ class Service_limits extends \Zotlabs\Web\Controller {
}
return t('No service class restrictions found.');
}
-
-
-
+
+
+
}
diff --git a/Zotlabs/Module/Settings/Account.php b/Zotlabs/Module/Settings/Account.php
index 85e7c793f..0266cee12 100644
--- a/Zotlabs/Module/Settings/Account.php
+++ b/Zotlabs/Module/Settings/Account.php
@@ -2,6 +2,8 @@
namespace Zotlabs\Module\Settings;
+use Zotlabs\Lib\Config;
+
class Account {
function post() {
@@ -19,7 +21,7 @@ class Account {
if (strpos($email, '@') > 0) {
if(! validate_email($email))
$errs[] = t('Not valid email.');
- $adm = trim(get_config('system','admin_email'));
+ $adm = trim(Config::Get('system','admin_email'));
if(($adm) && (strcasecmp($email,$adm) == 0)) {
$errs[] = t('Protected email address. Cannot change to that email.');
$email = \App::$account['account_email'];
diff --git a/Zotlabs/Module/Settings/Channel.php b/Zotlabs/Module/Settings/Channel.php
index 1e0c2a2db..b46208879 100644
--- a/Zotlabs/Module/Settings/Channel.php
+++ b/Zotlabs/Module/Settings/Channel.php
@@ -7,6 +7,7 @@ use Zotlabs\Access\PermissionLimits;
use Zotlabs\Access\PermissionRoles;
use Zotlabs\Daemon\Master;
use Zotlabs\Lib\Apps;
+use Zotlabs\Lib\Config;
use Zotlabs\Lib\Libsync;
require_once('include/selectors.php');
@@ -183,11 +184,11 @@ class Channel {
$subdir = ((strlen(App::get_path())) ? '<br />' . t('or') . ' ' . z_root() . '/channel/' . $nickname : '');
$webbie = $nickname . '@' . App::get_hostname();
$intl_nickname = unpunify($nickname) . '@' . unpunify(App::get_hostname());
- $disable_discover_tab = intval(get_config('system', 'disable_discover_tab', 1)) == 1;
- $site_firehose = intval(get_config('system', 'site_firehose', 0)) == 1;
+ $disable_discover_tab = intval(Config::Get('system', 'disable_discover_tab', 1)) == 1;
+ $site_firehose = intval(Config::Get('system', 'site_firehose', 0)) == 1;
$expire = $channel['channel_expire_days'];
- $sys_expire = get_config('system', 'default_expire_days');
+ $sys_expire = Config::Get('system', 'default_expire_days');
$tpl_addr = get_markup_template("settings_nick_set.tpl");
$prof_addr = replace_macros($tpl_addr, [
diff --git a/Zotlabs/Module/Settings/Display.php b/Zotlabs/Module/Settings/Display.php
index ee9692014..a7fccea47 100644
--- a/Zotlabs/Module/Settings/Display.php
+++ b/Zotlabs/Module/Settings/Display.php
@@ -2,6 +2,7 @@
namespace Zotlabs\Module\Settings;
+use Zotlabs\Lib\Config;
use Zotlabs\Lib\Libsync;
class Display {
@@ -85,7 +86,7 @@ class Display {
$yes_no = array(t('No'),t('Yes'));
- $default_theme = get_config('system','theme');
+ $default_theme = Config::Get('system','theme');
if(! $default_theme)
$default_theme = 'redbasic';
@@ -95,7 +96,7 @@ class Display {
$theme = (($existing_theme) ? $existing_theme : $default_theme);
- $allowed_themes_str = get_config('system','allowed_themes');
+ $allowed_themes_str = Config::Get('system','allowed_themes');
$allowed_themes_raw = explode(',',$allowed_themes_str);
$allowed_themes = array();
if(count($allowed_themes_raw))
@@ -121,7 +122,7 @@ class Display {
$unsupported = file_exists('view/theme/' . $th . '/unsupported');
$is_library = file_exists('view/theme/'. $th . '/library');
- if (!$is_experimental or ($is_experimental && (get_config('experimentals','exp_themes')==1 or get_config('experimentals','exp_themes')===false))){
+ if (!$is_experimental or ($is_experimental && (Config::Get('experimentals','exp_themes')==1 or Config::Get('experimentals','exp_themes')===false))){
$theme_name = (($is_experimental) ? sprintf(t('%s - (Experimental)'), $f) : $f);
if (! $is_library) {
$themes[$f] = $theme_name;
diff --git a/Zotlabs/Module/Settings/Privacy.php b/Zotlabs/Module/Settings/Privacy.php
index 316b1306e..ed14fa94c 100644
--- a/Zotlabs/Module/Settings/Privacy.php
+++ b/Zotlabs/Module/Settings/Privacy.php
@@ -6,6 +6,7 @@ use App;
use Zotlabs\Access\PermissionLimits;
use Zotlabs\Access\Permissions;
use Zotlabs\Daemon\Master;
+use Zotlabs\Lib\Config;
use Zotlabs\Lib\Group;
use Zotlabs\Lib\Libsync;
@@ -81,7 +82,7 @@ class Privacy {
$help_txt = t('Advise: set to "Anybody on the internet" and use privacy groups to restrict access');
$limits = PermissionLimits::Get(local_channel());
- $anon_comments = get_config('system', 'anonymous_comments', true);
+ $anon_comments = Config::Get('system', 'anonymous_comments', true);
foreach ($global_perms as $k => $perm) {
$options = [];
diff --git a/Zotlabs/Module/Setup.php b/Zotlabs/Module/Setup.php
index 83faf85dc..35079e5e5 100644
--- a/Zotlabs/Module/Setup.php
+++ b/Zotlabs/Module/Setup.php
@@ -1,5 +1,4 @@
<?php
-namespace Zotlabs\Module;
/**
* @file Zotlabs/Module/Setup.php
*
@@ -8,10 +7,12 @@ namespace Zotlabs\Module;
* @todo This setup module could need some love and improvements.
*/
+namespace Zotlabs\Module;
+
+use Zotlabs\Lib\Config;
/**
- * @brief Initialisation for the setup module.
- *
+ * Controller for the initial setup/installation.
*/
class Setup extends \Zotlabs\Web\Controller {
@@ -45,9 +46,9 @@ class Setup extends \Zotlabs\Web\Controller {
}
if(x($_POST, 'pass')) {
- $this->install_wizard_pass = intval($_POST['pass']);
+ self::$install_wizard_pass = intval($_POST['pass']);
} else {
- $this->install_wizard_pass = 1;
+ self::$install_wizard_pass = 1;
}
}
@@ -57,7 +58,7 @@ class Setup extends \Zotlabs\Web\Controller {
*/
function post() {
- switch($this->install_wizard_pass) {
+ switch(self::$install_wizard_pass) {
case 1:
case 2:
return;
@@ -179,18 +180,18 @@ class Setup extends \Zotlabs\Web\Controller {
$install_title = t('$Projectname Server - Setup');
if(x(\App::$data, 'db_conn_failed')) {
- $this->install_wizard_pass = 2;
+ self::$install_wizard_pass = 2;
$wizard_status = t('Could not connect to database.');
}
if(x(\App::$data, 'url_fail')) {
- $this->install_wizard_pass = 3;
+ self::$install_wizard_pass = 3;
$wizard_status = t('Could not connect to specified site URL. Possible SSL certificate or DNS issue.');
if(\App::$data['url_error'])
$wizard_status .= ' ' . \App::$data['url_error'];
}
if(x(\App::$data, 'db_create_failed')) {
- $this->install_wizard_pass = 2;
+ self::$install_wizard_pass = 2;
$wizard_status = t('Could not create table.');
}
$db_return_text = '';
@@ -214,9 +215,11 @@ class Setup extends \Zotlabs\Web\Controller {
$tpl = get_markup_template('install.tpl');
return replace_macros($tpl, array(
'$title' => $install_title,
+ '$icon' => null,
'$pass' => '',
'$status' => t('Permission denied.'),
'$text' => '',
+ '$what_next' => null,
));
}
}
@@ -236,7 +239,7 @@ class Setup extends \Zotlabs\Web\Controller {
));
}
- switch ($this->install_wizard_pass){
+ switch (self::$install_wizard_pass){
case 1: { // System check
$checks = array();
@@ -392,7 +395,7 @@ class Setup extends \Zotlabs\Web\Controller {
$this->check_add($checks, t('PHP version'), false, true, $help);
}
- if(strlen($phpath)) {
+ if(!empty($phpath)) {
$passed = file_exists($phpath);
}
elseif(function_exists('shell_exec')) {
@@ -760,11 +763,11 @@ class Setup extends \Zotlabs\Web\Controller {
*/
function what_next() {
// install the standard theme
- set_config('system', 'allowed_themes', 'redbasic');
+ Config::Set('system', 'allowed_themes', 'redbasic');
// if imagick converter is installed, use it
if(@is_executable('/usr/bin/convert')) {
- set_config('system','imagick_convert_path','/usr/bin/convert');
+ Config::Set('system','imagick_convert_path','/usr/bin/convert');
}
@@ -783,7 +786,7 @@ class Setup extends \Zotlabs\Web\Controller {
$x = curl_version();
if(stristr($x['ssl_version'],'openssl'))
- set_config('system','curl_ssl_ciphers','ALL:!eNULL');
+ Config::Set('system','curl_ssl_ciphers','ALL:!eNULL');
// Create a system channel
require_once ('include/channel.php');
diff --git a/Zotlabs/Module/Siteinfo.php b/Zotlabs/Module/Siteinfo.php
index 18eb703a2..3cad64a13 100644
--- a/Zotlabs/Module/Siteinfo.php
+++ b/Zotlabs/Module/Siteinfo.php
@@ -1,6 +1,7 @@
<?php
namespace Zotlabs\Module;
+use Zotlabs\Lib\Config;
class Siteinfo extends \Zotlabs\Web\Controller {
@@ -22,18 +23,18 @@ class Siteinfo extends \Zotlabs\Web\Controller {
'$sitenametxt' => t('Site Name'),
'$sitename' => \Zotlabs\Lib\System::get_site_name(),
'$headline' => t('Site Information'),
- '$site_about' => bbcode(get_config('system','siteinfo')),
+ '$site_about' => bbcode(Config::Get('system','siteinfo')),
'$admin_headline' => t('Administrator'),
- '$admin_about' => bbcode(get_config('system','admininfo')),
+ '$admin_about' => bbcode(Config::Get('system','admininfo')),
'$terms' => t('Terms of Service'),
'$prj_header' => t('Software and Project information'),
'$prj_name' => t('This site is powered by $Projectname'),
- '$prj_transport' => t('Federated and decentralised networking and identity services provided by Zot'),
- '$transport_link' => '<a href="https://zotlabs.org">https://zotlabs.org</a>',
+ '$prj_transport' => t('Federated and decentralised networking and identity services provided by'),
+ '$transport_link' => '<a href="https://hubzilla.org">https://hubzilla.org</a>',
'$additional_text' => t('Additional federated transport protocols:'),
'$additional_fed' => implode(', ', $federated),
- '$prj_version' => ((get_config('system','hidden_version_siteinfo')) ? '' : sprintf( t('Version %s'), \Zotlabs\Lib\System::get_project_version())),
+ '$prj_version' => ((Config::Get('system','hidden_version_siteinfo')) ? '' : sprintf( t('Version %s'), \Zotlabs\Lib\System::get_project_version())),
'$prj_linktxt' => t('Project homepage'),
'$prj_srctxt' => t('Developer homepage'),
'$prj_link' => \Zotlabs\Lib\System::get_project_link(),
diff --git a/Zotlabs/Module/Sources.php b/Zotlabs/Module/Sources.php
index ef665e727..177ae1f1a 100644
--- a/Zotlabs/Module/Sources.php
+++ b/Zotlabs/Module/Sources.php
@@ -3,6 +3,7 @@ namespace Zotlabs\Module; /** @file */
use App;
use Zotlabs\Lib\Apps;
+use Zotlabs\Lib\Text;
use Zotlabs\Web\Controller;
class Sources extends Controller {
@@ -15,13 +16,12 @@ class Sources extends Controller {
return;
$source = intval($_REQUEST['source']);
- $xchan = escape_tags($_REQUEST['xchan']);
+ $xchan = ((isset($_REQUEST['xchan'])) ? Text::escape_tags($_REQUEST['xchan']) : '');
$abook = intval($_REQUEST['abook']);
- $words = escape_tags($_REQUEST['words']);
+ $words = ((isset($_REQUEST['words'])) ? Text::escape_tags($_REQUEST['words']) : '');
$resend = intval($_REQUEST['resend']);
- $frequency = $_REQUEST['frequency'];
- $name = escape_tags($_REQUEST['name']);
- $tags = escape_tags($_REQUEST['tags']);
+ $name = ((isset($_REQUEST['name'])) ? Text::escape_tags($_REQUEST['name']) : '');
+ $tags = ((isset($_REQUEST['tags'])) ? Text::escape_tags($_REQUEST['tags']) : '');
$channel = \App::get_channel();
diff --git a/Zotlabs/Module/Sse.php b/Zotlabs/Module/Sse.php
index 8b46dcafd..5baa90128 100644
--- a/Zotlabs/Module/Sse.php
+++ b/Zotlabs/Module/Sse.php
@@ -4,6 +4,7 @@ namespace Zotlabs\Module;
use App;
use Zotlabs\Lib\Apps;
+use Zotlabs\Lib\Config;
use Zotlabs\Web\Controller;
use Zotlabs\Lib\Enotify;
use Zotlabs\Lib\XConfig;
@@ -22,7 +23,7 @@ class Sse extends Controller {
killme();
}
- if(! intval(get_config('system','open_pubstream',1))) {
+ if(! intval(Config::Get('system','open_pubstream',1))) {
if(! get_observer_hash()) {
killme();
}
@@ -52,7 +53,7 @@ class Sse extends Controller {
$sleep = 1000000; // microseconds
- self::$sse_enabled = get_config('system', 'sse_enabled', 0);
+ self::$sse_enabled = Config::Get('system', 'sse_enabled', 0);
if(self::$sse_enabled) {
diff --git a/Zotlabs/Module/Sse_bs.php b/Zotlabs/Module/Sse_bs.php
index 9fb295c4b..09c4ed614 100644
--- a/Zotlabs/Module/Sse_bs.php
+++ b/Zotlabs/Module/Sse_bs.php
@@ -4,6 +4,7 @@ namespace Zotlabs\Module;
use App;
use Zotlabs\Lib\Apps;
+use Zotlabs\Lib\Config;
use Zotlabs\Web\Controller;
use Zotlabs\Lib\Enotify;
use Zotlabs\Lib\XConfig;
@@ -424,7 +425,7 @@ class Sse_bs extends Controller {
return $result;
}
- if(! intval(get_config('system','open_pubstream',1))) {
+ if(! intval(Config::Get('system','open_pubstream',1))) {
if(! get_observer_hash()) {
$result['pubs']['offset'] = -1;
return $result;
@@ -459,7 +460,7 @@ class Sse_bs extends Controller {
$uids = " AND uid IN ( " . $sys['channel_id'] . " ) ";
- $site_firehose = get_config('system', 'site_firehose', 0);
+ $site_firehose = Config::Get('system', 'site_firehose', 0);
if($site_firehose) {
$uids = " AND uid IN ( " . stream_perms_api_uids(PERMS_PUBLIC) . " ) AND item_private = 0 AND item_wall = 1 ";
}
@@ -589,6 +590,7 @@ class Sse_bs extends Controller {
if($forums) {
$item_normal = item_normal();
+ $p_sql = '';
$sql_extra = '';
if(! (self::$vnotify & VNOTIFY_LIKE))
@@ -598,6 +600,7 @@ class Sse_bs extends Controller {
$i = 0;
for($x = 0; $x < $fcount; $x ++) {
+ /*
$p = q("SELECT oid AS parent FROM term WHERE uid = %d AND ttype = %d AND term = '%s'",
intval(self::$uid),
intval(TERM_FORUM),
@@ -606,14 +609,16 @@ class Sse_bs extends Controller {
$p_str = ids_to_querystr($p, 'parent');
$p_sql = (($p_str) ? "OR parent IN ( $p_str )" : '');
+ */
$r = q("select count(*) as total from item
- where uid = %d and ( owner_xchan = '%s' OR author_xchan = '%s' $p_sql ) and item_unseen = 1 $sql_extra $item_normal",
+ where uid = %d and ( owner_xchan = '%s' OR author_xchan = '%s' $p_sql ) and verb != 'Announce' and item_unseen = 1 $sql_extra $item_normal",
intval(self::$uid),
dbesc($forums[$x]['xchan_hash']),
dbesc($forums[$x]['xchan_hash'])
);
+
if($r[0]['total']) {
$forums[$x]['notify_link'] = z_root() . '/network/?f=&pf=1&unseen=1&cid=' . $forums[$x]['abook_id'];
@@ -732,7 +737,7 @@ class Sse_bs extends Controller {
if(! self::$uid && ! is_site_admin())
return $result;
- $policy = intval(get_config('system','register_policy'));
+ $policy = intval(Config::Get('system','register_policy'));
if(($policy & REGISTER_APPROVE) != REGISTER_APPROVE)
return $result;
diff --git a/Zotlabs/Module/Toggle_mobile.php b/Zotlabs/Module/Toggle_mobile.php
deleted file mode 100644
index 9d90c0821..000000000
--- a/Zotlabs/Module/Toggle_mobile.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-namespace Zotlabs\Module;
-
-
-class Toggle_mobile extends \Zotlabs\Web\Controller {
-
- function init() {
-
- if(isset($_GET['off']))
- $_SESSION['show_mobile'] = false;
- else
- $_SESSION['show_mobile'] = true;
-
- if(isset($_GET['address']))
- $address = $_GET['address'];
- else
- $address = z_root();
-
- goaway($address);
- }
-
-
-}
diff --git a/Zotlabs/Module/Toggle_safesearch.php b/Zotlabs/Module/Toggle_safesearch.php
deleted file mode 100644
index 2e9bc2575..000000000
--- a/Zotlabs/Module/Toggle_safesearch.php
+++ /dev/null
@@ -1,31 +0,0 @@
-<?php
-namespace Zotlabs\Module;
-
-
-class Toggle_safesearch extends \Zotlabs\Web\Controller {
-
- function init() {
-
- $observer = get_observer_hash();
- if (! $observer)
- return;
-
- if($observer)
- $safe_mode = get_xconfig($observer,'directory','safe_mode');
- if ($safe_mode == '')
- set_xconfig($observer,'directory','safe_mode', '0');
- elseif($safe_mode == '0')
- set_xconfig($observer,'directory','safe_mode', '1');
- elseif($safe_mode == '1')
- set_xconfig($observer,'directory','safe_mode', '0');
-
- if(isset($_GET['address']))
- $address = $_GET['address'];
- else
- $address = z_root() . '/directory';
-
- goaway($address);
- }
-
-
-}
diff --git a/Zotlabs/Module/Wall_attach.php b/Zotlabs/Module/Wall_attach.php
index 0d5c9e983..3c57d4b94 100644
--- a/Zotlabs/Module/Wall_attach.php
+++ b/Zotlabs/Module/Wall_attach.php
@@ -104,32 +104,32 @@ class Wall_attach extends \Zotlabs\Web\Controller {
}
if(intval($r['data']['is_photo'])) {
- $s = "\n\n" . $r['body'] . "\n\n";
+ $s = $r['body'];
}
else {
- if(strpos($r['data']['filetype'],'video') === 0) {
+ if(strpos($r['data']['filetype'], 'video') === 0) {
// give a wee bit of time for the background thumbnail processor to do its thing
// or else we'll never see a video poster
sleep(3);
$url = z_root() . '/cloud/' . $channel['channel_address'] . '/' . $r['data']['display_path'];
$thumb = Linkinfo::get_video_poster($url);
if($thumb) {
- $s = "\n\n" . '[zvideo poster=\'' . $thumb . '\']' . $url . '[/zvideo]' . "\n\n";
+ $s = '[zvideo poster=\'' . $thumb . '\']' . $url . '[/zvideo]';
}
else {
- $s = "\n\n" . '[zvideo]' . $url . '[/zvideo]' . "\n\n";
+ $s = '[zvideo]' . $url . '[/zvideo]';
}
}
if(strpos($r['data']['filetype'],'audio') === 0) {
$url = z_root() . '/cloud/' . $channel['channel_address'] . '/' . $r['data']['display_path'];
- $s = "\n\n" . '[zaudio]' . $url . '[/zaudio]' . "\n\n";
+ $s = '[zaudio]' . $url . '[/zaudio]';
}
if ($r['data']['filetype'] === 'image/svg+xml') {
$x = @file_get_contents('store/' . $channel['channel_address'] . '/' . $r['data']['os_path']);
if ($x) {
$bb = svg2bb($x);
if ($bb) {
- $s .= "\n\n" . $bb;
+ $s .= $bb;
}
else {
logger('empty return from svgbb');
@@ -140,7 +140,7 @@ class Wall_attach extends \Zotlabs\Web\Controller {
}
}
- $s .= "\n\n" . '[attachment]' . $r['data']['hash'] . ',' . $r['data']['revision'] . '[/attachment]' . "\n";
+ $s .= '[attachment]' . $r['data']['hash'] . ',' . $r['data']['revision'] . '[/attachment]';
}
$sync = attach_export_data($channel,$r['data']['hash']);
diff --git a/Zotlabs/Module/Well_known.php b/Zotlabs/Module/Well_known.php
index 9cc31a7d3..a90397d2f 100644
--- a/Zotlabs/Module/Well_known.php
+++ b/Zotlabs/Module/Well_known.php
@@ -1,6 +1,7 @@
<?php
namespace Zotlabs\Module;
+use Zotlabs\Lib\Config;
class Well_known extends \Zotlabs\Web\Controller {
@@ -21,7 +22,7 @@ class Well_known extends \Zotlabs\Web\Controller {
// Note: Your web server must be configured to create this variable. For example in Apache
// you'll need HostnameLookups On inside httpd.conf for it to exist. See also gethostbyaddr().
- if(get_config('system','siteallowed_remote_host') && (! check_siteallowed($_SERVER['REMOTE_HOST']))) {
+ if(Config::Get('system','siteallowed_remote_host') && (! check_siteallowed($_SERVER['REMOTE_HOST']))) {
logger('well_known: site not allowed. ' . $_SERVER['REMOTE_HOST']);
killme();
}
diff --git a/Zotlabs/Module/Wfinger.php b/Zotlabs/Module/Wfinger.php
index 43b039530..42dcf240f 100644
--- a/Zotlabs/Module/Wfinger.php
+++ b/Zotlabs/Module/Wfinger.php
@@ -1,6 +1,7 @@
<?php
namespace Zotlabs\Module;
+use Zotlabs\Lib\Config;
use Zotlabs\Lib\Keyutils;
use Zotlabs\Lib\Libzot;
@@ -88,7 +89,7 @@ class Wfinger extends \Zotlabs\Web\Controller {
if($root_resource) {
$result['subject'] = $resource;
$result['properties'] = [
- 'https://w3id.org/security/v1#publicKeyPem' => get_config('system','pubkey')
+ 'https://w3id.org/security/v1#publicKeyPem' => Config::Get('system','pubkey')
];
$result['links'] = [
[
diff --git a/Zotlabs/Photo/PhotoDriver.php b/Zotlabs/Photo/PhotoDriver.php
index fc34f87a9..e8b42ec1b 100644
--- a/Zotlabs/Photo/PhotoDriver.php
+++ b/Zotlabs/Photo/PhotoDriver.php
@@ -2,6 +2,7 @@
namespace Zotlabs\Photo;
+use Zotlabs\Lib\Config;
use Zotlabs\Lib\Hashpath;
/**
@@ -443,7 +444,7 @@ abstract class PhotoDriver {
$p['display_path'] = $arr['display_path'] ?? '';
$p['width'] = $arr['width'] ?? $this->getWidth();
$p['height'] = $arr['height'] ?? $this->getHeight();
- $p['expires'] = $arr['expires'] ?? gmdate('Y-m-d H:i:s', time() + get_config('system', 'photo_cache_time', 86400));
+ $p['expires'] = $arr['expires'] ?? gmdate('Y-m-d H:i:s', time() + Config::Get('system', 'photo_cache_time', 86400));
$p['profile'] = $arr['profile'] ?? 0;
if(! intval($p['imgscale']))
@@ -508,7 +509,7 @@ abstract class PhotoDriver {
$arr['imgscale'] = $scale;
- if(boolval(get_config('system','photo_storage_type', 1))) {
+ if(boolval(Config::Get('system','photo_storage_type', 1))) {
$arr['os_storage'] = 1;
diff --git a/Zotlabs/Photo/PhotoGd.php b/Zotlabs/Photo/PhotoGd.php
index 6854be0ab..4a47f97ee 100644
--- a/Zotlabs/Photo/PhotoGd.php
+++ b/Zotlabs/Photo/PhotoGd.php
@@ -2,6 +2,8 @@
namespace Zotlabs\Photo;
+use Zotlabs\Lib\Config;
+
/**
* @brief GD photo driver.
*
@@ -157,14 +159,14 @@ class PhotoGd extends PhotoDriver {
switch($this->getType()){
case 'image/png':
- $quality = get_config('system', 'png_quality');
+ $quality = Config::Get('system', 'png_quality');
if((! $quality) || ($quality > 9))
$quality = PNG_QUALITY;
\imagepng($this->image, NULL, $quality);
break;
case 'image/webp':
- $quality = get_config('system', 'webp_quality');
+ $quality = Config::Get('system', 'webp_quality');
if((! $quality) || ($quality > 100))
$quality = WEBP_QUALITY;
\imagewebp($this->image, NULL, $quality);
@@ -174,7 +176,7 @@ class PhotoGd extends PhotoDriver {
// gd can lack imagejpeg(), but we verify during installation it is available
default:
- $quality = get_config('system', 'jpeg_quality');
+ $quality = Config::Get('system', 'jpeg_quality');
if((! $quality) || ($quality > 100))
$quality = JPEG_QUALITY;
\imagejpeg($this->image, NULL, $quality);
diff --git a/Zotlabs/Photo/PhotoImagick.php b/Zotlabs/Photo/PhotoImagick.php
index 0a08d19e6..59f276480 100644
--- a/Zotlabs/Photo/PhotoImagick.php
+++ b/Zotlabs/Photo/PhotoImagick.php
@@ -2,6 +2,8 @@
namespace Zotlabs\Photo;
+use Zotlabs\Lib\Config;
+
/**
* @brief ImageMagick photo driver.
*/
@@ -57,7 +59,7 @@ class PhotoImagick extends PhotoDriver {
switch($this->getType()) {
case 'image/png':
- $quality = get_config('system', 'png_quality');
+ $quality = Config::Get('system', 'png_quality');
if((! $quality) || ($quality > 9))
$quality = PNG_QUALITY;
/*
@@ -73,14 +75,14 @@ class PhotoImagick extends PhotoDriver {
break;
case 'image/jpeg':
- $quality = get_config('system', 'jpeg_quality');
+ $quality = Config::Get('system', 'jpeg_quality');
if((! $quality) || ($quality > 100))
$quality = JPEG_QUALITY;
$this->image->setCompressionQuality($quality);
break;
case 'image/webp':
- $quality = get_config('system', 'webp_quality');
+ $quality = Config::Get('system', 'webp_quality');
if((! $quality) || ($quality > 100))
$quality = WEBP_QUALITY;
$this->image->setCompressionQuality($quality);
diff --git a/Zotlabs/Render/Comanche.php b/Zotlabs/Render/Comanche.php
index 7288c7fd7..ba0d77c39 100644
--- a/Zotlabs/Render/Comanche.php
+++ b/Zotlabs/Render/Comanche.php
@@ -2,6 +2,8 @@
namespace Zotlabs\Render;
+use Zotlabs\Lib\Config;
+
require_once('include/security.php');
require_once('include/menu.php');
@@ -157,7 +159,7 @@ class Comanche {
* @brief Replace conditional variables with real values.
*
* Currently supported condition variables:
- * * $config.xxx.yyy - get_config with cat = xxx and k = yyy
+ * * $config.xxx.yyy - Config::Get with cat = xxx and k = yyy
* * $request - request uri for this page
* * $observer.language - viewer's preferred language (closest match)
* * $observer.address - xchan_addr or false
@@ -172,7 +174,7 @@ class Comanche {
if($v) {
$x = explode('.', $v);
if($x[0] == 'config')
- return get_config($x[1],$x[2]);
+ return Config::Get($x[1],$x[2]);
elseif($x[0] === 'request')
return $_SERVER['REQUEST_URI'];
elseif($x[0] === 'local_channel') {
@@ -208,18 +210,18 @@ class Comanche {
*
* This is extensible. The first version of variable testing supports tests of the forms:
*
- * - [if $config.system.foo ~= baz] which will check if get_config('system','foo') contains the string 'baz';
- * - [if $config.system.foo == baz] which will check if get_config('system','foo') is the string 'baz';
- * - [if $config.system.foo != baz] which will check if get_config('system','foo') is not the string 'baz';
- * - [if $config.system.foo >= 3] which will check if get_config('system','foo') is greater than or equal to 3;
- * - [if $config.system.foo > 3] which will check if get_config('system','foo') is greater than 3;
- * - [if $config.system.foo <= 3] which will check if get_config('system','foo') is less than or equal to 3;
- * - [if $config.system.foo < 3] which will check if get_config('system','foo') is less than 3;
+ * - [if $config.system.foo ~= baz] which will check if Config::Get('system','foo') contains the string 'baz';
+ * - [if $config.system.foo == baz] which will check if Config::Get('system','foo') is the string 'baz';
+ * - [if $config.system.foo != baz] which will check if Config::Get('system','foo') is not the string 'baz';
+ * - [if $config.system.foo >= 3] which will check if Config::Get('system','foo') is greater than or equal to 3;
+ * - [if $config.system.foo > 3] which will check if Config::Get('system','foo') is greater than 3;
+ * - [if $config.system.foo <= 3] which will check if Config::Get('system','foo') is less than or equal to 3;
+ * - [if $config.system.foo < 3] which will check if Config::Get('system','foo') is less than 3;
*
- * - [if $config.system.foo {} baz] which will check if 'baz' is an array element in get_config('system','foo')
- * - [if $config.system.foo {*} baz] which will check if 'baz' is an array key in get_config('system','foo')
- * - [if $config.system.foo] which will check for a return of a true condition for get_config('system','foo');
- * - [if !$config.system.foo] which will check for a return of a false condition for get_config('system','foo');
+ * - [if $config.system.foo {} baz] which will check if 'baz' is an array element in Config::Get('system','foo')
+ * - [if $config.system.foo {*} baz] which will check if 'baz' is an array key in Config::Get('system','foo')
+ * - [if $config.system.foo] which will check for a return of a true condition for Config::Get('system','foo');
+ * - [if !$config.system.foo] which will check for a return of a false condition for Config::Get('system','foo');
*
* The values 0, '', an empty array, and an unset value will all evaluate to false.
*
diff --git a/Zotlabs/Render/SmartyInterface.php b/Zotlabs/Render/SmartyInterface.php
index d80ea3f3a..64c6aa377 100644
--- a/Zotlabs/Render/SmartyInterface.php
+++ b/Zotlabs/Render/SmartyInterface.php
@@ -20,7 +20,7 @@ class SmartyInterface extends Smarty {
$template_dirs = array('theme' => "view/theme/$thname/tpl/");
if ( x(App::$theme_info,"extends") ) {
- $template_dirs = $template_dirs + array('extends' => "view/theme/" . \App::$theme_info["extends"] . "/tpl/");
+ $template_dirs = $template_dirs + array('extends' => "view/theme/" . App::$theme_info["extends"] . "/tpl/");
}
$template_dirs = $template_dirs + array('base' => 'view/tpl/');
$this->setTemplateDir($template_dirs);
diff --git a/Zotlabs/Render/SmartyTemplate.php b/Zotlabs/Render/SmartyTemplate.php
index 2cb96521b..79f03637b 100644
--- a/Zotlabs/Render/SmartyTemplate.php
+++ b/Zotlabs/Render/SmartyTemplate.php
@@ -11,7 +11,7 @@ class SmartyTemplate implements TemplateEngine {
public function __construct() {
- // Cannot use get_config() here because it is called during installation when there is no DB.
+ // Cannot use Config::Get() here because it is called during installation when there is no DB.
// FIXME: this may leak private information such as system pathnames.
$basecompiledir = ((array_key_exists('smarty3_folder', App::$config['system']))
diff --git a/Zotlabs/Render/Theme.php b/Zotlabs/Render/Theme.php
index 543bf7a3f..a42b65e03 100644
--- a/Zotlabs/Render/Theme.php
+++ b/Zotlabs/Render/Theme.php
@@ -24,7 +24,7 @@ class Theme {
*
* @return array
*/
- static public function current(){
+ static public function current() {
self::$system_theme = ((isset(App::$config['system']['theme']))
? App::$config['system']['theme'] : '');
@@ -37,7 +37,7 @@ class Theme {
if(App::$profile_uid) {
$r = q("select channel_theme from channel where channel_id = %d limit 1",
- intval(\App::$profile_uid)
+ intval(App::$profile_uid)
);
if($r) {
$page_theme = $r[0]['channel_theme'];
@@ -46,7 +46,7 @@ class Theme {
// Themes from Comanche layouts over-ride the channel theme
- if(array_key_exists('theme', \App::$layout) && \App::$layout['theme']) {
+ if(array_key_exists('theme', App::$layout) && App::$layout['theme']) {
$page_theme = App::$layout['theme'];
}
diff --git a/Zotlabs/Storage/Browser.php b/Zotlabs/Storage/Browser.php
index 912b4442d..e7f71c8c8 100644
--- a/Zotlabs/Storage/Browser.php
+++ b/Zotlabs/Storage/Browser.php
@@ -4,6 +4,7 @@ namespace Zotlabs\Storage;
use Sabre\DAV;
use App;
+use Zotlabs\Lib\Config;
/**
* @brief Provides a DAV frontend for the webbrowser.
@@ -101,7 +102,7 @@ class Browser extends DAV\Browser\Plugin {
$folder_list = attach_folder_select_list($channel_id);
- $siteroot_disabled = get_config('system', 'cloud_disable_siteroot');
+ $siteroot_disabled = Config::Get('system', 'cloud_disable_siteroot');
$is_root_folder = (($path === 'cloud/' . $nick) ? true : false);
$parent_path = '';
@@ -210,7 +211,7 @@ class Browser extends DAV\Browser\Plugin {
// types
$photo_icon = '';
- $preview_style = intval(get_config('system','thumbnail_security',0));
+ $preview_style = intval(Config::Get('system','thumbnail_security',0));
$is_creator = (($data['creator'] === get_observer_hash()) ? true : false);
@@ -474,7 +475,7 @@ class Browser extends DAV\Browser\Plugin {
$limit = engr_units_to_bytes(service_class_fetch($this->auth->owner_id, 'attach_upload_limit'));
}
- if((! $limit) && get_config('system','cloud_report_disksize')) {
+ if((! $limit) && Config::Get('system','cloud_report_disksize')) {
$limit = engr_units_to_bytes(disk_free_space('store'));
}
diff --git a/Zotlabs/Storage/Directory.php b/Zotlabs/Storage/Directory.php
index 333251f69..a68fdcf26 100644
--- a/Zotlabs/Storage/Directory.php
+++ b/Zotlabs/Storage/Directory.php
@@ -3,6 +3,7 @@
namespace Zotlabs\Storage;
use Sabre\DAV;
+use Zotlabs\Lib\Config;
use Zotlabs\Lib\Libsync;
/**
@@ -89,7 +90,7 @@ class Directory extends DAV\Node implements DAV\ICollection, DAV\IQuota, DAV\IMo
logger('children for ' . $this->ext_path, LOGGER_DATA);
$this->log();
- if (get_config('system', 'block_public') && (! $this->auth->channel_id) && (! $this->auth->observer)) {
+ if (Config::Get('system', 'block_public') && (! $this->auth->channel_id) && (! $this->auth->observer)) {
throw new DAV\Exception\Forbidden('Permission denied.');
}
@@ -111,7 +112,7 @@ class Directory extends DAV\Node implements DAV\ICollection, DAV\IQuota, DAV\IMo
public function getChild($name) {
logger($name, LOGGER_DATA);
- if (get_config('system', 'block_public') && (! $this->auth->channel_id) && (! $this->auth->observer)) {
+ if (Config::Get('system', 'block_public') && (! $this->auth->channel_id) && (! $this->auth->observer)) {
throw new DAV\Exception\Forbidden('Permission denied.');
}
@@ -360,7 +361,7 @@ class Directory extends DAV\Node implements DAV\ICollection, DAV\IQuota, DAV\IMo
intval($c[0]['channel_id'])
);
- $maxfilesize = get_config('system', 'maxfilesize');
+ $maxfilesize = Config::Get('system', 'maxfilesize');
if (($maxfilesize) && ($size > $maxfilesize)) {
attach_delete($c[0]['channel_id'], $hash);
return;
@@ -776,7 +777,7 @@ class Directory extends DAV\Node implements DAV\ICollection, DAV\IQuota, DAV\IMo
function ChannelList(&$auth) {
$ret = [];
- if (intval(get_config('system','cloud_disable_siteroot'))) {
+ if (intval(Config::Get('system','cloud_disable_siteroot'))) {
return $ret;
}
diff --git a/Zotlabs/Storage/File.php b/Zotlabs/Storage/File.php
index ff379e2e9..642dd4515 100644
--- a/Zotlabs/Storage/File.php
+++ b/Zotlabs/Storage/File.php
@@ -3,6 +3,7 @@
namespace Zotlabs\Storage;
use Sabre\DAV;
+use Zotlabs\Lib\Config;
use Zotlabs\Lib\Libsync;
/**
@@ -240,7 +241,7 @@ class File extends DAV\Node implements DAV\IFile {
// There is an Exception "InsufficientStorage" or "PaymentRequired" for
// our service class from SabreDAV we could use.
- $maxfilesize = get_config('system', 'maxfilesize');
+ $maxfilesize = Config::Get('system', 'maxfilesize');
if (($maxfilesize) && ($size > $maxfilesize)) {
attach_delete($c[0]['channel_id'], $this->data['hash']);
return;
diff --git a/Zotlabs/Thumbs/Pdf.php b/Zotlabs/Thumbs/Pdf.php
index 6f9111ed3..52afc09a3 100644
--- a/Zotlabs/Thumbs/Pdf.php
+++ b/Zotlabs/Thumbs/Pdf.php
@@ -2,6 +2,7 @@
namespace Zotlabs\Thumbs;
+use Zotlabs\Lib\Config;
class Pdf {
@@ -29,7 +30,7 @@ class Pdf {
fclose($ostream);
}
- $imagick_path = get_config('system','imagick_convert_path');
+ $imagick_path = Config::Get('system','imagick_convert_path');
if($imagick_path && @file_exists($imagick_path)) {
$cmd = $imagick_path . ' ' . escapeshellarg(PROJECT_BASE . '/' . $tmpfile . '[0]') . ' -resize ' . $width . 'x' . $height . ' ' . escapeshellarg(PROJECT_BASE . '/' . $outfile);
// logger('imagick thumbnail command: ' . $cmd);
diff --git a/Zotlabs/Thumbs/Video.php b/Zotlabs/Thumbs/Video.php
index 9df27d703..1da500370 100644
--- a/Zotlabs/Thumbs/Video.php
+++ b/Zotlabs/Thumbs/Video.php
@@ -2,6 +2,7 @@
namespace Zotlabs\Thumbs;
+use Zotlabs\Lib\Config;
class Video {
@@ -47,7 +48,7 @@ class Video {
logger('ffmpeg not found in path. Video thumbnails may fail.');
}
- $imagick_path = get_config('system','imagick_convert_path');
+ $imagick_path = Config::Get('system','imagick_convert_path');
if($imagick_path && @file_exists($imagick_path)) {
$cmd = $imagick_path . ' ' . escapeshellarg(PROJECT_BASE . '/' . $tmpfile . '[0]') . ' -resize ' . $width . 'x' . $height . ' ' . escapeshellarg(PROJECT_BASE . '/' . $outfile);
// logger('imagick thumbnail command: ' . $cmd);
diff --git a/Zotlabs/Update/_1103.php b/Zotlabs/Update/_1103.php
index 3f9a9286c..a32c81fe9 100644
--- a/Zotlabs/Update/_1103.php
+++ b/Zotlabs/Update/_1103.php
@@ -2,13 +2,15 @@
namespace Zotlabs\Update;
+use Zotlabs\Lib\Config;
+
class _1103 {
function run() {
$x = curl_version();
if(stristr($x['ssl_version'],'openssl'))
- set_config('system','curl_ssl_ciphers','ALL:!eNULL');
+ Config::Set('system','curl_ssl_ciphers','ALL:!eNULL');
return UPDATE_SUCCESS;
}
-} \ No newline at end of file
+}
diff --git a/Zotlabs/Update/_1226.php b/Zotlabs/Update/_1226.php
index 6e5a0e319..526fc867b 100644
--- a/Zotlabs/Update/_1226.php
+++ b/Zotlabs/Update/_1226.php
@@ -2,6 +2,7 @@
namespace Zotlabs\Update;
+use Zotlabs\Lib\Config;
use Zotlabs\Lib\Libzot;
class _1226 {
@@ -17,7 +18,7 @@ class _1226 {
$r = ($r1 && $r2);
}
else {
- $r = q("ALTER TABLE `channel` ADD `channel_portable_id` char(191) NOT NULL DEFAULT '' ,
+ $r = q("ALTER TABLE `channel` ADD `channel_portable_id` char(191) NOT NULL DEFAULT '' ,
ADD INDEX `channel_portable_id` (`channel_portable_id`)");
}
@@ -52,7 +53,7 @@ class _1226 {
$rec['xchan_hash'] = $zhash;
$rec['xchan_guid_sig'] = 'sha256.' . $rec['xchan_guid_sig'];
$rec['xchan_network'] = 'zot6';
-
+
xchan_store_lowlevel($rec);
}
$x = q("select * from hubloc where hubloc_hash = '%s' and hubloc_url = '%s' limit 1",
@@ -67,7 +68,7 @@ class _1226 {
$rec['hubloc_url_sig'] = 'sha256.' . $rec['hubloc_url_sig'];
$rec['hubloc_callback'] = z_root() . '/zot';
$rec['hubloc_id_url'] = channel_url($rv);
- $rec['hubloc_site_id'] = Libzot::make_xchan_hash(z_root(),get_config('system','pubkey'));
+ $rec['hubloc_site_id'] = Libzot::make_xchan_hash(z_root(),Config::Get('system','pubkey'));
hubloc_store_lowlevel($rec);
}
}
diff --git a/Zotlabs/Update/_1236.php b/Zotlabs/Update/_1236.php
index e57338e16..b5bfdaad8 100644
--- a/Zotlabs/Update/_1236.php
+++ b/Zotlabs/Update/_1236.php
@@ -2,15 +2,16 @@
namespace Zotlabs\Update;
+use Zotlabs\Lib\Config;
use Zotlabs\Lib\Libzot;
class _1236 {
function run() {
-
- $r = q("SELECT channel.channel_address, channel.channel_hash, xchan.xchan_guid, channel.channel_pubkey, channel.channel_portable_id FROM channel
- LEFT JOIN xchan ON channel_hash = xchan_hash
- WHERE xchan.xchan_network = 'zot'
+
+ $r = q("SELECT channel.channel_address, channel.channel_hash, xchan.xchan_guid, channel.channel_pubkey, channel.channel_portable_id FROM channel
+ LEFT JOIN xchan ON channel_hash = xchan_hash
+ WHERE xchan.xchan_network = 'zot'
AND channel.channel_removed = 0"
);
@@ -102,7 +103,7 @@ class _1236 {
$rec['hubloc_url_sig'] = 'sha256.' . $rec['hubloc_url_sig'];
$rec['hubloc_callback'] = z_root() . '/zot';
$rec['hubloc_id_url'] = channel_url($rr);
- $rec['hubloc_site_id'] = Libzot::make_xchan_hash(z_root(),get_config('system','pubkey'));
+ $rec['hubloc_site_id'] = Libzot::make_xchan_hash(z_root(),Config::Get('system','pubkey'));
$hubloc = hubloc_store_lowlevel($rec);
}
diff --git a/Zotlabs/Update/_1242.php b/Zotlabs/Update/_1242.php
index c2c9a66d0..0a4265984 100644
--- a/Zotlabs/Update/_1242.php
+++ b/Zotlabs/Update/_1242.php
@@ -2,6 +2,8 @@
namespace Zotlabs\Update;
+use Zotlabs\Lib\Config;
+
class _1242 {
function run() {
@@ -10,7 +12,7 @@ class _1242 {
if ($pp['v'][0] === '{') {
$a = json_decode($pp['v'], true);
if (isset($a['encrypted'])) {
- $v = crypto_unencapsulate($a, get_config('system', 'prvkey'));
+ $v = crypto_unencapsulate($a, Config::Get('system', 'prvkey'));
set_pconfig($pp['uid'], $pp['cat'], $pp['k'], obscurify($v));
}
}
@@ -18,4 +20,4 @@ class _1242 {
return UPDATE_SUCCESS;
}
-} \ No newline at end of file
+}
diff --git a/Zotlabs/Update/_1243.php b/Zotlabs/Update/_1243.php
index 850cb1d6c..05845ad47 100644
--- a/Zotlabs/Update/_1243.php
+++ b/Zotlabs/Update/_1243.php
@@ -2,15 +2,17 @@
namespace Zotlabs\Update;
+use Zotlabs\Lib\Config;
+
class _1243 {
function run() {
-
- $x = get_config('system','filesystem_storage_thumbnails');
- del_config('system','filesystem_storage_thumbnails');
+
+ $x = Config::Get('system','filesystem_storage_thumbnails');
+ Config::Delete('system','filesystem_storage_thumbnails');
if ($x !== false)
- set_config('system','photo_storage_type', intval($x));
-
+ Config::Set('system','photo_storage_type', intval($x));
+
return UPDATE_SUCCESS;
}
diff --git a/Zotlabs/Web/Controller.php b/Zotlabs/Web/Controller.php
index 2d0f58891..6384f24df 100644
--- a/Zotlabs/Web/Controller.php
+++ b/Zotlabs/Web/Controller.php
@@ -2,12 +2,58 @@
namespace Zotlabs\Web;
+/**
+ * Base controller class for Modules.
+ *
+ * Modules should extend this class, and override the methods needed. Emtpy
+ * default implementations allow Modules to only override the methods they
+ * need.
+ *
+ * The methods defined by this class is invoked in order:
+ *
+ * - init()
+ * - post() -- only for POST requests
+ * - get()
+ *
+ * Modules which emit other serialisations besides HTML (XML,JSON, etc.) should
+ * do so within the module `init` and/or `post` functions and then invoke
+ * `killme()` to terminate further processing.
+ */
+abstract class Controller {
-class Controller {
+ /**
+ * Initialize request processing.
+ *
+ * This method is called before any other request processing, and
+ * regardless of the request method. The theme is not yet loaded when
+ * this method is invoked.
+ */
+ public function init() {
+ }
- function init() {}
- function post() {}
- function get() {}
+ /**
+ * Process POST requests.
+ *
+ * This method is called if the incoming request is a POST request. It is
+ * invoked after the theme has been loaded. This method should not normally
+ * render HTML output, as processing will fall through to the GET processing
+ * if this method completes without error or stopping processing in other
+ * ways.
+ */
+ public function post() {
+ }
+ /**
+ * Process GET requests or the body part of POST requests.
+ *
+ * This method is called directly for GET requests, and immediately after the
+ * `post()` method for POST requests.
+ *
+ * It will return the module content as a HTML string.
+ *
+ * @return string HTML content for the module.
+ */
+ public function get() {
+ return '';
+ }
}
-
diff --git a/Zotlabs/Web/HTTPSig.php b/Zotlabs/Web/HTTPSig.php
index 793b8cb45..7c289ff5f 100644
--- a/Zotlabs/Web/HTTPSig.php
+++ b/Zotlabs/Web/HTTPSig.php
@@ -5,6 +5,7 @@ namespace Zotlabs\Web;
use DateTime;
use DateTimeZone;
use Zotlabs\Lib\Activity;
+use Zotlabs\Lib\Config;
use Zotlabs\Lib\Crypto;
use Zotlabs\Lib\Keyutils;
use Zotlabs\Lib\Webfinger;
@@ -528,7 +529,7 @@ class HTTPSig {
// TODO: should we default to hs2019? cavage-http-signatures-12 is not very wide spread yet
- if (get_config('system', 'use_hs2019', false) && $algorithm === 'rsa-sha256') {
+ if (Config::Get('system', 'use_hs2019', false) && $algorithm === 'rsa-sha256') {
$algorithm = 'hs2019';
}
@@ -673,7 +674,7 @@ class HTTPSig {
$iv = $key = $alg = $data = null;
if (!$prvkey) {
- $prvkey = get_config('system', 'prvkey');
+ $prvkey = Config::Get('system', 'prvkey');
}
$matches = [];
diff --git a/Zotlabs/Web/Router.php b/Zotlabs/Web/Router.php
index 2876fcc3c..122e7ff73 100644
--- a/Zotlabs/Web/Router.php
+++ b/Zotlabs/Web/Router.php
@@ -4,6 +4,7 @@ namespace Zotlabs\Web;
use App;
use Zotlabs\Extend\Route;
+use Zotlabs\Lib\Config;
use Exception;
/**
@@ -36,6 +37,7 @@ class Router {
private $modname = '';
private $controller = null;
+ private bool $module_loaded = false;
/**
* @brief Router constructor.
@@ -61,7 +63,7 @@ class Router {
include_once($route[0]);
if(class_exists($modname)) {
$this->controller = new $modname;
- App::$module_loaded = true;
+ $this->module_loaded = true;
}
}
}
@@ -69,15 +71,15 @@ class Router {
// legacy plugins - this can be removed when they have all been converted
- if(! (App::$module_loaded)) {
+ if(! ($this->module_loaded)) {
if(is_array(App::$plugins) && in_array($module, App::$plugins) && file_exists("addon/{$module}/{$module}.php")) {
include_once("addon/{$module}/{$module}.php");
if(class_exists($modname)) {
$this->controller = new $modname;
- App::$module_loaded = true;
+ $this->module_loaded = true;
}
elseif(function_exists($module . '_module')) {
- App::$module_loaded = true;
+ $this->module_loaded = true;
}
}
}
@@ -87,40 +89,40 @@ class Router {
* Otherwise, look for the standard program module
*/
- if(! (App::$module_loaded)) {
+ if(! ($this->module_loaded)) {
try {
$filename = 'Zotlabs/SiteModule/'. ucfirst($module). '.php';
if(file_exists($filename)) {
// This won't be picked up by the autoloader, so load it explicitly
require_once($filename);
$this->controller = new $modname;
- App::$module_loaded = true;
+ $this->module_loaded = true;
}
else {
$filename = 'Zotlabs/Module/'. ucfirst($module). '.php';
if(file_exists($filename)) {
$this->controller = new $modname;
- App::$module_loaded = true;
+ $this->module_loaded = true;
}
}
- if(! App::$module_loaded)
+ if(! $this->module_loaded)
throw new Exception('Module not found');
}
catch(Exception $e) {
if(file_exists("mod/site/{$module}.php")) {
include_once("mod/site/{$module}.php");
- App::$module_loaded = true;
+ $this->module_loaded = true;
}
elseif(file_exists("mod/{$module}.php")) {
include_once("mod/{$module}.php");
- App::$module_loaded = true;
+ $this->module_loaded = true;
}
}
}
$x = [
'module' => $module,
- 'installed' => App::$module_loaded,
+ 'installed' => $this->module_loaded,
'controller' => $this->controller
];
/**
@@ -137,7 +139,7 @@ class Router {
*/
call_hooks('module_loaded', $x);
if($x['installed']) {
- App::$module_loaded = true;
+ $this->module_loaded = true;
$this->controller = $x['controller'];
}
@@ -145,7 +147,7 @@ class Router {
* The URL provided does not resolve to a valid module.
*/
- if(! (App::$module_loaded)) {
+ if(! ($this->module_loaded)) {
// undo the setting of a letsencrypt acme-challenge rewrite rule
// which blocks access to our .well-known routes.
@@ -154,14 +156,14 @@ class Router {
// make the file read-only so letsencrypt doesn't modify it
if(strpos($_SERVER['REQUEST_URI'],'/.well-known/') === 0) {
- if(file_exists('.well-known/.htaccess') && get_config('system','fix_apache_acme',true)) {
+ if(file_exists('.well-known/.htaccess') && Config::Get('system','fix_apache_acme',true)) {
rename('.well-known/.htaccess','.well-known/.htaccess.old');
}
}
$x = [
'module' => $module,
- 'installed' => App::$module_loaded,
+ 'installed' => $this->module_loaded,
'controller' => $this->controller
];
call_hooks('page_not_found',$x);
@@ -173,7 +175,7 @@ class Router {
killme();
}
- if(get_config('system','log_404',true)) {
+ if(Config::Get('system','log_404',true)) {
logger("Module {$module} not found.", LOGGER_DEBUG, LOG_WARNING);
logger('index.php: page not found: ' . $_SERVER['REQUEST_URI']
. ' ADDRESS: ' . $_SERVER['REMOTE_ADDR'] . ' QUERY: '
@@ -188,7 +190,7 @@ class Router {
// pretend this is a module so it will initialise the theme
App::$module = '404';
- App::$module_loaded = true;
+ $this->module_loaded = true;
App::$error = true;
}
}
@@ -204,7 +206,7 @@ class Router {
* Call module functions
*/
- if(App::$module_loaded) {
+ if($this->module_loaded) {
App::$page['page_title'] = App::$module;
$placeholder = '';
diff --git a/Zotlabs/Web/Session.php b/Zotlabs/Web/Session.php
index 14c054d20..ec26e6b0d 100644
--- a/Zotlabs/Web/Session.php
+++ b/Zotlabs/Web/Session.php
@@ -10,6 +10,7 @@ namespace Zotlabs\Web;
* session info.
*/
+use Zotlabs\Lib\Config;
class Session {
@@ -24,7 +25,7 @@ class Session {
ini_set('session.use_only_cookies', 1);
ini_set('session.cookie_httponly', 1);
- $this->custom_handler = boolval(get_config('system', 'session_custom', false));
+ $this->custom_handler = boolval(Config::Get('system', 'session_custom', false));
/*
* Set our session storage functions.
@@ -33,8 +34,8 @@ class Session {
if($this->custom_handler) {
/* Custom handler (files, memached, redis..) */
- $session_save_handler = strval(get_config('system', 'session_save_handler', Null));
- $session_save_path = strval(get_config('system', 'session_save_path', Null));
+ $session_save_handler = strval(Config::Get('system', 'session_save_handler', Null));
+ $session_save_path = strval(Config::Get('system', 'session_save_path', Null));
if(is_null($session_save_handler) || is_null($session_save_path)) {
logger('Session save handler or path not set', LOGGER_NORMAL, LOG_ERR);
@@ -48,8 +49,8 @@ class Session {
else {
ini_set('session.save_handler', $session_save_handler);
ini_set('session.save_path', $session_save_path);
- ini_set('session.gc_probability', intval(get_config('system', 'session_gc_probability', 1)));
- ini_set('session.gc_divisor', intval(get_config('system', 'session_gc_divisor', 100)));
+ ini_set('session.gc_probability', intval(Config::Get('system', 'session_gc_probability', 1)));
+ ini_set('session.gc_divisor', intval(Config::Get('system', 'session_gc_divisor', 100)));
}
}
}
@@ -212,7 +213,7 @@ class Session {
$paranoia = intval(get_pconfig($_SESSION['uid'], 'system', 'paranoia'));
if(! $paranoia)
- $paranoia = intval(get_config('system', 'paranoia'));
+ $paranoia = intval(Config::Get('system', 'paranoia'));
switch($paranoia) {
case 0:
diff --git a/Zotlabs/Web/WebServer.php b/Zotlabs/Web/WebServer.php
index f43ae10a4..6f8a4b956 100644
--- a/Zotlabs/Web/WebServer.php
+++ b/Zotlabs/Web/WebServer.php
@@ -13,11 +13,11 @@ class WebServer {
require_once('boot.php');
- sys_boot();
+ $installed = sys_boot();
\App::$language = get_best_language();
- load_translation_table(\App::$language,\App::$install);
+ load_translation_table(\App::$language, !$installed);
/**
@@ -56,7 +56,7 @@ class WebServer {
load_translation_table(\App::$language);
}
- if((x($_GET,'zid')) && (! \App::$install)) {
+ if (x($_GET,'zid') && $installed) {
\App::$query_string = strip_zids(\App::$query_string);
if(! local_channel()) {
if (!isset($_SESSION['my_address']) || $_SESSION['my_address'] != $_GET['zid']) {
@@ -69,14 +69,14 @@ class WebServer {
}
}
- if((x($_GET,'zat')) && (! \App::$install)) {
+ if (x($_GET,'zat') && $installed) {
\App::$query_string = strip_zats(\App::$query_string);
if(! local_channel()) {
zat_init();
}
}
- if((x($_REQUEST,'owt')) && (! \App::$install)) {
+ if (x($_REQUEST,'owt') && $installed) {
$token = $_REQUEST['owt'];
\App::$query_string = strip_query_param(\App::$query_string,'owt');
owt_init($token);
@@ -85,7 +85,7 @@ class WebServer {
if((x($_SESSION, 'authenticated')) || (x($_POST, 'auth-params')) || (\App::$module === 'login'))
require('include/auth.php');
- if(\App::$install) {
+ if (!$installed) {
/* Allow an exception for the view module so that pcss will be interpreted during installation */
if(\App::$module != 'view')
\App::$module = 'setup';
diff --git a/Zotlabs/Widget/Helpindex.php b/Zotlabs/Widget/Helpindex.php
index 63e686d3a..5264e1947 100644
--- a/Zotlabs/Widget/Helpindex.php
+++ b/Zotlabs/Widget/Helpindex.php
@@ -1,6 +1,9 @@
<?php
-
/**
+ * Widget to show the help index.
+ *
+ * By default used by the left sidebar by the help module.
+ *
* * Name: Help index
* * Description: Help pages index
*/
@@ -9,54 +12,28 @@ namespace Zotlabs\Widget;
class Helpindex {
- function widget($arr) {
-
- require_once('include/help.php');
-
- $o = '<div class="widget">';
-
- $level_0 = get_help_content('sitetoc');
- if(! $level_0) {
- $path = 'toc';
- $x = determine_help_language();
- $lang = $x['language'];
- if($lang !== 'en') {
- $path = $lang . '/toc';
- }
- $level_0 = get_help_content($path);
- }
+ use \Zotlabs\Lib\Traits\HelpHelperTrait;
- $level_0 = preg_replace('/\<ul(.*?)\>/','<ul class="nav nav-pills flex-column">',$level_0);
+ private string $contents = '';
- $levels = array();
+ function widget() {
+ $this->determine_help_language();
+ $this->find_help_file('toc', $this->lang['language']);
- // TODO: Implement support for translations in hierarchical table of content files
- /*
- if(argc() > 2) {
- $path = '';
- for($x = 1; $x < argc(); $x ++) {
- $path .= argv($x) . '/';
- $y = get_help_content($path . 'sitetoc');
- if(! $y)
- $y = get_help_content($path . 'toc');
- if($y)
- $levels[] = preg_replace('/\<ul(.*?)\>/','<ul class="nav nav-pills flex-column">',$y);
- }
- }
- */
-
- if($level_0)
- $o .= $level_0;
- if($levels) {
- foreach($levels as $l) {
- $o .= '<br /><br />';
- $o .= $l;
- }
+ if (! empty($this->file_name)) {
+ $this->contents = file_get_contents($this->file_name);
}
- $o .= '</div>';
+ $tpl = get_markup_template('widget.tpl');
+ return replace_macros($tpl, [ '$widget' => $this ]);
+ }
+
+ public function title(): string {
+ return '';
+ }
- return $o;
+ public function contents(): string {
+ return $this->contents;
}
}
diff --git a/Zotlabs/Widget/Newmember.php b/Zotlabs/Widget/Newmember.php
index 70a858fb0..79bdf9f9f 100644
--- a/Zotlabs/Widget/Newmember.php
+++ b/Zotlabs/Widget/Newmember.php
@@ -7,6 +7,8 @@
namespace Zotlabs\Widget;
+use Zotlabs\Lib\Config;
+
class Newmember {
function widget($arr) {
@@ -66,8 +68,8 @@ class Newmember {
]
];
- $site_firehose = ((intval(get_config('system','site_firehose',0))) ? true : false);
- $net_firehose = ((get_config('system','disable_discover_tab',1)) ? false : true);
+ $site_firehose = ((intval(Config::Get('system','site_firehose',0))) ? true : false);
+ $net_firehose = ((Config::Get('system','disable_discover_tab',1)) ? false : true);
// hack to put this in the correct spot of the array
diff --git a/Zotlabs/Widget/Pinned.php b/Zotlabs/Widget/Pinned.php
index 1380c156b..2ba170fe8 100644
--- a/Zotlabs/Widget/Pinned.php
+++ b/Zotlabs/Widget/Pinned.php
@@ -1,6 +1,8 @@
<?php
namespace Zotlabs\Widget;
+use Zotlabs\Lib\Config;
+
/**
* * Name: Pinned items
* * Description: Display pinned items
@@ -31,7 +33,7 @@ class Pinned {
if(! $this->uid)
return $ret;
- $this->allowed_types = get_config('system', 'pin_types', [ ITEM_TYPE_POST ]);
+ $this->allowed_types = Config::Get('system', 'pin_types', [ ITEM_TYPE_POST ]);
$items = $this->list($types);
diff --git a/Zotlabs/Widget/Pubtagcloud.php b/Zotlabs/Widget/Pubtagcloud.php
index 90bf5eb97..8119d0c73 100644
--- a/Zotlabs/Widget/Pubtagcloud.php
+++ b/Zotlabs/Widget/Pubtagcloud.php
@@ -7,6 +7,8 @@
namespace Zotlabs\Widget;
+use Zotlabs\Lib\Config;
+
class Pubtagcloud {
function widget($arr) {
@@ -16,19 +18,19 @@ class Pubtagcloud {
return EMPTY_STR;
}
- if(! intval(get_config('system','open_pubstream',1))) {
+ if(! intval(Config::Get('system','open_pubstream',1))) {
if(! get_observer_hash()) {
return EMPTY_STR;
}
}
- $net_firehose = ((get_config('system','disable_discover_tab',1)) ? false : true);
+ $net_firehose = ((Config::Get('system','disable_discover_tab',1)) ? false : true);
if(!$net_firehose) {
return '';
}
- $site_firehose = ((intval(get_config('system','site_firehose',0))) ? true : false);
+ $site_firehose = ((intval(Config::Get('system','site_firehose',0))) ? true : false);
$safemode = get_xconfig(get_observer_hash(),'directory','safemode',1);
diff --git a/Zotlabs/Widget/Rating.php b/Zotlabs/Widget/Rating.php
index 20c27ff1c..f8986ac93 100644
--- a/Zotlabs/Widget/Rating.php
+++ b/Zotlabs/Widget/Rating.php
@@ -8,12 +8,14 @@
namespace Zotlabs\Widget;
+use Zotlabs\Lib\Config;
+
class Rating {
function widget($arr) {
- $rating_enabled = get_config('system','rating_enabled');
+ $rating_enabled = Config::Get('system','rating_enabled');
if(! $rating_enabled) {
return;
}
diff --git a/boot.php b/boot.php
index ed73ae8d4..79609e876 100644
--- a/boot.php
+++ b/boot.php
@@ -62,9 +62,11 @@ require_once('include/conversation.php');
require_once('include/acl_selectors.php');
require_once('include/selectors.php');
require_once('include/activities.php');
+require_once('include/security.php');
+
define('PLATFORM_NAME', 'hubzilla');
-define('STD_VERSION', '9.0.2');
+define('STD_VERSION', '9.2');
define('ZOT_REVISION', '6.0');
define('DB_UPDATE_VERSION', 1263);
@@ -602,8 +604,19 @@ define('DBTYPE_MYSQL', 0);
define('DBTYPE_POSTGRES', 1);
-function sys_boot() {
-
+/**
+ * Boot the app.
+ *
+ * Detects if the system is installed, and if it is, reads the basic configuration
+ * in `.htconfig`, conects to the database, and loads the system configuration stored
+ * in the db.
+ *
+ * As a side effect it also sets the App::$install flag to true if the system is _not_
+ * installed yet.
+ *
+ * @return True if the system is installed, false otherwise.
+ */
+function sys_boot(): bool {
// our central App object
@@ -686,6 +699,8 @@ function sys_boot() {
*/
call_hooks('init_1');
}
+
+ return !App::$install;
}
@@ -766,7 +781,6 @@ class App {
public static $langsave;
public static $rtl = false;
public static $plugins_admin;
- public static $module_loaded = false;
public static $query_string;
public static $page;
public static $profile;
@@ -1249,7 +1263,7 @@ class App {
'$metas' => self::$meta->get(),
'$plugins' => $x['header'],
'$update_interval' => $interval,
- '$sse_enabled' => get_config('system', 'sse_enabled', 0),
+ '$sse_enabled' => Config::Get('system', 'sse_enabled', 0),
'$head_css' => head_get_css(),
'$head_js' => head_get_js(),
'$linkrel' => head_get_links(),
@@ -1495,9 +1509,9 @@ function is_ajax() {
*/
function check_config() {
- $saved = get_config('system', 'urlverify');
+ $saved = Config::Get('system', 'urlverify');
if (!$saved)
- set_config('system', 'urlverify', bin2hex(z_root()));
+ Config::Set('system', 'urlverify', bin2hex(z_root()));
if (($saved) && ($saved != bin2hex(z_root()))) {
// our URL changed. Do something.
@@ -1513,7 +1527,7 @@ function check_config() {
// only change the url to an ip address if it was already an ip and not a dns name
if ((!$is_ip_addr) || ($is_ip_addr && $was_ip_addr)) {
fix_system_urls($oldurl, z_root());
- set_config('system', 'urlverify', bin2hex(z_root()));
+ Config::Set('system', 'urlverify', bin2hex(z_root()));
}
else
logger('Attempt to change baseurl from a DNS name to an IP address was refused.');
@@ -1634,7 +1648,7 @@ function fix_system_urls($oldurl, $newurl) {
}
}
- Zotlabs\Daemon\Master::Summon(['Notifier', 'refresh_all', $c[0]['channel_id']]);
+ Master::Summon(['Notifier', 'refresh_all', $c[0]['channel_id']]);
}
}
@@ -1713,9 +1727,9 @@ function login($register = false, $form_id = 'main_login', $hiddens = false, $lo
// your site.
- $register_policy = get_config('system', 'register_policy');
+ $register_policy = Config::Get('system', 'register_policy');
- $reglink = get_config('system', 'register_link', z_root() . '/' . ((intval($register_policy) === REGISTER_CLOSED) ? 'pubsites' : 'register'));
+ $reglink = Config::Get('system', 'register_link', z_root() . '/' . ((intval($register_policy) === REGISTER_CLOSED) ? 'pubsites' : 'register'));
if ($reglink !== 'none') {
$reg = [
@@ -1736,7 +1750,7 @@ function login($register = false, $form_id = 'main_login', $hiddens = false, $lo
$_SESSION['login_return_url'] = App::$query_string;
}
- $email_required = get_config('system', 'verify_email');
+ $email_required = Config::Get('system', 'verify_email');
$lname_label = (($email_required) ? t('Email or nickname') : t('Nickname'));
$o .= replace_macros($tpl, [
@@ -1746,9 +1760,9 @@ function login($register = false, $form_id = 'main_login', $hiddens = false, $lo
'$login' => t('Login'),
'$remote_login' => t('Remote Authentication'),
'$form_id' => $form_id,
- '$lname' => [$form_id . '_username', $lname_label],
- '$lpassword' => [$form_id . '_password', t('Password')],
- '$remember_me' => [$form_id . '_remember', t('Remember me'), '', '', [t('No'), t('Yes')]],
+ '$lname' => [$form_id . '_username', $lname_label, null, null, null, null],
+ '$lpassword' => [$form_id . '_password', t('Password'), null, null, null, null],
+ '$remember_me' => [$form_id . '_remember', t('Remember me'), '', '', [t('No'), t('Yes')], null, null],
'$hiddens' => $hiddens,
'$register' => $reg,
'$lostpass' => t('Forgot your password?'),
@@ -1854,13 +1868,13 @@ function can_view_public_stream() {
return false;
}
- if (!(intval(get_config('system', 'open_pubstream', 1)))) {
+ if (!(intval(Config::Get('system', 'open_pubstream', 1)))) {
if (!get_observer_hash()) {
return false;
}
}
- $net_firehose = ((get_config('system', 'disable_discover_tab', 1)) ? false : true);
+ $net_firehose = ((Config::Get('system', 'disable_discover_tab', 1)) ? false : true);
if (!$net_firehose) {
return false;
@@ -2001,7 +2015,7 @@ function info($s) {
* @return int
*/
function get_max_import_size() {
- return (intval(get_config('system', 'max_import_size')));
+ return (intval(Config::Get('system', 'max_import_size')));
}
@@ -2055,7 +2069,7 @@ function proc_run() {
proc_close(proc_open($cmd, [], $foo));
}
else {
- if (get_config('system', 'use_proc_open'))
+ if (Config::Get('system', 'use_proc_open'))
proc_close(proc_open($cmdline . " &", [], $foo));
else
exec($cmdline . ' > /dev/null &');
@@ -2333,7 +2347,7 @@ function construct_page() {
$uid = ((App::$profile_uid) ? App::$profile_uid : local_channel());
- $navbar = get_config('system', 'navbar', 'default');
+ $navbar = Config::Get('system', 'navbar', 'default');
if ($uid) {
$navbar = get_pconfig($uid, 'system', 'navbar', $navbar);
}
@@ -2533,7 +2547,7 @@ function head_get_icon() {
* @return string
*/
function get_directory_realm() {
- if ($x = get_config('system', 'directory_realm'))
+ if ($x = Config::Get('system', 'directory_realm'))
return $x;
return DIRECTORY_REALM;
@@ -2546,13 +2560,13 @@ function get_directory_realm() {
*/
function get_directory_primary() {
- $dirmode = intval(get_config('system', 'directory_mode'));
+ $dirmode = intval(Config::Get('system', 'directory_mode'));
if ($dirmode == DIRECTORY_MODE_STANDALONE || $dirmode == DIRECTORY_MODE_PRIMARY) {
return z_root();
}
- if ($x = get_config('system', 'directory_primary'))
+ if ($x = Config::Get('system', 'directory_primary'))
return $x;
return DIRECTORY_FALLBACK_MASTER;
@@ -2565,13 +2579,13 @@ function get_directory_primary() {
* @return string relative date of last completed poller execution
*/
function get_poller_runtime() {
- $t = get_config('system', 'lastpoll');
+ $t = Config::Get('system', 'lastpoll');
return relative_date($t);
}
function z_get_upload_dir() {
- $upload_dir = get_config('system', 'uploaddir');
+ $upload_dir = Config::Get('system', 'uploaddir');
if (!$upload_dir)
$upload_dir = ini_get('upload_tmp_dir');
if (!$upload_dir)
@@ -2581,7 +2595,7 @@ function z_get_upload_dir() {
}
function z_get_temp_dir() {
- $temp_dir = get_config('system', 'tempdir');
+ $temp_dir = Config::Get('system', 'tempdir');
if (!$temp_dir)
$temp_dir = sys_get_temp_dir();
@@ -2637,12 +2651,12 @@ function check_for_new_perms() {
if (Permissions::version() != PermissionRoles::version())
return;
- $pregistered = get_config('system', 'perms');
+ $pregistered = Config::Get('system', 'perms');
$pcurrent = array_keys(Permissions::Perms());
if (!$pregistered) {
- set_config('system', 'perms', $pcurrent);
+ Config::Set('system', 'perms', $pcurrent);
return;
}
@@ -2699,7 +2713,7 @@ function check_for_new_perms() {
// We should probably call perms_refresh here, but this should get pushed in 24 hours and there is no urgency
if ($found_new_perm)
- set_config('system', 'perms', $pcurrent);
+ Config::Set('system', 'perms', $pcurrent);
}
@@ -2708,17 +2722,17 @@ function check_for_new_perms() {
*/
function check_cron_broken() {
- $d = get_config('system', 'lastcron');
+ $d = Config::Get('system', 'lastcron');
if ((!$d) || ($d < datetime_convert('UTC', 'UTC', 'now - 4 hours'))) {
- Zotlabs\Daemon\Master::Summon(['Cron']);
- set_config('system', 'lastcron', datetime_convert());
+ Master::Summon(['Cron']);
+ Config::Set('system', 'lastcron', datetime_convert());
}
- $t = get_config('system', 'lastcroncheck');
+ $t = Config::Get('system', 'lastcroncheck');
if (!$t) {
// never checked before. Start the timer.
- set_config('system', 'lastcroncheck', datetime_convert());
+ Config::Set('system', 'lastcroncheck', datetime_convert());
return;
}
@@ -2727,7 +2741,7 @@ function check_cron_broken() {
return;
}
- set_config('system', 'lastcroncheck', datetime_convert());
+ Config::Set('system', 'lastcroncheck', datetime_convert());
if (($d) && ($d > datetime_convert('UTC', 'UTC', 'now - 3 days'))) {
// Scheduled tasks have run successfully in the last 3 days.
@@ -2759,7 +2773,7 @@ function check_cron_broken() {
*/
function observer_prohibited($allow_account = false) {
if ($allow_account) {
- return (((get_config('system', 'block_public')) && (!get_account_id()) && (!remote_channel())) ? true : false);
+ return (((Config::Get('system', 'block_public')) && (!get_account_id()) && (!remote_channel())) ? true : false);
}
- return (((get_config('system', 'block_public')) && (!local_channel()) && (!remote_channel())) ? true : false);
+ return (((Config::Get('system', 'block_public')) && (!local_channel()) && (!remote_channel())) ? true : false);
}
diff --git a/composer.json b/composer.json
index d8a13fdf3..6cef6acd9 100644
--- a/composer.json
+++ b/composer.json
@@ -59,12 +59,12 @@
},
"require-dev": {
"ext-yaml": "*",
- "phpunit/phpunit": "^9.4",
- "php-mock/php-mock-phpunit": "^2.6",
+ "phpunit/phpunit": "^10.5",
+ "php-mock/php-mock-phpunit": "^2.10",
"phpmd/phpmd": "^2.6",
"squizlabs/php_codesniffer": "*",
"php-mock/php-mock": "^2.2",
- "dms/phpunit-arraysubset-asserts": "^0.2.1"
+ "dms/phpunit-arraysubset-asserts": "^0.5.0"
},
"autoload": {
"psr-4": {
diff --git a/composer.lock b/composer.lock
index 63d5a963c..a2437c5f5 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "3a17d1b44bc28f3609d086af7b358f72",
+ "content-hash": "2c6f7ad91fff98ebeb5fd339a8856d29",
"packages": [
{
"name": "blueimp/jquery-file-upload",
@@ -2480,31 +2480,30 @@
},
{
"name": "dms/phpunit-arraysubset-asserts",
- "version": "v0.2.1",
+ "version": "v0.5.0",
"source": {
"type": "git",
"url": "https://github.com/rdohms/phpunit-arraysubset-asserts.git",
- "reference": "8e3673a70019a60df484e36fc3271d63cbdc40ea"
+ "reference": "aa6b9e858414e91cca361cac3b2035ee57d212e0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/rdohms/phpunit-arraysubset-asserts/zipball/8e3673a70019a60df484e36fc3271d63cbdc40ea",
- "reference": "8e3673a70019a60df484e36fc3271d63cbdc40ea",
+ "url": "https://api.github.com/repos/rdohms/phpunit-arraysubset-asserts/zipball/aa6b9e858414e91cca361cac3b2035ee57d212e0",
+ "reference": "aa6b9e858414e91cca361cac3b2035ee57d212e0",
"shasum": ""
},
"require": {
- "php": "^7.3|^8.0",
- "phpunit/phpunit": "^9.0"
+ "php": "^5.4 || ^7.0 || ^8.0",
+ "phpunit/phpunit": "^4.8.36 || ^5.7.21 || ^6.0 || ^7.0 || ^8.0 || ^9.0 || ^10.0"
},
"require-dev": {
- "dms/coding-standard": "^1.0",
- "squizlabs/php_codesniffer": "^3.4"
+ "dms/coding-standard": "^9"
},
"type": "library",
"autoload": {
- "psr-4": {
- "DMS\\PHPUnitExtensions\\ArraySubset\\": "src"
- }
+ "files": [
+ "assertarraysubset-autoload.php"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -2519,92 +2518,22 @@
"description": "This package provides ArraySubset and related asserts once deprecated in PHPUnit 8",
"support": {
"issues": "https://github.com/rdohms/phpunit-arraysubset-asserts/issues",
- "source": "https://github.com/rdohms/phpunit-arraysubset-asserts/tree/v0.2.1"
+ "source": "https://github.com/rdohms/phpunit-arraysubset-asserts/tree/v0.5.0"
},
- "time": "2020-10-03T21:43:40+00:00"
- },
- {
- "name": "doctrine/instantiator",
- "version": "1.4.1",
- "source": {
- "type": "git",
- "url": "https://github.com/doctrine/instantiator.git",
- "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/doctrine/instantiator/zipball/10dcfce151b967d20fde1b34ae6640712c3891bc",
- "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc",
- "shasum": ""
- },
- "require": {
- "php": "^7.1 || ^8.0"
- },
- "require-dev": {
- "doctrine/coding-standard": "^9",
- "ext-pdo": "*",
- "ext-phar": "*",
- "phpbench/phpbench": "^0.16 || ^1",
- "phpstan/phpstan": "^1.4",
- "phpstan/phpstan-phpunit": "^1",
- "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
- "vimeo/psalm": "^4.22"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Marco Pivetta",
- "email": "ocramius@gmail.com",
- "homepage": "https://ocramius.github.io/"
- }
- ],
- "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
- "homepage": "https://www.doctrine-project.org/projects/instantiator.html",
- "keywords": [
- "constructor",
- "instantiate"
- ],
- "support": {
- "issues": "https://github.com/doctrine/instantiator/issues",
- "source": "https://github.com/doctrine/instantiator/tree/1.4.1"
- },
- "funding": [
- {
- "url": "https://www.doctrine-project.org/sponsorship.html",
- "type": "custom"
- },
- {
- "url": "https://www.patreon.com/phpdoctrine",
- "type": "patreon"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator",
- "type": "tidelift"
- }
- ],
- "time": "2022-03-03T08:28:38+00:00"
+ "time": "2023-06-02T17:33:53+00:00"
},
{
"name": "myclabs/deep-copy",
- "version": "1.11.0",
+ "version": "1.11.1",
"source": {
"type": "git",
"url": "https://github.com/myclabs/DeepCopy.git",
- "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614"
+ "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614",
- "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614",
+ "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c",
+ "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c",
"shasum": ""
},
"require": {
@@ -2642,7 +2571,7 @@
],
"support": {
"issues": "https://github.com/myclabs/DeepCopy/issues",
- "source": "https://github.com/myclabs/DeepCopy/tree/1.11.0"
+ "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1"
},
"funding": [
{
@@ -2650,29 +2579,31 @@
"type": "tidelift"
}
],
- "time": "2022-03-03T13:19:32+00:00"
+ "time": "2023-03-08T13:26:56+00:00"
},
{
"name": "nikic/php-parser",
- "version": "v4.13.2",
+ "version": "v5.0.2",
"source": {
"type": "git",
"url": "https://github.com/nikic/PHP-Parser.git",
- "reference": "210577fe3cf7badcc5814d99455df46564f3c077"
+ "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/210577fe3cf7badcc5814d99455df46564f3c077",
- "reference": "210577fe3cf7badcc5814d99455df46564f3c077",
+ "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/139676794dc1e9231bf7bcd123cfc0c99182cb13",
+ "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13",
"shasum": ""
},
"require": {
+ "ext-ctype": "*",
+ "ext-json": "*",
"ext-tokenizer": "*",
- "php": ">=7.0"
+ "php": ">=7.4"
},
"require-dev": {
"ircmaxell/php-yacc": "^0.0.7",
- "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0"
+ "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0"
},
"bin": [
"bin/php-parse"
@@ -2680,7 +2611,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "4.9-dev"
+ "dev-master": "5.0-dev"
}
},
"autoload": {
@@ -2704,9 +2635,9 @@
],
"support": {
"issues": "https://github.com/nikic/PHP-Parser/issues",
- "source": "https://github.com/nikic/PHP-Parser/tree/v4.13.2"
+ "source": "https://github.com/nikic/PHP-Parser/tree/v5.0.2"
},
- "time": "2021-11-30T19:35:32+00:00"
+ "time": "2024-03-05T20:51:40+00:00"
},
{
"name": "pdepend/pdepend",
@@ -2767,20 +2698,21 @@
},
{
"name": "phar-io/manifest",
- "version": "2.0.3",
+ "version": "2.0.4",
"source": {
"type": "git",
"url": "https://github.com/phar-io/manifest.git",
- "reference": "97803eca37d319dfa7826cc2437fc020857acb53"
+ "reference": "54750ef60c58e43759730615a392c31c80e23176"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53",
- "reference": "97803eca37d319dfa7826cc2437fc020857acb53",
+ "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176",
+ "reference": "54750ef60c58e43759730615a392c31c80e23176",
"shasum": ""
},
"require": {
"ext-dom": "*",
+ "ext-libxml": "*",
"ext-phar": "*",
"ext-xmlwriter": "*",
"phar-io/version": "^3.0.1",
@@ -2821,9 +2753,15 @@
"description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)",
"support": {
"issues": "https://github.com/phar-io/manifest/issues",
- "source": "https://github.com/phar-io/manifest/tree/2.0.3"
+ "source": "https://github.com/phar-io/manifest/tree/2.0.4"
},
- "time": "2021-07-20T11:28:43+00:00"
+ "funding": [
+ {
+ "url": "https://github.com/theseer",
+ "type": "github"
+ }
+ ],
+ "time": "2024-03-03T12:33:53+00:00"
},
{
"name": "phar-io/version",
@@ -2878,28 +2816,28 @@
},
{
"name": "php-mock/php-mock",
- "version": "2.3.1",
+ "version": "2.5.0",
"source": {
"type": "git",
"url": "https://github.com/php-mock/php-mock.git",
- "reference": "9a55bd8ba40e6da2e97a866121d2c69dedd4952b"
+ "reference": "fff1a621ebe54100fa3bd852e7be57773a0c0127"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-mock/php-mock/zipball/9a55bd8ba40e6da2e97a866121d2c69dedd4952b",
- "reference": "9a55bd8ba40e6da2e97a866121d2c69dedd4952b",
+ "url": "https://api.github.com/repos/php-mock/php-mock/zipball/fff1a621ebe54100fa3bd852e7be57773a0c0127",
+ "reference": "fff1a621ebe54100fa3bd852e7be57773a0c0127",
"shasum": ""
},
"require": {
"php": "^5.6 || ^7.0 || ^8.0",
- "phpunit/php-text-template": "^1 || ^2"
+ "phpunit/php-text-template": "^1 || ^2 || ^3 || ^4"
},
"replace": {
"malkusch/php-mock": "*"
},
"require-dev": {
- "phpunit/phpunit": "^5.7 || ^6.5 || ^7.5 || ^8.0 || ^9.0",
- "squizlabs/php_codesniffer": "^3.5"
+ "phpunit/phpunit": "^5.7 || ^6.5 || ^7.5 || ^8.0 || ^9.0 || ^10.0 || ^11.0",
+ "squizlabs/php_codesniffer": "^3.8"
},
"suggest": {
"php-mock/php-mock-phpunit": "Allows integration into PHPUnit testcase with the trait PHPMock."
@@ -2937,11 +2875,12 @@
"mock",
"stub",
"test",
- "test double"
+ "test double",
+ "testing"
],
"support": {
"issues": "https://github.com/php-mock/php-mock/issues",
- "source": "https://github.com/php-mock/php-mock/tree/2.3.1"
+ "source": "https://github.com/php-mock/php-mock/tree/2.5.0"
},
"funding": [
{
@@ -2949,29 +2888,29 @@
"type": "github"
}
],
- "time": "2022-02-07T18:57:52+00:00"
+ "time": "2024-02-10T21:07:01+00:00"
},
{
"name": "php-mock/php-mock-integration",
- "version": "2.1.0",
+ "version": "2.3.0",
"source": {
"type": "git",
"url": "https://github.com/php-mock/php-mock-integration.git",
- "reference": "003d585841e435958a02e9b986953907b8b7609b"
+ "reference": "ec6a00a8129d50ed0f07907c91e3274ca4ade877"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-mock/php-mock-integration/zipball/003d585841e435958a02e9b986953907b8b7609b",
- "reference": "003d585841e435958a02e9b986953907b8b7609b",
+ "url": "https://api.github.com/repos/php-mock/php-mock-integration/zipball/ec6a00a8129d50ed0f07907c91e3274ca4ade877",
+ "reference": "ec6a00a8129d50ed0f07907c91e3274ca4ade877",
"shasum": ""
},
"require": {
"php": ">=5.6",
- "php-mock/php-mock": "^2.2",
- "phpunit/php-text-template": "^1 || ^2"
+ "php-mock/php-mock": "^2.5",
+ "phpunit/php-text-template": "^1 || ^2 || ^3 || ^4"
},
"require-dev": {
- "phpunit/phpunit": "^5.7.27 || ^6 || ^7 || ^8 || ^9"
+ "phpunit/phpunit": "^5.7.27 || ^6 || ^7 || ^8 || ^9 || ^10 || ^11"
},
"type": "library",
"autoload": {
@@ -3004,28 +2943,37 @@
],
"support": {
"issues": "https://github.com/php-mock/php-mock-integration/issues",
- "source": "https://github.com/php-mock/php-mock-integration/tree/2.1.0"
+ "source": "https://github.com/php-mock/php-mock-integration/tree/2.3.0"
},
- "time": "2020-02-08T14:40:25+00:00"
+ "funding": [
+ {
+ "url": "https://github.com/michalbundyra",
+ "type": "github"
+ }
+ ],
+ "time": "2024-02-10T21:37:25+00:00"
},
{
"name": "php-mock/php-mock-phpunit",
- "version": "2.6.0",
+ "version": "2.10.0",
"source": {
"type": "git",
"url": "https://github.com/php-mock/php-mock-phpunit.git",
- "reference": "2877a0e58f12e91b64bf36ccd080a209dcbf6c30"
+ "reference": "e1f7e795990b00937376e345883ea68ca3bda7e0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-mock/php-mock-phpunit/zipball/2877a0e58f12e91b64bf36ccd080a209dcbf6c30",
- "reference": "2877a0e58f12e91b64bf36ccd080a209dcbf6c30",
+ "url": "https://api.github.com/repos/php-mock/php-mock-phpunit/zipball/e1f7e795990b00937376e345883ea68ca3bda7e0",
+ "reference": "e1f7e795990b00937376e345883ea68ca3bda7e0",
"shasum": ""
},
"require": {
"php": ">=7",
- "php-mock/php-mock-integration": "^2.1",
- "phpunit/phpunit": "^6 || ^7 || ^8 || ^9"
+ "php-mock/php-mock-integration": "^2.3",
+ "phpunit/phpunit": "^6 || ^7 || ^8 || ^9 || ^10.0.17 || ^11"
+ },
+ "require-dev": {
+ "mockery/mockery": "^1.3.6"
},
"type": "library",
"autoload": {
@@ -3058,13 +3006,20 @@
"phpunit",
"stub",
"test",
- "test double"
+ "test double",
+ "testing"
],
"support": {
"issues": "https://github.com/php-mock/php-mock-phpunit/issues",
- "source": "https://github.com/php-mock/php-mock-phpunit/tree/2.6.0"
+ "source": "https://github.com/php-mock/php-mock-phpunit/tree/2.10.0"
},
- "time": "2020-02-08T15:44:47+00:00"
+ "funding": [
+ {
+ "url": "https://github.com/michalbundyra",
+ "type": "github"
+ }
+ ],
+ "time": "2024-02-11T07:24:16+00:00"
},
{
"name": "phpmd/phpmd",
@@ -3151,44 +3106,44 @@
},
{
"name": "phpunit/php-code-coverage",
- "version": "9.2.15",
+ "version": "10.1.14",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-code-coverage.git",
- "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f"
+ "reference": "e3f51450ebffe8e0efdf7346ae966a656f7d5e5b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2e9da11878c4202f97915c1cb4bb1ca318a63f5f",
- "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/e3f51450ebffe8e0efdf7346ae966a656f7d5e5b",
+ "reference": "e3f51450ebffe8e0efdf7346ae966a656f7d5e5b",
"shasum": ""
},
"require": {
"ext-dom": "*",
"ext-libxml": "*",
"ext-xmlwriter": "*",
- "nikic/php-parser": "^4.13.0",
- "php": ">=7.3",
- "phpunit/php-file-iterator": "^3.0.3",
- "phpunit/php-text-template": "^2.0.2",
- "sebastian/code-unit-reverse-lookup": "^2.0.2",
- "sebastian/complexity": "^2.0",
- "sebastian/environment": "^5.1.2",
- "sebastian/lines-of-code": "^1.0.3",
- "sebastian/version": "^3.0.1",
+ "nikic/php-parser": "^4.18 || ^5.0",
+ "php": ">=8.1",
+ "phpunit/php-file-iterator": "^4.0",
+ "phpunit/php-text-template": "^3.0",
+ "sebastian/code-unit-reverse-lookup": "^3.0",
+ "sebastian/complexity": "^3.0",
+ "sebastian/environment": "^6.0",
+ "sebastian/lines-of-code": "^2.0",
+ "sebastian/version": "^4.0",
"theseer/tokenizer": "^1.2.0"
},
"require-dev": {
- "phpunit/phpunit": "^9.3"
+ "phpunit/phpunit": "^10.1"
},
"suggest": {
- "ext-pcov": "*",
- "ext-xdebug": "*"
+ "ext-pcov": "PHP extension that provides line coverage",
+ "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "9.2-dev"
+ "dev-main": "10.1-dev"
}
},
"autoload": {
@@ -3216,7 +3171,8 @@
],
"support": {
"issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
- "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.15"
+ "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy",
+ "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.14"
},
"funding": [
{
@@ -3224,32 +3180,32 @@
"type": "github"
}
],
- "time": "2022-03-07T09:28:20+00:00"
+ "time": "2024-03-12T15:33:41+00:00"
},
{
"name": "phpunit/php-file-iterator",
- "version": "3.0.6",
+ "version": "4.1.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-file-iterator.git",
- "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf"
+ "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf",
- "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/a95037b6d9e608ba092da1b23931e537cadc3c3c",
+ "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c",
"shasum": ""
},
"require": {
- "php": ">=7.3"
+ "php": ">=8.1"
},
"require-dev": {
- "phpunit/phpunit": "^9.3"
+ "phpunit/phpunit": "^10.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "3.0-dev"
+ "dev-main": "4.0-dev"
}
},
"autoload": {
@@ -3276,7 +3232,8 @@
],
"support": {
"issues": "https://github.com/sebastianbergmann/php-file-iterator/issues",
- "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6"
+ "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy",
+ "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/4.1.0"
},
"funding": [
{
@@ -3284,28 +3241,28 @@
"type": "github"
}
],
- "time": "2021-12-02T12:48:52+00:00"
+ "time": "2023-08-31T06:24:48+00:00"
},
{
"name": "phpunit/php-invoker",
- "version": "3.1.1",
+ "version": "4.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-invoker.git",
- "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67"
+ "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67",
- "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7",
+ "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7",
"shasum": ""
},
"require": {
- "php": ">=7.3"
+ "php": ">=8.1"
},
"require-dev": {
"ext-pcntl": "*",
- "phpunit/phpunit": "^9.3"
+ "phpunit/phpunit": "^10.0"
},
"suggest": {
"ext-pcntl": "*"
@@ -3313,7 +3270,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "3.1-dev"
+ "dev-main": "4.0-dev"
}
},
"autoload": {
@@ -3339,7 +3296,7 @@
],
"support": {
"issues": "https://github.com/sebastianbergmann/php-invoker/issues",
- "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1"
+ "source": "https://github.com/sebastianbergmann/php-invoker/tree/4.0.0"
},
"funding": [
{
@@ -3347,32 +3304,32 @@
"type": "github"
}
],
- "time": "2020-09-28T05:58:55+00:00"
+ "time": "2023-02-03T06:56:09+00:00"
},
{
"name": "phpunit/php-text-template",
- "version": "2.0.4",
+ "version": "3.0.1",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-text-template.git",
- "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28"
+ "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28",
- "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/0c7b06ff49e3d5072f057eb1fa59258bf287a748",
+ "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748",
"shasum": ""
},
"require": {
- "php": ">=7.3"
+ "php": ">=8.1"
},
"require-dev": {
- "phpunit/phpunit": "^9.3"
+ "phpunit/phpunit": "^10.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.0-dev"
+ "dev-main": "3.0-dev"
}
},
"autoload": {
@@ -3398,7 +3355,8 @@
],
"support": {
"issues": "https://github.com/sebastianbergmann/php-text-template/issues",
- "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4"
+ "security": "https://github.com/sebastianbergmann/php-text-template/security/policy",
+ "source": "https://github.com/sebastianbergmann/php-text-template/tree/3.0.1"
},
"funding": [
{
@@ -3406,32 +3364,32 @@
"type": "github"
}
],
- "time": "2020-10-26T05:33:50+00:00"
+ "time": "2023-08-31T14:07:24+00:00"
},
{
"name": "phpunit/php-timer",
- "version": "5.0.3",
+ "version": "6.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-timer.git",
- "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2"
+ "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2",
- "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/e2a2d67966e740530f4a3343fe2e030ffdc1161d",
+ "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d",
"shasum": ""
},
"require": {
- "php": ">=7.3"
+ "php": ">=8.1"
},
"require-dev": {
- "phpunit/phpunit": "^9.3"
+ "phpunit/phpunit": "^10.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "5.0-dev"
+ "dev-main": "6.0-dev"
}
},
"autoload": {
@@ -3457,7 +3415,7 @@
],
"support": {
"issues": "https://github.com/sebastianbergmann/php-timer/issues",
- "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3"
+ "source": "https://github.com/sebastianbergmann/php-timer/tree/6.0.0"
},
"funding": [
{
@@ -3465,24 +3423,23 @@
"type": "github"
}
],
- "time": "2020-10-26T13:16:10+00:00"
+ "time": "2023-02-03T06:57:52+00:00"
},
{
"name": "phpunit/phpunit",
- "version": "9.5.23",
+ "version": "10.5.20",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
- "reference": "888556852e7e9bbeeedb9656afe46118765ade34"
+ "reference": "547d314dc24ec1e177720d45c6263fb226cc2ae3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/888556852e7e9bbeeedb9656afe46118765ade34",
- "reference": "888556852e7e9bbeeedb9656afe46118765ade34",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/547d314dc24ec1e177720d45c6263fb226cc2ae3",
+ "reference": "547d314dc24ec1e177720d45c6263fb226cc2ae3",
"shasum": ""
},
"require": {
- "doctrine/instantiator": "^1.3.1",
"ext-dom": "*",
"ext-json": "*",
"ext-libxml": "*",
@@ -3492,27 +3449,26 @@
"myclabs/deep-copy": "^1.10.1",
"phar-io/manifest": "^2.0.3",
"phar-io/version": "^3.0.2",
- "php": ">=7.3",
- "phpunit/php-code-coverage": "^9.2.13",
- "phpunit/php-file-iterator": "^3.0.5",
- "phpunit/php-invoker": "^3.1.1",
- "phpunit/php-text-template": "^2.0.3",
- "phpunit/php-timer": "^5.0.2",
- "sebastian/cli-parser": "^1.0.1",
- "sebastian/code-unit": "^1.0.6",
- "sebastian/comparator": "^4.0.5",
- "sebastian/diff": "^4.0.3",
- "sebastian/environment": "^5.1.3",
- "sebastian/exporter": "^4.0.3",
- "sebastian/global-state": "^5.0.1",
- "sebastian/object-enumerator": "^4.0.3",
- "sebastian/resource-operations": "^3.0.3",
- "sebastian/type": "^3.0",
- "sebastian/version": "^3.0.2"
+ "php": ">=8.1",
+ "phpunit/php-code-coverage": "^10.1.5",
+ "phpunit/php-file-iterator": "^4.0",
+ "phpunit/php-invoker": "^4.0",
+ "phpunit/php-text-template": "^3.0",
+ "phpunit/php-timer": "^6.0",
+ "sebastian/cli-parser": "^2.0",
+ "sebastian/code-unit": "^2.0",
+ "sebastian/comparator": "^5.0",
+ "sebastian/diff": "^5.0",
+ "sebastian/environment": "^6.0",
+ "sebastian/exporter": "^5.1",
+ "sebastian/global-state": "^6.0.1",
+ "sebastian/object-enumerator": "^5.0",
+ "sebastian/recursion-context": "^5.0",
+ "sebastian/type": "^4.0",
+ "sebastian/version": "^4.0"
},
"suggest": {
- "ext-soap": "*",
- "ext-xdebug": "*"
+ "ext-soap": "To be able to generate mocks based on WSDL files"
},
"bin": [
"phpunit"
@@ -3520,7 +3476,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "9.5-dev"
+ "dev-main": "10.5-dev"
}
},
"autoload": {
@@ -3551,7 +3507,8 @@
],
"support": {
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
- "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.23"
+ "security": "https://github.com/sebastianbergmann/phpunit/security/policy",
+ "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.20"
},
"funding": [
{
@@ -3561,9 +3518,13 @@
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit",
+ "type": "tidelift"
}
],
- "time": "2022-08-22T14:01:36+00:00"
+ "time": "2024-04-24T06:32:35+00:00"
},
{
"name": "psr/container",
@@ -3615,28 +3576,28 @@
},
{
"name": "sebastian/cli-parser",
- "version": "1.0.1",
+ "version": "2.0.1",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/cli-parser.git",
- "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2"
+ "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2",
- "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2",
+ "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/c34583b87e7b7a8055bf6c450c2c77ce32a24084",
+ "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084",
"shasum": ""
},
"require": {
- "php": ">=7.3"
+ "php": ">=8.1"
},
"require-dev": {
- "phpunit/phpunit": "^9.3"
+ "phpunit/phpunit": "^10.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.0-dev"
+ "dev-main": "2.0-dev"
}
},
"autoload": {
@@ -3659,7 +3620,8 @@
"homepage": "https://github.com/sebastianbergmann/cli-parser",
"support": {
"issues": "https://github.com/sebastianbergmann/cli-parser/issues",
- "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1"
+ "security": "https://github.com/sebastianbergmann/cli-parser/security/policy",
+ "source": "https://github.com/sebastianbergmann/cli-parser/tree/2.0.1"
},
"funding": [
{
@@ -3667,32 +3629,32 @@
"type": "github"
}
],
- "time": "2020-09-28T06:08:49+00:00"
+ "time": "2024-03-02T07:12:49+00:00"
},
{
"name": "sebastian/code-unit",
- "version": "1.0.8",
+ "version": "2.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/code-unit.git",
- "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120"
+ "reference": "a81fee9eef0b7a76af11d121767abc44c104e503"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120",
- "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120",
+ "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/a81fee9eef0b7a76af11d121767abc44c104e503",
+ "reference": "a81fee9eef0b7a76af11d121767abc44c104e503",
"shasum": ""
},
"require": {
- "php": ">=7.3"
+ "php": ">=8.1"
},
"require-dev": {
- "phpunit/phpunit": "^9.3"
+ "phpunit/phpunit": "^10.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.0-dev"
+ "dev-main": "2.0-dev"
}
},
"autoload": {
@@ -3715,7 +3677,7 @@
"homepage": "https://github.com/sebastianbergmann/code-unit",
"support": {
"issues": "https://github.com/sebastianbergmann/code-unit/issues",
- "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8"
+ "source": "https://github.com/sebastianbergmann/code-unit/tree/2.0.0"
},
"funding": [
{
@@ -3723,32 +3685,32 @@
"type": "github"
}
],
- "time": "2020-10-26T13:08:54+00:00"
+ "time": "2023-02-03T06:58:43+00:00"
},
{
"name": "sebastian/code-unit-reverse-lookup",
- "version": "2.0.3",
+ "version": "3.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
- "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5"
+ "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5",
- "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5",
+ "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/5e3a687f7d8ae33fb362c5c0743794bbb2420a1d",
+ "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d",
"shasum": ""
},
"require": {
- "php": ">=7.3"
+ "php": ">=8.1"
},
"require-dev": {
- "phpunit/phpunit": "^9.3"
+ "phpunit/phpunit": "^10.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.0-dev"
+ "dev-main": "3.0-dev"
}
},
"autoload": {
@@ -3770,7 +3732,7 @@
"homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
"support": {
"issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues",
- "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3"
+ "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/3.0.0"
},
"funding": [
{
@@ -3778,34 +3740,36 @@
"type": "github"
}
],
- "time": "2020-09-28T05:30:19+00:00"
+ "time": "2023-02-03T06:59:15+00:00"
},
{
"name": "sebastian/comparator",
- "version": "4.0.6",
+ "version": "5.0.1",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/comparator.git",
- "reference": "55f4261989e546dc112258c7a75935a81a7ce382"
+ "reference": "2db5010a484d53ebf536087a70b4a5423c102372"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382",
- "reference": "55f4261989e546dc112258c7a75935a81a7ce382",
+ "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2db5010a484d53ebf536087a70b4a5423c102372",
+ "reference": "2db5010a484d53ebf536087a70b4a5423c102372",
"shasum": ""
},
"require": {
- "php": ">=7.3",
- "sebastian/diff": "^4.0",
- "sebastian/exporter": "^4.0"
+ "ext-dom": "*",
+ "ext-mbstring": "*",
+ "php": ">=8.1",
+ "sebastian/diff": "^5.0",
+ "sebastian/exporter": "^5.0"
},
"require-dev": {
- "phpunit/phpunit": "^9.3"
+ "phpunit/phpunit": "^10.3"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "4.0-dev"
+ "dev-main": "5.0-dev"
}
},
"autoload": {
@@ -3844,7 +3808,8 @@
],
"support": {
"issues": "https://github.com/sebastianbergmann/comparator/issues",
- "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6"
+ "security": "https://github.com/sebastianbergmann/comparator/security/policy",
+ "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.1"
},
"funding": [
{
@@ -3852,33 +3817,33 @@
"type": "github"
}
],
- "time": "2020-10-26T15:49:45+00:00"
+ "time": "2023-08-14T13:18:12+00:00"
},
{
"name": "sebastian/complexity",
- "version": "2.0.2",
+ "version": "3.2.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/complexity.git",
- "reference": "739b35e53379900cc9ac327b2147867b8b6efd88"
+ "reference": "68ff824baeae169ec9f2137158ee529584553799"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88",
- "reference": "739b35e53379900cc9ac327b2147867b8b6efd88",
+ "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/68ff824baeae169ec9f2137158ee529584553799",
+ "reference": "68ff824baeae169ec9f2137158ee529584553799",
"shasum": ""
},
"require": {
- "nikic/php-parser": "^4.7",
- "php": ">=7.3"
+ "nikic/php-parser": "^4.18 || ^5.0",
+ "php": ">=8.1"
},
"require-dev": {
- "phpunit/phpunit": "^9.3"
+ "phpunit/phpunit": "^10.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.0-dev"
+ "dev-main": "3.2-dev"
}
},
"autoload": {
@@ -3901,7 +3866,8 @@
"homepage": "https://github.com/sebastianbergmann/complexity",
"support": {
"issues": "https://github.com/sebastianbergmann/complexity/issues",
- "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2"
+ "security": "https://github.com/sebastianbergmann/complexity/security/policy",
+ "source": "https://github.com/sebastianbergmann/complexity/tree/3.2.0"
},
"funding": [
{
@@ -3909,33 +3875,33 @@
"type": "github"
}
],
- "time": "2020-10-26T15:52:27+00:00"
+ "time": "2023-12-21T08:37:17+00:00"
},
{
"name": "sebastian/diff",
- "version": "4.0.4",
+ "version": "5.1.1",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/diff.git",
- "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d"
+ "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d",
- "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d",
+ "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/c41e007b4b62af48218231d6c2275e4c9b975b2e",
+ "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e",
"shasum": ""
},
"require": {
- "php": ">=7.3"
+ "php": ">=8.1"
},
"require-dev": {
- "phpunit/phpunit": "^9.3",
- "symfony/process": "^4.2 || ^5"
+ "phpunit/phpunit": "^10.0",
+ "symfony/process": "^6.4"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "4.0-dev"
+ "dev-main": "5.1-dev"
}
},
"autoload": {
@@ -3967,7 +3933,8 @@
],
"support": {
"issues": "https://github.com/sebastianbergmann/diff/issues",
- "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4"
+ "security": "https://github.com/sebastianbergmann/diff/security/policy",
+ "source": "https://github.com/sebastianbergmann/diff/tree/5.1.1"
},
"funding": [
{
@@ -3975,27 +3942,27 @@
"type": "github"
}
],
- "time": "2020-10-26T13:10:38+00:00"
+ "time": "2024-03-02T07:15:17+00:00"
},
{
"name": "sebastian/environment",
- "version": "5.1.4",
+ "version": "6.1.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/environment.git",
- "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7"
+ "reference": "8074dbcd93529b357029f5cc5058fd3e43666984"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/1b5dff7bb151a4db11d49d90e5408e4e938270f7",
- "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7",
+ "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/8074dbcd93529b357029f5cc5058fd3e43666984",
+ "reference": "8074dbcd93529b357029f5cc5058fd3e43666984",
"shasum": ""
},
"require": {
- "php": ">=7.3"
+ "php": ">=8.1"
},
"require-dev": {
- "phpunit/phpunit": "^9.3"
+ "phpunit/phpunit": "^10.0"
},
"suggest": {
"ext-posix": "*"
@@ -4003,7 +3970,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "5.1-dev"
+ "dev-main": "6.1-dev"
}
},
"autoload": {
@@ -4022,7 +3989,7 @@
}
],
"description": "Provides functionality to handle HHVM/PHP environments",
- "homepage": "http://www.github.com/sebastianbergmann/environment",
+ "homepage": "https://github.com/sebastianbergmann/environment",
"keywords": [
"Xdebug",
"environment",
@@ -4030,7 +3997,8 @@
],
"support": {
"issues": "https://github.com/sebastianbergmann/environment/issues",
- "source": "https://github.com/sebastianbergmann/environment/tree/5.1.4"
+ "security": "https://github.com/sebastianbergmann/environment/security/policy",
+ "source": "https://github.com/sebastianbergmann/environment/tree/6.1.0"
},
"funding": [
{
@@ -4038,34 +4006,34 @@
"type": "github"
}
],
- "time": "2022-04-03T09:37:03+00:00"
+ "time": "2024-03-23T08:47:14+00:00"
},
{
"name": "sebastian/exporter",
- "version": "4.0.4",
+ "version": "5.1.2",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/exporter.git",
- "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9"
+ "reference": "955288482d97c19a372d3f31006ab3f37da47adf"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/65e8b7db476c5dd267e65eea9cab77584d3cfff9",
- "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9",
+ "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/955288482d97c19a372d3f31006ab3f37da47adf",
+ "reference": "955288482d97c19a372d3f31006ab3f37da47adf",
"shasum": ""
},
"require": {
- "php": ">=7.3",
- "sebastian/recursion-context": "^4.0"
+ "ext-mbstring": "*",
+ "php": ">=8.1",
+ "sebastian/recursion-context": "^5.0"
},
"require-dev": {
- "ext-mbstring": "*",
- "phpunit/phpunit": "^9.3"
+ "phpunit/phpunit": "^10.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "4.0-dev"
+ "dev-main": "5.1-dev"
}
},
"autoload": {
@@ -4107,7 +4075,8 @@
],
"support": {
"issues": "https://github.com/sebastianbergmann/exporter/issues",
- "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.4"
+ "security": "https://github.com/sebastianbergmann/exporter/security/policy",
+ "source": "https://github.com/sebastianbergmann/exporter/tree/5.1.2"
},
"funding": [
{
@@ -4115,38 +4084,35 @@
"type": "github"
}
],
- "time": "2021-11-11T14:18:36+00:00"
+ "time": "2024-03-02T07:17:12+00:00"
},
{
"name": "sebastian/global-state",
- "version": "5.0.5",
+ "version": "6.0.2",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/global-state.git",
- "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2"
+ "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2",
- "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2",
+ "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/987bafff24ecc4c9ac418cab1145b96dd6e9cbd9",
+ "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9",
"shasum": ""
},
"require": {
- "php": ">=7.3",
- "sebastian/object-reflector": "^2.0",
- "sebastian/recursion-context": "^4.0"
+ "php": ">=8.1",
+ "sebastian/object-reflector": "^3.0",
+ "sebastian/recursion-context": "^5.0"
},
"require-dev": {
"ext-dom": "*",
- "phpunit/phpunit": "^9.3"
- },
- "suggest": {
- "ext-uopz": "*"
+ "phpunit/phpunit": "^10.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "5.0-dev"
+ "dev-main": "6.0-dev"
}
},
"autoload": {
@@ -4165,13 +4131,14 @@
}
],
"description": "Snapshotting of global state",
- "homepage": "http://www.github.com/sebastianbergmann/global-state",
+ "homepage": "https://www.github.com/sebastianbergmann/global-state",
"keywords": [
"global state"
],
"support": {
"issues": "https://github.com/sebastianbergmann/global-state/issues",
- "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.5"
+ "security": "https://github.com/sebastianbergmann/global-state/security/policy",
+ "source": "https://github.com/sebastianbergmann/global-state/tree/6.0.2"
},
"funding": [
{
@@ -4179,33 +4146,33 @@
"type": "github"
}
],
- "time": "2022-02-14T08:28:10+00:00"
+ "time": "2024-03-02T07:19:19+00:00"
},
{
"name": "sebastian/lines-of-code",
- "version": "1.0.3",
+ "version": "2.0.2",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/lines-of-code.git",
- "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc"
+ "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc",
- "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc",
+ "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/856e7f6a75a84e339195d48c556f23be2ebf75d0",
+ "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0",
"shasum": ""
},
"require": {
- "nikic/php-parser": "^4.6",
- "php": ">=7.3"
+ "nikic/php-parser": "^4.18 || ^5.0",
+ "php": ">=8.1"
},
"require-dev": {
- "phpunit/phpunit": "^9.3"
+ "phpunit/phpunit": "^10.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.0-dev"
+ "dev-main": "2.0-dev"
}
},
"autoload": {
@@ -4228,7 +4195,8 @@
"homepage": "https://github.com/sebastianbergmann/lines-of-code",
"support": {
"issues": "https://github.com/sebastianbergmann/lines-of-code/issues",
- "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3"
+ "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy",
+ "source": "https://github.com/sebastianbergmann/lines-of-code/tree/2.0.2"
},
"funding": [
{
@@ -4236,34 +4204,34 @@
"type": "github"
}
],
- "time": "2020-11-28T06:42:11+00:00"
+ "time": "2023-12-21T08:38:20+00:00"
},
{
"name": "sebastian/object-enumerator",
- "version": "4.0.4",
+ "version": "5.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/object-enumerator.git",
- "reference": "5c9eeac41b290a3712d88851518825ad78f45c71"
+ "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71",
- "reference": "5c9eeac41b290a3712d88851518825ad78f45c71",
+ "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/202d0e344a580d7f7d04b3fafce6933e59dae906",
+ "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906",
"shasum": ""
},
"require": {
- "php": ">=7.3",
- "sebastian/object-reflector": "^2.0",
- "sebastian/recursion-context": "^4.0"
+ "php": ">=8.1",
+ "sebastian/object-reflector": "^3.0",
+ "sebastian/recursion-context": "^5.0"
},
"require-dev": {
- "phpunit/phpunit": "^9.3"
+ "phpunit/phpunit": "^10.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "4.0-dev"
+ "dev-main": "5.0-dev"
}
},
"autoload": {
@@ -4285,7 +4253,7 @@
"homepage": "https://github.com/sebastianbergmann/object-enumerator/",
"support": {
"issues": "https://github.com/sebastianbergmann/object-enumerator/issues",
- "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4"
+ "source": "https://github.com/sebastianbergmann/object-enumerator/tree/5.0.0"
},
"funding": [
{
@@ -4293,32 +4261,32 @@
"type": "github"
}
],
- "time": "2020-10-26T13:12:34+00:00"
+ "time": "2023-02-03T07:08:32+00:00"
},
{
"name": "sebastian/object-reflector",
- "version": "2.0.4",
+ "version": "3.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/object-reflector.git",
- "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7"
+ "reference": "24ed13d98130f0e7122df55d06c5c4942a577957"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7",
- "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7",
+ "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/24ed13d98130f0e7122df55d06c5c4942a577957",
+ "reference": "24ed13d98130f0e7122df55d06c5c4942a577957",
"shasum": ""
},
"require": {
- "php": ">=7.3"
+ "php": ">=8.1"
},
"require-dev": {
- "phpunit/phpunit": "^9.3"
+ "phpunit/phpunit": "^10.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.0-dev"
+ "dev-main": "3.0-dev"
}
},
"autoload": {
@@ -4340,7 +4308,7 @@
"homepage": "https://github.com/sebastianbergmann/object-reflector/",
"support": {
"issues": "https://github.com/sebastianbergmann/object-reflector/issues",
- "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4"
+ "source": "https://github.com/sebastianbergmann/object-reflector/tree/3.0.0"
},
"funding": [
{
@@ -4348,32 +4316,32 @@
"type": "github"
}
],
- "time": "2020-10-26T13:14:26+00:00"
+ "time": "2023-02-03T07:06:18+00:00"
},
{
"name": "sebastian/recursion-context",
- "version": "4.0.4",
+ "version": "5.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/recursion-context.git",
- "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172"
+ "reference": "05909fb5bc7df4c52992396d0116aed689f93712"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172",
- "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172",
+ "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/05909fb5bc7df4c52992396d0116aed689f93712",
+ "reference": "05909fb5bc7df4c52992396d0116aed689f93712",
"shasum": ""
},
"require": {
- "php": ">=7.3"
+ "php": ">=8.1"
},
"require-dev": {
- "phpunit/phpunit": "^9.3"
+ "phpunit/phpunit": "^10.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "4.0-dev"
+ "dev-main": "5.0-dev"
}
},
"autoload": {
@@ -4400,65 +4368,10 @@
}
],
"description": "Provides functionality to recursively process PHP variables",
- "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
+ "homepage": "https://github.com/sebastianbergmann/recursion-context",
"support": {
"issues": "https://github.com/sebastianbergmann/recursion-context/issues",
- "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-10-26T13:17:30+00:00"
- },
- {
- "name": "sebastian/resource-operations",
- "version": "3.0.3",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/resource-operations.git",
- "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8",
- "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- }
- ],
- "description": "Provides a list of PHP built-in functions that operate on resources",
- "homepage": "https://www.github.com/sebastianbergmann/resource-operations",
- "support": {
- "issues": "https://github.com/sebastianbergmann/resource-operations/issues",
- "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3"
+ "source": "https://github.com/sebastianbergmann/recursion-context/tree/5.0.0"
},
"funding": [
{
@@ -4466,32 +4379,32 @@
"type": "github"
}
],
- "time": "2020-09-28T06:45:17+00:00"
+ "time": "2023-02-03T07:05:40+00:00"
},
{
"name": "sebastian/type",
- "version": "3.0.0",
+ "version": "4.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/type.git",
- "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad"
+ "reference": "462699a16464c3944eefc02ebdd77882bd3925bf"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b233b84bc4465aff7b57cf1c4bc75c86d00d6dad",
- "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad",
+ "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/462699a16464c3944eefc02ebdd77882bd3925bf",
+ "reference": "462699a16464c3944eefc02ebdd77882bd3925bf",
"shasum": ""
},
"require": {
- "php": ">=7.3"
+ "php": ">=8.1"
},
"require-dev": {
- "phpunit/phpunit": "^9.5"
+ "phpunit/phpunit": "^10.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "3.0-dev"
+ "dev-main": "4.0-dev"
}
},
"autoload": {
@@ -4514,7 +4427,7 @@
"homepage": "https://github.com/sebastianbergmann/type",
"support": {
"issues": "https://github.com/sebastianbergmann/type/issues",
- "source": "https://github.com/sebastianbergmann/type/tree/3.0.0"
+ "source": "https://github.com/sebastianbergmann/type/tree/4.0.0"
},
"funding": [
{
@@ -4522,29 +4435,29 @@
"type": "github"
}
],
- "time": "2022-03-15T09:54:48+00:00"
+ "time": "2023-02-03T07:10:45+00:00"
},
{
"name": "sebastian/version",
- "version": "3.0.2",
+ "version": "4.0.1",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/version.git",
- "reference": "c6c1022351a901512170118436c764e473f6de8c"
+ "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c",
- "reference": "c6c1022351a901512170118436c764e473f6de8c",
+ "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c51fa83a5d8f43f1402e3f32a005e6262244ef17",
+ "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17",
"shasum": ""
},
"require": {
- "php": ">=7.3"
+ "php": ">=8.1"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "3.0-dev"
+ "dev-main": "4.0-dev"
}
},
"autoload": {
@@ -4567,7 +4480,7 @@
"homepage": "https://github.com/sebastianbergmann/version",
"support": {
"issues": "https://github.com/sebastianbergmann/version/issues",
- "source": "https://github.com/sebastianbergmann/version/tree/3.0.2"
+ "source": "https://github.com/sebastianbergmann/version/tree/4.0.1"
},
"funding": [
{
@@ -4575,7 +4488,7 @@
"type": "github"
}
],
- "time": "2020-09-28T06:39:44+00:00"
+ "time": "2023-02-07T11:34:05+00:00"
},
{
"name": "squizlabs/php_codesniffer",
@@ -5261,16 +5174,16 @@
},
{
"name": "theseer/tokenizer",
- "version": "1.2.1",
+ "version": "1.2.3",
"source": {
"type": "git",
"url": "https://github.com/theseer/tokenizer.git",
- "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e"
+ "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e",
- "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e",
+ "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2",
+ "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2",
"shasum": ""
},
"require": {
@@ -5299,7 +5212,7 @@
"description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
"support": {
"issues": "https://github.com/theseer/tokenizer/issues",
- "source": "https://github.com/theseer/tokenizer/tree/1.2.1"
+ "source": "https://github.com/theseer/tokenizer/tree/1.2.3"
},
"funding": [
{
@@ -5307,7 +5220,7 @@
"type": "github"
}
],
- "time": "2021-07-28T10:34:58+00:00"
+ "time": "2024-03-03T12:36:25+00:00"
}
],
"aliases": [],
diff --git a/doc/context/de/apps/edit/help.html b/doc/context/de/apps/edit/help.html
deleted file mode 100644
index 5381aeea6..000000000
--- a/doc/context/de/apps/edit/help.html
+++ /dev/null
@@ -1,4 +0,0 @@
-<dl class="dl-horizontal">
- <dt>Allgemein</dt>
- <dd>Ändere oder lösche deine Apps mit Hilfe der Steuerknöpfe neben jedem App-Icon in der Liste.</dd>
-</dl> \ No newline at end of file
diff --git a/doc/context/de/apps/help.html b/doc/context/de/apps/help.html
deleted file mode 100644
index b63352324..000000000
--- a/doc/context/de/apps/help.html
+++ /dev/null
@@ -1,6 +0,0 @@
-<dl class="dl-horizontal">
- <dt>Allgemein</dt>
- <dd>Diese Seite listet alle verfügbaren Apps für Deinen Kanal. Sie enthält die Core Apps wie auch die von Addons. Wenn eine App im <a href='#' onclick='contextualHelpFocus("#app-menu", 1); return false;' title="Klicke zum Öffnen...">App Menü</a> erscheinen soll, dann markiere die App in der Liste mit dem Stern.</dd>
- <dt>Apps verwalten</dt>
- <dd>Der Knopf "Apps verwalten" öffnet eine Seite, mit der Du den Namen, die Kategorie und andere Eigenschaften deiner Apps ändern kannst.</dd>
-</dl> \ No newline at end of file
diff --git a/doc/context/en/apps/edit/help.html b/doc/context/en/apps/edit/help.html
deleted file mode 100644
index 1d378f962..000000000
--- a/doc/context/en/apps/edit/help.html
+++ /dev/null
@@ -1,4 +0,0 @@
-<dl class="dl-horizontal">
- <dt>General</dt>
- <dd>Edit or delete your apps using the control buttons beside each app icon in the list.</dd>
-</dl> \ No newline at end of file
diff --git a/doc/context/en/apps/help.html b/doc/context/en/apps/help.html
deleted file mode 100644
index ad6daade5..000000000
--- a/doc/context/en/apps/help.html
+++ /dev/null
@@ -1,6 +0,0 @@
-<dl class="dl-horizontal">
- <dt>General</dt>
- <dd>This page shows you what apps are available to your channel, including both core apps and those supplied by addons. To add an app to the <a href='#' onclick='contextualHelpFocus("#app-menu", 1); return false;' title="Click to open...">app menu</a> "star" the app in the list below.</dd>
- <dt>Manage Apps</dt>
- <dd>Press the "Manage Apps" button to open a page where you can edit the name, categories, and other properties of your apps.</dd>
-</dl> \ No newline at end of file
diff --git a/doc/context/es-es/apps/edit/help.html b/doc/context/es-es/apps/edit/help.html
deleted file mode 100644
index 28e92328e..000000000
--- a/doc/context/es-es/apps/edit/help.html
+++ /dev/null
@@ -1,4 +0,0 @@
-<dl class="dl-horizontal">
- <dt>General</dt>
- <dd>Modificar o eliminar sus "apps" usando el botón de control que está junto al icono de cada aplicación de la lista.</dd>
-</dl> \ No newline at end of file
diff --git a/doc/context/es-es/apps/help.html b/doc/context/es-es/apps/help.html
deleted file mode 100644
index a6bfd0093..000000000
--- a/doc/context/es-es/apps/help.html
+++ /dev/null
@@ -1,6 +0,0 @@
-<dl class="dl-horizontal">
- <dt>General</dt>
- <dd>Esta página le muestra qué aplicaciones están disponibles para su canal, incluyendo tanto las aplicaciones principales como las proporcionadas por addons. Para añadir una aplicación al <a href=' #' onclick=' contextualHelpFocus ("#app-menu", 1); devuelve false;' title="Pulsar para abrir...">menú de aplicaciones</a> "estrelle" la aplicación de la siguiente lista.</dd>
- <dt>Gestionar las aplicaciones (apps)</dt>
- <dd>Pulse el botón "Gestionar aplicaciones" para abrir una página en la podrá editar el nombre, las categorías y otras propiedades de sus aplicaciones.</dd>
-</dl>
diff --git a/doc/context/fr/apps/edit/index.html b/doc/context/fr/apps/edit/index.html
deleted file mode 100644
index 93fd8dec6..000000000
--- a/doc/context/fr/apps/edit/index.html
+++ /dev/null
@@ -1,4 +0,0 @@
-<dl class="dl-horizontal">
- <dt>Informations de base</dt>
- <dd>Modifiez ou supprimez vos applications à l'aide des boutons de contrôle situés à côté de chaque icône d'application dans la liste.</dd>
-</dl>
diff --git a/doc/context/fr/apps/help.html b/doc/context/fr/apps/help.html
deleted file mode 100644
index 65eb63d84..000000000
--- a/doc/context/fr/apps/help.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<dl class="dl-horizontal">
- <dt>Informations de base</dt>
- <dd>Cette page vous montre quelles applications sont disponibles pour votre canal, y compris les applications centrales et celles fournies par les greffons. Pour ajouter une application au <a href='#' onclick='contextualHelpFocus("#app-menu", 1); return false;' title="Cliquez pour ouvrir...">menu de l'application</a>, cliquez sur le bouton étoile l'application dans la liste ci-dessous.</dd>
- <dt>Gérer les applications</dt>
- <dd>Appuyez sur le bouton &laquo;Gérer les applications&raquo; pour ouvrir une page où vous pouvez éditer le nom, les catégories et autres propriétés de vos applications.
- </dd>
-</dl>
diff --git a/doc/context/pl/apps/edit/help.html b/doc/context/pl/apps/edit/help.html
deleted file mode 100644
index 42db07d17..000000000
--- a/doc/context/pl/apps/edit/help.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<dl class="dl-horizontal">
- <dt>Ogólne</dt>
- <dd>
- Edytowanie lub usuwanie aplikacje za pomocą przycisków sterowania widocznych
- na liście obok każdej ikony aplikacji.
- </dd>
-</dl> \ No newline at end of file
diff --git a/doc/context/pl/apps/help.html b/doc/context/pl/apps/help.html
deleted file mode 100644
index 7ad3bef5c..000000000
--- a/doc/context/pl/apps/help.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<dl class="dl-horizontal">
- <dt>Ogólne</dt>
- <dd>
- Ta strona pokazuje, jakie aplikacje są dostępne na Twoim kanale, w tym zarówno
- aplikacje podstawowe, jak i te dostarczane przez dodatki. Aby dodać aplikację
- do <a href = '#' onclick = 'contextualHelpFocus("# app-menu",1); return false;'
- title = "Kliknij, aby otworzyć ...">menu aplikacji</a> oznacz gwiazdką
- aplikację na poniższej liście.
- </dd>
- <dt>Zarządzanie aplikacjami</dt>
- <dd>
- Naciśnij przycisk "Zarządzaj aplikacjami", aby otworzyć stronę, na której
- możesz edytować nazwę, kategorie i inne właściwości swoich aplikacji.
- </dd>
-</dl> \ No newline at end of file
diff --git a/doc/AdvancedSearch.md b/doc/en/AdvancedSearch.md
index a67c1fc1f..a67c1fc1f 100644
--- a/doc/AdvancedSearch.md
+++ b/doc/en/AdvancedSearch.md
diff --git a/doc/Comparison-of-activity-stream-networks.md b/doc/en/Comparison-of-activity-stream-networks.md
index d76ae1006..d76ae1006 100644
--- a/doc/Comparison-of-activity-stream-networks.md
+++ b/doc/en/Comparison-of-activity-stream-networks.md
diff --git a/doc/Creating-Templates.md b/doc/en/Creating-Templates.md
index fc3f18dd3..fc3f18dd3 100644
--- a/doc/Creating-Templates.md
+++ b/doc/en/Creating-Templates.md
diff --git a/doc/DerivedTheme1.md b/doc/en/DerivedTheme1.md
index b120c628c..b120c628c 100644
--- a/doc/DerivedTheme1.md
+++ b/doc/en/DerivedTheme1.md
diff --git a/doc/Developers.md b/doc/en/Developers.md
index 624c058d2..624c058d2 100644
--- a/doc/Developers.md
+++ b/doc/en/Developers.md
diff --git a/doc/Features.md b/doc/en/Features.md
index a43fd73fa..a43fd73fa 100644
--- a/doc/Features.md
+++ b/doc/en/Features.md
diff --git a/doc/Hubzilla_on_OpenShift.bb b/doc/en/Hubzilla_on_OpenShift.bb
index 7bdd70955..7bdd70955 100644
--- a/doc/Hubzilla_on_OpenShift.bb
+++ b/doc/en/Hubzilla_on_OpenShift.bb
diff --git a/doc/Plugins.md b/doc/en/Plugins.md
index 88b42185b..88b42185b 100644
--- a/doc/Plugins.md
+++ b/doc/en/Plugins.md
diff --git a/doc/Primary-Directory.md b/doc/en/Primary-Directory.md
index 92460c346..92460c346 100644
--- a/doc/Primary-Directory.md
+++ b/doc/en/Primary-Directory.md
diff --git a/doc/Remove-Account.md b/doc/en/Remove-Account.md
index a8ef733a6..a8ef733a6 100644
--- a/doc/Remove-Account.md
+++ b/doc/en/Remove-Account.md
diff --git a/doc/Schema-development.md b/doc/en/Schema-development.md
index e811bb8c3..e811bb8c3 100644
--- a/doc/Schema-development.md
+++ b/doc/en/Schema-development.md
diff --git a/doc/TermsOfService.md b/doc/en/TermsOfService.md
index 1e085559e..1e085559e 100644
--- a/doc/TermsOfService.md
+++ b/doc/en/TermsOfService.md
diff --git a/doc/Translations.md b/doc/en/Translations.md
index 6106e43b1..6106e43b1 100644
--- a/doc/Translations.md
+++ b/doc/en/Translations.md
diff --git a/doc/Widgets.md b/doc/en/Widgets.md
index 6779d7ffd..6779d7ffd 100644
--- a/doc/Widgets.md
+++ b/doc/en/Widgets.md
diff --git a/doc/Zot---A-High-Level-Overview.md b/doc/en/Zot---A-High-Level-Overview.md
index 990ea037b..990ea037b 100644
--- a/doc/Zot---A-High-Level-Overview.md
+++ b/doc/en/Zot---A-High-Level-Overview.md
diff --git a/doc/about/about.bb b/doc/en/about/about.bb
index e909f54cd..e909f54cd 100644
--- a/doc/about/about.bb
+++ b/doc/en/about/about.bb
diff --git a/doc/about/about_hub.bb b/doc/en/about/about_hub.bb
index 0c1082f51..0c1082f51 100644
--- a/doc/about/about_hub.bb
+++ b/doc/en/about/about_hub.bb
diff --git a/doc/about/project.bb b/doc/en/about/project.bb
index fe90b4d36..fe90b4d36 100644
--- a/doc/about/project.bb
+++ b/doc/en/about/project.bb
diff --git a/doc/accounts_profiles_channels_basics.bb b/doc/en/accounts_profiles_channels_basics.bb
index 63b13f036..63b13f036 100644
--- a/doc/accounts_profiles_channels_basics.bb
+++ b/doc/en/accounts_profiles_channels_basics.bb
diff --git a/doc/acl_dialog_post.html b/doc/en/acl_dialog_post.html
index 80b2c68b6..80b2c68b6 100644
--- a/doc/acl_dialog_post.html
+++ b/doc/en/acl_dialog_post.html
diff --git a/doc/addons.bb b/doc/en/addons.bb
index 4bfa7a9fd..4bfa7a9fd 100644
--- a/doc/addons.bb
+++ b/doc/en/addons.bb
diff --git a/doc/addons_gnusocial.bb b/doc/en/addons_gnusocial.bb
index fbb387476..fbb387476 100644
--- a/doc/addons_gnusocial.bb
+++ b/doc/en/addons_gnusocial.bb
diff --git a/doc/admin/administrator_guide.md b/doc/en/admin/administrator_guide.md
index bf4dc7355..bf4dc7355 100644
--- a/doc/admin/administrator_guide.md
+++ b/doc/en/admin/administrator_guide.md
diff --git a/doc/admin/hub_snapshots.md b/doc/en/admin/hub_snapshots.md
index ab0948aa8..ab0948aa8 100644
--- a/doc/admin/hub_snapshots.md
+++ b/doc/en/admin/hub_snapshots.md
diff --git a/doc/admin/zarlog_msgs.md b/doc/en/admin/zarlog_msgs.md
index 0fe16a1e2..0fe16a1e2 100644
--- a/doc/admin/zarlog_msgs.md
+++ b/doc/en/admin/zarlog_msgs.md
diff --git a/doc/admins.bb b/doc/en/admins.bb
index 6c78ce999..6c78ce999 100644
--- a/doc/admins.bb
+++ b/doc/en/admins.bb
diff --git a/doc/api/api_albums.md b/doc/en/api/api_albums.md
index 230daae3c..230daae3c 100644
--- a/doc/api/api_albums.md
+++ b/doc/en/api/api_albums.md
diff --git a/doc/api/api_filedata.md b/doc/en/api/api_filedata.md
index 1d46a495c..1d46a495c 100644
--- a/doc/api/api_filedata.md
+++ b/doc/en/api/api_filedata.md
diff --git a/doc/api/api_files.md b/doc/en/api/api_files.md
index c2a10fce5..c2a10fce5 100644
--- a/doc/api/api_files.md
+++ b/doc/en/api/api_files.md
diff --git a/doc/api/api_functions.bb b/doc/en/api/api_functions.bb
index fe7cb11ba..fe7cb11ba 100644
--- a/doc/api/api_functions.bb
+++ b/doc/en/api/api_functions.bb
diff --git a/doc/api/api_group_members.md b/doc/en/api/api_group_members.md
index 497e0aac6..497e0aac6 100644
--- a/doc/api/api_group_members.md
+++ b/doc/en/api/api_group_members.md
diff --git a/doc/api/api_item_update.md b/doc/en/api/api_item_update.md
index cf1a28044..cf1a28044 100644
--- a/doc/api/api_item_update.md
+++ b/doc/en/api/api_item_update.md
diff --git a/doc/api/api_posting.bb b/doc/en/api/api_posting.bb
index c708ad143..c708ad143 100644
--- a/doc/api/api_posting.bb
+++ b/doc/en/api/api_posting.bb
diff --git a/doc/api/api_xchan.md b/doc/en/api/api_xchan.md
index d2b15e04c..d2b15e04c 100644
--- a/doc/api/api_xchan.md
+++ b/doc/en/api/api_xchan.md
diff --git a/doc/api/group.md b/doc/en/api/group.md
index 8829ff416..8829ff416 100644
--- a/doc/api/group.md
+++ b/doc/en/api/group.md
diff --git a/doc/api/statuses_update.bb b/doc/en/api/statuses_update.bb
index acad440de..acad440de 100644
--- a/doc/api/statuses_update.bb
+++ b/doc/en/api/statuses_update.bb
diff --git a/doc/bugs.bb b/doc/en/bugs.bb
index 3bf2a0e29..3bf2a0e29 100644
--- a/doc/bugs.bb
+++ b/doc/en/bugs.bb
diff --git a/doc/campaign.bb b/doc/en/campaign.bb
index dddc614f9..dddc614f9 100644
--- a/doc/campaign.bb
+++ b/doc/en/campaign.bb
diff --git a/doc/checking_account_quota_usage.bb b/doc/en/checking_account_quota_usage.bb
index 7612d03d8..7612d03d8 100644
--- a/doc/checking_account_quota_usage.bb
+++ b/doc/en/checking_account_quota_usage.bb
diff --git a/doc/comanche.bb b/doc/en/comanche.bb
index faf7e695e..faf7e695e 100644
--- a/doc/comanche.bb
+++ b/doc/en/comanche.bb
diff --git a/doc/context/de/admin/logs/help.html b/doc/en/context/de/admin/logs/help.html
index 1441d9075..1441d9075 100644
--- a/doc/context/de/admin/logs/help.html
+++ b/doc/en/context/de/admin/logs/help.html
diff --git a/doc/context/de/admin/queue/help.html b/doc/en/context/de/admin/queue/help.html
index e59fdcaee..e59fdcaee 100644
--- a/doc/context/de/admin/queue/help.html
+++ b/doc/en/context/de/admin/queue/help.html
diff --git a/doc/context/de/admin/security/help.html b/doc/en/context/de/admin/security/help.html
index 6465e8f0e..6465e8f0e 100644
--- a/doc/context/de/admin/security/help.html
+++ b/doc/en/context/de/admin/security/help.html
diff --git a/doc/context/de/appman/help.html b/doc/en/context/de/appman/help.html
index 888ee6206..888ee6206 100644
--- a/doc/context/de/appman/help.html
+++ b/doc/en/context/de/appman/help.html
diff --git a/doc/context/de/channel/help.html b/doc/en/context/de/channel/help.html
index fbfcac3c1..fbfcac3c1 100644
--- a/doc/context/de/channel/help.html
+++ b/doc/en/context/de/channel/help.html
diff --git a/doc/context/de/chat/help.html b/doc/en/context/de/chat/help.html
index ba355365f..ba355365f 100644
--- a/doc/context/de/chat/help.html
+++ b/doc/en/context/de/chat/help.html
diff --git a/doc/context/de/cloud/help.html b/doc/en/context/de/cloud/help.html
index e72ad1743..e72ad1743 100644
--- a/doc/context/de/cloud/help.html
+++ b/doc/en/context/de/cloud/help.html
diff --git a/doc/context/de/connections/help.html b/doc/en/context/de/connections/help.html
index 61789ea38..61789ea38 100644
--- a/doc/context/de/connections/help.html
+++ b/doc/en/context/de/connections/help.html
diff --git a/doc/context/de/connections/ifpending/help.html b/doc/en/context/de/connections/ifpending/help.html
index 3e55b34c3..3e55b34c3 100644
--- a/doc/context/de/connections/ifpending/help.html
+++ b/doc/en/context/de/connections/ifpending/help.html
diff --git a/doc/context/de/events/help.html b/doc/en/context/de/events/help.html
index b0dc95b3e..b0dc95b3e 100644
--- a/doc/context/de/events/help.html
+++ b/doc/en/context/de/events/help.html
diff --git a/doc/context/de/mail/help.html b/doc/en/context/de/mail/help.html
index b89135d8c..b89135d8c 100644
--- a/doc/context/de/mail/help.html
+++ b/doc/en/context/de/mail/help.html
diff --git a/doc/context/de/network/help.html b/doc/en/context/de/network/help.html
index 6590f597d..6590f597d 100644
--- a/doc/context/de/network/help.html
+++ b/doc/en/context/de/network/help.html
diff --git a/doc/context/de/photos/help.html b/doc/en/context/de/photos/help.html
index 437d2c369..437d2c369 100644
--- a/doc/context/de/photos/help.html
+++ b/doc/en/context/de/photos/help.html
diff --git a/doc/context/de/profile/help.html b/doc/en/context/de/profile/help.html
index ece33457d..ece33457d 100644
--- a/doc/context/de/profile/help.html
+++ b/doc/en/context/de/profile/help.html
diff --git a/doc/context/de/register/help.html b/doc/en/context/de/register/help.html
index 9ee062ee8..9ee062ee8 100644
--- a/doc/context/de/register/help.html
+++ b/doc/en/context/de/register/help.html
diff --git a/doc/context/de/settings/account/help.html b/doc/en/context/de/settings/account/help.html
index 03fc0cc14..03fc0cc14 100644
--- a/doc/context/de/settings/account/help.html
+++ b/doc/en/context/de/settings/account/help.html
diff --git a/doc/context/de/settings/channel/help.html b/doc/en/context/de/settings/channel/help.html
index 98a388f77..98a388f77 100644
--- a/doc/context/de/settings/channel/help.html
+++ b/doc/en/context/de/settings/channel/help.html
diff --git a/doc/context/de/settings/features/help.html b/doc/en/context/de/settings/features/help.html
index a019d2d60..a019d2d60 100644
--- a/doc/context/de/settings/features/help.html
+++ b/doc/en/context/de/settings/features/help.html
diff --git a/doc/context/de/settings/tokens/help.html b/doc/en/context/de/settings/tokens/help.html
index 4a7776109..4a7776109 100644
--- a/doc/context/de/settings/tokens/help.html
+++ b/doc/en/context/de/settings/tokens/help.html
diff --git a/doc/context/de/wiki/help.html b/doc/en/context/de/wiki/help.html
index e203ee221..e203ee221 100644
--- a/doc/context/de/wiki/help.html
+++ b/doc/en/context/de/wiki/help.html
diff --git a/doc/context/en/admin/addons/assets/addon_repo_gui_1.png b/doc/en/context/en/admin/addons/assets/addon_repo_gui_1.png
index 37139b345..37139b345 100644
--- a/doc/context/en/admin/addons/assets/addon_repo_gui_1.png
+++ b/doc/en/context/en/admin/addons/assets/addon_repo_gui_1.png
Binary files differ
diff --git a/doc/context/en/admin/addons/help.html b/doc/en/context/en/admin/addons/help.html
index bfb5e416a..bfb5e416a 100644
--- a/doc/context/en/admin/addons/help.html
+++ b/doc/en/context/en/admin/addons/help.html
diff --git a/doc/context/en/admin/logs/help.html b/doc/en/context/en/admin/logs/help.html
index 708ec9bde..708ec9bde 100644
--- a/doc/context/en/admin/logs/help.html
+++ b/doc/en/context/en/admin/logs/help.html
diff --git a/doc/context/en/admin/queue/help.html b/doc/en/context/en/admin/queue/help.html
index 28885a154..28885a154 100644
--- a/doc/context/en/admin/queue/help.html
+++ b/doc/en/context/en/admin/queue/help.html
diff --git a/doc/context/en/admin/security/help.html b/doc/en/context/en/admin/security/help.html
index bfe81b132..bfe81b132 100644
--- a/doc/context/en/admin/security/help.html
+++ b/doc/en/context/en/admin/security/help.html
diff --git a/doc/context/en/appman/help.html b/doc/en/context/en/appman/help.html
index 27cb03624..27cb03624 100644
--- a/doc/context/en/appman/help.html
+++ b/doc/en/context/en/appman/help.html
diff --git a/doc/context/en/cards/help.html b/doc/en/context/en/cards/help.html
index 9dbed3f97..9dbed3f97 100644
--- a/doc/context/en/cards/help.html
+++ b/doc/en/context/en/cards/help.html
diff --git a/doc/context/en/channel/help.html b/doc/en/context/en/channel/help.html
index 0c5b99754..0c5b99754 100644
--- a/doc/context/en/channel/help.html
+++ b/doc/en/context/en/channel/help.html
diff --git a/doc/context/en/chat/help.html b/doc/en/context/en/chat/help.html
index cc71686d8..cc71686d8 100644
--- a/doc/context/en/chat/help.html
+++ b/doc/en/context/en/chat/help.html
diff --git a/doc/context/en/cloud/help.html b/doc/en/context/en/cloud/help.html
index a8f193223..a8f193223 100644
--- a/doc/context/en/cloud/help.html
+++ b/doc/en/context/en/cloud/help.html
diff --git a/doc/context/en/connections/help.html b/doc/en/context/en/connections/help.html
index 0f95fde63..0f95fde63 100644
--- a/doc/context/en/connections/help.html
+++ b/doc/en/context/en/connections/help.html
diff --git a/doc/context/en/connections/ifpending/help.html b/doc/en/context/en/connections/ifpending/help.html
index 0f95fde63..0f95fde63 100644
--- a/doc/context/en/connections/ifpending/help.html
+++ b/doc/en/context/en/connections/ifpending/help.html
diff --git a/doc/context/en/connedit/help.html b/doc/en/context/en/connedit/help.html
index 9eb62ecc7..9eb62ecc7 100644
--- a/doc/context/en/connedit/help.html
+++ b/doc/en/context/en/connedit/help.html
diff --git a/doc/context/en/events/help.html b/doc/en/context/en/events/help.html
index 8c0b1d4ab..8c0b1d4ab 100644
--- a/doc/context/en/events/help.html
+++ b/doc/en/context/en/events/help.html
diff --git a/doc/context/en/mail/help.html b/doc/en/context/en/mail/help.html
index a2361a135..a2361a135 100644
--- a/doc/context/en/mail/help.html
+++ b/doc/en/context/en/mail/help.html
diff --git a/doc/context/en/network/help.html b/doc/en/context/en/network/help.html
index 53e993b69..53e993b69 100644
--- a/doc/context/en/network/help.html
+++ b/doc/en/context/en/network/help.html
diff --git a/doc/context/en/photos/help.html b/doc/en/context/en/photos/help.html
index 78b442bb4..78b442bb4 100644
--- a/doc/context/en/photos/help.html
+++ b/doc/en/context/en/photos/help.html
diff --git a/doc/context/en/profile/help.html b/doc/en/context/en/profile/help.html
index 563e0df99..563e0df99 100644
--- a/doc/context/en/profile/help.html
+++ b/doc/en/context/en/profile/help.html
diff --git a/doc/context/en/profiles/help.html b/doc/en/context/en/profiles/help.html
index 41f00fe64..41f00fe64 100644
--- a/doc/context/en/profiles/help.html
+++ b/doc/en/context/en/profiles/help.html
diff --git a/doc/context/en/register/help.html b/doc/en/context/en/register/help.html
index 9e94ab762..9e94ab762 100644
--- a/doc/context/en/register/help.html
+++ b/doc/en/context/en/register/help.html
diff --git a/doc/context/en/settings/account/help.html b/doc/en/context/en/settings/account/help.html
index 41f00fe64..41f00fe64 100644
--- a/doc/context/en/settings/account/help.html
+++ b/doc/en/context/en/settings/account/help.html
diff --git a/doc/context/en/settings/channel/help.html b/doc/en/context/en/settings/channel/help.html
index 41f00fe64..41f00fe64 100644
--- a/doc/context/en/settings/channel/help.html
+++ b/doc/en/context/en/settings/channel/help.html
diff --git a/doc/context/en/settings/features/help.html b/doc/en/context/en/settings/features/help.html
index 86e4f5dae..86e4f5dae 100644
--- a/doc/context/en/settings/features/help.html
+++ b/doc/en/context/en/settings/features/help.html
diff --git a/doc/context/en/settings/tokens/help.html b/doc/en/context/en/settings/tokens/help.html
index 6d7e6b98d..6d7e6b98d 100644
--- a/doc/context/en/settings/tokens/help.html
+++ b/doc/en/context/en/settings/tokens/help.html
diff --git a/doc/context/en/webpages/help.html b/doc/en/context/en/webpages/help.html
index a4817e4bf..a4817e4bf 100644
--- a/doc/context/en/webpages/help.html
+++ b/doc/en/context/en/webpages/help.html
diff --git a/doc/context/en/wiki/help.html b/doc/en/context/en/wiki/help.html
index 5dee85375..5dee85375 100644
--- a/doc/context/en/wiki/help.html
+++ b/doc/en/context/en/wiki/help.html
diff --git a/doc/context/es b/doc/en/context/es
index c8ba7666b..c8ba7666b 120000
--- a/doc/context/es
+++ b/doc/en/context/es
diff --git a/doc/context/es-es/admin/addons/assets/addon_repo_gui_1.png b/doc/en/context/es-es/admin/addons/assets/addon_repo_gui_1.png
index 37139b345..37139b345 100644
--- a/doc/context/es-es/admin/addons/assets/addon_repo_gui_1.png
+++ b/doc/en/context/es-es/admin/addons/assets/addon_repo_gui_1.png
Binary files differ
diff --git a/doc/context/es-es/admin/addons/help.html b/doc/en/context/es-es/admin/addons/help.html
index 49a047f5e..49a047f5e 100644
--- a/doc/context/es-es/admin/addons/help.html
+++ b/doc/en/context/es-es/admin/addons/help.html
diff --git a/doc/context/es-es/admin/logs/help.html b/doc/en/context/es-es/admin/logs/help.html
index 3a2ec413d..3a2ec413d 100644
--- a/doc/context/es-es/admin/logs/help.html
+++ b/doc/en/context/es-es/admin/logs/help.html
diff --git a/doc/context/es-es/admin/queue/help.html b/doc/en/context/es-es/admin/queue/help.html
index de9e6cdbb..de9e6cdbb 100644
--- a/doc/context/es-es/admin/queue/help.html
+++ b/doc/en/context/es-es/admin/queue/help.html
diff --git a/doc/context/es-es/admin/security/help.html b/doc/en/context/es-es/admin/security/help.html
index 229a91561..229a91561 100644
--- a/doc/context/es-es/admin/security/help.html
+++ b/doc/en/context/es-es/admin/security/help.html
diff --git a/doc/context/es-es/appman/help.html b/doc/en/context/es-es/appman/help.html
index 1b799a52b..1b799a52b 100644
--- a/doc/context/es-es/appman/help.html
+++ b/doc/en/context/es-es/appman/help.html
diff --git a/doc/context/es-es/articles/help.html b/doc/en/context/es-es/articles/help.html
index 0bf176fdd..0bf176fdd 100644
--- a/doc/context/es-es/articles/help.html
+++ b/doc/en/context/es-es/articles/help.html
diff --git a/doc/context/es-es/cards/help.html b/doc/en/context/es-es/cards/help.html
index 34889cd25..34889cd25 100644
--- a/doc/context/es-es/cards/help.html
+++ b/doc/en/context/es-es/cards/help.html
diff --git a/doc/context/es-es/channel/help.html b/doc/en/context/es-es/channel/help.html
index 682125e27..682125e27 100644
--- a/doc/context/es-es/channel/help.html
+++ b/doc/en/context/es-es/channel/help.html
diff --git a/doc/context/es-es/chat/help.html b/doc/en/context/es-es/chat/help.html
index 94df6a1d2..94df6a1d2 100644
--- a/doc/context/es-es/chat/help.html
+++ b/doc/en/context/es-es/chat/help.html
diff --git a/doc/context/es-es/cloud/help.html b/doc/en/context/es-es/cloud/help.html
index af891da17..af891da17 100644
--- a/doc/context/es-es/cloud/help.html
+++ b/doc/en/context/es-es/cloud/help.html
diff --git a/doc/context/es-es/connections/help.html b/doc/en/context/es-es/connections/help.html
index a0aa9cf32..a0aa9cf32 100644
--- a/doc/context/es-es/connections/help.html
+++ b/doc/en/context/es-es/connections/help.html
diff --git a/doc/context/es-es/connections/ifpending/help.html b/doc/en/context/es-es/connections/ifpending/help.html
index 84e547851..84e547851 100644
--- a/doc/context/es-es/connections/ifpending/help.html
+++ b/doc/en/context/es-es/connections/ifpending/help.html
diff --git a/doc/context/es-es/connedit/help.html b/doc/en/context/es-es/connedit/help.html
index e8c92ca28..e8c92ca28 100644
--- a/doc/context/es-es/connedit/help.html
+++ b/doc/en/context/es-es/connedit/help.html
diff --git a/doc/context/es-es/events/help.html b/doc/en/context/es-es/events/help.html
index b0ac1f9ea..b0ac1f9ea 100644
--- a/doc/context/es-es/events/help.html
+++ b/doc/en/context/es-es/events/help.html
diff --git a/doc/context/es-es/mail/help.html b/doc/en/context/es-es/mail/help.html
index 794af38a9..794af38a9 100644
--- a/doc/context/es-es/mail/help.html
+++ b/doc/en/context/es-es/mail/help.html
diff --git a/doc/context/es-es/network/help.html b/doc/en/context/es-es/network/help.html
index 082f52a49..082f52a49 100644
--- a/doc/context/es-es/network/help.html
+++ b/doc/en/context/es-es/network/help.html
diff --git a/doc/context/es-es/photos/help.html b/doc/en/context/es-es/photos/help.html
index 6623456eb..6623456eb 100644
--- a/doc/context/es-es/photos/help.html
+++ b/doc/en/context/es-es/photos/help.html
diff --git a/doc/context/es-es/profile/help.html b/doc/en/context/es-es/profile/help.html
index 28ff22499..28ff22499 100644
--- a/doc/context/es-es/profile/help.html
+++ b/doc/en/context/es-es/profile/help.html
diff --git a/doc/context/es-es/profiles/help.html b/doc/en/context/es-es/profiles/help.html
index 9303e049c..9303e049c 100644
--- a/doc/context/es-es/profiles/help.html
+++ b/doc/en/context/es-es/profiles/help.html
diff --git a/doc/context/es-es/settings/account/help.html b/doc/en/context/es-es/settings/account/help.html
index 9303e049c..9303e049c 100644
--- a/doc/context/es-es/settings/account/help.html
+++ b/doc/en/context/es-es/settings/account/help.html
diff --git a/doc/context/es-es/settings/channel/help.html b/doc/en/context/es-es/settings/channel/help.html
index 9303e049c..9303e049c 100644
--- a/doc/context/es-es/settings/channel/help.html
+++ b/doc/en/context/es-es/settings/channel/help.html
diff --git a/doc/context/es-es/settings/features/help.html b/doc/en/context/es-es/settings/features/help.html
index a9c3c2d6c..a9c3c2d6c 100644
--- a/doc/context/es-es/settings/features/help.html
+++ b/doc/en/context/es-es/settings/features/help.html
diff --git a/doc/context/es-es/settings/tokens/help.html b/doc/en/context/es-es/settings/tokens/help.html
index 6d6a8d81f..6d6a8d81f 100644
--- a/doc/context/es-es/settings/tokens/help.html
+++ b/doc/en/context/es-es/settings/tokens/help.html
diff --git a/doc/context/es-es/webpages/help.html b/doc/en/context/es-es/webpages/help.html
index 7cd7f7c11..7cd7f7c11 100644
--- a/doc/context/es-es/webpages/help.html
+++ b/doc/en/context/es-es/webpages/help.html
diff --git a/doc/context/es-es/wiki/help.html b/doc/en/context/es-es/wiki/help.html
index fdae1f095..fdae1f095 100644
--- a/doc/context/es-es/wiki/help.html
+++ b/doc/en/context/es-es/wiki/help.html
diff --git a/doc/context/fr/admin/logs/help.html b/doc/en/context/fr/admin/logs/help.html
index 53f8e65c3..53f8e65c3 100644
--- a/doc/context/fr/admin/logs/help.html
+++ b/doc/en/context/fr/admin/logs/help.html
diff --git a/doc/context/fr/admin/queue/help.html b/doc/en/context/fr/admin/queue/help.html
index 836d81b92..836d81b92 100644
--- a/doc/context/fr/admin/queue/help.html
+++ b/doc/en/context/fr/admin/queue/help.html
diff --git a/doc/context/fr/appman/help.html b/doc/en/context/fr/appman/help.html
index d65f78378..d65f78378 100644
--- a/doc/context/fr/appman/help.html
+++ b/doc/en/context/fr/appman/help.html
diff --git a/doc/context/fr/cards/help.html b/doc/en/context/fr/cards/help.html
index a58a9a73e..a58a9a73e 100644
--- a/doc/context/fr/cards/help.html
+++ b/doc/en/context/fr/cards/help.html
diff --git a/doc/context/fr/channel/help.html b/doc/en/context/fr/channel/help.html
index b2cf958b9..b2cf958b9 100644
--- a/doc/context/fr/channel/help.html
+++ b/doc/en/context/fr/channel/help.html
diff --git a/doc/context/fr/chat/help.html b/doc/en/context/fr/chat/help.html
index 5f354c3c6..5f354c3c6 100644
--- a/doc/context/fr/chat/help.html
+++ b/doc/en/context/fr/chat/help.html
diff --git a/doc/context/fr/cloud/help.html b/doc/en/context/fr/cloud/help.html
index c72e2ca1b..c72e2ca1b 100644
--- a/doc/context/fr/cloud/help.html
+++ b/doc/en/context/fr/cloud/help.html
diff --git a/doc/context/fr/connections/help.html b/doc/en/context/fr/connections/help.html
index 38e581866..38e581866 100644
--- a/doc/context/fr/connections/help.html
+++ b/doc/en/context/fr/connections/help.html
diff --git a/doc/context/fr/connections/ifpending/help.html b/doc/en/context/fr/connections/ifpending/help.html
index 38e581866..38e581866 100644
--- a/doc/context/fr/connections/ifpending/help.html
+++ b/doc/en/context/fr/connections/ifpending/help.html
diff --git a/doc/context/fr/connedit/help.html b/doc/en/context/fr/connedit/help.html
index c9b784d3e..c9b784d3e 100644
--- a/doc/context/fr/connedit/help.html
+++ b/doc/en/context/fr/connedit/help.html
diff --git a/doc/context/fr/events/help.html b/doc/en/context/fr/events/help.html
index aafd49703..aafd49703 100644
--- a/doc/context/fr/events/help.html
+++ b/doc/en/context/fr/events/help.html
diff --git a/doc/context/fr/mail/help.html b/doc/en/context/fr/mail/help.html
index fcf4eff21..fcf4eff21 100644
--- a/doc/context/fr/mail/help.html
+++ b/doc/en/context/fr/mail/help.html
diff --git a/doc/context/fr/photos/help.html b/doc/en/context/fr/photos/help.html
index 8609e9849..8609e9849 100644
--- a/doc/context/fr/photos/help.html
+++ b/doc/en/context/fr/photos/help.html
diff --git a/doc/context/fr/profile/help.html b/doc/en/context/fr/profile/help.html
index 26559db6f..26559db6f 100644
--- a/doc/context/fr/profile/help.html
+++ b/doc/en/context/fr/profile/help.html
diff --git a/doc/context/fr/settings/account/help.html b/doc/en/context/fr/settings/account/help.html
index ed8e7f374..ed8e7f374 100644
--- a/doc/context/fr/settings/account/help.html
+++ b/doc/en/context/fr/settings/account/help.html
diff --git a/doc/context/fr/settings/channel/help.html b/doc/en/context/fr/settings/channel/help.html
index ed8e7f374..ed8e7f374 100644
--- a/doc/context/fr/settings/channel/help.html
+++ b/doc/en/context/fr/settings/channel/help.html
diff --git a/doc/context/fr/settings/features/help.html b/doc/en/context/fr/settings/features/help.html
index 2811c932e..2811c932e 100644
--- a/doc/context/fr/settings/features/help.html
+++ b/doc/en/context/fr/settings/features/help.html
diff --git a/doc/context/fr/settings/tokens b/doc/en/context/fr/settings/tokens
index 6be17a615..6be17a615 100644
--- a/doc/context/fr/settings/tokens
+++ b/doc/en/context/fr/settings/tokens
diff --git a/doc/context/fr/webpages/help.html b/doc/en/context/fr/webpages/help.html
index c9d34c08f..c9d34c08f 100644
--- a/doc/context/fr/webpages/help.html
+++ b/doc/en/context/fr/webpages/help.html
diff --git a/doc/context/fr/wiki/help.html b/doc/en/context/fr/wiki/help.html
index af46899e4..af46899e4 100644
--- a/doc/context/fr/wiki/help.html
+++ b/doc/en/context/fr/wiki/help.html
diff --git a/doc/context/it/wiki/help.html b/doc/en/context/it/wiki/help.html
index e93e18eb4..e93e18eb4 100644
--- a/doc/context/it/wiki/help.html
+++ b/doc/en/context/it/wiki/help.html
diff --git a/doc/context/pl/admin/addons/assets/addon_repo_gui_1.png b/doc/en/context/pl/admin/addons/assets/addon_repo_gui_1.png
index 37139b345..37139b345 100644
--- a/doc/context/pl/admin/addons/assets/addon_repo_gui_1.png
+++ b/doc/en/context/pl/admin/addons/assets/addon_repo_gui_1.png
Binary files differ
diff --git a/doc/context/pl/admin/addons/help.html b/doc/en/context/pl/admin/addons/help.html
index fe63718df..fe63718df 100644
--- a/doc/context/pl/admin/addons/help.html
+++ b/doc/en/context/pl/admin/addons/help.html
diff --git a/doc/context/pl/admin/logs/help.html b/doc/en/context/pl/admin/logs/help.html
index 1d79d6a8c..1d79d6a8c 100644
--- a/doc/context/pl/admin/logs/help.html
+++ b/doc/en/context/pl/admin/logs/help.html
diff --git a/doc/context/pl/admin/queue/help.html b/doc/en/context/pl/admin/queue/help.html
index af5c06787..af5c06787 100644
--- a/doc/context/pl/admin/queue/help.html
+++ b/doc/en/context/pl/admin/queue/help.html
diff --git a/doc/context/pl/admin/security/help.html b/doc/en/context/pl/admin/security/help.html
index 0e582e6b4..0e582e6b4 100644
--- a/doc/context/pl/admin/security/help.html
+++ b/doc/en/context/pl/admin/security/help.html
diff --git a/doc/context/pl/appman/help.html b/doc/en/context/pl/appman/help.html
index 867b5b482..867b5b482 100644
--- a/doc/context/pl/appman/help.html
+++ b/doc/en/context/pl/appman/help.html
diff --git a/doc/context/pl/cards/help.html b/doc/en/context/pl/cards/help.html
index 2e9886283..2e9886283 100644
--- a/doc/context/pl/cards/help.html
+++ b/doc/en/context/pl/cards/help.html
diff --git a/doc/context/pl/channel/help.html b/doc/en/context/pl/channel/help.html
index bd454c361..bd454c361 100644
--- a/doc/context/pl/channel/help.html
+++ b/doc/en/context/pl/channel/help.html
diff --git a/doc/context/pl/chat/help.html b/doc/en/context/pl/chat/help.html
index 0cf063aa8..0cf063aa8 100644
--- a/doc/context/pl/chat/help.html
+++ b/doc/en/context/pl/chat/help.html
diff --git a/doc/context/pl/cloud/help.html b/doc/en/context/pl/cloud/help.html
index d629e6d41..d629e6d41 100644
--- a/doc/context/pl/cloud/help.html
+++ b/doc/en/context/pl/cloud/help.html
diff --git a/doc/context/pl/connections/help.html b/doc/en/context/pl/connections/help.html
index 837184334..837184334 100644
--- a/doc/context/pl/connections/help.html
+++ b/doc/en/context/pl/connections/help.html
diff --git a/doc/context/pl/connections/ifpending/help.html b/doc/en/context/pl/connections/ifpending/help.html
index b2d05947a..b2d05947a 100644
--- a/doc/context/pl/connections/ifpending/help.html
+++ b/doc/en/context/pl/connections/ifpending/help.html
diff --git a/doc/context/pl/connedit/help.html b/doc/en/context/pl/connedit/help.html
index 746908cf2..746908cf2 100644
--- a/doc/context/pl/connedit/help.html
+++ b/doc/en/context/pl/connedit/help.html
diff --git a/doc/context/pl/events/help.html b/doc/en/context/pl/events/help.html
index 542661fa5..542661fa5 100644
--- a/doc/context/pl/events/help.html
+++ b/doc/en/context/pl/events/help.html
diff --git a/doc/context/pl/mail/help.html b/doc/en/context/pl/mail/help.html
index b077aa2c4..b077aa2c4 100644
--- a/doc/context/pl/mail/help.html
+++ b/doc/en/context/pl/mail/help.html
diff --git a/doc/context/pl/network/help.html b/doc/en/context/pl/network/help.html
index f6ba75241..f6ba75241 100644
--- a/doc/context/pl/network/help.html
+++ b/doc/en/context/pl/network/help.html
diff --git a/doc/context/pl/photos/help.html b/doc/en/context/pl/photos/help.html
index e9ff7ee9d..e9ff7ee9d 100644
--- a/doc/context/pl/photos/help.html
+++ b/doc/en/context/pl/photos/help.html
diff --git a/doc/context/pl/profile/help.html b/doc/en/context/pl/profile/help.html
index 9ec5b0e73..9ec5b0e73 100644
--- a/doc/context/pl/profile/help.html
+++ b/doc/en/context/pl/profile/help.html
diff --git a/doc/context/pl/profiles/help.html b/doc/en/context/pl/profiles/help.html
index 874303908..874303908 100644
--- a/doc/context/pl/profiles/help.html
+++ b/doc/en/context/pl/profiles/help.html
diff --git a/doc/context/pl/register/help.html b/doc/en/context/pl/register/help.html
index c5c879e36..c5c879e36 100644
--- a/doc/context/pl/register/help.html
+++ b/doc/en/context/pl/register/help.html
diff --git a/doc/context/pl/settings/account/help.html b/doc/en/context/pl/settings/account/help.html
index dfe82f025..dfe82f025 100644
--- a/doc/context/pl/settings/account/help.html
+++ b/doc/en/context/pl/settings/account/help.html
diff --git a/doc/context/pl/settings/channel/help.html b/doc/en/context/pl/settings/channel/help.html
index dfe82f025..dfe82f025 100644
--- a/doc/context/pl/settings/channel/help.html
+++ b/doc/en/context/pl/settings/channel/help.html
diff --git a/doc/context/pl/settings/features/help.html b/doc/en/context/pl/settings/features/help.html
index fc5a62363..fc5a62363 100644
--- a/doc/context/pl/settings/features/help.html
+++ b/doc/en/context/pl/settings/features/help.html
diff --git a/doc/context/pl/settings/tokens/help.html b/doc/en/context/pl/settings/tokens/help.html
index 4c79841d6..4c79841d6 100644
--- a/doc/context/pl/settings/tokens/help.html
+++ b/doc/en/context/pl/settings/tokens/help.html
diff --git a/doc/context/pl/webpages/help.html b/doc/en/context/pl/webpages/help.html
index 64858fcf6..64858fcf6 100644
--- a/doc/context/pl/webpages/help.html
+++ b/doc/en/context/pl/webpages/help.html
diff --git a/doc/context/pl/wiki/help.html b/doc/en/context/pl/wiki/help.html
index 6aa6a7192..6aa6a7192 100644
--- a/doc/context/pl/wiki/help.html
+++ b/doc/en/context/pl/wiki/help.html
diff --git a/doc/context/ru/cards/help.html b/doc/en/context/ru/cards/help.html
index ccdf9d6d9..ccdf9d6d9 100644
--- a/doc/context/ru/cards/help.html
+++ b/doc/en/context/ru/cards/help.html
diff --git a/doc/context/ru/connections/help.html b/doc/en/context/ru/connections/help.html
index 6c9b9a0e9..6c9b9a0e9 100644
--- a/doc/context/ru/connections/help.html
+++ b/doc/en/context/ru/connections/help.html
diff --git a/doc/context/ru/network/help.html b/doc/en/context/ru/network/help.html
index 19b5452e2..19b5452e2 100644
--- a/doc/context/ru/network/help.html
+++ b/doc/en/context/ru/network/help.html
diff --git a/doc/database.bb b/doc/en/database.bb
index a0c1e8841..a0c1e8841 100644
--- a/doc/database.bb
+++ b/doc/en/database.bb
diff --git a/doc/database/db_abook.bb b/doc/en/database/db_abook.bb
index a346480d7..a346480d7 100644
--- a/doc/database/db_abook.bb
+++ b/doc/en/database/db_abook.bb
diff --git a/doc/database/db_account.bb b/doc/en/database/db_account.bb
index 35d7a9eb3..35d7a9eb3 100644
--- a/doc/database/db_account.bb
+++ b/doc/en/database/db_account.bb
diff --git a/doc/database/db_addon.bb b/doc/en/database/db_addon.bb
index bccd295f5..bccd295f5 100644
--- a/doc/database/db_addon.bb
+++ b/doc/en/database/db_addon.bb
diff --git a/doc/database/db_app.bb b/doc/en/database/db_app.bb
index 09df473ee..09df473ee 100644
--- a/doc/database/db_app.bb
+++ b/doc/en/database/db_app.bb
diff --git a/doc/database/db_attach.bb b/doc/en/database/db_attach.bb
index 5098401de..5098401de 100644
--- a/doc/database/db_attach.bb
+++ b/doc/en/database/db_attach.bb
diff --git a/doc/database/db_auth_codes.bb b/doc/en/database/db_auth_codes.bb
index c60f064a4..c60f064a4 100644
--- a/doc/database/db_auth_codes.bb
+++ b/doc/en/database/db_auth_codes.bb
diff --git a/doc/database/db_cache.bb b/doc/en/database/db_cache.bb
index 02c292f20..02c292f20 100644
--- a/doc/database/db_cache.bb
+++ b/doc/en/database/db_cache.bb
diff --git a/doc/database/db_channel.bb b/doc/en/database/db_channel.bb
index 518ff0978..518ff0978 100644
--- a/doc/database/db_channel.bb
+++ b/doc/en/database/db_channel.bb
diff --git a/doc/database/db_chat.bb b/doc/en/database/db_chat.bb
index 1aac2bd15..1aac2bd15 100644
--- a/doc/database/db_chat.bb
+++ b/doc/en/database/db_chat.bb
diff --git a/doc/database/db_chatpresence.bb b/doc/en/database/db_chatpresence.bb
index 0a7f666c9..0a7f666c9 100644
--- a/doc/database/db_chatpresence.bb
+++ b/doc/en/database/db_chatpresence.bb
diff --git a/doc/database/db_chatroom.bb b/doc/en/database/db_chatroom.bb
index 1d316288d..1d316288d 100644
--- a/doc/database/db_chatroom.bb
+++ b/doc/en/database/db_chatroom.bb
diff --git a/doc/database/db_clients.bb b/doc/en/database/db_clients.bb
index 0c66a4fc2..0c66a4fc2 100644
--- a/doc/database/db_clients.bb
+++ b/doc/en/database/db_clients.bb
diff --git a/doc/database/db_config.bb b/doc/en/database/db_config.bb
index f32d3c259..f32d3c259 100644
--- a/doc/database/db_config.bb
+++ b/doc/en/database/db_config.bb
diff --git a/doc/database/db_conv.bb b/doc/en/database/db_conv.bb
index 5adfa8c80..5adfa8c80 100644
--- a/doc/database/db_conv.bb
+++ b/doc/en/database/db_conv.bb
diff --git a/doc/database/db_event.bb b/doc/en/database/db_event.bb
index ad3c15789..ad3c15789 100644
--- a/doc/database/db_event.bb
+++ b/doc/en/database/db_event.bb
diff --git a/doc/database/db_fcontact.bb b/doc/en/database/db_fcontact.bb
index 9bd8c20fe..9bd8c20fe 100644
--- a/doc/database/db_fcontact.bb
+++ b/doc/en/database/db_fcontact.bb
diff --git a/doc/database/db_ffinder.bb b/doc/en/database/db_ffinder.bb
index c20158d56..c20158d56 100644
--- a/doc/database/db_ffinder.bb
+++ b/doc/en/database/db_ffinder.bb
diff --git a/doc/database/db_fserver.bb b/doc/en/database/db_fserver.bb
index 4c4b0b530..4c4b0b530 100644
--- a/doc/database/db_fserver.bb
+++ b/doc/en/database/db_fserver.bb
diff --git a/doc/database/db_fsuggest.bb b/doc/en/database/db_fsuggest.bb
index 9da1f2f6d..9da1f2f6d 100644
--- a/doc/database/db_fsuggest.bb
+++ b/doc/en/database/db_fsuggest.bb
diff --git a/doc/database/db_hook.bb b/doc/en/database/db_hook.bb
index 233062f98..233062f98 100644
--- a/doc/database/db_hook.bb
+++ b/doc/en/database/db_hook.bb
diff --git a/doc/database/db_hubloc.bb b/doc/en/database/db_hubloc.bb
index e4ab7159d..e4ab7159d 100644
--- a/doc/database/db_hubloc.bb
+++ b/doc/en/database/db_hubloc.bb
diff --git a/doc/database/db_issue.bb b/doc/en/database/db_issue.bb
index 0a6f2912b..0a6f2912b 100644
--- a/doc/database/db_issue.bb
+++ b/doc/en/database/db_issue.bb
diff --git a/doc/database/db_item.bb b/doc/en/database/db_item.bb
index 6383e13f8..6383e13f8 100644
--- a/doc/database/db_item.bb
+++ b/doc/en/database/db_item.bb
diff --git a/doc/database/db_item_id.bb b/doc/en/database/db_item_id.bb
index ba4cca247..ba4cca247 100644
--- a/doc/database/db_item_id.bb
+++ b/doc/en/database/db_item_id.bb
diff --git a/doc/database/db_likes.bb b/doc/en/database/db_likes.bb
index 118c9a87e..118c9a87e 100644
--- a/doc/database/db_likes.bb
+++ b/doc/en/database/db_likes.bb
diff --git a/doc/database/db_mail.bb b/doc/en/database/db_mail.bb
index 0628584ae..0628584ae 100644
--- a/doc/database/db_mail.bb
+++ b/doc/en/database/db_mail.bb
diff --git a/doc/database/db_menu.bb b/doc/en/database/db_menu.bb
index 5b478115d..5b478115d 100644
--- a/doc/database/db_menu.bb
+++ b/doc/en/database/db_menu.bb
diff --git a/doc/database/db_menu_item.bb b/doc/en/database/db_menu_item.bb
index b14aac5e4..b14aac5e4 100644
--- a/doc/database/db_menu_item.bb
+++ b/doc/en/database/db_menu_item.bb
diff --git a/doc/database/db_notify.bb b/doc/en/database/db_notify.bb
index 4787266cd..4787266cd 100644
--- a/doc/database/db_notify.bb
+++ b/doc/en/database/db_notify.bb
diff --git a/doc/database/db_obj.bb b/doc/en/database/db_obj.bb
index cc5e75598..cc5e75598 100644
--- a/doc/database/db_obj.bb
+++ b/doc/en/database/db_obj.bb
diff --git a/doc/database/db_outq.bb b/doc/en/database/db_outq.bb
index 970f99de5..970f99de5 100644
--- a/doc/database/db_outq.bb
+++ b/doc/en/database/db_outq.bb
diff --git a/doc/database/db_pconfig.bb b/doc/en/database/db_pconfig.bb
index 2ac36e61a..2ac36e61a 100644
--- a/doc/database/db_pconfig.bb
+++ b/doc/en/database/db_pconfig.bb
diff --git a/doc/database/db_pgrp.bb b/doc/en/database/db_pgrp.bb
index 73265b90e..73265b90e 100644
--- a/doc/database/db_pgrp.bb
+++ b/doc/en/database/db_pgrp.bb
diff --git a/doc/database/db_pgrp_member.bb b/doc/en/database/db_pgrp_member.bb
index b9ab8171d..b9ab8171d 100644
--- a/doc/database/db_pgrp_member.bb
+++ b/doc/en/database/db_pgrp_member.bb
diff --git a/doc/database/db_photo.bb b/doc/en/database/db_photo.bb
index 91840ec1e..91840ec1e 100644
--- a/doc/database/db_photo.bb
+++ b/doc/en/database/db_photo.bb
diff --git a/doc/database/db_poll.bb b/doc/en/database/db_poll.bb
index 57d808b71..57d808b71 100644
--- a/doc/database/db_poll.bb
+++ b/doc/en/database/db_poll.bb
diff --git a/doc/database/db_poll_elm.bb b/doc/en/database/db_poll_elm.bb
index fd649d5a6..fd649d5a6 100644
--- a/doc/database/db_poll_elm.bb
+++ b/doc/en/database/db_poll_elm.bb
diff --git a/doc/database/db_profdef.bb b/doc/en/database/db_profdef.bb
index a0904fd79..a0904fd79 100644
--- a/doc/database/db_profdef.bb
+++ b/doc/en/database/db_profdef.bb
diff --git a/doc/database/db_profext.bb b/doc/en/database/db_profext.bb
index ada9dce2a..ada9dce2a 100644
--- a/doc/database/db_profext.bb
+++ b/doc/en/database/db_profext.bb
diff --git a/doc/database/db_profile.bb b/doc/en/database/db_profile.bb
index 717fae585..717fae585 100644
--- a/doc/database/db_profile.bb
+++ b/doc/en/database/db_profile.bb
diff --git a/doc/database/db_profile_check.bb b/doc/en/database/db_profile_check.bb
index 3be64c5da..3be64c5da 100644
--- a/doc/database/db_profile_check.bb
+++ b/doc/en/database/db_profile_check.bb
diff --git a/doc/database/db_register.bb b/doc/en/database/db_register.bb
index 50672b5e1..50672b5e1 100644
--- a/doc/database/db_register.bb
+++ b/doc/en/database/db_register.bb
diff --git a/doc/database/db_session.bb b/doc/en/database/db_session.bb
index d7ff0482d..d7ff0482d 100644
--- a/doc/database/db_session.bb
+++ b/doc/en/database/db_session.bb
diff --git a/doc/database/db_shares.bb b/doc/en/database/db_shares.bb
index be5255c03..be5255c03 100644
--- a/doc/database/db_shares.bb
+++ b/doc/en/database/db_shares.bb
diff --git a/doc/database/db_sign.bb b/doc/en/database/db_sign.bb
index e80ea7ef3..e80ea7ef3 100644
--- a/doc/database/db_sign.bb
+++ b/doc/en/database/db_sign.bb
diff --git a/doc/database/db_site.bb b/doc/en/database/db_site.bb
index 8dea4dae6..8dea4dae6 100644
--- a/doc/database/db_site.bb
+++ b/doc/en/database/db_site.bb
diff --git a/doc/database/db_source.bb b/doc/en/database/db_source.bb
index 92850a82e..92850a82e 100644
--- a/doc/database/db_source.bb
+++ b/doc/en/database/db_source.bb
diff --git a/doc/database/db_spam.bb b/doc/en/database/db_spam.bb
index b75e1edd3..b75e1edd3 100644
--- a/doc/database/db_spam.bb
+++ b/doc/en/database/db_spam.bb
diff --git a/doc/database/db_sys_perms.bb b/doc/en/database/db_sys_perms.bb
index 04416a26b..04416a26b 100644
--- a/doc/database/db_sys_perms.bb
+++ b/doc/en/database/db_sys_perms.bb
diff --git a/doc/database/db_term.bb b/doc/en/database/db_term.bb
index bd155fe21..bd155fe21 100644
--- a/doc/database/db_term.bb
+++ b/doc/en/database/db_term.bb
diff --git a/doc/database/db_tokens.bb b/doc/en/database/db_tokens.bb
index 35da2458c..35da2458c 100644
--- a/doc/database/db_tokens.bb
+++ b/doc/en/database/db_tokens.bb
diff --git a/doc/database/db_updates.bb b/doc/en/database/db_updates.bb
index f2e25d84c..f2e25d84c 100644
--- a/doc/database/db_updates.bb
+++ b/doc/en/database/db_updates.bb
diff --git a/doc/database/db_verify.bb b/doc/en/database/db_verify.bb
index 9d01181c5..9d01181c5 100644
--- a/doc/database/db_verify.bb
+++ b/doc/en/database/db_verify.bb
diff --git a/doc/database/db_vote.bb b/doc/en/database/db_vote.bb
index 0b9a423eb..0b9a423eb 100644
--- a/doc/database/db_vote.bb
+++ b/doc/en/database/db_vote.bb
diff --git a/doc/database/db_xchan.bb b/doc/en/database/db_xchan.bb
index 8932969c5..8932969c5 100644
--- a/doc/database/db_xchan.bb
+++ b/doc/en/database/db_xchan.bb
diff --git a/doc/database/db_xchat.bb b/doc/en/database/db_xchat.bb
index 0897408d1..0897408d1 100644
--- a/doc/database/db_xchat.bb
+++ b/doc/en/database/db_xchat.bb
diff --git a/doc/database/db_xconfig.bb b/doc/en/database/db_xconfig.bb
index 111d1ce3a..111d1ce3a 100644
--- a/doc/database/db_xconfig.bb
+++ b/doc/en/database/db_xconfig.bb
diff --git a/doc/database/db_xign.bb b/doc/en/database/db_xign.bb
index 63c6569de..63c6569de 100644
--- a/doc/database/db_xign.bb
+++ b/doc/en/database/db_xign.bb
diff --git a/doc/database/db_xlink.bb b/doc/en/database/db_xlink.bb
index 528f8da19..528f8da19 100644
--- a/doc/database/db_xlink.bb
+++ b/doc/en/database/db_xlink.bb
diff --git a/doc/database/db_xprof.bb b/doc/en/database/db_xprof.bb
index bed79e9ca..bed79e9ca 100644
--- a/doc/database/db_xprof.bb
+++ b/doc/en/database/db_xprof.bb
diff --git a/doc/database/db_xtag.bb b/doc/en/database/db_xtag.bb
index 1e6fb9961..1e6fb9961 100644
--- a/doc/database/db_xtag.bb
+++ b/doc/en/database/db_xtag.bb
diff --git a/doc/dev-function-overview.md b/doc/en/dev-function-overview.md
index cd2526ead..4dccc8cef 100644
--- a/doc/dev-function-overview.md
+++ b/doc/en/dev-function-overview.md
@@ -21,11 +21,15 @@ returns an xchan structure representing the current viewer if authenticated (loc
* get_config($family,$key), get_pconfig($uid,$family,$key)
-Returns the config setting for $family and $key or false if unset.
+Returns the config setting for $family and $key or false if unset.
+
+Deprecated: Use Zotlabs\Lib\Config::Get instead.
* set_config($family,$key,$value), set_pconfig($uid,$family,$key,$value)
-Sets the value of config setting for $family and $key to $value. Returns $value. The config versions operate on system-wide settings. The pconfig versions get/set the values for a specific integer uid (channel_id).
+Sets the value of config setting for $family and $key to $value. Returns $value. The config versions operate on system-wide settings. The pconfig versions get/set the values for a specific integer uid (channel_id).
+
+Deprecated: Use Zotlabs\Lib\Config::Set instead.
* dbesc()
@@ -33,7 +37,7 @@ Always escape strings being used in DB queries. This function returns the escape
* q($sql,$var1...)
-Perform a DB query with the SQL statement $sql. printf style arguments %s and %d are replaced with variable arguments, which should each be appropriately dbesc() or intval(). SELECT queries return an array of results or false if SQL or DB error. Other queries return true if the command was successful or false if it wasn't.
+Perform a DB query with the SQL statement $sql. printf style arguments %s and %d are replaced with variable arguments, which should each be appropriately dbesc() or intval(). SELECT queries return an array of results or false if SQL or DB error. Other queries return true if the command was successful or false if it wasn't.
* t($string)
diff --git a/doc/dev_beginner.bb b/doc/en/dev_beginner.bb
index 4ac69c301..4ac69c301 100644
--- a/doc/dev_beginner.bb
+++ b/doc/en/dev_beginner.bb
diff --git a/doc/develop.bb b/doc/en/develop.bb
index 20e987a5a..20e987a5a 100644
--- a/doc/develop.bb
+++ b/doc/en/develop.bb
diff --git a/doc/developer/api_zot.bb b/doc/en/developer/api_zot.bb
index ff937bfa5..ff937bfa5 100644
--- a/doc/developer/api_zot.bb
+++ b/doc/en/developer/api_zot.bb
diff --git a/doc/developer/covenant.bb b/doc/en/developer/covenant.bb
index 431cc74e9..431cc74e9 100644
--- a/doc/developer/covenant.bb
+++ b/doc/en/developer/covenant.bb
diff --git a/doc/developer/developer_guide.bb b/doc/en/developer/developer_guide.bb
index d04cec121..d04cec121 100644
--- a/doc/developer/developer_guide.bb
+++ b/doc/en/developer/developer_guide.bb
diff --git a/doc/developer/testing.md b/doc/en/developer/testing.md
index f7e8ffeba..f7e8ffeba 100644
--- a/doc/developer/testing.md
+++ b/doc/en/developer/testing.md
diff --git a/doc/developer/unorganized.md b/doc/en/developer/unorganized.md
index 5ba719226..5ba719226 100644
--- a/doc/developer/unorganized.md
+++ b/doc/en/developer/unorganized.md
diff --git a/doc/developer/zot_protocol.bb b/doc/en/developer/zot_protocol.bb
index e9355bca8..e9355bca8 100644
--- a/doc/developer/zot_protocol.bb
+++ b/doc/en/developer/zot_protocol.bb
diff --git a/doc/developer_function_primer.bb b/doc/en/developer_function_primer.bb
index 48af9523d..f39954d73 100644
--- a/doc/developer_function_primer.bb
+++ b/doc/en/developer_function_primer.bb
@@ -20,10 +20,14 @@ returns an xchan structure representing the current viewer if authenticated (loc
Returns the config setting for $family and $key or false if unset.
+Deprecated: Use Zotlabs\Lib\Config::Get instead.
+
[b] set_config($family,$key,$value), set_pconfig($uid,$family,$key,$value)[/b]
Sets the value of config setting for $family and $key to $value. Returns $value. The config versions operate on system-wide settings. The pconfig versions get/set the values for a specific integer uid (channel_id). The xconfig version get/sets the value for a specific xchan hash - generally used for remote users.
+Deprecated: Use Zotlabs\Lib\Config::Set instead.
+
[b]dbesc()[/b]
Always escape strings being used in DB queries. This function returns the escaped string. Integer DB parameters should all be proven integers by wrapping with intval()
diff --git a/doc/developers.bb b/doc/en/developers.bb
index 22dc82d7e..22dc82d7e 100644
--- a/doc/developers.bb
+++ b/doc/en/developers.bb
diff --git a/doc/diaspora_compat.bb b/doc/en/diaspora_compat.bb
index f27a63b9d..f27a63b9d 100644
--- a/doc/diaspora_compat.bb
+++ b/doc/en/diaspora_compat.bb
diff --git a/doc/directories.bb b/doc/en/directories.bb
index 60a0b624d..60a0b624d 100644
--- a/doc/directories.bb
+++ b/doc/en/directories.bb
diff --git a/doc/dnt-policy.txt b/doc/en/dnt-policy.txt
index ad946d1f8..ad946d1f8 100644
--- a/doc/dnt-policy.txt
+++ b/doc/en/dnt-policy.txt
diff --git a/doc/doco.bb b/doc/en/doco.bb
index 7ca64cfea..7ca64cfea 100644
--- a/doc/doco.bb
+++ b/doc/en/doco.bb
diff --git a/doc/encryption.bb b/doc/en/encryption.bb
index 9985f4b33..9985f4b33 100644
--- a/doc/encryption.bb
+++ b/doc/en/encryption.bb
diff --git a/doc/external-resource-links.bb b/doc/en/external-resource-links.bb
index 338db8023..338db8023 100644
--- a/doc/external-resource-links.bb
+++ b/doc/en/external-resource-links.bb
diff --git a/doc/extra_features.bb b/doc/en/extra_features.bb
index 17d85228e..17d85228e 100644
--- a/doc/extra_features.bb
+++ b/doc/en/extra_features.bb
diff --git a/doc/faq_admins.bb b/doc/en/faq_admins.bb
index 0b54a41de..0b54a41de 100644
--- a/doc/faq_admins.bb
+++ b/doc/en/faq_admins.bb
diff --git a/doc/feature/access_tokens.bb b/doc/en/feature/access_tokens.bb
index eb5c03717..eb5c03717 100644
--- a/doc/feature/access_tokens.bb
+++ b/doc/en/feature/access_tokens.bb
diff --git a/doc/feature/additional/access.md b/doc/en/feature/additional/access.md
index b7f0df717..b7f0df717 100644
--- a/doc/feature/additional/access.md
+++ b/doc/en/feature/additional/access.md
diff --git a/doc/feature/additional/composition.md b/doc/en/feature/additional/composition.md
index 1256f7501..1256f7501 100644
--- a/doc/feature/additional/composition.md
+++ b/doc/en/feature/additional/composition.md
diff --git a/doc/feature/additional/filtering.md b/doc/en/feature/additional/filtering.md
index ba8e1e29f..ba8e1e29f 100644
--- a/doc/feature/additional/filtering.md
+++ b/doc/en/feature/additional/filtering.md
diff --git a/doc/feature/additional/general.md b/doc/en/feature/additional/general.md
index a1b712b12..a1b712b12 100644
--- a/doc/feature/additional/general.md
+++ b/doc/en/feature/additional/general.md
diff --git a/doc/feature/additional/overview.md b/doc/en/feature/additional/overview.md
index b51f60bcd..b51f60bcd 100644
--- a/doc/feature/additional/overview.md
+++ b/doc/en/feature/additional/overview.md
diff --git a/doc/feature/additional/posts.md b/doc/en/feature/additional/posts.md
index d3f6b37db..d3f6b37db 100644
--- a/doc/feature/additional/posts.md
+++ b/doc/en/feature/additional/posts.md
diff --git a/doc/federate.bb b/doc/en/federate.bb
index 9137ec160..9137ec160 100644
--- a/doc/federate.bb
+++ b/doc/en/federate.bb
diff --git a/doc/filesync.md b/doc/en/filesync.md
index 4c64bdb09..4c64bdb09 100644
--- a/doc/filesync.md
+++ b/doc/en/filesync.md
diff --git a/doc/first-post.bb b/doc/en/first-post.bb
index cf6ed5b49..cf6ed5b49 100644
--- a/doc/first-post.bb
+++ b/doc/en/first-post.bb
diff --git a/doc/gdpr1.md b/doc/en/gdpr1.md
index daa401a3d..daa401a3d 100644
--- a/doc/gdpr1.md
+++ b/doc/en/gdpr1.md
diff --git a/doc/general.bb b/doc/en/general.bb
index 0b80db756..0b80db756 100644
--- a/doc/general.bb
+++ b/doc/en/general.bb
diff --git a/doc/git_for_non_developers.bb b/doc/en/git_for_non_developers.bb
index 5fba17439..5fba17439 100644
--- a/doc/git_for_non_developers.bb
+++ b/doc/en/git_for_non_developers.bb
diff --git a/doc/hidden_configs.bb b/doc/en/hidden_configs.bb
index 4eac1aa6e..4eac1aa6e 100644
--- a/doc/hidden_configs.bb
+++ b/doc/en/hidden_configs.bb
diff --git a/doc/hook/about_hook.bb b/doc/en/hook/about_hook.bb
index 22b60d786..22b60d786 100644
--- a/doc/hook/about_hook.bb
+++ b/doc/en/hook/about_hook.bb
diff --git a/doc/hook/accept_follow.bb b/doc/en/hook/accept_follow.bb
index e8b1ed0c4..e8b1ed0c4 100644
--- a/doc/hook/accept_follow.bb
+++ b/doc/en/hook/accept_follow.bb
diff --git a/doc/hook/account_downgrade.bb b/doc/en/hook/account_downgrade.bb
index 63bae0a58..63bae0a58 100644
--- a/doc/hook/account_downgrade.bb
+++ b/doc/en/hook/account_downgrade.bb
diff --git a/doc/hook/account_settings.bb b/doc/en/hook/account_settings.bb
index 91b3a8385..91b3a8385 100644
--- a/doc/hook/account_settings.bb
+++ b/doc/en/hook/account_settings.bb
diff --git a/doc/hook/account_settings_post.bb b/doc/en/hook/account_settings_post.bb
index bbd7a57a8..bbd7a57a8 100644
--- a/doc/hook/account_settings_post.bb
+++ b/doc/en/hook/account_settings_post.bb
diff --git a/doc/hook/activity_decode_mapper.bb b/doc/en/hook/activity_decode_mapper.bb
index 43d08a136..43d08a136 100644
--- a/doc/hook/activity_decode_mapper.bb
+++ b/doc/en/hook/activity_decode_mapper.bb
diff --git a/doc/hook/activity_filter.bb b/doc/en/hook/activity_filter.bb
index 9d0768577..9d0768577 100644
--- a/doc/hook/activity_filter.bb
+++ b/doc/en/hook/activity_filter.bb
diff --git a/doc/hook/activity_mapper.bb b/doc/en/hook/activity_mapper.bb
index db65fadc4..db65fadc4 100644
--- a/doc/hook/activity_mapper.bb
+++ b/doc/en/hook/activity_mapper.bb
diff --git a/doc/hook/activity_obj_decode_mapper.bb b/doc/en/hook/activity_obj_decode_mapper.bb
index a96b32eee..a96b32eee 100644
--- a/doc/hook/activity_obj_decode_mapper.bb
+++ b/doc/en/hook/activity_obj_decode_mapper.bb
diff --git a/doc/hook/activity_obj_mapper.bb b/doc/en/hook/activity_obj_mapper.bb
index 7c14a1b81..7c14a1b81 100644
--- a/doc/hook/activity_obj_mapper.bb
+++ b/doc/en/hook/activity_obj_mapper.bb
diff --git a/doc/hook/activity_order.bb b/doc/en/hook/activity_order.bb
index 4a4670d03..4a4670d03 100644
--- a/doc/hook/activity_order.bb
+++ b/doc/en/hook/activity_order.bb
diff --git a/doc/hook/activity_received.bb b/doc/en/hook/activity_received.bb
index 2e9d68bf3..2e9d68bf3 100644
--- a/doc/hook/activity_received.bb
+++ b/doc/en/hook/activity_received.bb
diff --git a/doc/hook/addon_app_installed_filter.bb b/doc/en/hook/addon_app_installed_filter.bb
index e610b3205..e610b3205 100644
--- a/doc/hook/addon_app_installed_filter.bb
+++ b/doc/en/hook/addon_app_installed_filter.bb
diff --git a/doc/hook/affinity_labels.bb b/doc/en/hook/affinity_labels.bb
index 7234b7632..7234b7632 100644
--- a/doc/hook/affinity_labels.bb
+++ b/doc/en/hook/affinity_labels.bb
diff --git a/doc/hook/api_perm_is_allowed.bb b/doc/en/hook/api_perm_is_allowed.bb
index 862cbd653..862cbd653 100644
--- a/doc/hook/api_perm_is_allowed.bb
+++ b/doc/en/hook/api_perm_is_allowed.bb
diff --git a/doc/hook/app_destroy.bb b/doc/en/hook/app_destroy.bb
index 386d7af16..386d7af16 100644
--- a/doc/hook/app_destroy.bb
+++ b/doc/en/hook/app_destroy.bb
diff --git a/doc/hook/app_installed_filter.bb b/doc/en/hook/app_installed_filter.bb
index f0d91d6f0..f0d91d6f0 100644
--- a/doc/hook/app_installed_filter.bb
+++ b/doc/en/hook/app_installed_filter.bb
diff --git a/doc/hook/atom_author.bb b/doc/en/hook/atom_author.bb
index c9d05a593..c9d05a593 100644
--- a/doc/hook/atom_author.bb
+++ b/doc/en/hook/atom_author.bb
diff --git a/doc/hook/atom_entry.bb b/doc/en/hook/atom_entry.bb
index 0aec89f16..0aec89f16 100644
--- a/doc/hook/atom_entry.bb
+++ b/doc/en/hook/atom_entry.bb
diff --git a/doc/hook/atom_feed.bb b/doc/en/hook/atom_feed.bb
index 69775ca5e..69775ca5e 100644
--- a/doc/hook/atom_feed.bb
+++ b/doc/en/hook/atom_feed.bb
diff --git a/doc/hook/atom_feed_end.bb b/doc/en/hook/atom_feed_end.bb
index 4f019fc8f..4f019fc8f 100644
--- a/doc/hook/atom_feed_end.bb
+++ b/doc/en/hook/atom_feed_end.bb
diff --git a/doc/hook/attach_delete.bb b/doc/en/hook/attach_delete.bb
index 3b63f28d3..3b63f28d3 100644
--- a/doc/hook/attach_delete.bb
+++ b/doc/en/hook/attach_delete.bb
diff --git a/doc/hook/attach_upload_file.bb b/doc/en/hook/attach_upload_file.bb
index 1f8056caa..1f8056caa 100644
--- a/doc/hook/attach_upload_file.bb
+++ b/doc/en/hook/attach_upload_file.bb
diff --git a/doc/hook/authenticate.bb b/doc/en/hook/authenticate.bb
index eb8071e73..eb8071e73 100644
--- a/doc/hook/authenticate.bb
+++ b/doc/en/hook/authenticate.bb
diff --git a/doc/hook/author_is_pmable.bb b/doc/en/hook/author_is_pmable.bb
index 11d1185f3..11d1185f3 100644
--- a/doc/hook/author_is_pmable.bb
+++ b/doc/en/hook/author_is_pmable.bb
diff --git a/doc/hook/bb2diaspora.bb b/doc/en/hook/bb2diaspora.bb
index c28f1883e..c28f1883e 100644
--- a/doc/hook/bb2diaspora.bb
+++ b/doc/en/hook/bb2diaspora.bb
diff --git a/doc/hook/bbcode.bb b/doc/en/hook/bbcode.bb
index f6b8711b0..f6b8711b0 100644
--- a/doc/hook/bbcode.bb
+++ b/doc/en/hook/bbcode.bb
diff --git a/doc/hook/bbcode_filter.bb b/doc/en/hook/bbcode_filter.bb
index efeb2e1b0..efeb2e1b0 100644
--- a/doc/hook/bbcode_filter.bb
+++ b/doc/en/hook/bbcode_filter.bb
diff --git a/doc/hook/build_pagehead.bb b/doc/en/hook/build_pagehead.bb
index 8fc3486c7..8fc3486c7 100644
--- a/doc/hook/build_pagehead.bb
+++ b/doc/en/hook/build_pagehead.bb
diff --git a/doc/hook/can_comment_on_post.bb b/doc/en/hook/can_comment_on_post.bb
index 2cfd3b2da..2cfd3b2da 100644
--- a/doc/hook/can_comment_on_post.bb
+++ b/doc/en/hook/can_comment_on_post.bb
diff --git a/doc/hook/change_channel.bb b/doc/en/hook/change_channel.bb
index 4514b9265..4514b9265 100644
--- a/doc/hook/change_channel.bb
+++ b/doc/en/hook/change_channel.bb
diff --git a/doc/hook/channel_links.bb b/doc/en/hook/channel_links.bb
index c0243dac6..c0243dac6 100644
--- a/doc/hook/channel_links.bb
+++ b/doc/en/hook/channel_links.bb
diff --git a/doc/hook/channel_remove.bb b/doc/en/hook/channel_remove.bb
index db9e9dd82..db9e9dd82 100644
--- a/doc/hook/channel_remove.bb
+++ b/doc/en/hook/channel_remove.bb
diff --git a/doc/hook/chat_message.bb b/doc/en/hook/chat_message.bb
index ccc93bb2c..ccc93bb2c 100644
--- a/doc/hook/chat_message.bb
+++ b/doc/en/hook/chat_message.bb
diff --git a/doc/hook/chat_post.bb b/doc/en/hook/chat_post.bb
index 7cb3c9fa1..7cb3c9fa1 100644
--- a/doc/hook/chat_post.bb
+++ b/doc/en/hook/chat_post.bb
diff --git a/doc/hook/check_account_email.bb b/doc/en/hook/check_account_email.bb
index b309706a0..b309706a0 100644
--- a/doc/hook/check_account_email.bb
+++ b/doc/en/hook/check_account_email.bb
diff --git a/doc/hook/check_account_invite.bb b/doc/en/hook/check_account_invite.bb
index 8d4a40522..8d4a40522 100644
--- a/doc/hook/check_account_invite.bb
+++ b/doc/en/hook/check_account_invite.bb
diff --git a/doc/hook/check_account_password.bb b/doc/en/hook/check_account_password.bb
index ce5202f48..ce5202f48 100644
--- a/doc/hook/check_account_password.bb
+++ b/doc/en/hook/check_account_password.bb
diff --git a/doc/hook/check_channelallowed.bb b/doc/en/hook/check_channelallowed.bb
index e7559c92f..e7559c92f 100644
--- a/doc/hook/check_channelallowed.bb
+++ b/doc/en/hook/check_channelallowed.bb
diff --git a/doc/hook/check_siteallowed.bb b/doc/en/hook/check_siteallowed.bb
index 28134cbd2..28134cbd2 100644
--- a/doc/hook/check_siteallowed.bb
+++ b/doc/en/hook/check_siteallowed.bb
diff --git a/doc/hook/collect_public_recipients.bb b/doc/en/hook/collect_public_recipients.bb
index de3f4049e..de3f4049e 100644
--- a/doc/hook/collect_public_recipients.bb
+++ b/doc/en/hook/collect_public_recipients.bb
diff --git a/doc/hook/comments_are_now_closed.bb b/doc/en/hook/comments_are_now_closed.bb
index 4d3baa95a..4d3baa95a 100644
--- a/doc/hook/comments_are_now_closed.bb
+++ b/doc/en/hook/comments_are_now_closed.bb
diff --git a/doc/hook/connect_premium.bb b/doc/en/hook/connect_premium.bb
index ae3aafc66..ae3aafc66 100644
--- a/doc/hook/connect_premium.bb
+++ b/doc/en/hook/connect_premium.bb
diff --git a/doc/hook/connection_remove.bb b/doc/en/hook/connection_remove.bb
index bd13ae5f2..bd13ae5f2 100644
--- a/doc/hook/connection_remove.bb
+++ b/doc/en/hook/connection_remove.bb
diff --git a/doc/hook/connector_settings.bb b/doc/en/hook/connector_settings.bb
index 9b59c49da..9b59c49da 100644
--- a/doc/hook/connector_settings.bb
+++ b/doc/en/hook/connector_settings.bb
diff --git a/doc/hook/construct_page.bb b/doc/en/hook/construct_page.bb
index 700d9256f..700d9256f 100644
--- a/doc/hook/construct_page.bb
+++ b/doc/en/hook/construct_page.bb
diff --git a/doc/hook/contact_block_end.bb b/doc/en/hook/contact_block_end.bb
index 30a7d2d76..30a7d2d76 100644
--- a/doc/hook/contact_block_end.bb
+++ b/doc/en/hook/contact_block_end.bb
diff --git a/doc/hook/contact_edit.bb b/doc/en/hook/contact_edit.bb
index 5fd31fb1d..5fd31fb1d 100644
--- a/doc/hook/contact_edit.bb
+++ b/doc/en/hook/contact_edit.bb
diff --git a/doc/hook/contact_edit_post.bb b/doc/en/hook/contact_edit_post.bb
index bc736f8b8..bc736f8b8 100644
--- a/doc/hook/contact_edit_post.bb
+++ b/doc/en/hook/contact_edit_post.bb
diff --git a/doc/hook/contact_select_options.bb b/doc/en/hook/contact_select_options.bb
index 65f9154ff..65f9154ff 100644
--- a/doc/hook/contact_select_options.bb
+++ b/doc/en/hook/contact_select_options.bb
diff --git a/doc/hook/content_security_policy.bb b/doc/en/hook/content_security_policy.bb
index 96b8095ae..96b8095ae 100644
--- a/doc/hook/content_security_policy.bb
+++ b/doc/en/hook/content_security_policy.bb
diff --git a/doc/hook/conversation_start.bb b/doc/en/hook/conversation_start.bb
index 7208c8d8f..7208c8d8f 100644
--- a/doc/hook/conversation_start.bb
+++ b/doc/en/hook/conversation_start.bb
diff --git a/doc/hook/create_identity.bb b/doc/en/hook/create_identity.bb
index 5c1da2d43..5c1da2d43 100644
--- a/doc/hook/create_identity.bb
+++ b/doc/en/hook/create_identity.bb
diff --git a/doc/hook/cron.bb b/doc/en/hook/cron.bb
index 55120b6c2..55120b6c2 100644
--- a/doc/hook/cron.bb
+++ b/doc/en/hook/cron.bb
diff --git a/doc/hook/cron_daily.bb b/doc/en/hook/cron_daily.bb
index 802bea5e4..802bea5e4 100644
--- a/doc/hook/cron_daily.bb
+++ b/doc/en/hook/cron_daily.bb
diff --git a/doc/hook/cron_weekly.bb b/doc/en/hook/cron_weekly.bb
index c01bf9611..c01bf9611 100644
--- a/doc/hook/cron_weekly.bb
+++ b/doc/en/hook/cron_weekly.bb
diff --git a/doc/hook/crypto_methods.bb b/doc/en/hook/crypto_methods.bb
index 1b16f567d..1b16f567d 100644
--- a/doc/hook/crypto_methods.bb
+++ b/doc/en/hook/crypto_methods.bb
diff --git a/doc/hook/daemon_addon.bb b/doc/en/hook/daemon_addon.bb
index b60b25748..b60b25748 100644
--- a/doc/hook/daemon_addon.bb
+++ b/doc/en/hook/daemon_addon.bb
diff --git a/doc/hook/daemon_master_release.bb b/doc/en/hook/daemon_master_release.bb
index a17216d48..a17216d48 100644
--- a/doc/hook/daemon_master_release.bb
+++ b/doc/en/hook/daemon_master_release.bb
diff --git a/doc/hook/directory_item.bb b/doc/en/hook/directory_item.bb
index cb710e0b4..cb710e0b4 100644
--- a/doc/hook/directory_item.bb
+++ b/doc/en/hook/directory_item.bb
diff --git a/doc/hook/discover_channel_webfinger.bb b/doc/en/hook/discover_channel_webfinger.bb
index b0eb5f2c4..b0eb5f2c4 100644
--- a/doc/hook/discover_channel_webfinger.bb
+++ b/doc/en/hook/discover_channel_webfinger.bb
diff --git a/doc/hook/display_item.bb b/doc/en/hook/display_item.bb
index a6bfd621d..a6bfd621d 100644
--- a/doc/hook/display_item.bb
+++ b/doc/en/hook/display_item.bb
diff --git a/doc/hook/display_settings.bb b/doc/en/hook/display_settings.bb
index 1f1e0b491..1f1e0b491 100644
--- a/doc/hook/display_settings.bb
+++ b/doc/en/hook/display_settings.bb
diff --git a/doc/hook/display_settings_post.bb b/doc/en/hook/display_settings_post.bb
index d3bb39359..d3bb39359 100644
--- a/doc/hook/display_settings_post.bb
+++ b/doc/en/hook/display_settings_post.bb
diff --git a/doc/hook/donate_contributors.bb b/doc/en/hook/donate_contributors.bb
index f97c77efa..f97c77efa 100644
--- a/doc/hook/donate_contributors.bb
+++ b/doc/en/hook/donate_contributors.bb
diff --git a/doc/hook/donate_plugin.bb b/doc/en/hook/donate_plugin.bb
index db4a6f113..db4a6f113 100644
--- a/doc/hook/donate_plugin.bb
+++ b/doc/en/hook/donate_plugin.bb
diff --git a/doc/hook/donate_sponsors.bb b/doc/en/hook/donate_sponsors.bb
index 3abd46d42..3abd46d42 100644
--- a/doc/hook/donate_sponsors.bb
+++ b/doc/en/hook/donate_sponsors.bb
diff --git a/doc/hook/dreport_is_storable.bb b/doc/en/hook/dreport_is_storable.bb
index 9ca99b896..9ca99b896 100644
--- a/doc/hook/dreport_is_storable.bb
+++ b/doc/en/hook/dreport_is_storable.bb
diff --git a/doc/hook/dreport_process.bb b/doc/en/hook/dreport_process.bb
index 3ad331f41..3ad331f41 100644
--- a/doc/hook/dreport_process.bb
+++ b/doc/en/hook/dreport_process.bb
diff --git a/doc/hook/drop_item.bb b/doc/en/hook/drop_item.bb
index 35bb80f82..35bb80f82 100644
--- a/doc/hook/drop_item.bb
+++ b/doc/en/hook/drop_item.bb
diff --git a/doc/hook/dropdown_extras.bb b/doc/en/hook/dropdown_extras.bb
index 6d7110a76..6d7110a76 100644
--- a/doc/hook/dropdown_extras.bb
+++ b/doc/en/hook/dropdown_extras.bb
diff --git a/doc/hook/encode_object.bb b/doc/en/hook/encode_object.bb
index 0c8e86458..0c8e86458 100644
--- a/doc/hook/encode_object.bb
+++ b/doc/en/hook/encode_object.bb
diff --git a/doc/hook/enotify.bb b/doc/en/hook/enotify.bb
index 703a3ffa0..703a3ffa0 100644
--- a/doc/hook/enotify.bb
+++ b/doc/en/hook/enotify.bb
diff --git a/doc/hook/enotify_mail.bb b/doc/en/hook/enotify_mail.bb
index adeb8bd30..adeb8bd30 100644
--- a/doc/hook/enotify_mail.bb
+++ b/doc/en/hook/enotify_mail.bb
diff --git a/doc/hook/enotify_store.bb b/doc/en/hook/enotify_store.bb
index dc44cc320..dc44cc320 100644
--- a/doc/hook/enotify_store.bb
+++ b/doc/en/hook/enotify_store.bb
diff --git a/doc/hook/event_created.bb b/doc/en/hook/event_created.bb
index 222602e77..222602e77 100644
--- a/doc/hook/event_created.bb
+++ b/doc/en/hook/event_created.bb
diff --git a/doc/hook/event_store_event.bb b/doc/en/hook/event_store_event.bb
index 7015a8322..7015a8322 100644
--- a/doc/hook/event_store_event.bb
+++ b/doc/en/hook/event_store_event.bb
diff --git a/doc/hook/event_updated.bb b/doc/en/hook/event_updated.bb
index 69e3c72c1..69e3c72c1 100644
--- a/doc/hook/event_updated.bb
+++ b/doc/en/hook/event_updated.bb
diff --git a/doc/hook/externals_url_select.bb b/doc/en/hook/externals_url_select.bb
index a542dcb29..a542dcb29 100644
--- a/doc/hook/externals_url_select.bb
+++ b/doc/en/hook/externals_url_select.bb
diff --git a/doc/hook/feature_enabled.bb b/doc/en/hook/feature_enabled.bb
index 5630cc768..5630cc768 100644
--- a/doc/hook/feature_enabled.bb
+++ b/doc/en/hook/feature_enabled.bb
diff --git a/doc/hook/feature_settings.bb b/doc/en/hook/feature_settings.bb
index d1691eb38..d1691eb38 100644
--- a/doc/hook/feature_settings.bb
+++ b/doc/en/hook/feature_settings.bb
diff --git a/doc/hook/feature_settings_post.bb b/doc/en/hook/feature_settings_post.bb
index eecf941ff..eecf941ff 100644
--- a/doc/hook/feature_settings_post.bb
+++ b/doc/en/hook/feature_settings_post.bb
diff --git a/doc/hook/fetch_and_store.bb b/doc/en/hook/fetch_and_store.bb
index afece11a6..afece11a6 100644
--- a/doc/hook/fetch_and_store.bb
+++ b/doc/en/hook/fetch_and_store.bb
diff --git a/doc/hook/follow.bb b/doc/en/hook/follow.bb
index a97632b06..a97632b06 100644
--- a/doc/hook/follow.bb
+++ b/doc/en/hook/follow.bb
diff --git a/doc/hook/follow_allow.bb b/doc/en/hook/follow_allow.bb
index fdab1865c..fdab1865c 100644
--- a/doc/hook/follow_allow.bb
+++ b/doc/en/hook/follow_allow.bb
diff --git a/doc/hook/gender_selector.bb b/doc/en/hook/gender_selector.bb
index 0b56b5c9b..0b56b5c9b 100644
--- a/doc/hook/gender_selector.bb
+++ b/doc/en/hook/gender_selector.bb
diff --git a/doc/hook/gender_selector_min.bb b/doc/en/hook/gender_selector_min.bb
index 9d143855a..9d143855a 100644
--- a/doc/hook/gender_selector_min.bb
+++ b/doc/en/hook/gender_selector_min.bb
diff --git a/doc/hook/generate_map.bb b/doc/en/hook/generate_map.bb
index 33672d552..33672d552 100644
--- a/doc/hook/generate_map.bb
+++ b/doc/en/hook/generate_map.bb
diff --git a/doc/hook/generate_named_map.bb b/doc/en/hook/generate_named_map.bb
index 5bacb846d..5bacb846d 100644
--- a/doc/hook/generate_named_map.bb
+++ b/doc/en/hook/generate_named_map.bb
diff --git a/doc/hook/get_all_api_perms.bb b/doc/en/hook/get_all_api_perms.bb
index eb41f8a02..eb41f8a02 100644
--- a/doc/hook/get_all_api_perms.bb
+++ b/doc/en/hook/get_all_api_perms.bb
diff --git a/doc/hook/get_all_perms.bb b/doc/en/hook/get_all_perms.bb
index 149f8c78c..149f8c78c 100644
--- a/doc/hook/get_all_perms.bb
+++ b/doc/en/hook/get_all_perms.bb
diff --git a/doc/hook/get_default_export_sections b/doc/en/hook/get_default_export_sections
index 09b146643..09b146643 100644
--- a/doc/hook/get_default_export_sections
+++ b/doc/en/hook/get_default_export_sections
diff --git a/doc/hook/get_features.bb b/doc/en/hook/get_features.bb
index 66e81f13c..66e81f13c 100644
--- a/doc/hook/get_features.bb
+++ b/doc/en/hook/get_features.bb
diff --git a/doc/hook/get_photo.bb b/doc/en/hook/get_photo.bb
index eaf3beffb..eaf3beffb 100644
--- a/doc/hook/get_photo.bb
+++ b/doc/en/hook/get_photo.bb
diff --git a/doc/hook/get_profile_photo.bb b/doc/en/hook/get_profile_photo.bb
index ab07179ae..ab07179ae 100644
--- a/doc/hook/get_profile_photo.bb
+++ b/doc/en/hook/get_profile_photo.bb
diff --git a/doc/hook/get_role_perms.bb b/doc/en/hook/get_role_perms.bb
index 87830f8e3..87830f8e3 100644
--- a/doc/hook/get_role_perms.bb
+++ b/doc/en/hook/get_role_perms.bb
diff --git a/doc/hook/global_permissions.bb b/doc/en/hook/global_permissions.bb
index fe998ee9c..fe998ee9c 100644
--- a/doc/hook/global_permissions.bb
+++ b/doc/en/hook/global_permissions.bb
diff --git a/doc/hook/home_content.bb b/doc/en/hook/home_content.bb
index 7f32b3547..7f32b3547 100644
--- a/doc/hook/home_content.bb
+++ b/doc/en/hook/home_content.bb
diff --git a/doc/hook/home_init.bb b/doc/en/hook/home_init.bb
index 25dd72792..25dd72792 100644
--- a/doc/hook/home_init.bb
+++ b/doc/en/hook/home_init.bb
diff --git a/doc/hook/hostxrd.bb b/doc/en/hook/hostxrd.bb
index 2b67320cf..2b67320cf 100644
--- a/doc/hook/hostxrd.bb
+++ b/doc/en/hook/hostxrd.bb
diff --git a/doc/hook/html2bbcode.bb b/doc/en/hook/html2bbcode.bb
index 3061f05f0..3061f05f0 100644
--- a/doc/hook/html2bbcode.bb
+++ b/doc/en/hook/html2bbcode.bb
diff --git a/doc/hook/identity_basic_export.bb b/doc/en/hook/identity_basic_export.bb
index 71329ba1e..71329ba1e 100644
--- a/doc/hook/identity_basic_export.bb
+++ b/doc/en/hook/identity_basic_export.bb
diff --git a/doc/hook/import_author_xchan.bb b/doc/en/hook/import_author_xchan.bb
index e2340469d..e2340469d 100644
--- a/doc/hook/import_author_xchan.bb
+++ b/doc/en/hook/import_author_xchan.bb
diff --git a/doc/hook/import_channel.bb b/doc/en/hook/import_channel.bb
index b220b7415..b220b7415 100644
--- a/doc/hook/import_channel.bb
+++ b/doc/en/hook/import_channel.bb
diff --git a/doc/hook/import_directory_profile.bb b/doc/en/hook/import_directory_profile.bb
index e2fac59bc..e2fac59bc 100644
--- a/doc/hook/import_directory_profile.bb
+++ b/doc/en/hook/import_directory_profile.bb
diff --git a/doc/hook/import_xchan.bb b/doc/en/hook/import_xchan.bb
index 40e0783ce..40e0783ce 100644
--- a/doc/hook/import_xchan.bb
+++ b/doc/en/hook/import_xchan.bb
diff --git a/doc/hook/item_custom.bb b/doc/en/hook/item_custom.bb
index d20c7d76c..d20c7d76c 100644
--- a/doc/hook/item_custom.bb
+++ b/doc/en/hook/item_custom.bb
diff --git a/doc/hook/item_photo_menu.bb b/doc/en/hook/item_photo_menu.bb
index 8f9860a90..8f9860a90 100644
--- a/doc/hook/item_photo_menu.bb
+++ b/doc/en/hook/item_photo_menu.bb
diff --git a/doc/hook/item_store.bb b/doc/en/hook/item_store.bb
index 5d49b725c..5d49b725c 100644
--- a/doc/hook/item_store.bb
+++ b/doc/en/hook/item_store.bb
diff --git a/doc/hook/item_store_update.bb b/doc/en/hook/item_store_update.bb
index a7c58939a..a7c58939a 100644
--- a/doc/hook/item_store_update.bb
+++ b/doc/en/hook/item_store_update.bb
diff --git a/doc/hook/item_stored.bb b/doc/en/hook/item_stored.bb
index 8d706cb4e..8d706cb4e 100644
--- a/doc/hook/item_stored.bb
+++ b/doc/en/hook/item_stored.bb
diff --git a/doc/hook/item_stored_update.bb b/doc/en/hook/item_stored_update.bb
index 4532a347c..4532a347c 100644
--- a/doc/hook/item_stored_update.bb
+++ b/doc/en/hook/item_stored_update.bb
diff --git a/doc/hook/item_translate.bb b/doc/en/hook/item_translate.bb
index 695494b9c..695494b9c 100644
--- a/doc/hook/item_translate.bb
+++ b/doc/en/hook/item_translate.bb
diff --git a/doc/hook/jot_header_tpl_filter.bb b/doc/en/hook/jot_header_tpl_filter.bb
index b17d81d03..b17d81d03 100644
--- a/doc/hook/jot_header_tpl_filter.bb
+++ b/doc/en/hook/jot_header_tpl_filter.bb
diff --git a/doc/hook/jot_networks.bb b/doc/en/hook/jot_networks.bb
index 4c1629ba7..4c1629ba7 100644
--- a/doc/hook/jot_networks.bb
+++ b/doc/en/hook/jot_networks.bb
diff --git a/doc/hook/jot_tool.bb b/doc/en/hook/jot_tool.bb
index 22ba9701e..22ba9701e 100644
--- a/doc/hook/jot_tool.bb
+++ b/doc/en/hook/jot_tool.bb
diff --git a/doc/hook/jot_tpl_filter.bb b/doc/en/hook/jot_tpl_filter.bb
index 426da3c56..426da3c56 100644
--- a/doc/hook/jot_tpl_filter.bb
+++ b/doc/en/hook/jot_tpl_filter.bb
diff --git a/doc/hook/legal_webbie.bb b/doc/en/hook/legal_webbie.bb
index 8c7d32d56..8c7d32d56 100644
--- a/doc/hook/legal_webbie.bb
+++ b/doc/en/hook/legal_webbie.bb
diff --git a/doc/hook/legal_webbie_text.bb b/doc/en/hook/legal_webbie_text.bb
index 32c74c93b..32c74c93b 100644
--- a/doc/hook/legal_webbie_text.bb
+++ b/doc/en/hook/legal_webbie_text.bb
diff --git a/doc/hook/load_pdl.bb b/doc/en/hook/load_pdl.bb
index 149a3e766..149a3e766 100644
--- a/doc/hook/load_pdl.bb
+++ b/doc/en/hook/load_pdl.bb
diff --git a/doc/hook/local_dir_update.bb b/doc/en/hook/local_dir_update.bb
index d0b0f8ac1..d0b0f8ac1 100644
--- a/doc/hook/local_dir_update.bb
+++ b/doc/en/hook/local_dir_update.bb
diff --git a/doc/hook/logged_in.bb b/doc/en/hook/logged_in.bb
index b01041576..b01041576 100644
--- a/doc/hook/logged_in.bb
+++ b/doc/en/hook/logged_in.bb
diff --git a/doc/hook/logger.bb b/doc/en/hook/logger.bb
index 8fe989abd..8fe989abd 100644
--- a/doc/hook/logger.bb
+++ b/doc/en/hook/logger.bb
diff --git a/doc/hook/logging_out.bb b/doc/en/hook/logging_out.bb
index d47b9f1df..d47b9f1df 100644
--- a/doc/hook/logging_out.bb
+++ b/doc/en/hook/logging_out.bb
diff --git a/doc/hook/login_hook.bb b/doc/en/hook/login_hook.bb
index 156a0afcd..156a0afcd 100644
--- a/doc/hook/login_hook.bb
+++ b/doc/en/hook/login_hook.bb
diff --git a/doc/hook/magic_auth.bb b/doc/en/hook/magic_auth.bb
index 80d6edb27..80d6edb27 100644
--- a/doc/hook/magic_auth.bb
+++ b/doc/en/hook/magic_auth.bb
diff --git a/doc/hook/magic_auth_openid_success.bb b/doc/en/hook/magic_auth_openid_success.bb
index 810f2e06d..810f2e06d 100644
--- a/doc/hook/magic_auth_openid_success.bb
+++ b/doc/en/hook/magic_auth_openid_success.bb
diff --git a/doc/hook/magic_auth_success.bb b/doc/en/hook/magic_auth_success.bb
index d795e43e5..d795e43e5 100644
--- a/doc/hook/magic_auth_success.bb
+++ b/doc/en/hook/magic_auth_success.bb
diff --git a/doc/hook/main_slider.bb b/doc/en/hook/main_slider.bb
index a63c2170a..a63c2170a 100644
--- a/doc/hook/main_slider.bb
+++ b/doc/en/hook/main_slider.bb
diff --git a/doc/hook/marital_selector.bb b/doc/en/hook/marital_selector.bb
index 0f76c3f5a..0f76c3f5a 100644
--- a/doc/hook/marital_selector.bb
+++ b/doc/en/hook/marital_selector.bb
diff --git a/doc/hook/marital_selector_min.bb b/doc/en/hook/marital_selector_min.bb
index f02d21f20..f02d21f20 100644
--- a/doc/hook/marital_selector_min.bb
+++ b/doc/en/hook/marital_selector_min.bb
diff --git a/doc/hook/markdown_to_bb.bb b/doc/en/hook/markdown_to_bb.bb
index 8af637c8c..8af637c8c 100644
--- a/doc/hook/markdown_to_bb.bb
+++ b/doc/en/hook/markdown_to_bb.bb
diff --git a/doc/hook/module_loaded.bb b/doc/en/hook/module_loaded.bb
index cb0d2302d..cb0d2302d 100644
--- a/doc/hook/module_loaded.bb
+++ b/doc/en/hook/module_loaded.bb
diff --git a/doc/hook/module_mod_aftercontent.bb b/doc/en/hook/module_mod_aftercontent.bb
index 04e3c8d88..04e3c8d88 100644
--- a/doc/hook/module_mod_aftercontent.bb
+++ b/doc/en/hook/module_mod_aftercontent.bb
diff --git a/doc/hook/module_mod_content.bb b/doc/en/hook/module_mod_content.bb
index eef5b7ba5..eef5b7ba5 100644
--- a/doc/hook/module_mod_content.bb
+++ b/doc/en/hook/module_mod_content.bb
diff --git a/doc/hook/module_mod_init.bb b/doc/en/hook/module_mod_init.bb
index 52fe5a616..52fe5a616 100644
--- a/doc/hook/module_mod_init.bb
+++ b/doc/en/hook/module_mod_init.bb
diff --git a/doc/hook/module_mod_post.bb b/doc/en/hook/module_mod_post.bb
index 3adb0e737..3adb0e737 100644
--- a/doc/hook/module_mod_post.bb
+++ b/doc/en/hook/module_mod_post.bb
diff --git a/doc/hook/mood_verbs.bb b/doc/en/hook/mood_verbs.bb
index 67fb719dd..67fb719dd 100644
--- a/doc/hook/mood_verbs.bb
+++ b/doc/en/hook/mood_verbs.bb
diff --git a/doc/hook/nav.bb b/doc/en/hook/nav.bb
index b52f90602..b52f90602 100644
--- a/doc/hook/nav.bb
+++ b/doc/en/hook/nav.bb
diff --git a/doc/hook/network_content_init.bb b/doc/en/hook/network_content_init.bb
index 224da393a..224da393a 100644
--- a/doc/hook/network_content_init.bb
+++ b/doc/en/hook/network_content_init.bb
diff --git a/doc/hook/network_ping.bb b/doc/en/hook/network_ping.bb
index 78deefe78..78deefe78 100644
--- a/doc/hook/network_ping.bb
+++ b/doc/en/hook/network_ping.bb
diff --git a/doc/hook/network_to_name.bb b/doc/en/hook/network_to_name.bb
index eea4a1841..eea4a1841 100644
--- a/doc/hook/network_to_name.bb
+++ b/doc/en/hook/network_to_name.bb
diff --git a/doc/hook/notifier_end.bb b/doc/en/hook/notifier_end.bb
index df9d852bd..df9d852bd 100644
--- a/doc/hook/notifier_end.bb
+++ b/doc/en/hook/notifier_end.bb
diff --git a/doc/hook/notifier_hub.bb b/doc/en/hook/notifier_hub.bb
index 4255ce446..4255ce446 100644
--- a/doc/hook/notifier_hub.bb
+++ b/doc/en/hook/notifier_hub.bb
diff --git a/doc/hook/notifier_normal.bb b/doc/en/hook/notifier_normal.bb
index 0059baa47..0059baa47 100644
--- a/doc/hook/notifier_normal.bb
+++ b/doc/en/hook/notifier_normal.bb
diff --git a/doc/hook/obj_verbs.bb b/doc/en/hook/obj_verbs.bb
index ca98229aa..ca98229aa 100644
--- a/doc/hook/obj_verbs.bb
+++ b/doc/en/hook/obj_verbs.bb
diff --git a/doc/hook/oembed_probe.bb b/doc/en/hook/oembed_probe.bb
index 4f32ac267..4f32ac267 100644
--- a/doc/hook/oembed_probe.bb
+++ b/doc/en/hook/oembed_probe.bb
diff --git a/doc/hook/other_encapsulate.bb b/doc/en/hook/other_encapsulate.bb
index ea0cdf622..ea0cdf622 100644
--- a/doc/hook/other_encapsulate.bb
+++ b/doc/en/hook/other_encapsulate.bb
diff --git a/doc/hook/other_unencapsulate.bb b/doc/en/hook/other_unencapsulate.bb
index c8b0b617f..c8b0b617f 100644
--- a/doc/hook/other_unencapsulate.bb
+++ b/doc/en/hook/other_unencapsulate.bb
diff --git a/doc/hook/page_content_top.bb b/doc/en/hook/page_content_top.bb
index 137e3abfd..137e3abfd 100644
--- a/doc/hook/page_content_top.bb
+++ b/doc/en/hook/page_content_top.bb
diff --git a/doc/hook/page_end.bb b/doc/en/hook/page_end.bb
index 09293cf50..09293cf50 100644
--- a/doc/hook/page_end.bb
+++ b/doc/en/hook/page_end.bb
diff --git a/doc/hook/page_header.bb b/doc/en/hook/page_header.bb
index ffaa791c9..ffaa791c9 100644
--- a/doc/hook/page_header.bb
+++ b/doc/en/hook/page_header.bb
diff --git a/doc/hook/page_meta.bb b/doc/en/hook/page_meta.bb
index 30a8f9440..30a8f9440 100644
--- a/doc/hook/page_meta.bb
+++ b/doc/en/hook/page_meta.bb
diff --git a/doc/hook/parse_atom.bb b/doc/en/hook/parse_atom.bb
index c8037317f..c8037317f 100644
--- a/doc/hook/parse_atom.bb
+++ b/doc/en/hook/parse_atom.bb
diff --git a/doc/hook/parse_link.bb b/doc/en/hook/parse_link.bb
index 1c328059c..1c328059c 100644
--- a/doc/hook/parse_link.bb
+++ b/doc/en/hook/parse_link.bb
diff --git a/doc/hook/pdl_selector.bb b/doc/en/hook/pdl_selector.bb
index bee01c843..bee01c843 100644
--- a/doc/hook/pdl_selector.bb
+++ b/doc/en/hook/pdl_selector.bb
diff --git a/doc/hook/perm_is_allowed.bb b/doc/en/hook/perm_is_allowed.bb
index aac647609..aac647609 100644
--- a/doc/hook/perm_is_allowed.bb
+++ b/doc/en/hook/perm_is_allowed.bb
diff --git a/doc/hook/permissions_create.bb b/doc/en/hook/permissions_create.bb
index 22f80a80e..22f80a80e 100644
--- a/doc/hook/permissions_create.bb
+++ b/doc/en/hook/permissions_create.bb
diff --git a/doc/hook/permissions_update.bb b/doc/en/hook/permissions_update.bb
index 40366b33d..40366b33d 100644
--- a/doc/hook/permissions_update.bb
+++ b/doc/en/hook/permissions_update.bb
diff --git a/doc/hook/permit_hook.bb b/doc/en/hook/permit_hook.bb
index e69de29bb..e69de29bb 100644
--- a/doc/hook/permit_hook.bb
+++ b/doc/en/hook/permit_hook.bb
diff --git a/doc/hook/personal_xrd.bb b/doc/en/hook/personal_xrd.bb
index 71d4bd8dd..71d4bd8dd 100644
--- a/doc/hook/personal_xrd.bb
+++ b/doc/en/hook/personal_xrd.bb
diff --git a/doc/hook/photo_post_end.bb b/doc/en/hook/photo_post_end.bb
index 8a3291763..8a3291763 100644
--- a/doc/hook/photo_post_end.bb
+++ b/doc/en/hook/photo_post_end.bb
diff --git a/doc/hook/photo_upload_begin.bb b/doc/en/hook/photo_upload_begin.bb
index 5e441a12a..5e441a12a 100644
--- a/doc/hook/photo_upload_begin.bb
+++ b/doc/en/hook/photo_upload_begin.bb
diff --git a/doc/hook/photo_upload_end.bb b/doc/en/hook/photo_upload_end.bb
index 956175f1d..956175f1d 100644
--- a/doc/hook/photo_upload_end.bb
+++ b/doc/en/hook/photo_upload_end.bb
diff --git a/doc/hook/photo_upload_file.bb b/doc/en/hook/photo_upload_file.bb
index 726622ac0..726622ac0 100644
--- a/doc/hook/photo_upload_file.bb
+++ b/doc/en/hook/photo_upload_file.bb
diff --git a/doc/hook/photo_upload_form.bb b/doc/en/hook/photo_upload_form.bb
index 70b8318b8..70b8318b8 100644
--- a/doc/hook/photo_upload_form.bb
+++ b/doc/en/hook/photo_upload_form.bb
diff --git a/doc/hook/photo_view_filter.bb b/doc/en/hook/photo_view_filter.bb
index 0780c1edc..0780c1edc 100644
--- a/doc/hook/photo_view_filter.bb
+++ b/doc/en/hook/photo_view_filter.bb
diff --git a/doc/hook/poke_verbs.bb b/doc/en/hook/poke_verbs.bb
index 54d68c3a2..54d68c3a2 100644
--- a/doc/hook/poke_verbs.bb
+++ b/doc/en/hook/poke_verbs.bb
diff --git a/doc/hook/post_local.bb b/doc/en/hook/post_local.bb
index 5aa723cb9..5aa723cb9 100644
--- a/doc/hook/post_local.bb
+++ b/doc/en/hook/post_local.bb
diff --git a/doc/hook/post_local_end.bb b/doc/en/hook/post_local_end.bb
index 380166fdb..380166fdb 100644
--- a/doc/hook/post_local_end.bb
+++ b/doc/en/hook/post_local_end.bb
diff --git a/doc/hook/post_local_start.bb b/doc/en/hook/post_local_start.bb
index 2f684f67a..2f684f67a 100644
--- a/doc/hook/post_local_start.bb
+++ b/doc/en/hook/post_local_start.bb
diff --git a/doc/hook/post_mail.bb b/doc/en/hook/post_mail.bb
index 8f67ad4f0..8f67ad4f0 100644
--- a/doc/hook/post_mail.bb
+++ b/doc/en/hook/post_mail.bb
diff --git a/doc/hook/post_mail_end.bb b/doc/en/hook/post_mail_end.bb
index 7f0085773..7f0085773 100644
--- a/doc/hook/post_mail_end.bb
+++ b/doc/en/hook/post_mail_end.bb
diff --git a/doc/hook/post_remote.bb b/doc/en/hook/post_remote.bb
index f8e087eee..f8e087eee 100644
--- a/doc/hook/post_remote.bb
+++ b/doc/en/hook/post_remote.bb
diff --git a/doc/hook/post_remote_end.bb b/doc/en/hook/post_remote_end.bb
index 0fef20cbf..0fef20cbf 100644
--- a/doc/hook/post_remote_end.bb
+++ b/doc/en/hook/post_remote_end.bb
diff --git a/doc/hook/post_remote_update.bb b/doc/en/hook/post_remote_update.bb
index fd358db28..fd358db28 100644
--- a/doc/hook/post_remote_update.bb
+++ b/doc/en/hook/post_remote_update.bb
diff --git a/doc/hook/post_remote_update_end.bb b/doc/en/hook/post_remote_update_end.bb
index 95f1e6f78..95f1e6f78 100644
--- a/doc/hook/post_remote_update_end.bb
+++ b/doc/en/hook/post_remote_update_end.bb
diff --git a/doc/hook/prepare_body.bb b/doc/en/hook/prepare_body.bb
index 3f1eaef85..3f1eaef85 100644
--- a/doc/hook/prepare_body.bb
+++ b/doc/en/hook/prepare_body.bb
diff --git a/doc/hook/prepare_body_final.bb b/doc/en/hook/prepare_body_final.bb
index 96d1ae389..96d1ae389 100644
--- a/doc/hook/prepare_body_final.bb
+++ b/doc/en/hook/prepare_body_final.bb
diff --git a/doc/hook/prepare_body_init.bb b/doc/en/hook/prepare_body_init.bb
index f3de79970..f3de79970 100644
--- a/doc/hook/prepare_body_init.bb
+++ b/doc/en/hook/prepare_body_init.bb
diff --git a/doc/hook/privacygroup_extras.bb b/doc/en/hook/privacygroup_extras.bb
index bd67f2470..bd67f2470 100644
--- a/doc/hook/privacygroup_extras.bb
+++ b/doc/en/hook/privacygroup_extras.bb
diff --git a/doc/hook/privacygroup_extras_drop.bb b/doc/en/hook/privacygroup_extras_drop.bb
index fd27ab255..fd27ab255 100644
--- a/doc/hook/privacygroup_extras_drop.bb
+++ b/doc/en/hook/privacygroup_extras_drop.bb
diff --git a/doc/hook/privacygroup_extras_post.bb b/doc/en/hook/privacygroup_extras_post.bb
index 704db1997..704db1997 100644
--- a/doc/hook/privacygroup_extras_post.bb
+++ b/doc/en/hook/privacygroup_extras_post.bb
diff --git a/doc/hook/proc_run.bb b/doc/en/hook/proc_run.bb
index a3759794a..a3759794a 100644
--- a/doc/hook/proc_run.bb
+++ b/doc/en/hook/proc_run.bb
diff --git a/doc/hook/process_channel_sync_delivery.bb b/doc/en/hook/process_channel_sync_delivery.bb
index c0416c8cb..c0416c8cb 100644
--- a/doc/hook/process_channel_sync_delivery.bb
+++ b/doc/en/hook/process_channel_sync_delivery.bb
diff --git a/doc/hook/profile_advanced.bb b/doc/en/hook/profile_advanced.bb
index 65e56afd6..65e56afd6 100644
--- a/doc/hook/profile_advanced.bb
+++ b/doc/en/hook/profile_advanced.bb
diff --git a/doc/hook/profile_edit.bb b/doc/en/hook/profile_edit.bb
index e60663d4a..e60663d4a 100644
--- a/doc/hook/profile_edit.bb
+++ b/doc/en/hook/profile_edit.bb
diff --git a/doc/hook/profile_photo_content_end.bb b/doc/en/hook/profile_photo_content_end.bb
index 518415c4d..518415c4d 100644
--- a/doc/hook/profile_photo_content_end.bb
+++ b/doc/en/hook/profile_photo_content_end.bb
diff --git a/doc/hook/profile_post.bb b/doc/en/hook/profile_post.bb
index d22d8fbc7..d22d8fbc7 100644
--- a/doc/hook/profile_post.bb
+++ b/doc/en/hook/profile_post.bb
diff --git a/doc/hook/profile_sidebar.bb b/doc/en/hook/profile_sidebar.bb
index bfd059e4b..bfd059e4b 100644
--- a/doc/hook/profile_sidebar.bb
+++ b/doc/en/hook/profile_sidebar.bb
diff --git a/doc/hook/profile_sidebar_enter.bb b/doc/en/hook/profile_sidebar_enter.bb
index 9d6726a30..9d6726a30 100644
--- a/doc/hook/profile_sidebar_enter.bb
+++ b/doc/en/hook/profile_sidebar_enter.bb
diff --git a/doc/hook/register_account.bb b/doc/en/hook/register_account.bb
index df4de2b30..df4de2b30 100644
--- a/doc/hook/register_account.bb
+++ b/doc/en/hook/register_account.bb
diff --git a/doc/hook/render_location.bb b/doc/en/hook/render_location.bb
index 41501c087..41501c087 100644
--- a/doc/hook/render_location.bb
+++ b/doc/en/hook/render_location.bb
diff --git a/doc/hook/replace_macros.bb b/doc/en/hook/replace_macros.bb
index fac39dd7b..fac39dd7b 100644
--- a/doc/hook/replace_macros.bb
+++ b/doc/en/hook/replace_macros.bb
diff --git a/doc/hook/reverse_magic_auth.bb b/doc/en/hook/reverse_magic_auth.bb
index 4cbd84b93..4cbd84b93 100644
--- a/doc/hook/reverse_magic_auth.bb
+++ b/doc/en/hook/reverse_magic_auth.bb
diff --git a/doc/hook/settings_form.bb b/doc/en/hook/settings_form.bb
index d65341181..d65341181 100644
--- a/doc/hook/settings_form.bb
+++ b/doc/en/hook/settings_form.bb
diff --git a/doc/hook/settings_post.bb b/doc/en/hook/settings_post.bb
index f72546c11..f72546c11 100644
--- a/doc/hook/settings_post.bb
+++ b/doc/en/hook/settings_post.bb
diff --git a/doc/hook/sexpref_selector.bb b/doc/en/hook/sexpref_selector.bb
index b4dad6b38..b4dad6b38 100644
--- a/doc/hook/sexpref_selector.bb
+++ b/doc/en/hook/sexpref_selector.bb
diff --git a/doc/hook/sexpref_selector_min.bb b/doc/en/hook/sexpref_selector_min.bb
index 6f49946af..6f49946af 100644
--- a/doc/hook/sexpref_selector_min.bb
+++ b/doc/en/hook/sexpref_selector_min.bb
diff --git a/doc/hook/smilie.bb b/doc/en/hook/smilie.bb
index 575acc178..575acc178 100644
--- a/doc/hook/smilie.bb
+++ b/doc/en/hook/smilie.bb
diff --git a/doc/hook/status_editor.bb b/doc/en/hook/status_editor.bb
index 00e97a7c9..00e97a7c9 100644
--- a/doc/hook/status_editor.bb
+++ b/doc/en/hook/status_editor.bb
diff --git a/doc/hook/stream_item.bb b/doc/en/hook/stream_item.bb
index 30086961d..30086961d 100644
--- a/doc/hook/stream_item.bb
+++ b/doc/en/hook/stream_item.bb
diff --git a/doc/hook/system_app_installed_filter.bb b/doc/en/hook/system_app_installed_filter.bb
index a269a79a8..a269a79a8 100644
--- a/doc/hook/system_app_installed_filter.bb
+++ b/doc/en/hook/system_app_installed_filter.bb
diff --git a/doc/hook/tagged.bb b/doc/en/hook/tagged.bb
index 05d081d07..05d081d07 100644
--- a/doc/hook/tagged.bb
+++ b/doc/en/hook/tagged.bb
diff --git a/doc/hook/update_unseen.bb b/doc/en/hook/update_unseen.bb
index 8fb02c239..8fb02c239 100644
--- a/doc/hook/update_unseen.bb
+++ b/doc/en/hook/update_unseen.bb
diff --git a/doc/hook/validate_channelname.bb b/doc/en/hook/validate_channelname.bb
index 2ab12bbec..2ab12bbec 100644
--- a/doc/hook/validate_channelname.bb
+++ b/doc/en/hook/validate_channelname.bb
diff --git a/doc/hook/webfinger.bb b/doc/en/hook/webfinger.bb
index 7cc24322f..7cc24322f 100644
--- a/doc/hook/webfinger.bb
+++ b/doc/en/hook/webfinger.bb
diff --git a/doc/hook/well_known.bb b/doc/en/hook/well_known.bb
index 778b27a02..778b27a02 100644
--- a/doc/hook/well_known.bb
+++ b/doc/en/hook/well_known.bb
diff --git a/doc/hook/wiki_preprocess.bb b/doc/en/hook/wiki_preprocess.bb
index 913b601ba..913b601ba 100644
--- a/doc/hook/wiki_preprocess.bb
+++ b/doc/en/hook/wiki_preprocess.bb
diff --git a/doc/hook/zid.bb b/doc/en/hook/zid.bb
index 2210c1342..2210c1342 100644
--- a/doc/hook/zid.bb
+++ b/doc/en/hook/zid.bb
diff --git a/doc/hook/zid_init.bb b/doc/en/hook/zid_init.bb
index 131dd8f72..131dd8f72 100644
--- a/doc/hook/zid_init.bb
+++ b/doc/en/hook/zid_init.bb
diff --git a/doc/hook/zot_best_algorithm.bb b/doc/en/hook/zot_best_algorithm.bb
index ccde505cb..ccde505cb 100644
--- a/doc/hook/zot_best_algorithm.bb
+++ b/doc/en/hook/zot_best_algorithm.bb
diff --git a/doc/hook/zot_finger.bb b/doc/en/hook/zot_finger.bb
index 9383b4c31..9383b4c31 100644
--- a/doc/hook/zot_finger.bb
+++ b/doc/en/hook/zot_finger.bb
diff --git a/doc/hooklist.bb b/doc/en/hooklist.bb
index 7231cd185..7231cd185 100644
--- a/doc/hooklist.bb
+++ b/doc/en/hooklist.bb
diff --git a/doc/hooks.html b/doc/en/hooks.html
index a7ee314e7..a7ee314e7 100644
--- a/doc/hooks.html
+++ b/doc/en/hooks.html
diff --git a/doc/intro_for_developers.bb b/doc/en/intro_for_developers.bb
index 172008b7f..172008b7f 100644
--- a/doc/intro_for_developers.bb
+++ b/doc/en/intro_for_developers.bb
diff --git a/doc/macros/addons_footer.bb b/doc/en/macros/addons_footer.bb
index 32814c59b..32814c59b 100644
--- a/doc/macros/addons_footer.bb
+++ b/doc/en/macros/addons_footer.bb
diff --git a/doc/macros/cloud_footer.bb b/doc/en/macros/cloud_footer.bb
index 798cc9ea6..798cc9ea6 100644
--- a/doc/macros/cloud_footer.bb
+++ b/doc/en/macros/cloud_footer.bb
diff --git a/doc/macros/de/addons_footer.bb b/doc/en/macros/de/addons_footer.bb
index 068bb7ec7..068bb7ec7 100644
--- a/doc/macros/de/addons_footer.bb
+++ b/doc/en/macros/de/addons_footer.bb
diff --git a/doc/macros/de/cloud_footer.bb b/doc/en/macros/de/cloud_footer.bb
index 921448a3c..921448a3c 100644
--- a/doc/macros/de/cloud_footer.bb
+++ b/doc/en/macros/de/cloud_footer.bb
diff --git a/doc/macros/de/main_footer.bb b/doc/en/macros/de/main_footer.bb
index e71603626..e71603626 100644
--- a/doc/macros/de/main_footer.bb
+++ b/doc/en/macros/de/main_footer.bb
diff --git a/doc/macros/de/troubleshooting_footer.bb b/doc/en/macros/de/troubleshooting_footer.bb
index be8c13a28..be8c13a28 100644
--- a/doc/macros/de/troubleshooting_footer.bb
+++ b/doc/en/macros/de/troubleshooting_footer.bb
diff --git a/doc/macros/main_footer.bb b/doc/en/macros/main_footer.bb
index 08f671ded..08f671ded 100644
--- a/doc/macros/main_footer.bb
+++ b/doc/en/macros/main_footer.bb
diff --git a/doc/macros/pl/addons_footer.bb b/doc/en/macros/pl/addons_footer.bb
index 79ac0a71c..79ac0a71c 100644
--- a/doc/macros/pl/addons_footer.bb
+++ b/doc/en/macros/pl/addons_footer.bb
diff --git a/doc/macros/pl/cloud_footer.bb b/doc/en/macros/pl/cloud_footer.bb
index 48628ae1a..48628ae1a 100644
--- a/doc/macros/pl/cloud_footer.bb
+++ b/doc/en/macros/pl/cloud_footer.bb
diff --git a/doc/macros/pl/main_footer.bb b/doc/en/macros/pl/main_footer.bb
index 8bf25fed5..8bf25fed5 100644
--- a/doc/macros/pl/main_footer.bb
+++ b/doc/en/macros/pl/main_footer.bb
diff --git a/doc/macros/pl/troubleshooting_footer.bb b/doc/en/macros/pl/troubleshooting_footer.bb
index 19328ad64..19328ad64 100644
--- a/doc/macros/pl/troubleshooting_footer.bb
+++ b/doc/en/macros/pl/troubleshooting_footer.bb
diff --git a/doc/macros/troubleshooting_footer.bb b/doc/en/macros/troubleshooting_footer.bb
index c7603a62b..c7603a62b 100644
--- a/doc/macros/troubleshooting_footer.bb
+++ b/doc/en/macros/troubleshooting_footer.bb
diff --git a/doc/en/member/assets/bookmarker-save-icon.png b/doc/en/member/assets/bookmarker-save-icon.png
new file mode 100644
index 000000000..6a7c10eb9
--- /dev/null
+++ b/doc/en/member/assets/bookmarker-save-icon.png
Binary files differ
diff --git a/doc/en/member/assets/bookmarks-menu-dropdown.png b/doc/en/member/assets/bookmarks-menu-dropdown.png
new file mode 100644
index 000000000..137ae52ad
--- /dev/null
+++ b/doc/en/member/assets/bookmarks-menu-dropdown.png
Binary files differ
diff --git a/doc/en/member/assets/privacy-group-tool-public.png b/doc/en/member/assets/privacy-group-tool-public.png
new file mode 100644
index 000000000..828cb6411
--- /dev/null
+++ b/doc/en/member/assets/privacy-group-tool-public.png
Binary files differ
diff --git a/doc/en/member/assets/privacy-tool-3.png b/doc/en/member/assets/privacy-tool-3.png
new file mode 100644
index 000000000..ba896403d
--- /dev/null
+++ b/doc/en/member/assets/privacy-tool-3.png
Binary files differ
diff --git a/doc/member/assets/qr_text_to_post.png b/doc/en/member/assets/qr_text_to_post.png
index 887c85492..887c85492 100644
--- a/doc/member/assets/qr_text_to_post.png
+++ b/doc/en/member/assets/qr_text_to_post.png
Binary files differ
diff --git a/doc/member/assets/zat_dialog.png b/doc/en/member/assets/zat_dialog.png
index 892964e95..892964e95 100644
--- a/doc/member/assets/zat_dialog.png
+++ b/doc/en/member/assets/zat_dialog.png
Binary files differ
diff --git a/doc/member/bbcode.html b/doc/en/member/bbcode.html
index e3e079b4d..e3e079b4d 100644
--- a/doc/member/bbcode.html
+++ b/doc/en/member/bbcode.html
diff --git a/doc/member/member_faq.bb b/doc/en/member/member_faq.bb
index 9533cb557..9533cb557 100644
--- a/doc/member/member_faq.bb
+++ b/doc/en/member/member_faq.bb
diff --git a/doc/member/member_guide.bb b/doc/en/member/member_guide.bb
index 2b772d1c5..e3d62a4b5 100644
--- a/doc/member/member_guide.bb
+++ b/doc/en/member/member_guide.bb
@@ -46,17 +46,17 @@ In short, a channel that represents yourself is &quot;me, on the internet&quot;.
[h3]Channel Permission Roles[/h3]
-When you create a new channel, you will be asked to select a permission role based on how you envision using this channel. The most popular permission roles are the Social Networking roles. You have many other choices, providing options which are analagous to Facebook Groups and Pages, collaborative spaces, newsfeeds, and more. These roles automatically configure several different system variables ranging from what permissions are granted to friends, to your default privacy settings and visibility choices. Advanced configurations are available to let you adjust each of these parameters to your needs, but we've found that most people prefer to "set it and forget it". Thew following describes some of the different roles which are currently available and how they impact your privacy and ability to interact.
+When you create a new channel, you will be asked to select a permission role based on how you envision using this channel. The most popular permission roles are the Social Networking roles. You have many other choices, providing options which are analagous to Facebook Groups and Pages, collaborative spaces, newsfeeds, and more. These roles automatically configure several different system variables ranging from what permissions are granted to friends, to your default privacy settings and visibility choices. Advanced configurations are available to let you adjust each of these parameters to your needs, but we've found that most people prefer to "set it and forget it". Thew following describes some of the different roles which are currently available and how they impact your privacy and ability to interact.
[h4]Social[/h4]
[b]Federation[/b]
-The channel is a very permissive social networking profile which is compatible with other federated social networks. The permission policies are similar to Twitter and mostly compatible with Diaspora and Mastodon. Privacy is a lower priority than ease of access and connecting with others. Anybody in the network can comment on your public posts and send you private mail. By default posts and published items are public, but you can over-ride this when creating the item and restrict it. You are listed in the directory. Your online presence and connections are visible to others. This mode [i]may[/i] increase your exposure to undesired communications and spam. This role is not generally recommended [i]unless[/i] you need to interact regularly with members of other networks.
+The channel is a very permissive social networking profile which is compatible with other federated social networks. The permission policies are similar to Twitter and mostly compatible with Diaspora and Mastodon. Privacy is a lower priority than ease of access and connecting with others. Anybody in the network can comment on your public posts and send you private mail. By default posts and published items are public, but you can over-ride this when creating the item and restrict it. You are listed in the directory. Your online presence and connections are visible to others. This mode [i]may[/i] increase your exposure to undesired communications and spam. This role is not generally recommended [i]unless[/i] you need to interact regularly with members of other networks.
[b]Mostly Public[/b]
-The channel is a typical social networking profile. By default posts and published items are public, but you can over-ride this when creating the item and restrict it. You are listed in the directory. Your online presence and connections are visible to others. Only your immediate connections can comment on your public posts and send you private mail. The permission policies are similar to Facebook.
+The channel is a typical social networking profile. By default posts and published items are public, but you can over-ride this when creating the item and restrict it. You are listed in the directory. Your online presence and connections are visible to others. Only your immediate connections can comment on your public posts and send you private mail. The permission policies are similar to Facebook.
[b]Restricted[/b]
@@ -65,7 +65,7 @@ By default all posts and published items are sent to your 'Friends' privacy grou
[b]Private[/b]
-By default all posts and published items are sent to your 'Friends' privacy group. New friends are added to this privacy group. You can over-ride this and create a public post or public item if you desire. You are NOT listed in the directory. Only your connections can see your other connections. Your online presence is hidden.
+By default all posts and published items are sent to your 'Friends' privacy group. New friends are added to this privacy group. You can over-ride this and create a public post or public item if you desire. You are NOT listed in the directory. Only your connections can see your other connections. Your online presence is hidden.
[h4]Forum[/h4]
@@ -77,11 +77,11 @@ The channel is a typical forum. By default posts and published items are public.
[b]Restricted[/b]
-By default all posts and published items are sent to the channel's 'Friends' privacy group. New friends are added to this privacy group. Members may post by !mention or wall-to-wall post, but posts and replies may also be seen by other receipients of the top-level post who are not members. The channel is visible in the directory. Members must be manually added by the forum owner.
+By default all posts and published items are sent to the channel's 'Friends' privacy group. New friends are added to this privacy group. Members may post by !mention or wall-to-wall post, but posts and replies may also be seen by other receipients of the top-level post who are not members. The channel is visible in the directory. Members must be manually added by the forum owner.
[b]Private[/b]
-By default all posts and published items are sent to your 'Friends' privacy group. New friends are added to this privacy group. The owner can over-ride this and create a public post or public item if desired. Members cannot. You are NOT listed in the directory. Only your connections can see your other connections. Your online presence is hidden. Members must be manually added by the forum owner. Posting by !mention is disabled. Posts can only be made via wall-to-wall posts, and sent to members of the 'Friends' privacy group. They are not publicly visible.
+By default all posts and published items are sent to your 'Friends' privacy group. New friends are added to this privacy group. The owner can over-ride this and create a public post or public item if desired. Members cannot. You are NOT listed in the directory. Only your connections can see your other connections. Your online presence is hidden. Members must be manually added by the forum owner. Posting by !mention is disabled. Posts can only be made via wall-to-wall posts, and sent to members of the 'Friends' privacy group. They are not publicly visible.
[h4]Feed[/h4]
@@ -89,29 +89,29 @@ By default all posts and published items are sent to your 'Friends' privacy grou
[b]Public[/b]
-Similiar to Social - Mostly Public, but tailored for RSS feed sources. Items may be freely republished and sourced. Online presence is meaningless, therefore hidden. New connections are automatically approved.
+Similiar to Social - Mostly Public, but tailored for RSS feed sources. Items may be freely republished and sourced. Online presence is meaningless, therefore hidden. New connections are automatically approved.
[b]Restricted[/b]
-Not listed in directory. Online presence is meaningless, therefore hidden. Feed is published only to members of the 'Friends' privacy group. New connections are automatically added to this privacy group. Members must be manually approved by the channel owner.
+Not listed in directory. Online presence is meaningless, therefore hidden. Feed is published only to members of the 'Friends' privacy group. New connections are automatically added to this privacy group. Members must be manually approved by the channel owner.
[h4]Special[/h4]
[b]Celebrity/Soapbox[/b]
-Listed in directory. Communications are by default public. Online presence is hidden. No commenting or feedback of any form is allowed, though connections have the ability to "like" your profile.
+Listed in directory. Communications are by default public. Online presence is hidden. No commenting or feedback of any form is allowed, though connections have the ability to "like" your profile.
[b]Group Repository[/b]
-A public forum which allows members to post files/photos/webpages.
+A public forum which allows members to post files/photos/webpages.
[h4]Custom/Expert Mode[/h4]
-Set all the privacy and permissions manually to suit your specific needs.
+Set all the privacy and permissions manually to suit your specific needs.
[h3]Creating channels[/h3]
@@ -184,17 +184,17 @@ First, you need to find some channels to connect to. There are two primary ways
The next thing you can do is look at the Directory. The directory is available on every $Projectname website which means searching from your own site will bring in results from the entire network. You can search by name, interest, location, and keyword.
-If you already know somebody's 'webbie' you can connect with them directly. A webbie looks just like an email address (for instance bob@example.com) but refers to somebody in the open social web. In order to connect they must be using a compatible network protocol. By default, this software supports the 'zot' protocol, however additional protocols may be provided through plugins/addons. See below for more information on connecting to channels on other networks.
+If you already know somebody's 'webbie' you can connect with them directly. A webbie looks just like an email address (for instance bob@example.com) but refers to somebody in the open social web. In order to connect they must be using a compatible network protocol. By default, this software supports the 'zot' protocol, however additional protocols may be provided through plugins/addons. See below for more information on connecting to channels on other networks.
To connect with other $Projectname channels:
-Visit their profile by clicking their photograph in the directory, matrix, or comments, and it will open their channel home page in the channel viewer. At the left hand side of the screen, you will usually see a link called &quot;connect&quot;. Click it, and you're done. Depending on the settings of the channel you are connecting to, you may need to wait for them to approve your connection, but no further action is needed on your part. Once you've initiated the connection, you will be taken to the connection editor. This allows you to assign specific permissions for this channel if you wish to make any changes.
+Visit their profile by clicking their photograph in the directory, matrix, or comments, and it will open their channel home page in the channel viewer. At the left hand side of the screen, you will usually see a link called &quot;connect&quot;. Click it, and you're done. Depending on the settings of the channel you are connecting to, you may need to wait for them to approve your connection, but no further action is needed on your part. Once you've initiated the connection, you will be taken to the connection editor. This allows you to assign specific permissions for this channel if you wish to make any changes.
You may also connect with any channel by visiting the &quot;Connections&quot; page of your site or the Directory and typing their &quot;webbie&quot; into the &quot;Add New Connection&quot; field. Use this method if somebody tells you their webbie and you wish to connect with them. The process is the same as connecting via the &quot;Connect&quot; button - you will then be taken to the connection editor to set permissions.
To connect with channels on other networks:
-The process for connecting to channels on other networks (such as GNU-Social, Mastodon, and Diaspora) is similar - type their &quot;webbie&quot; into the &quot;Add New Connections&quot; box on the &quot;Connections&quot; page. Before you do this however, please visit your Settings page (Feature/Addon Settings) and ensure that the relevant protocol (Diaspora, GNU-Social/OStatus, or ActivityPub) is provided on your hub and [b][i]activated[/i] for your channel[/b]. These networks/protocols do not support account migration and location independence so if you move location or clone your channel elsewhere, communications with these connections may fail. For this reason these protocols are not activated by default, but only through your consent. Activating these protocols involves an important decision between communicating with friends on these networks or providing fail-safe account resilience if your server fails.
+The process for connecting to channels on other networks (such as GNU-Social, Mastodon, and Diaspora) is similar - type their &quot;webbie&quot; into the &quot;Add New Connections&quot; box on the &quot;Connections&quot; page. Before you do this however, please visit your Settings page (Feature/Addon Settings) and ensure that the relevant protocol (Diaspora, GNU-Social/OStatus, or ActivityPub) is provided on your hub and [b][i]activated[/i] for your channel[/b]. These networks/protocols do not support account migration and location independence so if you move location or clone your channel elsewhere, communications with these connections may fail. For this reason these protocols are not activated by default, but only through your consent. Activating these protocols involves an important decision between communicating with friends on these networks or providing fail-safe account resilience if your server fails.
Some communications offer more than one protocol. If you wish to connect with somebody on Mastodon (for instance) they can use either the 'ostatus' or the 'activitypub' protocol for communication. Generally the 'activitypub' protocol will provide a better experience than 'ostatus', but $Projectname will often choose the first protocol it discovers and this may not be the one you want. You may connect with somebody over a specific protocol by prepending the protocol name in square brackets to their &quot;webbie&quot;. For example
@@ -209,7 +209,7 @@ Some communications offer more than one protocol. If you wish to connect with so
To connect with RSS feeds:
-Your hub admin may allow connecting to RSS feeds. The process for connecting to an RSS feed is the same, exept type (or paste) the URL of the feed into the &quot;Add New Connection&quot; box. Feeds are only processed once or twice per day and your hub admin may impose limits on how many feeds you may add.
+Your hub admin may allow connecting to RSS feeds. The process for connecting to an RSS feed is the same, exept type (or paste) the URL of the feed into the &quot;Add New Connection&quot; box. Feeds are only processed once or twice per day and your hub admin may impose limits on how many feeds you may add.
[h4]Block/Ignore/Archive/Hide channels [/h4]
@@ -234,7 +234,7 @@ Permissions in $Projectname are more complete than you may be used to. This allo
[h4]Permission Roles[/h4]
-When you create a channel we allow you to select different 'roles' for that channel. These create an entire family of permissions and privacy settings that are appropriate for that role. Typical roles are "Social - mostly public", "Social - mostly private", "Forum - public" and many others. These bring a level of simplicity to managing permissions. Just choose a role and appropriate permissions are automatically applied. You can also choose 'Custom/Expert mode' and change any individual permission setting in any way you desire.
+When you create a channel we allow you to select different 'roles' for that channel. These create an entire family of permissions and privacy settings that are appropriate for that role. Typical roles are "Social - mostly public", "Social - mostly private", "Forum - public" and many others. These bring a level of simplicity to managing permissions. Just choose a role and appropriate permissions are automatically applied. You can also choose 'Custom/Expert mode' and change any individual permission setting in any way you desire.
[h4]Default Permission Limits[/h4]
@@ -242,8 +242,8 @@ When you create a channel we allow you to select different 'roles' for that chan
There are a large number of individual permissions. These control everything from the ability to view your stream to the ability to chat with you. Every permission has a limit. The scope of these permissions varies from &quot;Only me&quot; to &quot;Everybody on the internet&quot; - though some scopes may not be available for some permissions. The limit applies to any published thing you create which has no privacy or access control. For example if you publish a photo and didn't select a specific audience with permission to view it, we apply the limit. These limits apply to everything within that permission rule, so you cannot apply a limit to one photo. The limit applies to all your photos. If all your photos are visible to everybody on the internet and you reduce the limit only to friends, [b]all[/b] of your photos will now be visible only to friends.
[h4]Access Control[/h4]
-
-Access Control is the preferred method of managing privacy in [i]most[/i] cases, rather than using permission limits. This creates lists of either connections or privacy groups (or both) and uses the access list to decide if a permission is allowed. An access list is attached to everything you publish. Unlike permission limits, if you change the access control list on a single photo, it doesn't affect any of your other photos. You can use privacy groups and a "default access control list" to create and automate the management of access control lists to provide any level of privacy you desire on anything you publish.
+
+Access Control is the preferred method of managing privacy in [i]most[/i] cases, rather than using permission limits. This creates lists of either connections or privacy groups (or both) and uses the access list to decide if a permission is allowed. An access list is attached to everything you publish. Unlike permission limits, if you change the access control list on a single photo, it doesn't affect any of your other photos. You can use privacy groups and a "default access control list" to create and automate the management of access control lists to provide any level of privacy you desire on anything you publish.
We highly recommend that you use the "typical social network" settings when you create your first channel, as it allows others to communicate with you and help you out if you have difficulty. You will find that these settings allow you as much privacy as you desire - when you desire it; but also allow you to communicate in public if you choose to. You are free to use much more private settings once you have learned your way around.
@@ -252,17 +252,17 @@ We highly recommend that you use the "typical social network" settings when you
[*= The scopes of permissions are:]
[dl terms="i"]
[*= Nobody Except Yourself ] This is self explanatory. Only you will be allowed access.
-
+
[*= Only those you specifically allow ] By default, people you are not connected to, and all new contacts will have this permission denied. You will be able to make exceptions for individual channels on their contact edit screen.
-
+
[*= Anybody in your address book ] Anybody you do not know will have this permission denied, but anybody you accept as a contact will have this permission approved. This is the way most legacy platforms handle permissions.
-
+
[*= Anybody On This Hub ] Anybody with a channel on the same hub/website as you will have permission approved. Anybody who is registered at a different hub will have this permission denied.
-
+
[*= Anybody in this network ] Anybody in $Projectname will have this permission approved. Even complete strangers. However, anybody not logged in/authenticated will have this permission denied.
-
+
[*= Anybody authenticated ] This is similar to "anybody in this network" except that it can include anybody who can authenticate by any means - and therefore [i]may[/i] include visitors from other networks.
-
+
[*=Guest Access Token] This allows you to share a file, folder, photo, album, or channel with a specific person or group of people. They don't need to be $Projectname members. You can set an expiration for the Access Token.
[*= Anybody on the internet ] Completely public. This permission will be approved for anybody at all.
@@ -279,7 +279,7 @@ We highly recommend that you use the "typical social network" settings when you
[*= Can view my &quot;public&quot; file storage. ] This permission determines who can view your public files stored in your cloud.
- [*= Can view my &quot;public&quot; pages. ] This permission determines who can view your public web pages.
+ [*= Can view my &quot;public&quot; pages. ] This permission determines who can view your public web pages.
[*= Can send me their channel stream and posts. ] This permission determines whose posts you will view. If your channel is a personal channel (ie, you as a person), you would probably want to set this to &quot;anyone in my address book&quot; at a minimum. A personal notes channel would probably want to choose &quot;nobody except myself&quot;. Setting this to &quot;Anybody in the network&quot; will show you posts from complete strangers, which is a good form of discovery.
@@ -334,50 +334,63 @@ $Projectname supports several markup languages for advanced formatting of conten
[/table]
[h3]Tags And Mentions[/h3]
-Like many other platforms, $Projectname uses a special notation inside messages to indicate &quot;tags&quot; or contextual links to other entities.
[h4]Mentions[/h4]
-Channels are tagged by simply preceding their name with the @ character.
+You can mention a channel by simply preceding their name with the [code]@[/code] character, like this:
[code]
@Jack
[/code]
-When you start to mention somebody, it will create an auto-complete box to select from your immediate connections. Select one as appropriate.
+If the channel mentioned is in the list of recipients for the post or comment, they will receive a notification, bringing it to their attention. If they're [i]not[/i] among the recipients, the tag will simply work as a link to their profile.
+
+When you begin to mention somebody, it will create an auto-complete box to select from [u]your immediate connections[/u](?). Select one as appropriate.
-If the person mentioned is in the list of recipients for the post, they will receive a tag notification.
-[h4]Deliverable Mentions[/h4]
+[h4]Private Mentions[/h4]
+If you wish to restrict a post to a single—or only a few—channels you can do this by selecting channels or privacy groups from the privacy tool.
-The [b]![/b] character designates a deliverable mention to a forum or special channel which allows "re-delivery of mentions".
+[img=[baseurl]/help/en/member/assets/privacy-tool-3.png]Two views of the permissions dialogue. To the left: Selecing a single privacy group or forum as recipients for the post. To the right: Using the 'Custom selection' view to gain fine grained control over the recipients.[/img]
-[code]
-@Gardening - mention the Gardening forum
-[/code]
+You can also just tag a channel with a [i]privacy tag[/i].
-[code]
-!Gardening - mention the Gardening Forum and also post to the Gardening "network" (e.g. send to all the forum members; if you have permission to do so)
-[/code]
+A privacy tag is a channel name preceded by the two characters [code]@![/code]. This will also change the privacy permissions of the post to only include the tagged channel. You can use more than one privacy tag, for instance [code]@!bob and @!linda[/code] will send the post only to Bob and Linda. This mechanism over-rides the privacy selector.
-Note: In previous releases, forums were delivered by using @forum+ with a plus sign at the end. This mechanism is no longer supported.
+[h4]Mentioning forums[/h4]
-[h4]Private Mentions[/h4]
-If you wish to restrict a post to a single person or a number of people, you can do this by selecting channels or privacy groups from the privacy tool. You can also just tag them with a privacy tag. A privacy tag is a name preceded by the two characters @! - and in addition to tagging these channels, will also change the privacy permissions of the post to only include them. You can have more than one privacy tag, for instance @!bob and @!linda will send the post only to Bob and Linda. This mechanism over-rides the privacy selector.
+Forums may be mentioned in the same way. [code]@!dogs[/code] will post to the dogs forum privately. The forum will redeliver the post to all the forum members, but your own followers will not see the post unless they are also members of the dogs forum.
+
+[size=small][b]Note:[/b] In previous releases you could mention a forum by prefixing the forum name with the characters [code]!![/code]. This is no longer supported. The correct way to send to a forum is by using the [code]@![/code] tag.[/size]
+
+[h4]Mentioning privacy groups[/h4]
-Forums may be mentioned in the same way. !!dogs will post to the dogs forum privately. The forum will redeliver the post to all the forum members, but your own followers will not see the post unless they are also members of the dogs forum.
+You may also tag privacy groups which are "public".
-You may also tag privacy groups which are "public". When you create or edit a privacy group, there is a checkbox to allow the group members to be seen by others. If this box is checked for a group and you tag (for instance) @!Friends - the post will be restricted to the Friends group. Check that the group is public before doing this - as there is no way to take back a post except to delete it. The group name will appear in the post and will alert members of that group that they are members of it.
+When you create or edit a privacy group, there is a checkbox to allow the group members to be seen by others. If this box is checked for a group and you tag (for instance) [code]@!Friends[/code] - the post will be restricted to the Friends group. Check that the group is public before doing this - as there is no way to take back a post except to delete it. The group name will appear in the post and will alert members of that group that they are members of it.
+
+Set the privacy group visible to others to make it public:
+[img=[baseurl]/help/en/member/assets/privacy-group-tool-public.png]The privacy group tool with 'Members are visible to other channels' set to 'yes'.[/img]
+
+To add or edit privacy groups, you need to have the [url=[baseurl]/group]Privacy Groups app[/url] installed.
[h4]Mentions and Comments[/h4]
-The above mechanisms only apply to "top-level" posts you create. Mentioning a channel with any of the above mechanisms has no effect in comments, except that the mentioned channel may receive a notification if they were already included as a recipient in the conversation.
+The above mechanisms only apply to "top-level" posts you create. Mentioning a channel with any of the above mechanisms has no effect in comments, except that the mentioned channel may receive a notification if they were already included as a recipient in the conversation.
[h4]Topical Tags (also known as Hashtags)[/h4]
-Topical tags are indicated by preceding the tag name with the # character. This will create a link in the post to a generalised site search for the term provided. For example, #[zrl=[baseurl]/search?tag=cars]cars[/zrl] will provide a search link for all posts mentioning 'cars' on your site. Topical tags are generally a minimum of three characters in length. Shorter search terms are not likely to yield any search results, although this depends on the database configuration.
+Topical tags are indicated by preceding the tag name with the [code]#[/code] character. This will create a link in the post to a generalised site search for the term provided. For example, #[zrl=[baseurl]/search?tag=cars]cars[/zrl] will provide a search link for all posts tagged with '[code]#cars[/code]' on your site. Topical tags are generally a minimum of three characters in length. Shorter search terms are not likely to yield any search results, although this depends on the database configuration.
-Topical tags are also not normally linked if they are purely numeric, e.g. #1. If you wish to use a numeric hashtag, please add some descriptive text such as #2012-elections or enclose the entire tag in double quotes (for example #"2012"). Doubles quotes are also required if the tag contains spaces (#"My Tag") and may be required if the tag contains punctuation characters (#"EndsWithPeriod." or #"Exciting!!!").
+Topical tags are also not normally linked if they are purely numeric, e.g. [code]#1[/code]. If you wish to use a numeric hashtag, please add some descriptive text such as [code]#2012-elections[/code] or enclose the entire tag in double quotes (for example [code]#"2012"[/code]). Doubles quotes are also required if the tag contains spaces ([code]#"My Tag"[/code]) and may be required if the tag contains punctuation characters ([code]#"EndsWithPeriod."[/code] or [code]#"Exciting!!!"[/code]).
[h4]Bookmarks[/h4]
-Bookmarks indicate a link which can be saved to your bookmark folder. They use the sequence #^ followed by the link. Often these are generated automatically. If the 'bookmarker' addon is installed, this sequence will be converted to a bookmark icon when viewing the post or comment online, and clicking the icon will save the bookmark. If the bookmarker addon is not installed, the post 'dropdown menu' contains a link for saving the bookmark or bookmarks.
+Bookmarks indicate a link which can be saved to your bookmark folder. They use the sequence [code]#^[/code] followed by the link. Often these are generated automatically.
+
+[img=[baseurl]/help/en/member/assets/bookmarker-save-icon.png]Saving a bookmark by clicking the bookmark icon when the 'bookmarker' addon is enabled.[/img]
+
+If the site administrator has enabled the [url=[baseurl]/admin/addons/bookmarker]bookmarker[/url] addon for the site, this sequence will be converted to a bookmark icon when viewing the post or comment online. Clicking the icon will save the bookmark.
+
+Otherwise if the [url=[baseurl]/bookmarks]Bookmarks app[/url] is installed for the channel, the post dropdown menu contains a link for saving the bookmark or bookmarks.
+
+[img=[baseurl]/help/en/member/assets/bookmarks-menu-dropdown.png]A post with a bookmark, showing the dropdown menu.[/img]
[h4]Manual Mentions[/h4]
Where possible please use the auto-complete window to select tag and mention recipients, because it will generate a coded tag which uniquely identifies one channel. Names are sometimes ambiguous. However, you can "manually" tag a channel by matching the channel name or address.
@@ -386,7 +399,7 @@ Where possible please use the auto-complete window to select tag and mention rec
@billy
[/code]
-will tag a connection whose name or network address is 'billy' (exact match). If you have two connections with a name or network address of billy, for instance billy@server1.hubzilla.org and billy@server2.hubzilla2.org, you will need to supply the complete address or the results will be ambiguous and the wrong person may be tagged.
+will tag a connection whose name or network address is 'billy' (exact match). If you have two connections with a name or network address of billy, for instance [code]billy@server1.hubzilla.org[/code] and [code]billy@server2.hubzilla2.org[/code], you will need to supply the complete address or the results will be ambiguous and the wrong person may be tagged.
[code]
@"Robert Johnson"
@@ -401,10 +414,10 @@ $Projectname allows members and allowed connections to create static webpages.
Once enabled, a new tab will appear on your channel page labeled &quot;Webpages&quot;. Clicking this link will take you to the webpage editor. Pages will be accessible at [b][baseurl]/page/[observer=1][observer.webname][/observer][observer=0]channelname[/observer]/pagelinktitle[/b]
-The &quot;page link title&quot; box allows you to specify the &quot;pagelinktitle&quot; of this URL. If no page link title is set, we will set one for you automatically, using the message ID of the item.
+The &quot;page link title&quot; box allows you to specify the &quot;pagelinktitle&quot; of this URL. If no page link title is set, we will set one for you automatically, using the message ID of the item.
Beneath the page creation box, a list of existing pages will appear with an &quot;edit&quot; link. Clicking this will take you to an editor, similar to that of the post editor, where you can make changes to your webpages.
-
+
[h4]Using Blocks[/h4]
Blocks can be parts of webpages. The basic HTML of a block looks like this
@@ -417,7 +430,7 @@ Blocks can be parts of webpages. The basic HTML of a block looks like this
If a block has text/html content type it can also contain menu elements. Sample content of
[code]
- <p>HTML block content</p>
+ <p>HTML block content</p>
[menu]menuname[/menu]
[/code]
@@ -484,7 +497,7 @@ will produce this HTML
There are two methods of importing webpage elements: uploading a zip file or referencing a local cloud files folder. Both methods require that the webpage elements are specified using a specific folder structure. The import tool makes it possible to import all the elements necessary to construct an entire website or set of websites. The goal is to accommodate external development of webpages as well as tools to simplify and automate deployment on a hub.
[h5] Folder structure [/h5]
-Element definitions must be stored in the repo root under folders called
+Element definitions must be stored in the repo root under folders called
[code]
/pages/
/blocks/
@@ -502,15 +515,15 @@ Page element metadata is specified in a JSON-formatted file called [code]page.js
[*] layout
[*] contentfile
[/list]
-[b]Example[/b]
+[b]Example[/b]
-Files:
-[code]
+Files:
+[code]
/pages/my-page/page.json
/pages/my-page/my-page.bbcode
-[/code]
+[/code]
Content of [code]page.json[/code]:
-[code]
+[code]
{
"title": "My Page",
"pagelink": "mypage",
@@ -518,7 +531,7 @@ Content of [code]page.json[/code]:
"layout": "my-layout",
"contentfile": "my-page.bbcode"
}
-[/code]
+[/code]
[h5] Layout elements [/h5]
Layout element metadata is specified in a JSON-formatted file called [code]layout.json[/code] with the following properties:
@@ -527,13 +540,13 @@ Layout element metadata is specified in a JSON-formatted file called [code]layou
[*] description
[*] contentfile
[/list]
-[b]Example[/b]
+[b]Example[/b]
Files:
[code]
/layouts/my-layout/layout.json
/layouts/my-layout/my-layout.bbcode
-[/code]
+[/code]
Content of [code]layout.json[/code]:
[code]
{
@@ -552,14 +565,14 @@ Block element metadata is specified in a JSON-formatted file called [code]block.
[*] mimetype
[*] contentfile
[/list]
-[b]Example[/b]
+[b]Example[/b]
Files:
-[code]
+[code]
/blocks/my-block/block.json
/blocks/my-block/my-block.html
[/code]
-Content of [code]block.json[/code]:
+Content of [code]block.json[/code]:
[code]
{
@@ -581,7 +594,7 @@ Currently there are five layout templates, unless your site provides additional
[dl terms="b"]
[*= default]
-The default template defines a &quot;nav&quot; region across the top, &quot;aside&quot; as a fixed width sidebar,
+The default template defines a &quot;nav&quot; region across the top, &quot;aside&quot; as a fixed width sidebar,
&quot;content&quot; for the main content region, and &quot;footer&quot; for a page footer.
[*= full]
@@ -644,7 +657,7 @@ This will select the theme named &quot;suckerberg&quot;. By default your channel
[theme=passion]suckerberg[/theme]
[/code]
-This will select the theme named &quot;suckerberg&quot; and select the &quot;passion&quot; schema (theme variant). Alternatively it may be possible to use a condensed theme notation for this.
+This will select the theme named &quot;suckerberg&quot; and select the &quot;passion&quot; schema (theme variant). Alternatively it may be possible to use a condensed theme notation for this.
[code]
[theme]suckerberg:passion[/theme]
@@ -693,13 +706,13 @@ Your webpage creation tools allow you to create menus and blocks, in addition to
[menu]mymenu[/menu]
[/code]
-This places the menu called &quot;mymenu&quot; at this location on the page, which must be inside a region.
+This places the menu called &quot;mymenu&quot; at this location on the page, which must be inside a region.
[code]
[menu=horizontal]mymenu[/menu]
[/code]
-This places the menu called &quot;mymenu&quot; at this location on the page, which must be inside a region. Additionally it applies the "horizontal" class to the menu. "horizontal" is defined in the redbasic theme. It may or may not be available in other themes.
+This places the menu called &quot;mymenu&quot; at this location on the page, which must be inside a region. Additionally it applies the "horizontal" class to the menu. "horizontal" is defined in the redbasic theme. It may or may not be available in other themes.
[code]
[menu][var=wrap]none[/var]mymenu[/menu]
@@ -734,8 +747,8 @@ Widgets and arguments are specified with the 'widget' and 'var' tags.
[/code]
-This loads the &quot;recent_visitors&quot; widget and supplies it with the argument &quot;count&quot; set to &quot;24&quot;.
-
+This loads the &quot;recent_visitors&quot; widget and supplies it with the argument &quot;count&quot; set to &quot;24&quot;.
+
[h4]Comments[/h4]
The 'comment' tag is used to delimit comments. These comments will not appear on the rendered page.
@@ -760,7 +773,7 @@ You can use an 'if' construct to make decisions. These are currently based on sy
[/code]
- The 'else' clause is optional.
+ The 'else' clause is optional.
Several tests are supported besides boolean evaluation.
@@ -848,7 +861,7 @@ To delete attachments or change the permissions on the stored files, visit [obse
[h4]Web Access[/h4]
-Your files are visible on the web at the location [observer=1][baseurl]/cloud/[observer.webname][/observer][observer=0][baseurl]/cloud/username[/observer] to anybody who is allowed to view them. If the viewer has sufficient privileges, they may also have the ability to create new files and folders/directories. This should only be used for smaller files and photos (up to a few megabytes) as it uses internal memory. For larger files (videos, music, etc.), please upload using WebDAV. These files may still be retrieved via web access.
+Your files are visible on the web at the location [observer=1][baseurl]/cloud/[observer.webname][/observer][observer=0][baseurl]/cloud/username[/observer] to anybody who is allowed to view them. If the viewer has sufficient privileges, they may also have the ability to create new files and folders/directories. This should only be used for smaller files and photos (up to a few megabytes) as it uses internal memory. For larger files (videos, music, etc.), please upload using WebDAV. These files may still be retrieved via web access.
[h4]WebDAV access[/h4]
@@ -909,8 +922,8 @@ Now you need to add any user you want to be able to mount dav to the davfs2 grou
[code]usermod -aG davfs2 &lt;DesktopUser&gt;[/code]
-[b]Note:[/b] on some systems the user group may be different, i.e. - "network"
-on Arch Linux. If in doubt, check the davfs documentation for your
+[b]Note:[/b] on some systems the user group may be different, i.e. - "network"
+on Arch Linux. If in doubt, check the davfs documentation for your
particular OS.
Edit /etc/fstab
@@ -925,7 +938,7 @@ Edit /etc/fstab
Where [baseurl] is the URL of your hub, /mount/point is the location you want to mount the cloud, and &lt;DesktopUser&gt; is the user you log in to one your computer. Note that if you are mounting as a normal user (not root) the mount point must be in your home directory.
-For example, if I wanted to mount my cloud to a directory called 'cloud' in my home directory, and my username was bob, my fstab would be
+For example, if I wanted to mount my cloud to a directory called 'cloud' in my home directory, and my username was bob, my fstab would be
[code][baseurl]/dav/ /home/bob/cloud davfs user,noauto,uid=bob,file_mode=600,dir_mode=700 0 1[/code]
@@ -965,7 +978,7 @@ With some webservers and certain configurations, you may find davfs2 creating fi
[code]nano /etc/davfs2/davfs2.conf[/code]
-Your distribution will provide a sample configuration, and this file should already exist, however, most of it will be commented out with a # at the beginning of the line.
+Your distribution will provide a sample configuration, and this file should already exist, however, most of it will be commented out with a # at the beginning of the line.
First step is to remove locks.
@@ -989,7 +1002,7 @@ Note, if you are already logged in to the web interface via Konqueror, you will
Simply visit webdavs://example.com/dav after logging in to your hub, where &quot;example.com&quot; is the URL of your hub.
-No further authentication is required if you are logged in to your hub in the normal manner.
+No further authentication is required if you are logged in to your hub in the normal manner.
Additionally, if one has authenticated at a different hub during their normal browser session, your identity will be passed to the cloud for these hubs too - meaning you can access any private files on any server, as long as you have permissions to see them, as long as you have visited that site earlier in your session.
@@ -1023,13 +1036,13 @@ Once open you can set a bookmark.
[h5]Server Notes[/h5]
-Note: There have been reported issues with clients that use "chunked transfer encoding", which includes Apple iOS services, and also the "AnyClient" and "CyberDuck" tools. These work fine for downloads, but uploads often end up with files of zero size. This is caused by an incorrect implemention of chunked encoding in some current FCGI (fast-cgi) implementations. Apache running with PHP as a module does not have these issues, but when running under FCGI you may need to use alternative clients or use the web uploader. At the time of this writing the issue has been open and no updates provided for at least a year. If you encounter zero size files with other clients, please check the client notes; as there are occasional configuration issues which can also produce these symptoms.
+Note: There have been reported issues with clients that use "chunked transfer encoding", which includes Apple iOS services, and also the "AnyClient" and "CyberDuck" tools. These work fine for downloads, but uploads often end up with files of zero size. This is caused by an incorrect implemention of chunked encoding in some current FCGI (fast-cgi) implementations. Apache running with PHP as a module does not have these issues, but when running under FCGI you may need to use alternative clients or use the web uploader. At the time of this writing the issue has been open and no updates provided for at least a year. If you encounter zero size files with other clients, please check the client notes; as there are occasional configuration issues which can also produce these symptoms.
[h3]Saved Searches[/h3]
-In order to quickly find information, the 'saved search' widget may be used. This widget may be presented as a sidebar tool on your network page and possibly from your channel page. It is differentiated from the 'navigation bar' search tool in that it does not search the entire site, but only the subset of information available to your channel.
+In order to quickly find information, the 'saved search' widget may be used. This widget may be presented as a sidebar tool on your network page and possibly from your channel page. It is differentiated from the 'navigation bar' search tool in that it does not search the entire site, but only the subset of information available to your channel.
-Additionally the search terms you provide may activate a one-time search or be saved in a list for re-use. Saving the search item also invokes the search in addition to adding it to the saved list (which is displayed below the search text entry box). Any item in the list may be discarded if it is no longer needed.
+Additionally the search terms you provide may activate a one-time search or be saved in a list for re-use. Saving the search item also invokes the search in addition to adding it to the saved list (which is displayed below the search text entry box). Any item in the list may be discarded if it is no longer needed.
The saved search widget will provide autocompletion of channels (the results are prefixed with '@'), and hashtags (prefixed with '#'). You do not need to enter these tags; although entering the desired tag will reduce the autocomplete results to only hold the relevant information. The behaviour maps as follows:
@@ -1046,9 +1059,9 @@ The saved search widget will provide autocompletion of channels (the results are
Select the 'Remove Channel' link on your channel settings page or visit the URL:
- [baseurl]/removeme
+ [baseurl]/removeme
-You will need to confirm your password and the channel you are currently logged into will be removed.
+You will need to confirm your password and the channel you are currently logged into will be removed.
[hl][i][b]This is irreversible.[/b][/i][/hl]
@@ -1059,8 +1072,8 @@ If you have identity clones on other hubs this only removes by default the chan
Select 'Remove Account' from your account settings page or visit the URL:
[baseurl]/removeaccount
-
-You will need to confirm your password and the account you are currently logged into will be removed.
+
+You will need to confirm your password and the account you are currently logged into will be removed.
[hl][i][b]This is irreversible.[/b][/i][/hl]
diff --git a/doc/plugins.bb b/doc/en/plugins.bb
index 3aecc458f..3aecc458f 100644
--- a/doc/plugins.bb
+++ b/doc/en/plugins.bb
diff --git a/doc/problems-following-an-update.bb b/doc/en/problems-following-an-update.bb
index 7376d6163..7376d6163 100644
--- a/doc/problems-following-an-update.bb
+++ b/doc/en/problems-following-an-update.bb
diff --git a/doc/red2pi.bb b/doc/en/red2pi.bb
index 8ae087fbf..8ae087fbf 100644
--- a/doc/red2pi.bb
+++ b/doc/en/red2pi.bb
diff --git a/doc/roadmap.bb b/doc/en/roadmap.bb
index dce19848a..dce19848a 100644
--- a/doc/roadmap.bb
+++ b/doc/en/roadmap.bb
diff --git a/doc/schema_development.bb b/doc/en/schema_development.bb
index 10832684a..10832684a 100644
--- a/doc/schema_development.bb
+++ b/doc/en/schema_development.bb
diff --git a/doc/schemaspy_hubzilla/zot.meta.xml b/doc/en/schemaspy_hubzilla/zot.meta.xml
index 98a9d370e..98a9d370e 100644
--- a/doc/schemaspy_hubzilla/zot.meta.xml
+++ b/doc/en/schemaspy_hubzilla/zot.meta.xml
diff --git a/doc/sql_conventions.bb b/doc/en/sql_conventions.bb
index f6a4e251f..f6a4e251f 100644
--- a/doc/sql_conventions.bb
+++ b/doc/en/sql_conventions.bb
diff --git a/doc/en/toc.html b/doc/en/toc.html
new file mode 100644
index 000000000..b1edef6d2
--- /dev/null
+++ b/doc/en/toc.html
@@ -0,0 +1,75 @@
+<div class="" id="accordion">
+ <div class="mb-3">
+ <div class="">
+ <h3 class="panel-title">
+ Tutorials
+ </h3>
+ </div>
+ <div id="tutorials" class="doco-section">
+ <div class="vstack">
+ <a class="" href="/help/tutorials/personal_channel">Personal Channel</a>
+ </div>
+ </div>
+ </div>
+ <div class="mb-3">
+ <div class="">
+ <h3 class="panel-title">
+ Members
+ </h3>
+ </div>
+ <div id="members" class="doco-section">
+ <div class="vstack">
+ <a class="" href="/help/member/member_guide">Guide</a>
+ <a class="" href="/help/member/bbcode">BBcode Reference</a>
+ <a class="" href="/help/feature/additional/overview">Additional Features</a>
+ <a class="" href="/help/bugs">Reporting Bugs</a>
+ <a class="" href="/help/member/member_faq">FAQ</a>
+ </div>
+ </div>
+ </div>
+ <div class="mb-3">
+ <div class="">
+ <h3 class="panel-title">
+ Administrators
+ </h3>
+ </div>
+ <div id="administrators" class="doco-section">
+ <div class="vstack">
+ <a class="" href="/help/admin/administrator_guide">Guide</a>
+ <a class="" href="/help/admin/hub_snapshots">Hub Snapshots</a>
+ <a class="" href="/help/database">Database</a>
+ <a class="" href="/help/hidden_configs">Extra configs</a>
+ </div>
+ </div>
+ </div>
+ <div class="mb-3">
+ <div class="">
+ <h3 class="panel-title">
+ Developers
+ </h3>
+ </div>
+ <div id="developers" class="doco-section">
+ <div class="vstack">
+ <a class="" href="/help/developer/developer_guide">Guide</a>
+ <a class="" href="/help/developer/covenant">Code of Conduct</a>
+ <a class="" href="/help/developer/zot_protocol">Zot Protocol</a>
+ <a class="" href="/help/developer/api_zot">Zot API</a>
+ <a class="" href="/help/hooklist">Hooks</a>
+ </div>
+ </div>
+ </div>
+ <div class="mb-3">
+ <div class="">
+ <h3 class="panel-title">
+ About
+ </h3>
+ </div>
+ <div id="about" class="doco-section">
+ <div class="vstack">
+ <a class="" href="/help/about/about">About</a>
+ <a class="" href="/help/about/project">Project</a>
+ <a class="" href="/help/about/about_hub">About this hub</a>
+ </div>
+ </div>
+ </div>
+</div>
diff --git a/doc/tutorials/assets/0965ace945f0c95ae38aa5bfedd230d2a7233d3915ac15d629f9dd845854.png b/doc/en/tutorials/assets/0965ace945f0c95ae38aa5bfedd230d2a7233d3915ac15d629f9dd845854.png
index d5cf1093f..d5cf1093f 100644
--- a/doc/tutorials/assets/0965ace945f0c95ae38aa5bfedd230d2a7233d3915ac15d629f9dd845854.png
+++ b/doc/en/tutorials/assets/0965ace945f0c95ae38aa5bfedd230d2a7233d3915ac15d629f9dd845854.png
Binary files differ
diff --git a/doc/tutorials/assets/1ebe02c205962dd25035c441631745d16acdb7a44e50d148256c8ad26a67.png b/doc/en/tutorials/assets/1ebe02c205962dd25035c441631745d16acdb7a44e50d148256c8ad26a67.png
index d613925aa..d613925aa 100644
--- a/doc/tutorials/assets/1ebe02c205962dd25035c441631745d16acdb7a44e50d148256c8ad26a67.png
+++ b/doc/en/tutorials/assets/1ebe02c205962dd25035c441631745d16acdb7a44e50d148256c8ad26a67.png
Binary files differ
diff --git a/doc/tutorials/assets/2243e48ccea25bd907cce3dbd6fc9f7cd832a4c91a4c5dd294b7b219e7d8.png b/doc/en/tutorials/assets/2243e48ccea25bd907cce3dbd6fc9f7cd832a4c91a4c5dd294b7b219e7d8.png
index c403bf806..c403bf806 100644
--- a/doc/tutorials/assets/2243e48ccea25bd907cce3dbd6fc9f7cd832a4c91a4c5dd294b7b219e7d8.png
+++ b/doc/en/tutorials/assets/2243e48ccea25bd907cce3dbd6fc9f7cd832a4c91a4c5dd294b7b219e7d8.png
Binary files differ
diff --git a/doc/tutorials/assets/25eaad2435200f72a1dd3a00ba17a76ca6db4c246b3c4fa286b390cae7c8.png b/doc/en/tutorials/assets/25eaad2435200f72a1dd3a00ba17a76ca6db4c246b3c4fa286b390cae7c8.png
index ca8ba6fb9..ca8ba6fb9 100644
--- a/doc/tutorials/assets/25eaad2435200f72a1dd3a00ba17a76ca6db4c246b3c4fa286b390cae7c8.png
+++ b/doc/en/tutorials/assets/25eaad2435200f72a1dd3a00ba17a76ca6db4c246b3c4fa286b390cae7c8.png
Binary files differ
diff --git a/doc/tutorials/assets/2b539d5a8474d6ec6dc91155b628d9be5f99ab04a78108ec404f53ec7bb5.png b/doc/en/tutorials/assets/2b539d5a8474d6ec6dc91155b628d9be5f99ab04a78108ec404f53ec7bb5.png
index 0da2d96e2..0da2d96e2 100644
--- a/doc/tutorials/assets/2b539d5a8474d6ec6dc91155b628d9be5f99ab04a78108ec404f53ec7bb5.png
+++ b/doc/en/tutorials/assets/2b539d5a8474d6ec6dc91155b628d9be5f99ab04a78108ec404f53ec7bb5.png
Binary files differ
diff --git a/doc/tutorials/assets/31f42a02bdbae095e0329db6c3814e2975979aff12f873f43d81724c5e61.png b/doc/en/tutorials/assets/31f42a02bdbae095e0329db6c3814e2975979aff12f873f43d81724c5e61.png
index 2a209b2be..2a209b2be 100644
--- a/doc/tutorials/assets/31f42a02bdbae095e0329db6c3814e2975979aff12f873f43d81724c5e61.png
+++ b/doc/en/tutorials/assets/31f42a02bdbae095e0329db6c3814e2975979aff12f873f43d81724c5e61.png
Binary files differ
diff --git a/doc/tutorials/assets/324247680b605fd214fd61aecd8f216fa8f5dfa0f16a04c8e968fdbc43d0.png b/doc/en/tutorials/assets/324247680b605fd214fd61aecd8f216fa8f5dfa0f16a04c8e968fdbc43d0.png
index f992672b0..f992672b0 100644
--- a/doc/tutorials/assets/324247680b605fd214fd61aecd8f216fa8f5dfa0f16a04c8e968fdbc43d0.png
+++ b/doc/en/tutorials/assets/324247680b605fd214fd61aecd8f216fa8f5dfa0f16a04c8e968fdbc43d0.png
Binary files differ
diff --git a/doc/tutorials/assets/3656a67dce40a1fc2515e9089217f2e136d4fcf8babe77bac00ecaad43ce.png b/doc/en/tutorials/assets/3656a67dce40a1fc2515e9089217f2e136d4fcf8babe77bac00ecaad43ce.png
index b656192dc..b656192dc 100644
--- a/doc/tutorials/assets/3656a67dce40a1fc2515e9089217f2e136d4fcf8babe77bac00ecaad43ce.png
+++ b/doc/en/tutorials/assets/3656a67dce40a1fc2515e9089217f2e136d4fcf8babe77bac00ecaad43ce.png
Binary files differ
diff --git a/doc/tutorials/assets/458a842c2ea0fbe3b7869bb14dfffe1e5be098d1cd6e590bbead25b4cc05.png b/doc/en/tutorials/assets/458a842c2ea0fbe3b7869bb14dfffe1e5be098d1cd6e590bbead25b4cc05.png
index 6129195b6..6129195b6 100644
--- a/doc/tutorials/assets/458a842c2ea0fbe3b7869bb14dfffe1e5be098d1cd6e590bbead25b4cc05.png
+++ b/doc/en/tutorials/assets/458a842c2ea0fbe3b7869bb14dfffe1e5be098d1cd6e590bbead25b4cc05.png
Binary files differ
diff --git a/doc/tutorials/assets/4aaaf1e124514c8d6999a5fe1d07be5af460cda4ba6cde9106ebc1564bb0.png b/doc/en/tutorials/assets/4aaaf1e124514c8d6999a5fe1d07be5af460cda4ba6cde9106ebc1564bb0.png
index 923403fe9..923403fe9 100644
--- a/doc/tutorials/assets/4aaaf1e124514c8d6999a5fe1d07be5af460cda4ba6cde9106ebc1564bb0.png
+++ b/doc/en/tutorials/assets/4aaaf1e124514c8d6999a5fe1d07be5af460cda4ba6cde9106ebc1564bb0.png
Binary files differ
diff --git a/doc/tutorials/assets/4cf326152797a8ecdf5630e921756f825ee00f8ee464d3ef9fed971d2852.png b/doc/en/tutorials/assets/4cf326152797a8ecdf5630e921756f825ee00f8ee464d3ef9fed971d2852.png
index f158ad5d9..f158ad5d9 100644
--- a/doc/tutorials/assets/4cf326152797a8ecdf5630e921756f825ee00f8ee464d3ef9fed971d2852.png
+++ b/doc/en/tutorials/assets/4cf326152797a8ecdf5630e921756f825ee00f8ee464d3ef9fed971d2852.png
Binary files differ
diff --git a/doc/tutorials/assets/75d2927b7ad0d2043d4d3b6ba1364fac8ead173edd39340adaf78be11c9d.png b/doc/en/tutorials/assets/75d2927b7ad0d2043d4d3b6ba1364fac8ead173edd39340adaf78be11c9d.png
index edc8b01cc..edc8b01cc 100644
--- a/doc/tutorials/assets/75d2927b7ad0d2043d4d3b6ba1364fac8ead173edd39340adaf78be11c9d.png
+++ b/doc/en/tutorials/assets/75d2927b7ad0d2043d4d3b6ba1364fac8ead173edd39340adaf78be11c9d.png
Binary files differ
diff --git a/doc/tutorials/assets/7c976a06662a1357b3da8ed0680d1a721c85f2ae2bdd5739a8def466010e.png b/doc/en/tutorials/assets/7c976a06662a1357b3da8ed0680d1a721c85f2ae2bdd5739a8def466010e.png
index 5b259058b..5b259058b 100644
--- a/doc/tutorials/assets/7c976a06662a1357b3da8ed0680d1a721c85f2ae2bdd5739a8def466010e.png
+++ b/doc/en/tutorials/assets/7c976a06662a1357b3da8ed0680d1a721c85f2ae2bdd5739a8def466010e.png
Binary files differ
diff --git a/doc/tutorials/assets/99a6efda4df631dfb2d2a849412044cc6a0f8aebeac289d28786f2649d24.png b/doc/en/tutorials/assets/99a6efda4df631dfb2d2a849412044cc6a0f8aebeac289d28786f2649d24.png
index c03ffd18d..c03ffd18d 100644
--- a/doc/tutorials/assets/99a6efda4df631dfb2d2a849412044cc6a0f8aebeac289d28786f2649d24.png
+++ b/doc/en/tutorials/assets/99a6efda4df631dfb2d2a849412044cc6a0f8aebeac289d28786f2649d24.png
Binary files differ
diff --git a/doc/tutorials/assets/9eae9fad774a4cd29e665961d35affbd053368056f562c58200fb41027b0.png b/doc/en/tutorials/assets/9eae9fad774a4cd29e665961d35affbd053368056f562c58200fb41027b0.png
index 65d4c5f0a..65d4c5f0a 100644
--- a/doc/tutorials/assets/9eae9fad774a4cd29e665961d35affbd053368056f562c58200fb41027b0.png
+++ b/doc/en/tutorials/assets/9eae9fad774a4cd29e665961d35affbd053368056f562c58200fb41027b0.png
Binary files differ
diff --git a/doc/tutorials/assets/b0bfdf02aef3710a37bb6092c3240b291eca8afa73133b3ac03b86f3302d.png b/doc/en/tutorials/assets/b0bfdf02aef3710a37bb6092c3240b291eca8afa73133b3ac03b86f3302d.png
index 45609a7bb..45609a7bb 100644
--- a/doc/tutorials/assets/b0bfdf02aef3710a37bb6092c3240b291eca8afa73133b3ac03b86f3302d.png
+++ b/doc/en/tutorials/assets/b0bfdf02aef3710a37bb6092c3240b291eca8afa73133b3ac03b86f3302d.png
Binary files differ
diff --git a/doc/tutorials/assets/b334915c03a665493915598c69c17a87c910a39db2cd3b5292e4623ea4c4.png b/doc/en/tutorials/assets/b334915c03a665493915598c69c17a87c910a39db2cd3b5292e4623ea4c4.png
index d239d6965..d239d6965 100644
--- a/doc/tutorials/assets/b334915c03a665493915598c69c17a87c910a39db2cd3b5292e4623ea4c4.png
+++ b/doc/en/tutorials/assets/b334915c03a665493915598c69c17a87c910a39db2cd3b5292e4623ea4c4.png
Binary files differ
diff --git a/doc/tutorials/assets/b3eece28e8db67f1024af42055f0f24ed5e81ba622aca8cac576ccf5930e.png b/doc/en/tutorials/assets/b3eece28e8db67f1024af42055f0f24ed5e81ba622aca8cac576ccf5930e.png
index 45ed64d00..45ed64d00 100644
--- a/doc/tutorials/assets/b3eece28e8db67f1024af42055f0f24ed5e81ba622aca8cac576ccf5930e.png
+++ b/doc/en/tutorials/assets/b3eece28e8db67f1024af42055f0f24ed5e81ba622aca8cac576ccf5930e.png
Binary files differ
diff --git a/doc/tutorials/assets/bdbcf0ffd9004657237f6b7b7863da5a8e39a5bc17d2c67fa160efef2056.png b/doc/en/tutorials/assets/bdbcf0ffd9004657237f6b7b7863da5a8e39a5bc17d2c67fa160efef2056.png
index fcaed8bef..fcaed8bef 100644
--- a/doc/tutorials/assets/bdbcf0ffd9004657237f6b7b7863da5a8e39a5bc17d2c67fa160efef2056.png
+++ b/doc/en/tutorials/assets/bdbcf0ffd9004657237f6b7b7863da5a8e39a5bc17d2c67fa160efef2056.png
Binary files differ
diff --git a/doc/tutorials/assets/c4cad3e4c356dd2a227df79bd4dc6d47edf1b66ea243f005b6b452ec366b.png b/doc/en/tutorials/assets/c4cad3e4c356dd2a227df79bd4dc6d47edf1b66ea243f005b6b452ec366b.png
index 0ccfc8995..0ccfc8995 100644
--- a/doc/tutorials/assets/c4cad3e4c356dd2a227df79bd4dc6d47edf1b66ea243f005b6b452ec366b.png
+++ b/doc/en/tutorials/assets/c4cad3e4c356dd2a227df79bd4dc6d47edf1b66ea243f005b6b452ec366b.png
Binary files differ
diff --git a/doc/tutorials/assets/c9a880cc82ffa1f7c2f460397bb083bf7dc2a2b8f065e64da598b45b4a2b.png b/doc/en/tutorials/assets/c9a880cc82ffa1f7c2f460397bb083bf7dc2a2b8f065e64da598b45b4a2b.png
index 1cb4d2d22..1cb4d2d22 100644
--- a/doc/tutorials/assets/c9a880cc82ffa1f7c2f460397bb083bf7dc2a2b8f065e64da598b45b4a2b.png
+++ b/doc/en/tutorials/assets/c9a880cc82ffa1f7c2f460397bb083bf7dc2a2b8f065e64da598b45b4a2b.png
Binary files differ
diff --git a/doc/tutorials/assets/d080e92d797af5e863fa39b2084c16a8410de1f7a6559633435817444aef.png b/doc/en/tutorials/assets/d080e92d797af5e863fa39b2084c16a8410de1f7a6559633435817444aef.png
index 22e4cb5d5..22e4cb5d5 100644
--- a/doc/tutorials/assets/d080e92d797af5e863fa39b2084c16a8410de1f7a6559633435817444aef.png
+++ b/doc/en/tutorials/assets/d080e92d797af5e863fa39b2084c16a8410de1f7a6559633435817444aef.png
Binary files differ
diff --git a/doc/tutorials/assets/e05248fdc5688d6d24bde52432fdc7b39692a094559aa504de99352940b1.png b/doc/en/tutorials/assets/e05248fdc5688d6d24bde52432fdc7b39692a094559aa504de99352940b1.png
index 5674f5207..5674f5207 100644
--- a/doc/tutorials/assets/e05248fdc5688d6d24bde52432fdc7b39692a094559aa504de99352940b1.png
+++ b/doc/en/tutorials/assets/e05248fdc5688d6d24bde52432fdc7b39692a094559aa504de99352940b1.png
Binary files differ
diff --git a/doc/tutorials/assets/e5d5674a34e848e2cce90a60fc416415271d9c51b81ad2a950fb0157222a.png b/doc/en/tutorials/assets/e5d5674a34e848e2cce90a60fc416415271d9c51b81ad2a950fb0157222a.png
index e6b4a9974..e6b4a9974 100644
--- a/doc/tutorials/assets/e5d5674a34e848e2cce90a60fc416415271d9c51b81ad2a950fb0157222a.png
+++ b/doc/en/tutorials/assets/e5d5674a34e848e2cce90a60fc416415271d9c51b81ad2a950fb0157222a.png
Binary files differ
diff --git a/doc/tutorials/assets/ef78bc6aa3fafebd46f353514c907b3fdfe019918fc5553bb3f31388a36f.png b/doc/en/tutorials/assets/ef78bc6aa3fafebd46f353514c907b3fdfe019918fc5553bb3f31388a36f.png
index 8de042ae4..8de042ae4 100644
--- a/doc/tutorials/assets/ef78bc6aa3fafebd46f353514c907b3fdfe019918fc5553bb3f31388a36f.png
+++ b/doc/en/tutorials/assets/ef78bc6aa3fafebd46f353514c907b3fdfe019918fc5553bb3f31388a36f.png
Binary files differ
diff --git a/doc/tutorials/assets/facb0bdfdecb4c779de9048cd14b417c0d76de17af476be5f296b78d70e9.png b/doc/en/tutorials/assets/facb0bdfdecb4c779de9048cd14b417c0d76de17af476be5f296b78d70e9.png
index cec391fb4..cec391fb4 100644
--- a/doc/tutorials/assets/facb0bdfdecb4c779de9048cd14b417c0d76de17af476be5f296b78d70e9.png
+++ b/doc/en/tutorials/assets/facb0bdfdecb4c779de9048cd14b417c0d76de17af476be5f296b78d70e9.png
Binary files differ
diff --git a/doc/tutorials/personal_channel.html b/doc/en/tutorials/personal_channel.html
index bbf367571..3069cd44b 100644
--- a/doc/tutorials/personal_channel.html
+++ b/doc/en/tutorials/personal_channel.html
@@ -1,18 +1,18 @@
-<p>This tutorial is intended to be followed in sequence as if you were setting up a
-channel for the first time. It introduces some of the tools and features related
+<p>This tutorial is intended to be followed in sequence as if you were setting up a
+channel for the first time. It introduces some of the tools and features related
to a personal channel in a natural way.</p>
<h3 id="Create_a_new_channel">Create a new channel</h3>
-<p>When you log in for the first time after registering, you must create a channel.
+<p>When you log in for the first time after registering, you must create a channel.
(Alternatively you can visit https://your_website/new_channel)</p>
-<p><img class="img-responsive" src="/help/tutorials/assets/c9a880cc82ffa1f7c2f460397bb083bf7dc2a2b8f065e64da598b45b4a2b.png" alt="image"></p>
+<p><img class="img-responsive" src="/help/en/tutorials/assets/c9a880cc82ffa1f7c2f460397bb083bf7dc2a2b8f065e64da598b45b4a2b.png" alt="image"></p>
-<p>Enter your name and a nickname for the channel address, and select a "role".
-Typically if this is a personal channel that represents you, select a <strong>Social</strong> role
-with a level of default privacy that you are comfortable with. If you are unsure,
+<p>Enter your name and a nickname for the channel address, and select a "role".
+Typically if this is a personal channel that represents you, select a <strong>Social</strong> role
+with a level of default privacy that you are comfortable with. If you are unsure,
select <strong>Social - Mostly public</strong> which allows easy interaction and provides privacy when you need it.
Alternatively, <strong>Social - Restricted</strong> is very popular among privacy advocates, though it may require a bit more
effort to meet people. Whichever setting you choose can be changed later if you decide you require more or less privacy than what is provided.</p>
@@ -20,15 +20,15 @@ effort to meet people. Whichever setting you choose can be changed later if you
<!-- This section no longer applicable
<h3 id="Configure_your_channel_features">Configure your channel features</h3>
-<p>When your new channel is created you are directed to the channel settings page.
-Take the time to look around at all the settings pages to familiarize yourself with
+<p>When your new channel is created you are directed to the channel settings page.
+Take the time to look around at all the settings pages to familiarize yourself with
your options, even if you don't understand everything you see right now.</p>
-<p>Navigate to the <strong>Additional Features</strong> settings and follow the screenshots below to
+<p>Navigate to the <strong>Additional Features</strong> settings and follow the screenshots below to
enable various features. Remember to press the Submit button when you are done with
your selections.</p>
-<p><img class="img-responsive" src="/help/tutorials/assets/3656a67dce40a1fc2515e9089217f2e136d4fcf8babe77bac00ecaad43ce.png" alt="image"><img class="img-responsive" src="/help/tutorials/assets/4aaaf1e124514c8d6999a5fe1d07be5af460cda4ba6cde9106ebc1564bb0.png" alt="image"><img class="img-responsive" src="/help/tutorials/assets/99a6efda4df631dfb2d2a849412044cc6a0f8aebeac289d28786f2649d24.png" alt="image"><img class="img-responsive" src="/help/tutorials/assets/e5d5674a34e848e2cce90a60fc416415271d9c51b81ad2a950fb0157222a.png" alt="image"></p>
+<p><img class="img-responsive" src="/help/en/tutorials/assets/3656a67dce40a1fc2515e9089217f2e136d4fcf8babe77bac00ecaad43ce.png" alt="image"><img class="img-responsive" src="/help/en/tutorials/assets/4aaaf1e124514c8d6999a5fe1d07be5af460cda4ba6cde9106ebc1564bb0.png" alt="image"><img class="img-responsive" src="/help/en/tutorials/assets/99a6efda4df631dfb2d2a849412044cc6a0f8aebeac289d28786f2649d24.png" alt="image"><img class="img-responsive" src="/help/en/tutorials/assets/e5d5674a34e848e2cce90a60fc416415271d9c51b81ad2a950fb0157222a.png" alt="image"></p>
-->
<h3 id="Add_a_profile_photo">Add a profile photo</h3>
@@ -37,126 +37,126 @@ your selections.</p>
<p>From the <strong>Profile Tools</strong> dropdown menu, select <strong>Change profile photo</strong> (or just click the profile photo).</p>
-<p><img class="img-responsive" src="/help/tutorials/assets/31f42a02bdbae095e0329db6c3814e2975979aff12f873f43d81724c5e61.png" alt="image"></p>
+<p><img class="img-responsive" src="/help/en/tutorials/assets/31f42a02bdbae095e0329db6c3814e2975979aff12f873f43d81724c5e61.png" alt="image"></p>
<p>Upload your photo and size as necessary using the image editor.</p>
-<p><img class="img-responsive" src="/help/tutorials/assets/458a842c2ea0fbe3b7869bb14dfffe1e5be098d1cd6e590bbead25b4cc05.png" alt="image"></p>
+<p><img class="img-responsive" src="/help/en/tutorials/assets/458a842c2ea0fbe3b7869bb14dfffe1e5be098d1cd6e590bbead25b4cc05.png" alt="image"></p>
-<p>When you press <strong>Done Editing</strong> you will be redirected back to the profile editor.
+<p>When you press <strong>Done Editing</strong> you will be redirected back to the profile editor.
(You might need to clear your browser cache if you have trouble seeing the new photo.)</p>
-<p><img class="img-responsive" src="/help/tutorials/assets/d080e92d797af5e863fa39b2084c16a8410de1f7a6559633435817444aef.png" alt="image"></p>
+<p><img class="img-responsive" src="/help/en/tutorials/assets/d080e92d797af5e863fa39b2084c16a8410de1f7a6559633435817444aef.png" alt="image"></p>
-<p>Returning to your channel home page you will see that a post notifying others of your new
+<p>Returning to your channel home page you will see that a post notifying others of your new
profile pic has been automatically posted.</p>
-<p><img class="img-responsive" src="/help/tutorials/assets/1ebe02c205962dd25035c441631745d16acdb7a44e50d148256c8ad26a67.png" alt="image"></p>
+<p><img class="img-responsive" src="/help/en/tutorials/assets/1ebe02c205962dd25035c441631745d16acdb7a44e50d148256c8ad26a67.png" alt="image"></p>
<h3 id="Compose_a_post">Compose a post</h3>
-<p>Go to your channel home and open the post editor by pressing the <strong>Share</strong> textbox
-at the top of the channel "wall". Enter a message, and then drag-and-drop an image
-file into the post editor text area (alternatively you can use the <strong>Attach file</strong>
+<p>Go to your channel home and open the post editor by pressing the <strong>Share</strong> textbox
+at the top of the channel "wall". Enter a message, and then drag-and-drop an image
+file into the post editor text area (alternatively you can use the <strong>Attach file</strong>
tool at the bottom).</p>
-<p><img class="img-responsive" src="/help/tutorials/assets/b0bfdf02aef3710a37bb6092c3240b291eca8afa73133b3ac03b86f3302d.png" alt="image"></p>
+<p><img class="img-responsive" src="/help/en/tutorials/assets/b0bfdf02aef3710a37bb6092c3240b291eca8afa73133b3ac03b86f3302d.png" alt="image"></p>
-<p>Your image file will be automatically uploaded and stored in your cloud files, and
+<p>Your image file will be automatically uploaded and stored in your cloud files, and
a link will appear in the post window. Pressing the post preview button will allow you to preview your post before publishing it.</p>
-<p><img class="img-responsive" src="/help/tutorials/assets/7c976a06662a1357b3da8ed0680d1a721c85f2ae2bdd5739a8def466010e.png" alt="image"></p>
+<p><img class="img-responsive" src="/help/en/tutorials/assets/7c976a06662a1357b3da8ed0680d1a721c85f2ae2bdd5739a8def466010e.png" alt="image"></p>
-<p>Pressing the lock button near the Submit button will open the <strong>Access Control List</strong>
+<p>Pressing the lock button near the Submit button will open the <strong>Access Control List</strong>
so you can specify exactly who can access this post.</p>
-<p><img class="img-responsive" src="/help/tutorials/assets/2b539d5a8474d6ec6dc91155b628d9be5f99ab04a78108ec404f53ec7bb5.png" alt="image"></p>
+<p><img class="img-responsive" src="/help/en/tutorials/assets/2b539d5a8474d6ec6dc91155b628d9be5f99ab04a78108ec404f53ec7bb5.png" alt="image"></p>
<h3 id="Use_an_uploaded_image_as_a_channel_cover_photo">Use an uploaded image as a channel cover photo</h3>
-<p>One way to add some pizzazz your channel is to add a cover photo that visitors will
-see when they load your channel page. The integrated cloud file system
+<p>One way to add some pizzazz your channel is to add a cover photo that visitors will
+see when they load your channel page. The integrated cloud file system
allows you to choose an existing photo for this purpose.</p>
<p>Visit your photos in the <strong>Photos</strong> app</p>
-<p><img class="img-responsive" src="/help/tutorials/assets/0965ace945f0c95ae38aa5bfedd230d2a7233d3915ac15d629f9dd845854.png" alt="image"></p>
+<p><img class="img-responsive" src="/help/en/tutorials/assets/0965ace945f0c95ae38aa5bfedd230d2a7233d3915ac15d629f9dd845854.png" alt="image"></p>
<p>Select the photo you wish to use and select <strong>Use as cover photo</strong> from the <strong>Photo Tools</strong>
dropdown menu.</p>
-<p><img class="img-responsive" src="/help/tutorials/assets/9eae9fad774a4cd29e665961d35affbd053368056f562c58200fb41027b0.png" alt="image"></p>
+<p><img class="img-responsive" src="/help/en/tutorials/assets/9eae9fad774a4cd29e665961d35affbd053368056f562c58200fb41027b0.png" alt="image"></p>
<p>Crop the image using the photo editor and save your changes.</p>
-<p><img class="img-responsive" src="/help/tutorials/assets/b3eece28e8db67f1024af42055f0f24ed5e81ba622aca8cac576ccf5930e.png" alt="image"></p>
+<p><img class="img-responsive" src="/help/en/tutorials/assets/b3eece28e8db67f1024af42055f0f24ed5e81ba622aca8cac576ccf5930e.png" alt="image"></p>
<p>When you load your channel home page, you will first see the cover photo, and your
channel page will fade in as you scroll down.</p>
-<p><img class="img-responsive" src="/help/tutorials/assets/4cf326152797a8ecdf5630e921756f825ee00f8ee464d3ef9fed971d2852.png" alt="image"></p>
+<p><img class="img-responsive" src="/help/en/tutorials/assets/4cf326152797a8ecdf5630e921756f825ee00f8ee464d3ef9fed971d2852.png" alt="image"></p>
<h3 id="Make_a_connection">Make a connection</h3>
-<p>Making connections between channels to share things is what social communications are all about.
+<p>Making connections between channels to share things is what social communications are all about.
Making a connection is simple. If you do not already know how to reach a channel's home
-page, you might try a directory search by opening the <strong>Directory</strong> link from the menu on the right
+page, you might try a directory search by opening the <strong>Directory</strong> link from the menu on the right
side of the top navbar.</p>
-<p><img class="img-responsive" src="/help/tutorials/assets/ef78bc6aa3fafebd46f353514c907b3fdfe019918fc5553bb3f31388a36f.png" alt="image"></p>
+<p><img class="img-responsive" src="/help/en/tutorials/assets/ef78bc6aa3fafebd46f353514c907b3fdfe019918fc5553bb3f31388a36f.png" alt="image"></p>
-<p>You can connect directly from the directory entry using the <strong>Connect</strong> button there,
-or you can open the channel page first and press the <strong>Connect</strong> button below the
+<p>You can connect directly from the directory entry using the <strong>Connect</strong> button there,
+or you can open the channel page first and press the <strong>Connect</strong> button below the
profile photo.</p>
-<p><img class="img-responsive" src="/help/tutorials/assets/75d2927b7ad0d2043d4d3b6ba1364fac8ead173edd39340adaf78be11c9d.png" alt="image"></p>
+<p><img class="img-responsive" src="/help/en/tutorials/assets/75d2927b7ad0d2043d4d3b6ba1364fac8ead173edd39340adaf78be11c9d.png" alt="image"></p>
-<p>After you connect you are immediately taken to the connection editor page, where
+<p>After you connect you are immediately taken to the connection editor page, where
you make some important decisions about what you plan to share with this channel.</p>
-<p><img class="img-responsive" src="/help/tutorials/assets/b334915c03a665493915598c69c17a87c910a39db2cd3b5292e4623ea4c4.png" alt="image"></p>
+<p><img class="img-responsive" src="/help/en/tutorials/assets/b334915c03a665493915598c69c17a87c910a39db2cd3b5292e4623ea4c4.png" alt="image"></p>
<p>The two important settings are</p>
<ul><li>The individual permissions for the newly connected channel</li>
<li>The privacy group(s) the connection is a member of</li>
-</ul><p>The individual permissions are mostly straightforward, but they can be slightly
+</ul><p>The individual permissions are mostly straightforward, but they can be slightly
unclear at first. For example, <strong>Can view my file storage and photos</strong> does <em>not</em>
-mean that the connected channel will be able to view <em>all</em> of your photos and files!
-It means that you will have the <em>option</em> to share photos and files with that
+mean that the connected channel will be able to view <em>all</em> of your photos and files!
+It means that you will have the <em>option</em> to share photos and files with that
channel. It is perfectly possible for you to allow someone to read your posts but
-disallow them from seeing photos in that post. This kind of unusual situation is,
+disallow them from seeing photos in that post. This kind of unusual situation is,
as they say, not a bug; it is a feature.</p>
<p>Privacy groups allow you to conveniently share items with groups of people. You can
create whatever groups fit your needs by opening the <strong>Add privacy group</strong> link.</p>
-<p><img class="img-responsive" src="/help/tutorials/assets/facb0bdfdecb4c779de9048cd14b417c0d76de17af476be5f296b78d70e9.png" alt="image"></p>
+<p><img class="img-responsive" src="/help/en/tutorials/assets/facb0bdfdecb4c779de9048cd14b417c0d76de17af476be5f296b78d70e9.png" alt="image"></p>
-<p>In this editor, you can switch between the existing privacy groups and see at a
-glance what channels are and are not members of the group. Selecting the icon of
+<p>In this editor, you can switch between the existing privacy groups and see at a
+glance what channels are and are not members of the group. Selecting the icon of
a channel in either box will move it to the in or out of the group.</p>
-<p><img class="img-responsive" src="/help/tutorials/assets/25eaad2435200f72a1dd3a00ba17a76ca6db4c246b3c4fa286b390cae7c8.png" alt="image"></p>
+<p><img class="img-responsive" src="/help/en/tutorials/assets/25eaad2435200f72a1dd3a00ba17a76ca6db4c246b3c4fa286b390cae7c8.png" alt="image"></p>
-<p>When editing an individual channel's settings, you can set their privacy group
+<p>When editing an individual channel's settings, you can set their privacy group
membership using the widget on the left:</p>
-<p><img class="img-responsive" src="/help/tutorials/assets/bdbcf0ffd9004657237f6b7b7863da5a8e39a5bc17d2c67fa160efef2056.png" alt="image"></p>
+<p><img class="img-responsive" src="/help/en/tutorials/assets/bdbcf0ffd9004657237f6b7b7863da5a8e39a5bc17d2c67fa160efef2056.png" alt="image"></p>
<p>Connections are a mutual engagement. The channel you connect can <em>choose</em> to approve your
connection. They will receive a notification that you connected</p>
-<p><img class="img-responsive" src="/help/tutorials/assets/324247680b605fd214fd61aecd8f216fa8f5dfa0f16a04c8e968fdbc43d0.png" alt="image"></p>
+<p><img class="img-responsive" src="/help/en/tutorials/assets/324247680b605fd214fd61aecd8f216fa8f5dfa0f16a04c8e968fdbc43d0.png" alt="image"></p>
-<p>which takes them to their <a href="https://grid.reticu.li/connections"><strong>Connections</strong></a> editor page where
+<p>which takes them to their <a href="https://grid.reticu.li/connections"><strong>Connections</strong></a> editor page where
they can choose to approve the connection or not.</p>
-<p><img class="img-responsive" src="/help/tutorials/assets/e05248fdc5688d6d24bde52432fdc7b39692a094559aa504de99352940b1.png" alt="image"></p>
+<p><img class="img-responsive" src="/help/en/tutorials/assets/e05248fdc5688d6d24bde52432fdc7b39692a094559aa504de99352940b1.png" alt="image"></p>
-<p>After you approve a connection, it is a good idea to open the individual connection
+<p>After you approve a connection, it is a good idea to open the individual connection
editor by pressing the edit button beside the <strong>Delete</strong> button.</p>
-<p><img class="img-responsive" src="/help/tutorials/assets/c4cad3e4c356dd2a227df79bd4dc6d47edf1b66ea243f005b6b452ec366b.png" alt="image"></p>
+<p><img class="img-responsive" src="/help/en/tutorials/assets/c4cad3e4c356dd2a227df79bd4dc6d47edf1b66ea243f005b6b452ec366b.png" alt="image"></p>
+
-
diff --git a/doc/toc.html b/doc/toc.html
deleted file mode 100644
index d2f2654a1..000000000
--- a/doc/toc.html
+++ /dev/null
@@ -1,75 +0,0 @@
-<div class="" id="accordion">
- <div class="">
- <div class="">
- <h3 class="panel-title">
- Tutorials
- </h3>
- </div>
- <div id="tutorials" class="doco-section">
- <div class="flex-column">
- <a class="nav-link" href="/help/tutorials/personal_channel">Personal Channel</a>
- </div>
- </div>
- </div>
- <div class="">
- <div class="">
- <h3 class="panel-title">
- Members
- </h3>
- </div>
- <div id="members" class="doco-section">
- <div class="flex-column">
- <a class="nav-link" href="/help/member/member_guide">Guide</a>
- <a class="nav-link" href="/help/member/bbcode">BBcode Reference</a>
- <a class="nav-link" href="/help/feature/additional/overview">Additional Features</a>
- <a class="nav-link" href="/help/bugs">Reporting Bugs</a>
- <a class="nav-link" href="/help/member/member_faq">FAQ</a>
- </div>
- </div>
- </div>
- <div class="panel">
- <div class="">
- <h3 class="panel-title">
- Administrators
- </h3>
- </div>
- <div id="administrators" class="doco-section">
- <div class="flex-column">
- <a class="nav-link" href="/help/admin/administrator_guide">Guide</a>
- <a class="nav-link" href="/help/admin/hub_snapshots">Hub Snapshots</a>
- <a class="nav-link" href="/help/database">Database</a>
- <a class="nav-link" href="/help/hidden_configs">Extra configs</a>
- </div>
- </div>
- </div>
- <div class="panel">
- <div class="">
- <h3 class="panel-title">
- Developers
- </h3>
- </div>
- <div id="developers" class="doco-section">
- <div class="flex-column">
- <a class="nav-link" href="/help/developer/developer_guide">Guide</a>
- <a class="nav-link" href="/help/developer/covenant">Code of Conduct</a>
- <a class="nav-link" href="/help/developer/zot_protocol">Zot Protocol</a>
- <a class="nav-link" href="/help/developer/api_zot">Zot API</a>
- <a class="nav-link" href="/help/hooklist">Hooks</a>
- </div>
- </div>
- </div>
- <div class="panel">
- <div class="">
- <h3 class="panel-title">
- About
- </h3>
- </div>
- <div id="about" class="doco-section">
- <div class="flex-column">
- <a class="nav-link" href="/help/about/about">About</a>
- <a class="nav-link" href="/help/about/project">Project</a>
- <a class="nav-link" href="/help/about/about_hub">About this hub</a>
- </div>
- </div>
- </div>
-</div>
diff --git a/include/account.php b/include/account.php
index a1fb0f159..884c07389 100644
--- a/include/account.php
+++ b/include/account.php
@@ -4,6 +4,7 @@
* @brief Somme account related functions.
*/
+use Zotlabs\Lib\Config;
use Zotlabs\Lib\Crypto;
require_once('include/config.php');
@@ -83,8 +84,8 @@ function check_account_invite($invite_code) {
$result = array('error' => false, 'message' => '');
// [hilmar ->
- $using_invites = (get_config('system','invitation_only')
- || get_config('system','invitation_also'));
+ $using_invites = (Config::Get('system','invitation_only')
+ || Config::Get('system','invitation_also'));
if($using_invites) {
@@ -118,7 +119,7 @@ function check_account_invite($invite_code) {
function check_account_admin($arr) {
if(is_site_admin())
return true;
- $admin_email = trim(get_config('system','admin_email'));
+ $admin_email = trim(Config::Get('system','admin_email'));
if(strlen($admin_email) && $admin_email === trim($arr['email']))
return true;
return false;
@@ -182,7 +183,7 @@ function create_account_IS_OBSOLETE($arr) {
$roles = ((x($arr,'account_roles')) ? intval($arr['account_roles']) : 0 );
$expires = ((x($arr,'expires')) ? intval($arr['expires']) : NULL_DATE);
- $default_service_class = get_config('system','default_service_class');
+ $default_service_class = Config::Get('system','default_service_class');
if($default_service_class === false)
$default_service_class = '';
@@ -209,10 +210,10 @@ function create_account_IS_OBSOLETE($arr) {
// Ensure that there is a host keypair.
- if ((! get_config('system', 'pubkey')) && (! get_config('system', 'prvkey'))) {
+ if ((! Config::Get('system', 'pubkey')) && (! Config::Get('system', 'prvkey'))) {
$hostkey = Crypto::new_keypair(4096);
- set_config('system', 'pubkey', $hostkey['pubkey']);
- set_config('system', 'prvkey', $hostkey['prvkey']);
+ Config::Set('system', 'pubkey', $hostkey['pubkey']);
+ Config::Set('system', 'prvkey', $hostkey['prvkey']);
}
$invite_result = check_account_invite($invite_code);
@@ -319,7 +320,7 @@ function create_account_from_register($arr) {
// account
$expires = NULL_DATE;
- $default_service_class = get_config('system','default_service_class');
+ $default_service_class = Config::Get('system','default_service_class');
if($default_service_class === false)
$default_service_class = '';
@@ -420,7 +421,7 @@ function verify_email_address($arr) {
$email_msg = replace_macros(get_intltext_template('register_verify_member.tpl'),
[
- '$sitename' => get_config('system','sitename'),
+ '$sitename' => Config::Get('system','sitename'),
'$siteurl' => z_root(),
'$email' => $arr['email'],
'$uid' => 1,
@@ -432,7 +433,7 @@ function verify_email_address($arr) {
$res = z_mail(
[
'toEmail' => $arr['email'],
- 'messageSubject' => sprintf( t('Registration confirmation for %s'), get_config('system','sitename')),
+ 'messageSubject' => sprintf( t('Registration confirmation for %s'), Config::Get('system','sitename')),
'textVersion' => $email_msg,
]
);
@@ -488,7 +489,7 @@ function verify_email_addressNOP($arr) {
$email_msg = replace_macros(get_intltext_template('register_verify_member.tpl'),
[
- '$sitename' => get_config('system','sitename'),
+ '$sitename' => Config::Get('system','sitename'),
'$siteurl' => z_root(),
'$email' => $arr['email'],
'$uid' => $account['account_id'],
@@ -500,7 +501,7 @@ function verify_email_addressNOP($arr) {
$res = z_mail(
[
'toEmail' => $arr['email'],
- 'messageSubject' => sprintf( t('Registration confirmation for %s'), get_config('system','sitename')),
+ 'messageSubject' => sprintf( t('Registration confirmation for %s'), Config::Get('system','sitename')),
'textVersion' => $email_msg,
]
);
@@ -564,7 +565,7 @@ function send_reg_approval_email($arr) {
push_lang('en');
$email_msg = replace_macros(get_intltext_template('register_verify_eml.tpl'), array(
- '$sitename' => get_config('system','sitename'),
+ '$sitename' => Config::Get('system','sitename'),
'$siteurl' => z_root(),
'$email' => $arr['email'],
'$uid' => $arr['account']['account_id'],
@@ -575,7 +576,7 @@ function send_reg_approval_email($arr) {
$res = z_mail(
[
'toEmail' => $admin['email'],
- 'messageSubject' => sprintf( t('Registration request at %s'), get_config('system','sitename')),
+ 'messageSubject' => sprintf( t('Registration request at %s'), Config::Get('system','sitename')),
'textVersion' => $email_msg,
]
);
@@ -594,7 +595,7 @@ function send_reg_approval_email($arr) {
function send_register_success_email($email,$password) {
$email_msg = replace_macros(get_intltext_template('register_open_eml.tpl'), array(
- '$sitename' => get_config('system','sitename'),
+ '$sitename' => Config::Get('system','sitename'),
'$siteurl' => z_root(),
'$email' => $email,
'$password' => t('your registration password'),
@@ -603,7 +604,7 @@ function send_register_success_email($email,$password) {
$res = z_mail(
[
'toEmail' => $email,
- 'messageSubject' => sprintf( t('Registration details for %s'), get_config('system','sitename')),
+ 'messageSubject' => sprintf( t('Registration details for %s'), Config::Get('system','sitename')),
'textVersion' => $email_msg,
]
);
@@ -681,7 +682,7 @@ function account_allow($hash) {
$email_tpl = get_intltext_template("register_open_eml.tpl");
$email_msg = replace_macros($email_tpl, array(
- '$sitename' => get_config('system','sitename'),
+ '$sitename' => Config::Get('system','sitename'),
'$siteurl' => z_root(),
'$username' => $account[0]['account_email'],
'$email' => $account[0]['account_email'],
@@ -692,14 +693,14 @@ function account_allow($hash) {
$res = z_mail(
[
'toEmail' => $account[0]['account_email'],
- 'messageSubject' => sprintf( t('Registration details for %s'), get_config('system','sitename')),
+ 'messageSubject' => sprintf( t('Registration details for %s'), Config::Get('system','sitename')),
'textVersion' => $email_msg,
]
);
pop_lang();
- if(get_config('system', 'auto_channel_create', 1))
+ if(Config::Get('system', 'auto_channel_create', 1))
auto_channel_create($register[0]['uid']);
if ($res) {
@@ -844,7 +845,7 @@ function account_approve($hash) {
if(! $account)
return $ret;
- if(get_config('system','auto_channel_create'))
+ if(Config::Get('system','auto_channel_create'))
auto_channel_create($register[0]['reg_uid']);
else {
$_SESSION['login_return_url'] = 'new_channel';
@@ -992,7 +993,7 @@ function downgrade_accounts() {
if(! $r)
return;
- $basic = get_config('system','default_service_class');
+ $basic = Config::Get('system','default_service_class');
foreach($r as $rr) {
if(($basic) && ($rr['account_service_class']) && ($rr['account_service_class'] != $basic)) {
@@ -1135,7 +1136,7 @@ function service_class_fetch($uid, $property) {
if(! x($service_class))
return false; // everything is allowed
- $arr = get_config('service_class', $service_class);
+ $arr = Config::Get('service_class', $service_class);
if(! is_array($arr) || (! count($arr)))
return false;
@@ -1169,7 +1170,7 @@ function account_service_class_fetch($aid, $property) {
if(! isset($service_class))
return false; // everything is allowed
- $arr = get_config('service_class', $service_class);
+ $arr = Config::Get('service_class', $service_class);
if(! is_array($arr) || (! count($arr)))
return false;
@@ -1179,7 +1180,7 @@ function account_service_class_fetch($aid, $property) {
function upgrade_link($bbcode = false) {
- $l = get_config('service_class', 'upgrade_link');
+ $l = Config::Get('service_class', 'upgrade_link');
if(! $l)
return '';
if($bbcode)
@@ -1208,7 +1209,7 @@ function get_account_techlevel($account_id = 0) {
function zar_log($msg='') {
- if(get_config('system', 'register_logfile', 0)) {
+ if(Config::Get('system', 'register_logfile', 0)) {
file_put_contents('./zar.log',
date('Y-m-d_H:i:s') . ' ' . $msg . ', ip: § ' . $_SERVER['REMOTE_ADDR'] . ' §' . "\n", FILE_APPEND);
}
diff --git a/include/api_zot.php b/include/api_zot.php
index 22692b962..56cec005d 100644
--- a/include/api_zot.php
+++ b/include/api_zot.php
@@ -546,6 +546,7 @@
return false;
}
+
logger('api_red_item_store: REQUEST ' . print_r($_REQUEST,true));
logger('api_red_item_store: FILES ' . print_r($_FILES,true));
@@ -561,7 +562,7 @@
$mod = new Zotlabs\Module\Wall_attach();
$media = $mod->post();
if($media)
- $_REQUEST['body'] = $media . "\n\n" . $_REQUEST['body'];
+ $_REQUEST['body'] = $media . "\n" . $_REQUEST['body'];
}
$mod = new Zotlabs\Module\Item();
diff --git a/include/attach.php b/include/attach.php
index e5a2900b3..449721793 100644
--- a/include/attach.php
+++ b/include/attach.php
@@ -11,11 +11,12 @@
* @todo Also an 'append' option to the storage function might be a useful addition.
*/
-use Zotlabs\Lib\Libsync;
-use Zotlabs\Lib\Activity;
use Zotlabs\Access\PermissionLimits;
use Zotlabs\Daemon\Master;
use Zotlabs\Lib\AccessList;
+use Zotlabs\Lib\Activity;
+use Zotlabs\Lib\Config;
+use Zotlabs\Lib\Libsync;
require_once('include/permissions.php');
require_once('include/security.php');
@@ -112,7 +113,6 @@ function z_mime_content_type($filename) {
'odf' => 'application/vnd.oasis.opendocument.formula',
'odi' => 'application/vnd.oasis.opendocument.image',
'odm' => 'application/vnd.oasis.opendocument.text-master',
- 'odb' => 'application/vnd.oasis.opendocument.base',
'odb' => 'application/vnd.oasis.opendocument.database',
'ott' => 'application/vnd.oasis.opendocument.text-template',
'ots' => 'application/vnd.oasis.opendocument.spreadsheet-template',
@@ -801,7 +801,7 @@ function attach_store($channel, $observer_hash, $options = '', $arr = null) {
// Check storage limits
if($options !== 'update') {
- $maxfilesize = get_config('system','maxfilesize');
+ $maxfilesize = Config::Get('system','maxfilesize');
if(($maxfilesize) && ($filesize > $maxfilesize)) {
logger('quota_exceeded');
@@ -2466,8 +2466,8 @@ function copy_folder_to_cloudfiles($channel, $observer_hash, $srcpath, $cloudpat
* @param int $channel_id
* @param int $resource_id
* @param string $new_folder_hash
- * @param (optional) string $newname
- * @param (optional) boolean $recurse
+ * @param string (optional) $newname
+ * @param boolean (optional) $recurse
* @return array Associative array with:
* * \e boolean \b success
* * \e string \b resource_id
@@ -2667,8 +2667,8 @@ function attach_move($channel_id, $resource_id, $new_folder_hash, $newname = '',
* @param int $channel_id
* @param int $resource_id
* @param string $new_folder_hash
- * @param (optional) string $newname
- * @param (optional) boolean $recurse
+ * @param string (optional) $newname
+ * @param boolean (optional) $recurse
* @return array Associative array with:
* * \e boolean \b success
* * \e string \b resource_id of the new resource
@@ -2981,11 +2981,17 @@ function save_chunk($channel,$start,$end,$len) {
$result = [];
- $tmp_path = $_FILES['files']['tmp_name'];
+ $file = $_FILES['files'] ?? $_FILES['userfile'] ?? [];
+
+ if (!$file) {
+ return $result;
+ }
+
+ $tmp_path = $file['tmp_name'];
$new_base = 'store/[data]/' . $channel['channel_address'] . '/tmp';
os_mkdir($new_base,STORAGE_DEFAULT_PERMISSIONS,true);
- $new_path = $new_base . '/' . $_FILES['files']['name'];
+ $new_path = $new_base . '/' . $file['name'];
if(file_exists($new_path) && intval($start) === 0) {
$result['partial'] = true;
@@ -3007,8 +3013,8 @@ function save_chunk($channel,$start,$end,$len) {
}
if(($len - 1) == $end) {
unlink($tmp_path);
- $result['name'] = $_FILES['files']['name'];
- $result['type'] = $_FILES['files']['type'];
+ $result['name'] = $file['name'];
+ $result['type'] = $file['type'];
$result['tmp_name'] = $new_path;
$result['error'] = 0;
$result['size'] = $len;
diff --git a/include/auth.php b/include/auth.php
index 5956b89e2..1fc2cc556 100644
--- a/include/auth.php
+++ b/include/auth.php
@@ -9,8 +9,9 @@
* Also provides a function for OpenID identiy matching.
*/
-use Zotlabs\Lib\Libzot;
use Zotlabs\Lib\AConfig;
+use Zotlabs\Lib\Config;
+use Zotlabs\Lib\Libzot;
use Zotlabs\Module\Totp_check;
require_once('include/api_auth.php');
@@ -43,8 +44,8 @@ function account_verify_password($login, $pass) {
$ret = [ 'account' => null, 'channel' => null, 'xchan' => null ];
$login = punify($login);
- $email_verify = get_config('system', 'verify_email');
- $register_policy = get_config('system', 'register_policy');
+ $email_verify = Config::Get('system', 'verify_email');
+ $register_policy = Config::Get('system', 'register_policy');
if(!$login || !$pass)
return null;
@@ -170,11 +171,45 @@ function account_verify_password($login, $pass) {
* Error message to display for failed login.
*/
function log_failed_login($errormsg) {
- $authlog = get_config('system', 'authlog');
+ $authlog = Config::Get('system', 'authlog');
if ($authlog)
@file_put_contents($authlog, datetime_convert() . ':' . session_id() . ' ' . $errormsg . PHP_EOL, FILE_APPEND);
}
+
+/**
+ * Determines if checking for multifactor authentication needs to be checked.
+ *
+ * Checks that multi factor authentication is enabled for the given account_id,
+ * and whether it's already authenticated or not.
+ *
+ * Some modules needs to be excluded from the mfa checks for various reasons:
+ *
+ * - `totp_check` is used by the mfa module itself.
+ * - `dav` provides WebDAV access, and has no way of providing a mfa code.
+ * - `cdav` is accessed both via CardDAV which has the same limitations as
+ * the `dav` module, but may also be accessed via a web browser over http.
+ * We only exclude it if it's not being accessed via a web browser.
+ *
+ * @param int $account_id The id of the account we're verifying.
+ * @param string $module The requested module.
+ * @param string $arg The first arg passed to the module (or empty if none.)
+ *
+ * @return bool `true` if mfa status needs to be checked, `false` otherwise.
+ */
+function requires_mfa_check(int $account_id, string $module, string $arg): bool {
+ if (in_array($module, ['totp_check', 'dav'], true)) {
+ return false;
+ }
+
+ if ($module === 'cdav' && !in_array($arg, ['addressbook', 'calendar'], true)) {
+ return false;
+ }
+
+ $multiFactor = AConfig::Get($account_id, 'system', 'mfa_enabled');
+ return $multiFactor && empty($_SESSION['2FA_VERIFIED']);
+}
+
/**
* Inline - not a function
* look for auth parameters or re-validate an existing session
@@ -208,10 +243,10 @@ if((isset($_SESSION)) && (x($_SESSION, 'authenticated')) &&
if(x($_SESSION, 'visitor_id') && (! x($_SESSION, 'uid'))) {
// if our authenticated guest is allowed to take control of the admin channel, make it so.
- $admins = get_config('system', 'remote_admin');
+ $admins = Config::Get('system', 'remote_admin');
if($admins && is_array($admins) && in_array($_SESSION['visitor_id'], $admins)) {
$x = q("select * from account where account_email = '%s' and account_email != '' and ( account_flags & %d )>0 limit 1",
- dbesc(get_config('system', 'admin_email')),
+ dbesc(Config::Get('system', 'admin_email')),
intval(ACCOUNT_ROLE_ADMIN)
);
if($x) {
@@ -266,8 +301,7 @@ if((isset($_SESSION)) && (x($_SESSION, 'authenticated')) &&
$login_refresh = true;
}
- $multiFactor = AConfig::Get(App::$account['account_id'], 'system', 'mfa_enabled');
- if ($multiFactor && empty($_SESSION['2FA_VERIFIED']) && App::$module !== 'totp_check') {
+ if (requires_mfa_check(App::$account['account_id'], App::$module, argv(1))) {
$o = new Totp_check;
echo $o->get();
killme();
@@ -328,7 +362,7 @@ else {
$error = 'authenticate: failed login attempt: ' . notags(trim($username)) . ' from IP ' . $_SERVER['REMOTE_ADDR'];
logger($error);
// Also log failed logins to a separate auth log to reduce overhead for server side intrusion prevention
- $authlog = get_config('system', 'authlog');
+ $authlog = Config::Get('system', 'authlog');
if ($authlog)
@file_put_contents($authlog, datetime_convert() . ':' . session_id() . ' ' . $error . "\n", FILE_APPEND);
notice( t('Login failed.') . EOL );
diff --git a/include/bbcode.php b/include/bbcode.php
index d7ed3a243..15a75ce3f 100644
--- a/include/bbcode.php
+++ b/include/bbcode.php
@@ -4,8 +4,9 @@
* @brief BBCode related functions for parsing, etc.
*/
-use Zotlabs\Lib\SvgSanitizer;
+use Zotlabs\Lib\Config;
use Zotlabs\Lib\Libzot;
+use Zotlabs\Lib\SvgSanitizer;
require_once('include/oembed.php');
require_once('include/event.php');
@@ -111,7 +112,7 @@ function tryzrlvideo($match) {
if($zrl)
$link = zid($link);
- $static_link = get_config('system','video_default_poster','images/video_poster.jpg');
+ $static_link = Config::Get('system','video_default_poster','images/video_poster.jpg');
if($static_link)
$poster = 'poster="' . escape_tags($static_link) . '" ' ;
@@ -1142,7 +1143,7 @@ function parseIdentityAwareHTML($Text) {
$Text = str_replace('[observer.photo]','', $Text);
}
- $Text = str_replace(array('[baseurl]','[sitename]'),array(z_root(),get_config('system','sitename')),$Text);
+ $Text = str_replace(array('[baseurl]','[sitename]'),array(z_root(),Config::Get('system','sitename')),$Text);
// Unhide all [noparse] contained bbtags unspacefying them
@@ -1249,7 +1250,7 @@ function bbcode($text, $options = []) {
$text = $x['body'];
$saved_images = $x['images'];
- $text = str_replace(array('[baseurl]','[sitename]'),array(z_root(),get_config('system','sitename')),$text);
+ $text = str_replace(array('[baseurl]','[sitename]'),array(z_root(),Config::Get('system','sitename')),$text);
// Replace any html brackets with HTML Entities to prevent executing HTML or script
// Don't use strip_tags here because it breaks [url] search by replacing & with amp
@@ -1407,7 +1408,7 @@ function bbcode($text, $options = []) {
}
// Check for strike-through text
if (strpos($text,'[s]') !== false) {
- $text = preg_replace("(\[s\](.*?)\[\/s\])ism", '<span style="text-decoration: line-through;">$1</span>', $text);
+ $text = preg_replace("(\[s\](.*?)\[\/s\])ism", '<del>$1</del>', $text);
}
// Check for over-line text
if (strpos($text,'[o]') !== false) {
@@ -1744,10 +1745,8 @@ function bbcode($text, $options = []) {
// oembed tag
if (strpos($text,'[/embed]') !== false) {
+ $text = str_replace(["[/embed]\r", "[/embed]\n"], '[/embed]', $text);
$text = oembed_bbcode2html($text);
-
- // Avoid triple linefeeds through oembed
- $text = str_replace("<br style='clear:left'></span><br /><br />", "<br style='clear:left'></span>", $text);
}
// If we found an event earlier, strip out all the event code and replace with a reformatted version.
diff --git a/include/channel.php b/include/channel.php
index a82794bfd..22b5bcde1 100644
--- a/include/channel.php
+++ b/include/channel.php
@@ -9,6 +9,7 @@ use Zotlabs\Access\PermissionRoles;
use Zotlabs\Access\PermissionLimits;
use Zotlabs\Access\Permissions;
use Zotlabs\Daemon\Master;
+use Zotlabs\Lib\Config;
use Zotlabs\Lib\Crypto;
use Zotlabs\Lib\System;
use Zotlabs\Render\Comanche;
@@ -108,11 +109,11 @@ function create_sys_channel() {
// Ensure that there is a host keypair.
- if ((! get_config('system', 'pubkey')) && (! get_config('system', 'prvkey'))) {
+ if ((! Config::Get('system', 'pubkey')) && (! Config::Get('system', 'prvkey'))) {
require_once('include/crypto.php');
$hostkey = Crypto::new_keypair(4096);
- set_config('system', 'pubkey', $hostkey['pubkey']);
- set_config('system', 'prvkey', $hostkey['prvkey']);
+ Config::Set('system', 'pubkey', $hostkey['pubkey']);
+ Config::Set('system', 'prvkey', $hostkey['prvkey']);
}
create_identity([
@@ -198,8 +199,8 @@ function create_identity($arr) {
$ret = array('success' => false);
- if(! $arr['account_id']) {
- $ret['message'] = t('No account identifier');
+ if(empty($arr['account_id'])) {
+ $ret['message'] = t('No account identifier');
return $ret;
}
$ret = identity_check_service_class($arr['account_id']);
@@ -357,10 +358,10 @@ function create_identity($arr) {
'hubloc_primary' => intval($primary),
'hubloc_url' => z_root(),
'hubloc_url_sig' => Libzot::sign(z_root(),$ret['channel']['channel_prvkey']),
- 'hubloc_site_id' => Libzot::make_xchan_hash(z_root(),get_config('system','pubkey')),
+ 'hubloc_site_id' => Libzot::make_xchan_hash(z_root(),Config::Get('system','pubkey')),
'hubloc_host' => App::get_hostname(),
'hubloc_callback' => z_root() . '/zot',
- 'hubloc_sitekey' => get_config('system','pubkey'),
+ 'hubloc_sitekey' => Config::Get('system','pubkey'),
'hubloc_network' => 'zot6',
'hubloc_updated' => datetime_convert()
]
@@ -493,7 +494,7 @@ function create_identity($arr) {
// otherwise it could get annoying. Don't make this list too big
// or it will impact registration time.
- $accts = get_config('system','auto_follow');
+ $accts = Config::Get('system','auto_follow');
if(($accts) && (! $total_identities)) {
if(! is_array($accts))
$accts = array($accts);
@@ -1591,7 +1592,7 @@ function profile_sidebar($profile, $block = 0, $show_connect = true, $details =
$reddress = true;
$connect_url = '';
$connect = '';
- $default_cover = get_config('system', 'default_cover_photo', 'hubzilla');
+ $default_cover = Config::Get('system', 'default_cover_photo', 'hubzilla');
$default_cover_url = z_root() . '/images/default_cover_photos/' . $default_cover . '/425.png';
@@ -2040,7 +2041,7 @@ function get_theme_uid() {
* @return string with path to profile photo
*/
function get_default_profile_photo($size = 300) {
- $scheme = get_config('system','default_profile_photo');
+ $scheme = Config::Get('system','default_profile_photo');
if(! $scheme)
$scheme = 'rainbow_man';
@@ -2171,7 +2172,7 @@ function is_public_profile() {
if(! local_channel())
return false;
- if(intval(get_config('system','block_public')))
+ if(intval(Config::Get('system','block_public')))
return false;
$channel = App::get_channel();
@@ -2186,7 +2187,7 @@ function is_public_profile() {
function get_profile_fields_basic($filter = 0) {
- $profile_fields_basic = (($filter == 0) ? get_config('system','profile_fields_basic') : null);
+ $profile_fields_basic = (($filter == 0) ? Config::Get('system','profile_fields_basic') : null);
if(! $profile_fields_basic)
$profile_fields_basic = array('fullname','pdesc','chandesc','comms','gender','dob','dob_tz','region','country_name','marital','sexual','homepage','hometown','keywords','about','contact');
@@ -2202,7 +2203,7 @@ function get_profile_fields_basic($filter = 0) {
function get_profile_fields_advanced($filter = 0) {
$basic = get_profile_fields_basic($filter);
- $profile_fields_advanced = (($filter == 0) ? get_config('system','profile_fields_advanced') : null);
+ $profile_fields_advanced = (($filter == 0) ? Config::Get('system','profile_fields_advanced') : null);
if(! $profile_fields_advanced)
$profile_fields_advanced = array('address','locality','postal_code','partner','howlong','politic','religion','likes','dislikes','interest','channels','music','book','film','tv','romance','employment','education');
@@ -2423,7 +2424,7 @@ function get_zcard($channel, $observer_hash = '', $args = array()) {
$cover = $r[0];
$cover['href'] = z_root() . '/photo/' . $r[0]['resource_id'] . '-' . $r[0]['imgscale'];
} else {
- $default_cover = get_config('system', 'default_cover_photo', 'hubzilla');
+ $default_cover = Config::Get('system', 'default_cover_photo', 'hubzilla');
$cover = [ 'href' => z_root() . '/images/default_cover_photos/' . $default_cover . '/' . $cover_width . '.png' ];
}
@@ -2500,7 +2501,7 @@ function get_zcard_embed($channel, $observer_hash = '', $args = array()) {
$cover['href'] = z_root() . '/photo/' . $r[0]['resource_id'] . '-' . $r[0]['imgscale'];
}
else {
- $default_cover = get_config('system', 'default_cover_photo', 'hubzilla');
+ $default_cover = Config::Get('system', 'default_cover_photo', 'hubzilla');
$cover = [ 'href' => z_root() . '/images/default_cover_photos/' . $default_cover . '/' . $cover_width . '.png' ];
}
diff --git a/include/cli_startup.php b/include/cli_startup.php
index b9e7d124d..012b29fbf 100644
--- a/include/cli_startup.php
+++ b/include/cli_startup.php
@@ -2,11 +2,13 @@
require_once('boot.php');
+use Zotlabs\Lib\Config;
+
// Everything we need to boot standalone 'background' processes
function cli_startup() {
sys_boot();
- App::set_baseurl(get_config('system','baseurl'));
+ App::set_baseurl(Config::Get('system','baseurl'));
}
diff --git a/include/config.php b/include/config.php
index ec3547a82..4dd40eccf 100644
--- a/include/config.php
+++ b/include/config.php
@@ -31,18 +31,83 @@
use Zotlabs\Lib as Zlib;
+/**
+ * Loads the hub's configuration from database to a cached storage.
+ *
+ * Retrieve a category ($family) of config variables from database to a cached
+ * storage in the global App::$config[$family].
+ *
+ * @param string $family The category of the configuration value
+ *
+ * @return Nothing
+ *
+ * @deprecated
+ * This function is deprecated, use Zotlabs\Lib\Config::Load
+ * instead.
+ */
function load_config($family) {
Zlib\Config::Load($family);
}
+/**
+ * Get a particular config variable given the category name ($family)
+ * and a key.
+ *
+ * Get a particular config variable from the given category ($family) and the
+ * $key from a cached storage in App::$config[$family]. If a key is found in the
+ * DB but does not exist in local config cache, pull it into the cache so we
+ * do not have to hit the DB again for this item.
+ *
+ * Returns false if not set.
+ *
+ * @param string $family The category of the configuration value
+ * @param string $key The configuration key to query
+ * @param string $default (optional) default false
+ *
+ * @return mixed|false Return value or false on error or if not set
+ *
+ * @deprecated
+ * This function is deprecated, use Zotlabs\Lib\Config::Get
+ * instead.
+ */
function get_config($family, $key, $default = false) {
return Zlib\Config::Get($family,$key,$default);
}
+/**
+ * Sets a configuration value for the hub.
+ *
+ * Stores a config value ($value) in the category ($family) under the key ($key).
+ *
+ * @param string $family The category of the configuration value
+ * @param string $key The configuration key to set
+ * @param mixed $value The value to store in the configuration
+ *
+ * @return mixed|false Return the set value, or false if the database update failed
+ *
+ * @deprecated
+ * This function is deprecated, use Zotlabs\Lib\Config::Set
+ * instead.
+ */
function set_config($family, $key, $value) {
return Zlib\Config::Set($family,$key,$value);
}
+/**
+ * Deletes the given key from the hub's configuration database.
+ *
+ * Removes the configured value from the stored cache in App::$config[$family]
+ * and removes it from the database.
+ *
+ * @param string $family The category of the configuration value
+ * @param string $key The configuration key to delete
+ *
+ * @return mixed
+ *
+ * @deprecated
+ * This function is deprecated, use Zotlabs\Lib\Config::Delete
+ * instead.
+ */
function del_config($family, $key) {
return Zlib\Config::Delete($family,$key);
}
@@ -55,8 +120,8 @@ function get_pconfig($uid, $family, $key, $default = false) {
return Zlib\PConfig::Get($uid,$family,$key,$default);
}
-function set_pconfig($uid, $family, $key, $value) {
- return Zlib\PConfig::Set($uid,$family,$key,$value);
+function set_pconfig($uid, $family, $key, $value, $updated = NULL) {
+ return Zlib\PConfig::Set($uid, $family, $key, $value, $updated);
}
function del_pconfig($uid, $family, $key, $updated = NULL) {
diff --git a/include/connections.php b/include/connections.php
index 9a6ee7d8d..efc531171 100644
--- a/include/connections.php
+++ b/include/connections.php
@@ -1,6 +1,7 @@
<?php /** @file */
use Zotlabs\Daemon\Master;
+use Zotlabs\Lib\Config;
function abook_store_lowlevel($arr) {
@@ -67,6 +68,14 @@ function rconnect_url($channel_id,$xchan) {
}
+/**
+ * @brief returns deliverable xchans for a channel.
+ *
+ * @param intval $channel_id
+ * @param array $filter (optional)
+ * @param boolean $flatten (optional)
+ */
+
function deliverable_abook_xchans($channel_id, $filter = [], $flatten = true) {
$filter_sql = '';
@@ -238,7 +247,7 @@ function abook_toggle_flag($abook,$flag) {
function mark_orphan_hubsxchans() {
- $dirmode = intval(get_config('system','directory_mode'));
+ $dirmode = intval(Config::Get('system','directory_mode'));
if($dirmode == DIRECTORY_MODE_NORMAL)
return;
@@ -511,8 +520,8 @@ function remove_abook_items($channel_id, $xchan_hash) {
function random_profile() {
$randfunc = db_getfunc('rand');
- $checkrandom = get_config('randprofile','check'); // False by default
- $retryrandom = intval(get_config('randprofile','retry'));
+ $checkrandom = Config::Get('randprofile','check'); // False by default
+ $retryrandom = intval(Config::Get('randprofile','retry'));
if($retryrandom == 0) $retryrandom = 5;
for($i = 0; $i < $retryrandom; $i++) {
diff --git a/include/contact_widgets.php b/include/contact_widgets.php
index e3fbc1057..84f688d36 100644
--- a/include/contact_widgets.php
+++ b/include/contact_widgets.php
@@ -1,11 +1,12 @@
<?php /** @file */
use Zotlabs\Lib\Cache;
+use Zotlabs\Lib\Config;
use Zotlabs\Daemon\Master;
function findpeople_widget() {
- if(get_config('system','invitation_only')) {
+ if(Config::Get('system','invitation_only')) {
$x = get_pconfig(local_channel(),'system','invites_remaining');
if($x || is_site_admin()) {
App::$page['aside'] .= '<div class="side-link" id="side-invite-remain">'
diff --git a/include/conversation.php b/include/conversation.php
index 79fe12d54..c631d53a2 100644
--- a/include/conversation.php
+++ b/include/conversation.php
@@ -1,7 +1,8 @@
<?php /** @file */
-use Zotlabs\Lib\Apps;
use Zotlabs\Lib\Activity;
+use Zotlabs\Lib\Apps;
+use Zotlabs\Lib\Config;
require_once('include/items.php');
@@ -1182,6 +1183,7 @@ function hz_status_editor($x, $popup = false) {
'$modalerroralbum' => t('Error getting album'),
'$nocomment_enabled' => t('Comments enabled'),
'$nocomment_disabled' => t('Comments disabled'),
+ '$confirmdelete' => t('Confirm delete'),
'$auto_save_draft' => $feature_auto_save_draft,
'$reset' => $reset,
'$popup' => $popup
@@ -1262,7 +1264,7 @@ function hz_status_editor($x, $popup = false) {
'$poll_option_label' => t('Option'),
'$poll_add_option_label' => t('Add option'),
'$poll_expire_unit_label' => [t('Minutes'), t('Hours'), t('Days')],
- '$multiple_answers' => ['poll_multiple_answers', t("Allow multiple answers"), '', '', [t('No'), t('Yes')]],
+ '$multiple_answers' => ['poll_multiple_answers', t("Allow multiple answers"), '', '', [t('No'), t('Yes')],null,null],
'$consensus' => ((array_key_exists('item',$x)) ? $x['item']['item_consensus'] : 0),
'$nocommenttitle' => t('Disable comments'),
'$nocommenttitlesub' => t('Toggle comments'),
@@ -1336,7 +1338,7 @@ function get_item_children($arr, $parent) {
$children = array();
foreach($arr as $item) {
if($item['id'] != $item['parent']) {
- if(get_config('system','thread_allow')) {
+ if(Config::Get('system','thread_allow')) {
// Fallback to parent_mid if thr_parent is not set
$thr_parent = $item['thr_parent'];
if($thr_parent == '')
diff --git a/include/crypto.php b/include/crypto.php
index 40e68a4e7..4d50310fb 100644
--- a/include/crypto.php
+++ b/include/crypto.php
@@ -1,5 +1,7 @@
<?php /** @file */
+use Zotlabs\Lib\Config;
+
require_once('library/ASNValue.class.php');
require_once('library/asn1.php');
@@ -282,7 +284,7 @@ function new_keypair($bits) {
'encrypt_key' => false
);
- $conf = get_config('system','openssl_conf_file');
+ $conf = Config::Get('system','openssl_conf_file');
if($conf)
$openssl_options['config'] = $conf;
@@ -460,12 +462,12 @@ function convert_salmon_key($key) {
function z_obscure($s) {
- return json_encode(crypto_encapsulate($s,get_config('system','pubkey')));
+ return json_encode(crypto_encapsulate($s,Config::Get('system','pubkey')));
}
function z_unobscure($s) {
if(strpos($s,"{\"") !== 0)
return $s;
- return crypto_unencapsulate(json_decode($s,true),get_config('system','prvkey'));
+ return crypto_unencapsulate(json_decode($s,true),Config::Get('system','prvkey'));
}
diff --git a/include/event.php b/include/event.php
index 701f3c330..f8511cbe2 100644
--- a/include/event.php
+++ b/include/event.php
@@ -8,6 +8,7 @@
use Sabre\VObject;
use Zotlabs\Lib\Activity;
+use Zotlabs\Lib\Config;
use Zotlabs\Lib\Libsync;
use Zotlabs\Access\AccessList;
@@ -237,7 +238,7 @@ function ical_wrapper($ev) {
$o .= "BEGIN:VCALENDAR";
$o .= "\r\nVERSION:2.0";
$o .= "\r\nMETHOD:PUBLISH";
- $o .= "\r\nPRODID:-//" . get_config('system','sitename') . "//" . Zotlabs\Lib\System::get_platform_name() . "//" . strtoupper(App::$language). "\r\n";
+ $o .= "\r\nPRODID:-//" . Config::Get('system','sitename') . "//" . Zotlabs\Lib\System::get_platform_name() . "//" . strtoupper(App::$language). "\r\n";
if(array_key_exists('dtstart', $ev))
$o .= format_event_ical($ev);
else {
@@ -271,9 +272,9 @@ function format_event_ical($ev) {
if($ev['adjust']) {
if($ev['dtstart'])
- $o .= "\r\nDTSTART$tzid:" . datetime_convert($tz,'UTC', $ev['dtstart'],'Ymd\\THis\\Z');
+ $o .= "\r\nDTSTART$tzid:" . datetime_convert('UTC', $tz, $ev['dtstart'],'Ymd\\THis');
if($ev['dtend'] && ! $ev['nofinish'])
- $o .= "\r\nDTEND$tzid:" . datetime_convert($tz,'UTC', $ev['dtend'],'Ymd\\THis\\Z');
+ $o .= "\r\nDTEND$tzid:" . datetime_convert('UTC', $tz, $ev['dtend'],'Ymd\\THis');
}
else {
if($ev['dtstart'])
@@ -796,7 +797,7 @@ function parse_event_object($event_object_json) {
$tz = $object['timezone'] ?? 'UTC';
$ev['summary'] = $object['summary'] ?? $object['name'] ?? '';
- $ev['description'] = html2bbcode($content['content']) ?? '';
+ $ev['description'] = html2bbcode($object['content']) ?? '';
$ev['dtstart'] = $object['startTime'] ? datetime_convert('UTC', 'UTC', $object['startTime']) : '';
$ev['dtend'] = $object['endTime'] ? datetime_convert('UTC', 'UTC', $object['endTime']) : $ev['dtstart'];
$ev['location'] = $object['location']['name'] ?? '';
diff --git a/include/features.php b/include/features.php
index e57859aa8..d527f60e6 100644
--- a/include/features.php
+++ b/include/features.php
@@ -4,17 +4,15 @@
* Features management
*/
-
-
-
+use Zotlabs\Lib\Config;
function feature_enabled($uid,$feature) {
- $x = get_config('feature_lock',$feature);
+ $x = Config::Get('feature_lock',$feature);
if($x === false) {
$x = get_pconfig($uid,'feature',$feature);
if($x === false) {
- $x = get_config('feature',$feature);
+ $x = Config::Get('feature',$feature);
if($x === false)
$x = get_feature_default($feature);
}
@@ -38,7 +36,7 @@ function get_feature_default($feature) {
function feature_level($feature,$def) {
- $x = get_config('feature_level',$feature);
+ $x = Config::Get('feature_level',$feature);
if($x !== false)
return intval($x);
return $def;
@@ -86,7 +84,7 @@ function get_features($filtered = true, $level = (-1)) {
t('Start calendar week on Monday'),
t('Default is Sunday'),
false,
- get_config('feature_lock','cal_first_day')
+ Config::Get('feature_lock','cal_first_day')
],
[
@@ -94,7 +92,7 @@ function get_features($filtered = true, $level = (-1)) {
t('Event Timezone Selection'),
t('Allow event creation in timezones other than your own.'),
false,
- get_config('feature_lock','event_tz_select'),
+ Config::Get('feature_lock','event_tz_select'),
]
],
@@ -108,7 +106,7 @@ function get_features($filtered = true, $level = (-1)) {
t('Search by Date'),
t('Ability to select posts by date ranges'),
false,
- get_config('feature_lock','archives')
+ Config::Get('feature_lock','archives')
],
[
@@ -116,7 +114,7 @@ function get_features($filtered = true, $level = (-1)) {
t('Tag Cloud'),
t('Provide a personal tag cloud on your channel page'),
false,
- get_config('feature_lock','tagadelic'),
+ Config::Get('feature_lock','tagadelic'),
],
[
@@ -124,7 +122,7 @@ function get_features($filtered = true, $level = (-1)) {
t('Use blog/list mode'),
t('Comments will be displayed separately'),
false,
- get_config('feature_lock','channel_list_mode'),
+ Config::Get('feature_lock','channel_list_mode'),
]
],
@@ -137,7 +135,7 @@ function get_features($filtered = true, $level = (-1)) {
t('Connection Filtering'),
t('Filter incoming posts from connections based on keywords/content'),
false,
- get_config('feature_lock','connfilter')
+ Config::Get('feature_lock','connfilter')
]
],
@@ -150,7 +148,7 @@ function get_features($filtered = true, $level = (-1)) {
t('Community Tagging'),
t('Ability to tag existing posts'),
false,
- get_config('feature_lock','commtag'),
+ Config::Get('feature_lock','commtag'),
],
*/
[
@@ -158,7 +156,7 @@ function get_features($filtered = true, $level = (-1)) {
t('Emoji Reactions'),
t('Add emoji reaction ability to posts'),
true,
- get_config('feature_lock','emojis'),
+ Config::Get('feature_lock','emojis'),
],
[
@@ -166,7 +164,7 @@ function get_features($filtered = true, $level = (-1)) {
t('Dislike Posts'),
t('Ability to dislike posts/comments'),
false,
- get_config('feature_lock','dislike'),
+ Config::Get('feature_lock','dislike'),
],
[
@@ -174,7 +172,7 @@ function get_features($filtered = true, $level = (-1)) {
t('Star Posts'),
t('Ability to mark special posts with a star indicator'),
false,
- get_config('feature_lock','star_posts'),
+ Config::Get('feature_lock','star_posts'),
],
[
@@ -182,7 +180,7 @@ function get_features($filtered = true, $level = (-1)) {
t('Reply on comment'),
t('Ability to reply on selected comment'),
false,
- get_config('feature_lock','reply_to'),
+ Config::Get('feature_lock','reply_to'),
]
],
@@ -196,7 +194,7 @@ function get_features($filtered = true, $level = (-1)) {
t('Advanced Directory Search'),
t('Allows creation of complex directory search queries'),
false,
- get_config('feature_lock','advanced_dirsearch'),
+ Config::Get('feature_lock','advanced_dirsearch'),
]
],
@@ -210,7 +208,7 @@ function get_features($filtered = true, $level = (-1)) {
t('Post Categories'),
t('Add categories to your posts'),
false,
- get_config('feature_lock','categories'),
+ Config::Get('feature_lock','categories'),
],
[
@@ -218,7 +216,7 @@ function get_features($filtered = true, $level = (-1)) {
t('Large Photos'),
t('Include large (1024px) photo thumbnails in posts. If not enabled, use small (640px) photo thumbnails'),
false,
- get_config('feature_lock','large_photos'),
+ Config::Get('feature_lock','large_photos'),
],
[
@@ -226,7 +224,7 @@ function get_features($filtered = true, $level = (-1)) {
t('Even More Encryption'),
t('Allow optional encryption of content end-to-end with a shared secret key'),
false,
- get_config('feature_lock','content_encrypt'),
+ Config::Get('feature_lock','content_encrypt'),
],
[
@@ -234,7 +232,7 @@ function get_features($filtered = true, $level = (-1)) {
t('Disable Comments'),
t('Provide the option to disable comments for a post'),
false,
- get_config('feature_lock','disable_comments'),
+ Config::Get('feature_lock','disable_comments'),
],
[
@@ -242,7 +240,7 @@ function get_features($filtered = true, $level = (-1)) {
t('Delayed Posting'),
t('Allow posts to be published at a later date'),
false,
- get_config('feature_lock','delayed_posting'),
+ Config::Get('feature_lock','delayed_posting'),
],
[
@@ -250,7 +248,7 @@ function get_features($filtered = true, $level = (-1)) {
t('Content Expiration'),
t('Remove posts/comments and/or private messages at a future time'),
false,
- get_config('feature_lock','content_expire'),
+ Config::Get('feature_lock','content_expire'),
],
[
@@ -258,7 +256,7 @@ function get_features($filtered = true, $level = (-1)) {
t('Suppress Duplicate Posts/Comments'),
t('Prevent posts with identical content to be published with less than two minutes in between submissions.'),
true,
- get_config('feature_lock','suppress_duplicates'),
+ Config::Get('feature_lock','suppress_duplicates'),
],
[
@@ -266,7 +264,7 @@ function get_features($filtered = true, $level = (-1)) {
t('Auto-save drafts of posts and comments'),
t('Automatically saves post and comment drafts in local browser storage to help prevent accidental loss of compositions'),
true,
- get_config('feature_lock','auto_save_draft'),
+ Config::Get('feature_lock','auto_save_draft'),
]
],
@@ -280,7 +278,7 @@ function get_features($filtered = true, $level = (-1)) {
t('Navigation Channel Select'),
t('Change channels directly from within the navigation dropdown menu'),
false,
- get_config('feature_lock','nav_channel_select'),
+ Config::Get('feature_lock','nav_channel_select'),
]
],
@@ -294,7 +292,7 @@ function get_features($filtered = true, $level = (-1)) {
t('Events Filter'),
t('Ability to display only events'),
false,
- get_config('feature_lock','events_tab')
+ Config::Get('feature_lock','events_tab')
],
[
@@ -302,7 +300,7 @@ function get_features($filtered = true, $level = (-1)) {
t('Polls Filter'),
t('Ability to display only polls'),
false,
- get_config('feature_lock','polls_tab')
+ Config::Get('feature_lock','polls_tab')
],
[
@@ -310,7 +308,7 @@ function get_features($filtered = true, $level = (-1)) {
t('Saved Searches'),
t('Save search terms for re-use'),
false,
- get_config('feature_lock','savedsearch')
+ Config::Get('feature_lock','savedsearch')
],
[
@@ -318,7 +316,7 @@ function get_features($filtered = true, $level = (-1)) {
t('Saved Folders'),
t('Ability to file posts under folders'),
false,
- get_config('feature_lock','filing'),
+ Config::Get('feature_lock','filing'),
],
[
@@ -326,7 +324,7 @@ function get_features($filtered = true, $level = (-1)) {
t('Alternate Stream Order'),
t('Ability to order the stream by last post date, last comment date or unthreaded activities'),
false,
- get_config('feature_lock','order_tab')
+ Config::Get('feature_lock','order_tab')
],
[
@@ -334,7 +332,7 @@ function get_features($filtered = true, $level = (-1)) {
t('Contact Filter'),
t('Ability to display only posts of a selected contact'),
false,
- get_config('feature_lock','name_tab')
+ Config::Get('feature_lock','name_tab')
],
[
@@ -342,7 +340,7 @@ function get_features($filtered = true, $level = (-1)) {
t('Forum Filter'),
t('Ability to display only posts of a specific forum'),
false,
- get_config('feature_lock','forums_tab')
+ Config::Get('feature_lock','forums_tab')
],
[
@@ -350,7 +348,7 @@ function get_features($filtered = true, $level = (-1)) {
t('Personal Posts Filter'),
t('Ability to display only posts that you\'ve interacted on'),
false,
- get_config('feature_lock','personal_tab')
+ Config::Get('feature_lock','personal_tab')
],
[
@@ -358,7 +356,7 @@ function get_features($filtered = true, $level = (-1)) {
t('Use blog/list mode'),
t('Comments will be displayed separately'),
false,
- get_config('feature_lock','network_list_mode'),
+ Config::Get('feature_lock','network_list_mode'),
]
],
@@ -372,7 +370,7 @@ function get_features($filtered = true, $level = (-1)) {
t('Photo Location'),
t('If location data is available on uploaded photos, link this to a map.'),
false,
- get_config('feature_lock','photo_location'),
+ Config::Get('feature_lock','photo_location'),
],
[
@@ -380,7 +378,7 @@ function get_features($filtered = true, $level = (-1)) {
t('Flag Adult Photos'),
t('Provide photo edit option to hide inappropriate photos from default album view'),
false,
- get_config('feature_lock','adult_photo_flagging'),
+ Config::Get('feature_lock','adult_photo_flagging'),
]
],
@@ -394,7 +392,7 @@ function get_features($filtered = true, $level = (-1)) {
t('Advanced Profiles'),
t('Additional profile sections and selections'),
false,
- get_config('feature_lock','advanced_profiles')
+ Config::Get('feature_lock','advanced_profiles')
],
[
@@ -402,7 +400,7 @@ function get_features($filtered = true, $level = (-1)) {
t('Profile Import/Export'),
t('Save and load profile details across sites/channels'),
false,
- get_config('feature_lock','profile_export')
+ Config::Get('feature_lock','profile_export')
],
[
@@ -410,7 +408,7 @@ function get_features($filtered = true, $level = (-1)) {
t('Multiple Profiles'),
t('Ability to create multiple profiles'),
false,
- get_config('feature_lock','multi_profiles')
+ Config::Get('feature_lock','multi_profiles')
]
]
diff --git a/include/feedutils.php b/include/feedutils.php
index f05c15414..a50214746 100644
--- a/include/feedutils.php
+++ b/include/feedutils.php
@@ -4,6 +4,8 @@
* @brief Some functions to work with XML feeds.
*/
+use Zotlabs\Lib\Config;
+
/**
* @brief Return an Atom feed for channel.
*
@@ -1037,7 +1039,7 @@ function consume_feed($xml, $importer, &$contact, $pass = 0) {
- $sys_expire = intval(get_config('system', 'default_expire_days'));
+ $sys_expire = intval(Config::Get('system', 'default_expire_days'));
$chn_expire = intval($importer['channel_expire_days']);
$expire_days = $sys_expire;
@@ -1325,7 +1327,7 @@ function consume_feed($xml, $importer, &$contact, $pass = 0) {
// but save the thread_parent in case we need to refer to it later.
if($importer['channel_system']) {
- if( ! \Zotlabs\Lib\MessageFilter::evaluate($datarray,get_config('system','pubstream_incl'),get_config('system','pubstream_excl'))) {
+ if( ! \Zotlabs\Lib\MessageFilter::evaluate($datarray,Config::Get('system','pubstream_incl'),Config::Get('system','pubstream_excl'))) {
continue;
}
}
@@ -1481,7 +1483,7 @@ function consume_feed($xml, $importer, &$contact, $pass = 0) {
}
if($importer['channel_system']) {
- if( ! \Zotlabs\Lib\MessageFilter::evaluate($datarray,get_config('system','pubstream_incl'),get_config('system','pubstream_excl'))) {
+ if( ! \Zotlabs\Lib\MessageFilter::evaluate($datarray,Config::Get('system','pubstream_incl'),Config::Get('system','pubstream_excl'))) {
continue;
}
}
diff --git a/include/help.php b/include/help.php
index 9e4be57f9..12721a30b 100644
--- a/include/help.php
+++ b/include/help.php
@@ -5,203 +5,6 @@ use CommerceGuys\Intl\Language\LanguageRepository;
require_once('include/items.php');
-/**
- * @brief
- *
- * @param string $path
- * @param string $suffix (optional) default null
- * @return string
- */
-function get_help_fullpath($path, $suffix = null) {
-
- $docroot = (\App::$override_helproot) ? \App::$override_helproot : 'doc/';
- $docroot = (substr($docroot,-1)!='/') ? $docroot .= '/' : $docroot;
-
- // Determine the language and modify the path accordingly
- $x = determine_help_language();
- $lang = $x['language'];
-
- // The English translation is at the root of /doc/. Other languages are in
- // subfolders named by the language code such as "de", "es", etc.
- if($lang !== 'en') {
- $langpath = $lang . '/' . $path;
- } else {
- $langpath = $path;
- }
-
- $newpath = (isset(\App::$override_helpfiles[$langpath])) ? \App::$override_helpfiles[$langpath] : $langpath;
- $newpath = ($newpath == $langpath) ? $docroot . $newpath : $newpath;
-
- if ($suffix) {
- if (file_exists($newpath . $suffix)) {
- return $newpath;
- }
- } elseif (file_exists($newpath . '.md') ||
- file_exists($newpath . '.bb') ||
- file_exists($newpath . '.html')) {
- return $newpath;
- }
-
- $newpath = (isset(\App::$override_helpfiles[$path])) ? \App::$override_helpfiles[$path] : null;
-
- $newpath = (!$newpath) ? $docroot.$path : $newpath;
- return $newpath;
-}
-
-
-/**
- * @brief
- *
- * @param string $tocpath (optional) default false
- * @return string
- */
-function get_help_content($tocpath = false) {
-
- $doctype = 'markdown';
-
- $text = '';
-
- $path = (($tocpath !== false) ? $tocpath : '');
- $docroot = (\App::$override_helproot) ? \App::$override_helproot : 'doc/';
- $docroot = (substr($docroot,-1)!='/') ? $docroot .= '/' : $docroot;
-
- if($tocpath === false && argc() > 1) {
- $path = '';
- for($x = 1; $x < argc(); $x ++) {
- if(strlen($path))
- $path .= '/';
- $path .= argv($x);
- }
- }
-
-
- if($path) {
- $fullpath = get_help_fullpath($path);
- $title = basename($path);
- if(! $tocpath)
- \App::$page['title'] = t('Help:') . ' ' . ucwords(str_replace('-',' ',notags($title)));
-
- // Check that there is a "toc" or "sitetoc" located at the specified path.
- // If there is not, then there was not a translation of the table of contents
- // available and so default back to the English TOC at /doc/toc.{html,bb,md}
- // TODO: This is incompatible with the hierarchical TOC construction
- // defined in /Zotlabs/Widget/Helpindex.php.
- if($tocpath !== false &&
- load_doc_file($fullpath . '.md') === '' &&
- load_doc_file($fullpath . '.bb') === '' &&
- load_doc_file($fullpath . '.html') === ''
- ) {
- $path = $title;
- }
- $fullpath = get_help_fullpath($path);
- $text = load_doc_file($fullpath . '.md');
-
- if(! $text) {
- $text = load_doc_file($fullpath . '.bb');
- if($text)
- $doctype = 'bbcode';
- }
- if(! $text) {
- $text = load_doc_file($fullpath . '.html');
- if($text)
- $doctype = 'html';
- }
- }
-
- if(($tocpath) && (! $text))
- return '';
-
- if($tocpath === false) {
- if(! $text) {
- $path = 'Site';
- $fullpath = get_help_fullpath($path,'.md');
- $text = load_doc_file($fullpath . '.md');
- \App::$page['title'] = t('Help');
- }
- if(! $text) {
- $doctype = 'bbcode';
- $path = 'main';
- $fullpath = get_help_fullpath($path,'.md');
- $text = load_doc_file($fullpath . '.bb');
- goaway('/help/about/about');
- \App::$page['title'] = t('Help');
- }
-
- if(! $text) {
- header($_SERVER["SERVER_PROTOCOL"] . ' 404 ' . t('Not Found'));
- $tpl = get_markup_template("404.tpl");
- return replace_macros($tpl, array(
- '$message' => t('Page not found.')
- ));
- }
- }
-
- if($doctype === 'html')
- $content = parseIdentityAwareHTML($text);
- if($doctype === 'markdown') {
- # escape #include tags
- $text = preg_replace('/#include/ism', '%%include', $text);
- $content = MarkdownExtra::defaultTransform($text);
- $content = preg_replace('/%%include/ism', '#include', $content);
- }
- if($doctype === 'bbcode') {
- require_once('include/bbcode.php');
- $content = zidify_links(bbcode($text));
- // bbcode retargets external content to new windows. This content is internal.
- $content = str_replace(' target="_blank"', '', $content);
- }
-
- $content = preg_replace_callback("/#include (.*?)\;/ism", 'preg_callback_help_include', $content);
-
- return translate_projectname($content);
-}
-
-function preg_callback_help_include($matches) {
-
- if($matches[1]) {
- $include = str_replace($matches[0],load_doc_file($matches[1]),$matches[0]);
- if(preg_match('/\.bb$/', $matches[1]) || preg_match('/\.txt$/', $matches[1])) {
- require_once('include/bbcode.php');
- $include = zidify_links(bbcode($include));
- $include = str_replace(' target="_blank"','',$include);
- }
- elseif(preg_match('/\.md$/', $matches[1])) {
- $include = MarkdownExtra::defaultTransform($include);
- }
- return $include;
- }
-
-}
-
-/**
- * @brief Determines help language.
- *
- * If the language was specified in the URL, override the language preference
- * of the browser. Default to English if both of these are absent.
- *
- * @return array Associative array with:
- * * \e string \b language - 2-letter ISO 639-1 code ("en")
- * * \e boolean \b from_url - true if language from URL overrides browser default
- */
-function determine_help_language() {
-
- $language_repository = new LanguageRepository;
- $languages = $language_repository->getList();
-
- if(array_key_exists(argv(1), $languages)) {
- $lang = argv(1);
- $from_url = true;
- } else {
- $lang = \App::$language;
- if(! isset($lang))
- $lang = 'en';
-
- $from_url = false;
- }
-
- return array('language' => $lang, 'from_url' => $from_url);
-}
-
function load_doc_file($s) {
$c = find_doc_file($s);
diff --git a/include/html2bbcode.php b/include/html2bbcode.php
index 03e09cd62..8c35cdf03 100644
--- a/include/html2bbcode.php
+++ b/include/html2bbcode.php
@@ -26,8 +26,12 @@ function node2bbcodesub(&$doc, $oldnode, $attributes, $startbb, $endbb)
$xpath = new DomXPath($doc);
$list = $xpath->query("//".$oldnode);
+
foreach ($list as $oldNode) {
+ if ($oldnode == 'li')
+ hz_syslog(print_r($oldNode,true));
+
$attr = array();
if ($oldNode->attributes->length)
foreach ($oldNode->attributes as $attribute)
@@ -113,13 +117,6 @@ function html2bbcode($message)
$message = str_replace("\r", "", $message);
- $message = str_replace(array(
- "<li><p>",
- "</p></li>"),
- array(
- "<li>",
- "</li>"),
- $message);
// remove namespaces
$message = preg_replace('=<(\w+):(.+?)>=', '<removeme>', $message);
@@ -129,7 +126,16 @@ function html2bbcode($message)
//$message = mb_convert_encoding($message, 'HTML-ENTITIES', "UTF-8");
$message = mb_encode_numericentity($message, [0x80, 0x10FFFF, 0, ~0], 'UTF-8');
+ // TODO: It would be better to do the list parsing with node2bbcode() but it has serious issues when
+ // parsing nested lists. Especially if the li tag has no closing tag (which is valid).
+
+ $message = preg_replace('/\<ul(.*?)\>/', '[list]', $message);
+ $message = preg_replace('/\<ol(.*?)\>/', '[list=1]', $message);
+ $message = str_replace(['<li><p>', '</p></li>'], ['<li>', '</li>'], $message);
+ $message = preg_replace('/\<li(.*?)\>/', '[*]', $message);
+ $message = str_replace(['</ul>', '</ol>'], '[/list]', $message);
+ $message = str_replace('</li>', '', $message);
if(!$message)
return;
@@ -185,7 +191,11 @@ function html2bbcode($message)
node2bbcode($doc, 'b', array(), '[b]', '[/b]');
node2bbcode($doc, 'i', array(), '[i]', '[/i]');
node2bbcode($doc, 'u', array(), '[u]', '[/u]');
+ // The s tag is deprecated in HTML5
node2bbcode($doc, 's', array(), '[s]', '[/s]');
+ node2bbcode($doc, 'del', [], '[s]', '[/s]');
+
+
node2bbcode($doc, 'mark', array(), '[mark]', '[/mark]');
node2bbcode($doc, 'span', array(), "", "");
@@ -205,11 +215,6 @@ function html2bbcode($message)
node2bbcode($doc, 'audio', array('src'=>'/(.+)/'), '[audio]$1', '[/audio]');
// node2bbcode($doc, 'iframe', array('src'=>'/(.+)/'), '[iframe]$1', '[/iframe]');
-
- node2bbcode($doc, 'ul', array(), "[list]", "[/list]");
- node2bbcode($doc, 'ol', array(), "[list=1]", "[/list]");
- node2bbcode($doc, 'li', array(), "[*]", "");
-
node2bbcode($doc, 'hr', array(), "[hr]", "");
// node2bbcode($doc, 'table', array(), "", "");
diff --git a/include/html2plain.php b/include/html2plain.php
index 5cb7ee35d..69fb5193a 100644
--- a/include/html2plain.php
+++ b/include/html2plain.php
@@ -129,6 +129,8 @@ function html2plain($html, $wraplength = 75, $compact = false)
if(!$message)
return;
+ $message = preg_replace('/\<li(.*?)\>/', "\n*", $message);
+ $message = str_replace('</li>', '', $message);
$doc = new DOMDocument();
$doc->preserveWhiteSpace = false;
@@ -178,7 +180,7 @@ function html2plain($html, $wraplength = 75, $compact = false)
//node2bbcode($doc, 'ul', array(), "\n[list]", "[/list]\n");
//node2bbcode($doc, 'ol', array(), "\n[list=1]", "[/list]\n");
- node2bbcode($doc, 'li', array(), "\n* ", "\n");
+ //node2bbcode($doc, 'li', array(), "\n* ", "\n");
node2bbcode($doc, 'hr', array(), "\n".str_repeat("-", 70)."\n", "");
@@ -194,7 +196,7 @@ function html2plain($html, $wraplength = 75, $compact = false)
// Problem: there is no reliable way to detect if it is a link to a tag or profile
//node2bbcode($doc, 'a', array('href'=>'/(.+)/'), ' $1 ', '', true);
- node2bbcode($doc, 'a', array('href'=>'/(.+)/', 'rel'=>'oembed'), ' $1 ', '', true);
+ node2bbcode($doc, 'a', array('href'=>'/(.+)/', 'rel'=>'oembed'), ' $1 ', '');
//node2bbcode($doc, 'img', array('alt'=>'/(.+)/'), '$1', '');
//node2bbcode($doc, 'img', array('title'=>'/(.+)/'), '$1', '');
//node2bbcode($doc, 'img', array(), '', '');
@@ -203,7 +205,7 @@ function html2plain($html, $wraplength = 75, $compact = false)
else
node2bbcode($doc, 'img', array('src'=>'/(.+)/'), '', '');
- node2bbcode($doc, 'iframe', array('src'=>'/(.+)/'), ' $1 ', '', true);
+ node2bbcode($doc, 'iframe', array('src'=>'/(.+)/'), ' $1 ', '');
$message = $doc->saveHTML();
diff --git a/include/hubloc.php b/include/hubloc.php
index 4d2980a6b..982455f9c 100644
--- a/include/hubloc.php
+++ b/include/hubloc.php
@@ -5,6 +5,7 @@
*/
use Zotlabs\Daemon\Master;
+use Zotlabs\Lib\Config;
/**
* @brief Create an array for hubloc table and insert record.
@@ -129,7 +130,7 @@ function remove_obsolete_hublocs() {
$r = q("select hubloc_id from hubloc where hubloc_url = '%s' and hubloc_sitekey = '%s'",
dbesc(z_root()),
- dbesc(get_config('system', 'pubkey'))
+ dbesc(Config::Get('system', 'pubkey'))
);
if((! $r) || (! count($r)))
return;
@@ -139,11 +140,11 @@ function remove_obsolete_hublocs() {
// Do we have any invalid ones?
$r = q("select hubloc_id, hubloc_hash from hubloc where hubloc_sitekey = '%s' and hubloc_url != '%s'",
- dbesc(get_config('system', 'pubkey')),
+ dbesc(Config::Get('system', 'pubkey')),
dbesc(z_root())
);
$p = q("select hubloc_id, hubloc_hash from hubloc where hubloc_sitekey != '%s' and hubloc_url = '%s'",
- dbesc(get_config('system', 'pubkey')),
+ dbesc(Config::Get('system', 'pubkey')),
dbesc(z_root())
);
if(is_array($r) && is_array($p))
@@ -156,7 +157,7 @@ function remove_obsolete_hublocs() {
logger('remove_obsolete_hublocs: removing ' . count($r) . ' hublocs.');
- $interval = get_config('queueworker', 'queue_interval', 500000);
+ $interval = Config::Get('queueworker', 'queue_interval', 500000);
foreach($r as $rr) {
q("update hubloc set hubloc_deleted = 1 where hubloc_id = %d",
diff --git a/include/import.php b/include/import.php
index 7dac518f5..479c2c255 100644
--- a/include/import.php
+++ b/include/import.php
@@ -1,6 +1,7 @@
<?php
use Zotlabs\Lib\Apps;
+use Zotlabs\Lib\Config;
use Zotlabs\Lib\IConfig;
use Zotlabs\Lib\Libzot;
@@ -1479,7 +1480,7 @@ function sync_files($channel, $files) {
fclose($fp);
// Override remote hub thumbnails storage settings
- if(! boolval(get_config('system','photo_storage_type', 1))) {
+ if(! boolval(Config::Get('system','photo_storage_type', 1))) {
$p['os_storage'] = 0;
$p['content'] = file_get_contents($stored_image);
@unlink($stored_image);
diff --git a/include/items.php b/include/items.php
index a5a23650e..dc9e9a7d9 100644
--- a/include/items.php
+++ b/include/items.php
@@ -4,6 +4,7 @@
* @brief Items related functions.
*/
+use Zotlabs\Lib\Config;
use Zotlabs\Lib\Crypto;
use Zotlabs\Lib\Enotify;
use Zotlabs\Lib\MarkdownSoap;
@@ -35,10 +36,10 @@ require_once('include/permissions.php');
* @param boolean $include_groups
* @return array containing the recipients
*/
-function collect_recipients($item, &$private_envelope,$include_groups = true) {
+function collect_recipients($item, &$private_envelope, $include_groups = true) {
$private_envelope = ((intval($item['item_private'])) ? true : false);
- $recipients = array();
+ $recipients = [];
if($item['allow_cid'] || $item['allow_gid'] || $item['deny_cid'] || $item['deny_gid']) {
@@ -53,8 +54,15 @@ function collect_recipients($item, &$private_envelope,$include_groups = true) {
$allow_groups = [];
}
- $raw_recipients = array_unique(array_merge($allow_people, $allow_groups));
- $recipients = deliverable_abook_xchans($item['uid'], $raw_recipients);
+ $recipients = array_unique(array_merge($allow_people, $allow_groups));
+
+ if ($recipients) {
+ // deliverable_abook_xchans() will return all deliverable xchans
+ // if passed an empty array as 2nd argument (no filtering).
+ // Hence only call it if we do actually have any recipients.
+ $recipients = deliverable_abook_xchans($item['uid'], $recipients);
+ }
+
// if you specifically deny somebody but haven't allowed anybody, we'll allow everybody in your
// address book minus the denied connections. The post is still private and can't be seen publicly
@@ -1078,7 +1086,7 @@ function encode_item($item,$mirror = false,$zap_compat = false) {
$x['type'] = 'activity';
$x['encoding'] = 'zot';
- $key = get_config('system','prvkey');
+ $key = Config::Get('system','prvkey');
// If we're trying to backup an item so that it's recoverable or for export/imprt,
// add all the attributes we need to recover it
@@ -2696,7 +2704,7 @@ function tag_deliver($uid, $item_id) {
logger('Post mentions: ' . print_r($terms,true), LOGGER_DATA);
}
- $max_forums = get_config('system','max_tagged_forums',2);
+ $max_forums = Config::Get('system','max_tagged_forums',2);
$matched_forums = 0;
@@ -2968,7 +2976,7 @@ function tgroup_check($uid, $item) {
if(! $u)
return false;
- $max_forums = get_config('system','max_tagged_forums',2);
+ $max_forums = Config::Get('system','max_tagged_forums',2);
$matched_forums = 0;
$link = normalise_link($u[0]['xchan_url']);
@@ -3073,7 +3081,7 @@ function i_am_mentioned($channel, $item, $check_groups = false) {
}
}
}
- $unless = intval(get_pconfig($channel['channel_id'], 'system', 'unless_mention_count', get_config('system', 'unless_mention_count', 20)));
+ $unless = intval(get_pconfig($channel['channel_id'], 'system', 'unless_mention_count', Config::Get('system', 'unless_mention_count', 20)));
if ($unless && $terms && count($terms) > $unless) {
$tagged = false;
}
@@ -3762,7 +3770,7 @@ function item_expire($uid,$days,$comment_days = 7) {
$sql_extra = ((intval($expire_network_only)) ? " AND item_wall = 0 " : "");
- $expire_limit = get_config('system','expire_limit', 1000);
+ $expire_limit = Config::Get('system','expire_limit', 1000);
$item_normal = item_normal();
diff --git a/include/language.php b/include/language.php
index 1b2e7332e..538f67d90 100644
--- a/include/language.php
+++ b/include/language.php
@@ -10,6 +10,7 @@
use CommerceGuys\Intl\Language\LanguageRepository;
use LanguageDetection\Language;
+use Zotlabs\Lib\Config;
/**
* @brief Get the browser's submitted preferred languages.
@@ -17,7 +18,7 @@ use LanguageDetection\Language;
* This functions parses the HTTP_ACCEPT_LANGUAGE header sent by the browser and
* extracts the preferred languages and their priority.
*
- * Get the language setting directly from system variables, bypassing get_config()
+ * Get the language setting directly from system variables, bypassing Config::Get()
* as database may not yet be configured.
*
* If possible, we use the value from the browser.
@@ -197,10 +198,10 @@ function load_translation_table($lang, $install = false) {
*
* @param string $s string that should get translated
* @param string $ctx (optional) context to appear in po file
- * @return translated string if exists, otherwise return $s
+ * @return string translated string if exists, otherwise return $s
*
*/
-function t($s, $ctx = '') {
+function t($s, $ctx = ''): string {
$cs = $ctx ? '__ctx:' . $ctx . '__ ' . $s : $s;
if (x(App::$strings, $cs)) {
@@ -313,8 +314,8 @@ function detect_language($s) {
return EMPTY_STR;
}
- $min_length = get_config('system', 'language_detect_min_length', LANGUAGE_DETECT_MIN_LENGTH);
- $min_confidence = get_config('system', 'language_detect_min_confidence', LANGUAGE_DETECT_MIN_CONFIDENCE);
+ $min_length = Config::Get('system', 'language_detect_min_length', LANGUAGE_DETECT_MIN_LENGTH);
+ $min_confidence = Config::Get('system', 'language_detect_min_confidence', LANGUAGE_DETECT_MIN_CONFIDENCE);
// embedded apps have long base64 strings which will trip up the detector.
$naked_body = preg_replace('/\[app\](.*?)\[\/app\]/', '', $s);
diff --git a/include/menu.php b/include/menu.php
index 1f65f987d..2fcf88bca 100644
--- a/include/menu.php
+++ b/include/menu.php
@@ -166,7 +166,8 @@ function menu_create($arr) {
if($r)
return false;
- $t = datetime_convert();
+ $time_created = datetime_convert('UTC', 'UTC', empty($arr['menu_created']) ? 'now' : $arr['menu_created']);
+ $time_edited = empty($arr['menu_edited']) ? $time_created : datetime_convert('UTC', 'UTC', $arr['menu_edited']);
$r = q("insert into menu ( menu_name, menu_desc, menu_flags, menu_channel_id, menu_created, menu_edited )
values( '%s', '%s', %d, %d, '%s', '%s' )",
@@ -174,8 +175,8 @@ function menu_create($arr) {
dbesc($menu_desc),
intval($menu_flags),
intval($menu_channel_id),
- dbesc(datetime_convert('UTC','UTC',(($arr['menu_created']) ? $arr['menu_created'] : $t))),
- dbesc(datetime_convert('UTC','UTC',(($arr['menu_edited']) ? $arr['menu_edited'] : $t)))
+ dbesc($time_created),
+ dbesc($time_edited)
);
if(! $r)
return false;
diff --git a/include/nav.php b/include/nav.php
index e4df7e4e5..a68d564a0 100644
--- a/include/nav.php
+++ b/include/nav.php
@@ -2,6 +2,7 @@
use \Zotlabs\Lib\Apps;
use \Zotlabs\Lib\Chatroom;
+use \Zotlabs\Lib\Config;
require_once('include/security.php');
require_once('include/menu.php');
@@ -57,10 +58,10 @@ function nav($template = 'default') {
*
*/
- $banner = get_config('system', 'banner');
+ $banner = Config::Get('system', 'banner');
if ($banner === false)
- $banner = get_config('system', 'sitename');
+ $banner = Config::Get('system', 'sitename');
call_hooks('get_banner', $banner);
@@ -175,15 +176,15 @@ function nav($template = 'default') {
];
}
- if ((get_config('system', 'register_policy') == REGISTER_OPEN || get_config('system', 'register_policy') == REGISTER_APPROVE) && empty($_SESSION['authenticated'])) {
+ if ((Config::Get('system', 'register_policy') == REGISTER_OPEN || Config::Get('system', 'register_policy') == REGISTER_APPROVE) && empty($_SESSION['authenticated'])) {
$nav['register'] = ['register', t('Register'), "", t('Create an account'), 'register_nav_btn'];
}
// TODO: update help content for various modules
- if (false /* !get_config('system', 'hide_help') */) {
+ if (false /* !Config::Get('system', 'hide_help') */) {
$help_url = z_root() . '/help?f=&cmd=' . App::$cmd;
$context_help = '';
- $enable_context_help = ((intval(get_config('system', 'enable_context_help')) === 1 || get_config('system', 'enable_context_help') === false) ? true : false);
+ $enable_context_help = ((intval(Config::Get('system', 'enable_context_help')) === 1 || Config::Get('system', 'enable_context_help') === false) ? true : false);
if ($enable_context_help === true) {
require_once('include/help.php');
$context_help = load_context_help();
@@ -350,7 +351,7 @@ function nav($template = 'default') {
'$pleasewait' => t('Please wait...'),
'$nav_apps' => $nav_apps,
'$navbar_apps' => $navbar_apps,
- '$channel_menu' => get_pconfig(App::$profile_uid, 'system', 'channel_menu', get_config('system', 'channel_menu')),
+ '$channel_menu' => get_pconfig(App::$profile_uid, 'system', 'channel_menu', Config::Get('system', 'channel_menu')),
'$channel_thumb' => ((App::$profile) ? App::$profile['thumb'] : ''),
'$channel_apps' => $channel_apps,
'$addapps' => t('Apps'),
diff --git a/include/network.php b/include/network.php
index a5c14f9d1..b3a3d715c 100644
--- a/include/network.php
+++ b/include/network.php
@@ -1,6 +1,7 @@
<?php
use Zotlabs\Lib\Activity;
+use Zotlabs\Lib\Config;
use Zotlabs\Lib\Zotfinger;
use Zotlabs\Lib\Libzot;
use Zotlabs\Lib\Queue;
@@ -67,7 +68,7 @@ function z_fetch_url($url, $binary = false, $redirects = 0, $opts = array()) {
@curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; zot)');
@curl_setopt($ch, CURLOPT_ENCODING, '');
- $ciphers = @get_config('system','curl_ssl_ciphers');
+ $ciphers = @Config::Get('system','curl_ssl_ciphers');
if($ciphers)
@curl_setopt($ch, CURLOPT_SSL_CIPHER_LIST, $ciphers);
@@ -114,16 +115,16 @@ function z_fetch_url($url, $binary = false, $redirects = 0, $opts = array()) {
@curl_setopt($ch, CURLOPT_TIMEOUT, intval($opts['timeout']));
}
else {
- $curl_time = intval(@get_config('system','curl_timeout'));
- @curl_setopt($ch, CURLOPT_TIMEOUT, (($curl_time !== false) ? $curl_time : 60));
+ $curl_time = intval(@Config::Get('system','curl_timeout'));
+ @curl_setopt($ch, CURLOPT_TIMEOUT, (($curl_time !== 0) ? $curl_time : 60));
}
if(x($opts,'connecttimeout') && intval($opts['connecttimeout'])) {
@curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, intval($opts['connecttimeout']));
}
else {
- $curl_contime = intval(@get_config('system','curl_connecttimeout'));
- @curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, (($curl_contime !== false) ? $curl_contime : 30));
+ $curl_contime = intval(@Config::Get('system','curl_connecttimeout'));
+ @curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, (($curl_contime !== 0) ? $curl_contime : 30));
}
if(x($opts,'http_auth')) {
@@ -145,11 +146,11 @@ function z_fetch_url($url, $binary = false, $redirects = 0, $opts = array()) {
@curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,
((x($opts,'novalidate') && intval($opts['novalidate'])) ? false : true));
- $prx = @get_config('system','proxy');
+ $prx = @Config::Get('system','proxy');
if(strlen($prx)) {
@curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1);
@curl_setopt($ch, CURLOPT_PROXY, $prx);
- $prxusr = @get_config('system','proxyuser');
+ $prxusr = @Config::Get('system','proxyuser');
if(strlen($prxusr))
@curl_setopt($ch, CURLOPT_PROXYUSERPWD, $prxusr);
}
@@ -263,7 +264,7 @@ function z_post_url($url, $params, $redirects = 0, $opts = array()) {
@curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (compatible; zot)");
@curl_setopt($ch, CURLOPT_ENCODING, '');
- $ciphers = @get_config('system','curl_ssl_ciphers');
+ $ciphers = @Config::Get('system','curl_ssl_ciphers');
if($ciphers)
@curl_setopt($ch, CURLOPT_SSL_CIPHER_LIST, $ciphers);
@@ -296,8 +297,8 @@ function z_post_url($url, $params, $redirects = 0, $opts = array()) {
@curl_setopt($ch, CURLOPT_TIMEOUT, $opts['timeout']);
}
else {
- $curl_time = intval(@get_config('system','curl_timeout'));
- @curl_setopt($ch, CURLOPT_TIMEOUT, (($curl_time !== false) ? $curl_time : 60));
+ $curl_time = intval(@Config::Get('system','curl_timeout'));
+ @curl_setopt($ch, CURLOPT_TIMEOUT, (($curl_time !== 0) ? $curl_time : 60));
}
if(x($opts,'http_auth')) {
@@ -318,11 +319,11 @@ function z_post_url($url, $params, $redirects = 0, $opts = array()) {
@curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,
((x($opts,'novalidate') && intval($opts['novalidate'])) ? false : true));
- $prx = get_config('system','proxy');
+ $prx = Config::Get('system','proxy');
if(strlen($prx)) {
@curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1);
@curl_setopt($ch, CURLOPT_PROXY, $prx);
- $prxusr = get_config('system','proxyuser');
+ $prxusr = Config::Get('system','proxyuser');
if(strlen($prxusr))
@curl_setopt($ch, CURLOPT_PROXYUSERPWD, $prxusr);
}
@@ -555,12 +556,15 @@ function z_dns_check($h,$check_mx = 0) {
return((@dns_get_record($h,$opts) || filter_var($h, FILTER_VALIDATE_IP)) ? true : false);
}
-function is_local_url($url) {
- if (str_starts_with($url, z_root()) || str_starts_with($url, '/')) {
- return true;
- }
-
- return false;
+/**
+ * Returns whether an URL is local to the site, or not.
+ *
+ * @param string $url The URL to check
+ *
+ * @return bool True if the URL is local, false otherwise.
+ */
+function is_local_url(string $url): bool {
+ return str_starts_with($url, z_root()) || str_starts_with($url, '/');
}
/**
@@ -603,7 +607,7 @@ function validate_url(&$url) {
*/
function validate_email(string $addr): bool {
- if(get_config('system', 'disable_email_validation'))
+ if(Config::Get('system', 'disable_email_validation'))
return true;
$matches = array();
@@ -638,7 +642,7 @@ function allowed_url($url) {
return false;
}
- $str_allowed = get_config('system', 'allowed_sites');
+ $str_allowed = Config::Get('system', 'allowed_sites');
if(! $str_allowed)
return true;
@@ -682,8 +686,8 @@ function allowed_email($email) {
if(! $domain)
return false;
- $str_allowed = get_config('system', 'allowed_email');
- $str_not_allowed = get_config('system', 'not_allowed_email');
+ $str_allowed = Config::Get('system', 'allowed_email');
+ $str_not_allowed = Config::Get('system', 'not_allowed_email');
if(! $str_allowed && ! $str_not_allowed)
return true;
@@ -1472,7 +1476,7 @@ function do_delivery($deliveries, $force = false) {
/*
$x = q("select count(outq_hash) as total from outq where outq_delivered = 0");
- if(intval($x[0]['total']) > intval(get_config('system','force_queue_threshold',3000)) && (! $force)) {
+ if(intval($x[0]['total']) > intval(Config::Get('system','force_queue_threshold',3000)) && (! $force)) {
logger('immediate delivery deferred.', LOGGER_DEBUG, LOG_INFO);
foreach($deliveries as $d) {
Queue::update($d);
@@ -1482,9 +1486,9 @@ function do_delivery($deliveries, $force = false) {
*/
- $interval = get_config('queueworker', 'queue_interval', 500000);
+ $interval = Config::Get('queueworker', 'queue_interval', 500000);
- $deliveries_per_process = intval(get_config('system','delivery_batch_count'));
+ $deliveries_per_process = intval(Config::Get('system','delivery_batch_count'));
if($deliveries_per_process <= 0)
$deliveries_per_process = 1;
@@ -1542,9 +1546,9 @@ function get_site_info() {
$admin = false;
}
- $def_service_class = get_config('system','default_service_class');
+ $def_service_class = Config::Get('system','default_service_class');
if($def_service_class)
- $service_class = get_config('service_class',$def_service_class);
+ $service_class = Config::Get('service_class',$def_service_class);
else
$service_class = false;
@@ -1555,9 +1559,9 @@ function get_site_info() {
if(! isset($commit) || strlen($commit) > 16)
$commit = '';
- $site_info = get_config('system','info');
- $site_name = get_config('system','sitename');
- if(! get_config('system','hidden_version_siteinfo')) {
+ $site_info = Config::Get('system','info');
+ $site_name = Config::Get('system','sitename');
+ if(! Config::Get('system','hidden_version_siteinfo')) {
$version = Zotlabs\Lib\System::get_project_version();
$tag = Zotlabs\Lib\System::get_std_version();
@@ -1573,15 +1577,15 @@ function get_site_info() {
}
//Statistics
- $channels_total_stat = intval(get_config('system','channels_total_stat'));
- $channels_active_halfyear_stat = intval(get_config('system','channels_active_halfyear_stat'));
- $channels_active_monthly_stat = intval(get_config('system','channels_active_monthly_stat'));
- $local_posts_stat = intval(get_config('system','local_posts_stat'));
- $local_comments_stat = intval(get_config('system','local_comments_stat'));
- $hide_in_statistics = intval(get_config('system','hide_in_statistics'));
- $site_expire = intval(get_config('system', 'default_expire_days'));
-
- load_config('feature_lock');
+ $channels_total_stat = intval(Config::Get('system','channels_total_stat'));
+ $channels_active_halfyear_stat = intval(Config::Get('system','channels_active_halfyear_stat'));
+ $channels_active_monthly_stat = intval(Config::Get('system','channels_active_monthly_stat'));
+ $local_posts_stat = intval(Config::Get('system','local_posts_stat'));
+ $local_comments_stat = intval(Config::Get('system','local_comments_stat'));
+ $hide_in_statistics = intval(Config::Get('system','hide_in_statistics'));
+ $site_expire = intval(Config::Get('system', 'default_expire_days'));
+
+ Config::Load('feature_lock');
$locked_features = array();
if(is_array(App::$config['feature_lock']) && count(App::$config['feature_lock'])) {
foreach(App::$config['feature_lock'] as $k => $v) {
@@ -1602,18 +1606,18 @@ function get_site_info() {
'server_role' => Zotlabs\Lib\System::get_server_role(),
'commit' => $commit,
'plugins' => $visible_plugins,
- 'register_policy' => $register_policy[get_config('system','register_policy')],
- 'invitation_only' => (bool) intval(get_config('system','invitation_only')),
- 'directory_mode' => $directory_mode[get_config('system','directory_mode')],
- 'directory_server' => get_config('system','directory_server'),
- 'language' => get_config('system','language'),
- 'rss_connections' => (bool) intval(get_config('system','feed_contacts')),
+ 'register_policy' => $register_policy[Config::Get('system','register_policy')],
+ 'invitation_only' => (bool) intval(Config::Get('system','invitation_only')),
+ 'directory_mode' => $directory_mode[Config::Get('system','directory_mode')],
+ 'directory_server' => Config::Get('system','directory_server'),
+ 'language' => Config::Get('system','language'),
+ 'rss_connections' => (bool) intval(Config::Get('system','feed_contacts')),
'expiration' => $site_expire,
'default_service_restrictions' => $service_class,
'locked_features' => $locked_features,
'admin' => $admin,
'dbdriver' => DBA::$dba->getdriver() . ' ' . ((ACTIVE_DBTYPE == DBTYPE_POSTGRES) ? 'postgres' : 'mysql'),
- 'lastpoll' => get_config('system','lastpoll'),
+ 'lastpoll' => Config::Get('system','lastpoll'),
'info' => (($site_info) ? $site_info : ''),
'channels_total' => $channels_total_stat,
'hide_in_statistics' => $hide_in_statistics
@@ -1651,7 +1655,7 @@ function check_siteallowed($url) {
if(array_key_exists('allowed',$arr))
return $arr['allowed'];
- $bl1 = get_config('system','whitelisted_sites');
+ $bl1 = Config::Get('system','whitelisted_sites');
if(is_array($bl1) && $bl1) {
foreach($bl1 as $bl) {
if($bl1 === '*')
@@ -1660,7 +1664,7 @@ function check_siteallowed($url) {
return true;
}
}
- $bl1 = get_config('system','blacklisted_sites');
+ $bl1 = Config::Get('system','blacklisted_sites');
if(is_array($bl1) && $bl1) {
foreach($bl1 as $bl) {
if($bl1 === '*')
@@ -1696,7 +1700,7 @@ function check_channelallowed($hash) {
if(array_key_exists('allowed',$arr))
return $arr['allowed'];
- $bl1 = get_config('system','whitelisted_channels');
+ $bl1 = Config::Get('system','whitelisted_channels');
if(is_array($bl1) && $bl1) {
foreach($bl1 as $bl) {
if($bl1 === '*')
@@ -1705,7 +1709,7 @@ function check_channelallowed($hash) {
return true;
}
}
- $bl1 = get_config('system','blacklisted_channels');
+ $bl1 = Config::Get('system','blacklisted_channels');
if(is_array($bl1) && $bl1) {
foreach($bl1 as $bl) {
if($bl1 === '*')
@@ -1810,17 +1814,17 @@ function network_to_name($s) {
function z_mail($params) {
if(! $params['fromEmail']) {
- $params['fromEmail'] = get_config('system','from_email');
+ $params['fromEmail'] = Config::Get('system','from_email');
if(! $params['fromEmail'])
$params['fromEmail'] = 'Administrator' . '@' . App::get_hostname();
}
if(! $params['fromName']) {
- $params['fromName'] = get_config('system','from_email_name');
+ $params['fromName'] = Config::Get('system','from_email_name');
if(! $params['fromName'])
$params['fromName'] = Zotlabs\Lib\System::get_site_name();
}
if(! $params['replyTo']) {
- $params['replyTo'] = get_config('system','reply_address');
+ $params['replyTo'] = Config::Get('system','reply_address');
if(! $params['replyTo'])
$params['replyTo'] = 'noreply' . '@' . App::get_hostname();
}
@@ -2145,9 +2149,9 @@ function get_request_string($url) {
*
* @param array $parsed_url An associative array as produced by `parse_url`.
*
- * @return The reassembled URL as a string.
+ * @return string The reassembled URL as a string.
*/
-function unparse_url($parsed_url) {
+function unparse_url(array $parsed_url): string {
$scheme = isset($parsed_url['scheme']) ? $parsed_url['scheme'] . '://' : '';
$host = isset($parsed_url['host']) ? $parsed_url['host'] : '';
$port = isset($parsed_url['port']) ? ':' . $parsed_url['port'] : '';
@@ -2157,5 +2161,5 @@ function unparse_url($parsed_url) {
$path = isset($parsed_url['path']) ? $parsed_url['path'] : '';
$query = isset($parsed_url['query']) ? '?' . $parsed_url['query'] : '';
$fragment = isset($parsed_url['fragment']) ? '#' . $parsed_url['fragment'] : '';
- return "$scheme$user$pass$host$port$path$query$fragment";
+ return $scheme . $user . $pass . $host . $port . $path . $query . $fragment;
}
diff --git a/include/oauth.php b/include/oauth.php
index 845ec4558..3426f9ca5 100644
--- a/include/oauth.php
+++ b/include/oauth.php
@@ -1,11 +1,13 @@
<?php /** @file */
-/**
+/**
* OAuth server
* Based on oauth2-php <http://code.google.com/p/oauth2-php/>
- *
+ *
*/
+use Zotlabs\Lib\Config;
+
define('REQUEST_TOKEN_DURATION', 300);
define('ACCESS_TOKEN_DURATION', 31536000);
@@ -18,7 +20,7 @@ class ZotOAuth1DataStore extends OAuth1DataStore {
function gen_token(){
return md5(base64_encode(pack('N6', mt_rand(), mt_rand(), mt_rand(), mt_rand(), mt_rand(), uniqid())));
}
-
+
function lookup_consumer($consumer_key) {
logger('consumer_key: ' . $consumer_key, LOGGER_DEBUG);
@@ -72,7 +74,7 @@ class ZotOAuth1DataStore extends OAuth1DataStore {
$key = $this->gen_token();
$sec = $this->gen_token();
-
+
if ($consumer->key){
$k = $consumer->key;
} else {
@@ -94,19 +96,19 @@ class ZotOAuth1DataStore extends OAuth1DataStore {
function new_access_token($token, $consumer, $verifier = null) {
logger(__function__.":".$token.", ". $consumer.", ". $verifier, LOGGER_DEBUG);
-
+
// return a new access token attached to this consumer
// for the user associated with this token if the request token
// is authorized
// should also invalidate the request token
-
+
$ret=Null;
-
+
// get user for this verifier
- $uverifier = get_config("oauth", $verifier);
+ $uverifier = Config::Get("oauth", $verifier);
logger(__function__.":".$verifier.",".$uverifier, LOGGER_DEBUG);
if (is_null($verifier) || ($uverifier!==false)) {
-
+
$key = $this->gen_token();
$sec = $this->gen_token();
@@ -119,16 +121,16 @@ class ZotOAuth1DataStore extends OAuth1DataStore {
intval($uverifier));
if ($r)
- $ret = new OAuth1Token($key,$sec);
+ $ret = new OAuth1Token($key,$sec);
}
-
-
+
+
q("DELETE FROM tokens WHERE id='%s'", $token->key);
-
-
+
+
if (!is_null($ret) && $uverifier!==false) {
- del_config("oauth", $verifier);
-
+ Config::Delete("oauth", $verifier);
+
// $apps = get_pconfig($uverifier, "oauth", "apps");
// if ($apps===false) $apps=array();
// $apps[] = $consumer->key;
@@ -145,7 +147,7 @@ class ZotOAuth1 extends OAuth1Server {
$this->add_signature_method(new OAuth1SignatureMethod_PLAINTEXT());
$this->add_signature_method(new OAuth1SignatureMethod_HMAC_SHA1());
}
-
+
function loginUser($uid){
logger("ZotOAuth1::loginUser $uid");
@@ -174,7 +176,7 @@ class ZotOAuth1 extends OAuth1Server {
$_SESSION['allow_api'] = true;
}
}
-
+
}
/*
@@ -195,13 +197,13 @@ class FKOAuth2 extends OAuth2 {
dbesc($client_secret),
dbesc($redirect_uri)
);
-
+
return $r;
}
protected function checkClientCredentials($client_id, $client_secret = NULL) {
$client_secret = $this->db_secret($client_secret);
-
+
$r = q("SELECT pw FROM clients WHERE client_id = '%s'",
dbesc($client_id));
@@ -223,21 +225,21 @@ class FKOAuth2 extends OAuth2 {
protected function getAccessToken($oauth_token) {
$r = q("SELECT client_id, expires, scope FROM tokens WHERE id = '%s'",
dbesc($oauth_token));
-
+
if (count($r))
return $r[0];
return null;
}
-
+
protected function setAccessToken($oauth_token, $client_id, $expires, $scope = NULL) {
$r = q("INSERT INTO tokens (id, client_id, expires, scope) VALUES ('%s', '%s', %d, '%s')",
dbesc($oauth_token),
dbesc($client_id),
intval($expires),
dbesc($scope));
-
+
return $r;
}
@@ -251,23 +253,23 @@ class FKOAuth2 extends OAuth2 {
protected function getAuthCode($code) {
$r = q("SELECT id, client_id, redirect_uri, expires, auth_scope FROM auth_codes WHERE id = '%s'",
dbesc($code));
-
+
if (count($r))
return $r[0];
return null;
}
protected function setAuthCode($code, $client_id, $redirect_uri, $expires, $scope = NULL) {
- $r = q("INSERT INTO auth_codes
- (id, client_id, redirect_uri, expires, auth_scope) VALUES
+ $r = q("INSERT INTO auth_codes
+ (id, client_id, redirect_uri, expires, auth_scope) VALUES
('%s', '%s', '%s', %d, '%s')",
dbesc($code),
dbesc($client_id),
dbesc($redirect_uri),
intval($expires),
dbesc($scope));
- return $r;
- }
-
+ return $r;
+ }
+
}
*/
diff --git a/include/oauth2.php b/include/oauth2.php
index 3a71a651d..f7a279892 100644
--- a/include/oauth2.php
+++ b/include/oauth2.php
@@ -12,12 +12,12 @@
$oauth2_server->addGrantType(new OAuth2\GrantType\ClientCredentials($storage));
$oauth2_server->addGrantType(new OAuth2\GrantType\AuthorizationCode($storage));
- $keyStorage = new OAuth2\Storage\Memory( [
- 'keys' => [
- 'public_key' => get_config('system','pubkey'),
- 'private_key' => get_config('system','prvkey')
+ $keyStorage = new OAuth2\Storage\Memory( [
+ 'keys' => [
+ 'public_key' => Config::Get('system','pubkey'),
+ 'private_key' => Config::Get('system','prvkey')
]
]);
$oauth2_server->addStorage($keyStorage,'public_key');
-*/ \ No newline at end of file
+*/
diff --git a/include/oembed.php b/include/oembed.php
index a90c91641..f52f73225 100644
--- a/include/oembed.php
+++ b/include/oembed.php
@@ -1,7 +1,7 @@
<?php /** @file */
use Zotlabs\Lib\Cache;
-
+use Zotlabs\Lib\Config;
function oembed_replacecb($matches){
@@ -28,7 +28,7 @@ function oembed_action($embedurl) {
logger('oembed_action: ' . $embedurl, LOGGER_DEBUG, LOG_INFO);
if(strpos($embedurl,'http://') === 0) {
- if(intval(get_config('system','embed_sslonly'))) {
+ if(intval(Config::Get('system','embed_sslonly'))) {
$action = 'block';
}
}
@@ -39,7 +39,7 @@ function oembed_action($embedurl) {
// site white/black list
- if(($x = get_config('system','embed_deny'))) {
+ if(($x = Config::Get('system','embed_deny'))) {
if(($x) && (! is_array($x)))
$x = explode("\n",$x);
if($x) {
@@ -55,7 +55,7 @@ function oembed_action($embedurl) {
$found = false;
- if(($x = get_config('system','embed_allow'))) {
+ if(($x = Config::Get('system','embed_allow'))) {
if(($x) && (! is_array($x)))
$x = explode("\n",$x);
if($x) {
@@ -139,16 +139,16 @@ function oembed_fetch_url($embedurl){
// we should try to cache this and avoid a lookup on each render
$is_matrix = is_matrix_url($embedurl);
- $zrl = ((get_config('system','oembed_zrl')) ? $is_matrix : false);
+ $zrl = ((Config::Get('system','oembed_zrl')) ? $is_matrix : false);
$furl = ((local_channel() && $zrl) ? zid($embedurl) : $embedurl);
- if($action !== 'block' && (! get_config('system','oembed_cache_disable'))) {
+ if($action !== 'block' && (! Config::Get('system','oembed_cache_disable'))) {
$txt = Cache::get('[' . App::$videowidth . '] ' . $furl);
}
- if(strpos(strtolower($embedurl),'.pdf') !== false && get_config('system','inline_pdf')) {
+ if(strpos(strtolower($embedurl),'.pdf') !== false && Config::Get('system','inline_pdf')) {
$action = 'allow';
$j = [
'html' => '<object data="' . $embedurl . '" type="application/pdf" style="width: 100%; height: 300px;"></object>',
@@ -164,7 +164,7 @@ function oembed_fetch_url($embedurl){
$txt = EMPTY_STR;
if ($action !== 'block') {
- $max_oembed_size = get_config('system', 'oembed_max_size', 1 * 1024 * 1024 /* 1MB */);
+ $max_oembed_size = Config::Get('system', 'oembed_max_size', 1 * 1024 * 1024 /* 1MB */);
stream_context_set_default(
[
@@ -259,7 +259,7 @@ function oembed_fetch_url($embedurl){
// save in cache
- if(! get_config('system','oembed_cache_disable'))
+ if(! Config::Get('system','oembed_cache_disable'))
Cache::set('[' . App::$videowidth . '] ' . $furl, $txt);
}
@@ -328,7 +328,7 @@ function oembed_format_object($j){
$jhtml = oembed_iframe($j['embedurl'],(isset($j['width']) ? $j['width'] : null), (isset($j['height']) ? $j['height'] : null));
- $ret="<span class='oembed " . $j['type'] . "'>";
+ $ret="<span class='clearfix d-block oembed " . $j['type'] . "'>";
switch ($j['type']) {
case "video": {
if (isset($j['thumbnail_url'])) {
@@ -351,7 +351,6 @@ function oembed_format_object($j){
} else {
$ret=$jhtml;
}
- $ret.="<br>";
}; break;
case "photo": {
$ret.= "<img width='".$j['width']."' src='".$j['url']."'>";
@@ -386,15 +385,15 @@ function oembed_format_object($j){
// add link to source if not present in "rich" type
if ( $j['type'] != 'rich' || !strpos($j['html'],$embedurl) ){
$embedlink = (isset($j['title']))?$j['title'] : $embedurl;
- $ret .= '<br />' . "<a href='$embedurl' rel='oembed'>$embedlink</a>";
+ $ret .= "<a href='$embedurl' rel='oembed'>$embedlink</a>";
$ret .= "<br />";
if (isset($j['author_name'])) $ret .= t(' by ') . $j['author_name'];
if (isset($j['provider_name'])) $ret .= t(' on ') . $j['provider_name'];
} else {
// add <a> for html2bbcode conversion
- $ret .= "<br /><a href='$embedurl' rel='oembed'>$embedurl</a>";
+ $ret .= "<a href='$embedurl' rel='oembed'>$embedurl</a>";
}
- $ret.="<br style='clear:left'></span>";
+ $ret.="</span>";
// mb_convert_encoding() is deprecated
// return mb_convert_encoding($ret, 'HTML-ENTITIES', mb_detect_encoding($ret));
@@ -414,8 +413,8 @@ function oembed_iframe($src,$width,$height) {
}
// try and leave some room for the description line.
- $height = intval($height) + 80;
- $width = intval($width) + 40;
+ $height = intval($height);
+ $width = intval($width);
$s = z_root() . '/oembed/' . base64url_encode($src);
@@ -429,7 +428,7 @@ function oembed_iframe($src,$width,$height) {
function oembed_bbcode2html($text){
- $stopoembed = get_config("system","no_oembed");
+ $stopoembed = Config::Get("system","no_oembed");
if ($stopoembed == true){
return preg_replace("/\[embed\](.+?)\[\/embed\]/is", "<!-- oembed $1 --><i>". t('Embedding disabled') ." : $1</i><!-- /oembed $1 -->" ,$text);
}
diff --git a/include/permissions.php b/include/permissions.php
index 28f242712..be6fc8594 100644
--- a/include/permissions.php
+++ b/include/permissions.php
@@ -1,5 +1,7 @@
<?php
+use Zotlabs\Lib\Config;
+
require_once('include/security.php');
/**
@@ -105,7 +107,7 @@ function get_all_perms($uid, $observer_xchan, $check_siteblock = true, $default_
// system is blocked to anybody who is not authenticated
- if(($check_siteblock) && (! $observer_xchan) && intval(get_config('system', 'block_public'))) {
+ if(($check_siteblock) && (! $observer_xchan) && intval(Config::Get('system', 'block_public'))) {
$ret[$perm_name] = 0;
continue;
}
@@ -291,7 +293,7 @@ function perm_is_allowed($uid, $observer_xchan, $permission, $check_siteblock =
// system is blocked to anybody who is not authenticated
- if(($check_siteblock) && (! $observer_xchan) && intval(get_config('system', 'block_public')))
+ if(($check_siteblock) && (! $observer_xchan) && intval(Config::Get('system', 'block_public')))
return false;
// Check if this $uid is actually the $observer_xchan
@@ -496,7 +498,7 @@ function site_default_perms() {
$global_perms = \Zotlabs\Access\Permissions::Perms();
foreach($global_perms as $perm => $v) {
- $x = get_config('default_perms', $perm, $typical[$perm]);
+ $x = Config::Get('default_perms', $perm, $typical[$perm]);
$ret[$perm] = $x;
}
diff --git a/include/photo/photo_driver.php b/include/photo/photo_driver.php
index 4394d3238..66a5d19f9 100644
--- a/include/photo/photo_driver.php
+++ b/include/photo/photo_driver.php
@@ -1,5 +1,6 @@
<?php
+use Zotlabs\Lib\Config;
use Zotlabs\Photo\PhotoDriver;
use Zotlabs\Photo\PhotoGd;
use Zotlabs\Photo\PhotoImagick;
@@ -32,13 +33,13 @@ function photo_factory($data, $type = null) {
return null;
}
- $ignore_imagick = get_config('system', 'ignore_imagick');
+ $ignore_imagick = Config::Get('system', 'ignore_imagick');
if(class_exists('Imagick') && !$ignore_imagick) {
$v = Imagick::getVersion();
preg_match('/ImageMagick ([0-9]+\.[0-9]+\.[0-9]+)/', $v['versionString'], $m);
if(version_compare($m[1], '6.6.7') >= 0) {
- $limits = get_config('system', 'imagick_limits', false);
+ $limits = Config::Get('system', 'imagick_limits', false);
if ($limits)
foreach ($limits as $k => $v)
IMagick::setResourceLimit($k, $v);
@@ -99,7 +100,7 @@ function guess_image_type($filename, $data = '') {
}
if(is_null($type)){
- $ignore_imagick = get_config('system', 'ignore_imagick');
+ $ignore_imagick = Config::Get('system', 'ignore_imagick');
// Guessing from extension? Isn't that... dangerous?
if(class_exists('Imagick') && ! $ignore_imagick) {
$v = Imagick::getVersion();
diff --git a/include/photos.php b/include/photos.php
index 5e993e15f..85c97d1fd 100644
--- a/include/photos.php
+++ b/include/photos.php
@@ -6,6 +6,7 @@
use Zotlabs\Access\PermissionLimits;
use Zotlabs\Lib\Activity;
+use Zotlabs\Lib\Config;
require_once('include/permissions.php');
require_once('include/items.php');
@@ -74,11 +75,11 @@ function photo_upload($channel, $observer, $args) {
$os_storage = 0;
- $max_thumb = get_config('system', 'max_thumbnail', 1600);
+ $max_thumb = Config::Get('system', 'max_thumbnail', 1600);
if ($args['os_syspath'] && $args['getimagesize']) {
if ($args['getimagesize'][0] > $max_thumb || $args['getimagesize'][1] > $max_thumb) {
- $imagick_path = get_config('system', 'imagick_convert_path');
+ $imagick_path = Config::Get('system', 'imagick_convert_path');
if ($imagick_path && @file_exists($imagick_path)) {
$tmp_name = $args['os_syspath'] . '-001';
$newsize = photo_calculate_scale(array_merge($args['getimagesize'], ['max' => $max_thumb]));
@@ -146,7 +147,7 @@ function photo_upload($channel, $observer, $args) {
logger('Received file: ' . $filename . ' as ' . $src . ' (' . $type . ') ' . $filesize . ' bytes', LOGGER_DEBUG);
- $maximagesize = get_config('system', 'maximagesize');
+ $maximagesize = Config::Get('system', 'maximagesize');
if (($maximagesize) && ($filesize > $maximagesize)) {
$ret['message'] = sprintf(t('Image exceeds website size limit of %lu bytes'), $maximagesize);
@@ -219,7 +220,7 @@ function photo_upload($channel, $observer, $args) {
@unlink($src);
- $max_length = get_config('system', 'max_image_length');
+ $max_length = Config::Get('system', 'max_image_length');
if (!$max_length)
$max_length = MAX_IMAGE_LENGTH;
if ($max_length > 0)
diff --git a/include/plugin.php b/include/plugin.php
index bbfeab988..62b643c3e 100644
--- a/include/plugin.php
+++ b/include/plugin.php
@@ -5,6 +5,7 @@
* @brief Some functions to handle addons and themes.
*/
+use Zotlabs\Lib\Config;
/**
* @brief Handle errors in plugin calls.
@@ -25,7 +26,7 @@ function handleerrors_plugin($plugin, $notice, $log, $uninstall = false){
$idx = array_search($plugin, \App::$plugins);
unset(\App::$plugins[$idx]);
uninstall_plugin($plugin);
- set_config("system", "addon", implode(", ", \App::$plugins));
+ Config::Set("system", "addon", implode(", ", \App::$plugins));
}
}
@@ -187,7 +188,7 @@ function plugin_is_installed($name) {
* @brief Reload all updated plugins.
*/
function reload_plugins() {
- $plugins = get_config('system', 'addon');
+ $plugins = Config::Get('system', 'addon');
if(strlen($plugins)) {
$r = dbq("SELECT * FROM addon WHERE installed = 1");
if($r)
@@ -266,7 +267,7 @@ function plugins_sync() {
$installed = plugins_installed_list();
- $plugins = get_config('system', 'addon', '');
+ $plugins = Config::Get('system', 'addon', '');
$plugins_arr = explode(',', $plugins);
@@ -487,18 +488,19 @@ function call_hooks($name, &$data = null) {
@include_once($hook[0]);
}
- if(preg_match('|^a:[0-9]+:{.*}$|s', $hook[1])) {
- $hook[1] = unserialize($hook[1]);
- }
- elseif(strpos($hook[1],'::')) {
- // We shouldn't need to do this, but it appears that PHP
- // isn't able to directly execute a string variable with a class
- // method in the manner we are attempting it, so we'll
- // turn it into an array.
- $hook[1] = explode('::',$hook[1]);
+ if(is_string($hook[1])) {
+ if (preg_match('|^a:[0-9]+:{.*}$|s', $hook[1])) {
+ $hook[1] = unserialize($hook[1]);
+ }
+ elseif(strpos($hook[1],'::')) {
+ // We shouldn't need to do this, but it appears that PHP
+ // isn't able to directly execute a string variable with a class
+ // method in the manner we are attempting it, so we'll
+ // turn it into an array.
+ $hook[1] = explode('::',$hook[1]);
+ }
}
-
if(is_callable($hook[1])) {
$func = $hook[1];
$func($data);
@@ -719,7 +721,7 @@ function check_plugin_versions($info) {
continue;
if(strpos($test,'.')) {
$conf = explode('.',$test);
- if(get_config(trim($conf[0]),trim($conf[1])))
+ if(Config::Get(trim($conf[0]),trim($conf[1])))
return true;
else
return false;
diff --git a/include/security.php b/include/security.php
index b3e45742e..545788bcd 100644
--- a/include/security.php
+++ b/include/security.php
@@ -5,8 +5,10 @@
* @brief Some security related functions.
*/
+use Zotlabs\Lib\Config;
+
/**
- * @param int $user_record The account_id
+ * @param array $user_record The account record
* @param array $channel
* @param bool $login_initial default false
* @param bool $interactive default false
@@ -872,7 +874,7 @@ function stream_perms_xchans($perms = NULL) {
*/
function zarIsDuty($wd=NULL, $hhmm=NULL, $op='isOpen') {
- $isduty = get_config('system', 'register_duty_jso');
+ $isduty = Config::Get('system', 'register_duty_jso');
if (!$isduty)
return (bool)false;
@@ -906,7 +908,6 @@ function zarIsDuty($wd=NULL, $hhmm=NULL, $op='isOpen') {
}
}
return $dutyis;
- break;
case 'nextOpen':
/**
@@ -951,7 +952,6 @@ function zarIsDuty($wd=NULL, $hhmm=NULL, $op='isOpen') {
}
}
return $is1; // false or array
- break;
default:
//
diff --git a/include/socgraph.php b/include/socgraph.php
index e5e8ddf74..336c1c0c3 100644
--- a/include/socgraph.php
+++ b/include/socgraph.php
@@ -1,6 +1,7 @@
<?php /** @file */
+use Zotlabs\Lib\Config;
use Zotlabs\Lib\Libzot;
use Zotlabs\Lib\Libzotdir;
use Zotlabs\Lib\Zotfinger;
@@ -288,7 +289,7 @@ function suggestion_query($uid, $myxchan, $start = 0, $limit = 80) {
function update_suggestions() {
- $dirmode = get_config('system', 'directory_mode', DIRECTORY_MODE_NORMAL);
+ $dirmode = Config::Get('system', 'directory_mode', DIRECTORY_MODE_NORMAL);
if($dirmode == DIRECTORY_MODE_STANDALONE) {
poco_load('', z_root() . '/poco');
diff --git a/include/statistics_fns.php b/include/statistics_fns.php
index 98b0efd41..5915c82a2 100644
--- a/include/statistics_fns.php
+++ b/include/statistics_fns.php
@@ -1,13 +1,15 @@
<?php /** @file */
+use Zotlabs\Lib\Config;
+
function update_channels_total_stat() {
$r = q("select count(channel_id) as channels_total from channel left join account on account_id = channel_account_id
where account_flags = 0 ");
if($r) {
$channels_total_stat = intval($r[0]['channels_total']);
- set_config('system','channels_total_stat',$channels_total_stat);
+ Config::Set('system','channels_total_stat',$channels_total_stat);
} else {
- set_config('system','channels_total_stat',0);
+ Config::Set('system','channels_total_stat',0);
}
}
@@ -17,10 +19,10 @@ function update_channels_active_halfyear_stat() {
db_utcnow(), db_quoteinterval('6 MONTH')
);
if($r) {
- set_config('system','channels_active_halfyear_stat',count($r));
+ Config::Set('system','channels_active_halfyear_stat',count($r));
}
else {
- set_config('system','channels_active_halfyear_stat','0');
+ Config::Set('system','channels_active_halfyear_stat','0');
}
}
@@ -30,10 +32,10 @@ function update_channels_active_monthly_stat() {
db_utcnow(), db_quoteinterval('1 MONTH')
);
if($r) {
- set_config('system','channels_active_monthly_stat',count($r));
+ Config::Set('system','channels_active_monthly_stat',count($r));
}
else {
- set_config('system','channels_active_monthly_stat','0');
+ Config::Set('system','channels_active_monthly_stat','0');
}
}
@@ -41,9 +43,9 @@ function update_local_posts_stat() {
$posts = q("SELECT COUNT(*) AS local_posts FROM item WHERE item_wall = 1 and id = parent");
if (is_array($posts)) {
$local_posts_stat = intval($posts[0]["local_posts"]);
- set_config('system','local_posts_stat',$local_posts_stat);
+ Config::Set('system','local_posts_stat',$local_posts_stat);
} else {
- set_config('system','local_posts_stat',0);
+ Config::Set('system','local_posts_stat',0);
}
}
@@ -54,5 +56,5 @@ function update_local_comments_stat() {
else
$local_posts = $posts[0]["local_posts"];
- set_config('system','local_comments_stat', $local_posts);
-} \ No newline at end of file
+ Config::Set('system','local_comments_stat', $local_posts);
+}
diff --git a/include/taxonomy.php b/include/taxonomy.php
index dd56ab956..45287fa63 100644
--- a/include/taxonomy.php
+++ b/include/taxonomy.php
@@ -6,8 +6,10 @@
// To do this we need to escape these characters if they appear in our tag.
use Zotlabs\Lib\Cache;
+use Zotlabs\Lib\Config;
use Zotlabs\Daemon\Master;
+
function file_tag_encode($s) {
return str_replace(array('<','>','[',']'),array('%3c','%3e','%5b','%5d'),$s);
}
@@ -351,7 +353,7 @@ function pub_tagadelic($net, $site, $limit, $recent, $safemode, $type) {
}
if($safemode) {
- $unsafetags = get_config('system','unsafepubtags', [ 'boobs', 'bot', 'rss', 'girl','girls', 'nsfw', 'sexy', 'nude' ]);
+ $unsafetags = Config::Get('system','unsafepubtags', [ 'boobs', 'bot', 'rss', 'girl','girls', 'nsfw', 'sexy', 'nude' ]);
if($unsafetags) {
$sql_extra .= " and not term.term in ( " . stringify_array($unsafetags,true) . ") ";
}
diff --git a/include/text.php b/include/text.php
index 713911af2..b03e2d1a9 100644
--- a/include/text.php
+++ b/include/text.php
@@ -9,6 +9,7 @@ use Michelf\MarkdownExtra;
use Ramsey\Uuid\Uuid;
use Ramsey\Uuid\Exception\UnableToBuildUuidException;
+use Zotlabs\Lib\Config;
use Zotlabs\Lib\Crypto;
use Zotlabs\Lib\SvgSanitizer;
use Zotlabs\Lib\Libzot;
@@ -741,9 +742,9 @@ function logger($msg, $level = LOGGER_NORMAL, $priority = LOG_INFO) {
$loglevel = LOGGER_ALL;
}
else {
- $debugging = get_config('system', 'debugging');
- $loglevel = intval(get_config('system', 'loglevel'));
- $logfile = get_config('system', 'logfile');
+ $debugging = Config::Get('system', 'debugging');
+ $loglevel = intval(Config::Get('system', 'loglevel'));
+ $logfile = Config::Get('system', 'logfile');
}
if((! $debugging) || (! $logfile) || ($level > $loglevel))
@@ -846,9 +847,9 @@ function dlogger($msg, $level = 0) {
if(App::$module == 'setup')
return;
- $debugging = get_config('system','debugging');
- $loglevel = intval(get_config('system','loglevel'));
- $logfile = get_config('system','dlogfile');
+ $debugging = Config::Get('system','debugging');
+ $loglevel = intval(Config::Get('system','loglevel'));
+ $logfile = Config::Get('system','dlogfile');
if((! $debugging) || (! $logfile) || ($level > $loglevel))
return;
@@ -1253,7 +1254,7 @@ function sslify($s) {
// The downside is that http: media files will likely be blocked by your browser
// Complain to your browser maker
- $allow = get_config('system','sslify_everything');
+ $allow = Config::Get('system','sslify_everything');
$pattern = (($allow) ? "/\<(.*?)src=[\"|'](http\:.*?)[\"|'](.*?)\>/" : "/\<img(.*?)src=[\"|'](http\:.*?)[\"|'](.*?)\>/" );
$matches = null;
@@ -1407,7 +1408,7 @@ function list_smilies($default_only = false) {
*/
function smilies($s, $sample = false) {
- if(intval(get_config('system', 'no_smilies'))
+ if(intval(Config::Get('system', 'no_smilies'))
|| (local_channel() && intval(get_pconfig(local_channel(), 'system', 'no_smilies'))))
return $s;
@@ -2081,10 +2082,15 @@ function prepare_text($text, $content_type = 'text/bbcode', $opts = false) {
default:
require_once('include/bbcode.php');
- if(stristr($text, '[nosmile]'))
- $s = bbcode($text, ((is_array($opts)) ? $opts : [] ));
- else
- $s = smilies(bbcode($text, ((is_array($opts)) ? $opts : [] )));
+ // events are handled in format_event_obj()
+ if (empty($opts['is_event_item'])) {
+ if(stristr($text, '[nosmile]')) {
+ $s = bbcode($text, ((is_array($opts)) ? $opts : [] ));
+ }
+ else {
+ $s = smilies(bbcode($text, ((is_array($opts)) ? $opts : [] )));
+ }
+ }
$s = zidify_links($s);
@@ -2113,7 +2119,7 @@ function create_export_photo_body(&$item) {
* @return string
*/
function feed_hublinks() {
- $hub = get_config('system', 'huburl');
+ $hub = Config::Get('system', 'huburl');
$hubxml = '';
if(strlen($hub)) {
@@ -2496,7 +2502,7 @@ function check_webbie($arr) {
// These names conflict with the CalDAV server
$taken = [ 'principals', 'addressbooks', 'calendars' ];
- $reservechan = get_config('system','reserved_channels');
+ $reservechan = Config::Get('system','reserved_channels');
if(strlen($reservechan)) {
$taken = array_merge($taken,explode(',', $reservechan));
}
diff --git a/include/zid.php b/include/zid.php
index b38457d99..159a3b834 100644
--- a/include/zid.php
+++ b/include/zid.php
@@ -1,5 +1,6 @@
<?php
+use Zotlabs\Lib\Config;
use Zotlabs\Lib\Libzot;
use Zotlabs\Lib\Verify;
@@ -37,10 +38,16 @@ function is_matrix_url($url) {
* @return string
*/
function zid($s, $address = '') {
- if (!$s || strpos($s,'zid='))
+ if (!$s || strpos($s,'zid=')) {
return $s;
+ }
$m = parse_url($s);
+
+ if (!is_array($m)) {
+ return $s;
+ }
+
$fragment = ((array_key_exists('fragment',$m) && $m['fragment']) ? $m['fragment'] : false);
if($fragment !== false)
$s = str_replace('#' . $fragment,'',$s);
@@ -406,7 +413,7 @@ function owt_init($token) {
App::set_observer($hubloc);
require_once('include/security.php');
App::set_groups(init_groups_visitor($_SESSION['visitor_id']));
- if(! get_config('system', 'hide_owa_greeting'))
+ if(! Config::Get('system', 'hide_owa_greeting'))
info(sprintf( t('OpenWebAuth: %1$s welcomes %2$s'),App::get_hostname(), $hubloc['xchan_name']));
logger('OpenWebAuth: auth success from ' . $hubloc['xchan_addr']);
diff --git a/library/jgrowl/.gitignore b/library/jgrowl/.gitignore
deleted file mode 100644
index 385e49ef1..000000000
--- a/library/jgrowl/.gitignore
+++ /dev/null
@@ -1,5 +0,0 @@
-.DS_Store
-node_modules/
-jGrowl.iml
-jGrowl.ipr
-jGrowl.iws
diff --git a/library/jgrowl/Gruntfile.js b/library/jgrowl/Gruntfile.js
deleted file mode 100644
index fed0fceee..000000000
--- a/library/jgrowl/Gruntfile.js
+++ /dev/null
@@ -1,61 +0,0 @@
-module.exports = function(grunt) {
-
- grunt.initConfig({
- pkg: grunt.file.readJSON('package.json'),
- uglify: {
- options: {
- sourceMap: true,
- sourceMapName: 'jquery.jgrowl.map'
- },
- jgrowl: {
- files: {
- 'jquery.jgrowl.min.js': ['jquery.jgrowl.js']
- }
- }
- },
- less: {
- jgrowl: {
- files: {
- "jquery.jgrowl.css": "less/jgrowl.less"
- }
- }
- },
- cssmin: {
- jgrowl: {
- expand: true,
- src: 'jquery.jgrowl.css',
- ext: '.jgrowl.min.css'
- }
- },
- jshint: {
- files: ['Gruntfile.js', 'jquery.jgrowl.js'],
- options: {
- // options here to override JSHint defaults
- globals: {
- jQuery: true,
- console: true,
- module: true,
- document: true
- }
- }
- },
- watch: {
- scripts: {
- files: ['jquery.jgrowl.js', 'less/*'],
- tasks: ['jshint', 'less', 'cssmin', 'uglify'],
- options: {
- spawn: false
- }
- }
- }
- });
-
- grunt.loadNpmTasks('grunt-contrib-uglify');
- grunt.loadNpmTasks('grunt-contrib-cssmin');
- grunt.loadNpmTasks('grunt-contrib-jshint');
- grunt.loadNpmTasks('grunt-contrib-watch');
- grunt.loadNpmTasks('grunt-contrib-less');
-
- grunt.registerTask('test', ['jshint']);
- grunt.registerTask('default', ['jshint', 'uglify', 'less', 'cssmin']);
-};
diff --git a/library/jgrowl/LICENSE b/library/jgrowl/LICENSE
deleted file mode 100644
index e70a54a58..000000000
--- a/library/jgrowl/LICENSE
+++ /dev/null
@@ -1,7 +0,0 @@
-Copyright (c) 2012 Stan Lemon
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/library/jgrowl/README.md b/library/jgrowl/README.md
deleted file mode 100644
index 7dfd85637..000000000
--- a/library/jgrowl/README.md
+++ /dev/null
@@ -1,75 +0,0 @@
-# jGrowl
-jGrowl is a jQuery plugin that raises unobtrusive messages within the browser, similar to the way that OS X's Growl Framework works. The idea is simple, deliver notifications to the end user in a noticeable way that doesn't obstruct the work flow and yet keeps the user informed.
-
-## Installation
-jGrowl can be added to your project using package managers like bower and npm or directly into your html using cdnjs, as well as the good old fashioned copy-paste into your project directory.
-
-Use cdnjs:
-
-```html
-<link rel="stylesheet" type="text/css" href="//cdnjs.cloudflare.com/ajax/libs/jquery-jgrowl/1.4.1/jquery.jgrowl.min.css" />
-<script src="//cdnjs.cloudflare.com/ajax/libs/jquery-jgrowl/1.4.1/jquery.jgrowl.min.js"></script>
-```
-
-Install with bower
-
-```
-bower install jgrowl
-```
-
-Install with npm
-
-```
-npm install jgrowl
-```
-
-```js
-// Sample 1
-$.jGrowl("Hello world!");
-// Sample 2
-$.jGrowl("Stick this!", { sticky: true });
-// Sample 3
-$.jGrowl("A message with a header", { header: 'Important' });
-// Sample 4
-$.jGrowl("A message that will live a little longer.", { life: 10000 });
-// Sample 5
-$.jGrowl("A message with a beforeOpen callback and a different opening animation.", {
- beforeClose: function(e,m) {
- alert('About to close this notification!');
- },
- animateOpen: {
- height: 'show'
- }
-});
-```
-
-## Configuration Options
-| Option | Default | Description |
-|------------------|--------------------------------------|------------------------------------------------------------|
-| pool | 0 | Limit the number of messages appearing at a given time to the number in the pool. |
-| header | empty | Optional header to prefix the message, this is often helpful for associating messages to each other. |
-| group | empty | A css class to be applied to notifications when they are created, useful for 'grouping' notifications by a css selector. |
-| sticky | false | When set to true a message will stick to the screen until it is intentionally closed by the user. |
-| position | top-right | Designates a class which is applied to the jGrowl container and controls its position on the screen. By Default there are five options available, top-left, top-right, bottom-left, bottom-right, center. This must be changed in the defaults before the startup method is called. |
-| appendTo | body | The element where our jGrowl messages are appended to. The default is `body` but feel free to define another one. |
-| glue | after | Designates whether a jGrowl notification should be appended to the container after all notifications, or whether it should be prepended to the container before all notifications. Options are after or before. |
-| theme | default | A CSS class designating custom styling for this particular message, intended for use with jQuery UI. |
-| themeState | highlight | A CSS class designating custom styling for this particular message and its state, intended for use with jQuery UI. |
-| corners | 10px | If the corners jQuery plugin is include this option specifies the curvature radius to be used for the notifications as they are created. |
-| check | 250 | The frequency that jGrowl should check for messages to be scrubbed from the screen.This must be changed in the defaults before the startup method is called. |
-| life | 3000 | The lifespan of a non-sticky message on the screen. |
-| closeDuration | normal | The animation speed used to close a notification. |
-| openDuration | normal | The animation speed used to open a notification. |
-| easing | swing | The easing method to be used with the animation for opening and closing a notification. |
-| closer | true | Whether or not the close-all button should be used when more then one notification appears on the screen. Optionally this property can be set to a function which will be used as a callback when the close all button is clicked. This must be changed in the defaults before the startup method is called. |
-| closeTemplate | &times; | This content is used for the individual notification close links that are added to the corner of a notification. This must be changed in the defaults before the startup method is called. |
-| closerTemplate | &lt;div&gt;[ close all ]&lt;/div&gt; | This content is used for the close-all link that is added to the bottom of a jGrowl container when it contains more than one notification. This must be changed in the defaults before the startup method is called. |
-| log | function(e,m,o) {} | Callback to be used before anything is done with the notification. This is intended to be used if the user would like to have some type of logging mechanism for all notifications passed to jGrowl. This callback receives the notification's DOM context, the notification's message and its option object. |
-| beforeOpen | function(e,m,o) {} | Callback to be used before a new notification is opened. This callback receives the notification's DOM context, the notification's message and its option object. |
-| afterOpen | function(e,m,o) {} | Callback to be used after a new notification is opened. This callback receives the notification's DOM context, the notification's message and its option object. |
-| open | function(e,m,o) {} | Callback to be used when a new notification is opened. This callback receives the notification's DOM context, the notifications message and its option object. |
-| beforeClose | function(e,m,o) {} | Callback to be used before a new notification is closed. This callback receives the notification's DOM context, the notification's message and its option object. |
-| close | function(e,m,o) {} | Callback to be used when a new notification is closed. This callback receives the notification's DOM context, the notification's message and its option object. |
-| click | function(e,m,o) {} | Callback to be used when a notification is clicked. This callback receives the notification's DOM context, the notification's message and its option object. |
-| animateOpen | { opacity: 'show' } | The animation properties to use when opening a new notification (default to fadeOut). |
-| animateClose | { opacity: 'hide' } | The animation properties to use when closing a new notification (defaults to fadeIn). |
diff --git a/library/jgrowl/bower.json b/library/jgrowl/bower.json
deleted file mode 100644
index 15cfc754b..000000000
--- a/library/jgrowl/bower.json
+++ /dev/null
@@ -1,32 +0,0 @@
-{
- "name": "jGrowl",
- "version": "1.4.5",
- "homepage": "https://github.com/stanlemon/jGrowl",
- "authors": [
- "Stan Lemon <stosh1985@gmail.com>"
- ],
- "description": "jGrowl is an unobtrusive notification system for web applications.",
- "main": [
- "jquery.jgrowl.css",
- "jquery.jgrowl.js"
- ],
- "keywords": [
- "growl",
- "jgrowl",
- "jquery",
- "toaster",
- "notification",
- "message"
- ],
- "license": "MIT",
- "dependencies": {
- "jquery": ">=1.4"
- },
- "ignore": [
- "**/.*",
- "node_modules",
- "bower_components",
- "test",
- "tests"
- ]
-}
diff --git a/library/jgrowl/examples/appendTo.html b/library/jgrowl/examples/appendTo.html
deleted file mode 100644
index 3eb0f4d27..000000000
--- a/library/jgrowl/examples/appendTo.html
+++ /dev/null
@@ -1,103 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html lang="en-US" xml:lang="en-US" xmlns="http://www.w3.org/1999/xhtml" debug="true">
- <head>
- <title>jGrowl Examples</title>
- <link rel="stylesheet" href="../jquery.jgrowl.css" type="text/css"/>
- <style type="text/css">
- html,
- body {
- font-family: "Helvetica neue", Helvetica, Arial, sans-serif;
- padding: 0;
- margin: 0;
- }
-
- h1, h2, h3, h4, h5 {
- margin-top: 2px;
- margin-bottom: 2px;
- }
-
- .jGrowl .manilla {
- background-color: #FFF1C2;
- color: navy;
- }
-
- .jGrowl .flora {
- background: #E6F7D4 url(flora-notification.png) no-repeat;
- -moz-border-radius: 0px;
- -webkit-border-radius: 0px;
- opacity: 1;
- filter: alpha(opacity = 100);
- width: 270px;
- height: 90px;
- padding: 0px;
- overflow: hidden;
- border-color: #5ab500;
- }
-
- .jGrowl .flora .message {
- padding: 5px;
- color: #000;
- }
-
- .jGrowl .flora .header {
- background: url(flora-header.png) no-repeat;
- padding: 5px;
- }
-
- .jGrowl .flora .close {
- background: url(flora-close.png) no-repeat;
- padding: 5px;
- color: transparent;
- padding: 0px;
- margin: 5px;
- width: 17px;
- }
-
- #dummyNav {
- position: fixed;
- background: green;
- width: 100%;
- height: 50px;
- }
-
- </style>
- <script type="text/javascript" src="http://code.jquery.com/jquery.js"></script>
- <script type="text/javascript" src="../jquery.jgrowl.js"></script>
- <script type="text/javascript">
-
- // In case you don't have firebug...
- if(typeof console === "undefined") {
- console = { log: function() { } };
- }
-
- (function($){
-
- $(function(){
-
- $.jGrowl.defaults.closerTemplate = "<div>[ xxxxx ]</div>";
- $.jGrowl.defaults.appendTo = "div#dummyNav";
-
- $.jGrowl("This message is sticky and clickable", {
- sticky: true,
- click: function(msg) {
- alert("You clicked me");
- }
- });
-
- $.jGrowl("This message is sticky and clickable");
- $.jGrowl("This message is sticky and clickable");
- $.jGrowl("This message is sticky and clickable");
- $.jGrowl("This message is sticky and clickable");
- $.jGrowl("This message is sticky and clickable");
- $.jGrowl("This message is sticky and clickable");
- });
- })(jQuery);
-
- </script>
- </head>
- <body>
- <div id="dummyNav">I'm the dummy navigation</div>
-
- <h1>Append To Another DOM-Object</h1>
- </body>
-</html>
diff --git a/library/jgrowl/examples/bootstrap.html b/library/jgrowl/examples/bootstrap.html
deleted file mode 100644
index 6e069a3b9..000000000
--- a/library/jgrowl/examples/bootstrap.html
+++ /dev/null
@@ -1,91 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
- <head>
- <meta charset="utf-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <meta name="description" content="">
- <meta name="author" content="">
-
- <title>jGrowl and Bootstrap</title>
-
- <link rel="stylesheet" href="../jquery.jgrowl.css" type="text/css"/>
- <link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css">
-
- <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
- <!--[if lt IE 9]>
- <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
- <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
- <![endif]-->
-
- <style>
- body {
- padding-top: 50px;
- }
- </style>
- </head>
-
- <body>
- <div id="jGrowl-container1" class="jGrowl top-right"></div>
-
- <div class="navbar navbar-inverse navbar-fixed-top" role="navigation">
- <div class="container">
- <div class="navbar-header">
- <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
- <span class="sr-only">Toggle navigation</span>
- <span class="icon-bar"></span>
- <span class="icon-bar"></span>
- <span class="icon-bar"></span>
- </button>
- <a class="navbar-brand" href="#">jGrowl</a>
- </div>
- <div class="collapse navbar-collapse">
- <ul class="nav navbar-nav">
- <li class="active"><a href="#">Home</a></li>
- <li><a href="#about">About</a></li>
- <li><a href="#contact">Contact</a></li>
- </ul>
- </div><!--/.nav-collapse -->
- </div>
- </div>
-
- <div class="container">
-
- <div>
- <h1>jGrowl and Bootstrap</h1>
- <p class="lead">This is a Bootstrap starter template with jGrowl integrated. As you can see it's extremely easy to make jGrowl look and feel like part of Bootstrap.</p>
- </div>
- <div id="jGrowl-container2" class="jGrowl"></div>
- </div><!-- /.container -->
-
-
- <!-- Bootstrap core JavaScript
- ================================================== -->
- <!-- Placed at the end of the document so the pages load faster -->
- <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
- <script src="//netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>
- <script type="text/javascript" src="../jquery.jgrowl.js"></script>
- <script type="text/javascript">
- (function($){
- $(function(){
- $.jGrowl.defaults.closerTemplate = '<div class="alert alert-info">Close All</div>';
-
- var alertTypes = ['success', 'info', 'warning', 'danger'];
-
- for (var i=0; i<10; i++) {
- setTimeout(function(){
- var alertType = alertTypes[Math.floor(Math.random()*alertTypes.length)];
-
- $('#jGrowl-container1').jGrowl({
- header: alertType.substring(0, 1).toUpperCase() + alertType.substring(1) + ' Notification',
- message: 'Hello world ',
- group: 'alert-' + alertType,
- life: 5000
- });
- }, i*2000);
- }
- });
- })(jQuery);
- </script>
- </body>
-</html>
diff --git a/library/jgrowl/examples/jgrowl.html b/library/jgrowl/examples/jgrowl.html
deleted file mode 100644
index e10fdd6cb..000000000
--- a/library/jgrowl/examples/jgrowl.html
+++ /dev/null
@@ -1,171 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html lang="en-US" xml:lang="en-US" xmlns="http://www.w3.org/1999/xhtml" debug="true">
- <head>
- <title>jGrowl Examples</title>
- <link rel="stylesheet" href="../jquery.jgrowl.css" type="text/css"/>
- <style type="text/css">
- body {
- font-family: "Helvetica neue", Helvetica, Arial, sans-serif;
- }
-
- h1, h2, h3, h4, h5 {
- margin-top: 2px;
- margin-bottom: 2px;
- }
-
- .jGrowl .manilla {
- background-color: #FFF1C2;
- color: navy;
- }
-
- .jGrowl .flora {
- background: #E6F7D4 url(flora-notification.png) no-repeat;
- -moz-border-radius: 0px;
- -webkit-border-radius: 0px;
- opacity: 1;
- filter: alpha(opacity = 100);
- width: 270px;
- height: 90px;
- padding: 0px;
- overflow: hidden;
- border-color: #5ab500;
- }
-
- .jGrowl .flora .message {
- padding: 5px;
- color: #000;
- }
-
- .jGrowl .flora .header {
- background: url(flora-header.png) no-repeat;
- padding: 5px;
- }
-
- .jGrowl .flora .close {
- background: url(flora-close.png) no-repeat;
- padding: 5px;
- color: transparent;
- padding: 0px;
- margin: 5px;
- width: 17px;
- }
-
- #random {
- padding: 20px;
- width: 1500px;
- background-color: #ff7070;
- }
-
- #logs {
- margin-top: 30px;
- background-color: #efefef;
- border: 1px solid #aaa;
- padding: 10px;
- }
-
- </style>
- <script type="text/javascript" src="http://code.jquery.com/jquery.js"></script>
- <script type="text/javascript" src="../jquery.jgrowl.js"></script>
- <script type="text/javascript">
-
- // In case you don't have firebug...
- if(typeof console === "undefined") {
- console = { log: function() { } };
- }
-
- (function($){
-
- $(function(){
-
- $.jGrowl.defaults.pool = 5;
-
- $.jGrowl.defaults.closerTemplate = '<div>hide all notifications</div>';
-
- // This value can be true, false or a function to be used as a callback when the closer is clciked
- $.jGrowl.defaults.closer = function() {
- console.log("Closing everything!", this);
- };
-
- // A callback for logging notifications.
- $.jGrowl.defaults.log = function(e,m,o) {
- $('#logs').append("<div><strong>#" + $(e).attr('id') + "</strong> <em>" + (new Date()).getTime() + "</em>: " + m + " (" + o.theme + ")</div>")
- }
-
- $.jGrowl("Sticky notifications don't have an end of life", { sticky: true });
- $.jGrowl("Custom theme, custom animations, header, longer life and a whole bunch of callbacks...", {
- header: 'Header',
- life: 5000,
- theme: 'manilla',
- speed: 'slow',
- beforeOpen: function(e,m,o) {
- console.log("I am going to be opened!", this);
- },
- open: function(e,m,o) {
- console.log("I have been opened!", this);
- },
- beforeClose: function(e,m,o) {
- console.log("I am going to be closed!", this);
- },
- close: function(e,m,o) {
- console.log("I have been closed!", this);
- },
- animateOpen: {
- height: "show",
- width: "show"
- },
- animateClose: {
- height: "hide",
- width: "show"
- }
- });
-
- $.jGrowl("This message will not open because we have a callback that returns false.", {
- beforeOpen: function() {
- console.log("Going to open a notification, but not really...");
- },
- open: function() {
- return false;
- }
- });
-
- $.jGrowl("This message will not close because we have a callback that returns false.", {
- beforeClose: function() {
- return false;
- }
- });
-
- $('#test1').jGrowl("Testing a custom container.", {
- closer: false,
- sticky: true,
- glue: 'before'
- });
-
- $('#test1').jGrowl("This will be prepended before the last message.", {
- glue: 'before'
- });
-
- $.jGrowl("This message is sticky and clickable", {
- sticky: true,
- click: function(msg) {
- alert("You clicked me");
- }
- });
- });
- })(jQuery);
-
- </script>
- </head>
- <body>
- <h1>jGrowl Tests</h1>
-
- <p><a href="javascript:void(0);" onclick="$.jGrowl('One more message...');">Create a new message.</a></p>
-
- <p><a href="javascript:void(0);" onclick="$('#test1').jGrowl('shutdown');">Shutdown bottom-left container.</a></p>
-
- <div id="random">An extra wide node, watch as the jGrowl containers stay put in the corners of the screen..</div>
-
- <div id="logs"><h3>Log:</h3></div>
-
- <div id="test1" class="bottom-left"></div>
- </body>
-</html>
diff --git a/library/jgrowl/jgrowl.jquery.json b/library/jgrowl/jgrowl.jquery.json
deleted file mode 100644
index c5f0756c9..000000000
--- a/library/jgrowl/jgrowl.jquery.json
+++ /dev/null
@@ -1,40 +0,0 @@
-{
- "name": "jgrowl",
- "filename": "jquery.jgrowl.min.js",
- "title": "jGrowl",
- "description": "jGrowl is a jQuery plugin that raises unobtrusive messages within the browser, similar to the way that OS X's Growl Framework works. The idea is simple, deliver notifications to the end user in a noticeable way that doesn't obstruct the work flow and yet keeps the user informed.",
- "keywords": [
- "growl",
- "jgrowl",
- "jquery",
- "toaster",
- "notification",
- "message"
- ],
- "version": "1.4.3",
- "author": {
- "name": "Stan Lemon",
- "email": "stosh1985@gmail.com",
- "url": "http://stanlemon.net"
- },
- "maintainers": [
- {
- "name": "Stan Lemon",
- "email": "stosh1985@gmail.com",
- "url": "http://stanlemon.net"
- }
- ],
- "licenses": [
- {
- "type": "MIT",
- "url": "https://github.com/stanlemon/jGrowl/blob/master/LICENSE"
- }
- ],
- "bugs": "https://github.com/stanlemon/jGrowl/issues",
- "homepage": "https://github.com/stanlemon/jGrowl",
- "docs": "https://github.com/stanlemon/jGrowl",
- "download": "https://github.com/stanlemon/jGrowl/archive/master.zip",
- "dependencies": {
- "jquery": ">=1.4"
- }
-}
diff --git a/library/jgrowl/jquery.jgrowl.css b/library/jgrowl/jquery.jgrowl.css
deleted file mode 100644
index 4a00b60f7..000000000
--- a/library/jgrowl/jquery.jgrowl.css
+++ /dev/null
@@ -1,100 +0,0 @@
-.jGrowl {
- z-index: 9999;
- color: #ffffff;
- font-size: 12px;
- font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
- position: fixed;
-}
-.jGrowl.top-left {
- left: 0px;
- top: 0px;
-}
-.jGrowl.top-right {
- right: 0px;
- top: 0px;
-}
-.jGrowl.bottom-left {
- left: 0px;
- bottom: 0px;
-}
-.jGrowl.bottom-right {
- right: 0px;
- bottom: 0px;
-}
-.jGrowl.center {
- top: 0px;
- width: 50%;
- left: 25%;
-}
-.jGrowl.center .jGrowl-notification,
-.jGrowl.center .jGrowl-closer {
- margin-left: auto;
- margin-right: auto;
-}
-.jGrowl-notification {
- background-color: #000000;
- opacity: 0.9;
- filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=(0.9*100));
- -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=(0.9*100));
- zoom: 1;
- width: 250px;
- padding: 10px;
- margin: 10px;
- text-align: left;
- display: none;
- border-radius: 5px;
- min-height: 40px;
-}
-.jGrowl-notification .ui-state-highlight,
-.jGrowl-notification .ui-widget-content .ui-state-highlight,
-.jGrowl-notification .ui-widget-header .ui-state-highlight {
- border: 1px solid #000;
- background: #000;
- color: #fff;
-}
-.jGrowl-notification .jGrowl-header {
- font-weight: bold;
- font-size: .85em;
-}
-.jGrowl-notification .jGrowl-close {
- background-color: transparent;
- color: inherit;
- border: none;
- z-index: 99;
- float: right;
- font-weight: bold;
- font-size: 1em;
- cursor: pointer;
-}
-.jGrowl-closer {
- background-color: #000000;
- opacity: 0.9;
- filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=(0.9*100));
- -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=(0.9*100));
- zoom: 1;
- width: 250px;
- padding: 10px;
- margin: 10px;
- text-align: left;
- display: none;
- border-radius: 5px;
- padding-top: 4px;
- padding-bottom: 4px;
- cursor: pointer;
- font-size: .9em;
- font-weight: bold;
- text-align: center;
-}
-.jGrowl-closer .ui-state-highlight,
-.jGrowl-closer .ui-widget-content .ui-state-highlight,
-.jGrowl-closer .ui-widget-header .ui-state-highlight {
- border: 1px solid #000;
- background: #000;
- color: #fff;
-}
-/** Hide jGrowl when printing **/
-@media print {
- .jGrowl {
- display: none;
- }
-}
diff --git a/library/jgrowl/jquery.jgrowl.js b/library/jgrowl/jquery.jgrowl.js
deleted file mode 100644
index d5444d438..000000000
--- a/library/jgrowl/jquery.jgrowl.js
+++ /dev/null
@@ -1,399 +0,0 @@
-/**
- * jGrowl 1.4.5
- *
- * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
- * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
- *
- * Written by Stan Lemon <stosh1985@gmail.com>
- * Last updated: 2015.02.01
- *
- * jGrowl is a jQuery plugin implementing unobtrusive userland notifications. These
- * notifications function similarly to the Growl Framework available for
- * Mac OS X (http://growl.info).
- *
- * To Do:
- * - Move library settings to containers and allow them to be changed per container
- *
- * Changes in 1.4.5
- * - Fixed arguement list for click callback, thanks @timotheeg
- *
- * Changes in 1.4.4
- * - Revert word-break changes, thanks @curtisgibby
- *
- * Changes in 1.4.3
- * - Fixed opactiy in LESS for older version of IE
- *
- * Changes in 1.4.2
- * - Added word-break to less/css
- *
- * Changes in 1.4.1
- * - Added appendTo option
- * - jQuery compatibility updates
- * - Add check for closing a notification before it opens
- *
- * Changes in 1.4.0
- * - Removed IE6 support
- * - Added LESS support
- *
- * Changes in 1.3.0
- * - Added non-vendor border-radius to stylesheet
- * - Added grunt for generating minified js and css
- * - Added npm package info
- * - Added bower package info
- * - Updates for jshint
- *
- * Changes in 1.2.13
- * - Fixed clearing interval when the container shuts down
- *
- * Changes in 1.2.12
- * - Added compressed versions using UglifyJS and Sqwish
- * - Improved README with configuration options explanation
- * - Added a source map
- *
- * Changes in 1.2.11
- * - Fix artifacts left behind by the shutdown method and text-cleanup
- *
- * Changes in 1.2.10
- * - Fix beforeClose to be called in click event
- *
- * Changes in 1.2.9
- * - Fixed BC break in jQuery 2.0 beta
- *
- * Changes in 1.2.8
- * - Fixes for jQuery 1.9 and the MSIE6 check, note that with jQuery 2.0 support
- * jGrowl intends to drop support for IE6 altogether
- *
- * Changes in 1.2.6
- * - Fixed js error when a notification is opening and closing at the same time
- *
- * Changes in 1.2.5
- * - Changed wrapper jGrowl's options usage to "o" instead of $.jGrowl.defaults
- * - Added themeState option to control 'highlight' or 'error' for jQuery UI
- * - Ammended some CSS to provide default positioning for nested usage.
- * - Changed some CSS to be prefixed with jGrowl- to prevent namespacing issues
- * - Added two new options - openDuration and closeDuration to allow
- * better control of notification open and close speeds, respectively
- * Patch contributed by Jesse Vincet.
- * - Added afterOpen callback. Patch contributed by Russel Branca.
- *
- * Changes in 1.2.4
- * - Fixed IE bug with the close-all button
- * - Fixed IE bug with the filter CSS attribute (special thanks to gotwic)
- * - Update IE opacity CSS
- * - Changed font sizes to use "em", and only set the base style
- *
- * Changes in 1.2.3
- * - The callbacks no longer use the container as context, instead they use the actual notification
- * - The callbacks now receive the container as a parameter after the options parameter
- * - beforeOpen and beforeClose now check the return value, if it's false - the notification does
- * not continue. The open callback will also halt execution if it returns false.
- * - Fixed bug where containers would get confused
- * - Expanded the pause functionality to pause an entire container.
- *
- * Changes in 1.2.2
- * - Notification can now be theme rolled for jQuery UI, special thanks to Jeff Chan!
- *
- * Changes in 1.2.1
- * - Fixed instance where the interval would fire the close method multiple times.
- * - Added CSS to hide from print media
- * - Fixed issue with closer button when div { position: relative } is set
- * - Fixed leaking issue with multiple containers. Special thanks to Matthew Hanlon!
- *
- * Changes in 1.2.0
- * - Added message pooling to limit the number of messages appearing at a given time.
- * - Closing a notification is now bound to the notification object and triggered by the close button.
- *
- * Changes in 1.1.2
- * - Added iPhone styled example
- * - Fixed possible IE7 bug when determining if the ie6 class shoudl be applied.
- * - Added template for the close button, so that it's content could be customized.
- *
- * Changes in 1.1.1
- * - Fixed CSS styling bug for ie6 caused by a mispelling
- * - Changes height restriction on default notifications to min-height
- * - Added skinned examples using a variety of images
- * - Added the ability to customize the content of the [close all] box
- * - Added jTweet, an example of using jGrowl + Twitter
- *
- * Changes in 1.1.0
- * - Multiple container and instances.
- * - Standard $.jGrowl() now wraps $.fn.jGrowl() by first establishing a generic jGrowl container.
- * - Instance methods of a jGrowl container can be called by $.fn.jGrowl(methodName)
- * - Added glue preferenced, which allows notifications to be inserted before or after nodes in the container
- * - Added new log callback which is called before anything is done for the notification
- * - Corner's attribute are now applied on an individual notification basis.
- *
- * Changes in 1.0.4
- * - Various CSS fixes so that jGrowl renders correctly in IE6.
- *
- * Changes in 1.0.3
- * - Fixed bug with options persisting across notifications
- * - Fixed theme application bug
- * - Simplified some selectors and manipulations.
- * - Added beforeOpen and beforeClose callbacks
- * - Reorganized some lines of code to be more readable
- * - Removed unnecessary this.defaults context
- * - If corners plugin is present, it's now customizable.
- * - Customizable open animation.
- * - Customizable close animation.
- * - Customizable animation easing.
- * - Added customizable positioning (top-left, top-right, bottom-left, bottom-right, center)
- *
- * Changes in 1.0.2
- * - All CSS styling is now external.
- * - Added a theme parameter which specifies a secondary class for styling, such
- * that notifications can be customized in appearance on a per message basis.
- * - Notification life span is now customizable on a per message basis.
- * - Added the ability to disable the global closer, enabled by default.
- * - Added callbacks for when a notification is opened or closed.
- * - Added callback for the global closer.
- * - Customizable animation speed.
- * - jGrowl now set itself up and tears itself down.
- *
- * Changes in 1.0.1:
- * - Removed dependency on metadata plugin in favor of .data()
- * - Namespaced all events
- */
-(function($) {
- /** jGrowl Wrapper - Establish a base jGrowl Container for compatibility with older releases. **/
- $.jGrowl = function( m , o ) {
- // To maintain compatibility with older version that only supported one instance we'll create the base container.
- if ( $('#jGrowl').length === 0 )
- $('<div id="jGrowl"></div>').addClass( (o && o.position) ? o.position : $.jGrowl.defaults.position ).appendTo( (o && o.appendTo) ? o.appendTo : $.jGrowl.defaults.appendTo );
-
- // Create a notification on the container.
- $('#jGrowl').jGrowl(m,o);
- };
-
-
- /** Raise jGrowl Notification on a jGrowl Container **/
- $.fn.jGrowl = function( m , o ) {
- // Short hand for passing in just an object to this method
- if ( o === undefined && $.isPlainObject(m) ) {
- o = m;
- m = o.message;
- }
-
- if ( $.isFunction(this.each) ) {
- var args = arguments;
-
- return this.each(function() {
- /** Create a jGrowl Instance on the Container if it does not exist **/
- if ( $(this).data('jGrowl.instance') === undefined ) {
- $(this).data('jGrowl.instance', $.extend( new $.fn.jGrowl(), { notifications: [], element: null, interval: null } ));
- $(this).data('jGrowl.instance').startup( this );
- }
-
- /** Optionally call jGrowl instance methods, or just raise a normal notification **/
- if ( $.isFunction($(this).data('jGrowl.instance')[m]) ) {
- $(this).data('jGrowl.instance')[m].apply( $(this).data('jGrowl.instance') , $.makeArray(args).slice(1) );
- } else {
- $(this).data('jGrowl.instance').create( m , o );
- }
- });
- }
- };
-
- $.extend( $.fn.jGrowl.prototype , {
-
- /** Default JGrowl Settings **/
- defaults: {
- pool: 0,
- header: '',
- group: '',
- sticky: false,
- position: 'top-right',
- appendTo: 'body',
- glue: 'after',
- theme: 'default',
- themeState: 'highlight',
- corners: '10px',
- check: 250,
- life: 3000,
- closeDuration: 'normal',
- openDuration: 'normal',
- easing: 'swing',
- closer: true,
- closeTemplate: '&times;',
- closerTemplate: '<div>[ close all ]</div>',
- log: function() {},
- beforeOpen: function() {},
- afterOpen: function() {},
- open: function() {},
- beforeClose: function() {},
- close: function() {},
- click: function() {},
- animateOpen: {
- opacity: 'show'
- },
- animateClose: {
- opacity: 'hide'
- }
- },
-
- notifications: [],
-
- /** jGrowl Container Node **/
- element: null,
-
- /** Interval Function **/
- interval: null,
-
- /** Create a Notification **/
- create: function( message , options ) {
- var o = $.extend({}, this.defaults, options);
-
- /* To keep backward compatibility with 1.24 and earlier, honor 'speed' if the user has set it */
- if (typeof o.speed !== 'undefined') {
- o.openDuration = o.speed;
- o.closeDuration = o.speed;
- }
-
- this.notifications.push({ message: message , options: o });
-
- o.log.apply( this.element , [this.element,message,o] );
- },
-
- render: function( n ) {
- var self = this;
- var message = n.message;
- var o = n.options;
-
- // Support for jQuery theme-states, if this is not used it displays a widget header
- o.themeState = (o.themeState === '') ? '' : 'ui-state-' + o.themeState;
-
- var notification = $('<div/>')
- .addClass('jGrowl-notification alert ' + o.themeState + ' ui-corner-all' + ((o.group !== undefined && o.group !== '') ? ' ' + o.group : ''))
- .append($('<button/>').addClass('jGrowl-close').html(o.closeTemplate))
- .append($('<div/>').addClass('jGrowl-header').html(o.header))
- .append($('<div/>').addClass('jGrowl-message').html(message))
- .data("jGrowl", o).addClass(o.theme).children('.jGrowl-close').bind("click.jGrowl", function() {
- $(this).parent().trigger('jGrowl.beforeClose');
- return false;
- })
- .parent();
-
-
- /** Notification Actions **/
- $(notification).bind("mouseover.jGrowl", function() {
- $('.jGrowl-notification', self.element).data("jGrowl.pause", true);
- }).bind("mouseout.jGrowl", function() {
- $('.jGrowl-notification', self.element).data("jGrowl.pause", false);
- }).bind('jGrowl.beforeOpen', function() {
- if ( o.beforeOpen.apply( notification , [notification,message,o,self.element] ) !== false ) {
- $(this).trigger('jGrowl.open');
- }
- }).bind('jGrowl.open', function() {
- if ( o.open.apply( notification , [notification,message,o,self.element] ) !== false ) {
- if ( o.glue == 'after' ) {
- $('.jGrowl-notification:last', self.element).after(notification);
- } else {
- $('.jGrowl-notification:first', self.element).before(notification);
- }
-
- $(this).animate(o.animateOpen, o.openDuration, o.easing, function() {
- // Fixes some anti-aliasing issues with IE filters.
- if ($.support.opacity === false)
- this.style.removeAttribute('filter');
-
- if ( $(this).data("jGrowl") !== null && typeof $(this).data("jGrowl") !== 'undefined') // Happens when a notification is closing before it's open.
- $(this).data("jGrowl").created = new Date();
-
- $(this).trigger('jGrowl.afterOpen');
- });
- }
- }).bind('jGrowl.afterOpen', function() {
- o.afterOpen.apply( notification , [notification,message,o,self.element] );
- }).bind('click', function() {
- o.click.apply( notification, [notification,message,o,self.element] );
- }).bind('jGrowl.beforeClose', function() {
- if ( o.beforeClose.apply( notification , [notification,message,o,self.element] ) !== false )
- $(this).trigger('jGrowl.close');
- }).bind('jGrowl.close', function() {
- // Pause the notification, lest during the course of animation another close event gets called.
- $(this).data('jGrowl.pause', true);
- $(this).animate(o.animateClose, o.closeDuration, o.easing, function() {
- if ( $.isFunction(o.close) ) {
- if ( o.close.apply( notification , [notification,message,o,self.element] ) !== false )
- $(this).remove();
- } else {
- $(this).remove();
- }
- });
- }).trigger('jGrowl.beforeOpen');
-
- /** Optional Corners Plugin **/
- if ( o.corners !== '' && $.fn.corner !== undefined ) $(notification).corner( o.corners );
-
- /** Add a Global Closer if more than one notification exists **/
- if ($('.jGrowl-notification:parent', self.element).length > 1 &&
- $('.jGrowl-closer', self.element).length === 0 && this.defaults.closer !== false ) {
- $(this.defaults.closerTemplate).addClass('jGrowl-closer ' + this.defaults.themeState + ' ui-corner-all').addClass(this.defaults.theme)
- .appendTo(self.element).animate(this.defaults.animateOpen, this.defaults.speed, this.defaults.easing)
- .bind("click.jGrowl", function() {
- $(this).siblings().trigger("jGrowl.beforeClose");
-
- if ( $.isFunction( self.defaults.closer ) ) {
- self.defaults.closer.apply( $(this).parent()[0] , [$(this).parent()[0]] );
- }
- });
- }
- },
-
- /** Update the jGrowl Container, removing old jGrowl notifications **/
- update: function() {
- $(this.element).find('.jGrowl-notification:parent').each( function() {
- if ($(this).data("jGrowl") !== undefined && $(this).data("jGrowl").created !== undefined &&
- ($(this).data("jGrowl").created.getTime() + parseInt($(this).data("jGrowl").life, 10)) < (new Date()).getTime() &&
- $(this).data("jGrowl").sticky !== true &&
- ($(this).data("jGrowl.pause") === undefined || $(this).data("jGrowl.pause") !== true) ) {
-
- // Pause the notification, lest during the course of animation another close event gets called.
- $(this).trigger('jGrowl.beforeClose');
- }
- });
-
- if (this.notifications.length > 0 &&
- (this.defaults.pool === 0 || $(this.element).find('.jGrowl-notification:parent').length < this.defaults.pool) )
- this.render( this.notifications.shift() );
-
- if ($(this.element).find('.jGrowl-notification:parent').length < 2 ) {
- $(this.element).find('.jGrowl-closer').animate(this.defaults.animateClose, this.defaults.speed, this.defaults.easing, function() {
- $(this).remove();
- });
- }
- },
-
- /** Setup the jGrowl Notification Container **/
- startup: function(e) {
- this.element = $(e).addClass('jGrowl').append('<div class="jGrowl-notification"></div>');
- this.interval = setInterval( function() {
- // some error in chage ^^
- var instance = $(e).data('jGrowl.instance');
- if (undefined !== instance) {
- instance.update();
- }
- }, parseInt(this.defaults.check, 10));
- },
-
- /** Shutdown jGrowl, removing it and clearing the interval **/
- shutdown: function() {
- $(this.element).removeClass('jGrowl')
- .find('.jGrowl-notification').trigger('jGrowl.close')
- .parent().empty()
- ;
-
- clearInterval(this.interval);
- },
-
- close: function() {
- $(this.element).find('.jGrowl-notification').each(function(){
- $(this).trigger('jGrowl.beforeClose');
- });
- }
- });
-
- /** Reference the Defaults Object for compatibility with older versions of jGrowl **/
- $.jGrowl.defaults = $.fn.jGrowl.prototype.defaults;
-
-})(jQuery);
diff --git a/library/jgrowl/jquery.jgrowl.map b/library/jgrowl/jquery.jgrowl.map
deleted file mode 100644
index a04b1e347..000000000
--- a/library/jgrowl/jquery.jgrowl.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"jquery.jgrowl.min.js","sources":["jquery.jgrowl.js"],"names":["$","jGrowl","m","o","length","addClass","position","defaults","appendTo","fn","undefined","isPlainObject","message","isFunction","this","each","args","arguments","data","extend","notifications","element","interval","startup","apply","makeArray","slice","create","prototype","pool","header","group","sticky","glue","theme","themeState","corners","check","life","closeDuration","openDuration","easing","closer","closeTemplate","closerTemplate","log","beforeOpen","afterOpen","open","beforeClose","close","click","animateOpen","opacity","animateClose","options","speed","push","render","n","self","notification","append","html","children","bind","parent","trigger","after","before","animate","support","style","removeAttribute","created","Date","remove","corner","siblings","update","find","getTime","parseInt","shift","e","setInterval","instance","shutdown","removeClass","empty","clearInterval","jQuery"],"mappings":"CAsJA,SAAUA,GAETA,EAAEC,OAAS,SAAUC,EAAIC,GAEK,IAAxBH,EAAE,WAAWI,QACjBJ,EAAE,2BAA2BK,SAAWF,GAAKA,EAAEG,SAAYH,EAAEG,SAAWN,EAAEC,OAAOM,SAASD,UAAWE,SAAWL,GAAKA,EAAEK,SAAYL,EAAEK,SAAWR,EAAEC,OAAOM,SAASC,UAGnKR,EAAE,WAAWC,OAAOC,EAAEC,IAKvBH,EAAES,GAAGR,OAAS,SAAUC,EAAIC,GAO3B,GALWO,SAANP,GAAmBH,EAAEW,cAAcT,KACvCC,EAAID,EACJA,EAAIC,EAAES,SAGFZ,EAAEa,WAAWC,KAAKC,MAAQ,CAC9B,GAAIC,GAAOC,SAEX,OAAOH,MAAKC,KAAK,WAEyBL,SAApCV,EAAEc,MAAMI,KAAK,qBACjBlB,EAAEc,MAAMI,KAAK,kBAAmBlB,EAAEmB,OAAQ,GAAInB,GAAES,GAAGR,QAAYmB,iBAAmBC,QAAS,KAAMC,SAAU,QAC3GtB,EAAEc,MAAMI,KAAK,mBAAmBK,QAAST,OAIrCd,EAAEa,WAAWb,EAAEc,MAAMI,KAAK,mBAAmBhB,IACjDF,EAAEc,MAAMI,KAAK,mBAAmBhB,GAAGsB,MAAOxB,EAAEc,MAAMI,KAAK,mBAAqBlB,EAAEyB,UAAUT,GAAMU,MAAM,IAEpG1B,EAAEc,MAAMI,KAAK,mBAAmBS,OAAQzB,EAAIC,OAMhDH,EAAEmB,OAAQnB,EAAES,GAAGR,OAAO2B,WAGrBrB,UACCsB,KAAS,EACTC,OAAW,GACXC,MAAU,GACVC,QAAW,EACX1B,SAAY,YACZE,SAAY,OACZyB,KAAS,QACTC,MAAU,UACVC,WAAc,YACdC,QAAW,OACXC,MAAU,IACVC,KAAS,IACTC,cAAgB,SAChBC,aAAe,SACfC,OAAW,QACXC,QAAW,EACXC,cAAgB,UAChBC,eAAiB,2BACjBC,IAAQ,aACRC,WAAc,aACdC,UAAa,aACbC,KAAS,aACTC,YAAc,aACdC,MAAU,aACVC,MAAU,aACVC,aACCC,QAAU,QAEXC,cACCD,QAAU,SAIZjC,iBAGAC,QAAY,KAGZC,SAAa,KAGbK,OAAQ,SAAUf,EAAU2C,GAC3B,GAAIpD,GAAIH,EAAEmB,UAAWL,KAAKP,SAAUgD,EAGb,oBAAZpD,GAAEqD,QACZrD,EAAEqC,aAAerC,EAAEqD,MACnBrD,EAAEoC,cAAgBpC,EAAEqD,OAGrB1C,KAAKM,cAAcqC,MAAO7C,QAASA,EAAU2C,QAASpD,IAEtDA,EAAE0C,IAAIrB,MAAOV,KAAKO,SAAWP,KAAKO,QAAQT,EAAQT,KAGnDuD,OAAQ,SAAUC,GACjB,GAAIC,GAAO9C,KACPF,EAAU+C,EAAE/C,QACZT,EAAIwD,EAAEJ,OAGVpD,GAAEgC,WAA+B,KAAjBhC,EAAEgC,WAAqB,GAAK,YAAchC,EAAEgC,UAE5D,IAAI0B,GAAe7D,EAAE,UACnBK,SAAS,6BAA+BF,EAAEgC,WAAa,kBAAiCzB,SAAZP,EAAE4B,OAAmC,KAAZ5B,EAAE4B,MAAgB,IAAM5B,EAAE4B,MAAQ,KACvI+B,OAAO9D,EAAE,aAAaK,SAAS,gBAAgB0D,KAAK5D,EAAEwC,gBACtDmB,OAAO9D,EAAE,UAAUK,SAAS,iBAAiB0D,KAAK5D,EAAE2B,SACpDgC,OAAO9D,EAAE,UAAUK,SAAS,kBAAkB0D,KAAKnD,IACnDM,KAAK,SAAUf,GAAGE,SAASF,EAAE+B,OAAO8B,SAAS,iBAAiBC,KAAK,eAAgB,WAEnF,MADAjE,GAAEc,MAAMoD,SAASC,QAAQ,uBAClB,IAEPD,QAIFlE,GAAE6D,GAAcI,KAAK,mBAAoB,WACxCjE,EAAE,uBAAwB4D,EAAKvC,SAASH,KAAK,gBAAgB,KAC3D+C,KAAK,kBAAmB,WAC1BjE,EAAE,uBAAwB4D,EAAKvC,SAASH,KAAK,gBAAgB,KAC3D+C,KAAK,oBAAqB,WACvB9D,EAAE2C,WAAWtB,MAAOqC,GAAgBA,EAAajD,EAAQT,EAAEyD,EAAKvC,aAAe,GACnFrB,EAAEc,MAAMqD,QAAQ,iBAEfF,KAAK,cAAe,WACjB9D,EAAE6C,KAAKxB,MAAOqC,GAAgBA,EAAajD,EAAQT,EAAEyD,EAAKvC,aAAe,IAC9D,SAAVlB,EAAE8B,KACNjC,EAAE,4BAA6B4D,EAAKvC,SAAS+C,MAAMP,GAEnD7D,EAAE,6BAA8B4D,EAAKvC,SAASgD,OAAOR,GAGtD7D,EAAEc,MAAMwD,QAAQnE,EAAEiD,YAAajD,EAAEqC,aAAcrC,EAAEsC,OAAQ,WAEpDzC,EAAEuE,QAAQlB,WAAY,GACzBvC,KAAK0D,MAAMC,gBAAgB,UAEI,OAA3BzE,EAAEc,MAAMI,KAAK,WAAwD,mBAA3BlB,GAAEc,MAAMI,KAAK,YAC3DlB,EAAEc,MAAMI,KAAK,UAAUwD,QAAU,GAAIC,OAEtC3E,EAAEc,MAAMqD,QAAQ,yBAGhBF,KAAK,mBAAoB,WAC3B9D,EAAE4C,UAAUvB,MAAOqC,GAAgBA,EAAajD,EAAQT,EAAEyD,EAAKvC,YAC7D4C,KAAK,QAAS,WAChB9D,EAAEgD,MAAM3B,MAAOqC,GAAeA,EAAajD,EAAQT,EAAEyD,EAAKvC,YACxD4C,KAAK,qBAAsB,WACxB9D,EAAE8C,YAAYzB,MAAOqC,GAAgBA,EAAajD,EAAQT,EAAEyD,EAAKvC,aAAe,GACpFrB,EAAEc,MAAMqD,QAAQ,kBACfF,KAAK,eAAgB,WAEvBjE,EAAEc,MAAMI,KAAK,gBAAgB,GAC7BlB,EAAEc,MAAMwD,QAAQnE,EAAEmD,aAAcnD,EAAEoC,cAAepC,EAAEsC,OAAQ,WACrDzC,EAAEa,WAAWV,EAAE+C,OACd/C,EAAE+C,MAAM1B,MAAOqC,GAAgBA,EAAajD,EAAQT,EAAEyD,EAAKvC,aAAe,GAC9ErB,EAAEc,MAAM8D,SAET5E,EAAEc,MAAM8D,aAGRT,QAAQ,qBAGQ,KAAdhE,EAAEiC,SAAkC1B,SAAhBV,EAAES,GAAGoE,QAAuB7E,EAAE6D,GAAcgB,OAAQ1E,EAAEiC,SAG3EpC,EAAE,8BAA+B4D,EAAKvC,SAASjB,OAAS,GACd,IAA7CJ,EAAE,iBAAkB4D,EAAKvC,SAASjB,QAAgBU,KAAKP,SAASmC,UAAW,GAC3E1C,EAAEc,KAAKP,SAASqC,gBAAgBvC,SAAS,iBAAmBS,KAAKP,SAAS4B,WAAa,kBAAkB9B,SAASS,KAAKP,SAAS2B,OAC9H1B,SAASoD,EAAKvC,SAASiD,QAAQxD,KAAKP,SAAS6C,YAAatC,KAAKP,SAASiD,MAAO1C,KAAKP,SAASkC,QAC7FwB,KAAK,eAAgB,WACrBjE,EAAEc,MAAMgE,WAAWX,QAAQ,sBAEtBnE,EAAEa,WAAY+C,EAAKrD,SAASmC,SAChCkB,EAAKrD,SAASmC,OAAOlB,MAAOxB,EAAEc,MAAMoD,SAAS,IAAMlE,EAAEc,MAAMoD,SAAS,QAOzEa,OAAQ,WACP/E,EAAEc,KAAKO,SAAS2D,KAAK,+BAA+BjE,KAAM,WAC1BL,SAA3BV,EAAEc,MAAMI,KAAK,WAA8DR,SAAnCV,EAAEc,MAAMI,KAAK,UAAUwD,SACjE1E,EAAEc,MAAMI,KAAK,UAAUwD,QAAQO,UAAYC,SAASlF,EAAEc,MAAMI,KAAK,UAAUoB,KAAM,KAAQ,GAAKqC,OAAQM,WACvGjF,EAAEc,MAAMI,KAAK,UAAUc,UAAW,IACAtB,SAAjCV,EAAEc,MAAMI,KAAK,iBAAiClB,EAAEc,MAAMI,KAAK,mBAAoB,IAGhFlB,EAAEc,MAAMqD,QAAQ,wBAIdrD,KAAKM,cAAchB,OAAS,IACP,IAAvBU,KAAKP,SAASsB,MAAc7B,EAAEc,KAAKO,SAAS2D,KAAK,+BAA+B5E,OAASU,KAAKP,SAASsB,OACxGf,KAAK4C,OAAQ5C,KAAKM,cAAc+D,SAE7BnF,EAAEc,KAAKO,SAAS2D,KAAK,+BAA+B5E,OAAS,GAChEJ,EAAEc,KAAKO,SAAS2D,KAAK,kBAAkBV,QAAQxD,KAAKP,SAAS+C,aAAcxC,KAAKP,SAASiD,MAAO1C,KAAKP,SAASkC,OAAQ,WACrHzC,EAAEc,MAAM8D,YAMXrD,QAAS,SAAS6D,GACjBtE,KAAKO,QAAUrB,EAAEoF,GAAG/E,SAAS,UAAUyD,OAAO,2CAC9ChD,KAAKQ,SAAW+D,YAAa,WAE5B,GAAIC,GAAWtF,EAAEoF,GAAGlE,KAAK,kBACrBR,UAAc4E,GACjBA,EAASP,UAERG,SAASpE,KAAKP,SAAS8B,MAAO,MAIlCkD,SAAU,WACTvF,EAAEc,KAAKO,SAASmE,YAAY,UAC1BR,KAAK,wBAAwBb,QAAQ,gBACrCD,SAASuB,QAGXC,cAAc5E,KAAKQ,WAGpB4B,MAAO,WACNlD,EAAEc,KAAKO,SAAS2D,KAAK,wBAAwBjE,KAAK,WACjDf,EAAEc,MAAMqD,QAAQ,2BAMnBnE,EAAEC,OAAOM,SAAWP,EAAES,GAAGR,OAAO2B,UAAUrB,UAExCoF"} \ No newline at end of file
diff --git a/library/jgrowl/jquery.jgrowl.min.css b/library/jgrowl/jquery.jgrowl.min.css
deleted file mode 100644
index a12f907e5..000000000
--- a/library/jgrowl/jquery.jgrowl.min.css
+++ /dev/null
@@ -1 +0,0 @@
-.jGrowl{z-index:9999;color:#fff;font-size:12px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;position:fixed}.jGrowl.top-left{left:0;top:0}.jGrowl.top-right{right:0;top:0}.jGrowl.bottom-left{left:0;bottom:0}.jGrowl.bottom-right{right:0;bottom:0}.jGrowl.center{top:0;width:50%;left:25%}.jGrowl.center .jGrowl-closer,.jGrowl.center .jGrowl-notification{margin-left:auto;margin-right:auto}.jGrowl-notification{background-color:#000;opacity:.9;filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=(0.9*100));-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=(0.9*100));zoom:1;width:250px;padding:10px;margin:10px;text-align:left;display:none;border-radius:5px;min-height:40px}.jGrowl-notification .ui-state-highlight,.jGrowl-notification .ui-widget-content .ui-state-highlight,.jGrowl-notification .ui-widget-header .ui-state-highlight{border:1px solid #000;background:#000;color:#fff}.jGrowl-notification .jGrowl-header{font-weight:700;font-size:.85em}.jGrowl-notification .jGrowl-close{background-color:transparent;color:inherit;border:none;z-index:99;float:right;font-weight:700;font-size:1em;cursor:pointer}.jGrowl-closer{background-color:#000;opacity:.9;filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=(0.9*100));-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=(0.9*100));zoom:1;width:250px;padding:10px;margin:10px;display:none;border-radius:5px;padding-top:4px;padding-bottom:4px;cursor:pointer;font-size:.9em;font-weight:700;text-align:center}.jGrowl-closer .ui-state-highlight,.jGrowl-closer .ui-widget-content .ui-state-highlight,.jGrowl-closer .ui-widget-header .ui-state-highlight{border:1px solid #000;background:#000;color:#fff}@media print{.jGrowl{display:none}} \ No newline at end of file
diff --git a/library/jgrowl/jquery.jgrowl.min.js b/library/jgrowl/jquery.jgrowl.min.js
deleted file mode 100644
index 418c3db79..000000000
--- a/library/jgrowl/jquery.jgrowl.min.js
+++ /dev/null
@@ -1,2 +0,0 @@
-!function(a){a.jGrowl=function(b,c){0===a("#jGrowl").length&&a('<div id="jGrowl"></div>').addClass(c&&c.position?c.position:a.jGrowl.defaults.position).appendTo(c&&c.appendTo?c.appendTo:a.jGrowl.defaults.appendTo),a("#jGrowl").jGrowl(b,c)},a.fn.jGrowl=function(b,c){if(void 0===c&&a.isPlainObject(b)&&(c=b,b=c.message),a.isFunction(this.each)){var d=arguments;return this.each(function(){void 0===a(this).data("jGrowl.instance")&&(a(this).data("jGrowl.instance",a.extend(new a.fn.jGrowl,{notifications:[],element:null,interval:null})),a(this).data("jGrowl.instance").startup(this)),a.isFunction(a(this).data("jGrowl.instance")[b])?a(this).data("jGrowl.instance")[b].apply(a(this).data("jGrowl.instance"),a.makeArray(d).slice(1)):a(this).data("jGrowl.instance").create(b,c)})}},a.extend(a.fn.jGrowl.prototype,{defaults:{pool:0,header:"",group:"",sticky:!1,position:"top-right",appendTo:"body",glue:"after",theme:"default",themeState:"highlight",corners:"10px",check:250,life:3e3,closeDuration:"normal",openDuration:"normal",easing:"swing",closer:!0,closeTemplate:"&times;",closerTemplate:"<div>[ close all ]</div>",log:function(){},beforeOpen:function(){},afterOpen:function(){},open:function(){},beforeClose:function(){},close:function(){},click:function(){},animateOpen:{opacity:"show"},animateClose:{opacity:"hide"}},notifications:[],element:null,interval:null,create:function(b,c){var d=a.extend({},this.defaults,c);"undefined"!=typeof d.speed&&(d.openDuration=d.speed,d.closeDuration=d.speed),this.notifications.push({message:b,options:d}),d.log.apply(this.element,[this.element,b,d])},render:function(b){var c=this,d=b.message,e=b.options;e.themeState=""===e.themeState?"":"ui-state-"+e.themeState;var f=a("<div/>").addClass("jGrowl-notification alert "+e.themeState+" ui-corner-all"+(void 0!==e.group&&""!==e.group?" "+e.group:"")).append(a("<button/>").addClass("jGrowl-close").html(e.closeTemplate)).append(a("<div/>").addClass("jGrowl-header").html(e.header)).append(a("<div/>").addClass("jGrowl-message").html(d)).data("jGrowl",e).addClass(e.theme).children(".jGrowl-close").bind("click.jGrowl",function(){return a(this).parent().trigger("jGrowl.beforeClose"),!1}).parent();a(f).bind("mouseover.jGrowl",function(){a(".jGrowl-notification",c.element).data("jGrowl.pause",!0)}).bind("mouseout.jGrowl",function(){a(".jGrowl-notification",c.element).data("jGrowl.pause",!1)}).bind("jGrowl.beforeOpen",function(){e.beforeOpen.apply(f,[f,d,e,c.element])!==!1&&a(this).trigger("jGrowl.open")}).bind("jGrowl.open",function(){e.open.apply(f,[f,d,e,c.element])!==!1&&("after"==e.glue?a(".jGrowl-notification:last",c.element).after(f):a(".jGrowl-notification:first",c.element).before(f),a(this).animate(e.animateOpen,e.openDuration,e.easing,function(){a.support.opacity===!1&&this.style.removeAttribute("filter"),null!==a(this).data("jGrowl")&&"undefined"!=typeof a(this).data("jGrowl")&&(a(this).data("jGrowl").created=new Date),a(this).trigger("jGrowl.afterOpen")}))}).bind("jGrowl.afterOpen",function(){e.afterOpen.apply(f,[f,d,e,c.element])}).bind("click",function(){e.click.apply(f,[f,d,e,c.element])}).bind("jGrowl.beforeClose",function(){e.beforeClose.apply(f,[f,d,e,c.element])!==!1&&a(this).trigger("jGrowl.close")}).bind("jGrowl.close",function(){a(this).data("jGrowl.pause",!0),a(this).animate(e.animateClose,e.closeDuration,e.easing,function(){a.isFunction(e.close)?e.close.apply(f,[f,d,e,c.element])!==!1&&a(this).remove():a(this).remove()})}).trigger("jGrowl.beforeOpen"),""!==e.corners&&void 0!==a.fn.corner&&a(f).corner(e.corners),a(".jGrowl-notification:parent",c.element).length>1&&0===a(".jGrowl-closer",c.element).length&&this.defaults.closer!==!1&&a(this.defaults.closerTemplate).addClass("jGrowl-closer "+this.defaults.themeState+" ui-corner-all").addClass(this.defaults.theme).appendTo(c.element).animate(this.defaults.animateOpen,this.defaults.speed,this.defaults.easing).bind("click.jGrowl",function(){a(this).siblings().trigger("jGrowl.beforeClose"),a.isFunction(c.defaults.closer)&&c.defaults.closer.apply(a(this).parent()[0],[a(this).parent()[0]])})},update:function(){a(this.element).find(".jGrowl-notification:parent").each(function(){void 0!==a(this).data("jGrowl")&&void 0!==a(this).data("jGrowl").created&&a(this).data("jGrowl").created.getTime()+parseInt(a(this).data("jGrowl").life,10)<(new Date).getTime()&&a(this).data("jGrowl").sticky!==!0&&(void 0===a(this).data("jGrowl.pause")||a(this).data("jGrowl.pause")!==!0)&&a(this).trigger("jGrowl.beforeClose")}),this.notifications.length>0&&(0===this.defaults.pool||a(this.element).find(".jGrowl-notification:parent").length<this.defaults.pool)&&this.render(this.notifications.shift()),a(this.element).find(".jGrowl-notification:parent").length<2&&a(this.element).find(".jGrowl-closer").animate(this.defaults.animateClose,this.defaults.speed,this.defaults.easing,function(){a(this).remove()})},startup:function(b){this.element=a(b).addClass("jGrowl").append('<div class="jGrowl-notification"></div>'),this.interval=setInterval(function(){var c=a(b).data("jGrowl.instance");void 0!==c&&c.update()},parseInt(this.defaults.check,10))},shutdown:function(){a(this.element).removeClass("jGrowl").find(".jGrowl-notification").trigger("jGrowl.close").parent().empty(),clearInterval(this.interval)},close:function(){a(this.element).find(".jGrowl-notification").each(function(){a(this).trigger("jGrowl.beforeClose")})}}),a.jGrowl.defaults=a.fn.jGrowl.prototype.defaults}(jQuery);
-//# sourceMappingURL=jquery.jgrowl.map \ No newline at end of file
diff --git a/library/jgrowl/less/jgrowl.core.less b/library/jgrowl/less/jgrowl.core.less
deleted file mode 100644
index e3f8d4873..000000000
--- a/library/jgrowl/less/jgrowl.core.less
+++ /dev/null
@@ -1,101 +0,0 @@
-
-.jGrowl {
- z-index: 9999;
- color: @jgrowl-color;
- font-size: @jgrowl-fontSize;
- font-family: @jgrowl-fontFamily;
- position: fixed;
-
- &.top-left {
- left: 0px;
- top: 0px;
- }
-
- &.top-right {
- right: 0px;
- top: 0px;
- }
-
- &.bottom-left {
- left: 0px;
- bottom: 0px;
- }
-
- &.bottom-right {
- right: 0px;
- bottom: 0px;
- }
-
- &.center {
- top: 0px;
- width: 50%;
- left: 25%;
-
- .jGrowl-notification,
- .jGrowl-closer {
- margin-left: auto;
- margin-right: auto;
- }
- }
-}
-
-.notification() {
- background-color: @jgrowl-backgroundColor;
- opacity: @jgrowl-opacity;
- // These are for older versions of Internet Explorer that don't support opacity
- filter: e(%("progid:DXImageTransform.Microsoft.Alpha(Opacity=(%d*100))",@jgrowl-opacity));
- -ms-filter: e(%("progid:DXImageTransform.Microsoft.Alpha(Opacity=(%d*100))",@jgrowl-opacity));
- zoom: 1;
- width: @jgrowl-width;
- padding: 10px;
- margin: 10px;
- text-align: left;
- display: none;
- border-radius: @jgrowl-borderRadius;
-
- .ui-state-highlight,
- .ui-widget-content .ui-state-highlight,
- .ui-widget-header .ui-state-highlight {
- border: 1px solid #000;
- background: #000;
- color: #fff;
- }
-}
-
-.jGrowl-notification {
- .notification;
- min-height: @jgrowl-height;
-
- .jGrowl-header {
- font-weight: bold;
- font-size: .85em;
- }
-
- .jGrowl-close {
- background-color: transparent;
- color: inherit;
- border: none;
- z-index: 99;
- float: right;
- font-weight: bold;
- font-size: 1em;
- cursor: pointer;
- }
-}
-
-.jGrowl-closer {
- .notification;
- padding-top: 4px;
- padding-bottom: 4px;
- cursor: pointer;
- font-size: .9em;
- font-weight: bold;
- text-align: center;
-}
-
-/** Hide jGrowl when printing **/
-@media print {
- .jGrowl {
- display: none;
- }
-}
diff --git a/library/jgrowl/less/jgrowl.less b/library/jgrowl/less/jgrowl.less
deleted file mode 100644
index d55478820..000000000
--- a/library/jgrowl/less/jgrowl.less
+++ /dev/null
@@ -1,2 +0,0 @@
-@import "jgrowl.variables.less";
-@import "jgrowl.core.less"; \ No newline at end of file
diff --git a/library/jgrowl/less/jgrowl.variables.less b/library/jgrowl/less/jgrowl.variables.less
deleted file mode 100644
index ec025cb39..000000000
--- a/library/jgrowl/less/jgrowl.variables.less
+++ /dev/null
@@ -1,8 +0,0 @@
-@jgrowl-width: 250px;
-@jgrowl-height: 40px;
-@jgrowl-backgroundColor: #000;
-@jgrowl-color: #fff;
-@jgrowl-fontSize: 12px;
-@jgrowl-fontFamily: "Helvetica Neue", Helvetica, Arial, sans-serif;
-@jgrowl-opacity: .90;
-@jgrowl-borderRadius: 5px; \ No newline at end of file
diff --git a/library/jgrowl/package.json b/library/jgrowl/package.json
deleted file mode 100644
index 8e523ed84..000000000
--- a/library/jgrowl/package.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
- "name": "jgrowl",
- "version": "1.4.5",
- "author": {
- "name" : "Stan Lemon",
- "email" : "stosh1985@gmail.com",
- "url" : "http://stanlemon.net"
- },
- "src": "jquery.jgrowl.js",
- "style": "jquery.jgrowl.css",
- "repository" : {
- "type" : "git",
- "url" : "http://github.com/stanlemon/jGrowl.git"
- },
- "devDependencies": {
- "grunt": "~0.4.2",
- "grunt-contrib-jshint": "~0.6.3",
- "grunt-contrib-uglify": "~0.4.0",
- "grunt-contrib-cssmin": "~0.9.0",
- "grunt-contrib-less": "~0.11.0",
- "grunt-contrib-watch": "~0.6.1"
- }
-}
diff --git a/tests/phpunit.xml b/tests/phpunit.xml
index a92dd530f..3531cd05c 100644
--- a/tests/phpunit.xml
+++ b/tests/phpunit.xml
@@ -1,11 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<phpunit
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- bootstrap="../boot.php"
- colors="true"
- xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.3/phpunit.xsd"
- >
-
+<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" bootstrap="../boot.php" colors="true" xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/10.5/phpunit.xsd" cacheDirectory=".phpunit.cache">
<php>
<includePath>..</includePath>
<!-- env name="HZ_TEST_DB_HOST" value=""/-->
@@ -24,10 +18,7 @@
<directory suffix="Test.php" prefix="API">./unit/</directory>
</testsuite>
</testsuites>
- <coverage
- processUncoveredFiles="false"
- cacheDirectory=".cache/phpunit"
- >
+ <source>
<include>
<directory suffix=".php">../Zotlabs/</directory>
<directory suffix=".php">../include/</directory>
@@ -35,5 +26,5 @@
<exclude>
<directory suffix=".php">../Zotlabs/Update/</directory>
</exclude>
- </coverage>
+ </source>
</phpunit>
diff --git a/tests/unit/Access/AccessListTest.php b/tests/unit/Access/AccessListTest.php
index 635f09930..feb9efebd 100644
--- a/tests/unit/Access/AccessListTest.php
+++ b/tests/unit/Access/AccessListTest.php
@@ -185,7 +185,7 @@ class AccessListTest extends UnitTestCase {
$this->assertTrue($accessListPrivate->is_private());
}
- public function isprivateProvider() {
+ public static function isprivateProvider() {
return [
'all set' => [[
'channel_allow_cid' => '<acid>',
diff --git a/tests/unit/Access/PermissionRolesTest.php b/tests/unit/Access/PermissionRolesTest.php
index 3d3cbbae5..ccd6df205 100644
--- a/tests/unit/Access/PermissionRolesTest.php
+++ b/tests/unit/Access/PermissionRolesTest.php
@@ -23,6 +23,7 @@
namespace Zotlabs\Tests\Unit\Access;
+use PHPUnit\Framwork\Attributes\IgnoreDeprecations;
use Zotlabs\Tests\Unit\UnitTestCase;
use Zotlabs\Access\PermissionRoles;
use phpmock\phpunit\PHPMock;
@@ -35,6 +36,7 @@ use DMS\PHPUnitExtensions\ArraySubset\Assert;
*
* @covers Zotlabs\Access\PermissionRoles
*/
+#[IgnoreDeprecations]
class PermissionRolesTest extends UnitTestCase {
use PHPMock;
diff --git a/tests/unit/Access/PermissionsTest.php b/tests/unit/Access/PermissionsTest.php
index 3ab567ad0..f9cb25b64 100644
--- a/tests/unit/Access/PermissionsTest.php
+++ b/tests/unit/Access/PermissionsTest.php
@@ -63,14 +63,6 @@ class PermissionsTest extends UnitTestCase {
// There are 17 default perms
$permsCount = 17;
- // Create a stub for global function t() with expectation
- $t = $this->getFunctionMock('Zotlabs\Access', 't');
- $t->expects($this->exactly(2*$permsCount))->willReturnCallback(
- function ($string) {
- return $string;
- }
- );
-
// static method Perms()
$perms = Permissions::Perms();
@@ -97,14 +89,6 @@ class PermissionsTest extends UnitTestCase {
// There are 17 default perms
$permsCount = 17;
- // Create a stub for global function t() with expectation
- $t = $this->getFunctionMock('Zotlabs\Access', 't');
- $t->expects($this->exactly(2*$permsCount))->willReturnCallback(
- function ($string) {
- return $string;
- }
- );
-
$perms = Permissions::Perms('view_');
$this->assertEquals($permsCount, count($perms));
@@ -125,9 +109,6 @@ class PermissionsTest extends UnitTestCase {
* @param array $expected The expected result perms array
*/
public function testFilledPerms($permarr, $expected) {
- // Create a stub for global function t()
- $t = $this->getFunctionMock('Zotlabs\Access', 't');
-
$this->assertEquals($expected, Permissions::FilledPerms($permarr));
}
/**
@@ -135,7 +116,7 @@ class PermissionsTest extends UnitTestCase {
* * \e array Indexed array which is passed as parameter to FilledPerms()
* * \e array Expected associative result array with filled perms
*/
- public function FilledPermsProvider() {
+ public static function FilledPermsProvider() {
return [
'Empty param array' => [
[],
@@ -209,13 +190,6 @@ class PermissionsTest extends UnitTestCase {
* @uses ::call_hooks
*/
public function testFilledPermsNull() {
- // Create a stub for global function t() with expectation
- $t = $this->getFunctionMock('Zotlabs\Access', 't');
- $t->expects($this->atLeastOnce());
- // Create a stub for global function bt() with expectations
- $bt = $this->getFunctionMock('Zotlabs\Access', 'btlogger');
- $bt->expects($this->once())->with($this->equalTo('FilledPerms: null'));
-
$result = [
'view_stream' => 0,
'send_stream' => 0,
@@ -253,7 +227,7 @@ class PermissionsTest extends UnitTestCase {
* * \e array Array with perms to test
* * \e array Expected result array
*/
- public function OPermsProvider() {
+ public static function OPermsProvider() {
return [
'empty' => [
[],
@@ -286,7 +260,7 @@ class PermissionsTest extends UnitTestCase {
* * \e array 2nd array with perms
* * \e boolean expected result for the perms comparison
*/
- public function permsCompareProvider() {
+ public static function permsCompareProvider() {
return [
'equal' => [
['perm1' => 1, 'perm2' => 0],
diff --git a/tests/unit/AntiXSSTest.php b/tests/unit/AntiXSSTest.php
index 1de9d54cd..642224f60 100644
--- a/tests/unit/AntiXSSTest.php
+++ b/tests/unit/AntiXSSTest.php
@@ -31,7 +31,7 @@ class AntiXSSTest extends TestCase {
$this->assertEquals($expected, escape_url($url));
}
- public function urlTestProvider() : array {
+ public static function urlTestProvider() : array {
return [
[
"https://example.com/settings/calendar/?f=&rpath=https://example.com/cdav/calendar'><script>alert('boom')</script>",
diff --git a/tests/unit/CallHooksTest.php b/tests/unit/CallHooksTest.php
new file mode 100644
index 000000000..0170f31d0
--- /dev/null
+++ b/tests/unit/CallHooksTest.php
@@ -0,0 +1,65 @@
+<?php
+/**
+ * Unit tests for the `call_hooks` function, located in include/plugin.php.
+ *
+ * SPDX-FileCopyrightText: 2024 Hubzilla Community
+ * SPDX-FileContributor: Harald Eilertsen
+ *
+ * SPDX-License-Identifier: MIT
+ */
+
+namespace Zotlabs\Tests\Unit;
+
+use PHPUnit\Framework\Attributes\BackupStaticProperties;
+use App;
+
+#[BackupStaticProperties(App::class)]
+class CallHooksTest extends UnitTestCase {
+
+ /**
+ * Test using a freestanding function as callback.
+ *
+ * @SuppressWarnings(PHPMD.EvalExpression)
+ */
+ public function test_freestanding_function_as_string(): void {
+ eval('function hook_test_function(array &$args): void { $args["called"] = true; }');
+ insert_hook('test_hook', 'hook_test_function');
+ $this->assertHookInvoked();
+ }
+
+ public function test_static_class_function_as_string(): void {
+ insert_hook('test_hook', 'Zotlabs\Tests\Unit\CallHooksTest::static_test_hook');
+ $this->assertHookInvoked();
+ }
+
+ public function test_static_class_function_as_array(): void {
+ insert_hook('test_hook', ['Zotlabs\Tests\Unit\CallHooksTest', 'static_test_hook']);
+ $this->assertHookInvoked();
+ }
+
+ public function test_static_class_function_as_serialized_array(): void {
+ insert_hook('test_hook', serialize(['Zotlabs\Tests\Unit\CallHooksTest', 'static_test_hook']));
+ $this->assertHookInvoked();
+ }
+
+ public function test_instance_function_as_array(): void {
+ insert_hook('test_hook', [$this, 'instance_test_hook']);
+ $this->assertHookInvoked();
+ }
+
+
+ public function assertHookInvoked(): void {
+ $test_hook_args = ['called' => false];
+ call_hooks('test_hook', $test_hook_args);
+
+ $this->assertTrue($test_hook_args['called']);
+ }
+
+ public function instance_test_hook(array &$args): void {
+ $args['called'] = true;
+ }
+ public static function static_test_hook(array &$args): void {
+ $args['called'] = true;
+ }
+}
+
diff --git a/tests/unit/CreateIdentityTest.php b/tests/unit/CreateIdentityTest.php
new file mode 100644
index 000000000..a5e0f278a
--- /dev/null
+++ b/tests/unit/CreateIdentityTest.php
@@ -0,0 +1,65 @@
+<?php
+/**
+ * Unit tests for the `create_identity` function.
+ *
+ * SPDX-FileCopyrightText: 2024 Hubzilla Community
+ * SPDX-FileContributor: Harald Eilertsen
+ *
+ * SPDX-License-Identifier: MIT
+ */
+
+namespace Zotlabs\Tests\Unit;
+
+class CreateIdentityTest extends UnitTestCase {
+
+ private bool $queueworker_started = false;
+
+ public function test_empty_args() {
+ insert_hook('proc_run', [$this, 'proc_run_hook']);
+ $result = create_identity([]);
+ $this->assertEquals(
+ ['success' => false, 'message' => 'No account identifier'],
+ $result);
+
+ $this->assertFalse($this->queueworker_started);
+ }
+
+ public function test_create_new_channel_with_valid_account_id(): void {
+ insert_hook('proc_run', [$this, 'proc_run_hook']);
+ $result = create_identity([
+ 'account_id' => $this->fixtures['account'][0]['account_id'],
+ 'nickname' => 'testuser',
+ 'name' => 'Olga Testuser',
+ ]);
+
+ $this->assertTrue($result['success']);
+ $this->assertTrue($this->queueworker_started);
+ }
+
+ public function test_create_new_channel_with_nnexistant_account_id(): void {
+ insert_hook('proc_run', [$this, 'proc_run_hook']);
+ $result = create_identity([
+ 'account_id' => 666,
+ 'nickname' => 'testuser',
+ 'name' => 'Olga Testuser',
+ ]);
+
+ /*
+ * We would expect this fo fail, but...
+ *
+ * The create_identity function will happily create a new channel with an
+ * non-existent account_id. The New_channel module will perform a check
+ * to ensure that only valid (and logged in) accounts can create a new channel.
+ *
+ * This is a bit weak, but for now we let it pass...
+ */
+ $this->assertTrue($result['success']);
+ $this->assertTrue($this->queueworker_started);
+ }
+
+ public function proc_run_hook(array &$args): void {
+ $args['run_cmd'] = false;
+ $this->queueworker_started =
+ $args['args'] === ['php', 'Zotlabs/Daemon/Master.php', 'Queueworker'];
+ }
+}
diff --git a/tests/unit/Lib/ActivityTest.php b/tests/unit/Lib/ActivityTest.php
index c9ce79d8c..0e2703f2b 100644
--- a/tests/unit/Lib/ActivityTest.php
+++ b/tests/unit/Lib/ActivityTest.php
@@ -19,7 +19,7 @@ class ActivityTest extends UnitTestCase {
/**
* Dataprovider for test_get_textfield.
*/
- private function get_textfield_provider(): array {
+ public static function get_textfield_provider(): array {
return [
'get content field' => [
['content' => 'Some content'],
diff --git a/tests/unit/Lib/PermissionDescriptionTest.php b/tests/unit/Lib/PermissionDescriptionTest.php
index fdd676f61..1e4b5292c 100644
--- a/tests/unit/Lib/PermissionDescriptionTest.php
+++ b/tests/unit/Lib/PermissionDescriptionTest.php
@@ -46,16 +46,6 @@ class PermissionDescriptionTest extends UnitTestCase {
}
public function testFromStandalonePermission() {
- // Create a stub for global function t()
- $t = $this->getFunctionMock('Zotlabs\Lib', 't');
- $t->expects($this->atLeastOnce())->willReturnCallback(
- function ($string) {
- return $string;
- }
- );
- // Create a mock for global function logger()
- $this->getFunctionMock('Zotlabs\Lib', 'logger');
-
$permDescUnknown = PermissionDescription::fromStandalonePermission(-1);
$permDescSelf = PermissionDescription::fromStandalonePermission(0);
@@ -113,16 +103,6 @@ class PermissionDescriptionTest extends UnitTestCase {
}
public function testGetPermissionDescription() {
- // Create a stub for global function t()
- $t = $this->getFunctionMock('Zotlabs\Lib', 't');
- $t->expects($this->atLeastOnce())->willReturnCallback(
- function ($string) {
- return $string;
- }
- );
- // Create a mock for global function logger()
- $this->getFunctionMock('Zotlabs\Lib', 'logger');
-
// Create a stub for the PermissionDescription class
$stub = $this->createMock(PermissionDescription::class);
$stub->method('get_permission_description')
diff --git a/tests/unit/Lib/ZotlibTest.php b/tests/unit/Lib/ZotlibTest.php
new file mode 100644
index 000000000..0ab89dc2f
--- /dev/null
+++ b/tests/unit/Lib/ZotlibTest.php
@@ -0,0 +1,38 @@
+<?php
+namespace Zotlabs\Tests\Unit\Lib;
+
+use Zotlabs\Tests\Unit\UnitTestCase;
+
+class ZotlibTest extends UnitTestCase {
+ /**
+ * Test the `get_rpost_path` function.
+ *
+ * @dataProvider get_rpost_path_provider
+ */
+ public function test_get_rpost_path(string $expected, string $xchan_url) : void {
+ $observer = [ 'xchan_url' => $xchan_url ];
+
+ $this->assertEquals($expected, \Zotlabs\Lib\Libzot::get_rpost_path($observer));
+ }
+
+ public static function get_rpost_path_provider() : array {
+ return [
+ 'xchan_url without port' => [
+ 'https://example.com/rpost?f=',
+ 'https://example.com'
+ ],
+ 'xchan_url with port' => [
+ 'https://example.com:666/rpost?f=',
+ 'https://example.com:666'
+ ],
+ 'xchan_url ignores path and args' => [
+ 'https://example.com/rpost?f=',
+ 'https://example.com/path?arg1=balle'
+ ],
+ 'xchan_url with no scheme should default to https' => [
+ 'https://example.com/rpost?f=',
+ 'example.com',
+ ],
+ ];
+ }
+}
diff --git a/tests/unit/Module/HelpTest.php b/tests/unit/Module/HelpTest.php
new file mode 100644
index 000000000..c345d5e52
--- /dev/null
+++ b/tests/unit/Module/HelpTest.php
@@ -0,0 +1,179 @@
+<?php
+/**
+ * SPDX-FileCopyrightText: 2024 Harald Eilertsen
+ * SPDX-FileCopyrightText: 2024 Hubzilla Community
+ *
+ * SPDX-License-Identifier: MIT
+ */
+
+class HelpTest extends \Zotlabs\Tests\Unit\Module\TestCase {
+
+ use \phpmock\phpunit\PHPMock;
+
+ /**
+ * Define the stubs to make sure they work later in the test.
+ *
+ * @see https://php-mock.github.io/php-mock-phpunit/api/class-phpmock.phpunit.PHPMock.html#_defineFunctionMock
+ *
+ * @beforeClass
+ */
+ public static function define_stubs(): void {
+ self::defineFunctionMock('Zotlabs\Lib\Traits', 'file_exists');
+ self::defineFunctionMock('Zotlabs\Module', 'file_get_contents');
+ }
+
+ /**
+ * Test getting a help page when the underlying file exists.
+ *
+ * @testWith
+ * ["md"]
+ * ["bb"]
+ * ["html"]
+ */
+ public function test_get_request_when_help_file_exists(string $ext): void {
+ // Stub file exists, to only retur true for the file with the current
+ // extension
+ $fe_stub = $this->getFunctionMock('Zotlabs\Lib\Traits', 'file_exists');
+ $fe_stub
+ ->expects($this->any())
+ ->willReturnCallback(
+ fn (string $path) => $path === "doc/en/about/help_topic.{$ext}"
+ );
+
+ // Use a value map to make the `file_get_contents` stub return the
+ // correct content for the file types.
+ $file_content_map = [
+ [ 'doc/en/about/help_topic.md', "### Help heading\n\$Projectname help content" ],
+ [ 'doc/en/about/help_topic.bb', "[h3]Help heading[/h3]\n\n\$Projectname help content" ],
+ [ 'doc/en/about/help_topic.html', "<h3>Help heading</h3><p>\$Projectname help content</p>" ],
+ ];
+
+ // Stub `file_get_contents` to plant our own content.
+ $fgc_stub = $this->getFunctionMock('Zotlabs\Module', 'file_get_contents');
+ $fgc_stub
+ ->expects($this->once())
+ ->willReturnMap($file_content_map);
+
+
+ $this->get("help/about/help_topic");
+
+ // Check that markdown content was correctly rendered
+ $this->assertPageContains('<h3>Help heading</h3>');
+
+ // Check that `$Projectname` has been translated properly
+ $this->assertPageContains('Hubzilla help content');
+
+ // Check that heading has been set
+ $this->assertPageContains('Hubzilla Documentation: About');
+
+ // Check that page title has been set
+ $this->assertTrue(isset(\App::$page['title']), 'Page title not set');
+ $this->assertStringContainsString('Help', \App::$page['title']);
+ $this->assertStringContainsStringIgnoringCase('Help Topic', \App::$page['title']);
+
+ // Check that nav selection has been set
+ $this->assertTrue(isset(\App::$nav_sel['raw_name']), 'Nav selection raw name not set');
+ $this->assertEquals('Help', \App::$nav_sel['raw_name']);
+
+ $this->assertTrue(isset(\App::$nav_sel['name']), 'Navselection name not set');
+ $this->assertEquals('Help', \App::$nav_sel['name']);
+ }
+
+ public function test_get_request_should_return_404_when_help_file_does_not_exist(): void {
+ // Stub file exists, to only retur true for the file with the current
+ // extension
+ $fe_stub = $this->getFunctionMock('Zotlabs\Lib\Traits', 'file_exists');
+ $fe_stub
+ ->expects($this->any())
+ ->willReturn(false);
+
+ // Make sure `file_get_contents` is never called by the code.
+ $fgc_stub = $this->getFunctionMock('Zotlabs\Module', 'file_get_contents');
+ $fgc_stub->expects($this->never());
+
+ $this->get("help/this_topic_does_not_exist");
+
+ $this->assertPageContains('not found');
+ }
+
+ public function test_get_request_without_args_redirects_to_about_page(): void {
+ $this->stub_goaway();
+ $this->expectException(\Zotlabs\Tests\Unit\Module\RedirectException::class);
+ $this->expectExceptionMessage('about/about');
+
+ $this->get('help');
+ }
+
+ public function test_find_help_file_returns_first_match(): void {
+ // Stub file exists, to always return true
+ $fe_stub = $this->getFunctionMock('Zotlabs\Lib\Traits', 'file_exists');
+ $fe_stub
+ ->expects($this->once())
+ ->willReturn(true);
+
+ // Stub `file_get_contents` to plant our own content.
+ $fgc_stub = $this->getFunctionMock('Zotlabs\Module', 'file_get_contents');
+ $fgc_stub
+ ->expects($this->once())
+ ->with('doc/en/first.md')
+ ->willReturn('found');
+
+ $this->get('help/first');
+ }
+
+ public function test_includes(): void {
+ // Stub `file_get_contents` to plant our own content.
+ $fgc_stub = $this->getFunctionMock('Zotlabs\Module', 'file_get_contents');
+ $fgc_stub
+ ->expects($this->any())
+ ->willReturnCallback(
+ function (string $path): string {
+ if ($path === 'doc/en/sub.md') {
+ return "### This is the included file.";
+ } else {
+ return "### Main topic\n\n#include doc/en/sub.md;";
+ }
+ }
+ );
+
+ // Stub file exists, to always return true
+ $fe_stub = $this->getFunctionMock('Zotlabs\Lib\Traits', 'file_exists');
+ $fe_stub
+ ->expects($this->any())
+ ->willReturn(true);
+
+ $this->get('help/main');
+
+ $this->assertPageContains('<h3>This is the included file.</h3>');
+ }
+
+ public function test_include_file_of_different_type_than_main_file(): void {
+ // Stub `file_get_contents` to plant our own content.
+ $fgc_stub = $this->getFunctionMock('Zotlabs\Module', 'file_get_contents');
+ $fgc_stub
+ ->expects($this->any())
+ ->willReturnCallback(
+ function (string $path): string {
+ if ($path === 'doc/en/sub.md') {
+ return "### This is the included file.";
+ } else {
+ return "[h3]Main topic[/h3]\n\n#include doc/en/sub.md;";
+ }
+ }
+ );
+
+ // Stub file exists, only return true for main.bb and sub.md
+ $fe_stub = $this->getFunctionMock('Zotlabs\Lib\Traits', 'file_exists');
+ $fe_stub
+ ->expects($this->any())
+ ->willReturnCallback(
+ fn (string $path) => (
+ $path === 'doc/en/main.bb' || $path === 'doc/en/sub.md'
+ )
+ );
+
+ $this->get('help/main');
+
+ $this->assertPageContains('<h3>This is the included file.</h3>');
+ }
+}
diff --git a/tests/unit/Module/RbmarkTest.php b/tests/unit/Module/RbmarkTest.php
new file mode 100644
index 000000000..594e7369b
--- /dev/null
+++ b/tests/unit/Module/RbmarkTest.php
@@ -0,0 +1,80 @@
+<?php
+/**
+ * Unit/integration tests for the Rbmark module.
+ *
+ * SPDX-FileCopyrightText: 2024 Hubzilla Community
+ *
+ * SPDX-License-Identifier: MIT
+ */
+
+class RbmarkTest extends \Zotlabs\Tests\Unit\Module\TestCase {
+ public function test_unauthenticated_get_request_return_login_form(): void {
+ $lc_stub = $this->getFunctionMock('Zotlabs\Module', 'local_channel');
+ $lc_stub
+ ->expects($this->once())
+ ->willReturn(false);
+
+ $this->get('rbmark', ['url' => 'https://bookmarked.url']);
+
+ $this->assertPageContains('value="login" />');
+
+ // also check that the original query is saved in the session
+ $this->assertEquals('https://bookmarked.url', $_SESSION['bookmark']['url']);
+ $this->assertEquals('rbmark', $_SESSION['bookmark']['q']);
+ }
+
+ public function test_authenticated_get_request_returns_save_bookmark_form(): void {
+ $lc_stub = $this->getFunctionMock('Zotlabs\Module', 'local_channel');
+ $lc_stub
+ ->expects($this->once())
+ ->willReturn(42);
+
+ $this->get('rbmark', [
+ 'url' => 'https://bookmarked.url',
+ 'title' => 'My bookmark',
+ ]);
+
+ $this->assertPageContains('<form action="rbmark" method="post"');
+ $this->assertPageContains('URL of bookmark');
+ $this->assertPageContains('value="https://bookmarked.url"');
+ $this->assertPageContains('value="My bookmark"');
+ }
+
+ public function test_that_params_are_escaped_in_save_bookmark_form(): void {
+ $lc_stub = $this->getFunctionMock('Zotlabs\Module', 'local_channel');
+ $lc_stub
+ ->expects($this->once())
+ ->willReturn(42);
+
+ $this->get('rbmark', [
+ 'url' => 'https://bookmarked.url" onload="alert(/boom/)',
+ 'title' => 'My bookmark"><script alert(/boom/);</script>',
+ ]);
+
+ $this->assertPageContains('value="https://bookmarked.url&quot; onload=&quot;alert(/boom/)');
+ $this->assertPageContains('value="My bookmark&quot;&gt;&lt;script alert(/boom/);&lt;/script&gt;');
+ }
+
+ public function test_that_existing_bookmark_folders_are_listed(): void {
+ $lc_stub = $this->getFunctionMock('Zotlabs\Module', 'local_channel');
+ $lc_stub
+ ->expects($this->once())
+ ->willReturn(42);
+
+ $menu_id = menu_create([
+ 'menu_name' => 'My bookmarks',
+ 'menu_desc' => 'A collection of my bookmarks',
+ 'menu_flags' => MENU_BOOKMARK,
+ 'menu_channel_id' => 42,
+ ]);
+
+ $this->get('rbmark', [
+ 'url' => 'https://bookmarked.url',
+ 'title' => 'My bookmark',
+ ]);
+
+ $this->assertPageContains(
+ "<option value=\"{$menu_id}\" >My bookmarks</option>"
+ );
+ }
+}
diff --git a/tests/unit/Module/RpostTest.php b/tests/unit/Module/RpostTest.php
new file mode 100644
index 000000000..ad94f2f06
--- /dev/null
+++ b/tests/unit/Module/RpostTest.php
@@ -0,0 +1,81 @@
+<?php
+/**
+ * Tests for Rpost module.
+ *
+ * SPDX-FileCopyrightText: 2024 Hubzilla Community
+ * SPDX-FileContributor: Harald Eilertsen
+ *
+ * SPDX-License-Identifier: MIT
+ */
+
+class RpostTest extends \Zotlabs\Tests\Unit\Module\TestCase {
+
+ /**
+ * Basic test of a get request with no args as an authenticated user.
+ */
+ public function test_get_with_no_args(): void {
+ $this->get_authenticated();
+
+ $this->assertPageContains('<form id="profile-jot-form"');
+ $this->assertPageContains('<input type="hidden" name="profile_uid" value="42"');
+ }
+
+ /**
+ * Display login form if session is not authenticated.
+ */
+ public function test_display_login_form_if_not_logged_in(): void {
+ $lc_mock = $this->getFunctionMock('Zotlabs\Module', 'local_channel')
+ ->expects($this->any())
+ ->willReturn(false);
+
+ $this->get('rpost');
+
+ $this->assertPageContains('<form action="https://hubzilla.test/rpost" id="main_login"');
+ }
+
+ public function test_populates_form_from_query_params(): void {
+ $this->get_authenticated([
+ 'title' => 'This is my title',
+ 'body' => 'The body of the post',
+ 'source' => 'The temple of the Dagon',
+ ]);
+
+ $this->assertPageContains('value="This is my title"');
+ $this->assertPageContains('>The body of the post</textarea>');
+ $this->assertPageContains('value="The temple of the Dagon"');
+ }
+
+ public function test_convert_body_from_html_to_bbcode(): void {
+ $this->get_authenticated([
+ 'body' => "<h1>Awesome page</h1>\r\n<p>Awesome content!</p>",
+ 'type' => 'html',
+ ]);
+
+ $this->assertPageContains(">[h1]Awesome page[/h1]\n\nAwesome content!</textarea>");
+ }
+
+ /**
+ * Private helper method to perform an authenticated GET request.
+ *
+ * @param array $query An associative array of query parameters.
+ */
+ private function get_authenticated(array $query = []): void {
+ // Mock `local_chanel()` to emulate a valid logged in channel
+ $lc_mock = $this->getFunctionMock('Zotlabs\Module', 'local_channel')
+ ->expects($this->any())
+ ->willReturn(42);
+
+ // Set basic access controls to keep AccessList happy.
+ \App::$channel = [
+ 'channel_id' => 42,
+ 'channel_location' => null,
+ 'channel_address' => '',
+ 'channel_allow_cid' => '',
+ 'channel_allow_gid' => '',
+ 'channel_deny_cid' => '',
+ 'channel_deny_gid' => '',
+ ];
+
+ $this->get('rpost', $query);
+ }
+}
diff --git a/tests/unit/Module/SetupTest.php b/tests/unit/Module/SetupTest.php
new file mode 100644
index 000000000..3575dd477
--- /dev/null
+++ b/tests/unit/Module/SetupTest.php
@@ -0,0 +1,76 @@
+<?php
+/**
+ * SPDX-FileCopyrightText: 2024 Harald Eilertsen
+ * SPDX-FileCopyrightText: 2024 Hubzilla Community
+ *
+ * SPDX-License-Identifier: MIT
+ */
+
+namespace Zotlabs\Tests\Unit\Module;
+
+/**
+ * SetupModuleTest
+ *
+ * The Setup module should only be available during site installation. This is
+ * determined by whether there are any accounts present in the database, or
+ * not.
+ *
+ * This is a complex module, so expect the tests to grow as more of it will be
+ * covered.
+ */
+class SetupTest extends TestCase {
+
+ public function test_that_setup_is_available_if_no_accounts_in_db(): void {
+ $this->with_no_accounts_in_db();
+ $this->get('setup');
+
+ $this->assertEquals('setup', \App::$page['page_title']);
+
+ // Assert that result _don't_ match "Permission denied"
+ $this->assertThat(
+ \App::$page['content'],
+ $this->logicalNot(
+ $this->matchesRegularExpression('/Permission denied/')
+ )
+ );
+ }
+
+ public function test_that_setup_is_not_available_if_accounts_in_db(): void {
+ // The fixtures loaded by default add a couple of accounts.
+ $this->get('setup');
+
+ $this->assertEquals('setup', \App::$page['page_title']);
+ $this->assertMatchesRegularExpression('/Permission denied/', \App::$page['content']);
+ }
+
+ public function test_that_setup_testrewrite_returns_ok(): void {
+ // We need to stub the `killme` function, as it is called directly from
+ // the code under test.
+ $this->stub_killme();
+
+ $output = '';
+
+ // Turn on output buffering, as code under test echoes
+ // directly to the output
+ ob_start();
+ try {
+ $this->get('setup/testrewrite');
+ } catch (\Zotlabs\Tests\Unit\Module\KillmeException) {
+ $output = ob_get_contents();
+ }
+
+ $this->assertEquals('ok', $output);
+
+ ob_end_clean();
+ }
+
+ /**
+ * Delete all accounts from the database.
+ *
+ * This is currently needed because we automatically import the database
+ * fixtures on test start, which contains a couple of accounts already.
+ */
+ private function with_no_accounts_in_db(): void {
+ q('DELETE FROM account;');
+ }
+}
diff --git a/tests/unit/Module/TestCase.php b/tests/unit/Module/TestCase.php
new file mode 100644
index 000000000..e92bc7083
--- /dev/null
+++ b/tests/unit/Module/TestCase.php
@@ -0,0 +1,192 @@
+<?php
+/**
+ * This file contains the base class for module test cases.
+ *
+ * SPDX-FileCopyrightText: 2024 Hubzilla Community
+ * SPDX-FileContributor: Harald Eilertsen
+ *
+ * SPDX-License-Identifier: MIT
+ */
+
+namespace Zotlabs\Tests\Unit\Module;
+
+use Zotlabs\Tests\Unit\UnitTestCase;
+use App;
+
+/**
+ * Base class for writing module tests.
+ *
+ * This test class adds a number of helper methods to the base from
+ * the UnitTestCase class, useful when testing Modules (Controllers)
+ * that handle incoming requests.
+ */
+class TestCase extends UnitTestCase {
+
+ // Import PHPMock methods into this class
+ use \phpmock\phpunit\PHPMock;
+
+ /**
+ * Emulate a GET request.
+ *
+ * @param string $uri The URI to request. Typically this will be the module
+ * name, followed by any req args separated by slashes.
+ * @param array $query Assciative array of query args, with the parameters
+ * as keys.
+ */
+ protected function get(string $uri, array $query = []): void {
+ $_GET['q'] = $uri;
+
+ if (!empty($query)) {
+ $_GET = array_merge($_GET, $query);
+ }
+
+ $_SERVER['REQUEST_METHOD'] = 'GET';
+ $_SERVER['SERVER_PROTOCOL'] = 'HTTP/1.1';
+ $_SERVER['QUERY_STRING'] = "q={$uri}";
+ // phpcs:disable Generic.PHP.DisallowRequestSuperglobal.Found
+ $_REQUEST = $_GET;
+ // phpcs::enable
+
+ \App::init();
+ \App::$page['content'] = '';
+
+ $router = new \Zotlabs\Web\Router();
+ $router->Dispatch();
+ }
+
+ /**
+ * Helper to simplify asserting contents in the rendered page.
+ *
+ * @param string $needle The expected string to find.
+ */
+ protected function assertPageContains(string $needle): void {
+ $this->assertStringContainsString($needle, App::$page['content']);
+ }
+
+ /**
+ * Stub out the `killme` function.
+ *
+ * Useful for testing modules that call this function directly.
+ *
+ * Instead of calling exit, the stub will throw a `KillmeException`,
+ * that can be caught by the test code to regain control after request
+ * processing is terminated.
+ *
+ * **Example:**
+ *
+ * public function test_something(): void {
+ * $this->stub_killme();
+ *
+ * try {
+ * killme();
+ * } catch (KillmeException $e) {
+ * $this->assertSomething(...);
+ * }
+ * }
+ *
+ * It's also possible to use the builting PHPUnit expecations to verify
+ * that the function was called.
+ *
+ * public function test_something(): void {
+ * $this->stub_killme();
+ * $this->expectException(KillmeException::class);
+ *
+ * killme();
+ * }
+ *
+ * This is useful if you only want to check that processing was terminated
+ * with the `killme()` function.
+ *
+ * @throws KillmeException
+ */
+ protected function stub_killme(): void {
+ $killme_stub = $this->getFunctionMock('Zotlabs\Module', 'killme');
+ $killme_stub
+ ->expects($this->once())
+ ->willReturnCallback(
+ function () {
+ throw new KillmeException();
+ }
+ );
+ }
+
+ /**
+ * Stub out the `goaway` function.
+ *
+ * Useful for testing modules that calls this function directly.
+ *
+ * Instead of calling `killme()`, the stub will throw a RedirectException
+ * with the target URL as the exception message. This allows the test code
+ * to regain control after request processing is terminated.
+ *
+ * **Example:**
+ *
+ * public function test_redirect(): void {
+ * $this->stub_goaway();
+ *
+ * try {
+ * goaway('https://example.com/some_uri');
+ * } catch (RedirectException $e) {
+ * $this->assertEquals('https://example.com/some_uri', $e->getMessage());
+ * $this->assertSomethingElse(...);
+ * }
+ * }
+ * It's also possible to use the builting PHPUnit expecations to verify
+ * that the function was called.
+ *
+ * public function test_something(): void {
+ * $this->stub_goaway();
+ * $this->expectException(RedirectException::class);
+ * $this->expectExceptionMessage('https://example.com/some_uri');
+ *
+ * goaway('https://example.com/some_uri');
+ * }
+ *
+ * This is useful if you only want to check that the request was redirected.
+ *
+ * @throws RedirectException
+ */
+ protected function stub_goaway(): void {
+ $goaway_stub = $this->getFunctionMock('Zotlabs\Module', 'goaway');
+ $goaway_stub
+ ->expects($this->once())
+ ->willReturnCallback(
+ function (string $uri) {
+ throw new RedirectException($uri);
+ }
+ );
+ }
+
+ /**
+ * Shorthand function to expect a redirect to a given URL.
+ *
+ * **Example:**
+ *
+ * public function test_redirect(): void {
+ * $this->expectRedirectTo('https://example.com/some_uri');
+ * goaway('https://example.com/some_uri');
+ * }
+ */
+ protected function expectRedirectTo(string $destination): void {
+ $this->stub_goaway();
+ $this->expectException(RedirectException::class);
+ $this->expectExceptionMessage($destination);
+ }
+}
+
+/**
+ * Exception class for killme stub
+ */
+class KillmeException extends \Exception {}
+
+/**
+ * Exception class for goaway stub.
+ *
+ * Takes the goaway uri as an arg, and makes it available to the catch
+ * site via the `getMessage()` method.
+ */
+class RedirectException extends \Exception {
+ function __construct(string $uri) {
+ parent::__construct($uri);
+ }
+}
diff --git a/tests/unit/Photo/PhotoGdTest.php b/tests/unit/Photo/PhotoGdTest.php
index 1324043c4..7ef07864c 100644
--- a/tests/unit/Photo/PhotoGdTest.php
+++ b/tests/unit/Photo/PhotoGdTest.php
@@ -130,21 +130,8 @@ class PhotoGdTest extends UnitTestCase {
* Tests PhotoGd->imageString()
*/
public function testImagestringReturnsABinaryString() {
- // Create a stub for global function get_config()
- // get_config('system', 'png_quality')
- // get_config('system', 'jpeg_quality');
- $gc = $this->getFunctionMock('Zotlabs\Photo', 'get_config');
- $gc->expects($this->once())->willReturnCallback(
- function() {
- switch($this->photoGd->getType()){
- case 'image/png':
- return 7;
- case 'image/jpeg':
- default:
- return 70;
- }
- }
- );
+ // Init config with a known value for the test
+ \Zotlabs\Lib\Config::Set('system', 'png_quality', 7);
$this->assertIsString($this->photoGd->imageString());
}
diff --git a/tests/unit/UnitTestCase.php b/tests/unit/UnitTestCase.php
index a4ea94b13..afc309205 100644
--- a/tests/unit/UnitTestCase.php
+++ b/tests/unit/UnitTestCase.php
@@ -22,8 +22,8 @@
namespace Zotlabs\Tests\Unit;
+use PHPUnit\Framework\Attributes\{Before, After};
use PHPUnit\Framework\TestCase;
-use PHPUnit\Framework\TestResult;
/*
* Make sure global constants and the global App object is available to the
@@ -31,49 +31,78 @@ use PHPUnit\Framework\TestResult;
*/
require_once __DIR__ . '/../../boot.php';
require_once 'include/dba/dba_driver.php' ;
+require_once 'include/dba/dba_transaction.php';
/**
- * @brief Base class for our Unit Tests.
+ * Base class for our Unit Tests.
*
- * Empty class at the moment, but you should extend this class for unit test
- * cases, so we could and for sure we will need to implement basic behaviour
- * for all of our unit tests.
+ * Base class for Hubzilla unit/integration tests. This extends the base
+ * TestCase class from PHPUnit by connecting to a test database, and making the
+ * database connection available to the code under test via the normal Hubzilla
+ * mechanisms, i.e the \DBA::$dba global variable.
*
- * @author Klaus Weidenbach
+ * It also automatically loads database fixtures from yaml files in the
+ * tests/unit/includes/dba/_files directory. And wraps each test run in it's
+ * own database transaction.
*/
class UnitTestCase extends TestCase {
protected array $fixtures = array();
+ protected ?\DbaTransaction $db_transacton = null;
/**
- * Override the PHPUnit\Framework\TestCase::run method, so we can
- * wrap it in a database transaction.
+ * Connect to the test db, load fixtures and global config.
*
- * @SuppressWarnings(PHPMD.UnusedLocalVariable)
+ * This function is executed before every test.
+ *
+ * The transaction is rolled back in the `cleanup_test_db()` function
+ * that's executed after every test.
*/
- public function run(TestResult $result = null): TestResult {
- // $myclass = get_class($this);
- // logger("[*] Running test: {$myclass}::{$this->getName(true)}", LOGGER_DEBUG);
-
+ #[Before]
+ protected function setup_test_db(): void {
if (! \DBA::$dba) {
- //logger('[*] Connecting to test db...');
$this->connect_to_test_db();
}
// The $transactuion variable is needed to hold the transaction until the
// function returns.
- $transaction = new \DbaTransaction(\DBA::$dba);
+ $this->db_transaction = new \DbaTransaction(\DBA::$dba);
$this->loadFixtures();
// Make sure app config is reset and loaded from fixtures
\App::$config = array();
\Zotlabs\Lib\Config::Load('system');
+ }
- $result = parent::run($result);
-
- return $result;
+ /**
+ * Roll back test database to it's original state, cleaning up
+ * any changes from the test.
+ *
+ * This function is executes after evert tests.
+ */
+ #[After]
+ protected function cleanup_test_db(): void {
+ // Setting the transaction to `null`, runs the destructor
+ // which rolls backk the transacton.
+ $this->db_transaction = null;
}
+ /**
+ * Connect to the test database,
+ *
+ * By default it will connect to a MySQL database with the following settings:
+ *
+ * - HZ_TEST_DB_HOST: db
+ * - HZ_TEST_DB_PORT: default
+ * - HZ_TEST_DB_USER: test_user
+ * - HZ_TEST_DB_PASS: hubzilla
+ * - HZ_TEST_DB_DATABASE: hubzilla_test_db
+ * - HZ_TEST_DB_TYPE: mysql (can also be "postgres")
+ * - HZ_TEST_DB_CHARSET: UTF8
+ *
+ * All of these settings can be overridden by the test runner by setting ENV vars
+ * named as above with the values you want to override.
+ */
protected function connect_to_test_db() : void {
if ( !\DBA::$dba ) {
\DBA::dba_factory(
@@ -101,6 +130,14 @@ class UnitTestCase extends TestCase {
}
}
+ /**
+ * Return the database type from a string.
+ *
+ * @param string $type The database type, can be either mysql or postgres.
+ *
+ * @return The database type constant matching the passed in type, or DBTYPE_MYSQL
+ * if $type is empty or invalid.
+ */
private static function dbtype(string $type): int {
if (trim(strtolower($type)) === 'postgres') {
return DBTYPE_POSTGRES;
@@ -109,6 +146,9 @@ class UnitTestCase extends TestCase {
}
}
+ /**
+ * Load database fixtures from the fixture path.
+ */
private function loadFixtures() : void {
$files = glob(__DIR__ . '/includes/dba/_files/*.yml');
if ($files === false || empty($files)) {
@@ -117,6 +157,21 @@ class UnitTestCase extends TestCase {
array_walk($files, fn($file) => $this->loadFixture($file));
}
+ /**
+ * Load database fixtures from a specific file.
+ *
+ * The file must be a yaml file named the same as the table in the database
+ * it should populate.
+ *
+ * The file also need to have a root key with the same name as the table.
+ * Under which it contains an array of rows that should be inserted into
+ * the db table.
+ *
+ * @param string $file The path and filename of the fixture to load.
+ * The path name is relative to the current working
+ * directory of the process, which should normally
+ * be the Hubzilla root directory.
+ */
private function loadFixture($file) : void {
$table_name = basename($file, '.yml');
$this->fixtures[$table_name] = yaml_parse_file($file)[$table_name];
diff --git a/tests/unit/Web/HttpSigTest.php b/tests/unit/Web/HttpSigTest.php
index 0a22b543a..d705be4ff 100644
--- a/tests/unit/Web/HttpSigTest.php
+++ b/tests/unit/Web/HttpSigTest.php
@@ -46,7 +46,7 @@ class HttpSigTest extends UnitTestCase {
HTTPSig::generate_digest_header($text)
);
}
- public function generate_digestProvider() {
+ public static function generate_digestProvider() {
return [
'empty body text' => [
'',
@@ -84,9 +84,8 @@ class HttpSigTest extends UnitTestCase {
}
function testDecrypt_sigheaderUseSitePrivateKey() {
- // Create a stub for global function get_config() with expectation
- $t = $this->getFunctionMock('Zotlabs\Web', 'get_config');
- $t->expects($this->once())->willReturn('system.prvkey');
+ // Initialize config with a known value for test
+ \Zotlabs\Lib\Config::Set('system', 'prvkey', 'system.prvkey');
$header = 'Header: iv="value_iv" key="value_key" alg="value_alg" data="value_data"';
$result = [
diff --git a/tests/unit/Widget/HelpindexTest.php b/tests/unit/Widget/HelpindexTest.php
new file mode 100644
index 000000000..26aa34104
--- /dev/null
+++ b/tests/unit/Widget/HelpindexTest.php
@@ -0,0 +1,80 @@
+<?php
+/**
+ * Tests for the Helpindex widget.
+ *
+ * SPDX-FileCopyrightText: 2024 Harald Eilertsen
+ * SPDX-FileCopyrightText: 2024 Hubzilla Community
+ *
+ * SPDX-License-Identifier: MIT
+ */
+
+/**
+ * Test class for testing the Helpindex widget.
+ */
+class HelpindexTest extends \Zotlabs\Tests\Unit\Module\TestCase {
+
+ use \phpmock\phpunit\PHPMock;
+
+ /**
+ * Define the stubs to make sure they work later in the test.
+ *
+ * @see https://php-mock.github.io/php-mock-phpunit/api/class-phpmock.phpunit.PHPMock.html#_defineFunctionMock
+ *
+ * @beforeClass
+ */
+ public static function define_stubs(): void {
+ self::defineFunctionMock('Zotlabs\Lib\Traits', 'file_exists');
+ self::defineFunctionMock('Zotlabs\Widget', 'file_get_contents');
+ }
+
+ public function test_loading_toc(): void {
+ // Stub `file_get_contents` to plant our own content.
+ $fgc_stub = $this->getFunctionMock('Zotlabs\Widget', 'file_get_contents');
+ $fgc_stub
+ ->expects($this->once())
+ ->with($this->equalTo('doc/en/toc.html'))
+ ->willReturn('toc');
+
+ // Stub `file_exists` to only return true for the english toc file
+ $fe_stub = $this->getFunctionMock('Zotlabs\Lib\Traits', 'file_exists');
+ $fe_stub
+ ->expects($this->any())
+ ->willReturnCallback(fn (string $path) => $path === 'doc/en/toc.html' );
+
+ $this->render_widget();
+ $this->assertOutputContains('toc');
+ //$this->assertOutputContains('Help Content');
+ }
+
+ public function test_that_result_is_empty_when_toc_not_present(): void {
+ // Ensure `file_get_contents` is not called during the test.
+ $fgc_stub = $this->getFunctionMock('Zotlabs\Widget', 'file_get_contents');
+ $fgc_stub->expects($this->never());
+
+ // Stub `file_exists` to always return false to simulate that we
+ // can't find the toc file.
+ $fe_stub = $this->getFunctionMock('Zotlabs\Lib\Traits', 'file_exists');
+ $fe_stub
+ ->expects($this->any())
+ ->willReturn(false);
+
+ $this->render_widget();
+ }
+
+ /**
+ * Initializes the app and calls the widget code.
+ */
+ private function render_widget(): void {
+ $_GET['q'] = 'help/en/about/about';
+ $_SERVER['REQUEST_METHOD'] = 'GET';
+
+ \App::init();
+
+ $widget = new \Zotlabs\Widget\Helpindex();
+ $this->output = $widget->widget([]);
+ }
+
+ private function assertOutputContains(string $needle): void {
+ $this->assertStringContainsString($needle, $this->output);
+ }
+}
diff --git a/tests/unit/includes/AccountTest.php b/tests/unit/includes/AccountTest.php
index af5bcd3c1..3978f9d04 100644
--- a/tests/unit/includes/AccountTest.php
+++ b/tests/unit/includes/AccountTest.php
@@ -19,7 +19,7 @@ class AccountTest extends Zotlabs\Tests\Unit\UnitTestCase {
$this->assertEquals($expected, check_account_email($email));
}
- function check_account_email_provider() : array {
+ public static function check_account_email_provider() : array {
return [
// Empty and valid emails return the same result
['', ['error' => false, 'message' => '']],
diff --git a/tests/unit/includes/AuthTest.php b/tests/unit/includes/AuthTest.php
new file mode 100644
index 000000000..fa9726fe8
--- /dev/null
+++ b/tests/unit/includes/AuthTest.php
@@ -0,0 +1,81 @@
+<?php
+/**
+ * Tests for the authentication code used in Hubzilla.
+ *
+ * SPDX-FileCopyrightText: 2024 Hubzilla Community
+ * SPDX-FileContributor: Harald Eilertsen
+ *
+ * SPDX-License-Identifier: MIT
+ */
+
+namespace Zotlabs\Tests\Unit\Includes;
+
+use App;
+use Zotlabs\Lib\AConfig;
+use Zotlabs\Tests\Unit\UnitTestCase;
+use PHPUnit\Framework\Attributes\{DataProvider, RunTestsInSeparateProcesses};
+
+/**
+ * Test class containing the test for the Hubzilla authentication code.
+ *
+ * Since the main authentication code is executed in the global scope on
+ * inclusion of the `includes/auth.php` file, we need to run each test in a
+ * separate process to make sure we can excersize the code as we need.
+ */
+#[RunTestsInSeparateProcesses]
+class AuthTest extends UnitTestCase {
+
+ /**
+ * Check that mfa status is not checked for certain modules.
+ *
+ * This causes issues with things like WebDAV and CardDAV, as there's
+ * currently no way for these modules to signal that a TOTP code is needed
+ * back to the connecting client.
+ */
+ #[DataProvider('modules_excluded_from_mfa')]
+ public function test_mfa_is_not_checked_for_excluded_modules(string $module, array $args): void {
+ $account_id = $this->fixtures['account']['0']['account_id'];
+
+ $_SESSION = [
+ 'authenticated' => true,
+ 'account_id' => $account_id,
+
+ // Trick the code to not warn that $_SESSION['uid'] is not set,
+ // but also not trigger the code that tries to change to the
+ // given channel. *Remove when code is fixed!*
+ 'uid' => 0,
+ ];
+
+ $_SERVER['REMOTE_ADDR'] = '127.0.0.1';
+
+ App::$session = $this->create_session_stub();
+ App::$module = $module;
+ App::$argv = $args;
+ App::$argc = count($args);
+
+ // Enable multi factor authentication for this account
+ AConfig::Set($account_id, 'system', 'mfa_enabled', true);
+
+ require 'include/auth.php';
+
+ $this->assertEquals(1, $_SESSION['authenticated']);
+ }
+
+ /**
+ * Data provider for testing modules excluded from mfa
+ * @SuppressWarnings(PHPMD.UnusedPrivateMethod)
+ */
+ public static function modules_excluded_from_mfa(): array {
+ return [
+ ['totp_check', []],
+ ['cdav', []],
+ ['cdav', ['calendar']],
+ ['cdav', ['addressbook']],
+ ['dav', []],
+ ];
+ }
+
+ private function create_session_stub(): \Zotlabs\Web\Session {
+ return $this->createStub('Zotlabs\Web\Session');
+ }
+}
diff --git a/tests/unit/includes/BBCodeTest.php b/tests/unit/includes/BBCodeTest.php
index a8aa8ee2b..daa66bf72 100644
--- a/tests/unit/includes/BBCodeTest.php
+++ b/tests/unit/includes/BBCodeTest.php
@@ -101,7 +101,7 @@ class BBCodeTest extends UnitTestCase {
*
* @SuppressWarnings(PHPMD.UnusedPrivateMethod)
*/
- private function bbcode_to_html_provider(): array {
+ public static function bbcode_to_html_provider(): array {
return [
'code block' => [
"[code]\ntestvar = \"this is a test\"\necho \"the message is \$testvar\"\n[/code]",
@@ -134,6 +134,10 @@ class BBCodeTest extends UnitTestCase {
'list with linebreaks \r\n in text' => [
"some text\r\n[list]\r\n[*] item1\r\nsome text[*] item2\r\nsome text[/list]\r\nsome more text",
'some text<br /><ul class="listbullet"><li> item1<br />some text<li> item2<br />some text</ul>some more text'
+ ],
+ 'del tag' => [
+ 'some [s]strike through[/s] text',
+ 'some <del>strike through</del> text'
]
];
}
@@ -149,7 +153,7 @@ class BBCodeTest extends UnitTestCase {
*
* @SuppressWarnings(PHPMD.UnusedPrivateMethod)
*/
- private function bbcode_observer_provider(): array {
+ public static function bbcode_observer_provider(): array {
return [
'authenticated observer' => [
'[observer=1]This should be visible[/observer][observer=0]but not this[/observer]',
@@ -201,7 +205,7 @@ class BBCodeTest extends UnitTestCase {
*
* @SuppressWarnings(PHPMD.UnusedPrivateMethod)
*/
- private function html2bbcode_provider(): array {
+ public static function html2bbcode_provider(): array {
return [
'paragraph over multiple lines' => [
"<p>A paragraph over\nmultiple lines\nshould be unwrapped</p>",
@@ -230,6 +234,38 @@ class BBCodeTest extends UnitTestCase {
'html reshares from streams' => [
'<div><div><a href="https://example.com"><img src="https://example.com/image.jpg" alt="image/photo"></a> shared something</div>something</div>',
'[url=https://example.com][img=https://example.com/image.jpg]image/photo[/img][/url] shared something' . "\n" . 'something'
+ ],
+ 'list' => [
+ '<ul><li>list 1</li><li>list 2</li><li>list 3</li></ul>',
+ '[list][*]list 1[*]list 2[*]list 3[/list]'
+ ],
+ 'list with paragraph' => [
+ '<ul><li><p>list 1</p></li><li><p>list 2</p></li><li><p>list 3</p></li></ul>',
+ '[list][*]list 1[*]list 2[*]list 3[/list]'
+ ],
+ 'nested list' => [
+ '<ul><li>list 1</li><li>list 2</li><li>list 3</li><ul><li>list 1</li><li>list 2</li><li>list 3</li></ul></ul>',
+ '[list][*]list 1[*]list 2[*]list 3[list][*]list 1[*]list 2[*]list 3[/list][/list]'
+ ],
+ 'double nested list' => [
+ '<ul><li>list 1</li><li>list 2</li><li>list 3</li><ul><li>list 1</li><li>list 2</li><li>list 3</li><ul><li>list 1</li><li>list 2</li><li>list 3</li></ul></ul></ul>',
+ '[list][*]list 1[*]list 2[*]list 3[list][*]list 1[*]list 2[*]list 3[list][*]list 1[*]list 2[*]list 3[/list][/list][/list]'
+ ],
+ 'list without closing li' => [
+ '<ul><li>list 1<li>list 2<li>list 3</ul>',
+ '[list][*]list 1[*]list 2[*]list 3[/list]'
+ ],
+ 'nested list without closing li' => [
+ '<ul><li>list 1<li>list 2<li>list 3<ul><li>list 1<li>list 2<li>list 3</ul></ul>',
+ '[list][*]list 1[*]list 2[*]list 3[list][*]list 1[*]list 2[*]list 3[/list][/list]'
+ ],
+ 'double nested list without closing li' => [
+ '<ul><li>list 1<li>list 2<li>list 3<ul><li>list 1<li>list 2<li>list 3<ul><li>list 1<li>list 2<li>list 3</ul></ul></ul>',
+ '[list][*]list 1[*]list 2[*]list 3[list][*]list 1[*]list 2[*]list 3[list][*]list 1[*]list 2[*]list 3[/list][/list][/list]'
+ ],
+ 'del tag' => [
+ 'some <del>strike through</del> text',
+ 'some [s]strike through[/s] text'
]
];
}
diff --git a/tests/unit/includes/FeedutilsTest.php b/tests/unit/includes/FeedutilsTest.php
index bda0bf425..05bff06a3 100644
--- a/tests/unit/includes/FeedutilsTest.php
+++ b/tests/unit/includes/FeedutilsTest.php
@@ -47,7 +47,7 @@ class FeedutilsTest extends UnitTestCase {
public function test_atom_author() {
$this->assertEquals('', atom_author('', 'nick', 'name', 'uri', 72, 72, 'png', 'photourl'));
- $a = '<tag>
+ $expected = '<tag>
<id>uri</id>
<name>nick</name>
<uri>uri</uri>
@@ -57,7 +57,10 @@ class FeedutilsTest extends UnitTestCase {
<poco:displayName>name</poco:displayName>
</tag>';
- $this->assertXmlStringEqualsXmlString($a, atom_author('tag', 'nick', 'name', 'uri', 72, 72, 'png', 'http://photourl'));
+ $this->assertAtomAuthorMatches(
+ $expected,
+ atom_author('tag', 'nick', 'name', 'uri', 72, 72, 'png', 'http://photourl')
+ );
}
/**
@@ -86,6 +89,63 @@ class FeedutilsTest extends UnitTestCase {
<poco:displayName>Chan</poco:displayName>
</tag>';
- $this->assertXmlStringEqualsXmlString($a, atom_render_author('tag', $xchan));
+ $this->assertAtomAuthorMatches($a, atom_render_author('tag', $xchan));
+ }
+
+ /**
+ * Helper method to assert that the generated author tag matches
+ * what we expect.
+ *
+ * Calling `assertXmlStringEqualsXmlString` directly on the fragments
+ * does not work anymore in PHPUnit >= 10.x, as t will throw an XMLException
+ * because of undefined namespaces.
+ *
+ * To overcome that we wrap the generated tags in the proper template,
+ * and compare the fully generated XML from the template instead.
+ *
+ * @param string $expected The expected author XML fragment.
+ * @param string $actual The actually generated authr XML fragment.
+ */
+ private function assertAtomAuthorMatches(string $expected, string $actual): void {
+
+ // Make sure the template engine is initialized before we try to render
+ // the template.
+ //
+ // This may be problematic, as it will compile the template into the same
+ // directory as the site. Assuming that nobody is crazy enough to run the
+ // test suite in a production server, it should probably be fine for now.
+ $smarty = new \Zotlabs\Render\SmartyTemplate();
+ \App::register_template_engine(get_class($smarty));
+
+ $feed_template = get_markup_template('atom_feed.tpl');
+ $expected_xml = replace_macros($feed_template, [
+ '$version' => 42,
+ '$generator' => 'Hubzilla test',
+ '$generator_uri' => 'https://hubzilla.test',
+ '$feed_id' => 'test_channel',
+ '$feed_title' => 'Test channel',
+ '$feed_updated' => 'Sometime',
+ '$author' => $expected,
+ '$owner' => $expected,
+ '$profile_page' => xmlify('https://hubzilla.test/channel/test'),
+ ]);
+
+ $expected_xml .= '</feed>';
+
+ $actual_xml = replace_macros($feed_template, [
+ '$version' => 42,
+ '$generator' => 'Hubzilla test',
+ '$generator_uri' => 'https://hubzilla.test',
+ '$feed_id' => 'test_channel',
+ '$feed_title' => 'Test channel',
+ '$feed_updated' => 'Sometime',
+ '$author' => $actual,
+ '$owner' => $actual,
+ '$profile_page' => xmlify('https://hubzilla.test/channel/test'),
+ ]);
+
+ $actual_xml .= '</feed>';
+
+ $this->assertXmlStringEqualsXmlString($expected_xml, $actual_xml);
}
}
diff --git a/tests/unit/includes/LanguageTest.php b/tests/unit/includes/LanguageTest.php
index 9525c783d..8f62e71e2 100644
--- a/tests/unit/includes/LanguageTest.php
+++ b/tests/unit/includes/LanguageTest.php
@@ -33,54 +33,6 @@ use Text_LanguageDetect;
* @author Klaus Weidenbach
*/
class LanguageTest extends UnitTestCase {
- //use PHPMock;
-
- /**
- * @dataProvider languageExamplesProvider
- * @coversNothing
- */
- public function testDetectLanguage($text, $langCode, $confidence) {
-
- // php-mock can not mock global functions which is called by a global function.
- // If the calling function is in a namespace it would work.
- //$gc = $this->getFunctionMock(__NAMESPACE__, 'get_config');
- //$gc->expects($this->once())->willReturn(10)
- //$cg = $this->getFunctionMock('Zotlabs\Lib\Config', 'Get');
- //$cg->expects($this->once())->willReturn(10);
- //$this->assertEquals($langCode, detect_language($text));
-
-
- // Can not unit test detect_language(), therefore test the used library
- // only for now to find regressions on library updates.
- $l = new Text_LanguageDetect;
- // return 2-letter ISO 639-1 (en) language code
- $l->setNameMode(2);
- $lng = $l->detectConfidence($text);
-
- $this->assertEquals($langCode, $lng['language']);
- $this->assertEquals($confidence, round($lng['confidence'], 6));
- }
-
- public function languageExamplesProvider() {
- return [
- 'English' => [
- 'English is a West Germanic language that was first spoken in early medieval England and is now a global lingua franca.[4][5] Named after the Angles, one of the Germanic tribes that migrated to England, it ultimately derives its name from the Anglia (Angeln) peninsula in the Baltic Sea. It is closely related to the Frisian languages, but its vocabulary has been significantly influenced by other Germanic languages, particularly Norse (a North Germanic language), as well as by Latin and Romance languages, especially French.',
- 'en',
- 0.078422
- ],
- 'German' => [
- 'Deutschland ist ein Bundesstaat in Mitteleuropa. Er besteht aus 16 Ländern und ist als freiheitlich-demokratischer und sozialer Rechtsstaat verfasst. Die Bundesrepublik Deutschland stellt die jüngste Ausprägung des deutschen Nationalstaates dar. Mit rund 82,8 Millionen Einwohnern (31. Dezember 2016) zählt Deutschland zu den dicht besiedelten Flächenstaaten.',
- 'de',
- 0.134339
- ],
- 'Norwegian' => [
- 'Kongeriket Norge er et nordisk, europeisk land og en selvstendig stat vest på Den skandinaviske halvøy. Landet er langt og smalt, og kysten strekker seg langs Nord-Atlanteren, hvor også Norges kjente fjorder befinner seg. Totalt dekker det relativt tynt befolkede landet 385 000 kvadratkilometer med litt over fem millioner innbyggere (2016).',
- 'no',
- 0.007076
- ]
- ];
- }
-
/**
* @covers ::get_language_name
@@ -94,7 +46,7 @@ class LanguageTest extends UnitTestCase {
}
}
- public function getLanguageNameProvider() {
+ public static function getLanguageNameProvider() {
return [
'empty language code' => [
'',
diff --git a/tests/unit/includes/MarkdownTest.php b/tests/unit/includes/MarkdownTest.php
index 960c15139..310130bf1 100644
--- a/tests/unit/includes/MarkdownTest.php
+++ b/tests/unit/includes/MarkdownTest.php
@@ -39,7 +39,7 @@ class MarkdownTest extends UnitTestCase {
$this->assertEquals($expected, markdown_to_bb($src));
}
- private function markdown_to_bbcode_provider(): array {
+ public static function markdown_to_bbcode_provider(): array {
return [
'empty text' => [
'',
@@ -104,7 +104,7 @@ class MarkdownTest extends UnitTestCase {
$this->assertEquals($markdown, html2markdown($html));
}
- public function html2markdownProvider(): array {
+ public static function html2markdownProvider(): array {
return [
'empty text' => [
'',
diff --git a/tests/unit/includes/NetworkTest.php b/tests/unit/includes/NetworkTest.php
index 9fb00e9d3..a41075f25 100644
--- a/tests/unit/includes/NetworkTest.php
+++ b/tests/unit/includes/NetworkTest.php
@@ -7,12 +7,6 @@
class NetworkTest extends Zotlabs\Tests\Unit\UnitTestCase {
- public function setUp() : void {
- parent::setUp();
-
- \App::set_baseurl("https://mytest.org");
- }
-
/**
* @dataProvider localUrlTestProvider
*/
@@ -20,10 +14,10 @@ class NetworkTest extends Zotlabs\Tests\Unit\UnitTestCase {
$this->assertEquals($expected, is_local_url($url));
}
- public function localUrlTestProvider() : array {
+ public static function localUrlTestProvider() : array {
return [
[ '/some/path', true ],
- [ 'https://mytest.org/some/path', true ],
+ [ 'https://hubzilla.test/some/path', true ],
[ 'https://other.site/some/path', false ],
];
}
@@ -47,7 +41,7 @@ class NetworkTest extends Zotlabs\Tests\Unit\UnitTestCase {
$this->assertTrue(validate_email($email));
}
- function validate_email_provider() : array {
+ public static function validate_email_provider() : array {
return [
// First some invalid email addresses
['', false],
diff --git a/tests/unit/includes/TextTest.php b/tests/unit/includes/TextTest.php
index b76b15dcf..1e80d71d8 100644
--- a/tests/unit/includes/TextTest.php
+++ b/tests/unit/includes/TextTest.php
@@ -85,7 +85,7 @@ empty line above';
public function testNotags($string, $expected) {
$this->assertEquals($expected, notags($string));
}
- public function notagsProvider() {
+ public static function notagsProvider() {
return [
'empty string' => ['', ''],
'simple tag' => ['<value>', '[value]'],
@@ -102,7 +102,7 @@ empty line above';
sanitise_acl($string);
$this->assertEquals($expected, $string);
}
- public function sanitise_aclProvider() {
+ public static function sanitise_aclProvider() {
return [
'text' => ['value', '<value>'],
'text with angle bracket' => ['<value>', '<[value]>'],
diff --git a/tests/unit/includes/dba/TransactionTest.php b/tests/unit/includes/dba/TransactionTest.php
index 99e3f459d..0b986c6aa 100644
--- a/tests/unit/includes/dba/TransactionTest.php
+++ b/tests/unit/includes/dba/TransactionTest.php
@@ -24,8 +24,8 @@
require_once 'tests/fakes/fake_dba.php';
require_once 'include/dba/dba_transaction.php';
-use \PHPUnit\Framework\TestCase;
-use \Zotlabs\Tests\Fakes\FakeDba;
+use PHPUnit\Framework\TestCase;
+use Zotlabs\Tests\Fakes\FakeDba;
/**
* Test database transactions.
@@ -39,7 +39,7 @@ class DbaTransactionTest extends TestCase {
private $pdo_stub;
public function setUp(): void {
- $this->pdo_stub = $this->createStub(PDO::class);
+ $this->pdo_stub = $this->createMock(PDO::class);
}
diff --git a/tests/unit/includes/dba/_files/account.yml b/tests/unit/includes/dba/_files/account.yml
index 344bdb799..88e59056e 100644
--- a/tests/unit/includes/dba/_files/account.yml
+++ b/tests/unit/includes/dba/_files/account.yml
@@ -3,7 +3,9 @@ account:
account_id: 42
account_email: "hubzilla@example.com"
account_language: "no"
+ account_flags: 0
-
account_id: 43
account_email: "hubzilla@example.org"
account_language: "de"
+ account_flags: 1
diff --git a/tests/unit/includes/dba/_files/config.yml b/tests/unit/includes/dba/_files/config.yml
index e93486857..ac3c8acb0 100644
--- a/tests/unit/includes/dba/_files/config.yml
+++ b/tests/unit/includes/dba/_files/config.yml
@@ -2,6 +2,10 @@
config:
-
cat: system
+ k: baseurl
+ v: https://hubzilla.test
+ -
+ cat: system
k: do_not_check_dns
v: true
-
diff --git a/util/addons b/util/addons
index 7bd70984e..f700dfcf7 100755
--- a/util/addons
+++ b/util/addons
@@ -19,7 +19,9 @@ require_once('include/cli_startup.php');
cli_startup();
- $plugs = get_config('system', 'addon');
+use Zotlabs\Lib\Config;
+
+ $plugs = Config::Get('system', 'addon');
$plugins_arr = array();
if($plugs)
@@ -42,7 +44,7 @@ cli_startup();
if ($idz !== false) {
unset(App::$plugins[$idz]);
uninstall_plugin($id);
- set_config("system","addon", implode(", ",App::$plugins));
+ Config::Set("system","addon", implode(", ",App::$plugins));
}
}
$info['disabled'] = 1-intval($x);
@@ -65,7 +67,7 @@ if($argc == 2 && $argv[1] === 'list') {
echo $p[0] . "\n";
}
}
- }
+ }
killme();
}
@@ -89,7 +91,7 @@ if($argc == 3 && $argv[1] === 'list' && $argv[2] === 'all') {
foreach($plugins as $p) {
echo $p[0] . (($p[1]) ? $p[1] : (($p[2]['disabled']) ? '!' : '')) . "\n";
}
- }
+ }
killme();
}
@@ -107,12 +109,12 @@ if($argc == 3 && $argv[1] === 'install') {
else {
App::$plugins[] = $p[0];
install_plugin($p[0]);
- set_config("system","addon", implode(", ",App::$plugins));
+ Config::Set("system","addon", implode(", ",App::$plugins));
echo $p[0] . ' installed.' . "\n";
}
}
}
- }
+ }
killme();
}
@@ -136,12 +138,12 @@ if($argc == 3 && $argv[1] === 'uninstall') {
if ($idx !== false)
unset(App::$plugins[$idx]);
uninstall_plugin($p[0]);
- set_config("system","addon", implode(", ",App::$plugins));
+ Config::Set("system","addon", implode(", ",App::$plugins));
echo $p[0] . ' uninstalled.' . "\n";
}
}
}
- }
+ }
// force uninstall of addon which no longer exists
@@ -150,7 +152,7 @@ if($argc == 3 && $argv[1] === 'uninstall') {
if ($idx !== false)
unset(App::$plugins[$idx]);
uninstall_plugin($argv[2]);
- set_config("system","addon", implode(", ",App::$plugins));
+ Config::Set("system","addon", implode(", ",App::$plugins));
echo $argv[2] . ' uninstalled.' . "\n";
}
diff --git a/util/config b/util/config
index cfe4500b5..c0f51b3fb 100755
--- a/util/config
+++ b/util/config
@@ -12,13 +12,14 @@ require_once('include/cli_startup.php');
cli_startup();
+use Zotlabs\Lib\Config;
$helpArgs = getopt('h', array('help'));
if (count($helpArgs) === 1) {
echo <<<'EndOfOutput'
Gets, sets, or lists site-wide configuration settings.
-Usage: util/config
+Usage: util/config
util/config <family>
util/config <family> <key>
util/config <family> <key> <value>
@@ -36,8 +37,8 @@ Usage: util/config
Set config entry for specified family and key to value and display result
Notes:
- Setting config entries which are manually set in .htconfig.php may result
- in conflict between database settings and the manual startup settings.
+ Setting config entries which are manually set in .htconfig.php may result
+ in conflict between database settings and the manual startup settings.
For channel-specific configuration settings, use util/pconfig
@@ -55,16 +56,16 @@ if($argc > 1 && strpos($argv[1],'.')) {
}
if($argc > 3) {
- set_config($argv[1],$argv[2],$argv[3]);
- echo "config[{$argv[1]}][{$argv[2]}] = " . printable_config(get_config($argv[1],$argv[2])) . "\n";
+ Config::Set($argv[1],$argv[2],$argv[3]);
+ echo "config[{$argv[1]}][{$argv[2]}] = " . printable_config(Config::Get($argv[1],$argv[2])) . "\n";
}
if($argc == 3) {
- echo "config[{$argv[1]}][{$argv[2]}] = " . printable_config(get_config($argv[1],$argv[2])) . "\n";
+ echo "config[{$argv[1]}][{$argv[2]}] = " . printable_config(Config::Get($argv[1],$argv[2])) . "\n";
}
if($argc == 2) {
- load_config($argv[1]);
+ Config::Load($argv[1]);
foreach(App::$config[$argv[1]] as $k => $x) {
echo "config[{$argv[1]}][{$k}] = " . $x . "\n";
}
@@ -89,4 +90,4 @@ function printable_config($x) {
}
else
return $x;
-} \ No newline at end of file
+}
diff --git a/util/db_update.php b/util/db_update.php
index 8fc7c7616..d74dc6ca3 100755
--- a/util/db_update.php
+++ b/util/db_update.php
@@ -9,7 +9,9 @@ require_once('boot.php');
require_once('include/cli_startup.php');
cli_startup();
-$build = get_config('system','db_version');
+use Zotlabs\Lib\Config;
+
+$build = Config::Get('system','db_version');
echo "Old DB VERSION: " . $build . "\n";
echo "New DB VERSION: " . DB_UPDATE_VERSION . "\n";
diff --git a/util/hmessages.po b/util/hmessages.po
index 6ffa2e7f8..4e9ac503d 100644
--- a/util/hmessages.po
+++ b/util/hmessages.po
@@ -6,9 +6,9 @@
#, fuzzy
msgid ""
msgstr ""
-"Project-Id-Version: 9.0RC\n"
+"Project-Id-Version: 9.2RC1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-03-15 18:45+0000\n"
+"POT-Creation-Date: 2024-06-27 07:40+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -21,12 +21,12 @@ msgstr ""
msgid "Source channel not found."
msgstr ""
-#: ../../view/theme/redbasic/php/config.php:18 ../../include/text.php:3514
+#: ../../view/theme/redbasic/php/config.php:18 ../../include/text.php:3520
#: ../../addon/cart/submodules/orderoptions.php:335
#: ../../addon/cart/submodules/orderoptions.php:359
#: ../../addon/cart/submodules/orderoptions.php:435
#: ../../addon/cart/submodules/orderoptions.php:459
-#: ../../Zotlabs/Module/Admin/Site.php:231
+#: ../../Zotlabs/Module/Admin/Site.php:232
msgid "Default"
msgstr ""
@@ -36,9 +36,8 @@ msgid "Focus (Hubzilla default)"
msgstr ""
#: ../../view/theme/redbasic/php/config.php:188 ../../include/js_strings.php:23
-#: ../../addon/irc/irc.php:45 ../../addon/smileybutton/Mod_Smileybutton.php:53
-#: ../../addon/socialauth/Mod_SocialAuth.php:341
-#: ../../addon/hubwall/hubwall.php:95
+#: ../../addon/irc/irc.php:45 ../../addon/socialauth/Mod_SocialAuth.php:341
+#: ../../addon/hubwall/hubwall.php:96
#: ../../addon/openclipatar/openclipatar.php:54
#: ../../addon/hzfiles/hzfiles.php:86 ../../addon/piwik/piwik.php:95
#: ../../addon/redphotos/redphotos.php:136
@@ -79,7 +78,7 @@ msgstr ""
#: ../../addon/rtof/Mod_Rtof.php:70 ../../addon/nofed/Mod_Nofed.php:51
#: ../../addon/photocache/Mod_Photocache.php:63
#: ../../addon/likebanner/likebanner.php:57
-#: ../../Zotlabs/Lib/ThreadItem.php:862 ../../Zotlabs/Storage/Browser.php:385
+#: ../../Zotlabs/Lib/ThreadItem.php:862 ../../Zotlabs/Storage/Browser.php:386
#: ../../Zotlabs/Module/Oauth.php:109 ../../Zotlabs/Module/Import_items.php:125
#: ../../Zotlabs/Module/Thing.php:357 ../../Zotlabs/Module/Thing.php:409
#: ../../Zotlabs/Module/Tokens.php:294 ../../Zotlabs/Module/Pdledit.php:137
@@ -91,44 +90,44 @@ msgstr ""
#: ../../Zotlabs/Module/Connedit.php:714 ../../Zotlabs/Module/Defperms.php:262
#: ../../Zotlabs/Module/Locs.php:125
#: ../../Zotlabs/Module/Admin/Accounts.php:309
-#: ../../Zotlabs/Module/Admin/Themes.php:173
-#: ../../Zotlabs/Module/Admin/Addons.php:445
+#: ../../Zotlabs/Module/Admin/Themes.php:174
+#: ../../Zotlabs/Module/Admin/Addons.php:446
#: ../../Zotlabs/Module/Admin/Features.php:66
-#: ../../Zotlabs/Module/Admin/Profs.php:178
-#: ../../Zotlabs/Module/Admin/Channels.php:147
+#: ../../Zotlabs/Module/Admin/Profs.php:179
+#: ../../Zotlabs/Module/Admin/Channels.php:169
#: ../../Zotlabs/Module/Admin/Account_edit.php:73
-#: ../../Zotlabs/Module/Admin/Logs.php:84
-#: ../../Zotlabs/Module/Admin/Site.php:401
-#: ../../Zotlabs/Module/Admin/Security.php:129
+#: ../../Zotlabs/Module/Admin/Logs.php:85
+#: ../../Zotlabs/Module/Admin/Site.php:402
+#: ../../Zotlabs/Module/Admin/Security.php:130
#: ../../Zotlabs/Module/Affinity.php:84 ../../Zotlabs/Module/Permcats.php:257
-#: ../../Zotlabs/Module/Xchan.php:15 ../../Zotlabs/Module/Group.php:150
-#: ../../Zotlabs/Module/Group.php:159 ../../Zotlabs/Module/Invite.php:563
+#: ../../Zotlabs/Module/Xchan.php:15 ../../Zotlabs/Module/Group.php:151
+#: ../../Zotlabs/Module/Group.php:160 ../../Zotlabs/Module/Invite.php:564
#: ../../Zotlabs/Module/Mitem.php:259 ../../Zotlabs/Module/Photos.php:1056
#: ../../Zotlabs/Module/Photos.php:1095 ../../Zotlabs/Module/Photos.php:1208
#: ../../Zotlabs/Module/Sources.php:123 ../../Zotlabs/Module/Sources.php:160
-#: ../../Zotlabs/Module/Profiles.php:735 ../../Zotlabs/Module/Chat.php:208
-#: ../../Zotlabs/Module/Chat.php:247 ../../Zotlabs/Module/Regate.php:407
-#: ../../Zotlabs/Module/Setup.php:316 ../../Zotlabs/Module/Setup.php:356
+#: ../../Zotlabs/Module/Profiles.php:738 ../../Zotlabs/Module/Chat.php:208
+#: ../../Zotlabs/Module/Chat.php:247 ../../Zotlabs/Module/Regate.php:408
+#: ../../Zotlabs/Module/Setup.php:319 ../../Zotlabs/Module/Setup.php:359
#: ../../Zotlabs/Module/Editpost.php:88 ../../Zotlabs/Module/Oauth2.php:114
-#: ../../Zotlabs/Module/Settings/Display.php:187
+#: ../../Zotlabs/Module/Settings/Display.php:188
#: ../../Zotlabs/Module/Settings/Network.php:62
#: ../../Zotlabs/Module/Settings/Channel_home.php:91
-#: ../../Zotlabs/Module/Settings/Account.php:107
+#: ../../Zotlabs/Module/Settings/Account.php:109
#: ../../Zotlabs/Module/Settings/Editor.php:42
#: ../../Zotlabs/Module/Settings/Features.php:48
#: ../../Zotlabs/Module/Settings/Directory.php:42
#: ../../Zotlabs/Module/Settings/Manage.php:43
-#: ../../Zotlabs/Module/Settings/Privacy.php:122
+#: ../../Zotlabs/Module/Settings/Privacy.php:123
#: ../../Zotlabs/Module/Settings/Events.php:42
#: ../../Zotlabs/Module/Settings/Photos.php:42
#: ../../Zotlabs/Module/Settings/Conversation.php:49
-#: ../../Zotlabs/Module/Settings/Channel.php:229
+#: ../../Zotlabs/Module/Settings/Channel.php:230
#: ../../Zotlabs/Module/Settings/Profiles.php:52
#: ../../Zotlabs/Module/Settings/Connections.php:42
#: ../../Zotlabs/Module/Settings/Calendar.php:42
#: ../../Zotlabs/Module/Settings/Multifactor.php:85
-#: ../../Zotlabs/Module/Email_validation.php:40
-#: ../../Zotlabs/Module/Import.php:611
+#: ../../Zotlabs/Module/Email_validation.php:41
+#: ../../Zotlabs/Module/Import.php:616
msgid "Submit"
msgstr ""
@@ -184,8 +183,7 @@ msgstr ""
#: ../../view/theme/redbasic/php/config.php:202
#: ../../view/theme/redbasic/php/config.php:203
#: ../../view/theme/redbasic/php/config.php:215
-#: ../../include/conversation.php:1265
-#: ../../addon/smileybutton/Mod_Smileybutton.php:42
+#: ../../include/conversation.php:1267
#: ../../addon/socialauth/Mod_SocialAuth.php:218
#: ../../addon/ijpost/Mod_Ijpost.php:61 ../../addon/redred/Mod_Redred.php:61
#: ../../addon/libertree/Mod_Libertree.php:57
@@ -225,39 +223,39 @@ msgstr ""
#: ../../addon/content_import/Mod_content_import.php:135
#: ../../addon/content_import/Mod_content_import.php:136
#: ../../addon/rtof/Mod_Rtof.php:47 ../../addon/nofed/Mod_Nofed.php:40
-#: ../../boot.php:1751 ../../Zotlabs/Lib/Libzotdir.php:165
-#: ../../Zotlabs/Lib/Libzotdir.php:166 ../../Zotlabs/Lib/Libzotdir.php:168
-#: ../../Zotlabs/Storage/Browser.php:309 ../../Zotlabs/Storage/Browser.php:310
-#: ../../Zotlabs/Storage/Browser.php:311 ../../Zotlabs/Storage/Browser.php:392
-#: ../../Zotlabs/Storage/Browser.php:394 ../../Zotlabs/Storage/Browser.php:558
+#: ../../boot.php:1765 ../../Zotlabs/Lib/Libzotdir.php:166
+#: ../../Zotlabs/Lib/Libzotdir.php:167 ../../Zotlabs/Lib/Libzotdir.php:169
+#: ../../Zotlabs/Storage/Browser.php:310 ../../Zotlabs/Storage/Browser.php:311
+#: ../../Zotlabs/Storage/Browser.php:312 ../../Zotlabs/Storage/Browser.php:393
+#: ../../Zotlabs/Storage/Browser.php:395 ../../Zotlabs/Storage/Browser.php:559
#: ../../Zotlabs/Module/Filestorage.php:203
#: ../../Zotlabs/Module/Filestorage.php:211
#: ../../Zotlabs/Module/Contactedit.php:270
#: ../../Zotlabs/Module/Contactedit.php:315
-#: ../../Zotlabs/Module/Register.php:512 ../../Zotlabs/Module/Connedit.php:622
-#: ../../Zotlabs/Module/Defperms.php:195 ../../Zotlabs/Module/Api.php:99
+#: ../../Zotlabs/Module/Register.php:515 ../../Zotlabs/Module/Connedit.php:622
+#: ../../Zotlabs/Module/Defperms.php:195 ../../Zotlabs/Module/Api.php:101
#: ../../Zotlabs/Module/Menu.php:163 ../../Zotlabs/Module/Menu.php:222
-#: ../../Zotlabs/Module/Admin/Site.php:305
-#: ../../Zotlabs/Module/Permcats.php:247 ../../Zotlabs/Module/Group.php:137
-#: ../../Zotlabs/Module/Group.php:138 ../../Zotlabs/Module/Group.php:147
-#: ../../Zotlabs/Module/Group.php:249 ../../Zotlabs/Module/Group.php:301
-#: ../../Zotlabs/Module/Group.php:302 ../../Zotlabs/Module/Mitem.php:176
+#: ../../Zotlabs/Module/Admin/Site.php:306
+#: ../../Zotlabs/Module/Permcats.php:247 ../../Zotlabs/Module/Group.php:138
+#: ../../Zotlabs/Module/Group.php:139 ../../Zotlabs/Module/Group.php:148
+#: ../../Zotlabs/Module/Group.php:250 ../../Zotlabs/Module/Group.php:302
+#: ../../Zotlabs/Module/Group.php:303 ../../Zotlabs/Module/Mitem.php:176
#: ../../Zotlabs/Module/Mitem.php:177 ../../Zotlabs/Module/Mitem.php:256
#: ../../Zotlabs/Module/Mitem.php:257 ../../Zotlabs/Module/Photos.php:666
#: ../../Zotlabs/Module/Sources.php:122 ../../Zotlabs/Module/Sources.php:157
-#: ../../Zotlabs/Module/Profiles.php:671 ../../Zotlabs/Module/Profiles.php:681
-#: ../../Zotlabs/Module/Profiles.php:689 ../../Zotlabs/Module/Profiles.php:693
-#: ../../Zotlabs/Module/Settings/Display.php:86
-#: ../../Zotlabs/Module/Settings/Privacy.php:132
+#: ../../Zotlabs/Module/Profiles.php:674 ../../Zotlabs/Module/Profiles.php:684
+#: ../../Zotlabs/Module/Profiles.php:692 ../../Zotlabs/Module/Profiles.php:696
+#: ../../Zotlabs/Module/Settings/Display.php:87
#: ../../Zotlabs/Module/Settings/Privacy.php:133
#: ../../Zotlabs/Module/Settings/Privacy.php:134
#: ../../Zotlabs/Module/Settings/Privacy.php:135
#: ../../Zotlabs/Module/Settings/Privacy.php:136
#: ../../Zotlabs/Module/Settings/Privacy.php:137
-#: ../../Zotlabs/Module/Settings/Channel.php:224
+#: ../../Zotlabs/Module/Settings/Privacy.php:138
+#: ../../Zotlabs/Module/Settings/Channel.php:225
#: ../../Zotlabs/Module/Settings/Multifactor.php:82
-#: ../../Zotlabs/Module/Import.php:600 ../../Zotlabs/Module/Import.php:604
-#: ../../Zotlabs/Module/Import.php:605
+#: ../../Zotlabs/Module/Import.php:605 ../../Zotlabs/Module/Import.php:609
+#: ../../Zotlabs/Module/Import.php:610
msgid "No"
msgstr ""
@@ -265,8 +263,7 @@ msgstr ""
#: ../../view/theme/redbasic/php/config.php:202
#: ../../view/theme/redbasic/php/config.php:203
#: ../../view/theme/redbasic/php/config.php:215
-#: ../../include/conversation.php:1265
-#: ../../addon/smileybutton/Mod_Smileybutton.php:42
+#: ../../include/conversation.php:1267
#: ../../addon/socialauth/Mod_SocialAuth.php:218
#: ../../addon/ijpost/Mod_Ijpost.php:61 ../../addon/redred/Mod_Redred.php:61
#: ../../addon/libertree/Mod_Libertree.php:57
@@ -306,37 +303,37 @@ msgstr ""
#: ../../addon/content_import/Mod_content_import.php:135
#: ../../addon/content_import/Mod_content_import.php:136
#: ../../addon/rtof/Mod_Rtof.php:47 ../../addon/nofed/Mod_Nofed.php:40
-#: ../../boot.php:1751 ../../Zotlabs/Lib/Libzotdir.php:165
-#: ../../Zotlabs/Lib/Libzotdir.php:166 ../../Zotlabs/Lib/Libzotdir.php:168
-#: ../../Zotlabs/Storage/Browser.php:309 ../../Zotlabs/Storage/Browser.php:310
-#: ../../Zotlabs/Storage/Browser.php:311 ../../Zotlabs/Storage/Browser.php:392
-#: ../../Zotlabs/Storage/Browser.php:394 ../../Zotlabs/Storage/Browser.php:558
+#: ../../boot.php:1765 ../../Zotlabs/Lib/Libzotdir.php:166
+#: ../../Zotlabs/Lib/Libzotdir.php:167 ../../Zotlabs/Lib/Libzotdir.php:169
+#: ../../Zotlabs/Storage/Browser.php:310 ../../Zotlabs/Storage/Browser.php:311
+#: ../../Zotlabs/Storage/Browser.php:312 ../../Zotlabs/Storage/Browser.php:393
+#: ../../Zotlabs/Storage/Browser.php:395 ../../Zotlabs/Storage/Browser.php:559
#: ../../Zotlabs/Module/Filestorage.php:203
#: ../../Zotlabs/Module/Filestorage.php:211
#: ../../Zotlabs/Module/Contactedit.php:270
-#: ../../Zotlabs/Module/Register.php:512 ../../Zotlabs/Module/Defperms.php:195
-#: ../../Zotlabs/Module/Api.php:98 ../../Zotlabs/Module/Menu.php:163
-#: ../../Zotlabs/Module/Menu.php:222 ../../Zotlabs/Module/Admin/Site.php:307
-#: ../../Zotlabs/Module/Permcats.php:247 ../../Zotlabs/Module/Group.php:137
-#: ../../Zotlabs/Module/Group.php:138 ../../Zotlabs/Module/Group.php:147
-#: ../../Zotlabs/Module/Group.php:249 ../../Zotlabs/Module/Group.php:301
-#: ../../Zotlabs/Module/Group.php:302 ../../Zotlabs/Module/Mitem.php:176
+#: ../../Zotlabs/Module/Register.php:515 ../../Zotlabs/Module/Defperms.php:195
+#: ../../Zotlabs/Module/Api.php:100 ../../Zotlabs/Module/Menu.php:163
+#: ../../Zotlabs/Module/Menu.php:222 ../../Zotlabs/Module/Admin/Site.php:308
+#: ../../Zotlabs/Module/Permcats.php:247 ../../Zotlabs/Module/Group.php:138
+#: ../../Zotlabs/Module/Group.php:139 ../../Zotlabs/Module/Group.php:148
+#: ../../Zotlabs/Module/Group.php:250 ../../Zotlabs/Module/Group.php:302
+#: ../../Zotlabs/Module/Group.php:303 ../../Zotlabs/Module/Mitem.php:176
#: ../../Zotlabs/Module/Mitem.php:177 ../../Zotlabs/Module/Mitem.php:256
#: ../../Zotlabs/Module/Mitem.php:257 ../../Zotlabs/Module/Photos.php:666
#: ../../Zotlabs/Module/Sources.php:122 ../../Zotlabs/Module/Sources.php:157
-#: ../../Zotlabs/Module/Profiles.php:671 ../../Zotlabs/Module/Profiles.php:681
-#: ../../Zotlabs/Module/Profiles.php:689 ../../Zotlabs/Module/Profiles.php:693
-#: ../../Zotlabs/Module/Settings/Display.php:86
-#: ../../Zotlabs/Module/Settings/Privacy.php:132
+#: ../../Zotlabs/Module/Profiles.php:674 ../../Zotlabs/Module/Profiles.php:684
+#: ../../Zotlabs/Module/Profiles.php:692 ../../Zotlabs/Module/Profiles.php:696
+#: ../../Zotlabs/Module/Settings/Display.php:87
#: ../../Zotlabs/Module/Settings/Privacy.php:133
#: ../../Zotlabs/Module/Settings/Privacy.php:134
#: ../../Zotlabs/Module/Settings/Privacy.php:135
#: ../../Zotlabs/Module/Settings/Privacy.php:136
#: ../../Zotlabs/Module/Settings/Privacy.php:137
-#: ../../Zotlabs/Module/Settings/Channel.php:224
+#: ../../Zotlabs/Module/Settings/Privacy.php:138
+#: ../../Zotlabs/Module/Settings/Channel.php:225
#: ../../Zotlabs/Module/Settings/Multifactor.php:82
-#: ../../Zotlabs/Module/Import.php:600 ../../Zotlabs/Module/Import.php:604
-#: ../../Zotlabs/Module/Import.php:605
+#: ../../Zotlabs/Module/Import.php:605 ../../Zotlabs/Module/Import.php:609
+#: ../../Zotlabs/Module/Import.php:610
msgid "Yes"
msgstr ""
@@ -427,23 +424,23 @@ msgstr ""
msgid "This is the home page of %s."
msgstr ""
-#: ../../include/auth.php:197
+#: ../../include/auth.php:232
msgid "Delegation session ended."
msgstr ""
-#: ../../include/auth.php:201
+#: ../../include/auth.php:236
msgid "Logged out."
msgstr ""
-#: ../../include/auth.php:308
+#: ../../include/auth.php:342
msgid "Email validation is incomplete. Please check your email."
msgstr ""
-#: ../../include/auth.php:324
+#: ../../include/auth.php:358
msgid "Failed authentication"
msgstr ""
-#: ../../include/auth.php:334 ../../addon/openid/Mod_Openid.php:189
+#: ../../include/auth.php:368 ../../addon/openid/Mod_Openid.php:189
msgid "Login failed."
msgstr ""
@@ -451,207 +448,207 @@ msgstr ""
msgid "View PDF"
msgstr ""
-#: ../../include/oembed.php:391
+#: ../../include/oembed.php:390
msgid " by "
msgstr ""
-#: ../../include/oembed.php:392
+#: ../../include/oembed.php:391
msgid " on "
msgstr ""
-#: ../../include/oembed.php:425
+#: ../../include/oembed.php:424
msgid "Embedded content"
msgstr ""
-#: ../../include/oembed.php:434
+#: ../../include/oembed.php:433
msgid "Embedding disabled"
msgstr ""
-#: ../../include/event.php:34 ../../include/event.php:132
+#: ../../include/event.php:35 ../../include/event.php:133
msgid "l F d, Y \\@ g:i A"
msgstr ""
-#: ../../include/event.php:42
+#: ../../include/event.php:43
msgid "Starts:"
msgstr ""
-#: ../../include/event.php:52
+#: ../../include/event.php:53
msgid "Finishes:"
msgstr ""
-#: ../../include/event.php:66 ../../include/event.php:157
-#: ../../include/channel.php:1639 ../../Zotlabs/Module/Directory.php:354
+#: ../../include/event.php:67 ../../include/event.php:158
+#: ../../include/channel.php:1640 ../../Zotlabs/Module/Directory.php:354
msgid "Location:"
msgstr ""
-#: ../../include/event.php:132
+#: ../../include/event.php:133
msgid "l F d, Y"
msgstr ""
-#: ../../include/event.php:136
+#: ../../include/event.php:137
msgid "Start:"
msgstr ""
-#: ../../include/event.php:140
+#: ../../include/event.php:141
msgid "End:"
msgstr ""
-#: ../../include/event.php:145 ../../addon/openid/MysqlProvider.php:67
+#: ../../include/event.php:146 ../../addon/openid/MysqlProvider.php:67
msgid "Timezone"
msgstr ""
-#: ../../include/event.php:1245
+#: ../../include/event.php:1246
msgid "This event has been added to your calendar."
msgstr ""
-#: ../../include/event.php:1399 ../../include/conversation.php:151
-#: ../../include/text.php:2355 ../../Zotlabs/Module/Tagger.php:75
+#: ../../include/event.php:1400 ../../include/conversation.php:152
+#: ../../include/text.php:2361 ../../Zotlabs/Module/Tagger.php:75
#: ../../Zotlabs/Module/Like.php:450
#: ../../Zotlabs/Module/Channel_calendar.php:221
msgid "event"
msgstr ""
-#: ../../include/event.php:1478
+#: ../../include/event.php:1479
msgid "Not specified"
msgstr ""
-#: ../../include/event.php:1479
+#: ../../include/event.php:1480
msgid "Needs Action"
msgstr ""
-#: ../../include/event.php:1480
+#: ../../include/event.php:1481
msgid "Completed"
msgstr ""
-#: ../../include/event.php:1481
+#: ../../include/event.php:1482
msgid "In Process"
msgstr ""
-#: ../../include/event.php:1482
+#: ../../include/event.php:1483
msgid "Cancelled"
msgstr ""
-#: ../../include/event.php:1563 ../../include/connections.php:781
+#: ../../include/event.php:1564 ../../include/connections.php:790
#: ../../Zotlabs/Module/Connedit.php:741 ../../Zotlabs/Module/Cdav.php:1377
msgid "Mobile"
msgstr ""
-#: ../../include/event.php:1564 ../../include/connections.php:782
+#: ../../include/event.php:1565 ../../include/connections.php:791
#: ../../Zotlabs/Widget/Notifications.php:43
#: ../../Zotlabs/Module/Connedit.php:742 ../../Zotlabs/Module/Cdav.php:1378
msgid "Home"
msgstr ""
-#: ../../include/event.php:1565 ../../include/connections.php:783
+#: ../../include/event.php:1566 ../../include/connections.php:792
msgid "Home, Voice"
msgstr ""
-#: ../../include/event.php:1566 ../../include/connections.php:784
+#: ../../include/event.php:1567 ../../include/connections.php:793
msgid "Home, Fax"
msgstr ""
-#: ../../include/event.php:1567 ../../include/connections.php:785
+#: ../../include/event.php:1568 ../../include/connections.php:794
#: ../../Zotlabs/Module/Connedit.php:743 ../../Zotlabs/Module/Cdav.php:1379
msgid "Work"
msgstr ""
-#: ../../include/event.php:1568 ../../include/connections.php:786
+#: ../../include/event.php:1569 ../../include/connections.php:795
msgid "Work, Voice"
msgstr ""
-#: ../../include/event.php:1569 ../../include/connections.php:787
+#: ../../include/event.php:1570 ../../include/connections.php:796
msgid "Work, Fax"
msgstr ""
-#: ../../include/event.php:1570 ../../include/event.php:1577
+#: ../../include/event.php:1571 ../../include/event.php:1578
#: ../../include/selectors.php:64 ../../include/selectors.php:81
#: ../../include/selectors.php:119 ../../include/selectors.php:155
-#: ../../include/connections.php:788 ../../include/connections.php:795
-#: ../../Zotlabs/Access/PermissionRoles.php:360
+#: ../../include/connections.php:797 ../../include/connections.php:804
+#: ../../Zotlabs/Access/PermissionRoles.php:362
#: ../../Zotlabs/Module/Connedit.php:744 ../../Zotlabs/Module/Cdav.php:1380
msgid "Other"
msgstr ""
-#: ../../include/feedutils.php:849 ../../include/text.php:1579
+#: ../../include/feedutils.php:851 ../../include/text.php:1580
msgid "unknown"
msgstr ""
-#: ../../include/items.php:448 ../../addon/hzfiles/hzfiles.php:75
+#: ../../include/items.php:456 ../../addon/hzfiles/hzfiles.php:75
#: ../../addon/redphotos/redphotos.php:119
#: ../../addon/redfiles/redfiles.php:109
#: ../../Zotlabs/Module/Import_items.php:116
#: ../../Zotlabs/Module/Dreport.php:10 ../../Zotlabs/Module/Dreport.php:54
-#: ../../Zotlabs/Module/Subthread.php:89 ../../Zotlabs/Module/Group.php:108
-#: ../../Zotlabs/Module/Like.php:344 ../../Zotlabs/Module/Profperm.php:28
+#: ../../Zotlabs/Module/Subthread.php:89 ../../Zotlabs/Module/Group.php:109
+#: ../../Zotlabs/Module/Like.php:344 ../../Zotlabs/Module/Profperm.php:29
#: ../../Zotlabs/Web/WebServer.php:118
msgid "Permission denied"
msgstr ""
-#: ../../include/items.php:1233
+#: ../../include/items.php:1241
msgid "Visible to anybody on the internet."
msgstr ""
-#: ../../include/items.php:1235
+#: ../../include/items.php:1243
msgid "Visible to you only."
msgstr ""
-#: ../../include/items.php:1237
+#: ../../include/items.php:1245
msgid "Visible to anybody in this network."
msgstr ""
-#: ../../include/items.php:1239
+#: ../../include/items.php:1247
msgid "Visible to anybody authenticated."
msgstr ""
-#: ../../include/items.php:1241
+#: ../../include/items.php:1249
#, php-format
msgid "Visible to anybody on %s."
msgstr ""
-#: ../../include/items.php:1243
+#: ../../include/items.php:1251
msgid "Visible to all connections."
msgstr ""
-#: ../../include/items.php:1245
+#: ../../include/items.php:1253
msgid "Visible to approved connections."
msgstr ""
-#: ../../include/items.php:1247
+#: ../../include/items.php:1255
msgid "Visible to specific connections."
msgstr ""
-#: ../../include/items.php:3340 ../../Zotlabs/Lib/Activity.php:2177
+#: ../../include/items.php:3348 ../../Zotlabs/Lib/Activity.php:2189
#: ../../Zotlabs/Module/Share.php:118
#, php-format
msgid "&#x1f501; Repeated %1$s's %2$s"
msgstr ""
-#: ../../include/items.php:3843 ../../addon/flashcards/Mod_Flashcards.php:291
+#: ../../include/items.php:3851 ../../addon/flashcards/Mod_Flashcards.php:291
#: ../../addon/flashcards/Mod_Flashcards.php:292
-#: ../../Zotlabs/Module/Display.php:58 ../../Zotlabs/Module/Display.php:119
-#: ../../Zotlabs/Module/Display.php:390 ../../Zotlabs/Module/Thing.php:113
+#: ../../Zotlabs/Module/Display.php:59 ../../Zotlabs/Module/Display.php:120
+#: ../../Zotlabs/Module/Display.php:391 ../../Zotlabs/Module/Thing.php:113
#: ../../Zotlabs/Module/Filestorage.php:29 ../../Zotlabs/Module/Viewsrc.php:25
-#: ../../Zotlabs/Module/Admin/Themes.php:72
-#: ../../Zotlabs/Module/Admin/Addons.php:263 ../../Zotlabs/Module/Admin.php:61
+#: ../../Zotlabs/Module/Admin/Themes.php:73
+#: ../../Zotlabs/Module/Admin/Addons.php:264 ../../Zotlabs/Module/Admin.php:63
msgid "Item not found."
msgstr ""
-#: ../../include/items.php:3923 ../../include/attach.php:156
+#: ../../include/items.php:3931 ../../include/attach.php:156
#: ../../include/attach.php:205 ../../include/attach.php:278
#: ../../include/attach.php:329 ../../include/attach.php:431
#: ../../include/attach.php:445 ../../include/attach.php:452
#: ../../include/attach.php:534 ../../include/attach.php:1106
#: ../../include/attach.php:1179 ../../include/attach.php:1344
-#: ../../include/photos.php:30 ../../addon/openid/Mod_Id.php:53
+#: ../../include/photos.php:31 ../../addon/openid/Mod_Id.php:53
#: ../../addon/keepout/keepout.php:36 ../../addon/cards/Mod_Cards.php:89
#: ../../addon/cards/Mod_Card_edit.php:51 ../../addon/pumpio/pumpio.php:44
#: ../../addon/articles/Mod_Article_edit.php:51
#: ../../addon/articles/Mod_Articles.php:94 ../../addon/wiki/Mod_Wiki.php:63
#: ../../addon/wiki/Mod_Wiki.php:288 ../../addon/wiki/Mod_Wiki.php:425
#: ../../Zotlabs/Lib/Chatroom.php:135 ../../Zotlabs/Module/Page.php:34
-#: ../../Zotlabs/Module/Page.php:133 ../../Zotlabs/Module/Display.php:386
-#: ../../Zotlabs/Module/Cover_photo.php:298
-#: ../../Zotlabs/Module/Cover_photo.php:311
+#: ../../Zotlabs/Module/Page.php:133 ../../Zotlabs/Module/Display.php:387
+#: ../../Zotlabs/Module/Cover_photo.php:299
+#: ../../Zotlabs/Module/Cover_photo.php:312
#: ../../Zotlabs/Module/Editwebpage.php:68
#: ../../Zotlabs/Module/Editwebpage.php:89
#: ../../Zotlabs/Module/Editwebpage.php:107
@@ -665,404 +662,404 @@ msgstr ""
#: ../../Zotlabs/Module/Filestorage.php:96
#: ../../Zotlabs/Module/Filestorage.php:119
#: ../../Zotlabs/Module/Filestorage.php:165
-#: ../../Zotlabs/Module/Register.php:200 ../../Zotlabs/Module/Appman.php:163
+#: ../../Zotlabs/Module/Register.php:201 ../../Zotlabs/Module/Appman.php:163
#: ../../Zotlabs/Module/Viewsrc.php:19 ../../Zotlabs/Module/Item.php:512
#: ../../Zotlabs/Module/Item.php:531 ../../Zotlabs/Module/Item.php:541
-#: ../../Zotlabs/Module/Item.php:1457 ../../Zotlabs/Module/Achievements.php:34
+#: ../../Zotlabs/Module/Item.php:1462 ../../Zotlabs/Module/Achievements.php:34
#: ../../Zotlabs/Module/Connedit.php:299 ../../Zotlabs/Module/Defperms.php:181
#: ../../Zotlabs/Module/Suggest.php:32 ../../Zotlabs/Module/Regmod.php:20
-#: ../../Zotlabs/Module/Profile_photo.php:389
-#: ../../Zotlabs/Module/Profile_photo.php:420
+#: ../../Zotlabs/Module/Profile_photo.php:390
+#: ../../Zotlabs/Module/Profile_photo.php:421
#: ../../Zotlabs/Module/Viewconnections.php:28
#: ../../Zotlabs/Module/Viewconnections.php:33
#: ../../Zotlabs/Module/Block.php:24 ../../Zotlabs/Module/Block.php:74
-#: ../../Zotlabs/Module/Api.php:24 ../../Zotlabs/Module/Layouts.php:71
+#: ../../Zotlabs/Module/Api.php:26 ../../Zotlabs/Module/Layouts.php:71
#: ../../Zotlabs/Module/Layouts.php:78 ../../Zotlabs/Module/Layouts.php:89
#: ../../Zotlabs/Module/Common.php:38 ../../Zotlabs/Module/Locs.php:98
#: ../../Zotlabs/Module/Menu.php:130 ../../Zotlabs/Module/Menu.php:141
#: ../../Zotlabs/Module/Manage.php:10 ../../Zotlabs/Module/Bookmarks.php:70
#: ../../Zotlabs/Module/Attach_edit.php:90
#: ../../Zotlabs/Module/Attach_edit.php:99
-#: ../../Zotlabs/Module/Attach_edit.php:106 ../../Zotlabs/Module/Group.php:14
-#: ../../Zotlabs/Module/Group.php:30 ../../Zotlabs/Module/Invite.php:64
-#: ../../Zotlabs/Module/Invite.php:315 ../../Zotlabs/Module/Like.php:242
+#: ../../Zotlabs/Module/Attach_edit.php:106 ../../Zotlabs/Module/Group.php:15
+#: ../../Zotlabs/Module/Group.php:31 ../../Zotlabs/Module/Invite.php:65
+#: ../../Zotlabs/Module/Invite.php:316 ../../Zotlabs/Module/Like.php:242
#: ../../Zotlabs/Module/Blocks.php:73 ../../Zotlabs/Module/Blocks.php:80
-#: ../../Zotlabs/Module/Mitem.php:129 ../../Zotlabs/Module/New_channel.php:105
-#: ../../Zotlabs/Module/New_channel.php:130 ../../Zotlabs/Module/Photos.php:71
-#: ../../Zotlabs/Module/Channel.php:233 ../../Zotlabs/Module/Channel.php:390
-#: ../../Zotlabs/Module/Channel.php:428 ../../Zotlabs/Module/Profile.php:99
+#: ../../Zotlabs/Module/Mitem.php:129 ../../Zotlabs/Module/New_channel.php:106
+#: ../../Zotlabs/Module/New_channel.php:131 ../../Zotlabs/Module/Photos.php:71
+#: ../../Zotlabs/Module/Channel.php:234 ../../Zotlabs/Module/Channel.php:391
+#: ../../Zotlabs/Module/Channel.php:429 ../../Zotlabs/Module/Profile.php:99
#: ../../Zotlabs/Module/Profile.php:114 ../../Zotlabs/Module/Moderate.php:15
-#: ../../Zotlabs/Module/Sources.php:80 ../../Zotlabs/Module/Profiles.php:167
-#: ../../Zotlabs/Module/Profiles.php:610
+#: ../../Zotlabs/Module/Sources.php:80 ../../Zotlabs/Module/Profiles.php:168
+#: ../../Zotlabs/Module/Profiles.php:611
#: ../../Zotlabs/Module/Sharedwithme.php:19
#: ../../Zotlabs/Module/Authtest.php:13
#: ../../Zotlabs/Module/Channel_calendar.php:232
#: ../../Zotlabs/Module/Chat.php:111 ../../Zotlabs/Module/Chat.php:116
#: ../../Zotlabs/Module/Editlayout.php:67
#: ../../Zotlabs/Module/Editlayout.php:90 ../../Zotlabs/Module/Settings.php:59
-#: ../../Zotlabs/Module/Setup.php:218 ../../Zotlabs/Module/Editpost.php:17
+#: ../../Zotlabs/Module/Setup.php:220 ../../Zotlabs/Module/Editpost.php:17
#: ../../Zotlabs/Module/Connections.php:32
#: ../../Zotlabs/Module/Editblock.php:67 ../../Zotlabs/Module/Vote.php:19
#: ../../Zotlabs/Web/WebServer.php:119
msgid "Permission denied."
msgstr ""
-#: ../../include/items.php:4425 ../../Zotlabs/Module/Group.php:62
-#: ../../Zotlabs/Module/Group.php:206
+#: ../../include/items.php:4433 ../../Zotlabs/Module/Group.php:63
+#: ../../Zotlabs/Module/Group.php:207
msgid "Privacy group not found."
msgstr ""
-#: ../../include/items.php:4441
+#: ../../include/items.php:4449
msgid "Privacy group is empty."
msgstr ""
-#: ../../include/items.php:4448
+#: ../../include/items.php:4456
#, php-format
msgid "Privacy group: %s"
msgstr ""
-#: ../../include/items.php:4458
+#: ../../include/items.php:4466
#, php-format
msgid "Connection: %s"
msgstr ""
-#: ../../include/items.php:4460
+#: ../../include/items.php:4468
msgid "Connection not found."
msgstr ""
-#: ../../include/features.php:55 ../../Zotlabs/Module/Admin/Features.php:55
+#: ../../include/features.php:53 ../../Zotlabs/Module/Admin/Features.php:55
#: ../../Zotlabs/Module/Admin/Features.php:56
#: ../../Zotlabs/Module/Settings/Features.php:38
msgid "Off"
msgstr ""
-#: ../../include/features.php:55 ../../Zotlabs/Module/Admin/Features.php:55
+#: ../../include/features.php:53 ../../Zotlabs/Module/Admin/Features.php:55
#: ../../Zotlabs/Module/Admin/Features.php:56
#: ../../Zotlabs/Module/Settings/Features.php:38
msgid "On"
msgstr ""
-#: ../../include/features.php:82 ../../include/nav.php:488
-#: ../../include/nav.php:491 ../../Zotlabs/Lib/Apps.php:351
+#: ../../include/features.php:80 ../../include/nav.php:489
+#: ../../include/nav.php:492 ../../Zotlabs/Lib/Apps.php:352
msgid "Calendar"
msgstr ""
-#: ../../include/features.php:86
+#: ../../include/features.php:84
msgid "Start calendar week on Monday"
msgstr ""
-#: ../../include/features.php:87
+#: ../../include/features.php:85
msgid "Default is Sunday"
msgstr ""
-#: ../../include/features.php:94
+#: ../../include/features.php:92
msgid "Event Timezone Selection"
msgstr ""
-#: ../../include/features.php:95
+#: ../../include/features.php:93
msgid "Allow event creation in timezones other than your own."
msgstr ""
-#: ../../include/features.php:104
+#: ../../include/features.php:102
msgid "Channel Home"
msgstr ""
-#: ../../include/features.php:108
+#: ../../include/features.php:106
msgid "Search by Date"
msgstr ""
-#: ../../include/features.php:109
+#: ../../include/features.php:107
msgid "Ability to select posts by date ranges"
msgstr ""
-#: ../../include/features.php:116
+#: ../../include/features.php:114
msgid "Tag Cloud"
msgstr ""
-#: ../../include/features.php:117
+#: ../../include/features.php:115
msgid "Provide a personal tag cloud on your channel page"
msgstr ""
-#: ../../include/features.php:124 ../../include/features.php:358
+#: ../../include/features.php:122 ../../include/features.php:356
msgid "Use blog/list mode"
msgstr ""
-#: ../../include/features.php:125 ../../include/features.php:359
+#: ../../include/features.php:123 ../../include/features.php:357
msgid "Comments will be displayed separately"
msgstr ""
-#: ../../include/features.php:133 ../../include/text.php:1077
-#: ../../Zotlabs/Lib/Apps.php:338 ../../Zotlabs/Module/Connections.php:399
+#: ../../include/features.php:131 ../../include/text.php:1078
+#: ../../Zotlabs/Lib/Apps.php:339 ../../Zotlabs/Module/Connections.php:399
msgid "Connections"
msgstr ""
-#: ../../include/features.php:137
+#: ../../include/features.php:135
msgid "Connection Filtering"
msgstr ""
-#: ../../include/features.php:138
+#: ../../include/features.php:136
msgid "Filter incoming posts from connections based on keywords/content"
msgstr ""
-#: ../../include/features.php:146
+#: ../../include/features.php:144
msgid "Conversation"
msgstr ""
-#: ../../include/features.php:158
+#: ../../include/features.php:156
msgid "Emoji Reactions"
msgstr ""
-#: ../../include/features.php:159
+#: ../../include/features.php:157
msgid "Add emoji reaction ability to posts"
msgstr ""
-#: ../../include/features.php:166
+#: ../../include/features.php:164
msgid "Dislike Posts"
msgstr ""
-#: ../../include/features.php:167
+#: ../../include/features.php:165
msgid "Ability to dislike posts/comments"
msgstr ""
-#: ../../include/features.php:174
+#: ../../include/features.php:172
msgid "Star Posts"
msgstr ""
-#: ../../include/features.php:175
+#: ../../include/features.php:173
msgid "Ability to mark special posts with a star indicator"
msgstr ""
-#: ../../include/features.php:182
+#: ../../include/features.php:180
msgid "Reply on comment"
msgstr ""
-#: ../../include/features.php:183
+#: ../../include/features.php:181
msgid "Ability to reply on selected comment"
msgstr ""
-#: ../../include/features.php:192 ../../Zotlabs/Lib/Apps.php:352
+#: ../../include/features.php:190 ../../Zotlabs/Lib/Apps.php:353
msgid "Directory"
msgstr ""
-#: ../../include/features.php:196
+#: ../../include/features.php:194
msgid "Advanced Directory Search"
msgstr ""
-#: ../../include/features.php:197
+#: ../../include/features.php:195
msgid "Allows creation of complex directory search queries"
msgstr ""
-#: ../../include/features.php:206
+#: ../../include/features.php:204
msgid "Editor"
msgstr ""
-#: ../../include/features.php:210
+#: ../../include/features.php:208
msgid "Post Categories"
msgstr ""
-#: ../../include/features.php:211
+#: ../../include/features.php:209
msgid "Add categories to your posts"
msgstr ""
-#: ../../include/features.php:218
+#: ../../include/features.php:216
msgid "Large Photos"
msgstr ""
-#: ../../include/features.php:219
+#: ../../include/features.php:217
msgid ""
"Include large (1024px) photo thumbnails in posts. If not enabled, use small "
"(640px) photo thumbnails"
msgstr ""
-#: ../../include/features.php:226
+#: ../../include/features.php:224
msgid "Even More Encryption"
msgstr ""
-#: ../../include/features.php:227
+#: ../../include/features.php:225
msgid ""
"Allow optional encryption of content end-to-end with a shared secret key"
msgstr ""
-#: ../../include/features.php:234
+#: ../../include/features.php:232
msgid "Disable Comments"
msgstr ""
-#: ../../include/features.php:235
+#: ../../include/features.php:233
msgid "Provide the option to disable comments for a post"
msgstr ""
-#: ../../include/features.php:242
+#: ../../include/features.php:240
msgid "Delayed Posting"
msgstr ""
-#: ../../include/features.php:243
+#: ../../include/features.php:241
msgid "Allow posts to be published at a later date"
msgstr ""
-#: ../../include/features.php:250
+#: ../../include/features.php:248
msgid "Content Expiration"
msgstr ""
-#: ../../include/features.php:251
+#: ../../include/features.php:249
msgid "Remove posts/comments and/or private messages at a future time"
msgstr ""
-#: ../../include/features.php:258
+#: ../../include/features.php:256
msgid "Suppress Duplicate Posts/Comments"
msgstr ""
-#: ../../include/features.php:259
+#: ../../include/features.php:257
msgid ""
"Prevent posts with identical content to be published with less than two "
"minutes in between submissions."
msgstr ""
-#: ../../include/features.php:266
+#: ../../include/features.php:264
msgid "Auto-save drafts of posts and comments"
msgstr ""
-#: ../../include/features.php:267
+#: ../../include/features.php:265
msgid ""
"Automatically saves post and comment drafts in local browser storage to help "
"prevent accidental loss of compositions"
msgstr ""
-#: ../../include/features.php:276
+#: ../../include/features.php:274
msgid "Manage"
msgstr ""
-#: ../../include/features.php:280
+#: ../../include/features.php:278
msgid "Navigation Channel Select"
msgstr ""
-#: ../../include/features.php:281
+#: ../../include/features.php:279
msgid "Change channels directly from within the navigation dropdown menu"
msgstr ""
-#: ../../include/features.php:290 ../../Zotlabs/Widget/Notifications.php:23
+#: ../../include/features.php:288 ../../Zotlabs/Widget/Notifications.php:23
#: ../../Zotlabs/Module/Connections.php:347
msgid "Network"
msgstr ""
-#: ../../include/features.php:294
+#: ../../include/features.php:292
msgid "Events Filter"
msgstr ""
-#: ../../include/features.php:295
+#: ../../include/features.php:293
msgid "Ability to display only events"
msgstr ""
-#: ../../include/features.php:302
+#: ../../include/features.php:300
msgid "Polls Filter"
msgstr ""
-#: ../../include/features.php:303
+#: ../../include/features.php:301
msgid "Ability to display only polls"
msgstr ""
-#: ../../include/features.php:310 ../../Zotlabs/Widget/Savedsearch.php:89
+#: ../../include/features.php:308 ../../Zotlabs/Widget/Savedsearch.php:89
msgid "Saved Searches"
msgstr ""
-#: ../../include/features.php:311
+#: ../../include/features.php:309
msgid "Save search terms for re-use"
msgstr ""
-#: ../../include/features.php:318 ../../include/contact_widgets.php:53
+#: ../../include/features.php:316 ../../include/contact_widgets.php:55
#: ../../Zotlabs/Widget/Activity_filter.php:196
#: ../../Zotlabs/Widget/Filer.php:33
msgid "Saved Folders"
msgstr ""
-#: ../../include/features.php:319
+#: ../../include/features.php:317
msgid "Ability to file posts under folders"
msgstr ""
-#: ../../include/features.php:326
+#: ../../include/features.php:324
msgid "Alternate Stream Order"
msgstr ""
-#: ../../include/features.php:327
+#: ../../include/features.php:325
msgid ""
"Ability to order the stream by last post date, last comment date or "
"unthreaded activities"
msgstr ""
-#: ../../include/features.php:334
+#: ../../include/features.php:332
msgid "Contact Filter"
msgstr ""
-#: ../../include/features.php:335
+#: ../../include/features.php:333
msgid "Ability to display only posts of a selected contact"
msgstr ""
-#: ../../include/features.php:342
+#: ../../include/features.php:340
msgid "Forum Filter"
msgstr ""
-#: ../../include/features.php:343
+#: ../../include/features.php:341
msgid "Ability to display only posts of a specific forum"
msgstr ""
-#: ../../include/features.php:350
+#: ../../include/features.php:348
msgid "Personal Posts Filter"
msgstr ""
-#: ../../include/features.php:351
+#: ../../include/features.php:349
msgid "Ability to display only posts that you've interacted on"
msgstr ""
-#: ../../include/features.php:368 ../../include/nav.php:469
-#: ../../Zotlabs/Lib/Apps.php:350
+#: ../../include/features.php:366 ../../include/nav.php:470
+#: ../../Zotlabs/Lib/Apps.php:351
#: ../../Zotlabs/Widget/Channel_activities.php:93
#: ../../Zotlabs/Module/Fbrowser.php:29
msgid "Photos"
msgstr ""
-#: ../../include/features.php:372
+#: ../../include/features.php:370
msgid "Photo Location"
msgstr ""
-#: ../../include/features.php:373
+#: ../../include/features.php:371
msgid "If location data is available on uploaded photos, link this to a map."
msgstr ""
-#: ../../include/features.php:380
+#: ../../include/features.php:378
msgid "Flag Adult Photos"
msgstr ""
-#: ../../include/features.php:381
+#: ../../include/features.php:379
msgid ""
"Provide photo edit option to hide inappropriate photos from default album "
"view"
msgstr ""
-#: ../../include/features.php:390 ../../Zotlabs/Lib/Apps.php:366
+#: ../../include/features.php:388 ../../Zotlabs/Lib/Apps.php:367
#: ../../Zotlabs/Module/Contactedit.php:430
msgid "Profiles"
msgstr ""
-#: ../../include/features.php:394
+#: ../../include/features.php:392
msgid "Advanced Profiles"
msgstr ""
-#: ../../include/features.php:395
+#: ../../include/features.php:393
msgid "Additional profile sections and selections"
msgstr ""
-#: ../../include/features.php:402
+#: ../../include/features.php:400
msgid "Profile Import/Export"
msgstr ""
-#: ../../include/features.php:403
+#: ../../include/features.php:401
msgid "Save and load profile details across sites/channels"
msgstr ""
-#: ../../include/features.php:410
+#: ../../include/features.php:408
msgid "Multiple Profiles"
msgstr ""
-#: ../../include/features.php:411
+#: ../../include/features.php:409
msgid "Ability to create multiple profiles"
msgstr ""
@@ -1180,12 +1177,12 @@ msgid "Monthly"
msgstr ""
#: ../../include/selectors.php:64 ../../include/selectors.php:81
-#: ../../include/channel.php:1728 ../../addon/openid/Mod_Id.php:85
+#: ../../include/channel.php:1729 ../../addon/openid/Mod_Id.php:85
msgid "Male"
msgstr ""
#: ../../include/selectors.php:64 ../../include/selectors.php:81
-#: ../../include/channel.php:1726 ../../addon/openid/Mod_Id.php:87
+#: ../../include/channel.php:1727 ../../addon/openid/Mod_Id.php:87
msgid "Female"
msgstr ""
@@ -1221,11 +1218,11 @@ msgstr ""
msgid "Hermaphrodite"
msgstr ""
-#: ../../include/selectors.php:64 ../../include/channel.php:1732
+#: ../../include/selectors.php:64 ../../include/channel.php:1733
msgid "Neuter"
msgstr ""
-#: ../../include/selectors.php:64 ../../include/channel.php:1734
+#: ../../include/selectors.php:64 ../../include/channel.php:1735
msgid "Non-specific"
msgstr ""
@@ -1321,8 +1318,8 @@ msgstr ""
msgid "Sex Addict"
msgstr ""
-#: ../../include/selectors.php:138 ../../include/channel.php:464
-#: ../../include/channel.php:467 ../../Zotlabs/Widget/Affinity.php:38
+#: ../../include/selectors.php:138 ../../include/channel.php:465
+#: ../../include/channel.php:468 ../../Zotlabs/Widget/Affinity.php:38
#: ../../Zotlabs/Module/Contactedit.php:283
#: ../../Zotlabs/Module/Connedit.php:581
msgid "Friends"
@@ -1423,14 +1420,12 @@ msgstr ""
#: ../../include/activities.php:36 ../../include/activities.php:38
#: ../../addon/openid/MysqlProvider.php:58
#: ../../addon/openid/MysqlProvider.php:59
-#: ../../addon/openid/MysqlProvider.php:60 ../../Zotlabs/Lib/Apps.php:364
-#: ../../Zotlabs/Module/Profile_photo.php:226
+#: ../../addon/openid/MysqlProvider.php:60 ../../Zotlabs/Lib/Apps.php:365
+#: ../../Zotlabs/Module/Profile_photo.php:227
msgid "Profile Photo"
msgstr ""
-#: ../../include/activities.php:36
-#: ../../store/[data]/smarty3/compiled/2cbde885645602969010e846a38817a1297aafb9_0.file.cover_photo.tpl.php:127
-#: ../../Zotlabs/Module/Cover_photo.php:229
+#: ../../include/activities.php:36 ../../Zotlabs/Module/Cover_photo.php:230
msgid "Cover Photo"
msgstr ""
@@ -1448,80 +1443,80 @@ msgstr ""
msgid "%1$s updated the %2$s. Changed %3$s."
msgstr ""
-#: ../../include/contact_widgets.php:11
+#: ../../include/contact_widgets.php:13
#, php-format
msgid "%d invitation available"
msgid_plural "%d invitations available"
msgstr[0] ""
msgstr[1] ""
-#: ../../include/contact_widgets.php:16 ../../include/acl_selectors.php:145
-#: ../../Zotlabs/Module/Admin/Site.php:405
+#: ../../include/contact_widgets.php:18 ../../include/acl_selectors.php:145
+#: ../../Zotlabs/Module/Admin/Site.php:406
msgid "Advanced"
msgstr ""
-#: ../../include/contact_widgets.php:19
+#: ../../include/contact_widgets.php:21
msgid "Find Channels"
msgstr ""
-#: ../../include/contact_widgets.php:20
+#: ../../include/contact_widgets.php:22
msgid "Enter name or interest"
msgstr ""
-#: ../../include/contact_widgets.php:21
+#: ../../include/contact_widgets.php:23
msgid "Connect/Follow"
msgstr ""
-#: ../../include/contact_widgets.php:22
+#: ../../include/contact_widgets.php:24
msgid "Examples: Robert Morgenstein, Fishing"
msgstr ""
-#: ../../include/contact_widgets.php:23 ../../Zotlabs/Module/Directory.php:435
+#: ../../include/contact_widgets.php:25 ../../Zotlabs/Module/Directory.php:435
#: ../../Zotlabs/Module/Directory.php:440
#: ../../Zotlabs/Module/Connections.php:407
msgid "Find"
msgstr ""
-#: ../../include/contact_widgets.php:24 ../../Zotlabs/Module/Suggest.php:77
+#: ../../include/contact_widgets.php:26 ../../Zotlabs/Module/Suggest.php:77
#: ../../Zotlabs/Module/Directory.php:439
msgid "Channel Suggestions"
msgstr ""
-#: ../../include/contact_widgets.php:26
+#: ../../include/contact_widgets.php:28
msgid "Random Profile"
msgstr ""
-#: ../../include/contact_widgets.php:27
+#: ../../include/contact_widgets.php:29
msgid "Invite Friends"
msgstr ""
-#: ../../include/contact_widgets.php:29
+#: ../../include/contact_widgets.php:31
msgid "Advanced example: name=fred and country=iceland"
msgstr ""
-#: ../../include/contact_widgets.php:56 ../../include/contact_widgets.php:118
-#: ../../include/contact_widgets.php:152
+#: ../../include/contact_widgets.php:58 ../../include/contact_widgets.php:121
+#: ../../include/contact_widgets.php:155
#: ../../addon/cards/Widget/Cards_categories.php:83
#: ../../addon/articles/Widget/Articles_categories.php:83
#: ../../Zotlabs/Widget/Appcategories.php:52 ../../Zotlabs/Widget/Filer.php:36
msgid "Everything"
msgstr ""
-#: ../../include/contact_widgets.php:115 ../../include/contact_widgets.php:149
-#: ../../include/taxonomy.php:423 ../../include/taxonomy.php:505
-#: ../../include/taxonomy.php:525 ../../include/taxonomy.php:546
+#: ../../include/contact_widgets.php:118 ../../include/contact_widgets.php:152
+#: ../../include/taxonomy.php:425 ../../include/taxonomy.php:507
+#: ../../include/taxonomy.php:527 ../../include/taxonomy.php:548
#: ../../addon/cards/Widget/Cards_categories.php:80
#: ../../addon/articles/Widget/Articles_categories.php:80
-#: ../../Zotlabs/Storage/Browser.php:292 ../../Zotlabs/Storage/Browser.php:391
-#: ../../Zotlabs/Storage/Browser.php:406 ../../Zotlabs/Module/Cdav.php:1062
+#: ../../Zotlabs/Storage/Browser.php:293 ../../Zotlabs/Storage/Browser.php:392
+#: ../../Zotlabs/Storage/Browser.php:407 ../../Zotlabs/Module/Cdav.php:1062
msgid "Categories"
msgstr ""
-#: ../../include/contact_widgets.php:182
+#: ../../include/contact_widgets.php:185
msgid "Common Connections"
msgstr ""
-#: ../../include/contact_widgets.php:186
+#: ../../include/contact_widgets.php:189
#, php-format
msgid "View all %d common connections"
msgstr ""
@@ -1535,10 +1530,10 @@ msgid "Summary: "
msgstr ""
#: ../../include/cdav.php:158 ../../include/cdav.php:159
-#: ../../include/cdav.php:167 ../../include/conversation.php:999
-#: ../../Zotlabs/Lib/Apps.php:1167 ../../Zotlabs/Lib/Apps.php:1251
-#: ../../Zotlabs/Lib/Activity.php:1675 ../../Zotlabs/Widget/Album.php:90
-#: ../../Zotlabs/Widget/Pinned.php:255 ../../Zotlabs/Widget/Portfolio.php:99
+#: ../../include/cdav.php:167 ../../include/conversation.php:1000
+#: ../../Zotlabs/Lib/Apps.php:1168 ../../Zotlabs/Lib/Apps.php:1252
+#: ../../Zotlabs/Lib/Activity.php:1684 ../../Zotlabs/Widget/Album.php:90
+#: ../../Zotlabs/Widget/Pinned.php:257 ../../Zotlabs/Widget/Portfolio.php:99
#: ../../Zotlabs/Module/Embedphotos.php:177 ../../Zotlabs/Module/Photos.php:788
#: ../../Zotlabs/Module/Photos.php:1246
msgid "Unknown"
@@ -1576,8 +1571,8 @@ msgid "edit"
msgstr ""
#: ../../include/group.php:327 ../../include/acl_selectors.php:87
-#: ../../Zotlabs/Lib/Apps.php:367 ../../Zotlabs/Widget/Activity_filter.php:95
-#: ../../Zotlabs/Module/Group.php:143
+#: ../../Zotlabs/Lib/Apps.php:368 ../../Zotlabs/Widget/Activity_filter.php:95
+#: ../../Zotlabs/Module/Group.php:144
msgid "Privacy Groups"
msgstr ""
@@ -1597,52 +1592,52 @@ msgstr ""
msgid "add"
msgstr ""
-#: ../../include/taxonomy.php:324
+#: ../../include/taxonomy.php:326
msgid "Trending"
msgstr ""
-#: ../../include/taxonomy.php:324 ../../include/taxonomy.php:463
-#: ../../include/taxonomy.php:484 ../../Zotlabs/Widget/Tagcloud.php:27
+#: ../../include/taxonomy.php:326 ../../include/taxonomy.php:465
+#: ../../include/taxonomy.php:486 ../../Zotlabs/Widget/Tagcloud.php:27
msgid "Tags"
msgstr ""
-#: ../../include/taxonomy.php:564
+#: ../../include/taxonomy.php:566
msgid "Keywords"
msgstr ""
-#: ../../include/taxonomy.php:585
+#: ../../include/taxonomy.php:587
msgid "have"
msgstr ""
-#: ../../include/taxonomy.php:585
+#: ../../include/taxonomy.php:587
msgid "has"
msgstr ""
-#: ../../include/taxonomy.php:586
+#: ../../include/taxonomy.php:588
msgid "want"
msgstr ""
-#: ../../include/taxonomy.php:586
+#: ../../include/taxonomy.php:588
msgid "wants"
msgstr ""
-#: ../../include/taxonomy.php:587 ../../Zotlabs/Lib/ThreadItem.php:333
+#: ../../include/taxonomy.php:589 ../../Zotlabs/Lib/ThreadItem.php:332
msgid "like"
msgstr ""
-#: ../../include/taxonomy.php:587
+#: ../../include/taxonomy.php:589
msgid "likes"
msgstr ""
-#: ../../include/taxonomy.php:588 ../../Zotlabs/Lib/ThreadItem.php:334
+#: ../../include/taxonomy.php:590 ../../Zotlabs/Lib/ThreadItem.php:333
msgid "dislike"
msgstr ""
-#: ../../include/taxonomy.php:588
+#: ../../include/taxonomy.php:590
msgid "dislikes"
msgstr ""
-#: ../../include/taxonomy.php:675 ../../include/conversation.php:1550
+#: ../../include/taxonomy.php:677 ../../include/conversation.php:1552
#: ../../Zotlabs/Module/Photos.php:1129
msgctxt "noun"
msgid "Like"
@@ -1650,130 +1645,108 @@ msgid_plural "Likes"
msgstr[0] ""
msgstr[1] ""
-#: ../../include/photo/photo_driver.php:457
-#: ../../Zotlabs/Module/Profile_photo.php:167
-#: ../../Zotlabs/Module/Profile_photo.php:336
+#: ../../include/photo/photo_driver.php:458
+#: ../../Zotlabs/Module/Profile_photo.php:168
+#: ../../Zotlabs/Module/Profile_photo.php:337
msgid "Profile Photos"
msgstr ""
-#: ../../include/account.php:38
+#: ../../include/account.php:39
msgid "The provided email address is not valid"
msgstr ""
-#: ../../include/account.php:41
+#: ../../include/account.php:42
msgid "The provided email domain is not among those allowed on this site"
msgstr ""
-#: ../../include/account.php:48
+#: ../../include/account.php:49
msgid "The provided email address is already registered at this site"
msgstr ""
-#: ../../include/account.php:55
+#: ../../include/account.php:56
msgid ""
"There is a pending registration for this address - click \"Register\" to "
"continue verification"
msgstr ""
-#: ../../include/account.php:94
+#: ../../include/account.php:95
msgid "An invitation is required."
msgstr ""
-#: ../../include/account.php:103
+#: ../../include/account.php:104
msgid "Invitation could not be verified."
msgstr ""
-#: ../../include/account.php:191
+#: ../../include/account.php:192
msgid "Please enter the required information."
msgstr ""
-#: ../../include/account.php:258 ../../include/account.php:366
+#: ../../include/account.php:259 ../../include/account.php:367
msgid "Failed to store account information."
msgstr ""
-#: ../../include/account.php:435 ../../include/account.php:503
-#: ../../Zotlabs/Module/Register.php:328
+#: ../../include/account.php:436 ../../include/account.php:504
+#: ../../Zotlabs/Module/Register.php:329
#, php-format
msgid "Registration confirmation for %s"
msgstr ""
-#: ../../include/account.php:578
+#: ../../include/account.php:579
#, php-format
msgid "Registration request at %s"
msgstr ""
-#: ../../include/account.php:600
+#: ../../include/account.php:601
msgid "your registration password"
msgstr ""
-#: ../../include/account.php:606 ../../include/account.php:695
+#: ../../include/account.php:607 ../../include/account.php:696
#, php-format
msgid "Registration details for %s"
msgstr ""
-#: ../../include/account.php:706
+#: ../../include/account.php:707
msgid "Account approved."
msgstr ""
-#: ../../include/account.php:762
+#: ../../include/account.php:763
#, php-format
msgid "Registration revoked for %s"
msgstr ""
-#: ../../include/account.php:769
+#: ../../include/account.php:770
#, php-format
msgid "Could not revoke registration for %s"
msgstr ""
-#: ../../include/account.php:1186 ../../include/account.php:1188
+#: ../../include/account.php:1187 ../../include/account.php:1189
msgid "Click here to upgrade."
msgstr ""
-#: ../../include/account.php:1194
+#: ../../include/account.php:1195
msgid "This action exceeds the limits set by your subscription plan."
msgstr ""
-#: ../../include/account.php:1199
+#: ../../include/account.php:1200
msgid "This action is not available under your subscription plan."
msgstr ""
-#: ../../include/account.php:1259
+#: ../../include/account.php:1260
msgid "open"
msgstr ""
-#: ../../include/account.php:1259
+#: ../../include/account.php:1260
msgid "closed"
msgstr ""
-#: ../../include/account.php:1266
+#: ../../include/account.php:1267
msgid "Registration is currently"
msgstr ""
-#: ../../include/account.php:1275
+#: ../../include/account.php:1276
msgid "please come back"
msgstr ""
-#: ../../include/help.php:82
-msgid "Help:"
-msgstr ""
-
-#: ../../include/help.php:119 ../../include/help.php:127
-#: ../../include/nav.php:193 ../../include/nav.php:340
-#: ../../Zotlabs/Lib/Apps.php:353 ../../Zotlabs/Module/Layouts.php:184
-msgid "Help"
-msgstr ""
-
-#: ../../include/help.php:131
-msgid "Not Found"
-msgstr ""
-
-#: ../../include/help.php:134 ../../addon/cards/cards.php:104
-#: ../../addon/articles/articles.php:105
-#: ../../addon/wiki/Lib/NativeWikiPage.php:545
-#: ../../Zotlabs/Module/Page.php:136 ../../Zotlabs/Module/Display.php:154
-#: ../../Zotlabs/Module/Block.php:77 ../../Zotlabs/Web/Router.php:186
-msgid "Page not found."
-msgstr ""
-
#: ../../include/js_strings.php:5
msgid "Delete this item?"
msgstr ""
@@ -1811,7 +1784,7 @@ msgstr ""
msgid "Password too short"
msgstr ""
-#: ../../include/js_strings.php:13 ../../Zotlabs/Module/Register.php:161
+#: ../../include/js_strings.php:13 ../../Zotlabs/Module/Register.php:162
msgid "Passwords do not match"
msgstr ""
@@ -1860,8 +1833,8 @@ msgid "Unsaved changes. Are you sure you wish to leave this page?"
msgstr ""
#: ../../include/js_strings.php:26 ../../Zotlabs/Module/Locs.php:121
-#: ../../Zotlabs/Module/Pubsites.php:54 ../../Zotlabs/Module/Profiles.php:475
-#: ../../Zotlabs/Module/Profiles.php:746 ../../Zotlabs/Module/Cdav.php:1006
+#: ../../Zotlabs/Module/Pubsites.php:55 ../../Zotlabs/Module/Profiles.php:476
+#: ../../Zotlabs/Module/Profiles.php:749 ../../Zotlabs/Module/Cdav.php:1006
msgid "Location"
msgstr ""
@@ -1920,7 +1893,7 @@ msgid "Pin to the top"
msgstr ""
#: ../../include/js_strings.php:40 ../../Zotlabs/Lib/ThreadItem.php:494
-#: ../../Zotlabs/Widget/Pinned.php:149
+#: ../../Zotlabs/Widget/Pinned.php:151
msgid "Unpin from the top"
msgstr ""
@@ -2007,19 +1980,19 @@ msgstr ""
msgid "timeago.numbers"
msgstr ""
-#: ../../include/js_strings.php:75 ../../include/text.php:1502
+#: ../../include/js_strings.php:75 ../../include/text.php:1503
msgid "January"
msgstr ""
-#: ../../include/js_strings.php:76 ../../include/text.php:1502
+#: ../../include/js_strings.php:76 ../../include/text.php:1503
msgid "February"
msgstr ""
-#: ../../include/js_strings.php:77 ../../include/text.php:1502
+#: ../../include/js_strings.php:77 ../../include/text.php:1503
msgid "March"
msgstr ""
-#: ../../include/js_strings.php:78 ../../include/text.php:1502
+#: ../../include/js_strings.php:78 ../../include/text.php:1503
msgid "April"
msgstr ""
@@ -2028,31 +2001,31 @@ msgctxt "long"
msgid "May"
msgstr ""
-#: ../../include/js_strings.php:80 ../../include/text.php:1502
+#: ../../include/js_strings.php:80 ../../include/text.php:1503
msgid "June"
msgstr ""
-#: ../../include/js_strings.php:81 ../../include/text.php:1502
+#: ../../include/js_strings.php:81 ../../include/text.php:1503
msgid "July"
msgstr ""
-#: ../../include/js_strings.php:82 ../../include/text.php:1502
+#: ../../include/js_strings.php:82 ../../include/text.php:1503
msgid "August"
msgstr ""
-#: ../../include/js_strings.php:83 ../../include/text.php:1502
+#: ../../include/js_strings.php:83 ../../include/text.php:1503
msgid "September"
msgstr ""
-#: ../../include/js_strings.php:84 ../../include/text.php:1502
+#: ../../include/js_strings.php:84 ../../include/text.php:1503
msgid "October"
msgstr ""
-#: ../../include/js_strings.php:85 ../../include/text.php:1502
+#: ../../include/js_strings.php:85 ../../include/text.php:1503
msgid "November"
msgstr ""
-#: ../../include/js_strings.php:86 ../../include/text.php:1502
+#: ../../include/js_strings.php:86 ../../include/text.php:1503
msgid "December"
msgstr ""
@@ -2105,31 +2078,31 @@ msgstr ""
msgid "Dec"
msgstr ""
-#: ../../include/js_strings.php:99 ../../include/text.php:1498
+#: ../../include/js_strings.php:99 ../../include/text.php:1499
msgid "Sunday"
msgstr ""
-#: ../../include/js_strings.php:100 ../../include/text.php:1498
+#: ../../include/js_strings.php:100 ../../include/text.php:1499
msgid "Monday"
msgstr ""
-#: ../../include/js_strings.php:101 ../../include/text.php:1498
+#: ../../include/js_strings.php:101 ../../include/text.php:1499
msgid "Tuesday"
msgstr ""
-#: ../../include/js_strings.php:102 ../../include/text.php:1498
+#: ../../include/js_strings.php:102 ../../include/text.php:1499
msgid "Wednesday"
msgstr ""
-#: ../../include/js_strings.php:103 ../../include/text.php:1498
+#: ../../include/js_strings.php:103 ../../include/text.php:1499
msgid "Thursday"
msgstr ""
-#: ../../include/js_strings.php:104 ../../include/text.php:1498
+#: ../../include/js_strings.php:104 ../../include/text.php:1499
msgid "Friday"
msgstr ""
-#: ../../include/js_strings.php:105 ../../include/text.php:1498
+#: ../../include/js_strings.php:105 ../../include/text.php:1499
msgid "Saturday"
msgstr ""
@@ -2199,126 +2172,126 @@ msgstr ""
#: ../../addon/cart/submodules/orderoptions.php:358
#: ../../addon/cart/submodules/orderoptions.php:434
#: ../../addon/cart/submodules/orderoptions.php:458
-#: ../../Zotlabs/Module/Register.php:498 ../../Zotlabs/Module/Appman.php:218
-#: ../../Zotlabs/Module/Appman.php:219 ../../Zotlabs/Module/Profiles.php:757
-#: ../../Zotlabs/Module/Profiles.php:761
+#: ../../Zotlabs/Module/Register.php:501 ../../Zotlabs/Module/Appman.php:218
+#: ../../Zotlabs/Module/Appman.php:219 ../../Zotlabs/Module/Profiles.php:760
+#: ../../Zotlabs/Module/Profiles.php:764
#: ../../Zotlabs/Module/Settings/Multifactor.php:84
msgid "Required"
msgstr ""
-#: ../../include/zid.php:410
+#: ../../include/zid.php:411
#, php-format
msgid "OpenWebAuth: %1$s welcomes %2$s"
msgstr ""
-#: ../../include/conversation.php:147 ../../include/text.php:2352
+#: ../../include/conversation.php:148 ../../include/text.php:2358
#: ../../addon/redphotos/redphotohelper.php:71
#: ../../addon/diaspora/Receiver.php:1693
#: ../../Zotlabs/Module/Subthread.php:112 ../../Zotlabs/Module/Tagger.php:71
msgid "photo"
msgstr ""
-#: ../../include/conversation.php:155 ../../Zotlabs/Module/Like.php:183
+#: ../../include/conversation.php:156 ../../Zotlabs/Module/Like.php:183
msgid "channel"
msgstr ""
-#: ../../include/conversation.php:178 ../../include/markdown.php:208
-#: ../../include/text.php:2358 ../../include/bbcode.php:571
+#: ../../include/conversation.php:179 ../../include/markdown.php:208
+#: ../../include/text.php:2364 ../../include/bbcode.php:572
#: ../../Zotlabs/Module/Tagger.php:79
msgid "post"
msgstr ""
-#: ../../include/conversation.php:180 ../../include/text.php:2360
+#: ../../include/conversation.php:181 ../../include/text.php:2366
#: ../../Zotlabs/Module/Tagger.php:81
msgid "comment"
msgstr ""
-#: ../../include/conversation.php:194 ../../addon/diaspora/Receiver.php:1628
+#: ../../include/conversation.php:195 ../../addon/diaspora/Receiver.php:1628
#: ../../Zotlabs/Module/Like.php:483
#, php-format
msgid "%1$s likes %2$s's %3$s"
msgstr ""
-#: ../../include/conversation.php:196
+#: ../../include/conversation.php:197
#, php-format
msgid "likes %1$s's %2$s"
msgstr ""
-#: ../../include/conversation.php:199 ../../Zotlabs/Module/Like.php:485
+#: ../../include/conversation.php:200 ../../Zotlabs/Module/Like.php:485
#, php-format
msgid "%1$s doesn't like %2$s's %3$s"
msgstr ""
-#: ../../include/conversation.php:200
+#: ../../include/conversation.php:201
#, php-format
msgid "doesn't like %1$s's %2$s"
msgstr ""
-#: ../../include/conversation.php:203
+#: ../../include/conversation.php:204
#, php-format
msgid "%1$s repeated %2$s's %3$s"
msgstr ""
-#: ../../include/conversation.php:204
+#: ../../include/conversation.php:205
#, php-format
msgid "repeated %1$s's %2$s"
msgstr ""
-#: ../../include/conversation.php:332 ../../Zotlabs/Lib/ThreadItem.php:532
+#: ../../include/conversation.php:333 ../../Zotlabs/Lib/ThreadItem.php:532
msgid "This is an unsaved preview"
msgstr ""
-#: ../../include/conversation.php:464 ../../Zotlabs/Module/Photos.php:1110
+#: ../../include/conversation.php:465 ../../Zotlabs/Module/Photos.php:1110
msgctxt "title"
msgid "Likes"
msgstr ""
-#: ../../include/conversation.php:465 ../../Zotlabs/Module/Photos.php:1110
+#: ../../include/conversation.php:466 ../../Zotlabs/Module/Photos.php:1110
msgctxt "title"
msgid "Dislikes"
msgstr ""
-#: ../../include/conversation.php:466 ../../Zotlabs/Widget/Pinned.php:71
+#: ../../include/conversation.php:467 ../../Zotlabs/Widget/Pinned.php:73
#: ../../Zotlabs/Module/Photos.php:1111
msgctxt "title"
msgid "Attending"
msgstr ""
-#: ../../include/conversation.php:467 ../../Zotlabs/Widget/Pinned.php:72
+#: ../../include/conversation.php:468 ../../Zotlabs/Widget/Pinned.php:74
#: ../../Zotlabs/Module/Photos.php:1111
msgctxt "title"
msgid "Not attending"
msgstr ""
-#: ../../include/conversation.php:468 ../../Zotlabs/Widget/Pinned.php:73
+#: ../../include/conversation.php:469 ../../Zotlabs/Widget/Pinned.php:75
#: ../../Zotlabs/Module/Photos.php:1111
msgctxt "title"
msgid "Might attend"
msgstr ""
-#: ../../include/conversation.php:470
+#: ../../include/conversation.php:471
msgctxt "title"
msgid "Repeats"
msgstr ""
-#: ../../include/conversation.php:539
+#: ../../include/conversation.php:540
msgid "Select"
msgstr ""
-#: ../../include/conversation.php:540 ../../include/conversation.php:601
+#: ../../include/conversation.php:541 ../../include/conversation.php:602
#: ../../addon/cards/Mod_Card_edit.php:130
-#: ../../addon/articles/Mod_Article_edit.php:128 ../../Zotlabs/Lib/Apps.php:617
-#: ../../Zotlabs/Lib/ThreadItem.php:184 ../../Zotlabs/Lib/ThreadItem.php:540
-#: ../../Zotlabs/Storage/Browser.php:387
+#: ../../addon/articles/Mod_Article_edit.php:128 ../../Zotlabs/Lib/Apps.php:618
+#: ../../Zotlabs/Lib/ThreadItem.php:183 ../../Zotlabs/Lib/ThreadItem.php:540
+#: ../../Zotlabs/Storage/Browser.php:388
#: ../../Zotlabs/Module/Editwebpage.php:167
#: ../../Zotlabs/Module/Webpages.php:252 ../../Zotlabs/Module/Oauth.php:172
#: ../../Zotlabs/Module/Thing.php:295 ../../Zotlabs/Module/Tokens.php:295
#: ../../Zotlabs/Module/Contactedit.php:651
#: ../../Zotlabs/Module/Connedit.php:540 ../../Zotlabs/Module/Connedit.php:749
#: ../../Zotlabs/Module/Admin/Accounts.php:320
-#: ../../Zotlabs/Module/Admin/Profs.php:176
-#: ../../Zotlabs/Module/Admin/Channels.php:149
-#: ../../Zotlabs/Module/Permcats.php:261 ../../Zotlabs/Module/Group.php:251
+#: ../../Zotlabs/Module/Admin/Profs.php:177
+#: ../../Zotlabs/Module/Admin/Channels.php:171
+#: ../../Zotlabs/Module/Permcats.php:261 ../../Zotlabs/Module/Group.php:252
#: ../../Zotlabs/Module/Blocks.php:160 ../../Zotlabs/Module/Photos.php:1173
#: ../../Zotlabs/Module/Editlayout.php:138 ../../Zotlabs/Module/Cdav.php:1047
#: ../../Zotlabs/Module/Cdav.php:1385 ../../Zotlabs/Module/Oauth2.php:193
@@ -2326,317 +2299,321 @@ msgstr ""
msgid "Delete"
msgstr ""
-#: ../../include/conversation.php:546 ../../Zotlabs/Lib/ThreadItem.php:286
+#: ../../include/conversation.php:547 ../../Zotlabs/Lib/ThreadItem.php:285
msgid "Toggle Star Status"
msgstr ""
-#: ../../include/conversation.php:552
+#: ../../include/conversation.php:553
msgid "Private Message"
msgstr ""
-#: ../../include/conversation.php:561 ../../Zotlabs/Lib/ThreadItem.php:296
-#: ../../Zotlabs/Widget/Pinned.php:82
+#: ../../include/conversation.php:562 ../../Zotlabs/Lib/ThreadItem.php:295
+#: ../../Zotlabs/Widget/Pinned.php:84
msgid "Message signature validated"
msgstr ""
-#: ../../include/conversation.php:562 ../../Zotlabs/Lib/ThreadItem.php:297
-#: ../../Zotlabs/Widget/Pinned.php:83
+#: ../../include/conversation.php:563 ../../Zotlabs/Lib/ThreadItem.php:296
+#: ../../Zotlabs/Widget/Pinned.php:85
msgid "Message signature incorrect"
msgstr ""
-#: ../../include/conversation.php:600 ../../Zotlabs/Lib/ThreadItem.php:539
+#: ../../include/conversation.php:601 ../../Zotlabs/Lib/ThreadItem.php:539
#: ../../Zotlabs/Module/Admin/Accounts.php:318
#: ../../Zotlabs/Module/Connections.php:358
#: ../../Zotlabs/Module/Connections.php:409
msgid "Approve"
msgstr ""
-#: ../../include/conversation.php:606
+#: ../../include/conversation.php:607
#, php-format
msgid "View %s's profile @ %s"
msgstr ""
-#: ../../include/conversation.php:628
+#: ../../include/conversation.php:629
msgid "Categories:"
msgstr ""
-#: ../../include/conversation.php:629
+#: ../../include/conversation.php:630
msgid "Filed under:"
msgstr ""
-#: ../../include/conversation.php:635 ../../Zotlabs/Lib/ThreadItem.php:451
-#: ../../Zotlabs/Widget/Pinned.php:126
+#: ../../include/conversation.php:636 ../../Zotlabs/Lib/ThreadItem.php:451
+#: ../../Zotlabs/Widget/Pinned.php:128
#, php-format
msgid "from %s"
msgstr ""
-#: ../../include/conversation.php:638 ../../Zotlabs/Lib/ThreadItem.php:454
-#: ../../Zotlabs/Widget/Pinned.php:129
+#: ../../include/conversation.php:639 ../../Zotlabs/Lib/ThreadItem.php:454
+#: ../../Zotlabs/Widget/Pinned.php:131
#, php-format
msgid "last edited: %s"
msgstr ""
-#: ../../include/conversation.php:639 ../../Zotlabs/Lib/ThreadItem.php:455
-#: ../../Zotlabs/Widget/Pinned.php:130
+#: ../../include/conversation.php:640 ../../Zotlabs/Lib/ThreadItem.php:455
+#: ../../Zotlabs/Widget/Pinned.php:132
#, php-format
msgid "Expires: %s"
msgstr ""
-#: ../../include/conversation.php:654 ../../addon/cards/cards.php:82
+#: ../../include/conversation.php:655 ../../addon/cards/cards.php:82
#: ../../addon/articles/articles.php:83
msgid "View in context"
msgstr ""
-#: ../../include/conversation.php:656 ../../Zotlabs/Lib/ThreadItem.php:533
+#: ../../include/conversation.php:657 ../../Zotlabs/Lib/ThreadItem.php:533
#: ../../Zotlabs/Module/Photos.php:1077
msgid "Please wait"
msgstr ""
-#: ../../include/conversation.php:757
+#: ../../include/conversation.php:758
msgid "remove"
msgstr ""
-#: ../../include/conversation.php:761
+#: ../../include/conversation.php:762
msgid "Loading..."
msgstr ""
-#: ../../include/conversation.php:762 ../../Zotlabs/Lib/ThreadItem.php:313
+#: ../../include/conversation.php:763 ../../Zotlabs/Lib/ThreadItem.php:312
msgid "Conversation Features"
msgstr ""
-#: ../../include/conversation.php:763
+#: ../../include/conversation.php:764
msgid "Delete Selected Items"
msgstr ""
-#: ../../include/conversation.php:799
+#: ../../include/conversation.php:800
msgid "View Source"
msgstr ""
-#: ../../include/conversation.php:809
+#: ../../include/conversation.php:810
msgid "Follow Thread"
msgstr ""
-#: ../../include/conversation.php:818
+#: ../../include/conversation.php:819
msgid "Unfollow Thread"
msgstr ""
-#: ../../include/conversation.php:895 ../../include/nav.php:126
-#: ../../addon/openclipatar/openclipatar.php:58 ../../Zotlabs/Lib/Apps.php:349
+#: ../../include/conversation.php:896 ../../include/nav.php:127
+#: ../../addon/openclipatar/openclipatar.php:58 ../../Zotlabs/Lib/Apps.php:350
#: ../../Zotlabs/Module/Connedit.php:480
msgid "View Profile"
msgstr ""
-#: ../../include/conversation.php:907 ../../Zotlabs/Module/Connedit.php:501
+#: ../../include/conversation.php:908 ../../Zotlabs/Module/Connedit.php:501
msgid "Recent Activity"
msgstr ""
-#: ../../include/conversation.php:919 ../../include/connections.php:141
-#: ../../include/channel.php:1624 ../../Zotlabs/Widget/Suggestions.php:51
+#: ../../include/conversation.php:920 ../../include/connections.php:150
+#: ../../include/channel.php:1625 ../../Zotlabs/Widget/Suggestions.php:51
#: ../../Zotlabs/Widget/Follow.php:37 ../../Zotlabs/Module/Suggest.php:69
#: ../../Zotlabs/Module/Directory.php:371
#: ../../Zotlabs/Module/Connections.php:365
msgid "Connect"
msgstr ""
-#: ../../include/conversation.php:931
+#: ../../include/conversation.php:932
msgid "Edit Connection"
msgstr ""
-#: ../../include/conversation.php:1001
+#: ../../include/conversation.php:1002
msgid "Approve this item"
msgstr ""
-#: ../../include/conversation.php:1001
+#: ../../include/conversation.php:1002
msgid "Delete this item"
msgstr ""
-#: ../../include/conversation.php:1055
+#: ../../include/conversation.php:1056
#, php-format
msgid "%s likes this."
msgstr ""
-#: ../../include/conversation.php:1055
+#: ../../include/conversation.php:1056
#, php-format
msgid "%s doesn't like this."
msgstr ""
-#: ../../include/conversation.php:1059
+#: ../../include/conversation.php:1060
#, php-format
msgid "<span %1$s>%2$d people</span> like this."
msgid_plural "<span %1$s>%2$d people</span> like this."
msgstr[0] ""
msgstr[1] ""
-#: ../../include/conversation.php:1061
+#: ../../include/conversation.php:1062
#, php-format
msgid "<span %1$s>%2$d people</span> don't like this."
msgid_plural "<span %1$s>%2$d people</span> don't like this."
msgstr[0] ""
msgstr[1] ""
-#: ../../include/conversation.php:1067
+#: ../../include/conversation.php:1068
msgid "and"
msgstr ""
-#: ../../include/conversation.php:1070
+#: ../../include/conversation.php:1071
#, php-format
msgid ", and %d other people"
msgid_plural ", and %d other people"
msgstr[0] ""
msgstr[1] ""
-#: ../../include/conversation.php:1071
+#: ../../include/conversation.php:1072
#, php-format
msgid "%s like this."
msgstr ""
-#: ../../include/conversation.php:1071
+#: ../../include/conversation.php:1072
#, php-format
msgid "%s don't like this."
msgstr ""
-#: ../../include/conversation.php:1122 ../../addon/hsse/hsse.php:82
+#: ../../include/conversation.php:1123 ../../addon/hsse/hsse.php:82
msgid "Set your location"
msgstr ""
-#: ../../include/conversation.php:1123 ../../addon/hsse/hsse.php:83
+#: ../../include/conversation.php:1124 ../../addon/hsse/hsse.php:83
msgid "Clear browser location"
msgstr ""
-#: ../../include/conversation.php:1135 ../../addon/cards/Mod_Card_edit.php:101
+#: ../../include/conversation.php:1136 ../../addon/cards/Mod_Card_edit.php:101
#: ../../addon/articles/Mod_Article_edit.php:99 ../../addon/hsse/hsse.php:95
#: ../../Zotlabs/Module/Editwebpage.php:143 ../../Zotlabs/Module/Chat.php:219
#: ../../Zotlabs/Module/Editblock.php:116
msgid "Insert web link"
msgstr ""
-#: ../../include/conversation.php:1139 ../../addon/hsse/hsse.php:99
+#: ../../include/conversation.php:1140 ../../addon/hsse/hsse.php:99
msgid "Embed (existing) photo from your photo albums"
msgstr ""
-#: ../../include/conversation.php:1172 ../../addon/hsse/hsse.php:134
+#: ../../include/conversation.php:1173 ../../addon/hsse/hsse.php:134
#: ../../Zotlabs/Module/Chat.php:217
msgid "Please enter a link URL:"
msgstr ""
-#: ../../include/conversation.php:1173 ../../addon/hsse/hsse.php:135
+#: ../../include/conversation.php:1174 ../../addon/hsse/hsse.php:135
msgid "Tag term:"
msgstr ""
-#: ../../include/conversation.php:1174 ../../addon/hsse/hsse.php:136
+#: ../../include/conversation.php:1175 ../../addon/hsse/hsse.php:136
msgid "Where are you right now?"
msgstr ""
-#: ../../include/conversation.php:1177 ../../addon/wiki/Mod_Wiki.php:400
-#: ../../addon/hsse/hsse.php:139 ../../Zotlabs/Module/Cover_photo.php:387
-#: ../../Zotlabs/Module/Profile_photo.php:554
+#: ../../include/conversation.php:1178 ../../addon/wiki/Mod_Wiki.php:400
+#: ../../addon/hsse/hsse.php:139 ../../Zotlabs/Module/Cover_photo.php:388
+#: ../../Zotlabs/Module/Profile_photo.php:555
msgid "Choose images to embed"
msgstr ""
-#: ../../include/conversation.php:1178 ../../addon/wiki/Mod_Wiki.php:401
-#: ../../addon/hsse/hsse.php:140 ../../Zotlabs/Module/Cover_photo.php:388
-#: ../../Zotlabs/Module/Profile_photo.php:555
+#: ../../include/conversation.php:1179 ../../addon/wiki/Mod_Wiki.php:401
+#: ../../addon/hsse/hsse.php:140 ../../Zotlabs/Module/Cover_photo.php:389
+#: ../../Zotlabs/Module/Profile_photo.php:556
msgid "Choose an album"
msgstr ""
-#: ../../include/conversation.php:1179 ../../addon/hsse/hsse.php:141
+#: ../../include/conversation.php:1180 ../../addon/hsse/hsse.php:141
msgid "Choose a different album..."
msgstr ""
-#: ../../include/conversation.php:1180 ../../addon/wiki/Mod_Wiki.php:403
-#: ../../addon/hsse/hsse.php:142 ../../Zotlabs/Module/Cover_photo.php:390
-#: ../../Zotlabs/Module/Profile_photo.php:557
+#: ../../include/conversation.php:1181 ../../addon/wiki/Mod_Wiki.php:403
+#: ../../addon/hsse/hsse.php:142 ../../Zotlabs/Module/Cover_photo.php:391
+#: ../../Zotlabs/Module/Profile_photo.php:558
msgid "Error getting album list"
msgstr ""
-#: ../../include/conversation.php:1181 ../../addon/wiki/Mod_Wiki.php:404
-#: ../../addon/hsse/hsse.php:143 ../../Zotlabs/Module/Cover_photo.php:391
-#: ../../Zotlabs/Module/Profile_photo.php:558
+#: ../../include/conversation.php:1182 ../../addon/wiki/Mod_Wiki.php:404
+#: ../../addon/hsse/hsse.php:143 ../../Zotlabs/Module/Cover_photo.php:392
+#: ../../Zotlabs/Module/Profile_photo.php:559
msgid "Error getting photo link"
msgstr ""
-#: ../../include/conversation.php:1182 ../../addon/wiki/Mod_Wiki.php:405
-#: ../../addon/hsse/hsse.php:144 ../../Zotlabs/Module/Cover_photo.php:392
-#: ../../Zotlabs/Module/Profile_photo.php:559
+#: ../../include/conversation.php:1183 ../../addon/wiki/Mod_Wiki.php:405
+#: ../../addon/hsse/hsse.php:144 ../../Zotlabs/Module/Cover_photo.php:393
+#: ../../Zotlabs/Module/Profile_photo.php:560
msgid "Error getting album"
msgstr ""
-#: ../../include/conversation.php:1183 ../../addon/hsse/hsse.php:145
+#: ../../include/conversation.php:1184 ../../addon/hsse/hsse.php:145
msgid "Comments enabled"
msgstr ""
-#: ../../include/conversation.php:1184 ../../addon/hsse/hsse.php:146
+#: ../../include/conversation.php:1185 ../../addon/hsse/hsse.php:146
msgid "Comments disabled"
msgstr ""
-#: ../../include/conversation.php:1201 ../../addon/hsse/hsse.php:153
+#: ../../include/conversation.php:1186
+msgid "Confirm delete"
+msgstr ""
+
+#: ../../include/conversation.php:1203 ../../addon/hsse/hsse.php:153
#: ../../Zotlabs/Lib/ThreadItem.php:872 ../../Zotlabs/Module/Webpages.php:257
#: ../../Zotlabs/Module/Photos.php:1096
msgid "Preview"
msgstr ""
-#: ../../include/conversation.php:1234 ../../addon/wiki/Mod_Wiki.php:304
-#: ../../addon/hsse/hsse.php:186 ../../Zotlabs/Lib/ThreadItem.php:341
+#: ../../include/conversation.php:1236 ../../addon/wiki/Mod_Wiki.php:304
+#: ../../addon/hsse/hsse.php:186 ../../Zotlabs/Lib/ThreadItem.php:340
#: ../../Zotlabs/Widget/Cdav.php:142 ../../Zotlabs/Module/Webpages.php:251
#: ../../Zotlabs/Module/Layouts.php:192 ../../Zotlabs/Module/Blocks.php:159
#: ../../Zotlabs/Module/Photos.php:1076
msgid "Share"
msgstr ""
-#: ../../include/conversation.php:1243 ../../addon/hsse/hsse.php:195
+#: ../../include/conversation.php:1245 ../../addon/hsse/hsse.php:195
msgid "Page link name"
msgstr ""
-#: ../../include/conversation.php:1246 ../../addon/hsse/hsse.php:198
+#: ../../include/conversation.php:1248 ../../addon/hsse/hsse.php:198
msgid "Post as"
msgstr ""
-#: ../../include/conversation.php:1248 ../../addon/hsse/hsse.php:200
+#: ../../include/conversation.php:1250 ../../addon/hsse/hsse.php:200
#: ../../Zotlabs/Lib/ThreadItem.php:863
msgid "Bold"
msgstr ""
-#: ../../include/conversation.php:1249 ../../addon/hsse/hsse.php:201
+#: ../../include/conversation.php:1251 ../../addon/hsse/hsse.php:201
#: ../../Zotlabs/Lib/ThreadItem.php:864
msgid "Italic"
msgstr ""
-#: ../../include/conversation.php:1250 ../../addon/hsse/hsse.php:202
+#: ../../include/conversation.php:1252 ../../addon/hsse/hsse.php:202
#: ../../Zotlabs/Lib/ThreadItem.php:865
msgid "Underline"
msgstr ""
-#: ../../include/conversation.php:1251 ../../addon/hsse/hsse.php:203
+#: ../../include/conversation.php:1253 ../../addon/hsse/hsse.php:203
#: ../../Zotlabs/Lib/ThreadItem.php:866
msgid "Quote"
msgstr ""
-#: ../../include/conversation.php:1252 ../../addon/hsse/hsse.php:204
+#: ../../include/conversation.php:1254 ../../addon/hsse/hsse.php:204
#: ../../Zotlabs/Lib/ThreadItem.php:867
msgid "Code"
msgstr ""
-#: ../../include/conversation.php:1253 ../../addon/hsse/hsse.php:205
+#: ../../include/conversation.php:1255 ../../addon/hsse/hsse.php:205
#: ../../Zotlabs/Lib/ThreadItem.php:869
msgid "Attach/Upload file"
msgstr ""
-#: ../../include/conversation.php:1256 ../../addon/wiki/Mod_Wiki.php:397
+#: ../../include/conversation.php:1258 ../../addon/wiki/Mod_Wiki.php:397
#: ../../addon/hsse/hsse.php:208
msgid "Embed an image from your albums"
msgstr ""
-#: ../../include/conversation.php:1257 ../../include/conversation.php:1312
+#: ../../include/conversation.php:1259 ../../include/conversation.php:1314
#: ../../addon/cards/Mod_Card_edit.php:132
#: ../../addon/articles/Mod_Article_edit.php:130
#: ../../addon/wiki/Mod_Wiki.php:365 ../../addon/wiki/Mod_Wiki.php:398
#: ../../addon/hsse/hsse.php:209 ../../addon/hsse/hsse.php:258
-#: ../../Zotlabs/Storage/Browser.php:386
-#: ../../Zotlabs/Module/Cover_photo.php:385
+#: ../../Zotlabs/Storage/Browser.php:387
+#: ../../Zotlabs/Module/Cover_photo.php:386
#: ../../Zotlabs/Module/Editwebpage.php:169 ../../Zotlabs/Module/Oauth.php:110
#: ../../Zotlabs/Module/Oauth.php:136 ../../Zotlabs/Module/Connedit.php:750
-#: ../../Zotlabs/Module/Profile_photo.php:552 ../../Zotlabs/Module/Tagrm.php:15
-#: ../../Zotlabs/Module/Tagrm.php:138 ../../Zotlabs/Module/Admin/Addons.php:430
+#: ../../Zotlabs/Module/Profile_photo.php:553 ../../Zotlabs/Module/Tagrm.php:15
+#: ../../Zotlabs/Module/Tagrm.php:138 ../../Zotlabs/Module/Admin/Addons.php:431
#: ../../Zotlabs/Module/Fbrowser.php:66 ../../Zotlabs/Module/Fbrowser.php:88
#: ../../Zotlabs/Module/Editlayout.php:140
#: ../../Zotlabs/Module/Editpost.php:114 ../../Zotlabs/Module/Cdav.php:1049
@@ -2646,344 +2623,349 @@ msgstr ""
msgid "Cancel"
msgstr ""
-#: ../../include/conversation.php:1258 ../../include/conversation.php:1311
+#: ../../include/conversation.php:1260 ../../include/conversation.php:1313
#: ../../addon/wiki/Mod_Wiki.php:399 ../../addon/hsse/hsse.php:210
-#: ../../addon/hsse/hsse.php:257 ../../Zotlabs/Module/Cover_photo.php:386
-#: ../../Zotlabs/Module/Profile_photo.php:553
+#: ../../addon/hsse/hsse.php:257 ../../Zotlabs/Module/Cover_photo.php:387
+#: ../../Zotlabs/Module/Profile_photo.php:554
msgid "OK"
msgstr ""
-#: ../../include/conversation.php:1260 ../../addon/hsse/hsse.php:212
+#: ../../include/conversation.php:1262 ../../addon/hsse/hsse.php:212
msgid "Toggle voting"
msgstr ""
-#: ../../include/conversation.php:1261
+#: ../../include/conversation.php:1263
msgid "Toggle poll"
msgstr ""
-#: ../../include/conversation.php:1262
+#: ../../include/conversation.php:1264
msgid "Option"
msgstr ""
-#: ../../include/conversation.php:1263
+#: ../../include/conversation.php:1265
msgid "Add option"
msgstr ""
-#: ../../include/conversation.php:1264
+#: ../../include/conversation.php:1266
msgid "Minutes"
msgstr ""
-#: ../../include/conversation.php:1264
+#: ../../include/conversation.php:1266
msgid "Hours"
msgstr ""
-#: ../../include/conversation.php:1264
+#: ../../include/conversation.php:1266
msgid "Days"
msgstr ""
-#: ../../include/conversation.php:1265
+#: ../../include/conversation.php:1267
msgid "Allow multiple answers"
msgstr ""
-#: ../../include/conversation.php:1267 ../../addon/hsse/hsse.php:215
+#: ../../include/conversation.php:1269 ../../addon/hsse/hsse.php:215
msgid "Disable comments"
msgstr ""
-#: ../../include/conversation.php:1268 ../../addon/hsse/hsse.php:216
+#: ../../include/conversation.php:1270 ../../addon/hsse/hsse.php:216
msgid "Toggle comments"
msgstr ""
-#: ../../include/conversation.php:1274 ../../addon/cards/Mod_Card_edit.php:118
+#: ../../include/conversation.php:1276 ../../addon/cards/Mod_Card_edit.php:118
#: ../../addon/articles/Mod_Article_edit.php:116 ../../addon/hsse/hsse.php:221
#: ../../Zotlabs/Module/Photos.php:667 ../../Zotlabs/Module/Photos.php:1042
#: ../../Zotlabs/Module/Editblock.php:129
msgid "Title (optional)"
msgstr ""
-#: ../../include/conversation.php:1275
+#: ../../include/conversation.php:1277
msgid "Summary (optional)"
msgstr ""
-#: ../../include/conversation.php:1278 ../../addon/hsse/hsse.php:224
+#: ../../include/conversation.php:1280 ../../addon/hsse/hsse.php:224
msgid "Categories (optional, comma-separated list)"
msgstr ""
-#: ../../include/conversation.php:1279 ../../addon/hsse/hsse.php:225
+#: ../../include/conversation.php:1281 ../../addon/hsse/hsse.php:225
msgid "Permission settings"
msgstr ""
-#: ../../include/conversation.php:1301 ../../addon/hsse/hsse.php:247
+#: ../../include/conversation.php:1303 ../../addon/hsse/hsse.php:247
msgid "Other networks and post services"
msgstr ""
-#: ../../include/conversation.php:1304 ../../addon/hsse/hsse.php:250
+#: ../../include/conversation.php:1306 ../../addon/hsse/hsse.php:250
msgid "Set expiration date"
msgstr ""
-#: ../../include/conversation.php:1307 ../../addon/hsse/hsse.php:253
+#: ../../include/conversation.php:1309 ../../addon/hsse/hsse.php:253
msgid "Set publish date"
msgstr ""
-#: ../../include/conversation.php:1309 ../../addon/hsse/hsse.php:255
+#: ../../include/conversation.php:1311 ../../addon/hsse/hsse.php:255
#: ../../Zotlabs/Lib/ThreadItem.php:875 ../../Zotlabs/Module/Chat.php:218
msgid "Encrypt text"
msgstr ""
-#: ../../include/conversation.php:1553
+#: ../../include/conversation.php:1555
msgctxt "noun"
msgid "Repeat"
msgid_plural "Repeats"
msgstr[0] ""
msgstr[1] ""
-#: ../../include/conversation.php:1556 ../../Zotlabs/Module/Photos.php:1134
+#: ../../include/conversation.php:1558 ../../Zotlabs/Module/Photos.php:1134
msgctxt "noun"
msgid "Dislike"
msgid_plural "Dislikes"
msgstr[0] ""
msgstr[1] ""
-#: ../../include/conversation.php:1559
+#: ../../include/conversation.php:1561
msgctxt "noun"
msgid "Attending"
msgid_plural "Attending"
msgstr[0] ""
msgstr[1] ""
-#: ../../include/conversation.php:1562
+#: ../../include/conversation.php:1564
msgctxt "noun"
msgid "Not Attending"
msgid_plural "Not Attending"
msgstr[0] ""
msgstr[1] ""
-#: ../../include/conversation.php:1565
+#: ../../include/conversation.php:1567
msgctxt "noun"
msgid "Undecided"
msgid_plural "Undecided"
msgstr[0] ""
msgstr[1] ""
-#: ../../include/nav.php:108
+#: ../../include/nav.php:109
msgid "Remote authentication"
msgstr ""
-#: ../../include/nav.php:108
+#: ../../include/nav.php:109
msgid "Click to authenticate to your home hub"
msgstr ""
-#: ../../include/nav.php:114 ../../Zotlabs/Widget/Channel_activities.php:239
+#: ../../include/nav.php:115 ../../Zotlabs/Widget/Channel_activities.php:239
#: ../../Zotlabs/Widget/Admin.php:29
-#: ../../Zotlabs/Module/Admin/Channels.php:146
-#: ../../Zotlabs/Module/Manage.php:162 ../../Zotlabs/Module/Admin.php:116
+#: ../../Zotlabs/Module/Admin/Channels.php:168
+#: ../../Zotlabs/Module/Manage.php:162 ../../Zotlabs/Module/Admin.php:118
msgid "Channels"
msgstr ""
-#: ../../include/nav.php:114
+#: ../../include/nav.php:115
msgid "Manage your channels"
msgstr ""
-#: ../../include/nav.php:117 ../../Zotlabs/Lib/Apps.php:344
-#: ../../Zotlabs/Widget/Newmember.php:58
+#: ../../include/nav.php:118 ../../Zotlabs/Lib/Apps.php:345
+#: ../../Zotlabs/Widget/Newmember.php:60
#: ../../Zotlabs/Widget/Settings_menu.php:71
-#: ../../Zotlabs/Module/Admin/Themes.php:140
-#: ../../Zotlabs/Module/Admin/Addons.php:348
+#: ../../Zotlabs/Module/Admin/Themes.php:141
+#: ../../Zotlabs/Module/Admin/Addons.php:349
msgid "Settings"
msgstr ""
-#: ../../include/nav.php:117
+#: ../../include/nav.php:118
msgid "Account/Channel Settings"
msgstr ""
-#: ../../include/nav.php:123 ../../include/nav.php:153
-#: ../../include/nav.php:174 ../../boot.php:1745
+#: ../../include/nav.php:124 ../../include/nav.php:154
+#: ../../include/nav.php:175 ../../boot.php:1759
msgid "Logout"
msgstr ""
-#: ../../include/nav.php:123 ../../include/nav.php:153
+#: ../../include/nav.php:124 ../../include/nav.php:154
msgid "End this session"
msgstr ""
-#: ../../include/nav.php:126
+#: ../../include/nav.php:127
msgid "Your profile page"
msgstr ""
-#: ../../include/nav.php:129 ../../include/channel.php:1538
-#: ../../Zotlabs/Module/Profiles.php:847
+#: ../../include/nav.php:130 ../../include/channel.php:1539
+#: ../../Zotlabs/Module/Profiles.php:851
msgid "Edit Profiles"
msgstr ""
-#: ../../include/nav.php:129
+#: ../../include/nav.php:130
msgid "Manage/Edit profiles"
msgstr ""
-#: ../../include/nav.php:131 ../../include/channel.php:1542
+#: ../../include/nav.php:132 ../../include/channel.php:1543
#: ../../addon/openclipatar/openclipatar.php:59
msgid "Edit Profile"
msgstr ""
-#: ../../include/nav.php:131 ../../Zotlabs/Widget/Newmember.php:40
+#: ../../include/nav.php:132 ../../Zotlabs/Widget/Newmember.php:42
msgid "Edit your profile"
msgstr ""
-#: ../../include/nav.php:138 ../../include/nav.php:142 ../../boot.php:1746
-#: ../../Zotlabs/Lib/Apps.php:341
+#: ../../include/nav.php:139 ../../include/nav.php:143 ../../boot.php:1760
+#: ../../Zotlabs/Lib/Apps.php:342
msgid "Login"
msgstr ""
-#: ../../include/nav.php:138 ../../include/nav.php:142
+#: ../../include/nav.php:139 ../../include/nav.php:143
msgid "Sign in"
msgstr ""
-#: ../../include/nav.php:172
+#: ../../include/nav.php:173
msgid "Take me home"
msgstr ""
-#: ../../include/nav.php:174
+#: ../../include/nav.php:175
msgid "Log me out of this site"
msgstr ""
-#: ../../include/nav.php:179 ../../boot.php:1723
-#: ../../Zotlabs/Module/Register.php:542
+#: ../../include/nav.php:180 ../../boot.php:1737
+#: ../../Zotlabs/Module/Register.php:543
msgid "Register"
msgstr ""
-#: ../../include/nav.php:179
+#: ../../include/nav.php:180
msgid "Create an account"
msgstr ""
-#: ../../include/nav.php:193
+#: ../../include/nav.php:194 ../../include/nav.php:341
+#: ../../Zotlabs/Lib/Apps.php:354 ../../Zotlabs/Module/Layouts.php:184
+msgid "Help"
+msgstr ""
+
+#: ../../include/nav.php:194
msgid "Help and documentation"
msgstr ""
-#: ../../include/nav.php:207 ../../include/acl_selectors.php:149
-#: ../../include/text.php:1189 ../../include/text.php:1201
-#: ../../Zotlabs/Lib/Apps.php:356 ../../Zotlabs/Widget/Sitesearch.php:37
+#: ../../include/nav.php:208 ../../include/acl_selectors.php:149
+#: ../../include/text.php:1190 ../../include/text.php:1202
+#: ../../Zotlabs/Lib/Apps.php:357 ../../Zotlabs/Widget/Sitesearch.php:37
#: ../../Zotlabs/Widget/Activity_filter.php:210
-#: ../../Zotlabs/Module/Search.php:46 ../../Zotlabs/Module/Connections.php:403
+#: ../../Zotlabs/Module/Search.php:47 ../../Zotlabs/Module/Connections.php:403
msgid "Search"
msgstr ""
-#: ../../include/nav.php:207
+#: ../../include/nav.php:208
msgid "Search site @name, !forum, #tag, ?docs, content"
msgstr ""
-#: ../../include/nav.php:213 ../../Zotlabs/Widget/Admin.php:61
+#: ../../include/nav.php:214 ../../Zotlabs/Widget/Admin.php:61
msgid "Admin"
msgstr ""
-#: ../../include/nav.php:213
+#: ../../include/nav.php:214
msgid "Site Setup and Configuration"
msgstr ""
-#: ../../include/nav.php:344 ../../Zotlabs/Widget/Notifications.php:175
+#: ../../include/nav.php:345 ../../Zotlabs/Widget/Notifications.php:175
#: ../../Zotlabs/Widget/Messages.php:36 ../../Zotlabs/Module/Defperms.php:254
-#: ../../Zotlabs/Module/New_channel.php:157
-#: ../../Zotlabs/Module/New_channel.php:164
+#: ../../Zotlabs/Module/New_channel.php:158
+#: ../../Zotlabs/Module/New_channel.php:165
msgid "Loading"
msgstr ""
-#: ../../include/nav.php:349
+#: ../../include/nav.php:350
msgid "@name, #tag, ?doc, content"
msgstr ""
-#: ../../include/nav.php:350
+#: ../../include/nav.php:351
msgid "Please wait..."
msgstr ""
-#: ../../include/nav.php:356 ../../Zotlabs/Lib/Apps.php:328
+#: ../../include/nav.php:357 ../../Zotlabs/Lib/Apps.php:329
msgid "Apps"
msgstr ""
-#: ../../include/nav.php:357
+#: ../../include/nav.php:358
msgid "Channel Apps"
msgstr ""
-#: ../../include/nav.php:358
+#: ../../include/nav.php:359
msgid "System Apps"
msgstr ""
-#: ../../include/nav.php:359
+#: ../../include/nav.php:360
msgid "Pinned Apps"
msgstr ""
-#: ../../include/nav.php:360
+#: ../../include/nav.php:361
msgid "Featured Apps"
msgstr ""
-#: ../../include/nav.php:446 ../../Zotlabs/Lib/Apps.php:348
-#: ../../Zotlabs/Module/Admin/Channels.php:154
+#: ../../include/nav.php:447 ../../Zotlabs/Lib/Apps.php:349
+#: ../../Zotlabs/Module/Admin/Channels.php:176
msgid "Channel"
msgstr ""
-#: ../../include/nav.php:449
+#: ../../include/nav.php:450
msgid "Status Messages and Posts"
msgstr ""
-#: ../../include/nav.php:459 ../../Zotlabs/Module/Help.php:85
+#: ../../include/nav.php:460 ../../Zotlabs/Module/Help.php:242
msgid "About"
msgstr ""
-#: ../../include/nav.php:462
+#: ../../include/nav.php:463
msgid "Profile Details"
msgstr ""
-#: ../../include/nav.php:472 ../../include/photos.php:721
+#: ../../include/nav.php:473 ../../include/photos.php:722
msgid "Photo Albums"
msgstr ""
-#: ../../include/nav.php:477 ../../Zotlabs/Lib/Apps.php:345
+#: ../../include/nav.php:478 ../../Zotlabs/Lib/Apps.php:346
#: ../../Zotlabs/Widget/Notifications.php:108
#: ../../Zotlabs/Widget/Channel_activities.php:125
-#: ../../Zotlabs/Storage/Browser.php:350 ../../Zotlabs/Module/Fbrowser.php:85
+#: ../../Zotlabs/Storage/Browser.php:351 ../../Zotlabs/Module/Fbrowser.php:85
msgid "Files"
msgstr ""
-#: ../../include/nav.php:480
+#: ../../include/nav.php:481
msgid "Files and Storage"
msgstr ""
-#: ../../include/nav.php:502 ../../include/nav.php:505
-#: ../../Zotlabs/Lib/Apps.php:335 ../../Zotlabs/Widget/Chatroom_list.php:22
+#: ../../include/nav.php:503 ../../include/nav.php:506
+#: ../../Zotlabs/Lib/Apps.php:336 ../../Zotlabs/Widget/Chatroom_list.php:22
msgid "Chatrooms"
msgstr ""
-#: ../../include/nav.php:515 ../../Zotlabs/Lib/Apps.php:334
+#: ../../include/nav.php:516 ../../Zotlabs/Lib/Apps.php:335
#: ../../Zotlabs/Module/Bookmarks.php:90
msgid "Bookmarks"
msgstr ""
-#: ../../include/nav.php:518
+#: ../../include/nav.php:519
msgid "Saved Bookmarks"
msgstr ""
-#: ../../include/nav.php:526 ../../Zotlabs/Lib/Apps.php:346
+#: ../../include/nav.php:527 ../../Zotlabs/Lib/Apps.php:347
#: ../../Zotlabs/Widget/Channel_activities.php:168
#: ../../Zotlabs/Module/Webpages.php:247
msgid "Webpages"
msgstr ""
-#: ../../include/nav.php:529
+#: ../../include/nav.php:530
msgid "View Webpages"
msgstr ""
-#: ../../include/nav.php:537 ../../addon/wiki/Mod_Wiki.php:209
+#: ../../include/nav.php:538 ../../addon/wiki/Mod_Wiki.php:209
#: ../../addon/wiki/Widget/Wiki_list.php:23 ../../addon/wiki/wiki.php:72
msgid "Wikis"
msgstr ""
-#: ../../include/nav.php:540 ../../Zotlabs/Lib/Apps.php:347
+#: ../../include/nav.php:541 ../../Zotlabs/Lib/Apps.php:348
msgid "Wiki"
msgstr ""
-#: ../../include/security.php:633
+#: ../../include/security.php:635
msgid ""
"The form security token was not correct. This probably happened because the "
"form has been opened for too long (>3 hours) before submitting it."
msgstr ""
-#: ../../include/datetime.php:58 ../../Zotlabs/Widget/Newmember.php:56
-#: ../../Zotlabs/Module/Profiles.php:748
+#: ../../include/datetime.php:58 ../../Zotlabs/Widget/Newmember.php:58
+#: ../../Zotlabs/Module/Profiles.php:751
msgid "Miscellaneous"
msgstr ""
@@ -2999,7 +2981,7 @@ msgstr ""
msgid "YYYY-MM-DD or MM-DD"
msgstr ""
-#: ../../include/datetime.php:238 ../../boot.php:2752
+#: ../../include/datetime.php:238 ../../boot.php:2760
msgid "never"
msgstr ""
@@ -3072,88 +3054,88 @@ msgstr ""
msgid "Happy Birthday %1$s"
msgstr ""
-#: ../../include/photos.php:152
+#: ../../include/photos.php:153
#, php-format
msgid "Image exceeds website size limit of %lu bytes"
msgstr ""
-#: ../../include/photos.php:163
+#: ../../include/photos.php:164
msgid "Image file is empty."
msgstr ""
-#: ../../include/photos.php:197 ../../Zotlabs/Module/Cover_photo.php:239
-#: ../../Zotlabs/Module/Profile_photo.php:274
+#: ../../include/photos.php:198 ../../Zotlabs/Module/Cover_photo.php:240
+#: ../../Zotlabs/Module/Profile_photo.php:275
msgid "Unable to process image"
msgstr ""
-#: ../../include/photos.php:323
+#: ../../include/photos.php:324
msgid "Photo storage failed."
msgstr ""
-#: ../../include/photos.php:372
+#: ../../include/photos.php:373
msgid "a new photo"
msgstr ""
-#: ../../include/photos.php:376
+#: ../../include/photos.php:377
#, php-format
msgctxt "photo_upload"
msgid "%1$s posted %2$s to %3$s"
msgstr ""
-#: ../../include/photos.php:722 ../../Zotlabs/Module/Photos.php:1339
+#: ../../include/photos.php:723 ../../Zotlabs/Module/Photos.php:1339
#: ../../Zotlabs/Module/Photos.php:1352 ../../Zotlabs/Module/Photos.php:1353
msgid "Recent Photos"
msgstr ""
-#: ../../include/photos.php:726
+#: ../../include/photos.php:727
msgid "Upload New Photos"
msgstr ""
-#: ../../include/connections.php:165
+#: ../../include/connections.php:174
msgid "New window"
msgstr ""
-#: ../../include/connections.php:166
+#: ../../include/connections.php:175
msgid "Open the selected location in a different window or browser tab"
msgstr ""
-#: ../../include/network.php:412
+#: ../../include/network.php:413
msgid "url: "
msgstr ""
-#: ../../include/network.php:413
+#: ../../include/network.php:414
msgid "error_code: "
msgstr ""
-#: ../../include/network.php:414
+#: ../../include/network.php:415
msgid "error_string: "
msgstr ""
-#: ../../include/network.php:415
+#: ../../include/network.php:416
msgid "content-type: "
msgstr ""
-#: ../../include/network.php:1770 ../../include/network.php:1771
+#: ../../include/network.php:1774 ../../include/network.php:1775
msgid "Friendica"
msgstr ""
-#: ../../include/network.php:1772
+#: ../../include/network.php:1776
msgid "OStatus"
msgstr ""
-#: ../../include/network.php:1773
+#: ../../include/network.php:1777
msgid "GNU-Social"
msgstr ""
-#: ../../include/network.php:1774
+#: ../../include/network.php:1778
msgid "RSS/Atom"
msgstr ""
-#: ../../include/network.php:1775
+#: ../../include/network.php:1779
msgid "ActivityPub"
msgstr ""
-#: ../../include/network.php:1776 ../../addon/openid/MysqlProvider.php:56
+#: ../../include/network.php:1780 ../../addon/openid/MysqlProvider.php:56
#: ../../addon/openid/MysqlProvider.php:57 ../../addon/redred/Mod_Redred.php:69
#: ../../addon/rtof/Mod_Rtof.php:55 ../../Zotlabs/Module/Connedit.php:736
#: ../../Zotlabs/Module/Admin/Accounts.php:316
@@ -3162,59 +3144,59 @@ msgstr ""
msgid "Email"
msgstr ""
-#: ../../include/network.php:1777
+#: ../../include/network.php:1781
msgid "Diaspora"
msgstr ""
-#: ../../include/network.php:1778
+#: ../../include/network.php:1782
msgid "Facebook"
msgstr ""
-#: ../../include/network.php:1779
+#: ../../include/network.php:1783
msgid "Zot"
msgstr ""
-#: ../../include/network.php:1780
+#: ../../include/network.php:1784
msgid "LinkedIn"
msgstr ""
-#: ../../include/network.php:1781
+#: ../../include/network.php:1785
msgid "XMPP/IM"
msgstr ""
-#: ../../include/network.php:1782
+#: ../../include/network.php:1786
msgid "MySpace"
msgstr ""
-#: ../../include/markdown.php:206 ../../include/bbcode.php:575
+#: ../../include/markdown.php:206 ../../include/bbcode.php:576
#, php-format
msgid "%1$s wrote the following %2$s %3$s"
msgstr ""
-#: ../../include/markdown.php:259 ../../include/bbcode.php:660
+#: ../../include/markdown.php:278 ../../include/bbcode.php:661
msgid "spoiler"
msgstr ""
-#: ../../include/language.php:422 ../../include/text.php:2193
+#: ../../include/language.php:423 ../../include/text.php:2199
msgid "default"
msgstr ""
-#: ../../include/language.php:435
+#: ../../include/language.php:436
msgid "Select an alternate language"
msgstr ""
-#: ../../include/menu.php:120 ../../include/channel.php:1538
-#: ../../include/channel.php:1542 ../../addon/cards/cards.php:74
+#: ../../include/menu.php:120 ../../include/channel.php:1539
+#: ../../include/channel.php:1543 ../../addon/cards/cards.php:74
#: ../../addon/cards/Mod_Card_edit.php:99
#: ../../addon/articles/Mod_Article_edit.php:97
#: ../../addon/articles/articles.php:75 ../../addon/wiki/Mod_Wiki.php:214
-#: ../../addon/wiki/Mod_Wiki.php:381 ../../Zotlabs/Lib/Apps.php:616
-#: ../../Zotlabs/Lib/ThreadItem.php:163 ../../Zotlabs/Widget/Cdav.php:144
+#: ../../addon/wiki/Mod_Wiki.php:381 ../../Zotlabs/Lib/Apps.php:617
+#: ../../Zotlabs/Lib/ThreadItem.php:162 ../../Zotlabs/Widget/Cdav.php:144
#: ../../Zotlabs/Widget/Cdav.php:181 ../../Zotlabs/Module/Editwebpage.php:142
#: ../../Zotlabs/Module/Webpages.php:250 ../../Zotlabs/Module/Oauth.php:171
#: ../../Zotlabs/Module/Thing.php:294 ../../Zotlabs/Module/Layouts.php:191
-#: ../../Zotlabs/Module/Menu.php:176 ../../Zotlabs/Module/Admin/Profs.php:175
-#: ../../Zotlabs/Module/Group.php:245 ../../Zotlabs/Module/Blocks.php:158
+#: ../../Zotlabs/Module/Menu.php:176 ../../Zotlabs/Module/Admin/Profs.php:176
+#: ../../Zotlabs/Module/Group.php:246 ../../Zotlabs/Module/Blocks.php:158
#: ../../Zotlabs/Module/Editlayout.php:114
#: ../../Zotlabs/Module/Connections.php:338
#: ../../Zotlabs/Module/Connections.php:387
@@ -3246,7 +3228,7 @@ msgstr ""
#: ../../include/acl_selectors.php:136
#: ../../Zotlabs/Lib/PermissionDescription.php:107
-#: ../../Zotlabs/Module/Settings/Privacy.php:65
+#: ../../Zotlabs/Module/Settings/Privacy.php:66
msgid "Only me"
msgstr ""
@@ -3281,7 +3263,7 @@ msgid "Permissions"
msgstr ""
#: ../../include/acl_selectors.php:156 ../../Zotlabs/Lib/ThreadItem.php:527
-#: ../../Zotlabs/Widget/Pinned.php:152 ../../Zotlabs/Storage/Browser.php:414
+#: ../../Zotlabs/Widget/Pinned.php:154 ../../Zotlabs/Storage/Browser.php:415
#: ../../Zotlabs/Module/Photos.php:1266
msgid "Close"
msgstr ""
@@ -3293,102 +3275,102 @@ msgid ""
"permissions set who is allowed to view the post."
msgstr ""
-#: ../../include/text.php:561
+#: ../../include/text.php:562
msgid "prev"
msgstr ""
-#: ../../include/text.php:563
+#: ../../include/text.php:564
msgid "first"
msgstr ""
-#: ../../include/text.php:592
+#: ../../include/text.php:593
msgid "last"
msgstr ""
-#: ../../include/text.php:595
+#: ../../include/text.php:596
msgid "next"
msgstr ""
-#: ../../include/text.php:613
+#: ../../include/text.php:614
msgid "older"
msgstr ""
-#: ../../include/text.php:615
+#: ../../include/text.php:616
msgid "newer"
msgstr ""
-#: ../../include/text.php:1085 ../../Zotlabs/Module/Viewconnections.php:80
+#: ../../include/text.php:1086 ../../Zotlabs/Module/Viewconnections.php:80
#: ../../Zotlabs/Module/Connections.php:306
msgid "Accepts"
msgstr ""
-#: ../../include/text.php:1088 ../../Zotlabs/Module/Viewconnections.php:83
+#: ../../include/text.php:1089 ../../Zotlabs/Module/Viewconnections.php:83
#: ../../Zotlabs/Module/Connections.php:309
msgid "Comments"
msgstr ""
-#: ../../include/text.php:1093 ../../Zotlabs/Module/Viewconnections.php:88
+#: ../../include/text.php:1094 ../../Zotlabs/Module/Viewconnections.php:88
#: ../../Zotlabs/Module/Connections.php:314
msgid "Stream items"
msgstr ""
-#: ../../include/text.php:1098 ../../Zotlabs/Module/Viewconnections.php:93
+#: ../../include/text.php:1099 ../../Zotlabs/Module/Viewconnections.php:93
#: ../../Zotlabs/Module/Connections.php:319
msgid "Wall posts"
msgstr ""
-#: ../../include/text.php:1102 ../../Zotlabs/Module/Viewconnections.php:97
+#: ../../include/text.php:1103 ../../Zotlabs/Module/Viewconnections.php:97
#: ../../Zotlabs/Module/Connections.php:323
msgid "Nothing"
msgstr ""
-#: ../../include/text.php:1115
+#: ../../include/text.php:1116
#, php-format
msgid "View all %s connections"
msgstr ""
-#: ../../include/text.php:1178
+#: ../../include/text.php:1179
#, php-format
msgid "Network: %s"
msgstr ""
-#: ../../include/text.php:1190 ../../include/text.php:1202
+#: ../../include/text.php:1191 ../../include/text.php:1203
#: ../../addon/cards/Mod_Cards.php:116
#: ../../addon/articles/Mod_Articles.php:120
-#: ../../Zotlabs/Module/Admin/Queueworker.php:114
-#: ../../Zotlabs/Module/Admin/Profs.php:94
-#: ../../Zotlabs/Module/Admin/Profs.php:114 ../../Zotlabs/Module/Rbmark.php:31
-#: ../../Zotlabs/Module/Rbmark.php:103 ../../Zotlabs/Module/Filer.php:54
+#: ../../Zotlabs/Module/Admin/Queueworker.php:115
+#: ../../Zotlabs/Module/Admin/Profs.php:95
+#: ../../Zotlabs/Module/Admin/Profs.php:115 ../../Zotlabs/Module/Rbmark.php:29
+#: ../../Zotlabs/Module/Rbmark.php:85 ../../Zotlabs/Module/Filer.php:54
msgid "Save"
msgstr ""
-#: ../../include/text.php:1502
+#: ../../include/text.php:1503
msgid "May"
msgstr ""
-#: ../../include/text.php:1576
+#: ../../include/text.php:1577
msgid "Unknown attachment"
msgstr ""
-#: ../../include/text.php:1579 ../../Zotlabs/Storage/Browser.php:382
+#: ../../include/text.php:1580 ../../Zotlabs/Storage/Browser.php:383
#: ../../Zotlabs/Module/Sharedwithme.php:109
msgid "Size"
msgstr ""
-#: ../../include/text.php:1622
+#: ../../include/text.php:1623
msgid "remove category"
msgstr ""
-#: ../../include/text.php:1700
+#: ../../include/text.php:1701
msgid "remove from file"
msgstr ""
-#: ../../include/text.php:1887
+#: ../../include/text.php:1888
msgid "Download binary/encrypted content"
msgstr ""
-#: ../../include/text.php:1945 ../../include/text.php:1954
-#: ../../include/text.php:1981 ../../include/text.php:1990
+#: ../../include/text.php:1946 ../../include/text.php:1955
+#: ../../include/text.php:1982 ../../include/text.php:1991
#, php-format
msgctxt "noun"
msgid "%d Vote"
@@ -3396,7 +3378,7 @@ msgid_plural "%d Votes"
msgstr[0] ""
msgstr[1] ""
-#: ../../include/text.php:1997
+#: ../../include/text.php:1998
#, php-format
msgctxt "noun"
msgid "%d Vote in total"
@@ -3404,208 +3386,208 @@ msgid_plural "%d Votes in total"
msgstr[0] ""
msgstr[1] ""
-#: ../../include/text.php:2003
+#: ../../include/text.php:2004
msgid "Poll has ended"
msgstr ""
-#: ../../include/text.php:2006
+#: ../../include/text.php:2007
#, php-format
msgid "Poll ends in %s"
msgstr ""
-#: ../../include/text.php:2013 ../../Zotlabs/Lib/ThreadItem.php:467
+#: ../../include/text.php:2014 ../../Zotlabs/Lib/ThreadItem.php:467
msgid "Vote"
msgstr ""
-#: ../../include/text.php:2168
+#: ../../include/text.php:2174
msgid "Link to Source"
msgstr ""
-#: ../../include/text.php:2201
+#: ../../include/text.php:2207
msgid "Page layout"
msgstr ""
-#: ../../include/text.php:2201
+#: ../../include/text.php:2207
msgid "You can create your own with the layouts tool"
msgstr ""
-#: ../../include/text.php:2211 ../../addon/wiki/Mod_Wiki.php:220
+#: ../../include/text.php:2217 ../../addon/wiki/Mod_Wiki.php:220
#: ../../addon/wiki/Mod_Wiki.php:368 ../../addon/wiki/Mod_Wiki.php:903
#: ../../addon/wiki/Widget/Wiki_pages.php:68
msgid "BBcode"
msgstr ""
-#: ../../include/text.php:2212
+#: ../../include/text.php:2218
msgid "HTML"
msgstr ""
-#: ../../include/text.php:2213 ../../addon/wiki/Mod_Wiki.php:220
+#: ../../include/text.php:2219 ../../addon/wiki/Mod_Wiki.php:220
#: ../../addon/wiki/Mod_Wiki.php:368 ../../addon/wiki/Mod_Wiki.php:903
#: ../../addon/wiki/Widget/Wiki_pages.php:68 ../../addon/mdpost/mdpost.php:41
msgid "Markdown"
msgstr ""
-#: ../../include/text.php:2214 ../../addon/wiki/Mod_Wiki.php:220
+#: ../../include/text.php:2220 ../../addon/wiki/Mod_Wiki.php:220
#: ../../addon/wiki/Mod_Wiki.php:903 ../../addon/wiki/Widget/Wiki_pages.php:68
msgid "Text"
msgstr ""
-#: ../../include/text.php:2215
+#: ../../include/text.php:2221
msgid "Comanche Layout"
msgstr ""
-#: ../../include/text.php:2220
+#: ../../include/text.php:2226
msgid "PHP"
msgstr ""
-#: ../../include/text.php:2232
+#: ../../include/text.php:2238
msgid "Page content type"
msgstr ""
-#: ../../include/text.php:2365
+#: ../../include/text.php:2371
msgid "activity"
msgstr ""
-#: ../../include/text.php:2368
+#: ../../include/text.php:2374
msgid "poll"
msgstr ""
-#: ../../include/text.php:2481
+#: ../../include/text.php:2487
msgid "a-z, 0-9, -, and _ only"
msgstr ""
-#: ../../include/text.php:2789
+#: ../../include/text.php:2795
msgid "Design Tools"
msgstr ""
-#: ../../include/text.php:2792 ../../Zotlabs/Module/Blocks.php:152
+#: ../../include/text.php:2798 ../../Zotlabs/Module/Blocks.php:152
msgid "Blocks"
msgstr ""
-#: ../../include/text.php:2793 ../../Zotlabs/Module/Menu.php:171
+#: ../../include/text.php:2799 ../../Zotlabs/Module/Menu.php:171
msgid "Menus"
msgstr ""
-#: ../../include/text.php:2794 ../../Zotlabs/Module/Layouts.php:182
+#: ../../include/text.php:2800 ../../Zotlabs/Module/Layouts.php:182
msgid "Layouts"
msgstr ""
-#: ../../include/text.php:2795
+#: ../../include/text.php:2801
msgid "Pages"
msgstr ""
-#: ../../include/text.php:2807
+#: ../../include/text.php:2813
msgid "Import"
msgstr ""
-#: ../../include/text.php:2808
+#: ../../include/text.php:2814
msgid "Import website..."
msgstr ""
-#: ../../include/text.php:2809
+#: ../../include/text.php:2815
msgid "Select folder to import"
msgstr ""
-#: ../../include/text.php:2810
+#: ../../include/text.php:2816
msgid "Import from a zipped folder:"
msgstr ""
-#: ../../include/text.php:2811
+#: ../../include/text.php:2817
msgid "Import from cloud files:"
msgstr ""
-#: ../../include/text.php:2812
+#: ../../include/text.php:2818
msgid "/cloud/channel/path/to/folder"
msgstr ""
-#: ../../include/text.php:2813
+#: ../../include/text.php:2819
msgid "Enter path to website files"
msgstr ""
-#: ../../include/text.php:2814
+#: ../../include/text.php:2820
msgid "Select folder"
msgstr ""
-#: ../../include/text.php:2815
+#: ../../include/text.php:2821
msgid "Export website..."
msgstr ""
-#: ../../include/text.php:2816
+#: ../../include/text.php:2822
msgid "Export to a zip file"
msgstr ""
-#: ../../include/text.php:2817
+#: ../../include/text.php:2823
msgid "website.zip"
msgstr ""
-#: ../../include/text.php:2818
+#: ../../include/text.php:2824
msgid "Enter a name for the zip file."
msgstr ""
-#: ../../include/text.php:2819
+#: ../../include/text.php:2825
msgid "Export to cloud files"
msgstr ""
-#: ../../include/text.php:2820
+#: ../../include/text.php:2826
msgid "/path/to/export/folder"
msgstr ""
-#: ../../include/text.php:2821
+#: ../../include/text.php:2827
msgid "Enter a path to a cloud files destination."
msgstr ""
-#: ../../include/text.php:2822
+#: ../../include/text.php:2828
msgid "Specify folder"
msgstr ""
-#: ../../include/channel.php:49
+#: ../../include/channel.php:50
msgid "Unable to obtain identity information from database"
msgstr ""
-#: ../../include/channel.php:82
+#: ../../include/channel.php:83
msgid "Empty name"
msgstr ""
-#: ../../include/channel.php:85
+#: ../../include/channel.php:86
msgid "Name too long"
msgstr ""
-#: ../../include/channel.php:202
+#: ../../include/channel.php:203
msgid "No account identifier"
msgstr ""
-#: ../../include/channel.php:214 ../../Zotlabs/Module/Register.php:95
+#: ../../include/channel.php:215 ../../Zotlabs/Module/Register.php:96
msgid "Nickname is required."
msgstr ""
-#: ../../include/channel.php:228 ../../include/channel.php:667
-#: ../../Zotlabs/Module/Register.php:100 ../../Zotlabs/Module/Changeaddr.php:46
+#: ../../include/channel.php:229 ../../include/channel.php:668
+#: ../../Zotlabs/Module/Register.php:101 ../../Zotlabs/Module/Changeaddr.php:46
msgid "Reserved nickname. Please choose another."
msgstr ""
-#: ../../include/channel.php:233 ../../include/channel.php:672
-#: ../../Zotlabs/Module/Register.php:105 ../../Zotlabs/Module/Changeaddr.php:51
+#: ../../include/channel.php:234 ../../include/channel.php:673
+#: ../../Zotlabs/Module/Register.php:106 ../../Zotlabs/Module/Changeaddr.php:51
msgid ""
"Nickname has unsupported characters or is already being used on this site."
msgstr ""
-#: ../../include/channel.php:299
+#: ../../include/channel.php:300
msgid "Unable to retrieve created identity"
msgstr ""
-#: ../../include/channel.php:410
+#: ../../include/channel.php:411
msgid "Default Profile"
msgstr ""
-#: ../../include/channel.php:600 ../../include/channel.php:689
+#: ../../include/channel.php:601 ../../include/channel.php:690
msgid "Unable to retrieve modified identity"
msgstr ""
-#: ../../include/channel.php:1381
+#: ../../include/channel.php:1382
msgid "Requested channel is not available"
msgstr ""
-#: ../../include/channel.php:1435 ../../addon/cards/Mod_Cards.php:42
+#: ../../include/channel.php:1436 ../../addon/cards/Mod_Cards.php:42
#: ../../addon/articles/Mod_Articles.php:46
#: ../../addon/gallery/Mod_Gallery.php:49
#: ../../Zotlabs/Module/Editwebpage.php:32 ../../Zotlabs/Module/Webpages.php:39
@@ -3617,268 +3599,268 @@ msgstr ""
msgid "Requested profile is not available."
msgstr ""
-#: ../../include/channel.php:1531 ../../Zotlabs/Module/Profiles.php:740
+#: ../../include/channel.php:1532 ../../Zotlabs/Module/Profiles.php:743
msgid "Change profile photo"
msgstr ""
-#: ../../include/channel.php:1539
+#: ../../include/channel.php:1540
msgid "Create New Profile"
msgstr ""
-#: ../../include/channel.php:1557 ../../Zotlabs/Module/Profiles.php:837
+#: ../../include/channel.php:1558 ../../Zotlabs/Module/Profiles.php:841
msgid "Profile Image"
msgstr ""
-#: ../../include/channel.php:1560
+#: ../../include/channel.php:1561
msgid "Visible to everybody"
msgstr ""
-#: ../../include/channel.php:1561 ../../Zotlabs/Module/Profiles.php:737
-#: ../../Zotlabs/Module/Profiles.php:841
+#: ../../include/channel.php:1562 ../../Zotlabs/Module/Profiles.php:740
+#: ../../Zotlabs/Module/Profiles.php:845
msgid "Edit visibility"
msgstr ""
-#: ../../include/channel.php:1643 ../../include/channel.php:1771
+#: ../../include/channel.php:1644 ../../include/channel.php:1772
msgid "Gender:"
msgstr ""
-#: ../../include/channel.php:1644 ../../include/channel.php:1817
+#: ../../include/channel.php:1645 ../../include/channel.php:1818
msgid "Status:"
msgstr ""
-#: ../../include/channel.php:1645 ../../include/channel.php:1841
+#: ../../include/channel.php:1646 ../../include/channel.php:1842
msgid "Homepage:"
msgstr ""
-#: ../../include/channel.php:1646 ../../include/channel.php:1843
+#: ../../include/channel.php:1647 ../../include/channel.php:1844
#: ../../Zotlabs/Module/Directory.php:368
msgid "Hometown:"
msgstr ""
-#: ../../include/channel.php:1647
+#: ../../include/channel.php:1648
msgid "Online Now"
msgstr ""
-#: ../../include/channel.php:1696
+#: ../../include/channel.php:1697
msgid "This channel has not added a profile description yet"
msgstr ""
-#: ../../include/channel.php:1698
+#: ../../include/channel.php:1699
msgid "Change your profile photo"
msgstr ""
-#: ../../include/channel.php:1730
+#: ../../include/channel.php:1731
msgid "Trans"
msgstr ""
-#: ../../include/channel.php:1769
+#: ../../include/channel.php:1770
msgid "Full Name:"
msgstr ""
-#: ../../include/channel.php:1802
+#: ../../include/channel.php:1803
msgid "j F, Y"
msgstr ""
-#: ../../include/channel.php:1803
+#: ../../include/channel.php:1804
msgid "j F"
msgstr ""
-#: ../../include/channel.php:1810
+#: ../../include/channel.php:1811
msgid "Birthday:"
msgstr ""
-#: ../../include/channel.php:1814 ../../Zotlabs/Module/Directory.php:349
+#: ../../include/channel.php:1815 ../../Zotlabs/Module/Directory.php:349
msgid "Age:"
msgstr ""
-#: ../../include/channel.php:1823
+#: ../../include/channel.php:1824
#, php-format
msgid "for %1$d %2$s"
msgstr ""
-#: ../../include/channel.php:1835
+#: ../../include/channel.php:1836
msgid "Tags:"
msgstr ""
-#: ../../include/channel.php:1839
+#: ../../include/channel.php:1840
msgid "Sexual Preference:"
msgstr ""
-#: ../../include/channel.php:1845
+#: ../../include/channel.php:1846
msgid "Political Views:"
msgstr ""
-#: ../../include/channel.php:1847
+#: ../../include/channel.php:1848
msgid "Religion:"
msgstr ""
-#: ../../include/channel.php:1849 ../../Zotlabs/Module/Directory.php:370
+#: ../../include/channel.php:1850 ../../Zotlabs/Module/Directory.php:370
msgid "About:"
msgstr ""
-#: ../../include/channel.php:1851
+#: ../../include/channel.php:1852
msgid "Hobbies/Interests:"
msgstr ""
-#: ../../include/channel.php:1853
+#: ../../include/channel.php:1854
msgid "Likes:"
msgstr ""
-#: ../../include/channel.php:1855
+#: ../../include/channel.php:1856
msgid "Dislikes:"
msgstr ""
-#: ../../include/channel.php:1857
+#: ../../include/channel.php:1858
msgid "Contact information and Social Networks:"
msgstr ""
-#: ../../include/channel.php:1859
+#: ../../include/channel.php:1860
msgid "My other channels:"
msgstr ""
-#: ../../include/channel.php:1861
+#: ../../include/channel.php:1862
msgid "Musical interests:"
msgstr ""
-#: ../../include/channel.php:1863
+#: ../../include/channel.php:1864
msgid "Books, literature:"
msgstr ""
-#: ../../include/channel.php:1865
+#: ../../include/channel.php:1866
msgid "Television:"
msgstr ""
-#: ../../include/channel.php:1867
+#: ../../include/channel.php:1868
msgid "Film/dance/culture/entertainment:"
msgstr ""
-#: ../../include/channel.php:1869
+#: ../../include/channel.php:1870
msgid "Love/Romance:"
msgstr ""
-#: ../../include/channel.php:1871
+#: ../../include/channel.php:1872
msgid "Work/employment:"
msgstr ""
-#: ../../include/channel.php:1873
+#: ../../include/channel.php:1874
msgid "School/education:"
msgstr ""
-#: ../../include/channel.php:1894 ../../Zotlabs/Lib/Apps.php:365
-#: ../../Zotlabs/Module/Profperm.php:113
+#: ../../include/channel.php:1895 ../../Zotlabs/Lib/Apps.php:366
+#: ../../Zotlabs/Module/Profperm.php:114
msgid "Profile"
msgstr ""
-#: ../../include/channel.php:1896
+#: ../../include/channel.php:1897
msgid "Like this thing"
msgstr ""
-#: ../../include/channel.php:1897
+#: ../../include/channel.php:1898
msgid "Export"
msgstr ""
-#: ../../include/channel.php:2350
+#: ../../include/channel.php:2351
msgid "cover photo"
msgstr ""
-#: ../../include/channel.php:2631 ../../boot.php:1747
+#: ../../include/channel.php:2632 ../../boot.php:1761
#: ../../Zotlabs/Module/Rmagic.php:96
msgid "Remote Authentication"
msgstr ""
-#: ../../include/channel.php:2632 ../../Zotlabs/Module/Rmagic.php:97
+#: ../../include/channel.php:2633 ../../Zotlabs/Module/Rmagic.php:97
msgid "Enter your channel address (e.g. channel@example.com)"
msgstr ""
-#: ../../include/channel.php:2633 ../../Zotlabs/Module/Rmagic.php:98
+#: ../../include/channel.php:2634 ../../Zotlabs/Module/Rmagic.php:98
msgid "Authenticate"
msgstr ""
-#: ../../include/channel.php:2793 ../../Zotlabs/Module/Admin/Accounts.php:184
+#: ../../include/channel.php:2794 ../../Zotlabs/Module/Admin/Accounts.php:184
#, php-format
msgid "Account '%s' deleted"
msgstr ""
-#: ../../include/bbcode.php:233 ../../include/bbcode.php:993
-#: ../../include/bbcode.php:1613 ../../include/bbcode.php:1621
+#: ../../include/bbcode.php:234 ../../include/bbcode.php:994
+#: ../../include/bbcode.php:1659 ../../include/bbcode.php:1667
msgid "Image/photo"
msgstr ""
-#: ../../include/bbcode.php:285
+#: ../../include/bbcode.php:286
msgid "Encrypted content"
msgstr ""
-#: ../../include/bbcode.php:341
+#: ../../include/bbcode.php:342
#, php-format
msgid "Install %1$s element %2$s"
msgstr ""
-#: ../../include/bbcode.php:345
+#: ../../include/bbcode.php:346
#, php-format
msgid ""
"This post contains an installable %s element, however you lack permissions "
"to install it on this site."
msgstr ""
-#: ../../include/bbcode.php:355 ../../Zotlabs/Module/Impel.php:47
+#: ../../include/bbcode.php:356 ../../Zotlabs/Module/Impel.php:47
msgid "webpage"
msgstr ""
-#: ../../include/bbcode.php:358 ../../Zotlabs/Module/Impel.php:57
+#: ../../include/bbcode.php:359 ../../Zotlabs/Module/Impel.php:57
msgid "layout"
msgstr ""
-#: ../../include/bbcode.php:361 ../../Zotlabs/Module/Impel.php:52
+#: ../../include/bbcode.php:362 ../../Zotlabs/Module/Impel.php:52
msgid "block"
msgstr ""
-#: ../../include/bbcode.php:364 ../../Zotlabs/Module/Impel.php:64
+#: ../../include/bbcode.php:365 ../../Zotlabs/Module/Impel.php:64
msgid "menu"
msgstr ""
-#: ../../include/bbcode.php:567
+#: ../../include/bbcode.php:568
msgid "card"
msgstr ""
-#: ../../include/bbcode.php:569
+#: ../../include/bbcode.php:570
msgid "article"
msgstr ""
-#: ../../include/bbcode.php:652 ../../include/bbcode.php:660
+#: ../../include/bbcode.php:653 ../../include/bbcode.php:661
msgid "Click to open/close"
msgstr ""
-#: ../../include/bbcode.php:673
+#: ../../include/bbcode.php:674
msgid "View article"
msgstr ""
-#: ../../include/bbcode.php:673
+#: ../../include/bbcode.php:674
msgid "View summary"
msgstr ""
-#: ../../include/bbcode.php:1117 ../../include/bbcode.php:1299
+#: ../../include/bbcode.php:1127 ../../include/bbcode.php:1312
#: ../../addon/wiki/Lib/NativeWikiPage.php:630
msgid "Different viewers will see this text differently"
msgstr ""
-#: ../../include/bbcode.php:1589
+#: ../../include/bbcode.php:1635
msgid "$1 wrote:"
msgstr ""
-#: ../../include/import.php:30
+#: ../../include/import.php:31
msgid "Unable to import a removed channel."
msgstr ""
-#: ../../include/import.php:56
+#: ../../include/import.php:57
msgid ""
"Cannot create a duplicate channel identifier on this system. Import failed."
msgstr ""
-#: ../../include/import.php:77 ../../addon/diaspora/import_diaspora.php:43
+#: ../../include/import.php:78 ../../addon/diaspora/import_diaspora.php:43
msgid "Unable to create a unique channel address. Import failed."
msgstr ""
-#: ../../include/import.php:128
+#: ../../include/import.php:129
msgid "Cloned channel not found. Import failed."
msgstr ""
@@ -3906,14 +3888,6 @@ msgstr ""
msgid "IRC Chatroom"
msgstr ""
-#: ../../addon/smileybutton/Mod_Smileybutton.php:42
-msgid "Hide the button and show the smilies directly."
-msgstr ""
-
-#: ../../addon/smileybutton/Mod_Smileybutton.php:50
-msgid "Smileybutton Settings"
-msgstr ""
-
#: ../../addon/fediquest/fediquest.php:211
msgid "ERROR: word length is not correct!"
msgstr ""
@@ -4062,7 +4036,7 @@ msgstr ""
msgid "Send email to all members"
msgstr ""
-#: ../../addon/hubwall/hubwall.php:33 ../../Zotlabs/Lib/Enotify.php:65
+#: ../../addon/hubwall/hubwall.php:33 ../../Zotlabs/Lib/Enotify.php:66
#, php-format
msgid "%s Administrator"
msgstr ""
@@ -4071,24 +4045,24 @@ msgstr ""
msgid "No recipients found."
msgstr ""
-#: ../../addon/hubwall/hubwall.php:73
+#: ../../addon/hubwall/hubwall.php:74
#, php-format
msgid "%1$d of %2$d messages sent."
msgstr ""
-#: ../../addon/hubwall/hubwall.php:81
+#: ../../addon/hubwall/hubwall.php:82
msgid "Send email to all hub members."
msgstr ""
-#: ../../addon/hubwall/hubwall.php:92 ../../addon/mailtest/mailtest.php:96
+#: ../../addon/hubwall/hubwall.php:93 ../../addon/mailtest/mailtest.php:96
msgid "Message subject"
msgstr ""
-#: ../../addon/hubwall/hubwall.php:93
+#: ../../addon/hubwall/hubwall.php:94
msgid "Sender Email address"
msgstr ""
-#: ../../addon/hubwall/hubwall.php:94
+#: ../../addon/hubwall/hubwall.php:95
msgid "Test mode (only send to hub administrator)"
msgstr ""
@@ -4132,7 +4106,7 @@ msgid "Last Name"
msgstr ""
#: ../../addon/openid/MysqlProvider.php:54 ../../addon/redred/Mod_Redred.php:73
-#: ../../boot.php:1740
+#: ../../boot.php:1754
msgid "Nickname"
msgstr ""
@@ -4165,11 +4139,11 @@ msgid "Profile Photo 128px"
msgstr ""
#: ../../addon/openid/MysqlProvider.php:68
-#: ../../Zotlabs/Module/Profiles.php:779
+#: ../../Zotlabs/Module/Profiles.php:782
msgid "Homepage URL"
msgstr ""
-#: ../../addon/openid/MysqlProvider.php:69 ../../Zotlabs/Lib/Apps.php:362
+#: ../../addon/openid/MysqlProvider.php:69 ../../Zotlabs/Lib/Apps.php:363
msgid "Language"
msgstr ""
@@ -4190,7 +4164,7 @@ msgid "Birthdate"
msgstr ""
#: ../../addon/openid/MysqlProvider.php:74
-#: ../../Zotlabs/Module/Profiles.php:452
+#: ../../Zotlabs/Module/Profiles.php:453
msgid "Gender"
msgstr ""
@@ -4294,7 +4268,7 @@ msgid "Unknown error. Please try again later."
msgstr ""
#: ../../addon/openclipatar/openclipatar.php:299
-#: ../../Zotlabs/Module/Profile_photo.php:268
+#: ../../Zotlabs/Module/Profile_photo.php:269
msgid ""
"Shift-reload the page or clear browser cache if the new photo does not "
"display immediately."
@@ -4381,10 +4355,10 @@ msgctxt "opensearch"
msgid "$Projectname"
msgstr ""
-#: ../../addon/opensearch/opensearch.php:42 ../../Zotlabs/Lib/Enotify.php:66
-#: ../../Zotlabs/Module/Home.php:87 ../../Zotlabs/Module/Home.php:95
-#: ../../Zotlabs/Module/Invite.php:238 ../../Zotlabs/Module/Invite.php:507
-#: ../../Zotlabs/Module/Invite.php:521
+#: ../../addon/opensearch/opensearch.php:42 ../../Zotlabs/Lib/Enotify.php:67
+#: ../../Zotlabs/Module/Home.php:88 ../../Zotlabs/Module/Home.php:96
+#: ../../Zotlabs/Module/Invite.php:239 ../../Zotlabs/Module/Invite.php:508
+#: ../../Zotlabs/Module/Invite.php:522
msgid "$Projectname"
msgstr ""
@@ -4501,7 +4475,7 @@ msgstr ""
#: ../../addon/faces/faces.php:291 ../../addon/twitter/twitter.php:493
#: ../../addon/openstreetmap/openstreetmap.php:171
#: ../../Zotlabs/Module/Defperms.php:111
-#: ../../Zotlabs/Module/Settings/Channel.php:150
+#: ../../Zotlabs/Module/Settings/Channel.php:151
msgid "Settings updated."
msgstr ""
@@ -4560,7 +4534,7 @@ msgstr ""
msgid "Page Header"
msgstr ""
-#: ../../addon/buglink/buglink.php:16 ../../Zotlabs/Lib/Apps.php:333
+#: ../../addon/buglink/buglink.php:16 ../../Zotlabs/Lib/Apps.php:334
msgid "Report Bug"
msgstr ""
@@ -4585,7 +4559,7 @@ msgid "Insane Journal Crosspost Connector App"
msgstr ""
#: ../../addon/ijpost/Mod_Ijpost.php:35 ../../addon/xmpp/Mod_Xmpp.php:35
-#: ../../Zotlabs/Module/Invite.php:69 ../../Zotlabs/Module/Lang.php:20
+#: ../../Zotlabs/Module/Invite.php:70 ../../Zotlabs/Module/Lang.php:20
msgid "Not Installed"
msgstr ""
@@ -4658,7 +4632,7 @@ msgid "Hubzilla Crosspost Connector"
msgstr ""
#: ../../addon/cards/cards.php:48 ../../addon/cards/cards.php:160
-#: ../../addon/cards/Mod_Cards.php:209 ../../Zotlabs/Lib/Apps.php:331
+#: ../../addon/cards/Mod_Cards.php:209 ../../Zotlabs/Lib/Apps.php:332
msgid "Cards"
msgstr ""
@@ -4666,6 +4640,14 @@ msgstr ""
msgid "View Cards"
msgstr ""
+#: ../../addon/cards/cards.php:104 ../../addon/articles/articles.php:105
+#: ../../addon/wiki/Lib/NativeWikiPage.php:545
+#: ../../Zotlabs/Module/Page.php:136 ../../Zotlabs/Module/Display.php:155
+#: ../../Zotlabs/Module/Block.php:77 ../../Zotlabs/Module/Help.php:175
+#: ../../Zotlabs/Web/Router.php:188
+msgid "Page not found."
+msgstr ""
+
#: ../../addon/cards/Mod_Cards.php:115
msgid "Add Card"
msgstr ""
@@ -4780,12 +4762,12 @@ msgstr ""
msgid "Activitypub Protocol"
msgstr ""
-#: ../../addon/pubcrawl/pubcrawl.php:1073 ../../addon/diaspora/diaspora.php:415
+#: ../../addon/pubcrawl/pubcrawl.php:1078 ../../addon/diaspora/diaspora.php:415
#: ../../Zotlabs/Module/Contactedit.php:494
msgid "Refresh failed"
msgstr ""
-#: ../../addon/pubcrawl/pubcrawl.php:1080 ../../addon/diaspora/diaspora.php:420
+#: ../../addon/pubcrawl/pubcrawl.php:1085 ../../addon/diaspora/diaspora.php:420
#: ../../Zotlabs/Module/Contactedit.php:491
msgid "Refresh succeeded"
msgstr ""
@@ -4873,7 +4855,7 @@ msgid "Import completed."
msgstr ""
#: ../../addon/diaspora/p.php:48 ../../addon/diaspora/util.php:346
-#: ../../addon/diaspora/util.php:359 ../../Zotlabs/Lib/Enotify.php:61
+#: ../../addon/diaspora/util.php:359 ../../Zotlabs/Lib/Enotify.php:62
msgid "$projectname"
msgstr ""
@@ -4970,8 +4952,8 @@ msgid "No channels currently blocked"
msgstr ""
#: ../../addon/superblock/Mod_Superblock.php:90
-#: ../../Zotlabs/Module/Cover_photo.php:381 ../../Zotlabs/Module/Tagrm.php:137
-#: ../../Zotlabs/Module/Admin/Addons.php:462
+#: ../../Zotlabs/Module/Cover_photo.php:382 ../../Zotlabs/Module/Tagrm.php:137
+#: ../../Zotlabs/Module/Admin/Addons.php:463
#: ../../Zotlabs/Module/Photos.php:994
msgid "Remove"
msgstr ""
@@ -5113,9 +5095,9 @@ msgstr ""
#: ../../addon/rendezvous/rendezvous.php:172 ../../addon/wiki/Mod_Wiki.php:221
#: ../../addon/wiki/Lib/NativeWikiPage.php:588
#: ../../addon/wiki/Widget/Wiki_page_history.php:28
-#: ../../Zotlabs/Storage/Browser.php:380 ../../Zotlabs/Module/Oauth.php:111
+#: ../../Zotlabs/Storage/Browser.php:381 ../../Zotlabs/Module/Oauth.php:111
#: ../../Zotlabs/Module/Oauth.php:137 ../../Zotlabs/Module/Connedit.php:732
-#: ../../Zotlabs/Module/Admin/Channels.php:159
+#: ../../Zotlabs/Module/Admin/Channels.php:181
#: ../../Zotlabs/Module/Sharedwithme.php:107 ../../Zotlabs/Module/Chat.php:256
#: ../../Zotlabs/Module/Cdav.php:1368 ../../Zotlabs/Module/Oauth2.php:116
#: ../../Zotlabs/Module/Oauth2.php:144
@@ -5125,7 +5107,7 @@ msgstr ""
#: ../../addon/rendezvous/rendezvous.php:173
#: ../../addon/cart/submodules/hzservices.php:657
#: ../../addon/cart/submodules/manualcat.php:260
-#: ../../Zotlabs/Module/Appman.php:220 ../../Zotlabs/Module/Rbmark.php:100
+#: ../../Zotlabs/Module/Appman.php:220 ../../Zotlabs/Module/Rbmark.php:82
#: ../../Zotlabs/Module/Cdav.php:1005
msgid "Description"
msgstr ""
@@ -5205,7 +5187,7 @@ msgstr ""
msgid "You have no rendezvous. Press the button above to create a rendezvous!"
msgstr ""
-#: ../../addon/rendezvous/rendezvous.php:401 ../../Zotlabs/Module/Setup.php:748
+#: ../../addon/rendezvous/rendezvous.php:401 ../../Zotlabs/Module/Setup.php:751
msgid "Errors encountered creating database tables."
msgstr ""
@@ -5314,7 +5296,7 @@ msgid "Edit Article"
msgstr ""
#: ../../addon/articles/articles.php:48 ../../addon/articles/articles.php:160
-#: ../../addon/articles/Mod_Articles.php:228 ../../Zotlabs/Lib/Apps.php:330
+#: ../../addon/articles/Mod_Articles.php:228 ../../Zotlabs/Lib/Apps.php:331
msgid "Articles"
msgstr ""
@@ -5351,18 +5333,18 @@ msgstr ""
msgid "Error downloading wiki: "
msgstr ""
-#: ../../addon/wiki/Mod_Wiki.php:215 ../../Zotlabs/Storage/Browser.php:407
+#: ../../addon/wiki/Mod_Wiki.php:215 ../../Zotlabs/Storage/Browser.php:408
msgid "Download"
msgstr ""
#: ../../addon/wiki/Mod_Wiki.php:216 ../../addon/wiki/Mod_Wiki.php:406
#: ../../Zotlabs/Module/Webpages.php:256 ../../Zotlabs/Module/Layouts.php:196
-#: ../../Zotlabs/Module/Pubsites.php:62 ../../Zotlabs/Module/Blocks.php:164
+#: ../../Zotlabs/Module/Pubsites.php:63 ../../Zotlabs/Module/Blocks.php:164
msgid "View"
msgstr ""
#: ../../addon/wiki/Mod_Wiki.php:217 ../../Zotlabs/Module/Manage.php:137
-#: ../../Zotlabs/Module/Profiles.php:848
+#: ../../Zotlabs/Module/Profiles.php:852
msgid "Create New"
msgstr ""
@@ -5374,7 +5356,7 @@ msgstr ""
msgid "Content type"
msgstr ""
-#: ../../addon/wiki/Mod_Wiki.php:222 ../../Zotlabs/Storage/Browser.php:381
+#: ../../addon/wiki/Mod_Wiki.php:222 ../../Zotlabs/Storage/Browser.php:382
msgid "Type"
msgstr ""
@@ -5432,8 +5414,8 @@ msgstr ""
msgid "Embed image from photo albums"
msgstr ""
-#: ../../addon/wiki/Mod_Wiki.php:402 ../../Zotlabs/Module/Cover_photo.php:389
-#: ../../Zotlabs/Module/Profile_photo.php:556
+#: ../../addon/wiki/Mod_Wiki.php:402 ../../Zotlabs/Module/Cover_photo.php:390
+#: ../../Zotlabs/Module/Profile_photo.php:557
msgid "Choose a different album"
msgstr ""
@@ -5704,7 +5686,7 @@ msgid "New registration"
msgstr ""
#: ../../addon/notifyadmin/notifyadmin.php:40
-#: ../../Zotlabs/Module/Invite.php:265
+#: ../../Zotlabs/Module/Invite.php:266
#, php-format
msgid "%s : Message delivery failed."
msgstr ""
@@ -5719,7 +5701,7 @@ msgid "Post to GNU social"
msgstr ""
#: ../../addon/statusnet/statusnet.php:593
-#: ../../Zotlabs/Module/Admin/Site.php:409
+#: ../../Zotlabs/Module/Admin/Site.php:410
msgid "Site name"
msgstr ""
@@ -6420,7 +6402,7 @@ msgstr ""
msgid "Brief description or title"
msgstr ""
-#: ../../addon/workflow/workflow.php:2661 ../../Zotlabs/Lib/Apps.php:373
+#: ../../addon/workflow/workflow.php:2661 ../../Zotlabs/Lib/Apps.php:374
#: ../../Zotlabs/Widget/Notes.php:38
msgid "Notes"
msgstr ""
@@ -6485,7 +6467,7 @@ msgid "Files imported"
msgstr ""
#: ../../addon/content_import/Mod_content_import.php:133
-#: ../../Zotlabs/Lib/Apps.php:337
+#: ../../Zotlabs/Lib/Apps.php:338
msgid "Content Import"
msgstr ""
@@ -6676,509 +6658,509 @@ msgstr ""
msgid "I won!"
msgstr ""
-#: ../../boot.php:1722
+#: ../../boot.php:1736
msgid "Create an account to access services and applications"
msgstr ""
-#: ../../boot.php:1740
+#: ../../boot.php:1754
msgid "Email or nickname"
msgstr ""
-#: ../../boot.php:1750
+#: ../../boot.php:1764
msgid "Password"
msgstr ""
-#: ../../boot.php:1751
+#: ../../boot.php:1765
msgid "Remember me"
msgstr ""
-#: ../../boot.php:1754
+#: ../../boot.php:1768
msgid "Forgot your password?"
msgstr ""
-#: ../../boot.php:1755 ../../Zotlabs/Module/Lostpass.php:91
+#: ../../boot.php:1769 ../../Zotlabs/Module/Lostpass.php:91
msgid "Password Reset"
msgstr ""
-#: ../../boot.php:2625
+#: ../../boot.php:2633
#, php-format
msgid "[$Projectname] Website SSL error for %s"
msgstr ""
-#: ../../boot.php:2630
+#: ../../boot.php:2638
msgid "Website SSL certificate is not valid. Please correct."
msgstr ""
-#: ../../boot.php:2746
+#: ../../boot.php:2754
#, php-format
msgid "[$Projectname] Cron tasks not running on %s"
msgstr ""
-#: ../../boot.php:2751
+#: ../../boot.php:2759
msgid "Cron/Scheduled tasks not running."
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:60
+#: ../../Zotlabs/Lib/Enotify.php:61
msgid "$Projectname Notification"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:63
+#: ../../Zotlabs/Lib/Enotify.php:64
msgid "Thank You,"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:66
+#: ../../Zotlabs/Lib/Enotify.php:67
#, php-format
msgid "This email was sent by %1$s at %2$s."
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:67
+#: ../../Zotlabs/Lib/Enotify.php:68
#, php-format
msgid ""
"To stop receiving these messages, please adjust your Notification Settings "
"at %s"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:68
+#: ../../Zotlabs/Lib/Enotify.php:69
#, php-format
msgid "To stop receiving these messages, please adjust your %s."
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:68
-#: ../../Zotlabs/Module/Settings/Channel.php:241
+#: ../../Zotlabs/Lib/Enotify.php:69
+#: ../../Zotlabs/Module/Settings/Channel.php:242
msgid "Notification Settings"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:123
+#: ../../Zotlabs/Lib/Enotify.php:124
#, php-format
msgid "%s <!item_type!>"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:131
+#: ../../Zotlabs/Lib/Enotify.php:132
#, php-format
msgid "[$Projectname:Notify] New direct message received at %s"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:133
+#: ../../Zotlabs/Lib/Enotify.php:134
#, php-format
msgid "%1$s sent you a new direct message at %2$s"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:134
+#: ../../Zotlabs/Lib/Enotify.php:135
#, php-format
msgid "%1$s sent you %2$s."
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:134
+#: ../../Zotlabs/Lib/Enotify.php:135
msgid "a direct message"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:135
+#: ../../Zotlabs/Lib/Enotify.php:136
#, php-format
msgid "Please visit %s to view and/or reply to your direct messages."
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:148
+#: ../../Zotlabs/Lib/Enotify.php:149
msgid "requested to comment on"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:148
+#: ../../Zotlabs/Lib/Enotify.php:149
msgid "commented on"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:161 ../../Zotlabs/Lib/Enotify.php:317
+#: ../../Zotlabs/Lib/Enotify.php:162 ../../Zotlabs/Lib/Enotify.php:318
msgid "requested to like"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:161 ../../Zotlabs/Lib/Enotify.php:317
+#: ../../Zotlabs/Lib/Enotify.php:162 ../../Zotlabs/Lib/Enotify.php:318
msgid "liked"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:164 ../../Zotlabs/Lib/Enotify.php:320
+#: ../../Zotlabs/Lib/Enotify.php:165 ../../Zotlabs/Lib/Enotify.php:321
msgid "requested to dislike"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:164 ../../Zotlabs/Lib/Enotify.php:320
+#: ../../Zotlabs/Lib/Enotify.php:165 ../../Zotlabs/Lib/Enotify.php:321
msgid "disliked"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:167
+#: ../../Zotlabs/Lib/Enotify.php:168
msgid "repeated"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:172
+#: ../../Zotlabs/Lib/Enotify.php:173
msgid "voted on"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:215
+#: ../../Zotlabs/Lib/Enotify.php:216
#, php-format
msgid "%1$s %2$s [zrl=%3$s]a %4$s[/zrl]"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:223
+#: ../../Zotlabs/Lib/Enotify.php:224
#, php-format
msgid "%1$s %2$s [zrl=%3$s]%4$s's %5$s[/zrl]"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:232 ../../Zotlabs/Lib/Enotify.php:324
+#: ../../Zotlabs/Lib/Enotify.php:233 ../../Zotlabs/Lib/Enotify.php:325
#, php-format
msgid "%1$s %2$s [zrl=%3$s]your %4$s[/zrl]"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:244
+#: ../../Zotlabs/Lib/Enotify.php:245
#, php-format
msgid "[$Projectname:Notify] Moderated Comment to conversation #%1$d by %2$s"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:246
+#: ../../Zotlabs/Lib/Enotify.php:247
#, php-format
msgid "[$Projectname:Notify] Comment to conversation #%1$d by %2$s"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:247
+#: ../../Zotlabs/Lib/Enotify.php:248
#, php-format
msgid "%1$s commented on an item/conversation you have been following"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:250 ../../Zotlabs/Lib/Enotify.php:344
-#: ../../Zotlabs/Lib/Enotify.php:360 ../../Zotlabs/Lib/Enotify.php:384
-#: ../../Zotlabs/Lib/Enotify.php:401 ../../Zotlabs/Lib/Enotify.php:414
+#: ../../Zotlabs/Lib/Enotify.php:251 ../../Zotlabs/Lib/Enotify.php:345
+#: ../../Zotlabs/Lib/Enotify.php:361 ../../Zotlabs/Lib/Enotify.php:385
+#: ../../Zotlabs/Lib/Enotify.php:402 ../../Zotlabs/Lib/Enotify.php:415
#, php-format
msgid "Please visit %s to view and/or reply to the conversation."
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:254 ../../Zotlabs/Lib/Enotify.php:255
+#: ../../Zotlabs/Lib/Enotify.php:255 ../../Zotlabs/Lib/Enotify.php:256
#, php-format
msgid "Please visit %s to approve or reject this comment."
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:340
+#: ../../Zotlabs/Lib/Enotify.php:341
#, php-format
msgid "[$Projectname:Notify] Like received to conversation #%1$d by %2$s"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:341
+#: ../../Zotlabs/Lib/Enotify.php:342
#, php-format
msgid "%1$s liked an item/conversation you created"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:352
+#: ../../Zotlabs/Lib/Enotify.php:353
#, php-format
msgid "[$Projectname:Notify] %s posted to your profile wall"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:354
+#: ../../Zotlabs/Lib/Enotify.php:355
#, php-format
msgid "%1$s posted to your profile wall at %2$s"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:356
+#: ../../Zotlabs/Lib/Enotify.php:357
#, php-format
msgid "%1$s posted to [zrl=%2$s]your wall[/zrl]"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:378
+#: ../../Zotlabs/Lib/Enotify.php:379
#, php-format
msgid "[$Projectname:Notify] %s tagged you"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:379
+#: ../../Zotlabs/Lib/Enotify.php:380
#, php-format
msgid "%1$s tagged you at %2$s"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:380
+#: ../../Zotlabs/Lib/Enotify.php:381
#, php-format
msgid "%1$s [zrl=%2$s]tagged you[/zrl]."
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:391
+#: ../../Zotlabs/Lib/Enotify.php:392
#, php-format
msgid "[$Projectname:Notify] %1$s poked you"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:392
+#: ../../Zotlabs/Lib/Enotify.php:393
#, php-format
msgid "%1$s poked you at %2$s"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:393
+#: ../../Zotlabs/Lib/Enotify.php:394
#, php-format
msgid "%1$s [zrl=%2$s]poked you[/zrl]."
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:408
+#: ../../Zotlabs/Lib/Enotify.php:409
#, php-format
msgid "[$Projectname:Notify] %s tagged your post"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:409
+#: ../../Zotlabs/Lib/Enotify.php:410
#, php-format
msgid "%1$s tagged your post at %2$s"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:410
+#: ../../Zotlabs/Lib/Enotify.php:411
#, php-format
msgid "%1$s tagged [zrl=%2$s]your post[/zrl]"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:421
+#: ../../Zotlabs/Lib/Enotify.php:422
msgid "[$Projectname:Notify] Introduction received"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:422
+#: ../../Zotlabs/Lib/Enotify.php:423
#, php-format
msgid "You've received an new connection request from '%1$s' at %2$s"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:423
+#: ../../Zotlabs/Lib/Enotify.php:424
#, php-format
msgid "You've received [zrl=%1$s]a new connection request[/zrl] from %2$s."
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:426 ../../Zotlabs/Lib/Enotify.php:444
+#: ../../Zotlabs/Lib/Enotify.php:427 ../../Zotlabs/Lib/Enotify.php:445
#, php-format
msgid "You may visit their profile at %s"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:428
+#: ../../Zotlabs/Lib/Enotify.php:429
#, php-format
msgid "Please visit %s to approve or reject the connection request."
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:435
+#: ../../Zotlabs/Lib/Enotify.php:436
msgid "[$Projectname:Notify] Friend suggestion received"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:436
+#: ../../Zotlabs/Lib/Enotify.php:437
#, php-format
msgid "You've received a friend suggestion from '%1$s' at %2$s"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:437
+#: ../../Zotlabs/Lib/Enotify.php:438
#, php-format
msgid "You've received [zrl=%1$s]a friend suggestion[/zrl] for %2$s from %3$s."
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:442
+#: ../../Zotlabs/Lib/Enotify.php:443
msgid "Name:"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:443
+#: ../../Zotlabs/Lib/Enotify.php:444
msgid "Photo:"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:446
+#: ../../Zotlabs/Lib/Enotify.php:447
#, php-format
msgid "Please visit %s to approve or reject the suggestion."
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:676
+#: ../../Zotlabs/Lib/Enotify.php:677
msgid "[$Projectname:Notify]"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:842
+#: ../../Zotlabs/Lib/Enotify.php:843
msgid "created a new poll"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:842
+#: ../../Zotlabs/Lib/Enotify.php:843
msgid "created a new post"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:843
+#: ../../Zotlabs/Lib/Enotify.php:844
#, php-format
msgid "voted on %s's poll"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:843
+#: ../../Zotlabs/Lib/Enotify.php:844
#, php-format
msgid "commented on %s's post"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:847 ../../Zotlabs/Lib/Enotify.php:947
+#: ../../Zotlabs/Lib/Enotify.php:848 ../../Zotlabs/Lib/Enotify.php:948
msgid "shared a file with you"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:856
+#: ../../Zotlabs/Lib/Enotify.php:857
#, php-format
msgid "edited a post dated %s"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:859
+#: ../../Zotlabs/Lib/Enotify.php:860
#, php-format
msgid "edited a comment dated %s"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:932
+#: ../../Zotlabs/Lib/Enotify.php:933
msgid "added your channel"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:962
+#: ../../Zotlabs/Lib/Enotify.php:963
msgid "sent you a direct message"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:969
+#: ../../Zotlabs/Lib/Enotify.php:970
msgid "g A l F d"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:972
+#: ../../Zotlabs/Lib/Enotify.php:973
msgid "[today]"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:982
+#: ../../Zotlabs/Lib/Enotify.php:983
msgid "created an event"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:997
+#: ../../Zotlabs/Lib/Enotify.php:998
msgid "status verified"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:329
+#: ../../Zotlabs/Lib/Apps.php:330
msgid "Affinity Tool"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:332
+#: ../../Zotlabs/Lib/Apps.php:333
msgid "Site Admin"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:336
+#: ../../Zotlabs/Lib/Apps.php:337
msgid "Content Filter"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:339
+#: ../../Zotlabs/Lib/Apps.php:340
msgid "Remote Diagnostics"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:340
+#: ../../Zotlabs/Lib/Apps.php:341
msgid "Suggest Channels"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:342
+#: ../../Zotlabs/Lib/Apps.php:343
msgid "Channel Manager"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:343
+#: ../../Zotlabs/Lib/Apps.php:344
msgid "Stream"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:354
+#: ../../Zotlabs/Lib/Apps.php:355
msgid "Mail"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:355
+#: ../../Zotlabs/Lib/Apps.php:356
msgid "Chat"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:357
+#: ../../Zotlabs/Lib/Apps.php:358
msgid "Probe"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:358
+#: ../../Zotlabs/Lib/Apps.php:359
msgid "Suggest"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:359
+#: ../../Zotlabs/Lib/Apps.php:360
msgid "Random Channel"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:360
+#: ../../Zotlabs/Lib/Apps.php:361
msgid "Invite"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:361 ../../Zotlabs/Widget/Admin.php:31
+#: ../../Zotlabs/Lib/Apps.php:362 ../../Zotlabs/Widget/Admin.php:31
msgid "Features"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:363 ../../Zotlabs/Storage/Browser.php:410
+#: ../../Zotlabs/Lib/Apps.php:364 ../../Zotlabs/Storage/Browser.php:411
msgid "Post"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:368
+#: ../../Zotlabs/Lib/Apps.php:369
msgid "Notifications"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:369
+#: ../../Zotlabs/Lib/Apps.php:370
msgid "Order Apps"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:370
+#: ../../Zotlabs/Lib/Apps.php:371
msgid "CardDAV"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:371 ../../Zotlabs/Module/Sources.php:105
+#: ../../Zotlabs/Lib/Apps.php:372 ../../Zotlabs/Module/Sources.php:105
msgid "Channel Sources"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:372 ../../Zotlabs/Module/Tokens.php:288
+#: ../../Zotlabs/Lib/Apps.php:373 ../../Zotlabs/Module/Tokens.php:288
msgid "Guest Access"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:374
+#: ../../Zotlabs/Lib/Apps.php:375
msgid "OAuth Apps Manager"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:375
+#: ../../Zotlabs/Lib/Apps.php:376
msgid "OAuth2 Apps Manager"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:376
+#: ../../Zotlabs/Lib/Apps.php:377
msgid "PDL Editor"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:377 ../../Zotlabs/Module/Permcats.php:248
+#: ../../Zotlabs/Lib/Apps.php:378 ../../Zotlabs/Module/Permcats.php:248
msgid "Contact Roles"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:378 ../../Zotlabs/Widget/Notifications.php:154
-#: ../../Zotlabs/Module/Pubstream.php:108
+#: ../../Zotlabs/Lib/Apps.php:379 ../../Zotlabs/Widget/Notifications.php:154
+#: ../../Zotlabs/Module/Pubstream.php:109
msgid "Public Stream"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:379
+#: ../../Zotlabs/Lib/Apps.php:380
msgid "My Chatrooms"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:380
+#: ../../Zotlabs/Lib/Apps.php:381
msgid "Channel Export"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:561 ../../Zotlabs/Module/Oauth.php:53
+#: ../../Zotlabs/Lib/Apps.php:562 ../../Zotlabs/Module/Oauth.php:53
#: ../../Zotlabs/Module/Oauth.php:135 ../../Zotlabs/Module/Connedit.php:748
-#: ../../Zotlabs/Module/Admin/Addons.php:460 ../../Zotlabs/Module/Cdav.php:1044
+#: ../../Zotlabs/Module/Admin/Addons.php:461 ../../Zotlabs/Module/Cdav.php:1044
#: ../../Zotlabs/Module/Cdav.php:1384 ../../Zotlabs/Module/Oauth2.php:58
#: ../../Zotlabs/Module/Oauth2.php:142
msgid "Update"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:561 ../../Zotlabs/Module/Admin/Addons.php:429
+#: ../../Zotlabs/Lib/Apps.php:562 ../../Zotlabs/Module/Admin/Addons.php:430
msgid "Install"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:591 ../../Zotlabs/Lib/Apps.php:613
+#: ../../Zotlabs/Lib/Apps.php:592 ../../Zotlabs/Lib/Apps.php:614
msgid "Purchase"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:618
+#: ../../Zotlabs/Lib/Apps.php:619
msgid "Undelete"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:626
+#: ../../Zotlabs/Lib/Apps.php:627
msgid "Add to app-tray"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:627
+#: ../../Zotlabs/Lib/Apps.php:628
msgid "Remove from app-tray"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:628
+#: ../../Zotlabs/Lib/Apps.php:629
msgid "Pin to navbar"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:629
+#: ../../Zotlabs/Lib/Apps.php:630
msgid "Unpin from navbar"
msgstr ""
#: ../../Zotlabs/Lib/PermissionDescription.php:108
-#: ../../Zotlabs/Access/PermissionRoles.php:384
+#: ../../Zotlabs/Access/PermissionRoles.php:386
msgid "Public"
msgstr ""
@@ -7236,117 +7218,117 @@ msgctxt "permcat"
msgid "Default"
msgstr ""
-#: ../../Zotlabs/Lib/DB_Upgrade.php:67
+#: ../../Zotlabs/Lib/DB_Upgrade.php:68
msgid "Source code of failed update: "
msgstr ""
-#: ../../Zotlabs/Lib/DB_Upgrade.php:88
+#: ../../Zotlabs/Lib/DB_Upgrade.php:89
#, php-format
msgid "Update Error at %s"
msgstr ""
-#: ../../Zotlabs/Lib/DB_Upgrade.php:94
+#: ../../Zotlabs/Lib/DB_Upgrade.php:95
#, php-format
msgid "Update %s failed. See error logs."
msgstr ""
-#: ../../Zotlabs/Lib/Connect.php:46 ../../Zotlabs/Lib/Connect.php:147
+#: ../../Zotlabs/Lib/Connect.php:45 ../../Zotlabs/Lib/Connect.php:146
msgid "Channel is blocked on this site."
msgstr ""
-#: ../../Zotlabs/Lib/Connect.php:51
+#: ../../Zotlabs/Lib/Connect.php:50
msgid "Channel location missing."
msgstr ""
-#: ../../Zotlabs/Lib/Connect.php:105
+#: ../../Zotlabs/Lib/Connect.php:104
msgid "Remote channel or protocol unavailable."
msgstr ""
-#: ../../Zotlabs/Lib/Connect.php:141
+#: ../../Zotlabs/Lib/Connect.php:140
msgid "Channel discovery failed."
msgstr ""
-#: ../../Zotlabs/Lib/Connect.php:159
+#: ../../Zotlabs/Lib/Connect.php:158
msgid "Protocol disabled."
msgstr ""
-#: ../../Zotlabs/Lib/Connect.php:171
+#: ../../Zotlabs/Lib/Connect.php:170
msgid "Cannot connect to yourself."
msgstr ""
-#: ../../Zotlabs/Lib/Connect.php:276
+#: ../../Zotlabs/Lib/Connect.php:275
msgid "error saving data"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:111
+#: ../../Zotlabs/Lib/ThreadItem.php:110
msgid "Restricted message"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:118
+#: ../../Zotlabs/Lib/ThreadItem.php:117
msgid "Direct message"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:123
+#: ../../Zotlabs/Lib/ThreadItem.php:122
msgid "Public Policy"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:157
+#: ../../Zotlabs/Lib/ThreadItem.php:156
msgid "Privacy conflict. Discretion advised."
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:188 ../../Zotlabs/Storage/Browser.php:372
+#: ../../Zotlabs/Lib/ThreadItem.php:187 ../../Zotlabs/Storage/Browser.php:373
msgid "Admin Delete"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:191 ../../Zotlabs/Module/Filer.php:55
+#: ../../Zotlabs/Lib/ThreadItem.php:190 ../../Zotlabs/Module/Filer.php:55
msgid "Save to Folder"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:216 ../../Zotlabs/Widget/Pinned.php:75
+#: ../../Zotlabs/Lib/ThreadItem.php:215 ../../Zotlabs/Widget/Pinned.php:77
msgid "I will attend"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:216 ../../Zotlabs/Widget/Pinned.php:75
+#: ../../Zotlabs/Lib/ThreadItem.php:215 ../../Zotlabs/Widget/Pinned.php:77
msgid "I will not attend"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:216 ../../Zotlabs/Widget/Pinned.php:75
+#: ../../Zotlabs/Lib/ThreadItem.php:215 ../../Zotlabs/Widget/Pinned.php:77
msgid "I might attend"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:333 ../../Zotlabs/Module/Photos.php:1074
+#: ../../Zotlabs/Lib/ThreadItem.php:332 ../../Zotlabs/Module/Photos.php:1074
msgid "I like this (toggle)"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:334 ../../Zotlabs/Module/Photos.php:1075
+#: ../../Zotlabs/Lib/ThreadItem.php:333 ../../Zotlabs/Module/Photos.php:1075
msgid "I don't like this (toggle)"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:335
+#: ../../Zotlabs/Lib/ThreadItem.php:334
msgid "Reply on this comment"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:335
+#: ../../Zotlabs/Lib/ThreadItem.php:334
msgid "reply"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:335
+#: ../../Zotlabs/Lib/ThreadItem.php:334
msgid "Reply to"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:341 ../../Zotlabs/Widget/Pinned.php:93
+#: ../../Zotlabs/Lib/ThreadItem.php:340 ../../Zotlabs/Widget/Pinned.php:95
msgid "share"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:345
+#: ../../Zotlabs/Lib/ThreadItem.php:344
msgid "Repeat"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:345
+#: ../../Zotlabs/Lib/ThreadItem.php:344
msgid "repeat"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:356
+#: ../../Zotlabs/Lib/ThreadItem.php:355
msgid "Delivery Report"
msgstr ""
@@ -7371,7 +7353,7 @@ msgid "to"
msgstr ""
#: ../../Zotlabs/Lib/ThreadItem.php:435 ../../Zotlabs/Widget/Messages.php:146
-#: ../../Zotlabs/Widget/Messages.php:149 ../../Zotlabs/Widget/Pinned.php:121
+#: ../../Zotlabs/Widget/Messages.php:149 ../../Zotlabs/Widget/Pinned.php:123
msgid "via"
msgstr ""
@@ -7387,11 +7369,11 @@ msgstr ""
msgid "Attend"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:466 ../../Zotlabs/Widget/Pinned.php:135
+#: ../../Zotlabs/Lib/ThreadItem.php:466 ../../Zotlabs/Widget/Pinned.php:137
msgid "Attendance Options"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:468 ../../Zotlabs/Widget/Pinned.php:136
+#: ../../Zotlabs/Lib/ThreadItem.php:468 ../../Zotlabs/Widget/Pinned.php:138
msgid "Voting Options"
msgstr ""
@@ -7399,7 +7381,7 @@ msgstr ""
msgid "Go to previous comment"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:492 ../../Zotlabs/Widget/Pinned.php:148
+#: ../../Zotlabs/Lib/ThreadItem.php:492 ../../Zotlabs/Widget/Pinned.php:150
msgid "Pinned post"
msgstr ""
@@ -7440,58 +7422,58 @@ msgstr ""
msgid "Your website URL (optional)"
msgstr ""
-#: ../../Zotlabs/Lib/Libzot.php:687
+#: ../../Zotlabs/Lib/Libzot.php:688
msgid "Unable to verify channel signature"
msgstr ""
-#: ../../Zotlabs/Lib/Activity.php:2154
+#: ../../Zotlabs/Lib/Activity.php:2166
#, php-format
msgid "Likes %1$s's %2$s"
msgstr ""
-#: ../../Zotlabs/Lib/Activity.php:2157
+#: ../../Zotlabs/Lib/Activity.php:2169
#, php-format
msgid "Doesn't like %1$s's %2$s"
msgstr ""
-#: ../../Zotlabs/Lib/Activity.php:2163
+#: ../../Zotlabs/Lib/Activity.php:2175
#, php-format
msgid "Will attend %s's event"
msgstr ""
-#: ../../Zotlabs/Lib/Activity.php:2166
+#: ../../Zotlabs/Lib/Activity.php:2178
#, php-format
msgid "Will not attend %s's event"
msgstr ""
-#: ../../Zotlabs/Lib/Activity.php:2169
+#: ../../Zotlabs/Lib/Activity.php:2181
#, php-format
msgid "May attend %s's event"
msgstr ""
-#: ../../Zotlabs/Lib/Activity.php:2172
+#: ../../Zotlabs/Lib/Activity.php:2184
#, php-format
msgid "May not attend %s's event"
msgstr ""
-#: ../../Zotlabs/Lib/Libsync.php:823
+#: ../../Zotlabs/Lib/Libsync.php:824
#, php-format
msgid "Unable to verify site signature for %s"
msgstr ""
-#: ../../Zotlabs/Lib/Libzotdir.php:163
+#: ../../Zotlabs/Lib/Libzotdir.php:164
msgid "Directory Options"
msgstr ""
-#: ../../Zotlabs/Lib/Libzotdir.php:165
+#: ../../Zotlabs/Lib/Libzotdir.php:166
msgid "Safe Mode"
msgstr ""
-#: ../../Zotlabs/Lib/Libzotdir.php:166
+#: ../../Zotlabs/Lib/Libzotdir.php:167
msgid "Public Forums Only"
msgstr ""
-#: ../../Zotlabs/Lib/Libzotdir.php:168
+#: ../../Zotlabs/Lib/Libzotdir.php:169
msgid "This Website Only"
msgstr ""
@@ -7551,79 +7533,79 @@ msgstr ""
msgid "Select a privacy group"
msgstr ""
-#: ../../Zotlabs/Access/PermissionRoles.php:337
+#: ../../Zotlabs/Access/PermissionRoles.php:339
msgid "Social Networking"
msgstr ""
-#: ../../Zotlabs/Access/PermissionRoles.php:338
+#: ../../Zotlabs/Access/PermissionRoles.php:340
msgid "Social - Federation"
msgstr ""
-#: ../../Zotlabs/Access/PermissionRoles.php:339
+#: ../../Zotlabs/Access/PermissionRoles.php:341
msgid "Social - Mostly Public"
msgstr ""
-#: ../../Zotlabs/Access/PermissionRoles.php:340
+#: ../../Zotlabs/Access/PermissionRoles.php:342
msgid "Social - Restricted"
msgstr ""
-#: ../../Zotlabs/Access/PermissionRoles.php:341
+#: ../../Zotlabs/Access/PermissionRoles.php:343
msgid "Social - Private"
msgstr ""
-#: ../../Zotlabs/Access/PermissionRoles.php:344
+#: ../../Zotlabs/Access/PermissionRoles.php:346
msgid "Community Forum"
msgstr ""
-#: ../../Zotlabs/Access/PermissionRoles.php:345
+#: ../../Zotlabs/Access/PermissionRoles.php:347
msgid "Forum - Mostly Public"
msgstr ""
-#: ../../Zotlabs/Access/PermissionRoles.php:346
+#: ../../Zotlabs/Access/PermissionRoles.php:348
msgid "Forum - Restricted"
msgstr ""
-#: ../../Zotlabs/Access/PermissionRoles.php:347
+#: ../../Zotlabs/Access/PermissionRoles.php:349
msgid "Forum - Private"
msgstr ""
-#: ../../Zotlabs/Access/PermissionRoles.php:350
+#: ../../Zotlabs/Access/PermissionRoles.php:352
msgid "Feed Republish"
msgstr ""
-#: ../../Zotlabs/Access/PermissionRoles.php:351
+#: ../../Zotlabs/Access/PermissionRoles.php:353
msgid "Feed - Mostly Public"
msgstr ""
-#: ../../Zotlabs/Access/PermissionRoles.php:352
+#: ../../Zotlabs/Access/PermissionRoles.php:354
msgid "Feed - Restricted"
msgstr ""
-#: ../../Zotlabs/Access/PermissionRoles.php:355
+#: ../../Zotlabs/Access/PermissionRoles.php:357
msgid "Special Purpose"
msgstr ""
-#: ../../Zotlabs/Access/PermissionRoles.php:356
+#: ../../Zotlabs/Access/PermissionRoles.php:358
msgid "Special - Celebrity/Soapbox"
msgstr ""
-#: ../../Zotlabs/Access/PermissionRoles.php:357
+#: ../../Zotlabs/Access/PermissionRoles.php:359
msgid "Special - Group Repository"
msgstr ""
-#: ../../Zotlabs/Access/PermissionRoles.php:361
+#: ../../Zotlabs/Access/PermissionRoles.php:363
msgid "Custom/Expert Mode"
msgstr ""
-#: ../../Zotlabs/Access/PermissionRoles.php:385
+#: ../../Zotlabs/Access/PermissionRoles.php:387
msgid "Personal"
msgstr ""
-#: ../../Zotlabs/Access/PermissionRoles.php:386
+#: ../../Zotlabs/Access/PermissionRoles.php:388
msgid "Community forum"
msgstr ""
-#: ../../Zotlabs/Access/PermissionRoles.php:387
+#: ../../Zotlabs/Access/PermissionRoles.php:389
msgid "Custom"
msgstr ""
@@ -7715,15 +7697,15 @@ msgstr ""
msgid "Available Apps"
msgstr ""
-#: ../../Zotlabs/Widget/Rating.php:57
+#: ../../Zotlabs/Widget/Rating.php:59
msgid "Rating Tools"
msgstr ""
-#: ../../Zotlabs/Widget/Rating.php:61 ../../Zotlabs/Widget/Rating.php:63
+#: ../../Zotlabs/Widget/Rating.php:63 ../../Zotlabs/Widget/Rating.php:65
msgid "Rate Me"
msgstr ""
-#: ../../Zotlabs/Widget/Rating.php:66
+#: ../../Zotlabs/Widget/Rating.php:68
msgid "View Ratings"
msgstr ""
@@ -7865,68 +7847,68 @@ msgstr ""
msgid "Guest access"
msgstr ""
-#: ../../Zotlabs/Widget/Newmember.php:36
+#: ../../Zotlabs/Widget/Newmember.php:38
msgid "Profile Creation"
msgstr ""
-#: ../../Zotlabs/Widget/Newmember.php:38
+#: ../../Zotlabs/Widget/Newmember.php:40
msgid "Upload profile photo"
msgstr ""
-#: ../../Zotlabs/Widget/Newmember.php:39
+#: ../../Zotlabs/Widget/Newmember.php:41
msgid "Upload cover photo"
msgstr ""
-#: ../../Zotlabs/Widget/Newmember.php:43
+#: ../../Zotlabs/Widget/Newmember.php:45
msgid "Find and Connect with others"
msgstr ""
-#: ../../Zotlabs/Widget/Newmember.php:45
+#: ../../Zotlabs/Widget/Newmember.php:47
msgid "View the directory"
msgstr ""
-#: ../../Zotlabs/Widget/Newmember.php:46 ../../Zotlabs/Module/Go.php:38
+#: ../../Zotlabs/Widget/Newmember.php:48 ../../Zotlabs/Module/Go.php:39
msgid "View friend suggestions"
msgstr ""
-#: ../../Zotlabs/Widget/Newmember.php:47
+#: ../../Zotlabs/Widget/Newmember.php:49
msgid "Manage your connections"
msgstr ""
-#: ../../Zotlabs/Widget/Newmember.php:50
+#: ../../Zotlabs/Widget/Newmember.php:52
msgid "Communicate"
msgstr ""
-#: ../../Zotlabs/Widget/Newmember.php:52
+#: ../../Zotlabs/Widget/Newmember.php:54
msgid "View your channel homepage"
msgstr ""
-#: ../../Zotlabs/Widget/Newmember.php:53
+#: ../../Zotlabs/Widget/Newmember.php:55
msgid "View your network stream"
msgstr ""
-#: ../../Zotlabs/Widget/Newmember.php:59
+#: ../../Zotlabs/Widget/Newmember.php:61
msgid "Documentation"
msgstr ""
-#: ../../Zotlabs/Widget/Newmember.php:62
+#: ../../Zotlabs/Widget/Newmember.php:64
msgid "Missing Features?"
msgstr ""
-#: ../../Zotlabs/Widget/Newmember.php:64
+#: ../../Zotlabs/Widget/Newmember.php:66
msgid "Pin apps to navigation bar"
msgstr ""
-#: ../../Zotlabs/Widget/Newmember.php:65
+#: ../../Zotlabs/Widget/Newmember.php:67
msgid "Install more apps"
msgstr ""
-#: ../../Zotlabs/Widget/Newmember.php:76
+#: ../../Zotlabs/Widget/Newmember.php:78
msgid "View public stream"
msgstr ""
-#: ../../Zotlabs/Widget/Newmember.php:80
-#: ../../Zotlabs/Module/Settings/Display.php:201
+#: ../../Zotlabs/Widget/Newmember.php:82
+#: ../../Zotlabs/Module/Settings/Display.php:202
msgid "New Member Links"
msgstr ""
@@ -7987,24 +7969,24 @@ msgstr ""
#: ../../Zotlabs/Widget/Album.php:103 ../../Zotlabs/Widget/Portfolio.php:114
#: ../../Zotlabs/Widget/Cdav.php:152 ../../Zotlabs/Widget/Cdav.php:188
-#: ../../Zotlabs/Storage/Browser.php:546
-#: ../../Zotlabs/Module/Cover_photo.php:380
+#: ../../Zotlabs/Storage/Browser.php:547
+#: ../../Zotlabs/Module/Cover_photo.php:381
#: ../../Zotlabs/Module/Embedphotos.php:189
-#: ../../Zotlabs/Module/Profile_photo.php:546
+#: ../../Zotlabs/Module/Profile_photo.php:547
#: ../../Zotlabs/Module/Photos.php:681
msgid "Upload"
msgstr ""
-#: ../../Zotlabs/Widget/Pinned.php:93
+#: ../../Zotlabs/Widget/Pinned.php:95
msgid "Share This"
msgstr ""
-#: ../../Zotlabs/Widget/Pinned.php:116 ../../Zotlabs/Widget/Pinned.php:117
+#: ../../Zotlabs/Widget/Pinned.php:118 ../../Zotlabs/Widget/Pinned.php:119
#, php-format
msgid "View %s's profile - %s"
msgstr ""
-#: ../../Zotlabs/Widget/Pinned.php:150
+#: ../../Zotlabs/Widget/Pinned.php:152
msgid "Don't show"
msgstr ""
@@ -8148,7 +8130,7 @@ msgid "Stream Filters"
msgstr ""
#: ../../Zotlabs/Widget/Channel_activities.php:29
-#: ../../Zotlabs/Module/Go.php:27
+#: ../../Zotlabs/Module/Go.php:28
msgid "Welcome"
msgstr ""
@@ -8201,14 +8183,14 @@ msgstr ""
msgid "Refresh"
msgstr ""
-#: ../../Zotlabs/Widget/Admin.php:27 ../../Zotlabs/Module/Admin/Site.php:400
+#: ../../Zotlabs/Widget/Admin.php:27 ../../Zotlabs/Module/Admin/Site.php:401
msgid "Site"
msgstr ""
#: ../../Zotlabs/Widget/Admin.php:28
#: ../../Zotlabs/Module/Admin/Accounts.php:308
#: ../../Zotlabs/Module/Admin/Accounts.php:327
-#: ../../Zotlabs/Module/Admin.php:95
+#: ../../Zotlabs/Module/Admin.php:97
msgid "Accounts"
msgstr ""
@@ -8217,17 +8199,17 @@ msgid "Member registrations waiting for confirmation"
msgstr ""
#: ../../Zotlabs/Widget/Admin.php:30
-#: ../../Zotlabs/Module/Admin/Security.php:106
+#: ../../Zotlabs/Module/Admin/Security.php:107
msgid "Security"
msgstr ""
-#: ../../Zotlabs/Widget/Admin.php:32 ../../Zotlabs/Module/Admin/Addons.php:346
-#: ../../Zotlabs/Module/Admin/Addons.php:444
+#: ../../Zotlabs/Widget/Admin.php:32 ../../Zotlabs/Module/Admin/Addons.php:347
+#: ../../Zotlabs/Module/Admin/Addons.php:445
msgid "Addons"
msgstr ""
-#: ../../Zotlabs/Widget/Admin.php:33 ../../Zotlabs/Module/Admin/Themes.php:138
-#: ../../Zotlabs/Module/Admin/Themes.php:172
+#: ../../Zotlabs/Widget/Admin.php:33 ../../Zotlabs/Module/Admin/Themes.php:139
+#: ../../Zotlabs/Module/Admin/Themes.php:173
msgid "Themes"
msgstr ""
@@ -8239,7 +8221,7 @@ msgstr ""
msgid "Queueworker"
msgstr ""
-#: ../../Zotlabs/Widget/Admin.php:36 ../../Zotlabs/Module/Admin/Profs.php:168
+#: ../../Zotlabs/Widget/Admin.php:36 ../../Zotlabs/Module/Admin/Profs.php:169
msgid "Profile Fields"
msgstr ""
@@ -8248,7 +8230,7 @@ msgid "DB updates"
msgstr ""
#: ../../Zotlabs/Widget/Admin.php:54 ../../Zotlabs/Widget/Admin.php:64
-#: ../../Zotlabs/Module/Admin/Logs.php:83
+#: ../../Zotlabs/Module/Admin/Logs.php:84
msgid "Logs"
msgstr ""
@@ -8356,10 +8338,10 @@ msgid "Create new CalDAV calendar"
msgstr ""
#: ../../Zotlabs/Widget/Cdav.php:146 ../../Zotlabs/Widget/Cdav.php:184
-#: ../../Zotlabs/Storage/Browser.php:367 ../../Zotlabs/Storage/Browser.php:544
+#: ../../Zotlabs/Storage/Browser.php:368 ../../Zotlabs/Storage/Browser.php:545
#: ../../Zotlabs/Module/Webpages.php:249 ../../Zotlabs/Module/Connedit.php:747
#: ../../Zotlabs/Module/Layouts.php:183 ../../Zotlabs/Module/Menu.php:182
-#: ../../Zotlabs/Module/Blocks.php:157 ../../Zotlabs/Module/New_channel.php:189
+#: ../../Zotlabs/Module/Blocks.php:157 ../../Zotlabs/Module/New_channel.php:190
#: ../../Zotlabs/Module/Cdav.php:1050 ../../Zotlabs/Module/Cdav.php:1383
msgid "Create"
msgstr ""
@@ -8421,129 +8403,129 @@ msgstr ""
msgid "Privacy groups"
msgstr ""
-#: ../../Zotlabs/Storage/Browser.php:291
+#: ../../Zotlabs/Storage/Browser.php:292
msgid "Change filename to"
msgstr ""
-#: ../../Zotlabs/Storage/Browser.php:308 ../../Zotlabs/Storage/Browser.php:393
+#: ../../Zotlabs/Storage/Browser.php:309 ../../Zotlabs/Storage/Browser.php:394
msgid "Select a target location"
msgstr ""
-#: ../../Zotlabs/Storage/Browser.php:309 ../../Zotlabs/Storage/Browser.php:394
+#: ../../Zotlabs/Storage/Browser.php:310 ../../Zotlabs/Storage/Browser.php:395
msgid "Copy to target location"
msgstr ""
-#: ../../Zotlabs/Storage/Browser.php:310 ../../Zotlabs/Storage/Browser.php:392
+#: ../../Zotlabs/Storage/Browser.php:311 ../../Zotlabs/Storage/Browser.php:393
msgid "Set permissions for all files and sub folders"
msgstr ""
-#: ../../Zotlabs/Storage/Browser.php:311
+#: ../../Zotlabs/Storage/Browser.php:312
msgid "Notify your contacts about this file"
msgstr ""
-#: ../../Zotlabs/Storage/Browser.php:350
+#: ../../Zotlabs/Storage/Browser.php:351
msgid "File category"
msgstr ""
-#: ../../Zotlabs/Storage/Browser.php:364
+#: ../../Zotlabs/Storage/Browser.php:365
msgid "Total"
msgstr ""
-#: ../../Zotlabs/Storage/Browser.php:366
+#: ../../Zotlabs/Storage/Browser.php:367
msgid "Shared"
msgstr ""
-#: ../../Zotlabs/Storage/Browser.php:368
+#: ../../Zotlabs/Storage/Browser.php:369
msgid "Add Files"
msgstr ""
-#: ../../Zotlabs/Storage/Browser.php:383
+#: ../../Zotlabs/Storage/Browser.php:384
#: ../../Zotlabs/Module/Sharedwithme.php:110
msgid "Last Modified"
msgstr ""
-#: ../../Zotlabs/Storage/Browser.php:384
+#: ../../Zotlabs/Storage/Browser.php:385
msgid "parent"
msgstr ""
-#: ../../Zotlabs/Storage/Browser.php:389
+#: ../../Zotlabs/Storage/Browser.php:390
#: ../../Zotlabs/Module/Filestorage.php:206
msgid "Copy/paste this code to attach file to a post"
msgstr ""
-#: ../../Zotlabs/Storage/Browser.php:390
+#: ../../Zotlabs/Storage/Browser.php:391
#: ../../Zotlabs/Module/Filestorage.php:207
msgid "Copy/paste this URL to link file from a web page"
msgstr ""
-#: ../../Zotlabs/Storage/Browser.php:402
+#: ../../Zotlabs/Storage/Browser.php:403
msgid "Select All"
msgstr ""
-#: ../../Zotlabs/Storage/Browser.php:403
+#: ../../Zotlabs/Storage/Browser.php:404
msgid "Bulk Actions"
msgstr ""
-#: ../../Zotlabs/Storage/Browser.php:404
+#: ../../Zotlabs/Storage/Browser.php:405
msgid "Adjust Permissions"
msgstr ""
-#: ../../Zotlabs/Storage/Browser.php:405
+#: ../../Zotlabs/Storage/Browser.php:406
msgid "Move or Copy"
msgstr ""
-#: ../../Zotlabs/Storage/Browser.php:408
+#: ../../Zotlabs/Storage/Browser.php:409
msgid "Info"
msgstr ""
-#: ../../Zotlabs/Storage/Browser.php:409
+#: ../../Zotlabs/Storage/Browser.php:410
msgid "Rename"
msgstr ""
-#: ../../Zotlabs/Storage/Browser.php:411
+#: ../../Zotlabs/Storage/Browser.php:412
msgid "Attachment BBcode"
msgstr ""
-#: ../../Zotlabs/Storage/Browser.php:412
+#: ../../Zotlabs/Storage/Browser.php:413
msgid "Embed BBcode"
msgstr ""
-#: ../../Zotlabs/Storage/Browser.php:413
+#: ../../Zotlabs/Storage/Browser.php:414
msgid "Link BBcode"
msgstr ""
-#: ../../Zotlabs/Storage/Browser.php:486
+#: ../../Zotlabs/Storage/Browser.php:487
#, php-format
msgid "You are using %1$s of your available file storage."
msgstr ""
-#: ../../Zotlabs/Storage/Browser.php:491
+#: ../../Zotlabs/Storage/Browser.php:492
#, php-format
msgid "You are using %1$s of %2$s available file storage. (%3$s&#37;)"
msgstr ""
-#: ../../Zotlabs/Storage/Browser.php:502
+#: ../../Zotlabs/Storage/Browser.php:503
msgid "WARNING:"
msgstr ""
-#: ../../Zotlabs/Storage/Browser.php:543
+#: ../../Zotlabs/Storage/Browser.php:544
msgid "Create new folder"
msgstr ""
-#: ../../Zotlabs/Storage/Browser.php:545
+#: ../../Zotlabs/Storage/Browser.php:546
msgid "Upload file"
msgstr ""
-#: ../../Zotlabs/Storage/Browser.php:557
+#: ../../Zotlabs/Storage/Browser.php:558
msgid "Drop files here to immediately upload"
msgstr ""
-#: ../../Zotlabs/Storage/Browser.php:558
+#: ../../Zotlabs/Storage/Browser.php:559
#: ../../Zotlabs/Module/Filestorage.php:211
msgid "Show in your contacts shared folder"
msgstr ""
-#: ../../Zotlabs/Storage/Browser.php:560
+#: ../../Zotlabs/Storage/Browser.php:561
msgid ""
"You can select files via the upload button or drop them right here or into "
"an existing folder."
@@ -8563,147 +8545,152 @@ msgid ""
"non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
msgstr ""
-#: ../../Zotlabs/Module/Import_progress.php:36
+#: ../../Zotlabs/Module/Import_progress.php:40
msgid "Item sync completed!"
msgstr ""
-#: ../../Zotlabs/Module/Import_progress.php:51
+#: ../../Zotlabs/Module/Import_progress.php:62
+#: ../../Zotlabs/Module/Import_progress.php:111
+msgid "Import host does not seem to be online or compatible"
+msgstr ""
+
+#: ../../Zotlabs/Module/Import_progress.php:73
msgid "Item sync completed but no items were found!"
msgstr ""
-#: ../../Zotlabs/Module/Import_progress.php:68
+#: ../../Zotlabs/Module/Import_progress.php:90
msgid "File sync completed!"
msgstr ""
-#: ../../Zotlabs/Module/Import_progress.php:83
+#: ../../Zotlabs/Module/Import_progress.php:122
msgid "File sync completed but no files were found!"
msgstr ""
-#: ../../Zotlabs/Module/Import_progress.php:98
+#: ../../Zotlabs/Module/Import_progress.php:137
msgid "Channel clone status"
msgstr ""
-#: ../../Zotlabs/Module/Import_progress.php:99
+#: ../../Zotlabs/Module/Import_progress.php:138
msgid "Item sync status"
msgstr ""
-#: ../../Zotlabs/Module/Import_progress.php:100
+#: ../../Zotlabs/Module/Import_progress.php:139
msgid "File sync status"
msgstr ""
-#: ../../Zotlabs/Module/Import_progress.php:107
+#: ../../Zotlabs/Module/Import_progress.php:146
msgid "Channel cloning completed!"
msgstr ""
-#: ../../Zotlabs/Module/Import_progress.php:108
+#: ../../Zotlabs/Module/Import_progress.php:147
msgid "Resume"
msgstr ""
-#: ../../Zotlabs/Module/Import_progress.php:109
+#: ../../Zotlabs/Module/Import_progress.php:148
msgid "Only resume if sync stalled!"
msgstr ""
-#: ../../Zotlabs/Module/Display.php:26 ../../Zotlabs/Module/Search.php:23
+#: ../../Zotlabs/Module/Display.php:27 ../../Zotlabs/Module/Search.php:24
#: ../../Zotlabs/Module/Directory.php:72 ../../Zotlabs/Module/Directory.php:77
#: ../../Zotlabs/Module/Viewconnections.php:23
#: ../../Zotlabs/Module/Photos.php:511
msgid "Public access denied."
msgstr ""
-#: ../../Zotlabs/Module/Display.php:52 ../../Zotlabs/Module/Oep.php:82
-#: ../../Zotlabs/Module/Pubstream.php:54 ../../Zotlabs/Module/Channel.php:194
+#: ../../Zotlabs/Module/Display.php:53 ../../Zotlabs/Module/Oep.php:82
+#: ../../Zotlabs/Module/Pubstream.php:55 ../../Zotlabs/Module/Channel.php:195
msgid "Malformed message id."
msgstr ""
-#: ../../Zotlabs/Module/Display.php:94 ../../Zotlabs/Module/Network.php:213
-#: ../../Zotlabs/Module/Hq.php:108 ../../Zotlabs/Module/Pubstream.php:97
-#: ../../Zotlabs/Module/Channel.php:278 ../../Zotlabs/Module/Rpost.php:210
+#: ../../Zotlabs/Module/Display.php:95 ../../Zotlabs/Module/Network.php:213
+#: ../../Zotlabs/Module/Hq.php:99 ../../Zotlabs/Module/Pubstream.php:98
+#: ../../Zotlabs/Module/Channel.php:279 ../../Zotlabs/Module/Rpost.php:111
msgid "Reset form"
msgstr ""
-#: ../../Zotlabs/Module/Display.php:319 ../../Zotlabs/Module/Channel.php:500
+#: ../../Zotlabs/Module/Display.php:320 ../../Zotlabs/Module/Channel.php:501
msgid ""
"You must enable javascript for your browser to be able to view this content."
msgstr ""
-#: ../../Zotlabs/Module/Display.php:339
+#: ../../Zotlabs/Module/Display.php:340
msgid "Article"
msgstr ""
-#: ../../Zotlabs/Module/Display.php:383
+#: ../../Zotlabs/Module/Display.php:384
msgid "Item has been removed."
msgstr ""
-#: ../../Zotlabs/Module/Cover_photo.php:85
-#: ../../Zotlabs/Module/Profile_photo.php:128
+#: ../../Zotlabs/Module/Cover_photo.php:86
+#: ../../Zotlabs/Module/Profile_photo.php:129
msgid "Image uploaded but image cropping failed."
msgstr ""
-#: ../../Zotlabs/Module/Cover_photo.php:194
-#: ../../Zotlabs/Module/Cover_photo.php:251
+#: ../../Zotlabs/Module/Cover_photo.php:195
+#: ../../Zotlabs/Module/Cover_photo.php:252
msgid "Cover Photos"
msgstr ""
-#: ../../Zotlabs/Module/Cover_photo.php:210
-#: ../../Zotlabs/Module/Profile_photo.php:184
+#: ../../Zotlabs/Module/Cover_photo.php:211
+#: ../../Zotlabs/Module/Profile_photo.php:185
msgid "Image resize failed."
msgstr ""
-#: ../../Zotlabs/Module/Cover_photo.php:262
-#: ../../Zotlabs/Module/Profile_photo.php:349
+#: ../../Zotlabs/Module/Cover_photo.php:263
+#: ../../Zotlabs/Module/Profile_photo.php:350
msgid "Image upload failed."
msgstr ""
-#: ../../Zotlabs/Module/Cover_photo.php:279
-#: ../../Zotlabs/Module/Profile_photo.php:369
+#: ../../Zotlabs/Module/Cover_photo.php:280
+#: ../../Zotlabs/Module/Profile_photo.php:370
msgid "Unable to process image."
msgstr ""
-#: ../../Zotlabs/Module/Cover_photo.php:324
-#: ../../Zotlabs/Module/Cover_photo.php:339
-#: ../../Zotlabs/Module/Profile_photo.php:431
-#: ../../Zotlabs/Module/Profile_photo.php:496
+#: ../../Zotlabs/Module/Cover_photo.php:325
+#: ../../Zotlabs/Module/Cover_photo.php:340
+#: ../../Zotlabs/Module/Profile_photo.php:432
+#: ../../Zotlabs/Module/Profile_photo.php:497
msgid "Photo not available."
msgstr ""
-#: ../../Zotlabs/Module/Cover_photo.php:375
+#: ../../Zotlabs/Module/Cover_photo.php:376
msgid "Your cover photo may be visible to anybody on the internet"
msgstr ""
-#: ../../Zotlabs/Module/Cover_photo.php:377
+#: ../../Zotlabs/Module/Cover_photo.php:378
msgid "Upload File:"
msgstr ""
-#: ../../Zotlabs/Module/Cover_photo.php:378
+#: ../../Zotlabs/Module/Cover_photo.php:379
msgid "Select a profile:"
msgstr ""
-#: ../../Zotlabs/Module/Cover_photo.php:379
+#: ../../Zotlabs/Module/Cover_photo.php:380
msgid "Change Cover Photo"
msgstr ""
-#: ../../Zotlabs/Module/Cover_photo.php:383
#: ../../Zotlabs/Module/Cover_photo.php:384
-#: ../../Zotlabs/Module/Profile_photo.php:550
+#: ../../Zotlabs/Module/Cover_photo.php:385
#: ../../Zotlabs/Module/Profile_photo.php:551
+#: ../../Zotlabs/Module/Profile_photo.php:552
msgid "Use a photo from your albums"
msgstr ""
-#: ../../Zotlabs/Module/Cover_photo.php:395
+#: ../../Zotlabs/Module/Cover_photo.php:396
msgid "Select existing photo"
msgstr ""
-#: ../../Zotlabs/Module/Cover_photo.php:412
-#: ../../Zotlabs/Module/Profile_photo.php:580
+#: ../../Zotlabs/Module/Cover_photo.php:413
+#: ../../Zotlabs/Module/Profile_photo.php:581
msgid "Crop Image"
msgstr ""
-#: ../../Zotlabs/Module/Cover_photo.php:413
-#: ../../Zotlabs/Module/Profile_photo.php:581
+#: ../../Zotlabs/Module/Cover_photo.php:414
+#: ../../Zotlabs/Module/Profile_photo.php:582
msgid "Please adjust the image cropping for optimum viewing."
msgstr ""
-#: ../../Zotlabs/Module/Cover_photo.php:415
+#: ../../Zotlabs/Module/Cover_photo.php:416
msgid "Done Editing"
msgstr ""
@@ -8715,11 +8702,11 @@ msgstr ""
msgid "Edit Webpage"
msgstr ""
-#: ../../Zotlabs/Module/Sse_bs.php:626
+#: ../../Zotlabs/Module/Sse_bs.php:631
msgid "Private forum"
msgstr ""
-#: ../../Zotlabs/Module/Sse_bs.php:626
+#: ../../Zotlabs/Module/Sse_bs.php:631
msgid "Public forum"
msgstr ""
@@ -8830,7 +8817,7 @@ msgstr ""
msgid "Icon url"
msgstr ""
-#: ../../Zotlabs/Module/Oauth.php:115 ../../Zotlabs/Module/Register.php:498
+#: ../../Zotlabs/Module/Oauth.php:115 ../../Zotlabs/Module/Register.php:501
#: ../../Zotlabs/Module/Sources.php:121 ../../Zotlabs/Module/Sources.php:156
msgid "Optional"
msgstr ""
@@ -8863,7 +8850,7 @@ msgstr ""
msgid "No such channel"
msgstr ""
-#: ../../Zotlabs/Module/Network.php:172 ../../Zotlabs/Module/Channel.php:245
+#: ../../Zotlabs/Module/Network.php:172 ../../Zotlabs/Module/Channel.php:246
msgid "Search Results For:"
msgstr ""
@@ -8968,7 +8955,7 @@ msgid ""
msgstr ""
#: ../../Zotlabs/Module/Removeme.php:60 ../../Zotlabs/Module/Removeme.php:64
-#: ../../Zotlabs/Module/Settings/Channel.php:282
+#: ../../Zotlabs/Module/Settings/Channel.php:283
msgid "Remove Channel"
msgstr ""
@@ -9005,12 +8992,12 @@ msgid "Use this form to import existing posts and content from an export file."
msgstr ""
#: ../../Zotlabs/Module/Import_items.php:123
-#: ../../Zotlabs/Module/Import.php:594
+#: ../../Zotlabs/Module/Import.php:599
msgid "File to Upload"
msgstr ""
#: ../../Zotlabs/Module/Import_items.php:136
-#: ../../Zotlabs/Module/Import.php:107
+#: ../../Zotlabs/Module/Import.php:108
msgid "Imported file is empty."
msgstr ""
@@ -9042,7 +9029,7 @@ msgstr ""
msgid "Webpages import completed"
msgstr ""
-#: ../../Zotlabs/Module/Regdir.php:52 ../../Zotlabs/Module/Dirsearch.php:23
+#: ../../Zotlabs/Module/Regdir.php:53 ../../Zotlabs/Module/Dirsearch.php:24
msgid "This site is not a directory server"
msgstr ""
@@ -9156,7 +9143,7 @@ msgid "This action is permanent and can not be undone!"
msgstr ""
#: ../../Zotlabs/Module/Removeaccount.php:61
-#: ../../Zotlabs/Module/Settings/Account.php:111
+#: ../../Zotlabs/Module/Settings/Account.php:113
msgid "Remove Account"
msgstr ""
@@ -9406,15 +9393,15 @@ msgstr ""
#: ../../Zotlabs/Module/Contactedit.php:409
#: ../../Zotlabs/Module/Connedit.php:706
-#: ../../Zotlabs/Module/Settings/Channel.php:286
+#: ../../Zotlabs/Module/Settings/Channel.php:287
msgid "Only import posts with this text"
msgstr ""
#: ../../Zotlabs/Module/Contactedit.php:409
#: ../../Zotlabs/Module/Contactedit.php:410
#: ../../Zotlabs/Module/Connedit.php:706 ../../Zotlabs/Module/Connedit.php:707
-#: ../../Zotlabs/Module/Admin/Site.php:500
#: ../../Zotlabs/Module/Admin/Site.php:501
+#: ../../Zotlabs/Module/Admin/Site.php:502
msgid ""
"words one per line or #tags or /patterns/ or lang=xx, leave blank to import "
"all posts"
@@ -9422,7 +9409,7 @@ msgstr ""
#: ../../Zotlabs/Module/Contactedit.php:410
#: ../../Zotlabs/Module/Connedit.php:707
-#: ../../Zotlabs/Module/Settings/Channel.php:285
+#: ../../Zotlabs/Module/Settings/Channel.php:286
msgid "Do not import posts with this text"
msgstr ""
@@ -9608,146 +9595,146 @@ msgstr ""
msgid "Delete this connection"
msgstr ""
-#: ../../Zotlabs/Module/Search.php:250
+#: ../../Zotlabs/Module/Search.php:251
#, php-format
msgid "Items tagged with: %s"
msgstr ""
-#: ../../Zotlabs/Module/Search.php:252
+#: ../../Zotlabs/Module/Search.php:253
#, php-format
msgid "Search results for: %s"
msgstr ""
-#: ../../Zotlabs/Module/Register.php:112
+#: ../../Zotlabs/Module/Register.php:113
msgid "Email address required"
msgstr ""
-#: ../../Zotlabs/Module/Register.php:156
+#: ../../Zotlabs/Module/Register.php:157
msgid "No password provided"
msgstr ""
-#: ../../Zotlabs/Module/Register.php:179
+#: ../../Zotlabs/Module/Register.php:180
msgid "Terms of Service not accepted"
msgstr ""
-#: ../../Zotlabs/Module/Register.php:241
+#: ../../Zotlabs/Module/Register.php:242
msgid "Invitation code succesfully applied"
msgstr ""
-#: ../../Zotlabs/Module/Register.php:261
+#: ../../Zotlabs/Module/Register.php:262
msgid "Invitation not in time or too late"
msgstr ""
-#: ../../Zotlabs/Module/Register.php:267
+#: ../../Zotlabs/Module/Register.php:268
msgid "Invitation email failed"
msgstr ""
-#: ../../Zotlabs/Module/Register.php:275
+#: ../../Zotlabs/Module/Register.php:276
msgid "Invitation code failed"
msgstr ""
-#: ../../Zotlabs/Module/Register.php:282
+#: ../../Zotlabs/Module/Register.php:283
msgid "Invitations are not available"
msgstr ""
-#: ../../Zotlabs/Module/Register.php:292
+#: ../../Zotlabs/Module/Register.php:293
msgid "Registration on this hub is by invitation only"
msgstr ""
-#: ../../Zotlabs/Module/Register.php:399
+#: ../../Zotlabs/Module/Register.php:400
msgid "New register request"
msgstr ""
-#: ../../Zotlabs/Module/Register.php:417
+#: ../../Zotlabs/Module/Register.php:418
msgid "Error creating dId A"
msgstr ""
-#: ../../Zotlabs/Module/Register.php:435
+#: ../../Zotlabs/Module/Register.php:437
msgid "Registration on this hub is disabled."
msgstr ""
-#: ../../Zotlabs/Module/Register.php:444
+#: ../../Zotlabs/Module/Register.php:446
+msgid "Why do you want to join this hub?"
+msgstr ""
+
+#: ../../Zotlabs/Module/Register.php:446
+msgid "This will help to review your registration"
+msgstr ""
+
+#: ../../Zotlabs/Module/Register.php:447
msgid "Registration on this hub is by approval only."
msgstr ""
-#: ../../Zotlabs/Module/Register.php:445
+#: ../../Zotlabs/Module/Register.php:448
msgid "Register at another affiliated hub in case when prefered"
msgstr ""
-#: ../../Zotlabs/Module/Register.php:458
+#: ../../Zotlabs/Module/Register.php:461
msgid "Registration on this hub is by invitation only."
msgstr ""
-#: ../../Zotlabs/Module/Register.php:459
+#: ../../Zotlabs/Module/Register.php:462
msgid "Register at another affiliated hub"
msgstr ""
-#: ../../Zotlabs/Module/Register.php:473 ../../Zotlabs/Module/Siteinfo.php:28
+#: ../../Zotlabs/Module/Register.php:476 ../../Zotlabs/Module/Siteinfo.php:29
msgid "Terms of Service"
msgstr ""
-#: ../../Zotlabs/Module/Register.php:479
+#: ../../Zotlabs/Module/Register.php:482
#, php-format
msgid "I accept the %s for this website"
msgstr ""
-#: ../../Zotlabs/Module/Register.php:486
+#: ../../Zotlabs/Module/Register.php:489
#, php-format
msgid "I am over %s years of age and accept the %s for this website"
msgstr ""
-#: ../../Zotlabs/Module/Register.php:496
+#: ../../Zotlabs/Module/Register.php:499
msgid "Your email address"
msgstr ""
-#: ../../Zotlabs/Module/Register.php:503
+#: ../../Zotlabs/Module/Register.php:506
msgid "Choose a password"
msgstr ""
-#: ../../Zotlabs/Module/Register.php:504
+#: ../../Zotlabs/Module/Register.php:507
msgid "Please re-enter your password"
msgstr ""
-#: ../../Zotlabs/Module/Register.php:506
+#: ../../Zotlabs/Module/Register.php:509
msgid "Please enter your invitation code"
msgstr ""
-#: ../../Zotlabs/Module/Register.php:508
+#: ../../Zotlabs/Module/Register.php:511
msgid "Your name"
msgstr ""
-#: ../../Zotlabs/Module/Register.php:508
+#: ../../Zotlabs/Module/Register.php:511
msgid "Real name is preferred"
msgstr ""
-#: ../../Zotlabs/Module/Register.php:510
-#: ../../Zotlabs/Module/New_channel.php:177
+#: ../../Zotlabs/Module/Register.php:513
+#: ../../Zotlabs/Module/New_channel.php:178
msgid "Choose a short nickname"
msgstr ""
-#: ../../Zotlabs/Module/Register.php:510
+#: ../../Zotlabs/Module/Register.php:513
msgid ""
"Your nickname will be used to create an easy to remember channel address"
msgstr ""
-#: ../../Zotlabs/Module/Register.php:514
-msgid "Why do you want to join this hub?"
-msgstr ""
-
-#: ../../Zotlabs/Module/Register.php:514
-msgid "This will help to review your registration"
-msgstr ""
-
-#: ../../Zotlabs/Module/Register.php:520
-#: ../../Zotlabs/Module/Admin/Site.php:402
+#: ../../Zotlabs/Module/Register.php:521
+#: ../../Zotlabs/Module/Admin/Site.php:403
msgid "Registration"
msgstr ""
-#: ../../Zotlabs/Module/Register.php:528
+#: ../../Zotlabs/Module/Register.php:529
msgid "I have an invite code"
msgstr ""
-#: ../../Zotlabs/Module/Register.php:575
+#: ../../Zotlabs/Module/Register.php:576
msgid ""
"This site has exceeded the number of allowed daily account registrations."
msgstr ""
@@ -9835,24 +9822,24 @@ msgstr ""
msgid "Duplicate post suppressed."
msgstr ""
-#: ../../Zotlabs/Module/Item.php:1343
+#: ../../Zotlabs/Module/Item.php:1348
msgid "System error. Post not saved."
msgstr ""
-#: ../../Zotlabs/Module/Item.php:1377
+#: ../../Zotlabs/Module/Item.php:1382
msgid "Your comment is awaiting approval."
msgstr ""
-#: ../../Zotlabs/Module/Item.php:1514
+#: ../../Zotlabs/Module/Item.php:1519
msgid "Unable to obtain post information from database."
msgstr ""
-#: ../../Zotlabs/Module/Item.php:1521
+#: ../../Zotlabs/Module/Item.php:1526
#, php-format
msgid "You have reached your limit of %1$.0f top level posts."
msgstr ""
-#: ../../Zotlabs/Module/Item.php:1528
+#: ../../Zotlabs/Module/Item.php:1533
#, php-format
msgid "You have reached your limit of %1$.0f webpages."
msgstr ""
@@ -10041,8 +10028,8 @@ msgid "Website"
msgstr ""
#: ../../Zotlabs/Module/Connedit.php:739 ../../Zotlabs/Module/Locs.php:122
-#: ../../Zotlabs/Module/Admin/Channels.php:160
-#: ../../Zotlabs/Module/Profiles.php:468 ../../Zotlabs/Module/Cdav.php:1375
+#: ../../Zotlabs/Module/Admin/Channels.php:182
+#: ../../Zotlabs/Module/Profiles.php:469 ../../Zotlabs/Module/Cdav.php:1375
msgid "Address"
msgstr ""
@@ -10082,7 +10069,7 @@ msgstr ""
msgid "ZIP Code"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:757 ../../Zotlabs/Module/Profiles.php:769
+#: ../../Zotlabs/Module/Connedit.php:757 ../../Zotlabs/Module/Profiles.php:772
#: ../../Zotlabs/Module/Cdav.php:1393
msgid "Country"
msgstr ""
@@ -10224,35 +10211,35 @@ msgstr ""
msgid "No entries (some entries may be hidden)."
msgstr ""
-#: ../../Zotlabs/Module/Profile_photo.php:543
+#: ../../Zotlabs/Module/Profile_photo.php:544
msgid ""
"This profile photo will be visible to anybody on the internet and may be "
"distributed to other websites."
msgstr ""
-#: ../../Zotlabs/Module/Profile_photo.php:543
+#: ../../Zotlabs/Module/Profile_photo.php:544
msgid ""
"This profile photo will be visible only to channels with permission to view "
"this profile."
msgstr ""
-#: ../../Zotlabs/Module/Profile_photo.php:545
+#: ../../Zotlabs/Module/Profile_photo.php:546
msgid "Use Photo for Profile"
msgstr ""
-#: ../../Zotlabs/Module/Profile_photo.php:545
+#: ../../Zotlabs/Module/Profile_photo.php:546
msgid "Change Profile Photo"
msgstr ""
-#: ../../Zotlabs/Module/Profile_photo.php:547
+#: ../../Zotlabs/Module/Profile_photo.php:548
msgid "Reset to default"
msgstr ""
-#: ../../Zotlabs/Module/Profile_photo.php:561
+#: ../../Zotlabs/Module/Profile_photo.php:562
msgid "Select existing"
msgstr ""
-#: ../../Zotlabs/Module/Profile_photo.php:583
+#: ../../Zotlabs/Module/Profile_photo.php:584
msgid "Done editing"
msgstr ""
@@ -10287,19 +10274,19 @@ msgstr ""
msgid "View Connections"
msgstr ""
-#: ../../Zotlabs/Module/Api.php:74 ../../Zotlabs/Module/Api.php:95
+#: ../../Zotlabs/Module/Api.php:76 ../../Zotlabs/Module/Api.php:97
msgid "Authorize application connection"
msgstr ""
-#: ../../Zotlabs/Module/Api.php:75
+#: ../../Zotlabs/Module/Api.php:77
msgid "Return to your app and insert this Security Code:"
msgstr ""
-#: ../../Zotlabs/Module/Api.php:85
+#: ../../Zotlabs/Module/Api.php:87
msgid "Please login to continue."
msgstr ""
-#: ../../Zotlabs/Module/Api.php:97
+#: ../../Zotlabs/Module/Api.php:99
msgid ""
"Do you want to authorize this application to access your posts and contacts, "
"and/or create new posts for you?"
@@ -10321,7 +10308,7 @@ msgstr ""
msgid "The main page content can not be edited!"
msgstr ""
-#: ../../Zotlabs/Module/Home.php:104
+#: ../../Zotlabs/Module/Home.php:105
#, php-format
msgid "Welcome to %s"
msgstr ""
@@ -10419,11 +10406,11 @@ msgstr ""
msgid "Use this form to drop the location if the hub is no longer operating."
msgstr ""
-#: ../../Zotlabs/Module/Pubsites.php:26
+#: ../../Zotlabs/Module/Pubsites.php:27
msgid "Public Hubs"
msgstr ""
-#: ../../Zotlabs/Module/Pubsites.php:29
+#: ../../Zotlabs/Module/Pubsites.php:30
msgid ""
"The listed hubs allow public registration for the $Projectname network. All "
"hubs in the network are interlinked so membership on any of them conveys "
@@ -10432,31 +10419,31 @@ msgid ""
"additional details."
msgstr ""
-#: ../../Zotlabs/Module/Pubsites.php:35
+#: ../../Zotlabs/Module/Pubsites.php:36
msgid "Hub URL"
msgstr ""
-#: ../../Zotlabs/Module/Pubsites.php:35
+#: ../../Zotlabs/Module/Pubsites.php:36
msgid "Access Type"
msgstr ""
-#: ../../Zotlabs/Module/Pubsites.php:35
+#: ../../Zotlabs/Module/Pubsites.php:36
msgid "Registration Policy"
msgstr ""
-#: ../../Zotlabs/Module/Pubsites.php:35
+#: ../../Zotlabs/Module/Pubsites.php:36
msgid "Stats"
msgstr ""
-#: ../../Zotlabs/Module/Pubsites.php:35
+#: ../../Zotlabs/Module/Pubsites.php:36
msgid "Software"
msgstr ""
-#: ../../Zotlabs/Module/Pubsites.php:37
+#: ../../Zotlabs/Module/Pubsites.php:38
msgid "Ratings"
msgstr ""
-#: ../../Zotlabs/Module/Pubsites.php:51
+#: ../../Zotlabs/Module/Pubsites.php:52
msgid "Rate"
msgstr ""
@@ -10612,15 +10599,15 @@ msgid "Expired"
msgstr ""
#: ../../Zotlabs/Module/Admin/Accounts.php:307
-#: ../../Zotlabs/Module/Admin/Themes.php:137
-#: ../../Zotlabs/Module/Admin/Themes.php:171
-#: ../../Zotlabs/Module/Admin/Addons.php:345
-#: ../../Zotlabs/Module/Admin/Addons.php:443
-#: ../../Zotlabs/Module/Admin/Channels.php:145
-#: ../../Zotlabs/Module/Admin/Logs.php:82
-#: ../../Zotlabs/Module/Admin/Site.php:397
-#: ../../Zotlabs/Module/Admin/Security.php:105
-#: ../../Zotlabs/Module/Admin.php:140
+#: ../../Zotlabs/Module/Admin/Themes.php:138
+#: ../../Zotlabs/Module/Admin/Themes.php:172
+#: ../../Zotlabs/Module/Admin/Addons.php:346
+#: ../../Zotlabs/Module/Admin/Addons.php:444
+#: ../../Zotlabs/Module/Admin/Channels.php:167
+#: ../../Zotlabs/Module/Admin/Logs.php:83
+#: ../../Zotlabs/Module/Admin/Site.php:398
+#: ../../Zotlabs/Module/Admin/Security.php:106
+#: ../../Zotlabs/Module/Admin.php:142
msgid "Administration"
msgstr ""
@@ -10717,155 +10704,155 @@ msgstr ""
msgid "Message"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Queueworker.php:65
+#: ../../Zotlabs/Module/Admin/Queueworker.php:66
msgid "Max queueworker threads"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Queueworker.php:67
+#: ../../Zotlabs/Module/Admin/Queueworker.php:68
msgid "Minimum 4, default 4"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Queueworker.php:77
+#: ../../Zotlabs/Module/Admin/Queueworker.php:78
msgid "Assume workers dead after"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Queueworker.php:79
+#: ../../Zotlabs/Module/Admin/Queueworker.php:80
msgid "Minimum 120, default 300 seconds"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Queueworker.php:91
+#: ../../Zotlabs/Module/Admin/Queueworker.php:92
msgid "Pause before starting next task"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Queueworker.php:93
+#: ../../Zotlabs/Module/Admin/Queueworker.php:94
msgid "Minimum 100, default 100 microseconds"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Queueworker.php:102
+#: ../../Zotlabs/Module/Admin/Queueworker.php:103
msgid "Automatically adjust pause before starting next task"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Queueworker.php:111
+#: ../../Zotlabs/Module/Admin/Queueworker.php:112
msgid "Queueworker Settings"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Themes.php:26
+#: ../../Zotlabs/Module/Admin/Themes.php:27
msgid "Theme settings updated."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Themes.php:61
+#: ../../Zotlabs/Module/Admin/Themes.php:62
msgid "No themes found."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Themes.php:110
-#: ../../Zotlabs/Module/Admin/Addons.php:314
+#: ../../Zotlabs/Module/Admin/Themes.php:111
+#: ../../Zotlabs/Module/Admin/Addons.php:315
msgid "Disable"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Themes.php:112
-#: ../../Zotlabs/Module/Admin/Addons.php:317
+#: ../../Zotlabs/Module/Admin/Themes.php:113
+#: ../../Zotlabs/Module/Admin/Addons.php:318
msgid "Enable"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Themes.php:131
+#: ../../Zotlabs/Module/Admin/Themes.php:132
msgid "Screenshot"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Themes.php:139
-#: ../../Zotlabs/Module/Admin/Addons.php:347
+#: ../../Zotlabs/Module/Admin/Themes.php:140
+#: ../../Zotlabs/Module/Admin/Addons.php:348
msgid "Toggle"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Themes.php:149
-#: ../../Zotlabs/Module/Admin/Addons.php:355
+#: ../../Zotlabs/Module/Admin/Themes.php:150
+#: ../../Zotlabs/Module/Admin/Addons.php:356
msgid "Author: "
msgstr ""
-#: ../../Zotlabs/Module/Admin/Themes.php:150
-#: ../../Zotlabs/Module/Admin/Addons.php:356
+#: ../../Zotlabs/Module/Admin/Themes.php:151
+#: ../../Zotlabs/Module/Admin/Addons.php:357
msgid "Maintainer: "
msgstr ""
-#: ../../Zotlabs/Module/Admin/Themes.php:177
+#: ../../Zotlabs/Module/Admin/Themes.php:178
msgid "[Experimental]"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Themes.php:178
+#: ../../Zotlabs/Module/Admin/Themes.php:179
msgid "[Unsupported]"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Addons.php:293
+#: ../../Zotlabs/Module/Admin/Addons.php:294
#, php-format
msgid "Plugin %s disabled."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Addons.php:298
+#: ../../Zotlabs/Module/Admin/Addons.php:299
#, php-format
msgid "Plugin %s enabled."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Addons.php:357
+#: ../../Zotlabs/Module/Admin/Addons.php:358
msgid "Minimum project version: "
msgstr ""
-#: ../../Zotlabs/Module/Admin/Addons.php:358
+#: ../../Zotlabs/Module/Admin/Addons.php:359
msgid "Maximum project version: "
msgstr ""
-#: ../../Zotlabs/Module/Admin/Addons.php:359
+#: ../../Zotlabs/Module/Admin/Addons.php:360
msgid "Minimum PHP version: "
msgstr ""
-#: ../../Zotlabs/Module/Admin/Addons.php:360
+#: ../../Zotlabs/Module/Admin/Addons.php:361
msgid "Compatible Server Roles: "
msgstr ""
-#: ../../Zotlabs/Module/Admin/Addons.php:361
+#: ../../Zotlabs/Module/Admin/Addons.php:362
msgid "Requires: "
msgstr ""
-#: ../../Zotlabs/Module/Admin/Addons.php:362
-#: ../../Zotlabs/Module/Admin/Addons.php:449
+#: ../../Zotlabs/Module/Admin/Addons.php:363
+#: ../../Zotlabs/Module/Admin/Addons.php:450
msgid "Disabled - version incompatibility"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Addons.php:418
+#: ../../Zotlabs/Module/Admin/Addons.php:419
msgid "Enter the public git repository URL of the addon repo."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Addons.php:419
+#: ../../Zotlabs/Module/Admin/Addons.php:420
msgid "Addon repo git URL"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Addons.php:420
+#: ../../Zotlabs/Module/Admin/Addons.php:421
msgid "Custom repo name"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Addons.php:420
+#: ../../Zotlabs/Module/Admin/Addons.php:421
msgid "(optional)"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Addons.php:421
+#: ../../Zotlabs/Module/Admin/Addons.php:422
msgid "Download Addon Repo"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Addons.php:428
+#: ../../Zotlabs/Module/Admin/Addons.php:429
msgid "Install new repo"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Addons.php:452
+#: ../../Zotlabs/Module/Admin/Addons.php:453
msgid "Manage Repos"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Addons.php:453
+#: ../../Zotlabs/Module/Admin/Addons.php:454
msgid "Installed Addon Repositories"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Addons.php:454
+#: ../../Zotlabs/Module/Admin/Addons.php:455
msgid "Install a New Addon Repository"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Addons.php:461
+#: ../../Zotlabs/Module/Admin/Addons.php:462
msgid "Switch branch"
msgstr ""
@@ -10878,158 +10865,159 @@ msgstr ""
msgid "Manage Additional Features"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Profs.php:89
+#: ../../Zotlabs/Module/Admin/Profs.php:90
msgid "New Profile Field"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Profs.php:90
-#: ../../Zotlabs/Module/Admin/Profs.php:110
+#: ../../Zotlabs/Module/Admin/Profs.php:91
+#: ../../Zotlabs/Module/Admin/Profs.php:111
msgid "Field nickname"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Profs.php:90
-#: ../../Zotlabs/Module/Admin/Profs.php:110
-msgid "System name of field"
-msgstr ""
-
#: ../../Zotlabs/Module/Admin/Profs.php:91
#: ../../Zotlabs/Module/Admin/Profs.php:111
-msgid "Input type"
+msgid "System name of field"
msgstr ""
#: ../../Zotlabs/Module/Admin/Profs.php:92
#: ../../Zotlabs/Module/Admin/Profs.php:112
-msgid "Field Name"
+msgid "Input type"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Profs.php:92
-#: ../../Zotlabs/Module/Admin/Profs.php:112
-msgid "Label on profile pages"
+#: ../../Zotlabs/Module/Admin/Profs.php:93
+#: ../../Zotlabs/Module/Admin/Profs.php:113
+msgid "Field Name"
msgstr ""
#: ../../Zotlabs/Module/Admin/Profs.php:93
#: ../../Zotlabs/Module/Admin/Profs.php:113
+msgid "Label on profile pages"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Profs.php:94
+#: ../../Zotlabs/Module/Admin/Profs.php:114
msgid "Help text"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Profs.php:93
-#: ../../Zotlabs/Module/Admin/Profs.php:113
+#: ../../Zotlabs/Module/Admin/Profs.php:94
+#: ../../Zotlabs/Module/Admin/Profs.php:114
msgid "Additional info (optional)"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Profs.php:103
+#: ../../Zotlabs/Module/Admin/Profs.php:104
msgid "Field definition not found"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Profs.php:109
+#: ../../Zotlabs/Module/Admin/Profs.php:110
msgid "Edit Profile Field"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Profs.php:169
+#: ../../Zotlabs/Module/Admin/Profs.php:170
msgid "Basic Profile Fields"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Profs.php:170
+#: ../../Zotlabs/Module/Admin/Profs.php:171
msgid "Advanced Profile Fields"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Profs.php:170
+#: ../../Zotlabs/Module/Admin/Profs.php:171
msgid "(In addition to basic fields)"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Profs.php:172
+#: ../../Zotlabs/Module/Admin/Profs.php:173
msgid "All available fields"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Profs.php:173
+#: ../../Zotlabs/Module/Admin/Profs.php:174
msgid "Custom Fields"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Profs.php:177
+#: ../../Zotlabs/Module/Admin/Profs.php:178
msgid "Create Custom Field"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Channels.php:31
+#: ../../Zotlabs/Module/Admin/Channels.php:28
+#: ../../Zotlabs/Module/Admin/Channels.php:80
+msgid "Channel not found"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Channels.php:48
#, php-format
msgid "%s channel censored/uncensored"
msgid_plural "%s channels censored/uncensored"
msgstr[0] ""
msgstr[1] ""
-#: ../../Zotlabs/Module/Admin/Channels.php:40
+#: ../../Zotlabs/Module/Admin/Channels.php:57
#, php-format
msgid "%s channel code allowed/disallowed"
msgid_plural "%s channels code allowed/disallowed"
msgstr[0] ""
msgstr[1] ""
-#: ../../Zotlabs/Module/Admin/Channels.php:46
+#: ../../Zotlabs/Module/Admin/Channels.php:63
#, php-format
msgid "%s channel deleted"
msgid_plural "%s channels deleted"
msgstr[0] ""
msgstr[1] ""
-#: ../../Zotlabs/Module/Admin/Channels.php:65
-msgid "Channel not found"
-msgstr ""
-
-#: ../../Zotlabs/Module/Admin/Channels.php:75
+#: ../../Zotlabs/Module/Admin/Channels.php:90
#, php-format
msgid "Channel '%s' deleted"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Channels.php:87
+#: ../../Zotlabs/Module/Admin/Channels.php:109
#, php-format
msgid "Channel '%s' censored"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Channels.php:87
+#: ../../Zotlabs/Module/Admin/Channels.php:109
#, php-format
msgid "Channel '%s' uncensored"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Channels.php:98
+#: ../../Zotlabs/Module/Admin/Channels.php:120
#, php-format
msgid "Channel '%s' code allowed"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Channels.php:98
+#: ../../Zotlabs/Module/Admin/Channels.php:120
#, php-format
msgid "Channel '%s' code disallowed"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Channels.php:148
+#: ../../Zotlabs/Module/Admin/Channels.php:170
msgid "select all"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Channels.php:150
+#: ../../Zotlabs/Module/Admin/Channels.php:172
msgid "Censor"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Channels.php:151
+#: ../../Zotlabs/Module/Admin/Channels.php:173
msgid "Uncensor"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Channels.php:152
+#: ../../Zotlabs/Module/Admin/Channels.php:174
msgid "Allow Code"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Channels.php:153
+#: ../../Zotlabs/Module/Admin/Channels.php:175
msgid "Disallow Code"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Channels.php:158
+#: ../../Zotlabs/Module/Admin/Channels.php:180
msgid "UID"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Channels.php:162
+#: ../../Zotlabs/Module/Admin/Channels.php:184
msgid ""
"Selected channels will be deleted!\\n\\nEverything that was posted in these "
"channels on this site will be permanently deleted!\\n\\nAre you sure?"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Channels.php:163
+#: ../../Zotlabs/Module/Admin/Channels.php:185
msgid ""
"The channel {0} will be deleted!\\n\\nEverything that was posted in this "
"channel on this site will be permanently deleted!\\n\\nAre you sure?"
@@ -11123,29 +11111,29 @@ msgstr ""
msgid "No failed updates."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Logs.php:28
+#: ../../Zotlabs/Module/Admin/Logs.php:29
msgid "Log settings updated."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Logs.php:85
+#: ../../Zotlabs/Module/Admin/Logs.php:86
msgid "Clear"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Logs.php:91
+#: ../../Zotlabs/Module/Admin/Logs.php:92
msgid "Debugging"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Logs.php:92
+#: ../../Zotlabs/Module/Admin/Logs.php:93
msgid "Log file"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Logs.php:92
+#: ../../Zotlabs/Module/Admin/Logs.php:93
msgid ""
"Must be writable by web server. Relative to your top-level webserver "
"directory."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Logs.php:93
+#: ../../Zotlabs/Module/Admin/Logs.php:94
msgid "Log level"
msgstr ""
@@ -11177,668 +11165,668 @@ msgstr ""
msgid "Last known contact"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:111
+#: ../../Zotlabs/Module/Admin/Site.php:112
msgid "Invalid input"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:131
+#: ../../Zotlabs/Module/Admin/Site.php:132
msgid "Errors"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:219
+#: ../../Zotlabs/Module/Admin/Site.php:220
msgid "Site settings updated."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:242
-#: ../../Zotlabs/Module/Settings/Display.php:116
+#: ../../Zotlabs/Module/Admin/Site.php:243
+#: ../../Zotlabs/Module/Settings/Display.php:117
#, php-format
msgid "%s - (Incompatible)"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:249
+#: ../../Zotlabs/Module/Admin/Site.php:250
msgid "mobile"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:251
+#: ../../Zotlabs/Module/Admin/Site.php:252
msgid "experimental"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:253
+#: ../../Zotlabs/Module/Admin/Site.php:254
msgid "unsupported"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:306
+#: ../../Zotlabs/Module/Admin/Site.php:307
msgid "Yes - with approval"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:314
+#: ../../Zotlabs/Module/Admin/Site.php:315
msgid "My site is not a public server"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:315
+#: ../../Zotlabs/Module/Admin/Site.php:316
msgid "My site has paid access only"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:316
+#: ../../Zotlabs/Module/Admin/Site.php:317
msgid "My site has free access only"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:317
+#: ../../Zotlabs/Module/Admin/Site.php:318
msgid "My site offers free accounts with optional paid upgrades"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:335
+#: ../../Zotlabs/Module/Admin/Site.php:336
msgid "Default permission role for new accounts"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:335
+#: ../../Zotlabs/Module/Admin/Site.php:336
msgid ""
"This role will be used for the first channel created after registration."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:342 ../../Zotlabs/Module/Invite.php:410
+#: ../../Zotlabs/Module/Admin/Site.php:343 ../../Zotlabs/Module/Invite.php:411
msgid "Minute(s)"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:343 ../../Zotlabs/Module/Invite.php:411
+#: ../../Zotlabs/Module/Admin/Site.php:344 ../../Zotlabs/Module/Invite.php:412
msgid "Hour(s)"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:344 ../../Zotlabs/Module/Invite.php:412
+#: ../../Zotlabs/Module/Admin/Site.php:345 ../../Zotlabs/Module/Invite.php:413
msgid "Day(s)"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:345
+#: ../../Zotlabs/Module/Admin/Site.php:346
msgid "Week(s)"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:346
+#: ../../Zotlabs/Module/Admin/Site.php:347
msgid "Month(s)"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:347
+#: ../../Zotlabs/Module/Admin/Site.php:348
msgid "Year(s)"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:355
+#: ../../Zotlabs/Module/Admin/Site.php:356
msgid "Register verification delay"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:358
+#: ../../Zotlabs/Module/Admin/Site.php:359
msgid "Time to wait before a registration can be verified"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:361
-#: ../../Zotlabs/Module/Admin/Site.php:383 ../../Zotlabs/Module/Invite.php:421
+#: ../../Zotlabs/Module/Admin/Site.php:362
+#: ../../Zotlabs/Module/Admin/Site.php:384 ../../Zotlabs/Module/Invite.php:422
msgid "duration up from now"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:377
+#: ../../Zotlabs/Module/Admin/Site.php:378
msgid "Register verification expiration time"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:380
+#: ../../Zotlabs/Module/Admin/Site.php:381
msgid "Time before an unverified registration will expire"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:403
+#: ../../Zotlabs/Module/Admin/Site.php:404
msgid "File upload"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:404
+#: ../../Zotlabs/Module/Admin/Site.php:405
msgid "Policies"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:411
+#: ../../Zotlabs/Module/Admin/Site.php:412
msgid "Banner/Logo"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:411
+#: ../../Zotlabs/Module/Admin/Site.php:412
msgid "Unfiltered HTML/CSS/JS is allowed"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:412
+#: ../../Zotlabs/Module/Admin/Site.php:413
msgid "Administrator Information"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:412
+#: ../../Zotlabs/Module/Admin/Site.php:413
msgid ""
"Contact information for site administrators. Displayed on siteinfo page. "
"BBCode can be used here"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:413 ../../Zotlabs/Module/Siteinfo.php:24
+#: ../../Zotlabs/Module/Admin/Site.php:414 ../../Zotlabs/Module/Siteinfo.php:25
msgid "Site Information"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:413
+#: ../../Zotlabs/Module/Admin/Site.php:414
msgid ""
"Publicly visible description of this site. Displayed on siteinfo page. "
"BBCode can be used here"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:414
+#: ../../Zotlabs/Module/Admin/Site.php:415
msgid "System theme"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:414
+#: ../../Zotlabs/Module/Admin/Site.php:415
msgid ""
"Default system theme - may be over-ridden by user profiles - <a href='#' "
"id='cnftheme'>change theme settings</a>"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:417
+#: ../../Zotlabs/Module/Admin/Site.php:418
msgid "Allow Feeds as Connections"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:417
+#: ../../Zotlabs/Module/Admin/Site.php:418
msgid "(Heavy system resource usage)"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:418
+#: ../../Zotlabs/Module/Admin/Site.php:419
msgid "Maximum image size"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:418
+#: ../../Zotlabs/Module/Admin/Site.php:419
msgid ""
"Maximum size in bytes of uploaded images. Default is 0, which means no "
"limits."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:419
+#: ../../Zotlabs/Module/Admin/Site.php:420
msgid "Minimum age"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:419
+#: ../../Zotlabs/Module/Admin/Site.php:420
msgid "Minimum age (in years) for who may register on this site."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:420
+#: ../../Zotlabs/Module/Admin/Site.php:421
msgid "Which best describes the types of account offered by this hub?"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:420
+#: ../../Zotlabs/Module/Admin/Site.php:421
msgid "This is displayed on the public server site list."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:426
+#: ../../Zotlabs/Module/Admin/Site.php:427
msgid "Register text"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:428
+#: ../../Zotlabs/Module/Admin/Site.php:429
msgid "This text will be displayed prominently at the registration page"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:432
+#: ../../Zotlabs/Module/Admin/Site.php:433
msgid "Does this site allow new member registration?"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:439
+#: ../../Zotlabs/Module/Admin/Site.php:440
msgid "Configure the registration open days/hours"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:441
+#: ../../Zotlabs/Module/Admin/Site.php:442
msgid "Empty or '-:-' value will keep registration open 24/7 (default)"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:442
+#: ../../Zotlabs/Module/Admin/Site.php:443
msgid ""
"Weekdays and hours must be separated by colon ':', From-To ranges with a "
"dash `-` example: 1:800-1200"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:443
+#: ../../Zotlabs/Module/Admin/Site.php:444
msgid ""
"Weekday:Hour pairs must be separated by space ' ' example: 1:900-1700 "
"2:900-1700"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:444
+#: ../../Zotlabs/Module/Admin/Site.php:445
msgid ""
"From-To ranges must be separated by comma ',' example: 1:800-1200,1300-1700 "
"or 1-2,4-5:900-1700"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:445
+#: ../../Zotlabs/Module/Admin/Site.php:446
msgid "Advanced examples:"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:445
-#: ../../Zotlabs/Module/Settings/Channel.php:183
+#: ../../Zotlabs/Module/Admin/Site.php:446
+#: ../../Zotlabs/Module/Settings/Channel.php:184
msgid "or"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:446
+#: ../../Zotlabs/Module/Admin/Site.php:447
msgid "Check your configuration"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:450
+#: ../../Zotlabs/Module/Admin/Site.php:451
msgid "Max account registrations per day"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:452
+#: ../../Zotlabs/Module/Admin/Site.php:453
msgid "Unlimited if zero or no value - default 50"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:456
+#: ../../Zotlabs/Module/Admin/Site.php:457
msgid "Max account registrations from same IP"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:458
+#: ../../Zotlabs/Module/Admin/Site.php:459
msgid "Unlimited if zero or no value - default 3"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:464
+#: ../../Zotlabs/Module/Admin/Site.php:465
msgid "Auto channel create"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:466
+#: ../../Zotlabs/Module/Admin/Site.php:467
msgid ""
"If disabled the channel will be created in a separate step during the "
"registration process"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:470
+#: ../../Zotlabs/Module/Admin/Site.php:471
msgid "Require invite code"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:475
+#: ../../Zotlabs/Module/Admin/Site.php:476
msgid "Allow invite code"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:480
+#: ../../Zotlabs/Module/Admin/Site.php:481
msgid "Require email address"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:482
+#: ../../Zotlabs/Module/Admin/Site.php:483
msgid "The provided email address will be verified (recommended)"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:486
+#: ../../Zotlabs/Module/Admin/Site.php:487
msgid "Abandon account after x days"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:488
+#: ../../Zotlabs/Module/Admin/Site.php:489
msgid ""
"Will not waste system resources polling external sites for abandonded "
"accounts. Enter 0 for no time limit."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:493
+#: ../../Zotlabs/Module/Admin/Site.php:494
msgid "Site homepage to show visitors (default: login box)"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:493
+#: ../../Zotlabs/Module/Admin/Site.php:494
msgid ""
"example: 'pubstream' to show public stream, 'page/sys/home' to show a system "
"webpage called 'home' or 'include:home.html' to include a file."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:494
+#: ../../Zotlabs/Module/Admin/Site.php:495
msgid "Preserve site homepage URL"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:494
+#: ../../Zotlabs/Module/Admin/Site.php:495
msgid ""
"Present the site homepage in a frame at the original location instead of "
"redirecting"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:495
+#: ../../Zotlabs/Module/Admin/Site.php:496
msgid "Allowed friend domains"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:495
+#: ../../Zotlabs/Module/Admin/Site.php:496
msgid ""
"Comma separated list of domains which are allowed to establish friendships "
"with this site. Wildcards are accepted. Empty to allow any domains"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:496
+#: ../../Zotlabs/Module/Admin/Site.php:497
msgid "Force publish"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:496
+#: ../../Zotlabs/Module/Admin/Site.php:497
msgid ""
"Check to force all profiles on this site to be listed in the site directory"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:497
+#: ../../Zotlabs/Module/Admin/Site.php:498
msgid "Enable public stream"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:497
+#: ../../Zotlabs/Module/Admin/Site.php:498
msgid "Enable the public stream. Warning: this content is unmoderated"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:498
+#: ../../Zotlabs/Module/Admin/Site.php:499
msgid "Site only public stream"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:498
+#: ../../Zotlabs/Module/Admin/Site.php:499
msgid "Restrict the public stream to content originating at this site"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:499
+#: ../../Zotlabs/Module/Admin/Site.php:500
msgid "Allow anybody on the internet to access the public streams"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:499
+#: ../../Zotlabs/Module/Admin/Site.php:500
msgid "Disable to require authentication before viewing"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:500
+#: ../../Zotlabs/Module/Admin/Site.php:501
msgid "Only import Public stream posts with this text"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:501
+#: ../../Zotlabs/Module/Admin/Site.php:502
msgid "Do not import Public stream posts with this text"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:504
+#: ../../Zotlabs/Module/Admin/Site.php:505
msgid "Login on Homepage"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:504
+#: ../../Zotlabs/Module/Admin/Site.php:505
msgid ""
"Present a login box to visitors on the home page if no other content has "
"been configured."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:505
+#: ../../Zotlabs/Module/Admin/Site.php:506
msgid "Enable context help"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:505
+#: ../../Zotlabs/Module/Admin/Site.php:506
msgid ""
"Display contextual help for the current page when the help button is pressed."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:507
+#: ../../Zotlabs/Module/Admin/Site.php:508
msgid "Reply-to email address for system generated email."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:508
+#: ../../Zotlabs/Module/Admin/Site.php:509
msgid "Sender (From) email address for system generated email."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:509
+#: ../../Zotlabs/Module/Admin/Site.php:510
msgid "Name of email sender for system generated email."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:511
+#: ../../Zotlabs/Module/Admin/Site.php:512
msgid "Directory Server URL"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:511
+#: ../../Zotlabs/Module/Admin/Site.php:512
msgid "Default directory server"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:513
+#: ../../Zotlabs/Module/Admin/Site.php:514
msgid "Enable SSE Notifications"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:513
+#: ../../Zotlabs/Module/Admin/Site.php:514
msgid ""
"If disabled, traditional polling will be used. Warning: this setting might "
"not be suited for shared hosting"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:515
+#: ../../Zotlabs/Module/Admin/Site.php:516
msgid "Proxy user"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:516
+#: ../../Zotlabs/Module/Admin/Site.php:517
msgid "Proxy URL"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:517
+#: ../../Zotlabs/Module/Admin/Site.php:518
msgid "Network timeout"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:517
+#: ../../Zotlabs/Module/Admin/Site.php:518
msgid "Value is in seconds. Set to 0 for unlimited (not recommended)."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:518
+#: ../../Zotlabs/Module/Admin/Site.php:519
msgid "Delivery interval"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:518
+#: ../../Zotlabs/Module/Admin/Site.php:519
msgid ""
"Delay background delivery processes by this many seconds to reduce system "
"load. Recommend: 4-5 for shared hosts, 2-3 for virtual private servers. 0-1 "
"for large dedicated servers."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:519
+#: ../../Zotlabs/Module/Admin/Site.php:520
msgid "Deliveries per process"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:519
+#: ../../Zotlabs/Module/Admin/Site.php:520
msgid ""
"Number of deliveries to attempt in a single operating system process. Adjust "
"if necessary to tune system performance. Recommend: 1-5."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:521
+#: ../../Zotlabs/Module/Admin/Site.php:522
msgid "Poll interval"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:521
+#: ../../Zotlabs/Module/Admin/Site.php:522
msgid ""
"Delay background polling processes by this many seconds to reduce system "
"load. If 0, use delivery interval."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:522
+#: ../../Zotlabs/Module/Admin/Site.php:523
msgid "Path to ImageMagick convert program"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:522
+#: ../../Zotlabs/Module/Admin/Site.php:523
msgid ""
"If set, use this program to generate photo thumbnails for huge images ( > "
"4000 pixels in either dimension), otherwise memory exhaustion may occur. "
"Example: /usr/bin/convert"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:523
+#: ../../Zotlabs/Module/Admin/Site.php:524
msgid "Maximum Load Average"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:523
+#: ../../Zotlabs/Module/Admin/Site.php:524
msgid ""
"Maximum system load before delivery and poll processes are deferred - "
"default 50."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:524
+#: ../../Zotlabs/Module/Admin/Site.php:525
msgid "Expiration period in days for imported (grid/network) content"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:524
+#: ../../Zotlabs/Module/Admin/Site.php:525
msgid "0 for no expiration of imported content"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:525
+#: ../../Zotlabs/Module/Admin/Site.php:526
msgid ""
"Do not expire any posts which have comments less than this many days ago"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:526
+#: ../../Zotlabs/Module/Admin/Site.php:527
msgid ""
"Public servers: Optional landing (marketing) webpage for new registrants"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:526
+#: ../../Zotlabs/Module/Admin/Site.php:527
#, php-format
msgid "Create this page first. Default is %s/register"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:527
+#: ../../Zotlabs/Module/Admin/Site.php:528
msgid "Page to display after creating a new channel"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:527
+#: ../../Zotlabs/Module/Admin/Site.php:528
msgid "Default: profiles"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:528
+#: ../../Zotlabs/Module/Admin/Site.php:529
msgid "Optional: site location"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:528
+#: ../../Zotlabs/Module/Admin/Site.php:529
msgid "Region or country"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:613
#: ../../Zotlabs/Module/Admin/Site.php:614
+#: ../../Zotlabs/Module/Admin/Site.php:615
msgid "Invalid 24h time value (hhmm/hmm)"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:96
+#: ../../Zotlabs/Module/Admin/Security.php:97
msgid ""
"By default, unfiltered HTML is allowed in embedded media. This is inherently "
"insecure."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:99
+#: ../../Zotlabs/Module/Admin/Security.php:100
msgid ""
"The recommended setting is to only allow unfiltered HTML from the following "
"sites:"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:100
+#: ../../Zotlabs/Module/Admin/Security.php:101
msgid ""
"https://youtube.com/<br />https://www.youtube.com/<br />https://youtu.be/"
"<br />https://vimeo.com/<br />https://soundcloud.com/<br />"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:101
+#: ../../Zotlabs/Module/Admin/Security.php:102
msgid ""
"All other embedded content will be filtered, <strong>unless</strong> "
"embedded content from that site is explicitly blocked."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:108
+#: ../../Zotlabs/Module/Admin/Security.php:109
msgid "Block public"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:108
+#: ../../Zotlabs/Module/Admin/Security.php:109
msgid ""
"Check to block public access to all otherwise public personal pages on this "
"site unless you are currently authenticated."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:109
+#: ../../Zotlabs/Module/Admin/Security.php:110
msgid "Provide a cloud root directory"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:109
+#: ../../Zotlabs/Module/Admin/Security.php:110
msgid ""
"The cloud root directory lists all channel names which provide public files"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:110
+#: ../../Zotlabs/Module/Admin/Security.php:111
msgid "Show total disk space available to cloud uploads"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:111
+#: ../../Zotlabs/Module/Admin/Security.php:112
msgid "Set \"Transport Security\" HTTP header"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:112
+#: ../../Zotlabs/Module/Admin/Security.php:113
msgid "Set \"Content Security Policy\" HTTP header"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:113
+#: ../../Zotlabs/Module/Admin/Security.php:114
msgid "Allowed email domains"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:113
+#: ../../Zotlabs/Module/Admin/Security.php:114
msgid ""
"Comma separated list of domains which are allowed in email addresses for "
"registrations to this site. Wildcards are accepted. Empty to allow any "
"domains"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:114
+#: ../../Zotlabs/Module/Admin/Security.php:115
msgid "Not allowed email domains"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:114
+#: ../../Zotlabs/Module/Admin/Security.php:115
msgid ""
"Comma separated list of domains which are not allowed in email addresses for "
"registrations to this site. Wildcards are accepted. Empty to allow any "
"domains, unless allowed domains have been defined."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:115
+#: ../../Zotlabs/Module/Admin/Security.php:116
msgid "Allow communications only from these sites"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:115
+#: ../../Zotlabs/Module/Admin/Security.php:116
msgid ""
"One site per line. Leave empty to allow communication from anywhere by "
"default"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:116
+#: ../../Zotlabs/Module/Admin/Security.php:117
msgid "Block communications from these sites"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:117
+#: ../../Zotlabs/Module/Admin/Security.php:118
msgid "Allow communications only from these channels"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:117
+#: ../../Zotlabs/Module/Admin/Security.php:118
msgid ""
"One channel (hash) per line. Leave empty to allow from any channel by default"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:118
+#: ../../Zotlabs/Module/Admin/Security.php:119
msgid "Block communications from these channels"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:119
+#: ../../Zotlabs/Module/Admin/Security.php:120
msgid "Only allow embeds from secure (SSL) websites and links."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:120
+#: ../../Zotlabs/Module/Admin/Security.php:121
msgid "Allow unfiltered embedded HTML content only from these domains"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:120
+#: ../../Zotlabs/Module/Admin/Security.php:121
msgid "One site per line. By default embedded content is filtered."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:121
+#: ../../Zotlabs/Module/Admin/Security.php:122
msgid "Block embedded HTML from these domains"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:122
+#: ../../Zotlabs/Module/Admin/Security.php:123
msgid "Allow SVG thumbnails in file browser"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:122
+#: ../../Zotlabs/Module/Admin/Security.php:123
msgid "WARNING: SVG images may contain malicious code."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:123
+#: ../../Zotlabs/Module/Admin/Security.php:124
msgid "Allow embedded (inline) PDF files"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:125
+#: ../../Zotlabs/Module/Admin/Security.php:126
msgid "Additional trusted directory server URLs"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:125
+#: ../../Zotlabs/Module/Admin/Security.php:126
msgid ""
"Accept directory flags (spam, nsfw) from those servers. One per line like "
"https://example.tld"
msgstr ""
-#: ../../Zotlabs/Module/Manage.php:130 ../../Zotlabs/Module/New_channel.php:147
+#: ../../Zotlabs/Module/Manage.php:130 ../../Zotlabs/Module/New_channel.php:148
#, php-format
msgid "You have created %1$.0f of %2$.0f allowed channels."
msgstr ""
@@ -11873,7 +11861,7 @@ msgid "Delegated Channel"
msgstr ""
#: ../../Zotlabs/Module/Email_resend.php:12
-#: ../../Zotlabs/Module/Email_validation.php:24
+#: ../../Zotlabs/Module/Email_validation.php:25
msgid "Token verification failed."
msgstr ""
@@ -11968,7 +11956,7 @@ msgid "Previous"
msgstr ""
#: ../../Zotlabs/Module/Cal.php:200 ../../Zotlabs/Module/Photos.php:955
-#: ../../Zotlabs/Module/Setup.php:272 ../../Zotlabs/Module/Cdav.php:1027
+#: ../../Zotlabs/Module/Setup.php:275 ../../Zotlabs/Module/Cdav.php:1027
msgid "Next"
msgstr ""
@@ -12023,55 +12011,55 @@ msgstr ""
msgid "Affinity Tool Settings"
msgstr ""
-#: ../../Zotlabs/Module/Admin.php:96
+#: ../../Zotlabs/Module/Admin.php:98
msgid "Blocked accounts"
msgstr ""
-#: ../../Zotlabs/Module/Admin.php:97
+#: ../../Zotlabs/Module/Admin.php:99
msgid "Expired accounts"
msgstr ""
-#: ../../Zotlabs/Module/Admin.php:98
+#: ../../Zotlabs/Module/Admin.php:100
msgid "Expiring accounts"
msgstr ""
-#: ../../Zotlabs/Module/Admin.php:122
+#: ../../Zotlabs/Module/Admin.php:124
msgid "Message queues"
msgstr ""
-#: ../../Zotlabs/Module/Admin.php:136
+#: ../../Zotlabs/Module/Admin.php:138
msgid "Your software should be updated"
msgstr ""
-#: ../../Zotlabs/Module/Admin.php:141
+#: ../../Zotlabs/Module/Admin.php:143
msgid "Summary"
msgstr ""
-#: ../../Zotlabs/Module/Admin.php:144
+#: ../../Zotlabs/Module/Admin.php:146
msgid "Registered accounts"
msgstr ""
-#: ../../Zotlabs/Module/Admin.php:145
+#: ../../Zotlabs/Module/Admin.php:147
msgid "Pending registrations"
msgstr ""
-#: ../../Zotlabs/Module/Admin.php:146
+#: ../../Zotlabs/Module/Admin.php:148
msgid "Registered channels"
msgstr ""
-#: ../../Zotlabs/Module/Admin.php:147 ../../Zotlabs/Module/Siteinfo.php:41
+#: ../../Zotlabs/Module/Admin.php:149 ../../Zotlabs/Module/Siteinfo.php:42
msgid "Active addons"
msgstr ""
-#: ../../Zotlabs/Module/Admin.php:148
+#: ../../Zotlabs/Module/Admin.php:150
msgid "Version"
msgstr ""
-#: ../../Zotlabs/Module/Admin.php:149
+#: ../../Zotlabs/Module/Admin.php:151
msgid "Repository version (master)"
msgstr ""
-#: ../../Zotlabs/Module/Admin.php:150
+#: ../../Zotlabs/Module/Admin.php:152
msgid "Repository version (dev)"
msgstr ""
@@ -12146,89 +12134,97 @@ msgstr ""
msgid "Lookup xchan beginning with (or webbie): "
msgstr ""
-#: ../../Zotlabs/Module/Group.php:47
+#: ../../Zotlabs/Module/Group.php:48
msgid "Privacy group created."
msgstr ""
-#: ../../Zotlabs/Module/Group.php:50
+#: ../../Zotlabs/Module/Group.php:51
msgid "Could not create privacy group."
msgstr ""
-#: ../../Zotlabs/Module/Group.php:82
+#: ../../Zotlabs/Module/Group.php:83
msgid "Privacy group updated."
msgstr ""
-#: ../../Zotlabs/Module/Group.php:137 ../../Zotlabs/Module/Group.php:301
+#: ../../Zotlabs/Module/Group.php:138 ../../Zotlabs/Module/Group.php:302
msgid "Post to this group by default"
msgstr ""
-#: ../../Zotlabs/Module/Group.php:138 ../../Zotlabs/Module/Group.php:302
+#: ../../Zotlabs/Module/Group.php:139 ../../Zotlabs/Module/Group.php:303
msgid "Add new contacts to this group by default"
msgstr ""
-#: ../../Zotlabs/Module/Group.php:146
+#: ../../Zotlabs/Module/Group.php:147
msgid "Privacy group name"
msgstr ""
-#: ../../Zotlabs/Module/Group.php:147 ../../Zotlabs/Module/Group.php:249
+#: ../../Zotlabs/Module/Group.php:148 ../../Zotlabs/Module/Group.php:250
msgid "Members are visible to other channels"
msgstr ""
-#: ../../Zotlabs/Module/Group.php:175
+#: ../../Zotlabs/Module/Group.php:176
msgid "Privacy group removed."
msgstr ""
-#: ../../Zotlabs/Module/Group.php:178
+#: ../../Zotlabs/Module/Group.php:179
msgid "Unable to remove privacy group."
msgstr ""
-#: ../../Zotlabs/Module/Group.php:244
+#: ../../Zotlabs/Module/Group.php:245
#, php-format
msgid "Privacy Group: %s"
msgstr ""
-#: ../../Zotlabs/Module/Group.php:246
+#: ../../Zotlabs/Module/Group.php:247
msgid "Privacy group name: "
msgstr ""
-#: ../../Zotlabs/Module/Group.php:262
+#: ../../Zotlabs/Module/Group.php:263
msgid "Group members"
msgstr ""
-#: ../../Zotlabs/Module/Group.php:264
+#: ../../Zotlabs/Module/Group.php:265
msgid "Not in this group"
msgstr ""
-#: ../../Zotlabs/Module/Group.php:296
+#: ../../Zotlabs/Module/Group.php:297
msgid "Click a channel to toggle membership"
msgstr ""
-#: ../../Zotlabs/Module/Help.php:25
+#: ../../Zotlabs/Module/Help.php:68
msgid "Documentation Search"
msgstr ""
-#: ../../Zotlabs/Module/Help.php:86
+#: ../../Zotlabs/Module/Help.php:172
+msgid "Not Found"
+msgstr ""
+
+#: ../../Zotlabs/Module/Help.php:225
+msgid "$Projectname Documentation"
+msgstr ""
+
+#: ../../Zotlabs/Module/Help.php:236
+msgid "Contents"
+msgstr ""
+
+#: ../../Zotlabs/Module/Help.php:243
msgid "Members"
msgstr ""
-#: ../../Zotlabs/Module/Help.php:87
+#: ../../Zotlabs/Module/Help.php:244
msgid "Administrators"
msgstr ""
-#: ../../Zotlabs/Module/Help.php:88
+#: ../../Zotlabs/Module/Help.php:245
msgid "Developers"
msgstr ""
-#: ../../Zotlabs/Module/Help.php:89
+#: ../../Zotlabs/Module/Help.php:246
msgid "Tutorials"
msgstr ""
-#: ../../Zotlabs/Module/Help.php:101
-msgid "$Projectname Documentation"
-msgstr ""
-
-#: ../../Zotlabs/Module/Help.php:102
-msgid "Contents"
+#: ../../Zotlabs/Module/Help.php:264
+msgid "Help:"
msgstr ""
#: ../../Zotlabs/Module/Tagger.php:50
@@ -12240,168 +12236,168 @@ msgstr ""
msgid "%1$s tagged %2$s's %3$s with %4$s"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:69
+#: ../../Zotlabs/Module/Invite.php:70
msgid "Invite App"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:81
+#: ../../Zotlabs/Module/Invite.php:82
msgid "Register is closed"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:115 ../../Zotlabs/Module/Invite.php:562
+#: ../../Zotlabs/Module/Invite.php:116 ../../Zotlabs/Module/Invite.php:563
msgid "Note, the invitation code is valid up to"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:128
+#: ../../Zotlabs/Module/Invite.php:129
#, php-format
msgid "Too many recipients for one invitation (max %d)"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:132
+#: ../../Zotlabs/Module/Invite.php:133
msgid "No recipients for this invitation"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:151
+#: ../../Zotlabs/Module/Invite.php:152
#, php-format
msgid "(%s) : Not a real email address"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:158
+#: ../../Zotlabs/Module/Invite.php:159
#, php-format
msgid "(%s) : Not allowed email address"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:171
+#: ../../Zotlabs/Module/Invite.php:172
#, php-format
msgid "(%s) : email address already in use"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:178
+#: ../../Zotlabs/Module/Invite.php:179
#, php-format
msgid "(%s) : Accepted email address"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:270
+#: ../../Zotlabs/Module/Invite.php:271
#, php-format
msgid "To %s : Message delivery success."
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:302
+#: ../../Zotlabs/Module/Invite.php:303
#, php-format
msgid "%1$d mail(s) sent, %2$d mail error(s)"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:327
+#: ../../Zotlabs/Module/Invite.php:328
msgid "Invites not proposed by configuration"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:328
+#: ../../Zotlabs/Module/Invite.php:329
msgid "Contact the site admin"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:344
+#: ../../Zotlabs/Module/Invite.php:345
msgid "Invites by users not enabled"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:349
+#: ../../Zotlabs/Module/Invite.php:350
msgid "You have no more invitations available"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:365
+#: ../../Zotlabs/Module/Invite.php:366
msgid "Not on xchan"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:398
+#: ../../Zotlabs/Module/Invite.php:399
msgid "All users invitation limit exceeded."
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:416
+#: ../../Zotlabs/Module/Invite.php:417
msgid "Invitation expires after"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:517 ../../Zotlabs/Module/Invite.php:556
+#: ../../Zotlabs/Module/Invite.php:518 ../../Zotlabs/Module/Invite.php:557
msgid "Invitation"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:547
+#: ../../Zotlabs/Module/Invite.php:548
msgid "Send invitations"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:548
+#: ../../Zotlabs/Module/Invite.php:549
msgid "Invitations I am using"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:549
+#: ../../Zotlabs/Module/Invite.php:550
msgid "Invitations we are using"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:550
+#: ../../Zotlabs/Module/Invite.php:551
msgid "§ Note, the email(s) sent will be recorded in the system logs"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:551
+#: ../../Zotlabs/Module/Invite.php:552
msgid "Enter email addresses, one per line:"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:552
+#: ../../Zotlabs/Module/Invite.php:553
msgid "Your message:"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:553
+#: ../../Zotlabs/Module/Invite.php:554
msgid "Invite template"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:555
+#: ../../Zotlabs/Module/Invite.php:556
msgid "Subject:"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:561
+#: ../../Zotlabs/Module/Invite.php:562
msgid "Here you may enter personal notes to the recipient(s)"
msgstr ""
-#: ../../Zotlabs/Module/Siteinfo.php:21
+#: ../../Zotlabs/Module/Siteinfo.php:22
msgid "About this site"
msgstr ""
-#: ../../Zotlabs/Module/Siteinfo.php:22
+#: ../../Zotlabs/Module/Siteinfo.php:23
msgid "Site Name"
msgstr ""
-#: ../../Zotlabs/Module/Siteinfo.php:26
+#: ../../Zotlabs/Module/Siteinfo.php:27
msgid "Administrator"
msgstr ""
-#: ../../Zotlabs/Module/Siteinfo.php:29
+#: ../../Zotlabs/Module/Siteinfo.php:30
msgid "Software and Project information"
msgstr ""
-#: ../../Zotlabs/Module/Siteinfo.php:30
+#: ../../Zotlabs/Module/Siteinfo.php:31
msgid "This site is powered by $Projectname"
msgstr ""
-#: ../../Zotlabs/Module/Siteinfo.php:31
+#: ../../Zotlabs/Module/Siteinfo.php:32
msgid ""
-"Federated and decentralised networking and identity services provided by Zot"
+"Federated and decentralised networking and identity services provided by"
msgstr ""
-#: ../../Zotlabs/Module/Siteinfo.php:34
+#: ../../Zotlabs/Module/Siteinfo.php:35
msgid "Additional federated transport protocols:"
msgstr ""
-#: ../../Zotlabs/Module/Siteinfo.php:36
+#: ../../Zotlabs/Module/Siteinfo.php:37
#, php-format
msgid "Version %s"
msgstr ""
-#: ../../Zotlabs/Module/Siteinfo.php:37
+#: ../../Zotlabs/Module/Siteinfo.php:38
msgid "Project homepage"
msgstr ""
-#: ../../Zotlabs/Module/Siteinfo.php:38
+#: ../../Zotlabs/Module/Siteinfo.php:39
msgid "Developer homepage"
msgstr ""
-#: ../../Zotlabs/Module/Siteinfo.php:42
+#: ../../Zotlabs/Module/Siteinfo.php:43
msgid "Blocked sites"
msgstr ""
@@ -12672,51 +12668,51 @@ msgstr ""
msgid "Use arrows to move the corresponding app up or down in the app tray"
msgstr ""
-#: ../../Zotlabs/Module/New_channel.php:159
+#: ../../Zotlabs/Module/New_channel.php:160
msgid "Your real name is recommended."
msgstr ""
-#: ../../Zotlabs/Module/New_channel.php:160
+#: ../../Zotlabs/Module/New_channel.php:161
msgid ""
"Examples: \"Bob Jameson\", \"Lisa and her Horses\", \"Soccer\", \"Aviation "
"Group\""
msgstr ""
-#: ../../Zotlabs/Module/New_channel.php:165
+#: ../../Zotlabs/Module/New_channel.php:166
msgid ""
"This will be used to create a unique network address (like an email address)."
msgstr ""
-#: ../../Zotlabs/Module/New_channel.php:167
+#: ../../Zotlabs/Module/New_channel.php:168
msgid "Allowed characters are a-z 0-9, - and _"
msgstr ""
-#: ../../Zotlabs/Module/New_channel.php:175
+#: ../../Zotlabs/Module/New_channel.php:176
msgid "Channel name"
msgstr ""
-#: ../../Zotlabs/Module/New_channel.php:178
-#: ../../Zotlabs/Module/Settings/Channel.php:233
+#: ../../Zotlabs/Module/New_channel.php:179
+#: ../../Zotlabs/Module/Settings/Channel.php:234
msgid "Channel role"
msgstr ""
-#: ../../Zotlabs/Module/New_channel.php:181
+#: ../../Zotlabs/Module/New_channel.php:182
msgid "Create a Channel"
msgstr ""
-#: ../../Zotlabs/Module/New_channel.php:182
+#: ../../Zotlabs/Module/New_channel.php:183
msgid ""
"A channel is a unique network identity. It can represent a person (social "
"network profile), a forum (group), a business or celebrity page, a newsfeed, "
"and many other things."
msgstr ""
-#: ../../Zotlabs/Module/New_channel.php:183
+#: ../../Zotlabs/Module/New_channel.php:184
msgid ""
"or <a href=\"import\">import an existing channel</a> from another location."
msgstr ""
-#: ../../Zotlabs/Module/New_channel.php:188
+#: ../../Zotlabs/Module/New_channel.php:189
msgid "Validate"
msgstr ""
@@ -12872,17 +12868,17 @@ msgstr ""
msgid "You must be logged in to see this page."
msgstr ""
-#: ../../Zotlabs/Module/Hcard.php:37 ../../Zotlabs/Module/Channel.php:149
+#: ../../Zotlabs/Module/Hcard.php:37 ../../Zotlabs/Module/Channel.php:150
#: ../../Zotlabs/Module/Profile.php:62
msgid "Posts and comments"
msgstr ""
-#: ../../Zotlabs/Module/Hcard.php:44 ../../Zotlabs/Module/Channel.php:156
+#: ../../Zotlabs/Module/Hcard.php:44 ../../Zotlabs/Module/Channel.php:157
#: ../../Zotlabs/Module/Profile.php:69
msgid "Only posts"
msgstr ""
-#: ../../Zotlabs/Module/Channel.php:230
+#: ../../Zotlabs/Module/Channel.php:231
msgid "Insufficient permissions. Request redirected to profile page."
msgstr ""
@@ -12970,260 +12966,260 @@ msgstr ""
msgid "Unable to remove source."
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:22 ../../Zotlabs/Module/Profiles.php:210
-#: ../../Zotlabs/Module/Profiles.php:638
+#: ../../Zotlabs/Module/Profiles.php:23 ../../Zotlabs/Module/Profiles.php:211
+#: ../../Zotlabs/Module/Profiles.php:641
msgid "Profile not found."
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:42
+#: ../../Zotlabs/Module/Profiles.php:43
msgid "Profile deleted."
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:66 ../../Zotlabs/Module/Profiles.php:103
+#: ../../Zotlabs/Module/Profiles.php:67 ../../Zotlabs/Module/Profiles.php:104
msgid "Profile-"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:88 ../../Zotlabs/Module/Profiles.php:125
+#: ../../Zotlabs/Module/Profiles.php:89 ../../Zotlabs/Module/Profiles.php:126
msgid "New profile created."
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:109
+#: ../../Zotlabs/Module/Profiles.php:110
msgid "Profile unavailable to clone."
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:144
+#: ../../Zotlabs/Module/Profiles.php:145
msgid "Profile unavailable to export."
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:220
+#: ../../Zotlabs/Module/Profiles.php:221
msgid "Profile Name is required."
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:425
+#: ../../Zotlabs/Module/Profiles.php:426
msgid "Marital Status"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:429
+#: ../../Zotlabs/Module/Profiles.php:430
msgid "Romantic Partner"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:433 ../../Zotlabs/Module/Profiles.php:784
+#: ../../Zotlabs/Module/Profiles.php:434 ../../Zotlabs/Module/Profiles.php:787
msgid "Likes"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:437 ../../Zotlabs/Module/Profiles.php:785
+#: ../../Zotlabs/Module/Profiles.php:438 ../../Zotlabs/Module/Profiles.php:788
msgid "Dislikes"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:441 ../../Zotlabs/Module/Profiles.php:792
+#: ../../Zotlabs/Module/Profiles.php:442 ../../Zotlabs/Module/Profiles.php:795
msgid "Work/Employment"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:444
+#: ../../Zotlabs/Module/Profiles.php:445
msgid "Religion"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:448
+#: ../../Zotlabs/Module/Profiles.php:449
msgid "Political Views"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:456
+#: ../../Zotlabs/Module/Profiles.php:457
msgid "Sexual Preference"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:460
+#: ../../Zotlabs/Module/Profiles.php:461
msgid "Homepage"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:464
+#: ../../Zotlabs/Module/Profiles.php:465
msgid "Interests"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:572
+#: ../../Zotlabs/Module/Profiles.php:573
msgid "Profile updated."
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:668
+#: ../../Zotlabs/Module/Profiles.php:671
msgid "Hide my connections from viewers of this profile"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:681
+#: ../../Zotlabs/Module/Profiles.php:684
msgid "Publish my default profile in the network directory"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:689
+#: ../../Zotlabs/Module/Profiles.php:692
msgid "Suggest me as a potential contact to new members"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:693
+#: ../../Zotlabs/Module/Profiles.php:696
msgid "Reveal my online status"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:734
+#: ../../Zotlabs/Module/Profiles.php:737
msgid "Edit Profile Details"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:736
+#: ../../Zotlabs/Module/Profiles.php:739
msgid "View this profile"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:738
+#: ../../Zotlabs/Module/Profiles.php:741
msgid "Profile Tools"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:739
+#: ../../Zotlabs/Module/Profiles.php:742
msgid "Change cover photo"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:741
+#: ../../Zotlabs/Module/Profiles.php:744
msgid "Create a new profile using these settings"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:742
+#: ../../Zotlabs/Module/Profiles.php:745
msgid "Clone this profile"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:743
+#: ../../Zotlabs/Module/Profiles.php:746
msgid "Delete this profile"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:744
+#: ../../Zotlabs/Module/Profiles.php:747
msgid "Add profile things"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:745
+#: ../../Zotlabs/Module/Profiles.php:748
msgid "Basic"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:747
+#: ../../Zotlabs/Module/Profiles.php:750
msgid "Relationship"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:750
+#: ../../Zotlabs/Module/Profiles.php:753
msgid "Import profile from file"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:751
+#: ../../Zotlabs/Module/Profiles.php:754
msgid "Export profile to file"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:752
+#: ../../Zotlabs/Module/Profiles.php:755
msgid "Your gender"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:753
+#: ../../Zotlabs/Module/Profiles.php:756
msgid "Marital status"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:754
+#: ../../Zotlabs/Module/Profiles.php:757
msgid "Sexual preference"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:757
+#: ../../Zotlabs/Module/Profiles.php:760
msgid "Profile name"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:759
+#: ../../Zotlabs/Module/Profiles.php:762
msgid "This is your default profile."
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:761
+#: ../../Zotlabs/Module/Profiles.php:764
msgid "Your full name"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:762
+#: ../../Zotlabs/Module/Profiles.php:765
msgid "Short title/description"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:762
+#: ../../Zotlabs/Module/Profiles.php:765
msgid "Maximal 190 characters"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:765
+#: ../../Zotlabs/Module/Profiles.php:768
msgid "Street address"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:766
+#: ../../Zotlabs/Module/Profiles.php:769
msgid "Locality/City"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:767
+#: ../../Zotlabs/Module/Profiles.php:770
msgid "Region/State"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:768
+#: ../../Zotlabs/Module/Profiles.php:771
msgid "Postal/Zip code"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:774
+#: ../../Zotlabs/Module/Profiles.php:777
msgid "Who (if applicable)"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:774
+#: ../../Zotlabs/Module/Profiles.php:777
msgid "Examples: cathy123, Cathy Williams, cathy@example.com"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:775
+#: ../../Zotlabs/Module/Profiles.php:778
msgid "Since (date)"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:778
+#: ../../Zotlabs/Module/Profiles.php:781
msgid "Tell us about yourself"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:780
+#: ../../Zotlabs/Module/Profiles.php:783
msgid "Hometown"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:781
+#: ../../Zotlabs/Module/Profiles.php:784
msgid "Political views"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:782
+#: ../../Zotlabs/Module/Profiles.php:785
msgid "Religious views"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:783
+#: ../../Zotlabs/Module/Profiles.php:786
msgid "Keywords used in directory listings"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:783
+#: ../../Zotlabs/Module/Profiles.php:786
msgid "Example: fishing photography software"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:786
+#: ../../Zotlabs/Module/Profiles.php:789
msgid "Musical interests"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:787
+#: ../../Zotlabs/Module/Profiles.php:790
msgid "Books, literature"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:788
+#: ../../Zotlabs/Module/Profiles.php:791
msgid "Television"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:789
+#: ../../Zotlabs/Module/Profiles.php:792
msgid "Film/Dance/Culture/Entertainment"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:790
+#: ../../Zotlabs/Module/Profiles.php:793
msgid "Hobbies/Interests"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:791
+#: ../../Zotlabs/Module/Profiles.php:794
msgid "Love/Romance"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:793
+#: ../../Zotlabs/Module/Profiles.php:796
msgid "School/Education"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:794
+#: ../../Zotlabs/Module/Profiles.php:797
msgid "Contact information and social networks"
msgstr ""
-#: ../../Zotlabs/Module/Profiles.php:795
+#: ../../Zotlabs/Module/Profiles.php:798
msgid "My other channels"
msgstr ""
@@ -13243,19 +13239,19 @@ msgstr ""
msgid "Remove this file"
msgstr ""
-#: ../../Zotlabs/Module/Rbmark.php:93
+#: ../../Zotlabs/Module/Rbmark.php:72
msgid "Select a bookmark folder"
msgstr ""
-#: ../../Zotlabs/Module/Rbmark.php:98
+#: ../../Zotlabs/Module/Rbmark.php:80
msgid "Save Bookmark"
msgstr ""
-#: ../../Zotlabs/Module/Rbmark.php:99
+#: ../../Zotlabs/Module/Rbmark.php:81
msgid "URL of bookmark"
msgstr ""
-#: ../../Zotlabs/Module/Rbmark.php:104
+#: ../../Zotlabs/Module/Rbmark.php:86
msgid "Or enter new bookmark folder name"
msgstr ""
@@ -13264,7 +13260,7 @@ msgid "Remote privacy information not available"
msgstr ""
#: ../../Zotlabs/Module/Lockview.php:144 ../../Zotlabs/Module/Lockview.php:203
-#: ../../Zotlabs/Module/Acl.php:123
+#: ../../Zotlabs/Module/Acl.php:124
msgctxt "acl"
msgid "Profile"
msgstr ""
@@ -13329,58 +13325,58 @@ msgstr ""
msgid "Failed to remove event"
msgstr ""
-#: ../../Zotlabs/Module/Go.php:21
+#: ../../Zotlabs/Module/Go.php:22
msgid "This page is available only to site members"
msgstr ""
-#: ../../Zotlabs/Module/Go.php:29
+#: ../../Zotlabs/Module/Go.php:30
msgid "What would you like to do?"
msgstr ""
-#: ../../Zotlabs/Module/Go.php:31
+#: ../../Zotlabs/Module/Go.php:32
msgid ""
"Please bookmark this page if you would like to return to it in the future"
msgstr ""
-#: ../../Zotlabs/Module/Go.php:35
+#: ../../Zotlabs/Module/Go.php:36
msgid "Upload a profile photo"
msgstr ""
-#: ../../Zotlabs/Module/Go.php:36
+#: ../../Zotlabs/Module/Go.php:37
msgid "Upload a cover photo"
msgstr ""
-#: ../../Zotlabs/Module/Go.php:37
+#: ../../Zotlabs/Module/Go.php:38
msgid "Edit your default profile"
msgstr ""
-#: ../../Zotlabs/Module/Go.php:39
+#: ../../Zotlabs/Module/Go.php:40
msgid "View the channel directory"
msgstr ""
-#: ../../Zotlabs/Module/Go.php:40
+#: ../../Zotlabs/Module/Go.php:41
msgid "View/edit your channel settings"
msgstr ""
-#: ../../Zotlabs/Module/Go.php:41
+#: ../../Zotlabs/Module/Go.php:42
msgid "View the site or project documentation"
msgstr ""
-#: ../../Zotlabs/Module/Go.php:42
+#: ../../Zotlabs/Module/Go.php:43
msgid "Visit your channel homepage"
msgstr ""
-#: ../../Zotlabs/Module/Go.php:43
+#: ../../Zotlabs/Module/Go.php:44
msgid ""
"View your connections and/or add somebody whose address you already know"
msgstr ""
-#: ../../Zotlabs/Module/Go.php:44
+#: ../../Zotlabs/Module/Go.php:45
msgid ""
"View your personal stream (this may be empty until you add some connections)"
msgstr ""
-#: ../../Zotlabs/Module/Go.php:52
+#: ../../Zotlabs/Module/Go.php:53
msgid "View the public stream. Warning: this content is not moderated"
msgstr ""
@@ -13441,130 +13437,130 @@ msgstr ""
msgid "min"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:84
+#: ../../Zotlabs/Module/Regate.php:85
msgid "Email resent"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:84
+#: ../../Zotlabs/Module/Regate.php:85
msgid "Email resend failed"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:109
+#: ../../Zotlabs/Module/Regate.php:110
msgid "Verification successful"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:153
+#: ../../Zotlabs/Module/Regate.php:154
msgid "Account successfull created"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:211
+#: ../../Zotlabs/Module/Regate.php:212
msgid "Channel successfull created"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:217
+#: ../../Zotlabs/Module/Regate.php:218
msgid "Automatic channel creation failed. Please create a channel."
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:229
+#: ../../Zotlabs/Module/Regate.php:230
msgid "Account creation error"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:241
+#: ../../Zotlabs/Module/Regate.php:242
msgid "Verify failed"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:246
+#: ../../Zotlabs/Module/Regate.php:247
msgid "Token verification failed"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:251
+#: ../../Zotlabs/Module/Regate.php:252
msgid "Request not inside time frame"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:257 ../../Zotlabs/Module/Regate.php:287
+#: ../../Zotlabs/Module/Regate.php:258 ../../Zotlabs/Module/Regate.php:288
msgid "Identity unknown"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:263
+#: ../../Zotlabs/Module/Regate.php:264
msgid "dId2 mistaken"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:291
+#: ../../Zotlabs/Module/Regate.php:292
msgid "Your Registration ID"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:304 ../../Zotlabs/Module/Regate.php:396
-#: ../../Zotlabs/Module/Regate.php:428
+#: ../../Zotlabs/Module/Regate.php:305 ../../Zotlabs/Module/Regate.php:397
+#: ../../Zotlabs/Module/Regate.php:429
msgid "Registration verification"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:311 ../../Zotlabs/Module/Regate.php:433
+#: ../../Zotlabs/Module/Regate.php:312 ../../Zotlabs/Module/Regate.php:434
msgid "Hold on, you can start verification in"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:312
+#: ../../Zotlabs/Module/Regate.php:313
msgid "Please remember your verification token for ID"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:314
+#: ../../Zotlabs/Module/Regate.php:315
msgid "Token validity"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:350
+#: ../../Zotlabs/Module/Regate.php:351
msgid "Resend email"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:355
+#: ../../Zotlabs/Module/Regate.php:356
msgid "Registration status"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:358
+#: ../../Zotlabs/Module/Regate.php:359
msgid "Verification successful!"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:359
+#: ../../Zotlabs/Module/Regate.php:360
msgid "Your login ID is"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:360
+#: ../../Zotlabs/Module/Regate.php:361
msgid ""
"After your account has been approved by our administrator you will be able "
"to login with your login ID and your provided password."
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:372
+#: ../../Zotlabs/Module/Regate.php:373
msgid "Registration request revoked"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:373
+#: ../../Zotlabs/Module/Regate.php:374
msgid "Sorry for any inconvience. Thank you for your response."
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:397
+#: ../../Zotlabs/Module/Regate.php:398
msgid "Please enter your verification token for ID"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:398 ../../Zotlabs/Module/Regate.php:425
+#: ../../Zotlabs/Module/Regate.php:399 ../../Zotlabs/Module/Regate.php:426
msgid "Please check your email!"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:408
+#: ../../Zotlabs/Module/Regate.php:409
msgid "Verification token"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:419
+#: ../../Zotlabs/Module/Regate.php:420
msgid "ID expired"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:434
+#: ../../Zotlabs/Module/Regate.php:435
msgid "You will require the verification token for ID"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:443
+#: ../../Zotlabs/Module/Regate.php:444
msgid "Unknown or expired ID"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:454
+#: ../../Zotlabs/Module/Regate.php:455
msgid "dId2 malformed"
msgstr ""
@@ -13572,434 +13568,434 @@ msgstr ""
msgid "Edit Layout"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:179
+#: ../../Zotlabs/Module/Setup.php:180
msgid "$Projectname Server - Setup"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:183
+#: ../../Zotlabs/Module/Setup.php:184
msgid "Could not connect to database."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:187
+#: ../../Zotlabs/Module/Setup.php:188
msgid ""
"Could not connect to specified site URL. Possible SSL certificate or DNS "
"issue."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:194
+#: ../../Zotlabs/Module/Setup.php:195
msgid "Could not create table."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:200
+#: ../../Zotlabs/Module/Setup.php:201
msgid "Your site database has been installed."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:206
+#: ../../Zotlabs/Module/Setup.php:207
msgid ""
"You may need to import the file \"install/schema_xxx.sql\" manually using a "
"database client."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:207 ../../Zotlabs/Module/Setup.php:271
-#: ../../Zotlabs/Module/Setup.php:796
+#: ../../Zotlabs/Module/Setup.php:208 ../../Zotlabs/Module/Setup.php:274
+#: ../../Zotlabs/Module/Setup.php:799
msgid "Please see the file \"install/INSTALL.txt\"."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:268
+#: ../../Zotlabs/Module/Setup.php:271
msgid "System check"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:273
+#: ../../Zotlabs/Module/Setup.php:276
msgid "Check again"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:294
+#: ../../Zotlabs/Module/Setup.php:297
msgid "Database connection"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:295
+#: ../../Zotlabs/Module/Setup.php:298
msgid ""
"In order to install $Projectname we need to know how to connect to your "
"database."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:296
+#: ../../Zotlabs/Module/Setup.php:299
msgid ""
"Please contact your hosting provider or site administrator if you have "
"questions about these settings."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:297
+#: ../../Zotlabs/Module/Setup.php:300
msgid ""
"The database you specify below should already exist. If it does not, please "
"create it before continuing."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:301
+#: ../../Zotlabs/Module/Setup.php:304
msgid "Database Server Name"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:301
+#: ../../Zotlabs/Module/Setup.php:304
msgid "Default is 127.0.0.1"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:302
+#: ../../Zotlabs/Module/Setup.php:305
msgid "Database Port"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:302
+#: ../../Zotlabs/Module/Setup.php:305
msgid "Communication port number - use 0 for default"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:303
+#: ../../Zotlabs/Module/Setup.php:306
msgid "Database Login Name"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:304
+#: ../../Zotlabs/Module/Setup.php:307
msgid "Database Login Password"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:305
+#: ../../Zotlabs/Module/Setup.php:308
msgid "Database Name"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:306
+#: ../../Zotlabs/Module/Setup.php:309
msgid "Database Type"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:308 ../../Zotlabs/Module/Setup.php:348
+#: ../../Zotlabs/Module/Setup.php:311 ../../Zotlabs/Module/Setup.php:351
msgid "Site administrator email address"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:308 ../../Zotlabs/Module/Setup.php:348
+#: ../../Zotlabs/Module/Setup.php:311 ../../Zotlabs/Module/Setup.php:351
msgid ""
"Your account email address must match this in order to use the web admin "
"panel."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:309 ../../Zotlabs/Module/Setup.php:350
+#: ../../Zotlabs/Module/Setup.php:312 ../../Zotlabs/Module/Setup.php:353
msgid "Website URL"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:309 ../../Zotlabs/Module/Setup.php:350
+#: ../../Zotlabs/Module/Setup.php:312 ../../Zotlabs/Module/Setup.php:353
msgid "Please use SSL (https) URL if available."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:310 ../../Zotlabs/Module/Setup.php:352
+#: ../../Zotlabs/Module/Setup.php:313 ../../Zotlabs/Module/Setup.php:355
msgid "Please select a default timezone for your website"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:337
+#: ../../Zotlabs/Module/Setup.php:340
msgid "Site settings"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:391
+#: ../../Zotlabs/Module/Setup.php:394
msgid "PHP version 8.0 or greater is required."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:392
+#: ../../Zotlabs/Module/Setup.php:395
msgid "PHP version"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:408
+#: ../../Zotlabs/Module/Setup.php:411
msgid "Could not find a command line version of PHP in the web server PATH."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:409
+#: ../../Zotlabs/Module/Setup.php:412
msgid ""
"If you don't have a command line version of PHP installed on server, you "
"will not be able to run background polling via cron."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:413
+#: ../../Zotlabs/Module/Setup.php:416
msgid "PHP executable path"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:413
+#: ../../Zotlabs/Module/Setup.php:416
msgid ""
"Enter full path to php executable. You can leave this blank to continue the "
"installation."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:418
+#: ../../Zotlabs/Module/Setup.php:421
msgid "Command line PHP"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:428
+#: ../../Zotlabs/Module/Setup.php:431
msgid ""
"Unable to check command line PHP, as shell_exec() is disabled. This is "
"required."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:432
+#: ../../Zotlabs/Module/Setup.php:435
msgid ""
"The command line version of PHP on your system does not have "
"\"register_argc_argv\" enabled."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:433
+#: ../../Zotlabs/Module/Setup.php:436
msgid "This is required for message delivery to work."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:436
+#: ../../Zotlabs/Module/Setup.php:439
msgid "PHP register_argc_argv"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:456
+#: ../../Zotlabs/Module/Setup.php:459
msgid ""
"This is not sufficient to upload larger images or files. You should be able "
"to upload at least 4 MB at once."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:458
+#: ../../Zotlabs/Module/Setup.php:461
#, php-format
msgid ""
"Your max allowed total upload size is set to %s. Maximum size of one file to "
"upload is set to %s. You are allowed to upload up to %d files at once."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:464
+#: ../../Zotlabs/Module/Setup.php:467
msgid "You can adjust these settings in the server php.ini file."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:466
+#: ../../Zotlabs/Module/Setup.php:469
msgid "PHP upload limits"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:489
+#: ../../Zotlabs/Module/Setup.php:492
msgid ""
"Error: the \"openssl_pkey_new\" function on this system is not able to "
"generate encryption keys"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:490
+#: ../../Zotlabs/Module/Setup.php:493
msgid ""
"If running under Windows, please see \"http://www.php.net/manual/en/openssl."
"installation.php\"."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:493
+#: ../../Zotlabs/Module/Setup.php:496
msgid "Generate encryption keys"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:497
+#: ../../Zotlabs/Module/Setup.php:500
msgid "Error: the sodium encryption library is not installed."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:499
+#: ../../Zotlabs/Module/Setup.php:502
msgid "Generate ed25519 encryption keys"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:504
+#: ../../Zotlabs/Module/Setup.php:507
msgid ""
"Error: one of \"bcmath\" or \"gmp\" (bigmath library) extensions are "
"required."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:506
+#: ../../Zotlabs/Module/Setup.php:509
msgid "Bigmath library (either bcmath or gmp)"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:523
+#: ../../Zotlabs/Module/Setup.php:526
msgid "libCurl PHP module"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:524
+#: ../../Zotlabs/Module/Setup.php:527
msgid "GD graphics PHP module"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:525
+#: ../../Zotlabs/Module/Setup.php:528
msgid "OpenSSL PHP module"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:526
+#: ../../Zotlabs/Module/Setup.php:529
msgid "PDO database PHP module"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:527
+#: ../../Zotlabs/Module/Setup.php:530
msgid "mb_string PHP module"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:528
+#: ../../Zotlabs/Module/Setup.php:531
msgid "xml PHP module"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:529
+#: ../../Zotlabs/Module/Setup.php:532
msgid "zip PHP module"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:530
+#: ../../Zotlabs/Module/Setup.php:533
msgid "intl PHP module"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:534 ../../Zotlabs/Module/Setup.php:536
+#: ../../Zotlabs/Module/Setup.php:537 ../../Zotlabs/Module/Setup.php:539
msgid "Apache mod_rewrite module"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:534
+#: ../../Zotlabs/Module/Setup.php:537
msgid ""
"Error: Apache webserver mod-rewrite module is required but not installed."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:540 ../../Zotlabs/Module/Setup.php:543
+#: ../../Zotlabs/Module/Setup.php:543 ../../Zotlabs/Module/Setup.php:546
msgid "exec"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:540
+#: ../../Zotlabs/Module/Setup.php:543
msgid ""
"Error: exec is required but is either not installed or has been disabled in "
"php.ini"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:546 ../../Zotlabs/Module/Setup.php:549
+#: ../../Zotlabs/Module/Setup.php:549 ../../Zotlabs/Module/Setup.php:552
msgid "shell_exec"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:546
+#: ../../Zotlabs/Module/Setup.php:549
msgid ""
"Error: shell_exec is required but is either not installed or has been "
"disabled in php.ini"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:554
+#: ../../Zotlabs/Module/Setup.php:557
msgid "Error: libCURL PHP module required but not installed."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:558
+#: ../../Zotlabs/Module/Setup.php:561
msgid ""
"Error: GD PHP module with JPEG support or ImageMagick graphics library "
"required but not installed."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:562
+#: ../../Zotlabs/Module/Setup.php:565
msgid "Error: openssl PHP module required but not installed."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:568
+#: ../../Zotlabs/Module/Setup.php:571
msgid ""
"Error: PDO database PHP module missing a driver for either mysql or pgsql."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:573
+#: ../../Zotlabs/Module/Setup.php:576
msgid "Error: PDO database PHP module required but not installed."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:577
+#: ../../Zotlabs/Module/Setup.php:580
msgid "Error: mb_string PHP module required but not installed."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:581
+#: ../../Zotlabs/Module/Setup.php:584
msgid "Error: xml PHP module required for DAV but not installed."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:585
+#: ../../Zotlabs/Module/Setup.php:588
msgid "Error: zip PHP module required but not installed."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:589
+#: ../../Zotlabs/Module/Setup.php:592
msgid "Error: intl PHP module required but not installed."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:608 ../../Zotlabs/Module/Setup.php:617
+#: ../../Zotlabs/Module/Setup.php:611 ../../Zotlabs/Module/Setup.php:620
msgid ".htconfig.php is writable"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:613
+#: ../../Zotlabs/Module/Setup.php:616
msgid ""
"The web installer needs to be able to create a file called \".htconfig.php\" "
"in the top folder of your web server and it is unable to do so."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:614
+#: ../../Zotlabs/Module/Setup.php:617
msgid ""
"This is most often a permission setting, as the web server may not be able "
"to write files in your folder - even if you can."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:615
+#: ../../Zotlabs/Module/Setup.php:618
msgid "Please see install/INSTALL.txt for additional information."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:631
+#: ../../Zotlabs/Module/Setup.php:634
msgid ""
"This software uses the Smarty3 template engine to render its web views. "
"Smarty3 compiles templates to PHP to speed up rendering."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:632
+#: ../../Zotlabs/Module/Setup.php:635
#, php-format
msgid ""
"In order to store these compiled templates, the web server needs to have "
"write access to the directory %s under the top level web folder."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:633 ../../Zotlabs/Module/Setup.php:654
+#: ../../Zotlabs/Module/Setup.php:636 ../../Zotlabs/Module/Setup.php:657
msgid ""
"Please ensure that the user that your web server runs as (e.g. www-data) has "
"write access to this folder."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:634
+#: ../../Zotlabs/Module/Setup.php:637
#, php-format
msgid ""
"Note: as a security measure, you should give the web server write access to "
"%s only--not the template files (.tpl) that it contains."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:637
+#: ../../Zotlabs/Module/Setup.php:640
#, php-format
msgid "%s is writable"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:653
+#: ../../Zotlabs/Module/Setup.php:656
msgid ""
"This software uses the store directory to save uploaded files. The web "
"server needs to have write access to the store directory under the top level "
"web folder"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:657
+#: ../../Zotlabs/Module/Setup.php:660
msgid "store is writable"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:689
+#: ../../Zotlabs/Module/Setup.php:692
msgid ""
"SSL certificate cannot be validated. Fix certificate or disable https access "
"to this site."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:690
+#: ../../Zotlabs/Module/Setup.php:693
msgid ""
"If you have https access to your website or allow connections to TCP port "
"443 (the https: port), you MUST use a browser-valid certificate. You MUST "
"NOT use self-signed certificates!"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:691
+#: ../../Zotlabs/Module/Setup.php:694
msgid ""
"This restriction is incorporated because public posts from you may for "
"example contain references to images on your own hub."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:692
+#: ../../Zotlabs/Module/Setup.php:695
msgid ""
"If your certificate is not recognized, members of other sites (who may "
"themselves have valid certificates) will get a warning message on their own "
"site complaining about security issues."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:693
+#: ../../Zotlabs/Module/Setup.php:696
msgid ""
"This can cause usability issues elsewhere (not just on your own site) so we "
"must insist on this requirement."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:694
+#: ../../Zotlabs/Module/Setup.php:697
msgid ""
"Providers are available that issue free certificates which are browser-valid."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:695
+#: ../../Zotlabs/Module/Setup.php:698
msgid ""
"If you are confident that the certificate is valid and signed by a trusted "
"authority, check to see if you have failed to install an intermediate cert. "
@@ -14007,32 +14003,32 @@ msgid ""
"server communications."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:697
+#: ../../Zotlabs/Module/Setup.php:700
msgid "SSL certificate validation"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:703
+#: ../../Zotlabs/Module/Setup.php:706
msgid ""
"Url rewrite in .htaccess is not working. Check your server configuration."
"Test: "
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:706
+#: ../../Zotlabs/Module/Setup.php:709
msgid "Url rewrite is working"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:719
+#: ../../Zotlabs/Module/Setup.php:722
msgid ""
"The database configuration file \".htconfig.php\" could not be written. "
"Please use the enclosed text to create a configuration file in your web "
"server root."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:794
+#: ../../Zotlabs/Module/Setup.php:797
msgid "<h1>What next?</h1>"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:795
+#: ../../Zotlabs/Module/Setup.php:798
msgid ""
"IMPORTANT: You will need to [manually] setup a scheduled task for the poller."
msgstr ""
@@ -14041,23 +14037,23 @@ msgstr ""
msgid "toggle full screen mode"
msgstr ""
-#: ../../Zotlabs/Module/Profperm.php:34 ../../Zotlabs/Module/Profperm.php:63
+#: ../../Zotlabs/Module/Profperm.php:35 ../../Zotlabs/Module/Profperm.php:64
msgid "Invalid profile identifier."
msgstr ""
-#: ../../Zotlabs/Module/Profperm.php:111
+#: ../../Zotlabs/Module/Profperm.php:112
msgid "Profile Visibility Editor"
msgstr ""
-#: ../../Zotlabs/Module/Profperm.php:115
+#: ../../Zotlabs/Module/Profperm.php:116
msgid "Click on a contact to add or remove."
msgstr ""
-#: ../../Zotlabs/Module/Profperm.php:124
+#: ../../Zotlabs/Module/Profperm.php:125
msgid "Visible To"
msgstr ""
-#: ../../Zotlabs/Module/Profperm.php:140
+#: ../../Zotlabs/Module/Profperm.php:141
#: ../../Zotlabs/Module/Connections.php:221
msgid "All Connections"
msgstr ""
@@ -14066,7 +14062,7 @@ msgstr ""
msgid "Language App"
msgstr ""
-#: ../../Zotlabs/Module/Rpost.php:217 ../../Zotlabs/Module/Editpost.php:113
+#: ../../Zotlabs/Module/Rpost.php:117 ../../Zotlabs/Module/Editpost.php:113
msgid "Edit post"
msgstr ""
@@ -14276,7 +14272,7 @@ msgstr ""
msgid "Default Addressbook"
msgstr ""
-#: ../../Zotlabs/Module/Dirsearch.php:31
+#: ../../Zotlabs/Module/Dirsearch.php:32
msgid "This directory server requires an access token"
msgstr ""
@@ -14312,74 +14308,74 @@ msgstr ""
msgid "Connected OAuth2 Apps"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Display.php:125
+#: ../../Zotlabs/Module/Settings/Display.php:126
#, php-format
msgid "%s - (Experimental)"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Display.php:182
+#: ../../Zotlabs/Module/Settings/Display.php:183
msgid "Display Settings"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Display.php:183
+#: ../../Zotlabs/Module/Settings/Display.php:184
msgid "Theme Settings"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Display.php:184
+#: ../../Zotlabs/Module/Settings/Display.php:185
msgid "Custom Theme Settings"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Display.php:185
+#: ../../Zotlabs/Module/Settings/Display.php:186
msgid "Content Settings"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Display.php:191
+#: ../../Zotlabs/Module/Settings/Display.php:192
msgid "Display Theme:"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Display.php:192
+#: ../../Zotlabs/Module/Settings/Display.php:193
msgid "Select scheme"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Display.php:194
+#: ../../Zotlabs/Module/Settings/Display.php:195
msgid "Preload images before rendering the page"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Display.php:194
+#: ../../Zotlabs/Module/Settings/Display.php:195
msgid ""
"The subjective page load time will be longer but the page will be ready when "
"displayed"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Display.php:195
+#: ../../Zotlabs/Module/Settings/Display.php:196
msgid "Enable user zoom on mobile devices"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Display.php:196
+#: ../../Zotlabs/Module/Settings/Display.php:197
msgid "Update browser every xx seconds"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Display.php:196
+#: ../../Zotlabs/Module/Settings/Display.php:197
msgid "Minimum of 10 seconds, no maximum"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Display.php:197
+#: ../../Zotlabs/Module/Settings/Display.php:198
msgid "Maximum number of conversations to load at any time:"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Display.php:197
+#: ../../Zotlabs/Module/Settings/Display.php:198
msgid "Maximum of 30 items"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Display.php:198
+#: ../../Zotlabs/Module/Settings/Display.php:199
msgid "Show emoticons (smilies) as images"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Display.php:199
+#: ../../Zotlabs/Module/Settings/Display.php:200
msgid "Link post titles to source"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Display.php:201
+#: ../../Zotlabs/Module/Settings/Display.php:202
msgid "Display new member quick links menu"
msgstr ""
@@ -14405,67 +14401,67 @@ msgstr ""
msgid "Channel Home Settings"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Account.php:21
+#: ../../Zotlabs/Module/Settings/Account.php:23
msgid "Not valid email."
msgstr ""
-#: ../../Zotlabs/Module/Settings/Account.php:24
+#: ../../Zotlabs/Module/Settings/Account.php:26
msgid "Protected email address. Cannot change to that email."
msgstr ""
-#: ../../Zotlabs/Module/Settings/Account.php:33
+#: ../../Zotlabs/Module/Settings/Account.php:35
msgid "System failure storing new email. Please try again."
msgstr ""
-#: ../../Zotlabs/Module/Settings/Account.php:51
+#: ../../Zotlabs/Module/Settings/Account.php:53
msgid "Password verification failed."
msgstr ""
-#: ../../Zotlabs/Module/Settings/Account.php:58
+#: ../../Zotlabs/Module/Settings/Account.php:60
msgid "Passwords do not match. Password unchanged."
msgstr ""
-#: ../../Zotlabs/Module/Settings/Account.php:62
+#: ../../Zotlabs/Module/Settings/Account.php:64
msgid "Empty passwords are not allowed. Password unchanged."
msgstr ""
-#: ../../Zotlabs/Module/Settings/Account.php:76
+#: ../../Zotlabs/Module/Settings/Account.php:78
msgid "Password changed."
msgstr ""
-#: ../../Zotlabs/Module/Settings/Account.php:78
+#: ../../Zotlabs/Module/Settings/Account.php:80
msgid "Password update failed. Please try again."
msgstr ""
-#: ../../Zotlabs/Module/Settings/Account.php:103
+#: ../../Zotlabs/Module/Settings/Account.php:105
msgid "Account Settings"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Account.php:104
+#: ../../Zotlabs/Module/Settings/Account.php:106
msgid "Current Password"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Account.php:105
+#: ../../Zotlabs/Module/Settings/Account.php:107
msgid "Enter New Password"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Account.php:106
+#: ../../Zotlabs/Module/Settings/Account.php:108
msgid "Confirm New Password"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Account.php:106
+#: ../../Zotlabs/Module/Settings/Account.php:108
msgid "Leave password fields blank unless changing"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Account.php:108
+#: ../../Zotlabs/Module/Settings/Account.php:110
msgid "Multi-Factor Authentication"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Account.php:109
+#: ../../Zotlabs/Module/Settings/Account.php:111
msgid "DId2 or Email Address:"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Account.php:112
+#: ../../Zotlabs/Module/Settings/Account.php:114
msgid "Remove this account including all its channels"
msgstr ""
@@ -14497,103 +14493,103 @@ msgstr ""
msgid "Channel Manager Settings"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:48
+#: ../../Zotlabs/Module/Settings/Privacy.php:49
msgid "Privacy settings updated."
msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:66
+#: ../../Zotlabs/Module/Settings/Privacy.php:67
msgid "Only those you specifically allow"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:67
+#: ../../Zotlabs/Module/Settings/Privacy.php:68
msgid "Approved connections"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:68
+#: ../../Zotlabs/Module/Settings/Privacy.php:69
msgid "Any connections"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:69
+#: ../../Zotlabs/Module/Settings/Privacy.php:70
msgid "Anybody on this website"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:70
+#: ../../Zotlabs/Module/Settings/Privacy.php:71
msgid "Anybody in this network"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:71
+#: ../../Zotlabs/Module/Settings/Privacy.php:72
msgid "Anybody authenticated"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:72
+#: ../../Zotlabs/Module/Settings/Privacy.php:73
msgid "Anybody on the internet"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:82
+#: ../../Zotlabs/Module/Settings/Privacy.php:83
msgid ""
"Advise: set to \"Anybody on the internet\" and use privacy groups to "
"restrict access"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:121
+#: ../../Zotlabs/Module/Settings/Privacy.php:122
msgid "Privacy Settings"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:126
+#: ../../Zotlabs/Module/Settings/Privacy.php:127
msgid "Advanced configuration"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:128
+#: ../../Zotlabs/Module/Settings/Privacy.php:129
msgid "Proceed with caution"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:129
+#: ../../Zotlabs/Module/Settings/Privacy.php:130
msgid ""
"Changing advanced configuration settings can impact your, and your contacts "
"channels functionality and security."
msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:130
+#: ../../Zotlabs/Module/Settings/Privacy.php:131
msgid "Accept the risk and continue"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:132
+#: ../../Zotlabs/Module/Settings/Privacy.php:133
msgid "Automatically approve new contacts"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:133
+#: ../../Zotlabs/Module/Settings/Privacy.php:134
msgid "Opt-out of search engine indexing"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:134
+#: ../../Zotlabs/Module/Settings/Privacy.php:135
msgid "Group actor"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:134
+#: ../../Zotlabs/Module/Settings/Privacy.php:135
msgid "Allow this channel to act as a forum"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:135
+#: ../../Zotlabs/Module/Settings/Privacy.php:136
msgid "Accept all messages which mention you"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:135
+#: ../../Zotlabs/Module/Settings/Privacy.php:136
msgid "This setting bypasses normal permissions"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:136
+#: ../../Zotlabs/Module/Settings/Privacy.php:137
msgid "Accept unsolicited comments for moderation"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:136
+#: ../../Zotlabs/Module/Settings/Privacy.php:137
msgid "Otherwise they will be silently dropped"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:137
+#: ../../Zotlabs/Module/Settings/Privacy.php:138
msgid "Enable OCAP access"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:137
+#: ../../Zotlabs/Module/Settings/Privacy.php:138
msgid "Grant limited posts the right to access linked private media"
msgstr ""
@@ -14617,271 +14613,271 @@ msgstr ""
msgid "Conversation Settings"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:105
-#: ../../Zotlabs/Module/Settings/Channel.php:217
+#: ../../Zotlabs/Module/Settings/Channel.php:106
+#: ../../Zotlabs/Module/Settings/Channel.php:218
msgid "Please select a channel role"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:194
+#: ../../Zotlabs/Module/Settings/Channel.php:195
msgid "Your channel address is"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:197
+#: ../../Zotlabs/Module/Settings/Channel.php:198
msgid "Your files/photos are accessible via WebDAV at"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:228
+#: ../../Zotlabs/Module/Settings/Channel.php:229
msgid "Channel Settings"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:235
+#: ../../Zotlabs/Module/Settings/Channel.php:236
msgid "Basic Settings"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:236
+#: ../../Zotlabs/Module/Settings/Channel.php:237
msgid "Channel timezone:"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:237
+#: ../../Zotlabs/Module/Settings/Channel.php:238
msgid "Default post location:"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:237
+#: ../../Zotlabs/Module/Settings/Channel.php:238
msgid "Geographical location to display on your posts"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:238
+#: ../../Zotlabs/Module/Settings/Channel.php:239
msgid "Use browser location"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:239
+#: ../../Zotlabs/Module/Settings/Channel.php:240
msgid "Adult content"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:239
+#: ../../Zotlabs/Module/Settings/Channel.php:240
msgid "This channel frequently or regularly publishes adult content"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:240
+#: ../../Zotlabs/Module/Settings/Channel.php:241
msgid "Maximum Friend Requests/Day:"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:240
+#: ../../Zotlabs/Module/Settings/Channel.php:241
msgid "May reduce spam activity"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:242
+#: ../../Zotlabs/Module/Settings/Channel.php:243
msgid "By default post a status message when:"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:243
+#: ../../Zotlabs/Module/Settings/Channel.php:244
msgid "accepting a friend request"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:244
+#: ../../Zotlabs/Module/Settings/Channel.php:245
msgid "joining a forum/community"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:245
+#: ../../Zotlabs/Module/Settings/Channel.php:246
msgid "making an <em>interesting</em> profile change"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:246
+#: ../../Zotlabs/Module/Settings/Channel.php:247
msgid "Send a notification email when:"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:247
+#: ../../Zotlabs/Module/Settings/Channel.php:248
msgid "You receive a connection request"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:248
+#: ../../Zotlabs/Module/Settings/Channel.php:249
msgid "Your connections are confirmed"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:249
+#: ../../Zotlabs/Module/Settings/Channel.php:250
msgid "Someone writes on your profile wall"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:250
+#: ../../Zotlabs/Module/Settings/Channel.php:251
msgid "Someone writes a followup comment"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:251
+#: ../../Zotlabs/Module/Settings/Channel.php:252
msgid "You receive a private message"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:252
+#: ../../Zotlabs/Module/Settings/Channel.php:253
msgid "You receive a friend suggestion"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:253
+#: ../../Zotlabs/Module/Settings/Channel.php:254
msgid "You are tagged in a post"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:254
+#: ../../Zotlabs/Module/Settings/Channel.php:255
msgid "You are poked/prodded/etc. in a post"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:255
+#: ../../Zotlabs/Module/Settings/Channel.php:256
msgid "Someone likes your post/comment"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:256
+#: ../../Zotlabs/Module/Settings/Channel.php:257
msgid "Show visual notifications including:"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:257
+#: ../../Zotlabs/Module/Settings/Channel.php:258
msgid "Unseen stream activity"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:258
+#: ../../Zotlabs/Module/Settings/Channel.php:259
msgid "Unseen channel activity"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:259
+#: ../../Zotlabs/Module/Settings/Channel.php:260
msgid "Unseen private messages"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:259
-#: ../../Zotlabs/Module/Settings/Channel.php:264
+#: ../../Zotlabs/Module/Settings/Channel.php:260
#: ../../Zotlabs/Module/Settings/Channel.php:265
#: ../../Zotlabs/Module/Settings/Channel.php:266
+#: ../../Zotlabs/Module/Settings/Channel.php:267
msgid "Recommended"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:260
+#: ../../Zotlabs/Module/Settings/Channel.php:261
msgid "Upcoming events"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:261
+#: ../../Zotlabs/Module/Settings/Channel.php:262
msgid "Events today"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:262
+#: ../../Zotlabs/Module/Settings/Channel.php:263
msgid "Upcoming birthdays"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:262
+#: ../../Zotlabs/Module/Settings/Channel.php:263
msgid "Not available in all themes"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:263
+#: ../../Zotlabs/Module/Settings/Channel.php:264
msgid "System (personal) notifications"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:264
+#: ../../Zotlabs/Module/Settings/Channel.php:265
msgid "System info messages"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:265
+#: ../../Zotlabs/Module/Settings/Channel.php:266
msgid "System critical alerts"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:266
+#: ../../Zotlabs/Module/Settings/Channel.php:267
msgid "New connections"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:267
+#: ../../Zotlabs/Module/Settings/Channel.php:268
msgid "System Registrations"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:268
+#: ../../Zotlabs/Module/Settings/Channel.php:269
msgid "Unseen shared files"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:269
+#: ../../Zotlabs/Module/Settings/Channel.php:270
msgid "Unseen public stream activity"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:270
+#: ../../Zotlabs/Module/Settings/Channel.php:271
msgid "Unseen likes and dislikes"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:271
+#: ../../Zotlabs/Module/Settings/Channel.php:272
msgid "Unseen forum posts"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:272
+#: ../../Zotlabs/Module/Settings/Channel.php:273
msgid "Email notification hub (hostname)"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:272
+#: ../../Zotlabs/Module/Settings/Channel.php:273
#, php-format
msgid ""
"If your channel is mirrored to multiple hubs, set this to your preferred "
"location. This will prevent duplicate email notifications. Example: %s"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:273
+#: ../../Zotlabs/Module/Settings/Channel.php:274
msgid "Show new wall posts, private messages and connections under Notices"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:274
+#: ../../Zotlabs/Module/Settings/Channel.php:275
msgid "Mark all notices of the thread read if a notice is clicked"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:274
+#: ../../Zotlabs/Module/Settings/Channel.php:275
msgid "If no, only the clicked notice will be marked read"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:275
+#: ../../Zotlabs/Module/Settings/Channel.php:276
msgid ""
"Desktop notifications are unavailable because the required browser "
"permission has not been granted"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:276
+#: ../../Zotlabs/Module/Settings/Channel.php:277
msgid "Grant permission"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:277
+#: ../../Zotlabs/Module/Settings/Channel.php:278
msgid "Notify me of events this many days in advance"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:277
+#: ../../Zotlabs/Module/Settings/Channel.php:278
msgid "Must be greater than 0"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:280
+#: ../../Zotlabs/Module/Settings/Channel.php:281
msgid "Default photo upload folder"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:280
#: ../../Zotlabs/Module/Settings/Channel.php:281
+#: ../../Zotlabs/Module/Settings/Channel.php:282
msgid "%Y - current year, %m - current month"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:281
+#: ../../Zotlabs/Module/Settings/Channel.php:282
msgid "Default file upload folder"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:283
+#: ../../Zotlabs/Module/Settings/Channel.php:284
msgid "Remove this channel."
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:284
+#: ../../Zotlabs/Module/Settings/Channel.php:285
msgid "Expire other channel content after this many days"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:284
+#: ../../Zotlabs/Module/Settings/Channel.php:285
msgid "0 or blank to use the website limit."
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:284
+#: ../../Zotlabs/Module/Settings/Channel.php:285
#, php-format
msgid "This website expires after %d days."
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:284
+#: ../../Zotlabs/Module/Settings/Channel.php:285
msgid "This website does not expire imported content."
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:284
+#: ../../Zotlabs/Module/Settings/Channel.php:285
msgid "The website limit takes precedence if lower than your limit."
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:285
#: ../../Zotlabs/Module/Settings/Channel.php:286
+#: ../../Zotlabs/Module/Settings/Channel.php:287
msgid ""
"Words one per line or #tags, $categories, /patterns/, lang=xx, lang!=xx - "
"leave blank to import all posts"
@@ -14961,11 +14957,11 @@ msgstr ""
msgid "Edit Block"
msgstr ""
-#: ../../Zotlabs/Module/Email_validation.php:36
+#: ../../Zotlabs/Module/Email_validation.php:37
msgid "Email Verification Required"
msgstr ""
-#: ../../Zotlabs/Module/Email_validation.php:37
+#: ../../Zotlabs/Module/Email_validation.php:38
#, php-format
msgid ""
"A verification token was sent to your email address [%s]. Enter that token "
@@ -14973,73 +14969,73 @@ msgid ""
"for delivery, and check your spam folder if you do not see the message."
msgstr ""
-#: ../../Zotlabs/Module/Email_validation.php:38
+#: ../../Zotlabs/Module/Email_validation.php:39
msgid "Resend Email"
msgstr ""
-#: ../../Zotlabs/Module/Email_validation.php:41
+#: ../../Zotlabs/Module/Email_validation.php:42
msgid "Validation token"
msgstr ""
-#: ../../Zotlabs/Module/Import.php:70
+#: ../../Zotlabs/Module/Import.php:71
msgid "Nothing to import."
msgstr ""
-#: ../../Zotlabs/Module/Import.php:86 ../../Zotlabs/Module/Import.php:100
+#: ../../Zotlabs/Module/Import.php:87 ../../Zotlabs/Module/Import.php:101
msgid "Unable to download data from old server"
msgstr ""
-#: ../../Zotlabs/Module/Import.php:163
+#: ../../Zotlabs/Module/Import.php:164
#, php-format
msgid "Your service plan only allows %d channels."
msgstr ""
-#: ../../Zotlabs/Module/Import.php:190
+#: ../../Zotlabs/Module/Import.php:191
msgid "No channel. Import failed."
msgstr ""
-#: ../../Zotlabs/Module/Import.php:557
+#: ../../Zotlabs/Module/Import.php:562
msgid ""
"Automatic content and files import was not possible due to API version "
"incompatiblity. Please import content and files manually!"
msgstr ""
-#: ../../Zotlabs/Module/Import.php:585
+#: ../../Zotlabs/Module/Import.php:590
msgid "You must be logged in to use this feature."
msgstr ""
-#: ../../Zotlabs/Module/Import.php:592
+#: ../../Zotlabs/Module/Import.php:597
msgid "Channel Import"
msgstr ""
-#: ../../Zotlabs/Module/Import.php:593
+#: ../../Zotlabs/Module/Import.php:598
msgid ""
"Use this form to import an existing channel from a different server/hub. You "
"may retrieve the channel identity from the old server/hub via the network or "
"provide an export file."
msgstr ""
-#: ../../Zotlabs/Module/Import.php:595
+#: ../../Zotlabs/Module/Import.php:600
msgid "Or provide the old server/hub details"
msgstr ""
-#: ../../Zotlabs/Module/Import.php:597
+#: ../../Zotlabs/Module/Import.php:602
msgid "Your old identity address (xyz@example.com)"
msgstr ""
-#: ../../Zotlabs/Module/Import.php:598
+#: ../../Zotlabs/Module/Import.php:603
msgid "Your old login email address"
msgstr ""
-#: ../../Zotlabs/Module/Import.php:599
+#: ../../Zotlabs/Module/Import.php:604
msgid "Your old login password"
msgstr ""
-#: ../../Zotlabs/Module/Import.php:600
+#: ../../Zotlabs/Module/Import.php:605
msgid "Import your items and files (limited by available memory)"
msgstr ""
-#: ../../Zotlabs/Module/Import.php:602
+#: ../../Zotlabs/Module/Import.php:607
msgid ""
"For either option, please choose whether to make this hub your new primary "
"address, or whether your old location should continue this role. You will be "
@@ -15047,31 +15043,31 @@ msgid ""
"location for files, photos, and media."
msgstr ""
-#: ../../Zotlabs/Module/Import.php:604
+#: ../../Zotlabs/Module/Import.php:609
msgid "Make this hub my primary location"
msgstr ""
-#: ../../Zotlabs/Module/Import.php:605
+#: ../../Zotlabs/Module/Import.php:610
msgid "Move this channel (disable all previous locations)"
msgstr ""
-#: ../../Zotlabs/Module/Import.php:606
+#: ../../Zotlabs/Module/Import.php:611
msgid "Use this channel nickname instead of the one provided"
msgstr ""
-#: ../../Zotlabs/Module/Import.php:606
+#: ../../Zotlabs/Module/Import.php:611
msgid ""
"Leave blank to keep your existing channel nickname. You will be randomly "
"assigned a similar nickname if either name is already allocated on this site."
msgstr ""
-#: ../../Zotlabs/Module/Import.php:608
+#: ../../Zotlabs/Module/Import.php:613
msgid ""
"This process may take several minutes to complete. Please submit the form "
"only once and leave this page open until finished."
msgstr ""
-#: ../../Zotlabs/Module/Acl.php:370
+#: ../../Zotlabs/Module/Acl.php:371
msgid "network"
msgstr ""
diff --git a/util/service_class b/util/service_class
index b8a1f2386..afad4c709 100755
--- a/util/service_class
+++ b/util/service_class
@@ -7,10 +7,12 @@ require_once('include/cli_startup.php');
cli_startup();
+use Zotlabs\Lib\Config;
+
if($argc > 3) {
- $d = get_config('service_class', $argv[1]);
+ $d = Config::Get('service_class', $argv[1]);
$d[$argv[2]] = $argv[3];
- set_config('service_class', $argv[1], $d);
+ Config::Set('service_class', $argv[1], $d);
echo 'Updated service class "' . $argv[1] . '" service "' . $argv[2] . '" to ' . $argv[3] . "\n";
}
@@ -24,7 +26,7 @@ if($argc == 3) {
);
if(!$r)
die('could not find channel');
-
+
$acct = intval($r[0]['channel_account_id']);
} else {
exit();
@@ -34,28 +36,28 @@ if($argc == 3) {
);
if(!$r)
die('could not find account');
-
+
$c = q('SELECT channel_address FROM channel WHERE channel_account_id=%d',
intval($acct)
);
-
+
echo "Account $acct: ";
-
+
foreach($c as $chan)
echo $chan['channel_address'] . ', ';
-
+
echo "\n\033[1mProperty Old\t\tNew\033[0m\n";
-
+
if(empty($r[0]['account_service_class'])) {
$oclass = 'None';
$old = false;
} else {
$oclass = $r[0]['account_service_class'];
- $old = get_config('service_class', $oclass);
+ $old = Config::Get('service_class', $oclass);
}
echo "service_class $oclass\t\t\033[1m" . $argv[2] . "\033[0m\n";
-
- $new = get_config('service_class', $argv[2]);
+
+ $new = Config::Get('service_class', $argv[2]);
foreach(array('photo_upload_limit','total_items','total_pages','total_identities','total_channels','total_feeds','attach_upload_limit','minimum_feedcheck_minutes','chatrooms','chatters_inroom','access_tokens') as $prop) {
echo $prop . str_repeat(' ',26 - strlen($prop)) . (($old && $old[$prop]) ? $old[$prop] : 'unlimited') . "\t\t\033[1m" . (($new && $new[$prop]) ? $new[$prop] : 'unlimited') . "\033[0m\n";
}
@@ -67,7 +69,7 @@ if($argc == 3) {
}
if($r == 'n')
die('no update done');
-
+
$r = q("UPDATE account SET account_service_class='%s' WHERE account_id=%d",
dbesc($argv[2]),
intval($acct)
@@ -77,11 +79,11 @@ if($argc == 3) {
} else {
echo "failed\n";
}
-}
+}
if($argc == 2) {
- $d = get_config('service_class', $argv[1]);
+ $d = Config::Get('service_class', $argv[1]);
echo $argv[1] . ":\n";
foreach($d as $k => $v) {
echo "$k = $v\n";
@@ -89,7 +91,7 @@ if($argc == 2) {
}
if($argc == 1) {
- load_config('service_class');
+ Config::Load('service_class');
if(is_array(App::$config['service_class']) && App::$config['service_class']) {
foreach(App::$config['service_class'] as $class=>$props) {
echo "$class:\n";
@@ -106,4 +108,4 @@ if($argc == 1) {
}
}
}
-} \ No newline at end of file
+}
diff --git a/util/storageconv b/util/storageconv
index 676425038..fe12137a3 100755
--- a/util/storageconv
+++ b/util/storageconv
@@ -18,6 +18,7 @@ require_once('include/cli_startup.php');
cli_startup();
+use Zotlabs\Lib\Config;
use Zotlabs\Lib\Hashpath;
if($argc == 1) {
@@ -26,8 +27,8 @@ if($argc == 1) {
}
if($argc == 2) {
-
- $storage = (intval(get_config('system','photo_storage_type', 1)) > 0 ? 1 : 0);
+
+ $storage = (intval(Config::Get('system','photo_storage_type', 1)) > 0 ? 1 : 0);
echo 'Current storage set to: ' . ($storage ? 'filesystem' : 'SQL database') . PHP_EOL;
switch($argv[1]) {
case 'stats':
@@ -38,14 +39,14 @@ if($argc == 2) {
$xx = intval($x[0]['qty']);
$x = q("SELECT COUNT(resource_id) AS qty FROM photo WHERE photo_usage IN (1, 2)");
echo 'Imported profiles thumbnails: ' . $x[0]['qty'] . PHP_EOL;
- $xx += intval($x[0]['qty']);
+ $xx += intval($x[0]['qty']);
echo 'Thumbnails total: ' . $xx . PHP_EOL;
$x = q("SELECT COUNT(id) AS qty FROM photo WHERE os_storage != %d AND imgscale > 0",
$storage
);
echo 'Thumbnails to convert: ' . $x[0]['qty'] . PHP_EOL;
break;
-
+
case 'fs':
if($storage == 0) {
echo 'Please set system.photo_storage_type to 1 before move thumbnails to filesystem storage' . PHP_EOL;
@@ -101,7 +102,7 @@ if($argc == 2) {
}
echo $i . PHP_EOL . 'Total thumbnails processed: ' . $i;
break;
-
+
case 'db':
if($storage == 1) {
echo 'Please set system.photo_storage_type to 0 before move thumbnails to SQL database storage' . PHP_EOL;
@@ -119,15 +120,15 @@ if($argc == 2) {
$x = q("SELECT id, uid, resource_id, content, imgscale FROM photo WHERE id > %d AND os_storage = 1 AND imgscale > 0 ORDER BY id LIMIT 10",
intval($cur_id)
);
-
+
if($x) {
foreach($x as $xx) {
-
+
$filename = dbunescbin($xx['content']);
$content = file_get_contents($filename);
if($content) {
-
+
$z = q("UPDATE photo SET content = '%s', os_storage = 0 WHERE id = %d",
dbescbin($content),
intval($xx['id'])
@@ -136,7 +137,7 @@ if($argc == 2) {
echo PHP_EOL . 'Failed to update stored file metadata ' . $filename . PHP_EOL;
continue;
}
-
+
@unlink($filename);
}
else
@@ -152,7 +153,7 @@ if($argc == 2) {
}
echo $i . PHP_EOL . 'Total files processed: ' . $i;
break;
-
+
default:
usage();
return;
diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php
index 9df6511aa..69ec2d8ca 100644
--- a/vendor/composer/autoload_classmap.php
+++ b/vendor/composer/autoload_classmap.php
@@ -1312,6 +1312,7 @@ return array(
'Zotlabs\\Lib\\ThreadItem' => $baseDir . '/Zotlabs/Lib/ThreadItem.php',
'Zotlabs\\Lib\\ThreadListener' => $baseDir . '/Zotlabs/Lib/ThreadListener.php',
'Zotlabs\\Lib\\ThreadStream' => $baseDir . '/Zotlabs/Lib/ThreadStream.php',
+ 'Zotlabs\\Lib\\Traits\\HelpHelperTrait' => $baseDir . '/Zotlabs/Lib/Traits/HelpHelperTrait.php',
'Zotlabs\\Lib\\Verify' => $baseDir . '/Zotlabs/Lib/Verify.php',
'Zotlabs\\Lib\\Webfinger' => $baseDir . '/Zotlabs/Lib/Webfinger.php',
'Zotlabs\\Lib\\XConfig' => $baseDir . '/Zotlabs/Lib/XConfig.php',
@@ -1512,8 +1513,6 @@ return array(
'Zotlabs\\Module\\Tasks' => $baseDir . '/Zotlabs/Module/Tasks.php',
'Zotlabs\\Module\\Theme_info' => $baseDir . '/Zotlabs/Module/Theme_info.php',
'Zotlabs\\Module\\Thing' => $baseDir . '/Zotlabs/Module/Thing.php',
- 'Zotlabs\\Module\\Toggle_mobile' => $baseDir . '/Zotlabs/Module/Toggle_mobile.php',
- 'Zotlabs\\Module\\Toggle_safesearch' => $baseDir . '/Zotlabs/Module/Toggle_safesearch.php',
'Zotlabs\\Module\\Token' => $baseDir . '/Zotlabs/Module/Token.php',
'Zotlabs\\Module\\Tokens' => $baseDir . '/Zotlabs/Module/Tokens.php',
'Zotlabs\\Module\\Totp_check' => $baseDir . '/Zotlabs/Module/Totp_check.php',
diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php
index d6f2c2f9d..1b958f6a8 100644
--- a/vendor/composer/autoload_static.php
+++ b/vendor/composer/autoload_static.php
@@ -1559,6 +1559,7 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d
'Zotlabs\\Lib\\ThreadItem' => __DIR__ . '/../..' . '/Zotlabs/Lib/ThreadItem.php',
'Zotlabs\\Lib\\ThreadListener' => __DIR__ . '/../..' . '/Zotlabs/Lib/ThreadListener.php',
'Zotlabs\\Lib\\ThreadStream' => __DIR__ . '/../..' . '/Zotlabs/Lib/ThreadStream.php',
+ 'Zotlabs\\Lib\\Traits\\HelpHelperTrait' => __DIR__ . '/../..' . '/Zotlabs/Lib/Traits/HelpHelperTrait.php',
'Zotlabs\\Lib\\Verify' => __DIR__ . '/../..' . '/Zotlabs/Lib/Verify.php',
'Zotlabs\\Lib\\Webfinger' => __DIR__ . '/../..' . '/Zotlabs/Lib/Webfinger.php',
'Zotlabs\\Lib\\XConfig' => __DIR__ . '/../..' . '/Zotlabs/Lib/XConfig.php',
@@ -1759,8 +1760,6 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d
'Zotlabs\\Module\\Tasks' => __DIR__ . '/../..' . '/Zotlabs/Module/Tasks.php',
'Zotlabs\\Module\\Theme_info' => __DIR__ . '/../..' . '/Zotlabs/Module/Theme_info.php',
'Zotlabs\\Module\\Thing' => __DIR__ . '/../..' . '/Zotlabs/Module/Thing.php',
- 'Zotlabs\\Module\\Toggle_mobile' => __DIR__ . '/../..' . '/Zotlabs/Module/Toggle_mobile.php',
- 'Zotlabs\\Module\\Toggle_safesearch' => __DIR__ . '/../..' . '/Zotlabs/Module/Toggle_safesearch.php',
'Zotlabs\\Module\\Token' => __DIR__ . '/../..' . '/Zotlabs/Module/Token.php',
'Zotlabs\\Module\\Tokens' => __DIR__ . '/../..' . '/Zotlabs/Module/Tokens.php',
'Zotlabs\\Module\\Totp_check' => __DIR__ . '/../..' . '/Zotlabs/Module/Totp_check.php',
diff --git a/view/css/mod_help.css b/view/css/mod_help.css
index 1799493b8..3c3bc195f 100644
--- a/view/css/mod_help.css
+++ b/view/css/mod_help.css
@@ -1,11 +1,11 @@
.doco-list-group-item > a {
font-weight: bold;
-}
+}
.sub-menu {
margin: 3px 0px 10px 10px;
}
-
+
#doco-content h3 {
border-bottom: #ccc 3px solid;
padding-bottom: 0.3em;
@@ -24,6 +24,3 @@
padding-left: 20px;
}
-#doco-side-toc {
- padding-top: 10px;
-}
diff --git a/view/es-es/hmessages.po b/view/es-es/hmessages.po
index 3af7a30ab..20afa3ffc 100644
--- a/view/es-es/hmessages.po
+++ b/view/es-es/hmessages.po
@@ -14,7 +14,7 @@ msgid ""
msgstr ""
"Project-Id-Version: hubzilla\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-11-10 08:15+0000\n"
+"POT-Creation-Date: 2024-03-15 18:45+0000\n"
"PO-Revision-Date: 2015-09-27 06:48+0000\n"
"Last-Translator: Manuel Jiménez Friaza <mjfriaza@disroot.org>, 2017-2024\n"
"Language-Team: Spanish (Spain) (http://app.transifex.com/Friendica/hubzilla/language/es_ES/)\n"
@@ -29,22 +29,23 @@ msgstr ""
msgid "Source channel not found."
msgstr "No se ha encontrado el canal de origen."
-#: ../../view/theme/redbasic/php/config.php:15 ../../include/text.php:3509
+#: ../../view/theme/redbasic/php/config.php:18 ../../include/text.php:3514
#: ../../addon/cart/submodules/orderoptions.php:335
#: ../../addon/cart/submodules/orderoptions.php:359
#: ../../addon/cart/submodules/orderoptions.php:435
#: ../../addon/cart/submodules/orderoptions.php:459
-#: ../../Zotlabs/Module/Admin/Site.php:245
+#: ../../Zotlabs/Module/Admin/Site.php:231
msgid "Default"
msgstr "Predeterminado"
-#: ../../view/theme/redbasic/php/config.php:16
#: ../../view/theme/redbasic/php/config.php:19
+#: ../../view/theme/redbasic/php/config.php:22
msgid "Focus (Hubzilla default)"
msgstr "Focus (predefinido)"
-#: ../../view/theme/redbasic/php/config.php:98 ../../include/js_strings.php:23
-#: ../../addon/irc/irc.php:45 ../../addon/smileybutton/Mod_Smileybutton.php:53
+#: ../../view/theme/redbasic/php/config.php:188
+#: ../../include/js_strings.php:23 ../../addon/irc/irc.php:45
+#: ../../addon/smileybutton/Mod_Smileybutton.php:53
#: ../../addon/socialauth/Mod_SocialAuth.php:341
#: ../../addon/hubwall/hubwall.php:95
#: ../../addon/openclipatar/openclipatar.php:54
@@ -54,14 +55,14 @@ msgstr "Focus (predefinido)"
#: ../../addon/ijpost/Mod_Ijpost.php:72 ../../addon/redred/Mod_Redred.php:88
#: ../../addon/startpage/Mod_Startpage.php:71
#: ../../addon/libertree/Mod_Libertree.php:68 ../../addon/logrot/logrot.php:35
-#: ../../addon/pubcrawl/Mod_Pubcrawl.php:62
+#: ../../addon/pubcrawl/Mod_Pubcrawl.php:61
#: ../../addon/dwpost/Mod_Dwpost.php:78 ../../addon/diaspora/diaspora.php:90
#: ../../addon/diaspora/Mod_Diaspora.php:101
#: ../../addon/fuzzloc/Mod_Fuzzloc.php:54
#: ../../addon/mailtest/mailtest.php:100 ../../addon/nsfw/Mod_Nsfw.php:59
#: ../../addon/pumpio/Mod_Pumpio.php:113 ../../addon/wppost/Mod_Wppost.php:107
#: ../../addon/wiki/Mod_Wiki.php:218 ../../addon/wiki/Mod_Wiki.php:907
-#: ../../addon/wiki/Widget/Wiki_pages.php:69 ../../addon/xmpp/Mod_Xmpp.php:70
+#: ../../addon/wiki/Widget/Wiki_pages.php:72 ../../addon/xmpp/Mod_Xmpp.php:70
#: ../../addon/statusnet/statusnet.php:602
#: ../../addon/statusnet/Mod_Statusnet.php:191
#: ../../addon/statusnet/Mod_Statusnet.php:249
@@ -73,7 +74,7 @@ msgstr "Focus (predefinido)"
#: ../../addon/cart/submodules/manualcat.php:248
#: ../../addon/cart/submodules/orderoptions.php:312
#: ../../addon/cart/submodules/orderoptions.php:412
-#: ../../addon/cart/cart.php:1425 ../../addon/cart/Settings/Cart.php:132
+#: ../../addon/cart/cart.php:1424 ../../addon/cart/Settings/Cart.php:132
#: ../../addon/cart/Settings/Cart.php:142
#: ../../addon/twitter/Mod_Twitter.php:182
#: ../../addon/redfiles/redfiles.php:124
@@ -88,16 +89,16 @@ msgstr "Focus (predefinido)"
#: ../../addon/rtof/Mod_Rtof.php:70 ../../addon/nofed/Mod_Nofed.php:51
#: ../../addon/photocache/Mod_Photocache.php:63
#: ../../addon/likebanner/likebanner.php:57
-#: ../../Zotlabs/Lib/ThreadItem.php:832 ../../Zotlabs/Storage/Browser.php:385
+#: ../../Zotlabs/Lib/ThreadItem.php:862 ../../Zotlabs/Storage/Browser.php:385
#: ../../Zotlabs/Module/Oauth.php:109
#: ../../Zotlabs/Module/Import_items.php:125
-#: ../../Zotlabs/Module/Thing.php:328 ../../Zotlabs/Module/Thing.php:381
+#: ../../Zotlabs/Module/Thing.php:357 ../../Zotlabs/Module/Thing.php:409
#: ../../Zotlabs/Module/Tokens.php:294 ../../Zotlabs/Module/Pdledit.php:137
#: ../../Zotlabs/Module/Connect.php:107
#: ../../Zotlabs/Module/Filestorage.php:208
-#: ../../Zotlabs/Module/Contactedit.php:429
-#: ../../Zotlabs/Module/Contactedit.php:462 ../../Zotlabs/Module/Mood.php:156
-#: ../../Zotlabs/Module/Pconfig.php:117 ../../Zotlabs/Module/Appman.php:220
+#: ../../Zotlabs/Module/Contactedit.php:415
+#: ../../Zotlabs/Module/Contactedit.php:448
+#: ../../Zotlabs/Module/Pconfig.php:117 ../../Zotlabs/Module/Appman.php:230
#: ../../Zotlabs/Module/Connedit.php:714 ../../Zotlabs/Module/Defperms.php:262
#: ../../Zotlabs/Module/Locs.php:125
#: ../../Zotlabs/Module/Admin/Accounts.php:309
@@ -108,19 +109,18 @@ msgstr "Focus (predefinido)"
#: ../../Zotlabs/Module/Admin/Channels.php:147
#: ../../Zotlabs/Module/Admin/Account_edit.php:73
#: ../../Zotlabs/Module/Admin/Logs.php:84
-#: ../../Zotlabs/Module/Admin/Site.php:415
+#: ../../Zotlabs/Module/Admin/Site.php:401
#: ../../Zotlabs/Module/Admin/Security.php:129
-#: ../../Zotlabs/Module/Poke.php:199 ../../Zotlabs/Module/Affinity.php:84
-#: ../../Zotlabs/Module/Permcats.php:257 ../../Zotlabs/Module/Xchan.php:15
-#: ../../Zotlabs/Module/Group.php:150 ../../Zotlabs/Module/Group.php:159
-#: ../../Zotlabs/Module/Invite.php:563 ../../Zotlabs/Module/Mitem.php:259
-#: ../../Zotlabs/Module/Photos.php:1056 ../../Zotlabs/Module/Photos.php:1095
-#: ../../Zotlabs/Module/Photos.php:1208 ../../Zotlabs/Module/Sources.php:123
-#: ../../Zotlabs/Module/Sources.php:160 ../../Zotlabs/Module/Profiles.php:739
-#: ../../Zotlabs/Module/Chat.php:208 ../../Zotlabs/Module/Chat.php:247
-#: ../../Zotlabs/Module/Regate.php:407 ../../Zotlabs/Module/Setup.php:316
-#: ../../Zotlabs/Module/Setup.php:356 ../../Zotlabs/Module/Editpost.php:88
-#: ../../Zotlabs/Module/Oauth2.php:114
+#: ../../Zotlabs/Module/Affinity.php:84 ../../Zotlabs/Module/Permcats.php:257
+#: ../../Zotlabs/Module/Xchan.php:15 ../../Zotlabs/Module/Group.php:150
+#: ../../Zotlabs/Module/Group.php:159 ../../Zotlabs/Module/Invite.php:563
+#: ../../Zotlabs/Module/Mitem.php:259 ../../Zotlabs/Module/Photos.php:1056
+#: ../../Zotlabs/Module/Photos.php:1095 ../../Zotlabs/Module/Photos.php:1208
+#: ../../Zotlabs/Module/Sources.php:123 ../../Zotlabs/Module/Sources.php:160
+#: ../../Zotlabs/Module/Profiles.php:735 ../../Zotlabs/Module/Chat.php:208
+#: ../../Zotlabs/Module/Chat.php:247 ../../Zotlabs/Module/Regate.php:407
+#: ../../Zotlabs/Module/Setup.php:316 ../../Zotlabs/Module/Setup.php:356
+#: ../../Zotlabs/Module/Editpost.php:88 ../../Zotlabs/Module/Oauth2.php:114
#: ../../Zotlabs/Module/Settings/Display.php:187
#: ../../Zotlabs/Module/Settings/Network.php:62
#: ../../Zotlabs/Module/Settings/Channel_home.php:91
@@ -143,36 +143,64 @@ msgstr "Focus (predefinido)"
msgid "Submit"
msgstr "Enviar"
-#: ../../view/theme/redbasic/php/config.php:102
+#: ../../view/theme/redbasic/php/config.php:192
msgid "Theme settings"
msgstr "Ajustes del tema"
-#: ../../view/theme/redbasic/php/config.php:103
+#: ../../view/theme/redbasic/php/config.php:193
msgid "Dark style"
msgstr "Estilo oscuro"
-#: ../../view/theme/redbasic/php/config.php:104
+#: ../../view/theme/redbasic/php/config.php:194
msgid "Light style"
msgstr "Estilo claro"
-#: ../../view/theme/redbasic/php/config.php:105
+#: ../../view/theme/redbasic/php/config.php:195
msgid "Common settings"
msgstr "Ajustes comunes"
-#: ../../view/theme/redbasic/php/config.php:106
+#: ../../view/theme/redbasic/php/config.php:196
+msgid "Primary theme color"
+msgstr "Color del tema principal"
+
+#: ../../view/theme/redbasic/php/config.php:196
+#: ../../view/theme/redbasic/php/config.php:197
+#: ../../view/theme/redbasic/php/config.php:198
+#: ../../view/theme/redbasic/php/config.php:199
+#: ../../view/theme/redbasic/php/config.php:200
+msgid "Current color, leave empty for default"
+msgstr "Color actual, dejar vacío por defecto"
+
+#: ../../view/theme/redbasic/php/config.php:197
+msgid "Success theme color"
+msgstr "Éxito en el color del tema"
+
+#: ../../view/theme/redbasic/php/config.php:198
+msgid "Info theme color"
+msgstr "Información del color del tema"
+
+#: ../../view/theme/redbasic/php/config.php:199
+msgid "Warning theme color"
+msgstr "Advertencia sobre el color del tema"
+
+#: ../../view/theme/redbasic/php/config.php:200
+msgid "Danger theme color"
+msgstr "Peligro en el color del tema"
+
+#: ../../view/theme/redbasic/php/config.php:201
msgid "Default to dark mode"
msgstr "Modo oscuro por defecto"
-#: ../../view/theme/redbasic/php/config.php:106
-#: ../../view/theme/redbasic/php/config.php:107
-#: ../../view/theme/redbasic/php/config.php:108
-#: ../../view/theme/redbasic/php/config.php:124
-#: ../../include/conversation.php:1492
+#: ../../view/theme/redbasic/php/config.php:201
+#: ../../view/theme/redbasic/php/config.php:202
+#: ../../view/theme/redbasic/php/config.php:203
+#: ../../view/theme/redbasic/php/config.php:215
+#: ../../include/conversation.php:1265
#: ../../addon/smileybutton/Mod_Smileybutton.php:42
#: ../../addon/socialauth/Mod_SocialAuth.php:218
#: ../../addon/ijpost/Mod_Ijpost.php:61 ../../addon/redred/Mod_Redred.php:61
#: ../../addon/libertree/Mod_Libertree.php:57
-#: ../../addon/pubcrawl/Mod_Pubcrawl.php:42
+#: ../../addon/pubcrawl/Mod_Pubcrawl.php:45
#: ../../addon/dwpost/Mod_Dwpost.php:59 ../../addon/dwpost/Mod_Dwpost.php:63
#: ../../addon/diaspora/Mod_Diaspora.php:70
#: ../../addon/pumpio/Mod_Pumpio.php:92 ../../addon/pumpio/Mod_Pumpio.php:96
@@ -201,26 +229,26 @@ msgstr "Modo oscuro por defecto"
#: ../../addon/cart/submodules/orderoptions.php:362
#: ../../addon/cart/submodules/orderoptions.php:438
#: ../../addon/cart/submodules/orderoptions.php:462
-#: ../../addon/cart/cart.php:1419 ../../addon/cart/Settings/Cart.php:61
+#: ../../addon/cart/cart.php:1418 ../../addon/cart/Settings/Cart.php:61
#: ../../addon/cart/Settings/Cart.php:73
#: ../../addon/twitter/Mod_Twitter.php:160
#: ../../addon/twitter/Mod_Twitter.php:169
#: ../../addon/content_import/Mod_content_import.php:135
#: ../../addon/content_import/Mod_content_import.php:136
#: ../../addon/rtof/Mod_Rtof.php:47 ../../addon/nofed/Mod_Nofed.php:40
-#: ../../boot.php:1753 ../../Zotlabs/Lib/Libzotdir.php:165
+#: ../../boot.php:1751 ../../Zotlabs/Lib/Libzotdir.php:165
#: ../../Zotlabs/Lib/Libzotdir.php:166 ../../Zotlabs/Lib/Libzotdir.php:168
#: ../../Zotlabs/Storage/Browser.php:309 ../../Zotlabs/Storage/Browser.php:310
#: ../../Zotlabs/Storage/Browser.php:311 ../../Zotlabs/Storage/Browser.php:392
#: ../../Zotlabs/Storage/Browser.php:394 ../../Zotlabs/Storage/Browser.php:558
#: ../../Zotlabs/Module/Filestorage.php:203
#: ../../Zotlabs/Module/Filestorage.php:211
-#: ../../Zotlabs/Module/Contactedit.php:284
-#: ../../Zotlabs/Module/Contactedit.php:329
+#: ../../Zotlabs/Module/Contactedit.php:270
+#: ../../Zotlabs/Module/Contactedit.php:315
#: ../../Zotlabs/Module/Register.php:512 ../../Zotlabs/Module/Connedit.php:622
#: ../../Zotlabs/Module/Defperms.php:195 ../../Zotlabs/Module/Api.php:99
#: ../../Zotlabs/Module/Menu.php:163 ../../Zotlabs/Module/Menu.php:222
-#: ../../Zotlabs/Module/Admin/Site.php:319
+#: ../../Zotlabs/Module/Admin/Site.php:305
#: ../../Zotlabs/Module/Permcats.php:247 ../../Zotlabs/Module/Group.php:137
#: ../../Zotlabs/Module/Group.php:138 ../../Zotlabs/Module/Group.php:147
#: ../../Zotlabs/Module/Group.php:249 ../../Zotlabs/Module/Group.php:301
@@ -228,8 +256,8 @@ msgstr "Modo oscuro por defecto"
#: ../../Zotlabs/Module/Mitem.php:177 ../../Zotlabs/Module/Mitem.php:256
#: ../../Zotlabs/Module/Mitem.php:257 ../../Zotlabs/Module/Photos.php:666
#: ../../Zotlabs/Module/Sources.php:122 ../../Zotlabs/Module/Sources.php:157
-#: ../../Zotlabs/Module/Profiles.php:675 ../../Zotlabs/Module/Profiles.php:685
-#: ../../Zotlabs/Module/Profiles.php:693 ../../Zotlabs/Module/Profiles.php:697
+#: ../../Zotlabs/Module/Profiles.php:671 ../../Zotlabs/Module/Profiles.php:681
+#: ../../Zotlabs/Module/Profiles.php:689 ../../Zotlabs/Module/Profiles.php:693
#: ../../Zotlabs/Module/Settings/Display.php:86
#: ../../Zotlabs/Module/Settings/Privacy.php:132
#: ../../Zotlabs/Module/Settings/Privacy.php:133
@@ -244,16 +272,16 @@ msgstr "Modo oscuro por defecto"
msgid "No"
msgstr "No"
-#: ../../view/theme/redbasic/php/config.php:106
-#: ../../view/theme/redbasic/php/config.php:107
-#: ../../view/theme/redbasic/php/config.php:108
-#: ../../view/theme/redbasic/php/config.php:124
-#: ../../include/conversation.php:1492
+#: ../../view/theme/redbasic/php/config.php:201
+#: ../../view/theme/redbasic/php/config.php:202
+#: ../../view/theme/redbasic/php/config.php:203
+#: ../../view/theme/redbasic/php/config.php:215
+#: ../../include/conversation.php:1265
#: ../../addon/smileybutton/Mod_Smileybutton.php:42
#: ../../addon/socialauth/Mod_SocialAuth.php:218
#: ../../addon/ijpost/Mod_Ijpost.php:61 ../../addon/redred/Mod_Redred.php:61
#: ../../addon/libertree/Mod_Libertree.php:57
-#: ../../addon/pubcrawl/Mod_Pubcrawl.php:42
+#: ../../addon/pubcrawl/Mod_Pubcrawl.php:45
#: ../../addon/dwpost/Mod_Dwpost.php:59 ../../addon/dwpost/Mod_Dwpost.php:63
#: ../../addon/diaspora/Mod_Diaspora.php:70
#: ../../addon/pumpio/Mod_Pumpio.php:92 ../../addon/pumpio/Mod_Pumpio.php:96
@@ -282,24 +310,24 @@ msgstr "No"
#: ../../addon/cart/submodules/orderoptions.php:361
#: ../../addon/cart/submodules/orderoptions.php:437
#: ../../addon/cart/submodules/orderoptions.php:461
-#: ../../addon/cart/cart.php:1419 ../../addon/cart/Settings/Cart.php:61
+#: ../../addon/cart/cart.php:1418 ../../addon/cart/Settings/Cart.php:61
#: ../../addon/cart/Settings/Cart.php:73
#: ../../addon/twitter/Mod_Twitter.php:160
#: ../../addon/twitter/Mod_Twitter.php:169
#: ../../addon/content_import/Mod_content_import.php:135
#: ../../addon/content_import/Mod_content_import.php:136
#: ../../addon/rtof/Mod_Rtof.php:47 ../../addon/nofed/Mod_Nofed.php:40
-#: ../../boot.php:1753 ../../Zotlabs/Lib/Libzotdir.php:165
+#: ../../boot.php:1751 ../../Zotlabs/Lib/Libzotdir.php:165
#: ../../Zotlabs/Lib/Libzotdir.php:166 ../../Zotlabs/Lib/Libzotdir.php:168
#: ../../Zotlabs/Storage/Browser.php:309 ../../Zotlabs/Storage/Browser.php:310
#: ../../Zotlabs/Storage/Browser.php:311 ../../Zotlabs/Storage/Browser.php:392
#: ../../Zotlabs/Storage/Browser.php:394 ../../Zotlabs/Storage/Browser.php:558
#: ../../Zotlabs/Module/Filestorage.php:203
#: ../../Zotlabs/Module/Filestorage.php:211
-#: ../../Zotlabs/Module/Contactedit.php:284
+#: ../../Zotlabs/Module/Contactedit.php:270
#: ../../Zotlabs/Module/Register.php:512 ../../Zotlabs/Module/Defperms.php:195
#: ../../Zotlabs/Module/Api.php:98 ../../Zotlabs/Module/Menu.php:163
-#: ../../Zotlabs/Module/Menu.php:222 ../../Zotlabs/Module/Admin/Site.php:321
+#: ../../Zotlabs/Module/Menu.php:222 ../../Zotlabs/Module/Admin/Site.php:307
#: ../../Zotlabs/Module/Permcats.php:247 ../../Zotlabs/Module/Group.php:137
#: ../../Zotlabs/Module/Group.php:138 ../../Zotlabs/Module/Group.php:147
#: ../../Zotlabs/Module/Group.php:249 ../../Zotlabs/Module/Group.php:301
@@ -307,8 +335,8 @@ msgstr "No"
#: ../../Zotlabs/Module/Mitem.php:177 ../../Zotlabs/Module/Mitem.php:256
#: ../../Zotlabs/Module/Mitem.php:257 ../../Zotlabs/Module/Photos.php:666
#: ../../Zotlabs/Module/Sources.php:122 ../../Zotlabs/Module/Sources.php:157
-#: ../../Zotlabs/Module/Profiles.php:675 ../../Zotlabs/Module/Profiles.php:685
-#: ../../Zotlabs/Module/Profiles.php:693 ../../Zotlabs/Module/Profiles.php:697
+#: ../../Zotlabs/Module/Profiles.php:671 ../../Zotlabs/Module/Profiles.php:681
+#: ../../Zotlabs/Module/Profiles.php:689 ../../Zotlabs/Module/Profiles.php:693
#: ../../Zotlabs/Module/Settings/Display.php:86
#: ../../Zotlabs/Module/Settings/Privacy.php:132
#: ../../Zotlabs/Module/Settings/Privacy.php:133
@@ -323,91 +351,80 @@ msgstr "No"
msgid "Yes"
msgstr "Sí"
-#: ../../view/theme/redbasic/php/config.php:107
+#: ../../view/theme/redbasic/php/config.php:202
msgid "Always use light icons for navbar"
msgstr "Utilizar siempre iconos claros para la barra de navegación"
-#: ../../view/theme/redbasic/php/config.php:107
+#: ../../view/theme/redbasic/php/config.php:202
msgid "Enable this option if you use a dark navbar color in light mode"
msgstr "Active esta opción si utiliza un color oscuro para la barra de navegación en el modo claro."
-#: ../../view/theme/redbasic/php/config.php:108
+#: ../../view/theme/redbasic/php/config.php:203
msgid "Narrow navbar"
msgstr "Estrechar la barra de navegación"
-#: ../../view/theme/redbasic/php/config.php:109
+#: ../../view/theme/redbasic/php/config.php:204
msgid "Navigation bar background color"
msgstr "Color de fondo de la barra de navegación"
-#: ../../view/theme/redbasic/php/config.php:110
+#: ../../view/theme/redbasic/php/config.php:205
msgid "Dark navigation bar background color"
msgstr "Color de fondo oscuro de la barra de navegación"
-#: ../../view/theme/redbasic/php/config.php:111
-msgid "Link color"
-msgstr "Color del enlace"
-
-#: ../../view/theme/redbasic/php/config.php:112
-msgid "Dark link color"
-msgstr "Color oscuro del enlace"
-
-#: ../../view/theme/redbasic/php/config.php:113
-msgid "Link hover color"
-msgstr "Color de los enlaces al pasar por encima"
-
-#: ../../view/theme/redbasic/php/config.php:114
-msgid "Dark link hover color"
-msgstr "Color oscuro del enlace flotante"
-
-#: ../../view/theme/redbasic/php/config.php:115
+#: ../../view/theme/redbasic/php/config.php:206
msgid "Set the background color"
msgstr "Ajustar el color de fondo"
-#: ../../view/theme/redbasic/php/config.php:116
+#: ../../view/theme/redbasic/php/config.php:207
msgid "Set the dark background color"
msgstr "Establecer el color de fondo oscuro"
-#: ../../view/theme/redbasic/php/config.php:117
+#: ../../view/theme/redbasic/php/config.php:208
msgid "Set the background image"
msgstr "Ajustar la imagen de fondo"
-#: ../../view/theme/redbasic/php/config.php:118
+#: ../../view/theme/redbasic/php/config.php:209
msgid "Set the dark background image"
msgstr "Establecer la imagen de fondo oscuro"
-#: ../../view/theme/redbasic/php/config.php:119
+#: ../../view/theme/redbasic/php/config.php:210
msgid "Set font-size for the entire application"
msgstr "Ajustar el tamaño de letra para toda la aplicación"
-#: ../../view/theme/redbasic/php/config.php:119
+#: ../../view/theme/redbasic/php/config.php:210
msgid "Examples: 1rem, 100%, 16px"
msgstr "Ejemplos: 1rem, 100%, 16px"
-#: ../../view/theme/redbasic/php/config.php:120
-msgid "Set radius of corners"
-msgstr "Establecer el radio de curvatura de las esquinas"
+#: ../../view/theme/redbasic/php/config.php:211
+msgid "Set radius of corners in rem"
+msgstr "Fijar el radio de las esquinas en rem"
-#: ../../view/theme/redbasic/php/config.php:120
-msgid "Example: 4px"
-msgstr "Ejemplo: 4px"
+#: ../../view/theme/redbasic/php/config.php:211
+msgid "Leave empty for default radius"
+msgstr "Dejar vacío para el radio por defecto"
-#: ../../view/theme/redbasic/php/config.php:121
+#: ../../view/theme/redbasic/php/config.php:212
msgid "Set maximum width of content region in rem"
msgstr "Ajustar la anchura máxima de la región de contenido, en rem"
-#: ../../view/theme/redbasic/php/config.php:121
+#: ../../view/theme/redbasic/php/config.php:212
msgid "Leave empty for default width"
msgstr "Dejar en blanco para la anchura predeterminada"
-#: ../../view/theme/redbasic/php/config.php:122
+#: ../../view/theme/redbasic/php/config.php:213
msgid "Set size of conversation author photo"
msgstr "Ajustar el tamaño de la foto del autor de la conversación"
-#: ../../view/theme/redbasic/php/config.php:123
+#: ../../view/theme/redbasic/php/config.php:213
+#: ../../view/theme/redbasic/php/config.php:214
+msgid "Leave empty for default size"
+msgstr "Dejar vacío para el tamaño por defecto"
+
+#: ../../view/theme/redbasic/php/config.php:214
msgid "Set size of followup author photos"
msgstr "Ajustar el tamaño de foto de los seguidores del autor"
-#: ../../view/theme/redbasic/php/config.php:124
+#: ../../view/theme/redbasic/php/config.php:215
msgid "Show advanced settings"
msgstr "Mostrar ajustes avanzados"
@@ -453,15 +470,15 @@ msgstr "por"
msgid " on "
msgstr "en"
-#: ../../include/oembed.php:421
+#: ../../include/oembed.php:425
msgid "Embedded content"
msgstr "Contenido incorporado"
-#: ../../include/oembed.php:430
+#: ../../include/oembed.php:434
msgid "Embedding disabled"
msgstr "Incrustación deshabilitada"
-#: ../../include/event.php:34 ../../include/event.php:129
+#: ../../include/event.php:34 ../../include/event.php:132
msgid "l F d, Y \\@ g:i A"
msgstr "l d de F, Y \\@ G:i"
@@ -473,91 +490,91 @@ msgstr "Comienza:"
msgid "Finishes:"
msgstr "Finaliza:"
-#: ../../include/event.php:64 ../../include/event.php:154
-#: ../../include/channel.php:1631 ../../Zotlabs/Module/Directory.php:354
+#: ../../include/event.php:66 ../../include/event.php:157
+#: ../../include/channel.php:1639 ../../Zotlabs/Module/Directory.php:354
msgid "Location:"
msgstr "Ubicación:"
-#: ../../include/event.php:129
+#: ../../include/event.php:132
msgid "l F d, Y"
msgstr "l F d, Y"
-#: ../../include/event.php:133
+#: ../../include/event.php:136
msgid "Start:"
msgstr "Iniciar: "
-#: ../../include/event.php:137
+#: ../../include/event.php:140
msgid "End:"
msgstr "Finalizar: "
-#: ../../include/event.php:142 ../../addon/openid/MysqlProvider.php:67
+#: ../../include/event.php:145 ../../addon/openid/MysqlProvider.php:67
msgid "Timezone"
msgstr "Zona horaria"
-#: ../../include/event.php:1242
+#: ../../include/event.php:1245
msgid "This event has been added to your calendar."
msgstr "Este evento ha sido añadido a su calendario."
-#: ../../include/event.php:1396 ../../include/conversation.php:151
+#: ../../include/event.php:1399 ../../include/conversation.php:151
#: ../../include/text.php:2355 ../../Zotlabs/Module/Tagger.php:75
-#: ../../Zotlabs/Module/Like.php:455
+#: ../../Zotlabs/Module/Like.php:450
#: ../../Zotlabs/Module/Channel_calendar.php:221
msgid "event"
msgstr "el/su evento"
-#: ../../include/event.php:1475
+#: ../../include/event.php:1478
msgid "Not specified"
msgstr "Sin especificar"
-#: ../../include/event.php:1476
+#: ../../include/event.php:1479
msgid "Needs Action"
msgstr "Necesita de una intervención"
-#: ../../include/event.php:1477
+#: ../../include/event.php:1480
msgid "Completed"
msgstr "Completado/a"
-#: ../../include/event.php:1478
+#: ../../include/event.php:1481
msgid "In Process"
msgstr "En proceso"
-#: ../../include/event.php:1479
+#: ../../include/event.php:1482
msgid "Cancelled"
msgstr "Cancelado/a"
-#: ../../include/event.php:1560 ../../include/connections.php:781
+#: ../../include/event.php:1563 ../../include/connections.php:781
#: ../../Zotlabs/Module/Connedit.php:741 ../../Zotlabs/Module/Cdav.php:1377
msgid "Mobile"
msgstr "Móvil"
-#: ../../include/event.php:1561 ../../include/connections.php:782
+#: ../../include/event.php:1564 ../../include/connections.php:782
#: ../../Zotlabs/Widget/Notifications.php:43
#: ../../Zotlabs/Module/Connedit.php:742 ../../Zotlabs/Module/Cdav.php:1378
msgid "Home"
msgstr "Inicio"
-#: ../../include/event.php:1562 ../../include/connections.php:783
+#: ../../include/event.php:1565 ../../include/connections.php:783
msgid "Home, Voice"
msgstr "Llamadas particulares"
-#: ../../include/event.php:1563 ../../include/connections.php:784
+#: ../../include/event.php:1566 ../../include/connections.php:784
msgid "Home, Fax"
msgstr "Fax particular"
-#: ../../include/event.php:1564 ../../include/connections.php:785
+#: ../../include/event.php:1567 ../../include/connections.php:785
#: ../../Zotlabs/Module/Connedit.php:743 ../../Zotlabs/Module/Cdav.php:1379
msgid "Work"
msgstr "Trabajo"
-#: ../../include/event.php:1565 ../../include/connections.php:786
+#: ../../include/event.php:1568 ../../include/connections.php:786
msgid "Work, Voice"
msgstr "Llamadas de trabajo"
-#: ../../include/event.php:1566 ../../include/connections.php:787
+#: ../../include/event.php:1569 ../../include/connections.php:787
msgid "Work, Fax"
msgstr "Fax de trabajo"
-#: ../../include/event.php:1567 ../../include/event.php:1574
+#: ../../include/event.php:1570 ../../include/event.php:1577
#: ../../include/selectors.php:64 ../../include/selectors.php:81
#: ../../include/selectors.php:119 ../../include/selectors.php:155
#: ../../include/connections.php:788 ../../include/connections.php:795
@@ -566,70 +583,71 @@ msgstr "Fax de trabajo"
msgid "Other"
msgstr "Otro"
-#: ../../include/feedutils.php:871 ../../include/text.php:1581
+#: ../../include/feedutils.php:849 ../../include/text.php:1579
msgid "unknown"
msgstr "desconocido"
#: ../../include/items.php:448 ../../addon/hzfiles/hzfiles.php:75
#: ../../addon/redphotos/redphotos.php:119
-#: ../../addon/redfiles/redfiles.php:109 ../../Zotlabs/Module/Share.php:78
+#: ../../addon/redfiles/redfiles.php:109
#: ../../Zotlabs/Module/Import_items.php:116
-#: ../../Zotlabs/Module/Dreport.php:10 ../../Zotlabs/Module/Dreport.php:55
+#: ../../Zotlabs/Module/Dreport.php:10 ../../Zotlabs/Module/Dreport.php:54
#: ../../Zotlabs/Module/Subthread.php:89 ../../Zotlabs/Module/Group.php:108
-#: ../../Zotlabs/Module/Like.php:348 ../../Zotlabs/Module/Profperm.php:28
+#: ../../Zotlabs/Module/Like.php:344 ../../Zotlabs/Module/Profperm.php:28
#: ../../Zotlabs/Web/WebServer.php:118
msgid "Permission denied"
msgstr "Permiso denegado"
-#: ../../include/items.php:1235
+#: ../../include/items.php:1233
msgid "Visible to anybody on the internet."
msgstr "Visible para cualquiera en internet."
-#: ../../include/items.php:1237
+#: ../../include/items.php:1235
msgid "Visible to you only."
msgstr "Visible sólo para usted."
-#: ../../include/items.php:1239
+#: ../../include/items.php:1237
msgid "Visible to anybody in this network."
msgstr "Visible para cualquiera en esta red."
-#: ../../include/items.php:1241
+#: ../../include/items.php:1239
msgid "Visible to anybody authenticated."
msgstr "Visible para cualquiera que esté autenticado."
-#: ../../include/items.php:1243
+#: ../../include/items.php:1241
#, php-format
msgid "Visible to anybody on %s."
msgstr "Visible para cualquiera en %s."
-#: ../../include/items.php:1245
+#: ../../include/items.php:1243
msgid "Visible to all connections."
msgstr "Visible para todas las conexiones."
-#: ../../include/items.php:1247
+#: ../../include/items.php:1245
msgid "Visible to approved connections."
msgstr "Visible para las conexiones permitidas."
-#: ../../include/items.php:1249
+#: ../../include/items.php:1247
msgid "Visible to specific connections."
msgstr "Visible para conexiones específicas."
-#: ../../include/items.php:3374 ../../Zotlabs/Module/Share.php:110
+#: ../../include/items.php:3340 ../../Zotlabs/Lib/Activity.php:2177
+#: ../../Zotlabs/Module/Share.php:118
#, php-format
msgid "&#x1f501; Repeated %1$s's %2$s"
-msgstr "&#x1f501; Repetidos %2$sde %1$s"
+msgstr "&#x1f501; Repitió %2$sde %1$s"
-#: ../../include/items.php:3877 ../../addon/flashcards/Mod_Flashcards.php:291
+#: ../../include/items.php:3843 ../../addon/flashcards/Mod_Flashcards.php:291
#: ../../addon/flashcards/Mod_Flashcards.php:292
-#: ../../Zotlabs/Module/Display.php:51 ../../Zotlabs/Module/Display.php:112
-#: ../../Zotlabs/Module/Display.php:390 ../../Zotlabs/Module/Thing.php:96
+#: ../../Zotlabs/Module/Display.php:58 ../../Zotlabs/Module/Display.php:119
+#: ../../Zotlabs/Module/Display.php:390 ../../Zotlabs/Module/Thing.php:113
#: ../../Zotlabs/Module/Filestorage.php:29 ../../Zotlabs/Module/Viewsrc.php:25
#: ../../Zotlabs/Module/Admin/Themes.php:72
#: ../../Zotlabs/Module/Admin/Addons.php:263 ../../Zotlabs/Module/Admin.php:61
msgid "Item not found."
msgstr "Elemento no encontrado."
-#: ../../include/items.php:3957 ../../include/attach.php:156
+#: ../../include/items.php:3923 ../../include/attach.php:156
#: ../../include/attach.php:205 ../../include/attach.php:278
#: ../../include/attach.php:329 ../../include/attach.php:431
#: ../../include/attach.php:445 ../../include/attach.php:452
@@ -643,29 +661,29 @@ msgstr "Elemento no encontrado."
#: ../../addon/wiki/Mod_Wiki.php:288 ../../addon/wiki/Mod_Wiki.php:425
#: ../../Zotlabs/Lib/Chatroom.php:135 ../../Zotlabs/Module/Page.php:34
#: ../../Zotlabs/Module/Page.php:133 ../../Zotlabs/Module/Display.php:386
-#: ../../Zotlabs/Module/Cover_photo.php:341
-#: ../../Zotlabs/Module/Cover_photo.php:354
+#: ../../Zotlabs/Module/Cover_photo.php:298
+#: ../../Zotlabs/Module/Cover_photo.php:311
#: ../../Zotlabs/Module/Editwebpage.php:68
#: ../../Zotlabs/Module/Editwebpage.php:89
#: ../../Zotlabs/Module/Editwebpage.php:107
#: ../../Zotlabs/Module/Editwebpage.php:121
#: ../../Zotlabs/Module/Webpages.php:131 ../../Zotlabs/Module/Network.php:18
#: ../../Zotlabs/Module/Service_limits.php:11
-#: ../../Zotlabs/Module/Thing.php:282 ../../Zotlabs/Module/Thing.php:302
-#: ../../Zotlabs/Module/Thing.php:343 ../../Zotlabs/Module/Pdledit.php:35
+#: ../../Zotlabs/Module/Thing.php:309 ../../Zotlabs/Module/Thing.php:331
+#: ../../Zotlabs/Module/Thing.php:372 ../../Zotlabs/Module/Pdledit.php:35
#: ../../Zotlabs/Module/Filestorage.php:20
#: ../../Zotlabs/Module/Filestorage.php:78
#: ../../Zotlabs/Module/Filestorage.php:96
#: ../../Zotlabs/Module/Filestorage.php:119
-#: ../../Zotlabs/Module/Filestorage.php:165 ../../Zotlabs/Module/Mood.php:126
-#: ../../Zotlabs/Module/Register.php:200 ../../Zotlabs/Module/Appman.php:153
-#: ../../Zotlabs/Module/Viewsrc.php:19 ../../Zotlabs/Module/Item.php:513
-#: ../../Zotlabs/Module/Item.php:532 ../../Zotlabs/Module/Item.php:542
-#: ../../Zotlabs/Module/Item.php:1443 ../../Zotlabs/Module/Achievements.php:34
+#: ../../Zotlabs/Module/Filestorage.php:165
+#: ../../Zotlabs/Module/Register.php:200 ../../Zotlabs/Module/Appman.php:163
+#: ../../Zotlabs/Module/Viewsrc.php:19 ../../Zotlabs/Module/Item.php:512
+#: ../../Zotlabs/Module/Item.php:531 ../../Zotlabs/Module/Item.php:541
+#: ../../Zotlabs/Module/Item.php:1457 ../../Zotlabs/Module/Achievements.php:34
#: ../../Zotlabs/Module/Connedit.php:299 ../../Zotlabs/Module/Defperms.php:181
#: ../../Zotlabs/Module/Suggest.php:32 ../../Zotlabs/Module/Regmod.php:20
-#: ../../Zotlabs/Module/Profile_photo.php:390
-#: ../../Zotlabs/Module/Profile_photo.php:421
+#: ../../Zotlabs/Module/Profile_photo.php:389
+#: ../../Zotlabs/Module/Profile_photo.php:420
#: ../../Zotlabs/Module/Viewconnections.php:28
#: ../../Zotlabs/Module/Viewconnections.php:33
#: ../../Zotlabs/Module/Block.php:24 ../../Zotlabs/Module/Block.php:74
@@ -673,21 +691,20 @@ msgstr "Elemento no encontrado."
#: ../../Zotlabs/Module/Layouts.php:78 ../../Zotlabs/Module/Layouts.php:89
#: ../../Zotlabs/Module/Common.php:38 ../../Zotlabs/Module/Locs.php:98
#: ../../Zotlabs/Module/Menu.php:130 ../../Zotlabs/Module/Menu.php:141
-#: ../../Zotlabs/Module/Manage.php:10 ../../Zotlabs/Module/Poke.php:141
-#: ../../Zotlabs/Module/Bookmarks.php:70
+#: ../../Zotlabs/Module/Manage.php:10 ../../Zotlabs/Module/Bookmarks.php:70
#: ../../Zotlabs/Module/Attach_edit.php:90
#: ../../Zotlabs/Module/Attach_edit.php:99
#: ../../Zotlabs/Module/Attach_edit.php:106 ../../Zotlabs/Module/Group.php:14
#: ../../Zotlabs/Module/Group.php:30 ../../Zotlabs/Module/Invite.php:64
-#: ../../Zotlabs/Module/Invite.php:315 ../../Zotlabs/Module/Like.php:248
+#: ../../Zotlabs/Module/Invite.php:315 ../../Zotlabs/Module/Like.php:242
#: ../../Zotlabs/Module/Blocks.php:73 ../../Zotlabs/Module/Blocks.php:80
#: ../../Zotlabs/Module/Mitem.php:129 ../../Zotlabs/Module/New_channel.php:105
#: ../../Zotlabs/Module/New_channel.php:130 ../../Zotlabs/Module/Photos.php:71
-#: ../../Zotlabs/Module/Channel.php:222 ../../Zotlabs/Module/Channel.php:379
-#: ../../Zotlabs/Module/Channel.php:418 ../../Zotlabs/Module/Profile.php:99
+#: ../../Zotlabs/Module/Channel.php:233 ../../Zotlabs/Module/Channel.php:390
+#: ../../Zotlabs/Module/Channel.php:428 ../../Zotlabs/Module/Profile.php:99
#: ../../Zotlabs/Module/Profile.php:114 ../../Zotlabs/Module/Moderate.php:15
-#: ../../Zotlabs/Module/Sources.php:80 ../../Zotlabs/Module/Profiles.php:171
-#: ../../Zotlabs/Module/Profiles.php:614
+#: ../../Zotlabs/Module/Sources.php:80 ../../Zotlabs/Module/Profiles.php:167
+#: ../../Zotlabs/Module/Profiles.php:610
#: ../../Zotlabs/Module/Sharedwithme.php:19
#: ../../Zotlabs/Module/Authtest.php:13
#: ../../Zotlabs/Module/Channel_calendar.php:232
@@ -701,71 +718,29 @@ msgstr "Elemento no encontrado."
msgid "Permission denied."
msgstr "Acceso denegado."
-#: ../../include/items.php:4459 ../../Zotlabs/Module/Group.php:62
+#: ../../include/items.php:4425 ../../Zotlabs/Module/Group.php:62
#: ../../Zotlabs/Module/Group.php:206
msgid "Privacy group not found."
msgstr "Grupo de canales no encontrado."
-#: ../../include/items.php:4475
+#: ../../include/items.php:4441
msgid "Privacy group is empty."
msgstr "El grupo de canales está vacío."
-#: ../../include/items.php:4482
+#: ../../include/items.php:4448
#, php-format
msgid "Privacy group: %s"
msgstr "Grupo de canales: %s"
-#: ../../include/items.php:4492
+#: ../../include/items.php:4458
#, php-format
msgid "Connection: %s"
msgstr "Conexión: %s"
-#: ../../include/items.php:4494
+#: ../../include/items.php:4460
msgid "Connection not found."
msgstr "Conexión no encontrada"
-#: ../../include/items.php:4841 ../../Zotlabs/Module/Cover_photo.php:297
-msgid "female"
-msgstr "mujer"
-
-#: ../../include/items.php:4842 ../../Zotlabs/Module/Cover_photo.php:298
-#, php-format
-msgid "%1$s updated her %2$s"
-msgstr "%1$s ha actualizado su %2$s"
-
-#: ../../include/items.php:4843 ../../Zotlabs/Module/Cover_photo.php:299
-msgid "male"
-msgstr "hombre"
-
-#: ../../include/items.php:4844 ../../Zotlabs/Module/Cover_photo.php:300
-#, php-format
-msgid "%1$s updated his %2$s"
-msgstr "%1$s ha actualizado su %2$s"
-
-#: ../../include/items.php:4846 ../../Zotlabs/Module/Cover_photo.php:302
-#, php-format
-msgid "%1$s updated their %2$s"
-msgstr "%1$s ha actualizado su %2$s"
-
-#: ../../include/items.php:4848
-msgid "profile photo"
-msgstr "foto del perfil"
-
-#: ../../include/items.php:5175
-#, php-format
-msgid "[Edited %s]"
-msgstr "[se ha editado %s]"
-
-#: ../../include/items.php:5175
-msgctxt "edit_activity"
-msgid "Post"
-msgstr "Publicar"
-
-#: ../../include/items.php:5175
-msgctxt "edit_activity"
-msgid "Comment"
-msgstr "Comentar"
-
#: ../../include/features.php:55 ../../Zotlabs/Module/Admin/Features.php:55
#: ../../Zotlabs/Module/Admin/Features.php:56
#: ../../Zotlabs/Module/Settings/Features.php:38
@@ -778,8 +753,8 @@ msgstr "Desactivado"
msgid "On"
msgstr "Activado"
-#: ../../include/features.php:82 ../../include/nav.php:476
-#: ../../include/nav.php:479 ../../Zotlabs/Lib/Apps.php:351
+#: ../../include/features.php:82 ../../include/nav.php:488
+#: ../../include/nav.php:491 ../../Zotlabs/Lib/Apps.php:351
msgid "Calendar"
msgstr "Calendario"
@@ -827,7 +802,7 @@ msgstr "Usar el modo blog/lista"
msgid "Comments will be displayed separately"
msgstr "Los comentarios se mostrarán por separado"
-#: ../../include/features.php:133 ../../include/text.php:1058
+#: ../../include/features.php:133 ../../include/text.php:1077
#: ../../Zotlabs/Lib/Apps.php:338 ../../Zotlabs/Module/Connections.php:399
msgid "Connections"
msgstr "Conexiones"
@@ -1048,7 +1023,7 @@ msgstr "Filtro de entradas personales"
msgid "Ability to display only posts that you've interacted on"
msgstr "Posibilidad de mostrar sólo los mensajes en los que usted haya interactuado"
-#: ../../include/features.php:368 ../../include/nav.php:457
+#: ../../include/features.php:368 ../../include/nav.php:469
#: ../../Zotlabs/Lib/Apps.php:350
#: ../../Zotlabs/Widget/Channel_activities.php:93
#: ../../Zotlabs/Module/Fbrowser.php:29
@@ -1073,8 +1048,8 @@ msgid ""
"view"
msgstr "Proporcionar una opción de edición de fotos para ocultar las fotos inapropiadas de la vista de álbum predeterminada"
-#: ../../include/features.php:390 ../../Zotlabs/Lib/Apps.php:368
-#: ../../Zotlabs/Module/Contactedit.php:444
+#: ../../include/features.php:390 ../../Zotlabs/Lib/Apps.php:366
+#: ../../Zotlabs/Module/Contactedit.php:430
msgid "Profiles"
msgstr "Perfiles"
@@ -1169,21 +1144,21 @@ msgstr "el almacenamiento en la base de datos ha fallado."
msgid "Empty path"
msgstr "Ruta vacía"
-#: ../../include/attach.php:2147
+#: ../../include/attach.php:1984
#, php-format
msgid "%s shared an %s with you"
msgstr "%s ha compartido un/una %s con usted"
-#: ../../include/attach.php:2147
+#: ../../include/attach.php:1984
#, php-format
msgid "%s shared a %s with you"
msgstr "%s ha compartido un/una %s con usted"
-#: ../../include/attach.php:2147
+#: ../../include/attach.php:1984 ../../Zotlabs/Module/Like.php:447
msgid "image"
msgstr "Imagen"
-#: ../../include/attach.php:2147 ../../addon/redfiles/redfilehelper.php:64
+#: ../../include/attach.php:1984 ../../addon/redfiles/redfilehelper.php:64
msgid "file"
msgstr "fichero"
@@ -1216,12 +1191,12 @@ msgid "Monthly"
msgstr "Mensualmente"
#: ../../include/selectors.php:64 ../../include/selectors.php:81
-#: ../../include/channel.php:1720 ../../addon/openid/Mod_Id.php:85
+#: ../../include/channel.php:1728 ../../addon/openid/Mod_Id.php:85
msgid "Male"
msgstr "Hombre"
#: ../../include/selectors.php:64 ../../include/selectors.php:81
-#: ../../include/channel.php:1718 ../../addon/openid/Mod_Id.php:87
+#: ../../include/channel.php:1726 ../../addon/openid/Mod_Id.php:87
msgid "Female"
msgstr "Mujer"
@@ -1257,11 +1232,11 @@ msgstr "Transexual"
msgid "Hermaphrodite"
msgstr "Hermafrodita"
-#: ../../include/selectors.php:64 ../../include/channel.php:1724
+#: ../../include/selectors.php:64 ../../include/channel.php:1732
msgid "Neuter"
msgstr "Neutral"
-#: ../../include/selectors.php:64 ../../include/channel.php:1726
+#: ../../include/selectors.php:64 ../../include/channel.php:1734
msgid "Non-specific"
msgstr "No especificado"
@@ -1357,9 +1332,9 @@ msgstr "Infiel"
msgid "Sex Addict"
msgstr "Con adicción al sexo"
-#: ../../include/selectors.php:138 ../../include/channel.php:456
-#: ../../include/channel.php:459 ../../Zotlabs/Widget/Affinity.php:38
-#: ../../Zotlabs/Module/Contactedit.php:297
+#: ../../include/selectors.php:138 ../../include/channel.php:464
+#: ../../include/channel.php:467 ../../Zotlabs/Widget/Affinity.php:38
+#: ../../Zotlabs/Module/Contactedit.php:283
#: ../../Zotlabs/Module/Connedit.php:581
msgid "Friends"
msgstr "Amigos/as"
@@ -1448,28 +1423,41 @@ msgstr "No me importa"
msgid "Ask me"
msgstr "Pregúnteme"
-#: ../../include/activities.php:42
+#: ../../include/activities.php:30
msgid " and "
msgstr " y "
-#: ../../include/activities.php:50
+#: ../../include/activities.php:32
+msgid ", "
+msgstr ", "
+
+#: ../../include/activities.php:36 ../../include/activities.php:38
+#: ../../addon/openid/MysqlProvider.php:58
+#: ../../addon/openid/MysqlProvider.php:59
+#: ../../addon/openid/MysqlProvider.php:60 ../../Zotlabs/Lib/Apps.php:364
+#: ../../Zotlabs/Module/Profile_photo.php:226
+msgid "Profile Photo"
+msgstr "Foto del perfil"
+
+#: ../../include/activities.php:36
+#: ../../store/[data]/smarty3/compiled/2cbde885645602969010e846a38817a1297aafb9_0.file.cover_photo.tpl.php:127
+#: ../../Zotlabs/Module/Cover_photo.php:229
+msgid "Cover Photo"
+msgstr "Imagen de portada del perfil"
+
+#: ../../include/activities.php:45
msgid "public profile"
msgstr "el perfil público"
-#: ../../include/activities.php:59
-#, php-format
-msgid "%1$s changed %2$s to &ldquo;%3$s&rdquo;"
-msgstr "%1$s ha cambiado %2$s a &ldquo;%3$s&rdquo;"
-
-#: ../../include/activities.php:60
+#: ../../include/activities.php:62
#, php-format
-msgid "Visit %1$s's %2$s"
-msgstr "Visitar %2$s de %1$s"
+msgid "%1$s %2$s has been updated to %3$s."
+msgstr "%1$s%2$sse ha actualizado a %3$s."
-#: ../../include/activities.php:63
+#: ../../include/activities.php:65
#, php-format
-msgid "%1$s has an updated %2$s, changing %3$s."
-msgstr "%1$s ha actualizado %2$s, cambiando %3$s."
+msgid "%1$s updated the %2$s. Changed %3$s."
+msgstr "%1$sactualizó el %2$s. Ha cambiado %3$s."
#: ../../include/contact_widgets.php:11
#, php-format
@@ -1480,7 +1468,7 @@ msgstr[1] "%d invitaciones disponibles"
msgstr[2] "%d invitaciones disponibles"
#: ../../include/contact_widgets.php:16 ../../include/acl_selectors.php:145
-#: ../../Zotlabs/Module/Admin/Site.php:419
+#: ../../Zotlabs/Module/Admin/Site.php:405
msgid "Advanced"
msgstr "Avanzado"
@@ -1559,10 +1547,10 @@ msgid "Summary: "
msgstr "Resumen: "
#: ../../include/cdav.php:158 ../../include/cdav.php:159
-#: ../../include/cdav.php:167 ../../include/conversation.php:1226
-#: ../../Zotlabs/Lib/Apps.php:1169 ../../Zotlabs/Lib/Apps.php:1253
-#: ../../Zotlabs/Lib/Activity.php:1678 ../../Zotlabs/Widget/Album.php:90
-#: ../../Zotlabs/Widget/Pinned.php:275 ../../Zotlabs/Widget/Portfolio.php:99
+#: ../../include/cdav.php:167 ../../include/conversation.php:999
+#: ../../Zotlabs/Lib/Apps.php:1167 ../../Zotlabs/Lib/Apps.php:1251
+#: ../../Zotlabs/Lib/Activity.php:1675 ../../Zotlabs/Widget/Album.php:90
+#: ../../Zotlabs/Widget/Pinned.php:255 ../../Zotlabs/Widget/Portfolio.php:99
#: ../../Zotlabs/Module/Embedphotos.php:177
#: ../../Zotlabs/Module/Photos.php:788 ../../Zotlabs/Module/Photos.php:1246
msgid "Unknown"
@@ -1600,7 +1588,7 @@ msgid "edit"
msgstr "editar"
#: ../../include/group.php:327 ../../include/acl_selectors.php:87
-#: ../../Zotlabs/Lib/Apps.php:369 ../../Zotlabs/Widget/Activity_filter.php:95
+#: ../../Zotlabs/Lib/Apps.php:367 ../../Zotlabs/Widget/Activity_filter.php:95
#: ../../Zotlabs/Module/Group.php:143
msgid "Privacy Groups"
msgstr "Grupos de canales"
@@ -1650,7 +1638,7 @@ msgstr "quiero"
msgid "wants"
msgstr "quiere"
-#: ../../include/taxonomy.php:587 ../../Zotlabs/Lib/ThreadItem.php:310
+#: ../../include/taxonomy.php:587 ../../Zotlabs/Lib/ThreadItem.php:333
msgid "like"
msgstr "me gusta"
@@ -1658,7 +1646,7 @@ msgstr "me gusta"
msgid "likes"
msgstr "gusta de"
-#: ../../include/taxonomy.php:588 ../../Zotlabs/Lib/ThreadItem.php:311
+#: ../../include/taxonomy.php:588 ../../Zotlabs/Lib/ThreadItem.php:334
msgid "dislike"
msgstr "no me gusta"
@@ -1666,9 +1654,8 @@ msgstr "no me gusta"
msgid "dislikes"
msgstr "no gusta de"
-#: ../../include/taxonomy.php:675 ../../include/conversation.php:1777
-#: ../../include/channel.php:1779 ../../Zotlabs/Lib/ThreadItem.php:233
-#: ../../Zotlabs/Module/Photos.php:1130
+#: ../../include/taxonomy.php:675 ../../include/conversation.php:1550
+#: ../../Zotlabs/Module/Photos.php:1129
msgctxt "noun"
msgid "Like"
msgid_plural "Likes"
@@ -1676,9 +1663,9 @@ msgstr[0] "Me gusta"
msgstr[1] "Me gusta"
msgstr[2] "Me gusta"
-#: ../../include/photo/photo_driver.php:450
+#: ../../include/photo/photo_driver.php:457
#: ../../Zotlabs/Module/Profile_photo.php:167
-#: ../../Zotlabs/Module/Profile_photo.php:337
+#: ../../Zotlabs/Module/Profile_photo.php:336
msgid "Profile Photos"
msgstr "Fotos del perfil"
@@ -1783,7 +1770,7 @@ msgid "Help:"
msgstr "Ayuda:"
#: ../../include/help.php:119 ../../include/help.php:127
-#: ../../include/nav.php:181 ../../include/nav.php:328
+#: ../../include/nav.php:193 ../../include/nav.php:340
#: ../../Zotlabs/Lib/Apps.php:353 ../../Zotlabs/Module/Layouts.php:184
msgid "Help"
msgstr "Ayuda"
@@ -1795,7 +1782,7 @@ msgstr "No encontrado"
#: ../../include/help.php:134 ../../addon/cards/cards.php:104
#: ../../addon/articles/articles.php:105
#: ../../addon/wiki/Lib/NativeWikiPage.php:545
-#: ../../Zotlabs/Module/Page.php:136 ../../Zotlabs/Module/Display.php:147
+#: ../../Zotlabs/Module/Page.php:136 ../../Zotlabs/Module/Display.php:154
#: ../../Zotlabs/Module/Block.php:77 ../../Zotlabs/Web/Router.php:186
msgid "Page not found."
msgstr "Página no encontrada."
@@ -1808,12 +1795,12 @@ msgstr "¿Borrar este elemento?"
msgid "Item deleted"
msgstr "Elemento eliminado"
-#: ../../include/js_strings.php:7 ../../Zotlabs/Lib/ThreadItem.php:831
+#: ../../include/js_strings.php:7 ../../Zotlabs/Lib/ThreadItem.php:861
#: ../../Zotlabs/Module/Photos.php:1094 ../../Zotlabs/Module/Photos.php:1207
msgid "Comment"
msgstr "Comentar"
-#: ../../include/js_strings.php:8 ../../Zotlabs/Lib/ThreadItem.php:540
+#: ../../include/js_strings.php:8 ../../Zotlabs/Lib/ThreadItem.php:570
#, php-format
msgid "%s show all"
msgstr "%s mostrar todo"
@@ -1886,8 +1873,8 @@ msgid "Unsaved changes. Are you sure you wish to leave this page?"
msgstr "Cambios no guardados. ¿Está seguro de que desea abandonar la página?"
#: ../../include/js_strings.php:26 ../../Zotlabs/Module/Locs.php:121
-#: ../../Zotlabs/Module/Pubsites.php:54 ../../Zotlabs/Module/Profiles.php:479
-#: ../../Zotlabs/Module/Profiles.php:750 ../../Zotlabs/Module/Cdav.php:1006
+#: ../../Zotlabs/Module/Pubsites.php:54 ../../Zotlabs/Module/Profiles.php:475
+#: ../../Zotlabs/Module/Profiles.php:746 ../../Zotlabs/Module/Cdav.php:1006
msgid "Location"
msgstr "Ubicación"
@@ -1941,12 +1928,12 @@ msgstr "Volver a la respuesta"
msgid "Pinned"
msgstr "Anclado/a"
-#: ../../include/js_strings.php:39 ../../Zotlabs/Lib/ThreadItem.php:473
+#: ../../include/js_strings.php:39 ../../Zotlabs/Lib/ThreadItem.php:494
msgid "Pin to the top"
msgstr "Anclar en la parte superior"
-#: ../../include/js_strings.php:40 ../../Zotlabs/Lib/ThreadItem.php:473
-#: ../../Zotlabs/Widget/Pinned.php:160
+#: ../../include/js_strings.php:40 ../../Zotlabs/Lib/ThreadItem.php:494
+#: ../../Zotlabs/Widget/Pinned.php:149
msgid "Unpin from the top"
msgstr "Desanclar de la parte superior"
@@ -2038,19 +2025,19 @@ msgstr " "
msgid "timeago.numbers"
msgstr "timeago.numbers"
-#: ../../include/js_strings.php:75 ../../include/text.php:1504
+#: ../../include/js_strings.php:75 ../../include/text.php:1502
msgid "January"
msgstr "enero"
-#: ../../include/js_strings.php:76 ../../include/text.php:1504
+#: ../../include/js_strings.php:76 ../../include/text.php:1502
msgid "February"
msgstr "febrero"
-#: ../../include/js_strings.php:77 ../../include/text.php:1504
+#: ../../include/js_strings.php:77 ../../include/text.php:1502
msgid "March"
msgstr "marzo"
-#: ../../include/js_strings.php:78 ../../include/text.php:1504
+#: ../../include/js_strings.php:78 ../../include/text.php:1502
msgid "April"
msgstr "abril"
@@ -2059,31 +2046,31 @@ msgctxt "long"
msgid "May"
msgstr "mayo"
-#: ../../include/js_strings.php:80 ../../include/text.php:1504
+#: ../../include/js_strings.php:80 ../../include/text.php:1502
msgid "June"
msgstr "junio"
-#: ../../include/js_strings.php:81 ../../include/text.php:1504
+#: ../../include/js_strings.php:81 ../../include/text.php:1502
msgid "July"
msgstr "julio"
-#: ../../include/js_strings.php:82 ../../include/text.php:1504
+#: ../../include/js_strings.php:82 ../../include/text.php:1502
msgid "August"
msgstr "agosto"
-#: ../../include/js_strings.php:83 ../../include/text.php:1504
+#: ../../include/js_strings.php:83 ../../include/text.php:1502
msgid "September"
msgstr "septiembre"
-#: ../../include/js_strings.php:84 ../../include/text.php:1504
+#: ../../include/js_strings.php:84 ../../include/text.php:1502
msgid "October"
msgstr "octubre"
-#: ../../include/js_strings.php:85 ../../include/text.php:1504
+#: ../../include/js_strings.php:85 ../../include/text.php:1502
msgid "November"
msgstr "noviembre"
-#: ../../include/js_strings.php:86 ../../include/text.php:1504
+#: ../../include/js_strings.php:86 ../../include/text.php:1502
msgid "December"
msgstr "diciembre"
@@ -2136,31 +2123,31 @@ msgstr "nov"
msgid "Dec"
msgstr "dic"
-#: ../../include/js_strings.php:99 ../../include/text.php:1500
+#: ../../include/js_strings.php:99 ../../include/text.php:1498
msgid "Sunday"
msgstr "domingo"
-#: ../../include/js_strings.php:100 ../../include/text.php:1500
+#: ../../include/js_strings.php:100 ../../include/text.php:1498
msgid "Monday"
msgstr "lunes"
-#: ../../include/js_strings.php:101 ../../include/text.php:1500
+#: ../../include/js_strings.php:101 ../../include/text.php:1498
msgid "Tuesday"
msgstr "martes"
-#: ../../include/js_strings.php:102 ../../include/text.php:1500
+#: ../../include/js_strings.php:102 ../../include/text.php:1498
msgid "Wednesday"
msgstr "miércoles"
-#: ../../include/js_strings.php:103 ../../include/text.php:1500
+#: ../../include/js_strings.php:103 ../../include/text.php:1498
msgid "Thursday"
msgstr "jueves"
-#: ../../include/js_strings.php:104 ../../include/text.php:1500
+#: ../../include/js_strings.php:104 ../../include/text.php:1498
msgid "Friday"
msgstr "viernes"
-#: ../../include/js_strings.php:105 ../../include/text.php:1500
+#: ../../include/js_strings.php:105 ../../include/text.php:1498
msgid "Saturday"
msgstr "sábado"
@@ -2230,9 +2217,9 @@ msgstr "Dirección de correo electrónica no válida"
#: ../../addon/cart/submodules/orderoptions.php:358
#: ../../addon/cart/submodules/orderoptions.php:434
#: ../../addon/cart/submodules/orderoptions.php:458
-#: ../../Zotlabs/Module/Register.php:498 ../../Zotlabs/Module/Appman.php:208
-#: ../../Zotlabs/Module/Appman.php:209 ../../Zotlabs/Module/Profiles.php:761
-#: ../../Zotlabs/Module/Profiles.php:765
+#: ../../Zotlabs/Module/Register.php:498 ../../Zotlabs/Module/Appman.php:218
+#: ../../Zotlabs/Module/Appman.php:219 ../../Zotlabs/Module/Profiles.php:757
+#: ../../Zotlabs/Module/Profiles.php:761
#: ../../Zotlabs/Module/Settings/Multifactor.php:84
msgid "Required"
msgstr "Obligatorio"
@@ -2244,133 +2231,107 @@ msgstr "OpenWebAuth: %1$s da la bienvenida a %2$s"
#: ../../include/conversation.php:147 ../../include/text.php:2352
#: ../../addon/redphotos/redphotohelper.php:71
-#: ../../addon/pubcrawl/as.php:1958 ../../addon/diaspora/Receiver.php:1693
-#: ../../Zotlabs/Lib/Activity.php:3694 ../../Zotlabs/Module/Subthread.php:115
-#: ../../Zotlabs/Module/Tagger.php:71 ../../Zotlabs/Module/Like.php:453
+#: ../../addon/diaspora/Receiver.php:1693
+#: ../../Zotlabs/Module/Subthread.php:112 ../../Zotlabs/Module/Tagger.php:71
msgid "photo"
msgstr "foto"
-#: ../../include/conversation.php:154 ../../Zotlabs/Module/Like.php:184
+#: ../../include/conversation.php:155 ../../Zotlabs/Module/Like.php:183
msgid "channel"
msgstr "el canal"
-#: ../../include/conversation.php:177 ../../include/markdown.php:208
-#: ../../include/text.php:2358 ../../include/bbcode.php:566
-#: ../../Zotlabs/Lib/Activity.php:3694 ../../Zotlabs/Module/Tagger.php:79
+#: ../../include/conversation.php:178 ../../include/markdown.php:208
+#: ../../include/text.php:2358 ../../include/bbcode.php:571
+#: ../../Zotlabs/Module/Tagger.php:79
msgid "post"
msgstr "la entrada"
-#: ../../include/conversation.php:179 ../../include/text.php:2360
+#: ../../include/conversation.php:180 ../../include/text.php:2360
#: ../../Zotlabs/Module/Tagger.php:81
msgid "comment"
msgstr "el comentario"
-#: ../../include/conversation.php:193 ../../addon/pubcrawl/as.php:1993
-#: ../../addon/diaspora/Receiver.php:1628 ../../Zotlabs/Lib/Activity.php:3727
-#: ../../Zotlabs/Module/Like.php:485
+#: ../../include/conversation.php:194 ../../addon/diaspora/Receiver.php:1628
+#: ../../Zotlabs/Module/Like.php:483
#, php-format
msgid "%1$s likes %2$s's %3$s"
msgstr "A %1$s le gusta %3$s de %2$s"
-#: ../../include/conversation.php:196 ../../addon/pubcrawl/as.php:1995
-#: ../../Zotlabs/Lib/Activity.php:3729 ../../Zotlabs/Module/Like.php:487
-#, php-format
-msgid "%1$s doesn't like %2$s's %3$s"
-msgstr "A %1$s no le gusta %3$s de %2$s"
-
-#: ../../include/conversation.php:202
+#: ../../include/conversation.php:196
#, php-format
msgid "likes %1$s's %2$s"
msgstr "gusta de %2$s de %1$s"
-#: ../../include/conversation.php:205
+#: ../../include/conversation.php:199 ../../Zotlabs/Module/Like.php:485
#, php-format
-msgid "doesn't like %1$s's %2$s"
-msgstr "no gusta de %2$s de %1$s"
+msgid "%1$s doesn't like %2$s's %3$s"
+msgstr "A %1$s no le gusta %3$s de %2$s"
-#: ../../include/conversation.php:245 ../../include/conversation.php:247
+#: ../../include/conversation.php:200
#, php-format
-msgid "%1$s is now connected with %2$s"
-msgstr "%1$s ahora está conectado/a con %2$s"
+msgid "doesn't like %1$s's %2$s"
+msgstr "no gusta de %2$s de %1$s"
-#: ../../include/conversation.php:282
+#: ../../include/conversation.php:203
#, php-format
-msgid "%1$s poked %2$s"
-msgstr "%1$s ha dado un toque a %2$s"
+msgid "%1$s repeated %2$s's %3$s"
+msgstr "%1$s repitió %3$sde %2$s"
-#: ../../include/conversation.php:286 ../../include/text.php:1262
-msgid "poked"
-msgstr "ha dado un toque a"
-
-#: ../../include/conversation.php:305 ../../Zotlabs/Module/Mood.php:76
+#: ../../include/conversation.php:204
#, php-format
-msgctxt "mood"
-msgid "%1$s is %2$s"
-msgstr "%1$s está %2$s"
+msgid "repeated %1$s's %2$s"
+msgstr "repitió %2$s de %1$s"
-#: ../../include/conversation.php:535 ../../Zotlabs/Lib/ThreadItem.php:501
+#: ../../include/conversation.php:332 ../../Zotlabs/Lib/ThreadItem.php:532
msgid "This is an unsaved preview"
msgstr "Esta es una previsualización sin guardar"
-#: ../../include/conversation.php:667 ../../Zotlabs/Module/Photos.php:1110
+#: ../../include/conversation.php:464 ../../Zotlabs/Module/Photos.php:1110
msgctxt "title"
msgid "Likes"
msgstr "Me gusta"
-#: ../../include/conversation.php:668 ../../Zotlabs/Module/Photos.php:1110
+#: ../../include/conversation.php:465 ../../Zotlabs/Module/Photos.php:1110
msgctxt "title"
msgid "Dislikes"
msgstr "No me gusta"
-#: ../../include/conversation.php:669 ../../Zotlabs/Widget/Pinned.php:82
-#: ../../Zotlabs/Module/Photos.php:1111
-msgctxt "title"
-msgid "Agree"
-msgstr "De acuerdo"
-
-#: ../../include/conversation.php:670 ../../Zotlabs/Widget/Pinned.php:83
-#: ../../Zotlabs/Module/Photos.php:1111
-msgctxt "title"
-msgid "Disagree"
-msgstr "En desacuerdo"
-
-#: ../../include/conversation.php:671 ../../Zotlabs/Widget/Pinned.php:84
+#: ../../include/conversation.php:466 ../../Zotlabs/Widget/Pinned.php:71
#: ../../Zotlabs/Module/Photos.php:1111
msgctxt "title"
-msgid "Abstain"
-msgstr "Abstención"
-
-#: ../../include/conversation.php:672 ../../Zotlabs/Widget/Pinned.php:71
-#: ../../Zotlabs/Module/Photos.php:1112
-msgctxt "title"
msgid "Attending"
msgstr "Participaré"
-#: ../../include/conversation.php:673 ../../Zotlabs/Widget/Pinned.php:72
-#: ../../Zotlabs/Module/Photos.php:1112
+#: ../../include/conversation.php:467 ../../Zotlabs/Widget/Pinned.php:72
+#: ../../Zotlabs/Module/Photos.php:1111
msgctxt "title"
msgid "Not attending"
msgstr "No participaré"
-#: ../../include/conversation.php:674 ../../Zotlabs/Widget/Pinned.php:73
-#: ../../Zotlabs/Module/Photos.php:1112
+#: ../../include/conversation.php:468 ../../Zotlabs/Widget/Pinned.php:73
+#: ../../Zotlabs/Module/Photos.php:1111
msgctxt "title"
msgid "Might attend"
msgstr "Quizá participe"
-#: ../../include/conversation.php:744
+#: ../../include/conversation.php:470
+msgctxt "title"
+msgid "Repeats"
+msgstr "Repite"
+
+#: ../../include/conversation.php:539
msgid "Select"
msgstr "Seleccionar"
-#: ../../include/conversation.php:745 ../../include/conversation.php:808
+#: ../../include/conversation.php:540 ../../include/conversation.php:601
#: ../../addon/cards/Mod_Card_edit.php:130
#: ../../addon/articles/Mod_Article_edit.php:128
-#: ../../Zotlabs/Lib/Apps.php:619 ../../Zotlabs/Lib/ThreadItem.php:179
-#: ../../Zotlabs/Lib/ThreadItem.php:509 ../../Zotlabs/Storage/Browser.php:387
+#: ../../Zotlabs/Lib/Apps.php:617 ../../Zotlabs/Lib/ThreadItem.php:184
+#: ../../Zotlabs/Lib/ThreadItem.php:540 ../../Zotlabs/Storage/Browser.php:387
#: ../../Zotlabs/Module/Editwebpage.php:167
#: ../../Zotlabs/Module/Webpages.php:252 ../../Zotlabs/Module/Oauth.php:172
-#: ../../Zotlabs/Module/Thing.php:269 ../../Zotlabs/Module/Tokens.php:295
-#: ../../Zotlabs/Module/Contactedit.php:667
+#: ../../Zotlabs/Module/Thing.php:295 ../../Zotlabs/Module/Tokens.php:295
+#: ../../Zotlabs/Module/Contactedit.php:651
#: ../../Zotlabs/Module/Connedit.php:540 ../../Zotlabs/Module/Connedit.php:749
#: ../../Zotlabs/Module/Admin/Accounts.php:320
#: ../../Zotlabs/Module/Admin/Profs.php:176
@@ -2383,146 +2344,141 @@ msgstr "Seleccionar"
msgid "Delete"
msgstr "Eliminar"
-#: ../../include/conversation.php:751 ../../Zotlabs/Lib/ThreadItem.php:263
+#: ../../include/conversation.php:546 ../../Zotlabs/Lib/ThreadItem.php:286
msgid "Toggle Star Status"
msgstr "Activar o desactivar el estado de entrada preferida"
-#: ../../include/conversation.php:757
+#: ../../include/conversation.php:552
msgid "Private Message"
msgstr "Mensaje Privado"
-#: ../../include/conversation.php:766 ../../Zotlabs/Lib/ThreadItem.php:273
-#: ../../Zotlabs/Widget/Pinned.php:93
+#: ../../include/conversation.php:561 ../../Zotlabs/Lib/ThreadItem.php:296
+#: ../../Zotlabs/Widget/Pinned.php:82
msgid "Message signature validated"
msgstr "Firma de mensaje validada"
-#: ../../include/conversation.php:767 ../../Zotlabs/Lib/ThreadItem.php:274
-#: ../../Zotlabs/Widget/Pinned.php:94
+#: ../../include/conversation.php:562 ../../Zotlabs/Lib/ThreadItem.php:297
+#: ../../Zotlabs/Widget/Pinned.php:83
msgid "Message signature incorrect"
msgstr "Firma de mensaje incorrecta"
-#: ../../include/conversation.php:807 ../../Zotlabs/Lib/ThreadItem.php:508
+#: ../../include/conversation.php:600 ../../Zotlabs/Lib/ThreadItem.php:539
#: ../../Zotlabs/Module/Admin/Accounts.php:318
#: ../../Zotlabs/Module/Connections.php:358
#: ../../Zotlabs/Module/Connections.php:409
msgid "Approve"
msgstr "Aprobar"
-#: ../../include/conversation.php:813
+#: ../../include/conversation.php:606
#, php-format
msgid "View %s's profile @ %s"
msgstr "Ver el perfil @ %s de %s"
-#: ../../include/conversation.php:835
+#: ../../include/conversation.php:628
msgid "Categories:"
msgstr "Temas:"
-#: ../../include/conversation.php:836
+#: ../../include/conversation.php:629
msgid "Filed under:"
msgstr "Archivado bajo:"
-#: ../../include/conversation.php:842 ../../Zotlabs/Lib/ThreadItem.php:430
-#: ../../Zotlabs/Widget/Pinned.php:137
+#: ../../include/conversation.php:635 ../../Zotlabs/Lib/ThreadItem.php:451
+#: ../../Zotlabs/Widget/Pinned.php:126
#, php-format
msgid "from %s"
msgstr "desde %s"
-#: ../../include/conversation.php:845 ../../Zotlabs/Lib/ThreadItem.php:433
-#: ../../Zotlabs/Widget/Pinned.php:140
+#: ../../include/conversation.php:638 ../../Zotlabs/Lib/ThreadItem.php:454
+#: ../../Zotlabs/Widget/Pinned.php:129
#, php-format
msgid "last edited: %s"
msgstr "último cambio: %s"
-#: ../../include/conversation.php:846 ../../Zotlabs/Lib/ThreadItem.php:434
-#: ../../Zotlabs/Widget/Pinned.php:141
+#: ../../include/conversation.php:639 ../../Zotlabs/Lib/ThreadItem.php:455
+#: ../../Zotlabs/Widget/Pinned.php:130
#, php-format
msgid "Expires: %s"
msgstr "Caduca: %s"
-#: ../../include/conversation.php:861 ../../addon/cards/cards.php:82
+#: ../../include/conversation.php:654 ../../addon/cards/cards.php:82
#: ../../addon/articles/articles.php:83
msgid "View in context"
msgstr "Mostrar en su contexto"
-#: ../../include/conversation.php:863 ../../Zotlabs/Lib/ThreadItem.php:502
+#: ../../include/conversation.php:656 ../../Zotlabs/Lib/ThreadItem.php:533
#: ../../Zotlabs/Module/Photos.php:1077
msgid "Please wait"
msgstr "Espere por favor"
-#: ../../include/conversation.php:964
+#: ../../include/conversation.php:757
msgid "remove"
msgstr "eliminar"
-#: ../../include/conversation.php:968
+#: ../../include/conversation.php:761
msgid "Loading..."
msgstr "Cargando..."
-#: ../../include/conversation.php:969 ../../Zotlabs/Lib/ThreadItem.php:290
+#: ../../include/conversation.php:762 ../../Zotlabs/Lib/ThreadItem.php:313
msgid "Conversation Features"
msgstr "Funciones de conversación "
-#: ../../include/conversation.php:970
+#: ../../include/conversation.php:763
msgid "Delete Selected Items"
msgstr "Eliminar elementos seleccionados"
-#: ../../include/conversation.php:1006
+#: ../../include/conversation.php:799
msgid "View Source"
msgstr "Ver el código fuente de la entrada"
-#: ../../include/conversation.php:1016
+#: ../../include/conversation.php:809
msgid "Follow Thread"
msgstr "Seguir este hilo"
-#: ../../include/conversation.php:1025
+#: ../../include/conversation.php:818
msgid "Unfollow Thread"
msgstr "Dejar de seguir este hilo"
-#: ../../include/conversation.php:1105 ../../include/nav.php:114
+#: ../../include/conversation.php:895 ../../include/nav.php:126
#: ../../addon/openclipatar/openclipatar.php:58 ../../Zotlabs/Lib/Apps.php:349
#: ../../Zotlabs/Module/Connedit.php:480
msgid "View Profile"
msgstr "Ver el perfil"
-#: ../../include/conversation.php:1117 ../../Zotlabs/Module/Connedit.php:501
+#: ../../include/conversation.php:907 ../../Zotlabs/Module/Connedit.php:501
msgid "Recent Activity"
msgstr "Actividad reciente"
-#: ../../include/conversation.php:1129 ../../include/connections.php:141
-#: ../../include/channel.php:1616 ../../Zotlabs/Widget/Suggestions.php:51
+#: ../../include/conversation.php:919 ../../include/connections.php:141
+#: ../../include/channel.php:1624 ../../Zotlabs/Widget/Suggestions.php:51
#: ../../Zotlabs/Widget/Follow.php:37 ../../Zotlabs/Module/Suggest.php:69
#: ../../Zotlabs/Module/Directory.php:371
#: ../../Zotlabs/Module/Connections.php:365
msgid "Connect"
msgstr "Conectar"
-#: ../../include/conversation.php:1141
+#: ../../include/conversation.php:931
msgid "Edit Connection"
msgstr "Editar conexión"
-#: ../../include/conversation.php:1153 ../../Zotlabs/Lib/Apps.php:356
-#: ../../Zotlabs/Module/Poke.php:181 ../../Zotlabs/Module/Poke.php:185
-msgid "Poke"
-msgstr "Toques y otras cosas"
-
-#: ../../include/conversation.php:1228
+#: ../../include/conversation.php:1001
msgid "Approve this item"
msgstr "Aprobar este elemento"
-#: ../../include/conversation.php:1228
+#: ../../include/conversation.php:1001
msgid "Delete this item"
msgstr "Borrar este elemento"
-#: ../../include/conversation.php:1282
+#: ../../include/conversation.php:1055
#, php-format
msgid "%s likes this."
msgstr "A %s le gusta esto."
-#: ../../include/conversation.php:1282
+#: ../../include/conversation.php:1055
#, php-format
msgid "%s doesn't like this."
msgstr "A %s no le gusta esto."
-#: ../../include/conversation.php:1286
+#: ../../include/conversation.php:1059
#, php-format
msgid "<span %1$s>%2$d people</span> like this."
msgid_plural "<span %1$s>%2$d people</span> like this."
@@ -2530,7 +2486,7 @@ msgstr[0] "a <span %1$s>%2$d personas</span> le gusta esto."
msgstr[1] "A <span %1$s>%2$d personas</span> les gusta esto."
msgstr[2] "A <span %1$s>%2$d personas</span> les gusta esto."
-#: ../../include/conversation.php:1288
+#: ../../include/conversation.php:1061
#, php-format
msgid "<span %1$s>%2$d people</span> don't like this."
msgid_plural "<span %1$s>%2$d people</span> don't like this."
@@ -2538,11 +2494,11 @@ msgstr[0] "a <span %1$s>%2$d personas</span> no les gusta esto."
msgstr[1] "A <span %1$s>%2$d personas</span> no les gusta esto."
msgstr[2] "A <span %1$s>%2$d personas</span> no les gusta esto."
-#: ../../include/conversation.php:1294
+#: ../../include/conversation.php:1067
msgid "and"
msgstr "y"
-#: ../../include/conversation.php:1297
+#: ../../include/conversation.php:1070
#, php-format
msgid ", and %d other people"
msgid_plural ", and %d other people"
@@ -2550,156 +2506,157 @@ msgstr[0] ", y %d persona más"
msgstr[1] ", y %d personas más"
msgstr[2] ", y %d personas más"
-#: ../../include/conversation.php:1298
+#: ../../include/conversation.php:1071
#, php-format
msgid "%s like this."
msgstr "A %s le gusta esto."
-#: ../../include/conversation.php:1298
+#: ../../include/conversation.php:1071
#, php-format
msgid "%s don't like this."
msgstr "A %s no le gusta esto."
-#: ../../include/conversation.php:1349 ../../addon/hsse/hsse.php:82
+#: ../../include/conversation.php:1122 ../../addon/hsse/hsse.php:82
msgid "Set your location"
msgstr "Establecer su ubicación"
-#: ../../include/conversation.php:1350 ../../addon/hsse/hsse.php:83
+#: ../../include/conversation.php:1123 ../../addon/hsse/hsse.php:83
msgid "Clear browser location"
msgstr "Eliminar los datos de localización geográfica del navegador"
-#: ../../include/conversation.php:1362 ../../addon/cards/Mod_Card_edit.php:101
+#: ../../include/conversation.php:1135 ../../addon/cards/Mod_Card_edit.php:101
#: ../../addon/articles/Mod_Article_edit.php:99 ../../addon/hsse/hsse.php:95
#: ../../Zotlabs/Module/Editwebpage.php:143 ../../Zotlabs/Module/Chat.php:219
#: ../../Zotlabs/Module/Editblock.php:116
msgid "Insert web link"
msgstr "Insertar enlace web"
-#: ../../include/conversation.php:1366 ../../addon/hsse/hsse.php:99
+#: ../../include/conversation.php:1139 ../../addon/hsse/hsse.php:99
msgid "Embed (existing) photo from your photo albums"
msgstr "Insertar una foto (existente) de sus álbumes"
-#: ../../include/conversation.php:1399 ../../addon/hsse/hsse.php:134
+#: ../../include/conversation.php:1172 ../../addon/hsse/hsse.php:134
#: ../../Zotlabs/Module/Chat.php:217
msgid "Please enter a link URL:"
msgstr "Por favor, introduzca la dirección del enlace:"
-#: ../../include/conversation.php:1400 ../../addon/hsse/hsse.php:135
+#: ../../include/conversation.php:1173 ../../addon/hsse/hsse.php:135
msgid "Tag term:"
msgstr "Término de la etiqueta:"
-#: ../../include/conversation.php:1401 ../../addon/hsse/hsse.php:136
+#: ../../include/conversation.php:1174 ../../addon/hsse/hsse.php:136
msgid "Where are you right now?"
msgstr "¿Donde está ahora?"
-#: ../../include/conversation.php:1404 ../../addon/wiki/Mod_Wiki.php:400
-#: ../../addon/hsse/hsse.php:139 ../../Zotlabs/Module/Cover_photo.php:430
-#: ../../Zotlabs/Module/Profile_photo.php:555
+#: ../../include/conversation.php:1177 ../../addon/wiki/Mod_Wiki.php:400
+#: ../../addon/hsse/hsse.php:139 ../../Zotlabs/Module/Cover_photo.php:387
+#: ../../Zotlabs/Module/Profile_photo.php:554
msgid "Choose images to embed"
msgstr "Elegir imágenes para incluir"
-#: ../../include/conversation.php:1405 ../../addon/wiki/Mod_Wiki.php:401
-#: ../../addon/hsse/hsse.php:140 ../../Zotlabs/Module/Cover_photo.php:431
-#: ../../Zotlabs/Module/Profile_photo.php:556
+#: ../../include/conversation.php:1178 ../../addon/wiki/Mod_Wiki.php:401
+#: ../../addon/hsse/hsse.php:140 ../../Zotlabs/Module/Cover_photo.php:388
+#: ../../Zotlabs/Module/Profile_photo.php:555
msgid "Choose an album"
msgstr "Elegir un álbum"
-#: ../../include/conversation.php:1406 ../../addon/hsse/hsse.php:141
+#: ../../include/conversation.php:1179 ../../addon/hsse/hsse.php:141
msgid "Choose a different album..."
msgstr "Elegir un álbum diferente..."
-#: ../../include/conversation.php:1407 ../../addon/wiki/Mod_Wiki.php:403
-#: ../../addon/hsse/hsse.php:142 ../../Zotlabs/Module/Cover_photo.php:433
-#: ../../Zotlabs/Module/Profile_photo.php:558
+#: ../../include/conversation.php:1180 ../../addon/wiki/Mod_Wiki.php:403
+#: ../../addon/hsse/hsse.php:142 ../../Zotlabs/Module/Cover_photo.php:390
+#: ../../Zotlabs/Module/Profile_photo.php:557
msgid "Error getting album list"
msgstr "Error al obtener la lista de álbumes"
-#: ../../include/conversation.php:1408 ../../addon/wiki/Mod_Wiki.php:404
-#: ../../addon/hsse/hsse.php:143 ../../Zotlabs/Module/Cover_photo.php:434
-#: ../../Zotlabs/Module/Profile_photo.php:559
+#: ../../include/conversation.php:1181 ../../addon/wiki/Mod_Wiki.php:404
+#: ../../addon/hsse/hsse.php:143 ../../Zotlabs/Module/Cover_photo.php:391
+#: ../../Zotlabs/Module/Profile_photo.php:558
msgid "Error getting photo link"
msgstr "Error al obtener el enlace de la foto"
-#: ../../include/conversation.php:1409 ../../addon/wiki/Mod_Wiki.php:405
-#: ../../addon/hsse/hsse.php:144 ../../Zotlabs/Module/Cover_photo.php:435
-#: ../../Zotlabs/Module/Profile_photo.php:560
+#: ../../include/conversation.php:1182 ../../addon/wiki/Mod_Wiki.php:405
+#: ../../addon/hsse/hsse.php:144 ../../Zotlabs/Module/Cover_photo.php:392
+#: ../../Zotlabs/Module/Profile_photo.php:559
msgid "Error getting album"
msgstr "Error al obtener el álbum"
-#: ../../include/conversation.php:1410 ../../addon/hsse/hsse.php:145
+#: ../../include/conversation.php:1183 ../../addon/hsse/hsse.php:145
msgid "Comments enabled"
msgstr "Comentarios habilitados"
-#: ../../include/conversation.php:1411 ../../addon/hsse/hsse.php:146
+#: ../../include/conversation.php:1184 ../../addon/hsse/hsse.php:146
msgid "Comments disabled"
msgstr "Comentarios deshabilitados"
-#: ../../include/conversation.php:1428 ../../addon/hsse/hsse.php:153
-#: ../../Zotlabs/Lib/ThreadItem.php:842 ../../Zotlabs/Module/Webpages.php:257
+#: ../../include/conversation.php:1201 ../../addon/hsse/hsse.php:153
+#: ../../Zotlabs/Lib/ThreadItem.php:872 ../../Zotlabs/Module/Webpages.php:257
#: ../../Zotlabs/Module/Photos.php:1096
msgid "Preview"
msgstr "Previsualizar"
-#: ../../include/conversation.php:1461 ../../addon/wiki/Mod_Wiki.php:304
-#: ../../addon/hsse/hsse.php:186 ../../Zotlabs/Widget/Cdav.php:142
-#: ../../Zotlabs/Module/Webpages.php:251 ../../Zotlabs/Module/Layouts.php:192
-#: ../../Zotlabs/Module/Blocks.php:159 ../../Zotlabs/Module/Photos.php:1076
+#: ../../include/conversation.php:1234 ../../addon/wiki/Mod_Wiki.php:304
+#: ../../addon/hsse/hsse.php:186 ../../Zotlabs/Lib/ThreadItem.php:341
+#: ../../Zotlabs/Widget/Cdav.php:142 ../../Zotlabs/Module/Webpages.php:251
+#: ../../Zotlabs/Module/Layouts.php:192 ../../Zotlabs/Module/Blocks.php:159
+#: ../../Zotlabs/Module/Photos.php:1076
msgid "Share"
msgstr "Compartir"
-#: ../../include/conversation.php:1470 ../../addon/hsse/hsse.php:195
+#: ../../include/conversation.php:1243 ../../addon/hsse/hsse.php:195
msgid "Page link name"
msgstr "Nombre del enlace de la página"
-#: ../../include/conversation.php:1473 ../../addon/hsse/hsse.php:198
+#: ../../include/conversation.php:1246 ../../addon/hsse/hsse.php:198
msgid "Post as"
msgstr "Publicar como"
-#: ../../include/conversation.php:1475 ../../addon/hsse/hsse.php:200
-#: ../../Zotlabs/Lib/ThreadItem.php:833
+#: ../../include/conversation.php:1248 ../../addon/hsse/hsse.php:200
+#: ../../Zotlabs/Lib/ThreadItem.php:863
msgid "Bold"
msgstr "Negrita"
-#: ../../include/conversation.php:1476 ../../addon/hsse/hsse.php:201
-#: ../../Zotlabs/Lib/ThreadItem.php:834
+#: ../../include/conversation.php:1249 ../../addon/hsse/hsse.php:201
+#: ../../Zotlabs/Lib/ThreadItem.php:864
msgid "Italic"
msgstr "Itálico "
-#: ../../include/conversation.php:1477 ../../addon/hsse/hsse.php:202
-#: ../../Zotlabs/Lib/ThreadItem.php:835
+#: ../../include/conversation.php:1250 ../../addon/hsse/hsse.php:202
+#: ../../Zotlabs/Lib/ThreadItem.php:865
msgid "Underline"
msgstr "Subrayar"
-#: ../../include/conversation.php:1478 ../../addon/hsse/hsse.php:203
-#: ../../Zotlabs/Lib/ThreadItem.php:836
+#: ../../include/conversation.php:1251 ../../addon/hsse/hsse.php:203
+#: ../../Zotlabs/Lib/ThreadItem.php:866
msgid "Quote"
msgstr "Citar"
-#: ../../include/conversation.php:1479 ../../addon/hsse/hsse.php:204
-#: ../../Zotlabs/Lib/ThreadItem.php:837
+#: ../../include/conversation.php:1252 ../../addon/hsse/hsse.php:204
+#: ../../Zotlabs/Lib/ThreadItem.php:867
msgid "Code"
msgstr "Código"
-#: ../../include/conversation.php:1480 ../../addon/hsse/hsse.php:205
-#: ../../Zotlabs/Lib/ThreadItem.php:839
+#: ../../include/conversation.php:1253 ../../addon/hsse/hsse.php:205
+#: ../../Zotlabs/Lib/ThreadItem.php:869
msgid "Attach/Upload file"
msgstr "Adjuntar/cargar fichero"
-#: ../../include/conversation.php:1483 ../../addon/wiki/Mod_Wiki.php:397
+#: ../../include/conversation.php:1256 ../../addon/wiki/Mod_Wiki.php:397
#: ../../addon/hsse/hsse.php:208
msgid "Embed an image from your albums"
msgstr "Incluir una imagen de sus álbumes"
-#: ../../include/conversation.php:1484 ../../include/conversation.php:1539
+#: ../../include/conversation.php:1257 ../../include/conversation.php:1312
#: ../../addon/cards/Mod_Card_edit.php:132
#: ../../addon/articles/Mod_Article_edit.php:130
#: ../../addon/wiki/Mod_Wiki.php:365 ../../addon/wiki/Mod_Wiki.php:398
#: ../../addon/hsse/hsse.php:209 ../../addon/hsse/hsse.php:258
#: ../../Zotlabs/Storage/Browser.php:386
-#: ../../Zotlabs/Module/Cover_photo.php:428
+#: ../../Zotlabs/Module/Cover_photo.php:385
#: ../../Zotlabs/Module/Editwebpage.php:169 ../../Zotlabs/Module/Oauth.php:110
#: ../../Zotlabs/Module/Oauth.php:136 ../../Zotlabs/Module/Connedit.php:750
-#: ../../Zotlabs/Module/Profile_photo.php:553
+#: ../../Zotlabs/Module/Profile_photo.php:552
#: ../../Zotlabs/Module/Tagrm.php:15 ../../Zotlabs/Module/Tagrm.php:138
#: ../../Zotlabs/Module/Admin/Addons.php:430
#: ../../Zotlabs/Module/Fbrowser.php:66 ../../Zotlabs/Module/Fbrowser.php:88
@@ -2711,91 +2668,98 @@ msgstr "Incluir una imagen de sus álbumes"
msgid "Cancel"
msgstr "Cancelar"
-#: ../../include/conversation.php:1485 ../../include/conversation.php:1538
+#: ../../include/conversation.php:1258 ../../include/conversation.php:1311
#: ../../addon/wiki/Mod_Wiki.php:399 ../../addon/hsse/hsse.php:210
-#: ../../addon/hsse/hsse.php:257 ../../Zotlabs/Module/Cover_photo.php:429
-#: ../../Zotlabs/Module/Profile_photo.php:554
+#: ../../addon/hsse/hsse.php:257 ../../Zotlabs/Module/Cover_photo.php:386
+#: ../../Zotlabs/Module/Profile_photo.php:553
msgid "OK"
msgstr "OK"
-#: ../../include/conversation.php:1487 ../../addon/hsse/hsse.php:212
+#: ../../include/conversation.php:1260 ../../addon/hsse/hsse.php:212
msgid "Toggle voting"
msgstr "Cambiar votación"
-#: ../../include/conversation.php:1488
+#: ../../include/conversation.php:1261
msgid "Toggle poll"
msgstr "Activar o desactivar encuestas"
-#: ../../include/conversation.php:1489
+#: ../../include/conversation.php:1262
msgid "Option"
msgstr "Opción"
-#: ../../include/conversation.php:1490
+#: ../../include/conversation.php:1263
msgid "Add option"
msgstr "Añadir una opción"
-#: ../../include/conversation.php:1491
+#: ../../include/conversation.php:1264
msgid "Minutes"
msgstr "Minutos "
-#: ../../include/conversation.php:1491
+#: ../../include/conversation.php:1264
msgid "Hours"
msgstr "Horas "
-#: ../../include/conversation.php:1491
+#: ../../include/conversation.php:1264
msgid "Days"
msgstr "Días "
-#: ../../include/conversation.php:1492
+#: ../../include/conversation.php:1265
msgid "Allow multiple answers"
msgstr "Permitir respuestas múltiples"
-#: ../../include/conversation.php:1494 ../../addon/hsse/hsse.php:215
+#: ../../include/conversation.php:1267 ../../addon/hsse/hsse.php:215
msgid "Disable comments"
msgstr "Dehabilitar los comentarios"
-#: ../../include/conversation.php:1495 ../../addon/hsse/hsse.php:216
+#: ../../include/conversation.php:1268 ../../addon/hsse/hsse.php:216
msgid "Toggle comments"
msgstr "Activar o desactivar los comentarios"
-#: ../../include/conversation.php:1501 ../../addon/cards/Mod_Card_edit.php:118
+#: ../../include/conversation.php:1274 ../../addon/cards/Mod_Card_edit.php:118
#: ../../addon/articles/Mod_Article_edit.php:116 ../../addon/hsse/hsse.php:221
#: ../../Zotlabs/Module/Photos.php:667 ../../Zotlabs/Module/Photos.php:1042
#: ../../Zotlabs/Module/Editblock.php:129
msgid "Title (optional)"
msgstr "Título (opcional)"
-#: ../../include/conversation.php:1502
+#: ../../include/conversation.php:1275
msgid "Summary (optional)"
msgstr "Sumario (opcional)"
-#: ../../include/conversation.php:1505 ../../addon/hsse/hsse.php:224
+#: ../../include/conversation.php:1278 ../../addon/hsse/hsse.php:224
msgid "Categories (optional, comma-separated list)"
msgstr "Temas (opcional, lista separada por comas)"
-#: ../../include/conversation.php:1506 ../../addon/hsse/hsse.php:225
+#: ../../include/conversation.php:1279 ../../addon/hsse/hsse.php:225
msgid "Permission settings"
msgstr "Configuración de permisos"
-#: ../../include/conversation.php:1528 ../../addon/hsse/hsse.php:247
+#: ../../include/conversation.php:1301 ../../addon/hsse/hsse.php:247
msgid "Other networks and post services"
msgstr "Otras redes y servicios de publicación"
-#: ../../include/conversation.php:1531 ../../addon/hsse/hsse.php:250
+#: ../../include/conversation.php:1304 ../../addon/hsse/hsse.php:250
msgid "Set expiration date"
msgstr "Configurar fecha de caducidad"
-#: ../../include/conversation.php:1534 ../../addon/hsse/hsse.php:253
+#: ../../include/conversation.php:1307 ../../addon/hsse/hsse.php:253
msgid "Set publish date"
msgstr "Establecer la fecha de publicación"
-#: ../../include/conversation.php:1536 ../../addon/hsse/hsse.php:255
-#: ../../Zotlabs/Lib/ThreadItem.php:845 ../../Zotlabs/Module/Chat.php:218
+#: ../../include/conversation.php:1309 ../../addon/hsse/hsse.php:255
+#: ../../Zotlabs/Lib/ThreadItem.php:875 ../../Zotlabs/Module/Chat.php:218
msgid "Encrypt text"
msgstr "Cifrar texto"
-#: ../../include/conversation.php:1780 ../../Zotlabs/Lib/ThreadItem.php:239
-#: ../../Zotlabs/Module/Photos.php:1135
+#: ../../include/conversation.php:1553
+msgctxt "noun"
+msgid "Repeat"
+msgid_plural "Repeats"
+msgstr[0] "Se repite"
+msgstr[1] "Se repite"
+msgstr[2] "Repite"
+
+#: ../../include/conversation.php:1556 ../../Zotlabs/Module/Photos.php:1134
msgctxt "noun"
msgid "Dislike"
msgid_plural "Dislikes"
@@ -2803,7 +2767,7 @@ msgstr[0] "No me gusta"
msgstr[1] "No me gusta"
msgstr[2] "No me gusta"
-#: ../../include/conversation.php:1783
+#: ../../include/conversation.php:1559
msgctxt "noun"
msgid "Attending"
msgid_plural "Attending"
@@ -2811,7 +2775,7 @@ msgstr[0] "Participaré"
msgstr[1] "Participaré"
msgstr[2] "Participaré"
-#: ../../include/conversation.php:1786
+#: ../../include/conversation.php:1562
msgctxt "noun"
msgid "Not Attending"
msgid_plural "Not Attending"
@@ -2819,7 +2783,7 @@ msgstr[0] "No participaré"
msgstr[1] "No participaré"
msgstr[2] "No participaré"
-#: ../../include/conversation.php:1789
+#: ../../include/conversation.php:1565
msgctxt "noun"
msgid "Undecided"
msgid_plural "Undecided"
@@ -2827,50 +2791,26 @@ msgstr[0] "Indeciso/a"
msgstr[1] "Indecisos/as"
msgstr[2] "Indecisos/as"
-#: ../../include/conversation.php:1792
-msgctxt "noun"
-msgid "Agree"
-msgid_plural "Agrees"
-msgstr[0] "De acuerdo"
-msgstr[1] "De acuerdo"
-msgstr[2] "De acuerdo"
-
-#: ../../include/conversation.php:1795
-msgctxt "noun"
-msgid "Disagree"
-msgid_plural "Disagrees"
-msgstr[0] "En desacuerdo"
-msgstr[1] "En desacuerdo"
-msgstr[2] "En desacuerdo"
-
-#: ../../include/conversation.php:1798
-msgctxt "noun"
-msgid "Abstain"
-msgid_plural "Abstains"
-msgstr[0] "se abstiene"
-msgstr[1] "Se abstienen"
-msgstr[2] "Se abstienen"
-
-#: ../../include/nav.php:96
+#: ../../include/nav.php:108
msgid "Remote authentication"
msgstr "Acceder desde su servidor"
-#: ../../include/nav.php:96
+#: ../../include/nav.php:108
msgid "Click to authenticate to your home hub"
msgstr "Pulsar para identificarse en su servidor de inicio"
-#: ../../include/nav.php:102 ../../Zotlabs/Widget/Channel_activities.php:239
+#: ../../include/nav.php:114 ../../Zotlabs/Widget/Channel_activities.php:239
#: ../../Zotlabs/Widget/Admin.php:29
#: ../../Zotlabs/Module/Admin/Channels.php:146
#: ../../Zotlabs/Module/Manage.php:162 ../../Zotlabs/Module/Admin.php:116
msgid "Channels"
msgstr "Canales"
-#: ../../include/nav.php:102
+#: ../../include/nav.php:114
msgid "Manage your channels"
msgstr "Gestionar sus canales"
-#: ../../include/nav.php:105 ../../Zotlabs/Lib/Apps.php:344
+#: ../../include/nav.php:117 ../../Zotlabs/Lib/Apps.php:344
#: ../../Zotlabs/Widget/Newmember.php:58
#: ../../Zotlabs/Widget/Settings_menu.php:71
#: ../../Zotlabs/Module/Admin/Themes.php:140
@@ -2878,188 +2818,188 @@ msgstr "Gestionar sus canales"
msgid "Settings"
msgstr "Ajustes"
-#: ../../include/nav.php:105
+#: ../../include/nav.php:117
msgid "Account/Channel Settings"
msgstr "Ajustes de cuenta/canales"
-#: ../../include/nav.php:111 ../../include/nav.php:141
-#: ../../include/nav.php:162 ../../boot.php:1747
+#: ../../include/nav.php:123 ../../include/nav.php:153
+#: ../../include/nav.php:174 ../../boot.php:1745
msgid "Logout"
msgstr "Finalizar sesión"
-#: ../../include/nav.php:111 ../../include/nav.php:141
+#: ../../include/nav.php:123 ../../include/nav.php:153
msgid "End this session"
msgstr "Finalizar esta sesión"
-#: ../../include/nav.php:114
+#: ../../include/nav.php:126
msgid "Your profile page"
msgstr "Su página del perfil"
-#: ../../include/nav.php:117 ../../include/channel.php:1530
-#: ../../Zotlabs/Module/Profiles.php:851
+#: ../../include/nav.php:129 ../../include/channel.php:1538
+#: ../../Zotlabs/Module/Profiles.php:847
msgid "Edit Profiles"
msgstr "Editar perfiles"
-#: ../../include/nav.php:117
+#: ../../include/nav.php:129
msgid "Manage/Edit profiles"
msgstr "Administrar/editar perfiles"
-#: ../../include/nav.php:119 ../../include/channel.php:1534
+#: ../../include/nav.php:131 ../../include/channel.php:1542
#: ../../addon/openclipatar/openclipatar.php:59
msgid "Edit Profile"
msgstr "Editar el perfil"
-#: ../../include/nav.php:119 ../../Zotlabs/Widget/Newmember.php:40
+#: ../../include/nav.php:131 ../../Zotlabs/Widget/Newmember.php:40
msgid "Edit your profile"
msgstr "Editar su perfil"
-#: ../../include/nav.php:126 ../../include/nav.php:130 ../../boot.php:1748
+#: ../../include/nav.php:138 ../../include/nav.php:142 ../../boot.php:1746
#: ../../Zotlabs/Lib/Apps.php:341
msgid "Login"
msgstr "Iniciar sesión"
-#: ../../include/nav.php:126 ../../include/nav.php:130
+#: ../../include/nav.php:138 ../../include/nav.php:142
msgid "Sign in"
msgstr "Acceder"
-#: ../../include/nav.php:160
+#: ../../include/nav.php:172
msgid "Take me home"
msgstr "Volver a la página principal"
-#: ../../include/nav.php:162
+#: ../../include/nav.php:174
msgid "Log me out of this site"
msgstr "Salir de este sitio"
-#: ../../include/nav.php:167 ../../boot.php:1725
+#: ../../include/nav.php:179 ../../boot.php:1723
#: ../../Zotlabs/Module/Register.php:542
msgid "Register"
msgstr "Registrarse"
-#: ../../include/nav.php:167
+#: ../../include/nav.php:179
msgid "Create an account"
msgstr "Crear una cuenta"
-#: ../../include/nav.php:181
+#: ../../include/nav.php:193
msgid "Help and documentation"
msgstr "Ayuda y documentación"
-#: ../../include/nav.php:195 ../../include/acl_selectors.php:149
-#: ../../include/text.php:1170 ../../include/text.php:1182
-#: ../../Zotlabs/Lib/Apps.php:358 ../../Zotlabs/Widget/Sitesearch.php:37
+#: ../../include/nav.php:207 ../../include/acl_selectors.php:149
+#: ../../include/text.php:1189 ../../include/text.php:1201
+#: ../../Zotlabs/Lib/Apps.php:356 ../../Zotlabs/Widget/Sitesearch.php:37
#: ../../Zotlabs/Widget/Activity_filter.php:210
#: ../../Zotlabs/Module/Search.php:46 ../../Zotlabs/Module/Connections.php:403
msgid "Search"
msgstr "Buscar"
-#: ../../include/nav.php:195
+#: ../../include/nav.php:207
msgid "Search site @name, !forum, #tag, ?docs, content"
msgstr "Buscar en el sitio @nombre, !foro, #tag, ?docs, contenido"
-#: ../../include/nav.php:201 ../../Zotlabs/Widget/Admin.php:61
+#: ../../include/nav.php:213 ../../Zotlabs/Widget/Admin.php:61
msgid "Admin"
msgstr "Administrador"
-#: ../../include/nav.php:201
+#: ../../include/nav.php:213
msgid "Site Setup and Configuration"
msgstr "Ajustes y configuración del sitio"
-#: ../../include/nav.php:332 ../../Zotlabs/Widget/Notifications.php:175
+#: ../../include/nav.php:344 ../../Zotlabs/Widget/Notifications.php:175
#: ../../Zotlabs/Widget/Messages.php:36 ../../Zotlabs/Module/Defperms.php:254
#: ../../Zotlabs/Module/New_channel.php:157
#: ../../Zotlabs/Module/New_channel.php:164
msgid "Loading"
msgstr "Cargando"
-#: ../../include/nav.php:337
+#: ../../include/nav.php:349
msgid "@name, #tag, ?doc, content"
msgstr "@nombre, #etiqueta, ?ayuda, contenido"
-#: ../../include/nav.php:338
+#: ../../include/nav.php:350
msgid "Please wait..."
msgstr "Espere por favor…"
-#: ../../include/nav.php:344 ../../Zotlabs/Lib/Apps.php:328
+#: ../../include/nav.php:356 ../../Zotlabs/Lib/Apps.php:328
msgid "Apps"
msgstr "Aplicaciones (apps)"
-#: ../../include/nav.php:345
+#: ../../include/nav.php:357
msgid "Channel Apps"
msgstr "Apps del canal "
-#: ../../include/nav.php:346
+#: ../../include/nav.php:358
msgid "System Apps"
msgstr "Apps del sistema "
-#: ../../include/nav.php:347
+#: ../../include/nav.php:359
msgid "Pinned Apps"
msgstr "Apps ancladas "
-#: ../../include/nav.php:348
+#: ../../include/nav.php:360
msgid "Featured Apps"
msgstr "Apps destacadas "
-#: ../../include/nav.php:434 ../../Zotlabs/Lib/Apps.php:348
+#: ../../include/nav.php:446 ../../Zotlabs/Lib/Apps.php:348
#: ../../Zotlabs/Module/Admin/Channels.php:154
msgid "Channel"
msgstr "Canal"
-#: ../../include/nav.php:437
+#: ../../include/nav.php:449
msgid "Status Messages and Posts"
msgstr "Mensajes de estado y publicaciones"
-#: ../../include/nav.php:447 ../../Zotlabs/Module/Help.php:85
+#: ../../include/nav.php:459 ../../Zotlabs/Module/Help.php:85
msgid "About"
msgstr "Mi perfil"
-#: ../../include/nav.php:450
+#: ../../include/nav.php:462
msgid "Profile Details"
msgstr "Detalles del perfil"
-#: ../../include/nav.php:460 ../../include/photos.php:721
+#: ../../include/nav.php:472 ../../include/photos.php:721
msgid "Photo Albums"
msgstr "Álbumes de fotos"
-#: ../../include/nav.php:465 ../../Zotlabs/Lib/Apps.php:345
+#: ../../include/nav.php:477 ../../Zotlabs/Lib/Apps.php:345
#: ../../Zotlabs/Widget/Notifications.php:108
#: ../../Zotlabs/Widget/Channel_activities.php:125
#: ../../Zotlabs/Storage/Browser.php:350 ../../Zotlabs/Module/Fbrowser.php:85
msgid "Files"
msgstr "Ficheros"
-#: ../../include/nav.php:468
+#: ../../include/nav.php:480
msgid "Files and Storage"
msgstr "Ficheros y repositorio"
-#: ../../include/nav.php:490 ../../include/nav.php:493
+#: ../../include/nav.php:502 ../../include/nav.php:505
#: ../../Zotlabs/Lib/Apps.php:335 ../../Zotlabs/Widget/Chatroom_list.php:22
msgid "Chatrooms"
msgstr "Salas de chat"
-#: ../../include/nav.php:503 ../../Zotlabs/Lib/Apps.php:334
+#: ../../include/nav.php:515 ../../Zotlabs/Lib/Apps.php:334
#: ../../Zotlabs/Module/Bookmarks.php:90
msgid "Bookmarks"
msgstr "Marcadores"
-#: ../../include/nav.php:506
+#: ../../include/nav.php:518
msgid "Saved Bookmarks"
msgstr "Marcadores guardados"
-#: ../../include/nav.php:514 ../../Zotlabs/Lib/Apps.php:346
+#: ../../include/nav.php:526 ../../Zotlabs/Lib/Apps.php:346
#: ../../Zotlabs/Widget/Channel_activities.php:168
#: ../../Zotlabs/Module/Webpages.php:247
msgid "Webpages"
msgstr "Páginas web"
-#: ../../include/nav.php:517
+#: ../../include/nav.php:529
msgid "View Webpages"
msgstr "Ver páginas web"
-#: ../../include/nav.php:525 ../../addon/wiki/Mod_Wiki.php:209
-#: ../../addon/wiki/Widget/Wiki_list.php:20 ../../addon/wiki/wiki.php:70
+#: ../../include/nav.php:537 ../../addon/wiki/Mod_Wiki.php:209
+#: ../../addon/wiki/Widget/Wiki_list.php:23 ../../addon/wiki/wiki.php:72
msgid "Wikis"
msgstr "Wikis"
-#: ../../include/nav.php:528 ../../Zotlabs/Lib/Apps.php:347
+#: ../../include/nav.php:540 ../../Zotlabs/Lib/Apps.php:347
msgid "Wiki"
msgstr "Wiki"
@@ -3070,7 +3010,7 @@ msgid ""
msgstr "El \"token\" de seguridad del formulario no es correcto. Esto ha ocurrido probablemente porque el formulario ha estado abierto demasiado tiempo (>3 horas) antes de ser enviado"
#: ../../include/datetime.php:58 ../../Zotlabs/Widget/Newmember.php:56
-#: ../../Zotlabs/Module/Profiles.php:752
+#: ../../Zotlabs/Module/Profiles.php:748
msgid "Miscellaneous"
msgstr "Varios"
@@ -3086,7 +3026,7 @@ msgstr "Edad:"
msgid "YYYY-MM-DD or MM-DD"
msgstr "AAAA-MM-DD o MM-DD"
-#: ../../include/datetime.php:238 ../../boot.php:2754
+#: ../../include/datetime.php:238 ../../boot.php:2752
msgid "never"
msgstr "nunca"
@@ -3175,8 +3115,8 @@ msgstr "La imagen excede el límite de %lu bytes del sitio"
msgid "Image file is empty."
msgstr "El fichero de imagen está vacío. "
-#: ../../include/photos.php:197 ../../Zotlabs/Module/Cover_photo.php:241
-#: ../../Zotlabs/Module/Profile_photo.php:275
+#: ../../include/photos.php:197 ../../Zotlabs/Module/Cover_photo.php:239
+#: ../../Zotlabs/Module/Profile_photo.php:274
msgid "Unable to process image"
msgstr "No ha sido posible procesar la imagen"
@@ -3227,28 +3167,27 @@ msgstr "cadena_de_error: "
msgid "content-type: "
msgstr "tipo de contenido: "
-#: ../../include/network.php:1768 ../../include/network.php:1769
+#: ../../include/network.php:1770 ../../include/network.php:1771
msgid "Friendica"
msgstr "Friendica"
-#: ../../include/network.php:1770
+#: ../../include/network.php:1772
msgid "OStatus"
msgstr "OStatus"
-#: ../../include/network.php:1771
+#: ../../include/network.php:1773
msgid "GNU-Social"
msgstr "GNU Social"
-#: ../../include/network.php:1772
+#: ../../include/network.php:1774
msgid "RSS/Atom"
msgstr "RSS/Atom"
-#: ../../include/network.php:1773 ../../addon/pubcrawl/as.php:1332
-#: ../../addon/pubcrawl/as.php:2002 ../../Zotlabs/Lib/Activity.php:3736
+#: ../../include/network.php:1775
msgid "ActivityPub"
msgstr "ActivityPub"
-#: ../../include/network.php:1774 ../../addon/openid/MysqlProvider.php:56
+#: ../../include/network.php:1776 ../../addon/openid/MysqlProvider.php:56
#: ../../addon/openid/MysqlProvider.php:57
#: ../../addon/redred/Mod_Redred.php:69 ../../addon/rtof/Mod_Rtof.php:55
#: ../../Zotlabs/Module/Connedit.php:736
@@ -3258,36 +3197,36 @@ msgstr "ActivityPub"
msgid "Email"
msgstr "Correo electrónico"
-#: ../../include/network.php:1775
+#: ../../include/network.php:1777
msgid "Diaspora"
msgstr "Diaspora"
-#: ../../include/network.php:1776
+#: ../../include/network.php:1778
msgid "Facebook"
msgstr "Facebook"
-#: ../../include/network.php:1777
+#: ../../include/network.php:1779
msgid "Zot"
msgstr "Zot"
-#: ../../include/network.php:1778
+#: ../../include/network.php:1780
msgid "LinkedIn"
msgstr "LinkedIn"
-#: ../../include/network.php:1779
+#: ../../include/network.php:1781
msgid "XMPP/IM"
msgstr "XMPP/IM"
-#: ../../include/network.php:1780
+#: ../../include/network.php:1782
msgid "MySpace"
msgstr "MySpace"
-#: ../../include/markdown.php:206 ../../include/bbcode.php:570
+#: ../../include/markdown.php:206 ../../include/bbcode.php:575
#, php-format
msgid "%1$s wrote the following %2$s %3$s"
msgstr "%1$s escribió la/el %2$s siguiente %3$s"
-#: ../../include/markdown.php:259 ../../include/bbcode.php:655
+#: ../../include/markdown.php:259 ../../include/bbcode.php:660
msgid "spoiler"
msgstr "spoiler"
@@ -3299,16 +3238,16 @@ msgstr "por defecto"
msgid "Select an alternate language"
msgstr "Seleccionar un idioma alternativo"
-#: ../../include/menu.php:120 ../../include/channel.php:1530
-#: ../../include/channel.php:1534 ../../addon/cards/cards.php:74
+#: ../../include/menu.php:120 ../../include/channel.php:1538
+#: ../../include/channel.php:1542 ../../addon/cards/cards.php:74
#: ../../addon/cards/Mod_Card_edit.php:99
#: ../../addon/articles/Mod_Article_edit.php:97
#: ../../addon/articles/articles.php:75 ../../addon/wiki/Mod_Wiki.php:214
-#: ../../addon/wiki/Mod_Wiki.php:381 ../../Zotlabs/Lib/Apps.php:618
-#: ../../Zotlabs/Lib/ThreadItem.php:158 ../../Zotlabs/Widget/Cdav.php:144
+#: ../../addon/wiki/Mod_Wiki.php:381 ../../Zotlabs/Lib/Apps.php:616
+#: ../../Zotlabs/Lib/ThreadItem.php:163 ../../Zotlabs/Widget/Cdav.php:144
#: ../../Zotlabs/Widget/Cdav.php:181 ../../Zotlabs/Module/Editwebpage.php:142
#: ../../Zotlabs/Module/Webpages.php:250 ../../Zotlabs/Module/Oauth.php:171
-#: ../../Zotlabs/Module/Thing.php:268 ../../Zotlabs/Module/Layouts.php:191
+#: ../../Zotlabs/Module/Thing.php:294 ../../Zotlabs/Module/Layouts.php:191
#: ../../Zotlabs/Module/Menu.php:176 ../../Zotlabs/Module/Admin/Profs.php:175
#: ../../Zotlabs/Module/Group.php:245 ../../Zotlabs/Module/Blocks.php:158
#: ../../Zotlabs/Module/Editlayout.php:114
@@ -3370,15 +3309,15 @@ msgstr "No permitir"
#: ../../include/acl_selectors.php:154
#: ../../addon/flashcards/Mod_Flashcards.php:261
-#: ../../Zotlabs/Module/Thing.php:321 ../../Zotlabs/Module/Thing.php:374
+#: ../../Zotlabs/Module/Thing.php:350 ../../Zotlabs/Module/Thing.php:402
#: ../../Zotlabs/Module/Filestorage.php:195
#: ../../Zotlabs/Module/Photos.php:671 ../../Zotlabs/Module/Photos.php:1045
#: ../../Zotlabs/Module/Chat.php:240
msgid "Permissions"
msgstr "Permisos"
-#: ../../include/acl_selectors.php:156 ../../Zotlabs/Lib/ThreadItem.php:496
-#: ../../Zotlabs/Widget/Pinned.php:163 ../../Zotlabs/Storage/Browser.php:414
+#: ../../include/acl_selectors.php:156 ../../Zotlabs/Lib/ThreadItem.php:527
+#: ../../Zotlabs/Widget/Pinned.php:152 ../../Zotlabs/Storage/Browser.php:414
#: ../../Zotlabs/Module/Photos.php:1266
msgid "Close"
msgstr "Cerrar"
@@ -3390,66 +3329,66 @@ msgid ""
" permissions set who is allowed to view the post."
msgstr "Los permisos de la entrada %s no se pueden cambiar %s una vez que se ha compartido.</br /> Estos permisos establecen quién está autorizado para ver el mensaje."
-#: ../../include/text.php:546
+#: ../../include/text.php:561
msgid "prev"
msgstr "anterior"
-#: ../../include/text.php:548
+#: ../../include/text.php:563
msgid "first"
msgstr "primera"
-#: ../../include/text.php:577
+#: ../../include/text.php:592
msgid "last"
msgstr "última"
-#: ../../include/text.php:580
+#: ../../include/text.php:595
msgid "next"
msgstr "próxima"
-#: ../../include/text.php:598
+#: ../../include/text.php:613
msgid "older"
msgstr "más antiguas"
-#: ../../include/text.php:600
+#: ../../include/text.php:615
msgid "newer"
msgstr "más recientes"
-#: ../../include/text.php:1066 ../../Zotlabs/Module/Viewconnections.php:80
+#: ../../include/text.php:1085 ../../Zotlabs/Module/Viewconnections.php:80
#: ../../Zotlabs/Module/Connections.php:306
msgid "Accepts"
msgstr "Se acepta"
-#: ../../include/text.php:1069 ../../Zotlabs/Module/Viewconnections.php:83
+#: ../../include/text.php:1088 ../../Zotlabs/Module/Viewconnections.php:83
#: ../../Zotlabs/Module/Connections.php:309
msgid "Comments"
msgstr "Comentarios"
-#: ../../include/text.php:1074 ../../Zotlabs/Module/Viewconnections.php:88
+#: ../../include/text.php:1093 ../../Zotlabs/Module/Viewconnections.php:88
#: ../../Zotlabs/Module/Connections.php:314
msgid "Stream items"
msgstr "Elementos del stream"
-#: ../../include/text.php:1079 ../../Zotlabs/Module/Viewconnections.php:93
+#: ../../include/text.php:1098 ../../Zotlabs/Module/Viewconnections.php:93
#: ../../Zotlabs/Module/Connections.php:319
msgid "Wall posts"
msgstr "Entradas del Muro"
-#: ../../include/text.php:1083 ../../Zotlabs/Module/Viewconnections.php:97
+#: ../../include/text.php:1102 ../../Zotlabs/Module/Viewconnections.php:97
#: ../../Zotlabs/Module/Connections.php:323
msgid "Nothing"
msgstr "Nada"
-#: ../../include/text.php:1096
+#: ../../include/text.php:1115
#, php-format
msgid "View all %s connections"
msgstr "Ver todas las %s conexiones"
-#: ../../include/text.php:1159
+#: ../../include/text.php:1178
#, php-format
msgid "Network: %s"
msgstr "Red %s"
-#: ../../include/text.php:1171 ../../include/text.php:1183
+#: ../../include/text.php:1190 ../../include/text.php:1202
#: ../../addon/cards/Mod_Cards.php:116
#: ../../addon/articles/Mod_Articles.php:120
#: ../../Zotlabs/Module/Admin/Queueworker.php:114
@@ -3459,116 +3398,20 @@ msgstr "Red %s"
msgid "Save"
msgstr "Guardar"
-#: ../../include/text.php:1262
-msgid "poke"
-msgstr "un toque"
-
-#: ../../include/text.php:1263
-msgid "ping"
-msgstr "un \"ping\""
-
-#: ../../include/text.php:1263
-msgid "pinged"
-msgstr "ha enviado un \"ping\" a"
-
-#: ../../include/text.php:1292
-msgid "happy"
-msgstr "feliz "
-
-#: ../../include/text.php:1293
-msgid "sad"
-msgstr "triste "
-
-#: ../../include/text.php:1294
-msgid "mellow"
-msgstr "tranquilo/a"
-
-#: ../../include/text.php:1295
-msgid "tired"
-msgstr "cansado/a "
-
-#: ../../include/text.php:1296
-msgid "perky"
-msgstr "vivaz"
-
-#: ../../include/text.php:1297
-msgid "angry"
-msgstr "enfadado/a"
-
-#: ../../include/text.php:1298
-msgid "stupefied"
-msgstr "asombrado/a"
-
-#: ../../include/text.php:1299
-msgid "puzzled"
-msgstr "perplejo/a"
-
-#: ../../include/text.php:1300
-msgid "interested"
-msgstr "interesado/a"
-
-#: ../../include/text.php:1301
-msgid "bitter"
-msgstr "amargado/a"
-
-#: ../../include/text.php:1302
-msgid "cheerful"
-msgstr "alegre"
-
-#: ../../include/text.php:1303
-msgid "alive"
-msgstr "animado/a"
-
-#: ../../include/text.php:1304
-msgid "annoyed"
-msgstr "molesto/a"
-
-#: ../../include/text.php:1305
-msgid "anxious"
-msgstr "ansioso/a"
-
-#: ../../include/text.php:1306
-msgid "cranky"
-msgstr "de mal humor"
-
-#: ../../include/text.php:1307
-msgid "disturbed"
-msgstr "perturbado/a"
-
-#: ../../include/text.php:1308
-msgid "frustrated"
-msgstr "frustrado/a"
-
-#: ../../include/text.php:1309
-msgid "depressed"
-msgstr "deprimido/a"
-
-#: ../../include/text.php:1310
-msgid "motivated"
-msgstr "motivado/a"
-
-#: ../../include/text.php:1311
-msgid "relaxed"
-msgstr "relajado/a"
-
-#: ../../include/text.php:1312
-msgid "surprised"
-msgstr "sorprendido/a"
-
-#: ../../include/text.php:1504
+#: ../../include/text.php:1502
msgid "May"
msgstr "mayo"
-#: ../../include/text.php:1578
+#: ../../include/text.php:1576
msgid "Unknown attachment"
msgstr "Adjunto no reconocido"
-#: ../../include/text.php:1581 ../../Zotlabs/Storage/Browser.php:382
+#: ../../include/text.php:1579 ../../Zotlabs/Storage/Browser.php:382
#: ../../Zotlabs/Module/Sharedwithme.php:109
msgid "Size"
msgstr "Tamaño"
-#: ../../include/text.php:1623
+#: ../../include/text.php:1622
msgid "remove category"
msgstr "eliminar el tema"
@@ -3608,7 +3451,7 @@ msgstr "La encuesta ha terminado"
msgid "Poll ends in %s"
msgstr "La encuesta termina en %s"
-#: ../../include/text.php:2013 ../../Zotlabs/Lib/ThreadItem.php:446
+#: ../../include/text.php:2013 ../../Zotlabs/Lib/ThreadItem.php:467
msgid "Vote"
msgstr "Votar"
@@ -3626,7 +3469,7 @@ msgstr "Puede crear su propia disposición gráfica con la herramienta de planti
#: ../../include/text.php:2211 ../../addon/wiki/Mod_Wiki.php:220
#: ../../addon/wiki/Mod_Wiki.php:368 ../../addon/wiki/Mod_Wiki.php:903
-#: ../../addon/wiki/Widget/Wiki_pages.php:65
+#: ../../addon/wiki/Widget/Wiki_pages.php:68
msgid "BBcode"
msgstr "BBcode"
@@ -3636,12 +3479,12 @@ msgstr "HTML"
#: ../../include/text.php:2213 ../../addon/wiki/Mod_Wiki.php:220
#: ../../addon/wiki/Mod_Wiki.php:368 ../../addon/wiki/Mod_Wiki.php:903
-#: ../../addon/wiki/Widget/Wiki_pages.php:65 ../../addon/mdpost/mdpost.php:41
+#: ../../addon/wiki/Widget/Wiki_pages.php:68 ../../addon/mdpost/mdpost.php:41
msgid "Markdown"
msgstr "Markdown"
#: ../../include/text.php:2214 ../../addon/wiki/Mod_Wiki.php:220
-#: ../../addon/wiki/Mod_Wiki.php:903 ../../addon/wiki/Widget/Wiki_pages.php:65
+#: ../../addon/wiki/Mod_Wiki.php:903 ../../addon/wiki/Widget/Wiki_pages.php:68
msgid "Text"
msgstr "Texto"
@@ -3669,140 +3512,140 @@ msgstr "encuesta"
msgid "a-z, 0-9, -, and _ only"
msgstr "a-z, 0-9, -, and _ only"
-#: ../../include/text.php:2786
+#: ../../include/text.php:2789
msgid "Design Tools"
msgstr "Herramientas de diseño web"
-#: ../../include/text.php:2789 ../../Zotlabs/Module/Blocks.php:152
+#: ../../include/text.php:2792 ../../Zotlabs/Module/Blocks.php:152
msgid "Blocks"
msgstr "Bloques"
-#: ../../include/text.php:2790 ../../Zotlabs/Module/Menu.php:171
+#: ../../include/text.php:2793 ../../Zotlabs/Module/Menu.php:171
msgid "Menus"
msgstr "Menús"
-#: ../../include/text.php:2791 ../../Zotlabs/Module/Layouts.php:182
+#: ../../include/text.php:2794 ../../Zotlabs/Module/Layouts.php:182
msgid "Layouts"
msgstr "Plantillas"
-#: ../../include/text.php:2792
+#: ../../include/text.php:2795
msgid "Pages"
msgstr "Páginas"
-#: ../../include/text.php:2804
+#: ../../include/text.php:2807
msgid "Import"
msgstr "Importar"
-#: ../../include/text.php:2805
+#: ../../include/text.php:2808
msgid "Import website..."
msgstr "Importar un sitio web..."
-#: ../../include/text.php:2806
+#: ../../include/text.php:2809
msgid "Select folder to import"
msgstr "Seleccionar la carpeta que se va a importar"
-#: ../../include/text.php:2807
+#: ../../include/text.php:2810
msgid "Import from a zipped folder:"
msgstr "Importar desde una carpeta comprimida: "
-#: ../../include/text.php:2808
+#: ../../include/text.php:2811
msgid "Import from cloud files:"
msgstr "Importar desde los ficheros en la nube: "
-#: ../../include/text.php:2809
+#: ../../include/text.php:2812
msgid "/cloud/channel/path/to/folder"
msgstr "/cloud/canal/ruta/a la/carpeta"
-#: ../../include/text.php:2810
+#: ../../include/text.php:2813
msgid "Enter path to website files"
msgstr "Ruta a los ficheros del sitio web"
-#: ../../include/text.php:2811
+#: ../../include/text.php:2814
msgid "Select folder"
msgstr "Seleccionar la carpeta"
-#: ../../include/text.php:2812
+#: ../../include/text.php:2815
msgid "Export website..."
msgstr "Exportar un sitio web..."
-#: ../../include/text.php:2813
+#: ../../include/text.php:2816
msgid "Export to a zip file"
msgstr "Exportar a un fichero comprimido .zip"
-#: ../../include/text.php:2814
+#: ../../include/text.php:2817
msgid "website.zip"
msgstr "sitio_web.zip"
-#: ../../include/text.php:2815
+#: ../../include/text.php:2818
msgid "Enter a name for the zip file."
msgstr "Escriba un nombre para el fichero zip."
-#: ../../include/text.php:2816
+#: ../../include/text.php:2819
msgid "Export to cloud files"
msgstr "Exportar a la nube de ficheros"
-#: ../../include/text.php:2817
+#: ../../include/text.php:2820
msgid "/path/to/export/folder"
msgstr "/ruta/para/exportar/carpeta"
-#: ../../include/text.php:2818
+#: ../../include/text.php:2821
msgid "Enter a path to a cloud files destination."
msgstr "Escriba una ruta de destino a la nube de ficheros."
-#: ../../include/text.php:2819
+#: ../../include/text.php:2822
msgid "Specify folder"
msgstr "Especificar una carpeta"
-#: ../../include/channel.php:48
+#: ../../include/channel.php:49
msgid "Unable to obtain identity information from database"
msgstr "No ha sido posible obtener información sobre la identidad desde la base de datos"
-#: ../../include/channel.php:81
+#: ../../include/channel.php:82
msgid "Empty name"
msgstr "Nombre vacío"
-#: ../../include/channel.php:84
+#: ../../include/channel.php:85
msgid "Name too long"
msgstr "Nombre demasiado largo"
-#: ../../include/channel.php:201
+#: ../../include/channel.php:202
msgid "No account identifier"
msgstr "Ningún identificador de la cuenta"
-#: ../../include/channel.php:213 ../../Zotlabs/Module/Register.php:95
+#: ../../include/channel.php:214 ../../Zotlabs/Module/Register.php:95
msgid "Nickname is required."
msgstr "Se requiere un sobrenombre (alias)."
-#: ../../include/channel.php:227 ../../include/channel.php:659
+#: ../../include/channel.php:228 ../../include/channel.php:667
#: ../../Zotlabs/Module/Register.php:100
#: ../../Zotlabs/Module/Changeaddr.php:46
msgid "Reserved nickname. Please choose another."
msgstr "Sobrenombre en uso. Por favor, elija otro."
-#: ../../include/channel.php:232 ../../include/channel.php:664
+#: ../../include/channel.php:233 ../../include/channel.php:672
#: ../../Zotlabs/Module/Register.php:105
#: ../../Zotlabs/Module/Changeaddr.php:51
msgid ""
"Nickname has unsupported characters or is already being used on this site."
msgstr "El alias contiene caracteres no admitidos o está ya en uso por otros miembros de este sitio."
-#: ../../include/channel.php:292
+#: ../../include/channel.php:299
msgid "Unable to retrieve created identity"
msgstr "No ha sido posible recuperar la identidad creada"
-#: ../../include/channel.php:402
+#: ../../include/channel.php:410
msgid "Default Profile"
msgstr "Perfil principal"
-#: ../../include/channel.php:592 ../../include/channel.php:681
+#: ../../include/channel.php:600 ../../include/channel.php:689
msgid "Unable to retrieve modified identity"
msgstr "No se puede recuperar la identidad modficada"
-#: ../../include/channel.php:1373
+#: ../../include/channel.php:1381
msgid "Requested channel is not available"
msgstr "El canal solicitado no está disponible"
-#: ../../include/channel.php:1427 ../../addon/cards/Mod_Cards.php:42
+#: ../../include/channel.php:1435 ../../addon/cards/Mod_Cards.php:42
#: ../../addon/articles/Mod_Articles.php:46
#: ../../addon/gallery/Mod_Gallery.php:49
#: ../../Zotlabs/Module/Editwebpage.php:32
@@ -3816,255 +3659,251 @@ msgstr "El canal solicitado no está disponible"
msgid "Requested profile is not available."
msgstr "El perfil solicitado no está disponible."
-#: ../../include/channel.php:1523 ../../Zotlabs/Module/Profiles.php:744
+#: ../../include/channel.php:1531 ../../Zotlabs/Module/Profiles.php:740
msgid "Change profile photo"
msgstr "Cambiar la foto del perfil"
-#: ../../include/channel.php:1531
+#: ../../include/channel.php:1539
msgid "Create New Profile"
msgstr "Crear un nuevo perfil"
-#: ../../include/channel.php:1549 ../../Zotlabs/Module/Profiles.php:841
+#: ../../include/channel.php:1557 ../../Zotlabs/Module/Profiles.php:837
msgid "Profile Image"
msgstr "Imagen del perfil"
-#: ../../include/channel.php:1552
+#: ../../include/channel.php:1560
msgid "Visible to everybody"
msgstr "Visible para todos"
-#: ../../include/channel.php:1553 ../../Zotlabs/Module/Profiles.php:741
-#: ../../Zotlabs/Module/Profiles.php:845
+#: ../../include/channel.php:1561 ../../Zotlabs/Module/Profiles.php:737
+#: ../../Zotlabs/Module/Profiles.php:841
msgid "Edit visibility"
msgstr "Editar visibilidad"
-#: ../../include/channel.php:1635 ../../include/channel.php:1763
+#: ../../include/channel.php:1643 ../../include/channel.php:1771
msgid "Gender:"
msgstr "Género:"
-#: ../../include/channel.php:1636 ../../include/channel.php:1807
+#: ../../include/channel.php:1644 ../../include/channel.php:1817
msgid "Status:"
msgstr "Estado:"
-#: ../../include/channel.php:1637 ../../include/channel.php:1831
+#: ../../include/channel.php:1645 ../../include/channel.php:1841
msgid "Homepage:"
msgstr "Página personal:"
-#: ../../include/channel.php:1638 ../../include/channel.php:1833
+#: ../../include/channel.php:1646 ../../include/channel.php:1843
#: ../../Zotlabs/Module/Directory.php:368
msgid "Hometown:"
msgstr "Lugar de nacimiento:"
-#: ../../include/channel.php:1639
+#: ../../include/channel.php:1647
msgid "Online Now"
msgstr "Ahora en línea"
-#: ../../include/channel.php:1688
+#: ../../include/channel.php:1696
msgid "This channel has not added a profile description yet"
msgstr "Este canal aún no ha añadido una descripción de perfil"
-#: ../../include/channel.php:1690
+#: ../../include/channel.php:1698
msgid "Change your profile photo"
msgstr "Cambiar su foto del perfil"
-#: ../../include/channel.php:1722
+#: ../../include/channel.php:1730
msgid "Trans"
msgstr "Trans"
-#: ../../include/channel.php:1761
+#: ../../include/channel.php:1769
msgid "Full Name:"
msgstr "Nombre completo:"
-#: ../../include/channel.php:1768
-msgid "Like this channel"
-msgstr "Me gusta este canal"
-
-#: ../../include/channel.php:1792
+#: ../../include/channel.php:1802
msgid "j F, Y"
msgstr "j F Y"
-#: ../../include/channel.php:1793
+#: ../../include/channel.php:1803
msgid "j F"
msgstr "j F"
-#: ../../include/channel.php:1800
+#: ../../include/channel.php:1810
msgid "Birthday:"
msgstr "Cumpleaños:"
-#: ../../include/channel.php:1804 ../../Zotlabs/Module/Directory.php:349
+#: ../../include/channel.php:1814 ../../Zotlabs/Module/Directory.php:349
msgid "Age:"
msgstr "Edad:"
-#: ../../include/channel.php:1813
+#: ../../include/channel.php:1823
#, php-format
msgid "for %1$d %2$s"
msgstr "por %1$d %2$s"
-#: ../../include/channel.php:1825
+#: ../../include/channel.php:1835
msgid "Tags:"
msgstr "Etiquetas:"
-#: ../../include/channel.php:1829
+#: ../../include/channel.php:1839
msgid "Sexual Preference:"
msgstr "Orientación sexual:"
-#: ../../include/channel.php:1835
+#: ../../include/channel.php:1845
msgid "Political Views:"
msgstr "Posición política:"
-#: ../../include/channel.php:1837
+#: ../../include/channel.php:1847
msgid "Religion:"
msgstr "Religión:"
-#: ../../include/channel.php:1839 ../../Zotlabs/Module/Directory.php:370
+#: ../../include/channel.php:1849 ../../Zotlabs/Module/Directory.php:370
msgid "About:"
msgstr "Sobre mí:"
-#: ../../include/channel.php:1841
+#: ../../include/channel.php:1851
msgid "Hobbies/Interests:"
msgstr "Aficciones o intereses:"
-#: ../../include/channel.php:1843
+#: ../../include/channel.php:1853
msgid "Likes:"
msgstr "Me gusta:"
-#: ../../include/channel.php:1845
+#: ../../include/channel.php:1855
msgid "Dislikes:"
msgstr "No me gusta:"
-#: ../../include/channel.php:1847
+#: ../../include/channel.php:1857
msgid "Contact information and Social Networks:"
msgstr "Información de contacto y redes sociales:"
-#: ../../include/channel.php:1849
+#: ../../include/channel.php:1859
msgid "My other channels:"
msgstr "Mis otros canales:"
-#: ../../include/channel.php:1851
+#: ../../include/channel.php:1861
msgid "Musical interests:"
msgstr "Preferencias musicales:"
-#: ../../include/channel.php:1853
+#: ../../include/channel.php:1863
msgid "Books, literature:"
msgstr "Libros, literatura:"
-#: ../../include/channel.php:1855
+#: ../../include/channel.php:1865
msgid "Television:"
msgstr "Televisión:"
-#: ../../include/channel.php:1857
+#: ../../include/channel.php:1867
msgid "Film/dance/culture/entertainment:"
msgstr "Cine, danza, cultura, entretenimiento:"
-#: ../../include/channel.php:1859
+#: ../../include/channel.php:1869
msgid "Love/Romance:"
msgstr "Vida sentimental o amorosa:"
-#: ../../include/channel.php:1861
+#: ../../include/channel.php:1871
msgid "Work/employment:"
msgstr "Trabajo:"
-#: ../../include/channel.php:1863
+#: ../../include/channel.php:1873
msgid "School/education:"
msgstr "Estudios:"
-#: ../../include/channel.php:1884 ../../Zotlabs/Lib/Apps.php:367
+#: ../../include/channel.php:1894 ../../Zotlabs/Lib/Apps.php:365
#: ../../Zotlabs/Module/Profperm.php:113
msgid "Profile"
msgstr "Perfil"
-#: ../../include/channel.php:1886
+#: ../../include/channel.php:1896
msgid "Like this thing"
msgstr "Me gusta esto"
-#: ../../include/channel.php:1887
+#: ../../include/channel.php:1897
msgid "Export"
msgstr "Exportar"
-#: ../../include/channel.php:2340 ../../Zotlabs/Module/Cover_photo.php:304
+#: ../../include/channel.php:2350
msgid "cover photo"
msgstr "Imagen de portada del perfil"
-#: ../../include/channel.php:2615 ../../boot.php:1749
+#: ../../include/channel.php:2631 ../../boot.php:1747
#: ../../Zotlabs/Module/Rmagic.php:96
msgid "Remote Authentication"
msgstr "Acceso desde su servidor"
-#: ../../include/channel.php:2616 ../../Zotlabs/Module/Rmagic.php:97
+#: ../../include/channel.php:2632 ../../Zotlabs/Module/Rmagic.php:97
msgid "Enter your channel address (e.g. channel@example.com)"
msgstr "Introduzca la dirección del canal (p.ej. canal@ejemplo.com)"
-#: ../../include/channel.php:2617 ../../Zotlabs/Module/Rmagic.php:98
+#: ../../include/channel.php:2633 ../../Zotlabs/Module/Rmagic.php:98
msgid "Authenticate"
msgstr "Acceder"
-#: ../../include/channel.php:2775 ../../Zotlabs/Module/Admin/Accounts.php:184
+#: ../../include/channel.php:2793 ../../Zotlabs/Module/Admin/Accounts.php:184
#, php-format
msgid "Account '%s' deleted"
msgstr "La cuenta '%s' ha sido eliminada"
-#: ../../include/bbcode.php:233 ../../include/bbcode.php:939
-#: ../../include/bbcode.php:1560 ../../include/bbcode.php:1568
+#: ../../include/bbcode.php:233 ../../include/bbcode.php:993
+#: ../../include/bbcode.php:1613 ../../include/bbcode.php:1621
msgid "Image/photo"
msgstr "Imagen/foto"
-#: ../../include/bbcode.php:280 ../../include/bbcode.php:1585
+#: ../../include/bbcode.php:285
msgid "Encrypted content"
msgstr "Contenido cifrado"
-#: ../../include/bbcode.php:336
+#: ../../include/bbcode.php:341
#, php-format
msgid "Install %1$s element %2$s"
msgstr "Instalar el elemento de%1$s%2$s"
-#: ../../include/bbcode.php:340
+#: ../../include/bbcode.php:345
#, php-format
msgid ""
"This post contains an installable %s element, however you lack permissions "
"to install it on this site."
msgstr "Esta entrada contiene el elemento instalable %s, sin embargo le faltan permisos para instalarlo en este sitio."
-#: ../../include/bbcode.php:350 ../../Zotlabs/Module/Impel.php:47
+#: ../../include/bbcode.php:355 ../../Zotlabs/Module/Impel.php:47
msgid "webpage"
msgstr "página web"
-#: ../../include/bbcode.php:353 ../../Zotlabs/Module/Impel.php:57
+#: ../../include/bbcode.php:358 ../../Zotlabs/Module/Impel.php:57
msgid "layout"
msgstr "plantilla"
-#: ../../include/bbcode.php:356 ../../Zotlabs/Module/Impel.php:52
+#: ../../include/bbcode.php:361 ../../Zotlabs/Module/Impel.php:52
msgid "block"
msgstr "bloque"
-#: ../../include/bbcode.php:359 ../../Zotlabs/Module/Impel.php:64
+#: ../../include/bbcode.php:364 ../../Zotlabs/Module/Impel.php:64
msgid "menu"
msgstr "menú"
-#: ../../include/bbcode.php:562
+#: ../../include/bbcode.php:567
msgid "card"
msgstr "ficha"
-#: ../../include/bbcode.php:564
+#: ../../include/bbcode.php:569
msgid "article"
msgstr "el artículo"
-#: ../../include/bbcode.php:647 ../../include/bbcode.php:655
+#: ../../include/bbcode.php:652 ../../include/bbcode.php:660
msgid "Click to open/close"
msgstr "Pulsar para abrir/cerrar"
-#: ../../include/bbcode.php:668
+#: ../../include/bbcode.php:673
msgid "View article"
msgstr "Ver el artículo"
-#: ../../include/bbcode.php:668
+#: ../../include/bbcode.php:673
msgid "View summary"
msgstr "Ver sumario"
-#: ../../include/bbcode.php:1061 ../../include/bbcode.php:1246
+#: ../../include/bbcode.php:1117 ../../include/bbcode.php:1299
#: ../../addon/wiki/Lib/NativeWikiPage.php:630
msgid "Different viewers will see this text differently"
msgstr "Visitantes diferentes verán este texto de forma distinta"
-#: ../../include/bbcode.php:1536
+#: ../../include/bbcode.php:1589
msgid "$1 wrote:"
msgstr "$1 escribió:"
@@ -4081,7 +3920,7 @@ msgstr "No se ha podido crear un canal con un identificador que ya existe en est
msgid "Unable to create a unique channel address. Import failed."
msgstr "No se ha podido crear una dirección de canal única. Ha fallado la importación."
-#: ../../include/import.php:122
+#: ../../include/import.php:128
msgid "Cloned channel not found. Import failed."
msgstr "No se ha podido importar el canal porque el canal clonado no se ha encontrado."
@@ -4117,6 +3956,45 @@ msgstr "Ocultar el botón y mostrar los smilies directamente."
msgid "Smileybutton Settings"
msgstr "Ajustes de Smileybutton"
+#: ../../addon/fediquest/fediquest.php:211
+msgid "ERROR: word length is not correct!"
+msgstr "ERROR: ¡la longitud de la palabra no es correcta!"
+
+#: ../../addon/fediquest/Mod_Fediquest.php:22
+msgid "Fediquest App"
+msgstr "Aplicación Fediquest"
+
+#: ../../addon/fediquest/Mod_Fediquest.php:23
+msgid "A distributed quest for a given word (game)."
+msgstr "Una búsqueda distribuida de una palabra determinada (juego)."
+
+#: ../../addon/fediquest/Mod_Fediquest.php:24
+msgid ""
+"To start a game, enter [fediquest]your_word[/fediquest] somewhere in a "
+"toplevel post."
+msgstr "Para empezar una partida, introduce [fediquest]tu_palabra[/fediquest] en algún lugar de un post de toplevel."
+
+#: ../../addon/fediquest/Mod_Fediquest.php:25
+msgid "Your contacts can post their guess in the comments."
+msgstr "Sus contactos pueden publicar sus conjeturas en los comentarios."
+
+#: ../../addon/fediquest/Mod_Fediquest.php:26
+msgid ""
+"Your channel will evaluate the guess and automatically post the response."
+msgstr "Su canal evaluará la conjetura y publicará automáticamente la respuesta."
+
+#: ../../addon/fediquest/Mod_Fediquest.php:28
+msgid "Correct letters"
+msgstr "Letras correctas"
+
+#: ../../addon/fediquest/Mod_Fediquest.php:29
+msgid "Letters contained in the word but at the wrong spot"
+msgstr "Letras contenidas en la palabra pero en el lugar equivocado"
+
+#: ../../addon/fediquest/Mod_Fediquest.php:30
+msgid "Letters not contained in the word"
+msgstr "Letras no contenidas en la palabra"
+
#: ../../addon/socialauth/Mod_SocialAuth.php:106
#: ../../addon/socialauth/Mod_SocialAuth.php:179
msgid "Network error"
@@ -4214,45 +4092,6 @@ msgstr "PHP upload_max_filesize: "
msgid "PHP post_max_size (must be larger than upload_max_filesize): "
msgstr "PHP post_max_size (debe ser mayor que upload_max_filesize): "
-#: ../../addon/fediwordle/fediwordle.php:211
-msgid "ERROR: word length is not correct!"
-msgstr "ERROR: ¡la longitud de la palabra no es correcta!"
-
-#: ../../addon/fediwordle/Mod_Fediwordle.php:22
-msgid "Fediwordle App"
-msgstr "App Fediwordle"
-
-#: ../../addon/fediwordle/Mod_Fediwordle.php:23
-msgid "A distributed word game inspired by wordle."
-msgstr "Un juego de palabras distribuido inspirado en el wordle."
-
-#: ../../addon/fediwordle/Mod_Fediwordle.php:24
-msgid ""
-"To start a game, enter [wordle]your_word[/wordle] somewhere in a toplevel "
-"post."
-msgstr "Para empezar una partida, introduzca [wordle]mi_palabra[/wordle] en algún lugar de un post de nivel superior."
-
-#: ../../addon/fediwordle/Mod_Fediwordle.php:25
-msgid "Your contacts can post their guess in the comments."
-msgstr "Sus contactos pueden publicar sus conjeturas en los comentarios."
-
-#: ../../addon/fediwordle/Mod_Fediwordle.php:26
-msgid ""
-"Your channel will evaluate the guess and automatically post the response."
-msgstr "Su canal evaluará la conjetura y publicará automáticamente la respuesta."
-
-#: ../../addon/fediwordle/Mod_Fediwordle.php:28
-msgid "Correct letters"
-msgstr "Letras correctas"
-
-#: ../../addon/fediwordle/Mod_Fediwordle.php:29
-msgid "Letters contained in the word but at the wrong spot"
-msgstr "Letras contenidas en la palabra pero en el lugar equivocado"
-
-#: ../../addon/fediwordle/Mod_Fediwordle.php:30
-msgid "Letters not contained in the word"
-msgstr "Letras no contenidas en la palabra"
-
#: ../../addon/sendzid/Mod_Sendzid.php:21
msgid "Send your identity to all websites"
msgstr "Enviar su identidad a todos los sitios web"
@@ -4335,7 +4174,7 @@ msgid "Last Name"
msgstr "Apellido"
#: ../../addon/openid/MysqlProvider.php:54
-#: ../../addon/redred/Mod_Redred.php:73 ../../boot.php:1742
+#: ../../addon/redred/Mod_Redred.php:73 ../../boot.php:1740
msgid "Nickname"
msgstr "Alias"
@@ -4343,12 +4182,6 @@ msgstr "Alias"
msgid "Full Name"
msgstr "Nombre completo"
-#: ../../addon/openid/MysqlProvider.php:58
-#: ../../addon/openid/MysqlProvider.php:59
-#: ../../addon/openid/MysqlProvider.php:60 ../../Zotlabs/Lib/Apps.php:366
-msgid "Profile Photo"
-msgstr "Foto del perfil"
-
#: ../../addon/openid/MysqlProvider.php:61
msgid "Profile Photo 16px"
msgstr "Foto del perfil 16px"
@@ -4374,11 +4207,11 @@ msgid "Profile Photo 128px"
msgstr "Foto del perfil 128px"
#: ../../addon/openid/MysqlProvider.php:68
-#: ../../Zotlabs/Module/Profiles.php:783
+#: ../../Zotlabs/Module/Profiles.php:779
msgid "Homepage URL"
msgstr "Dirección de la página personal"
-#: ../../addon/openid/MysqlProvider.php:69 ../../Zotlabs/Lib/Apps.php:364
+#: ../../addon/openid/MysqlProvider.php:69 ../../Zotlabs/Lib/Apps.php:362
msgid "Language"
msgstr "Idioma"
@@ -4399,7 +4232,7 @@ msgid "Birthdate"
msgstr "Fecha de nacimiento"
#: ../../addon/openid/MysqlProvider.php:74
-#: ../../Zotlabs/Module/Profiles.php:456
+#: ../../Zotlabs/Module/Profiles.php:452
msgid "Gender"
msgstr "Género"
@@ -4819,7 +4652,7 @@ msgstr "Publicar por defecto en InsaneJournal"
msgid "Insane Journal Crosspost Connector"
msgstr "Conector de publicación cruzada de InsaneJournal"
-#: ../../addon/wholikesme/wholikesme.php:29
+#: ../../addon/wholikesme/wholikesme.php:30
msgid "Who likes me?"
msgstr "¿Quién me ha puesto \"Me gusta\"?"
@@ -4967,46 +4800,43 @@ msgstr "Su cuenta en %s caducará en unos pocos días."
msgid "Your test account is about to expire."
msgstr "Su cuenta de prueba está a punto de expirar."
-#: ../../addon/pubcrawl/as.php:1958 ../../addon/diaspora/Receiver.php:1693
-#: ../../Zotlabs/Module/Subthread.php:115 ../../Zotlabs/Module/Like.php:453
-msgid "status"
-msgstr "el mensaje de estado "
-
-#: ../../addon/pubcrawl/Mod_Pubcrawl.php:25
+#: ../../addon/pubcrawl/Mod_Pubcrawl.php:28
msgid "ActivityPub Protocol Settings updated."
msgstr "Se han actualizado los ajustes del protocolo ActivityPub."
-#: ../../addon/pubcrawl/Mod_Pubcrawl.php:41
+#: ../../addon/pubcrawl/Mod_Pubcrawl.php:44
msgid ""
"The activitypub protocol does not support location independence. Connections"
" you make within that network may be unreachable from alternate channel "
"locations."
msgstr "El protocolo ActivityPub no soporta la independencia de ubicación. Las conexiones que realice dentro de esa red pueden no ser accesibles desde ubicaciones de canales alternativos."
-#: ../../addon/pubcrawl/Mod_Pubcrawl.php:47
-msgid "Deliver to ActivityPub recipients in privacy groups"
-msgstr "Entregar a los destinatarios de ActivityPub en grupos de canales"
-
-#: ../../addon/pubcrawl/Mod_Pubcrawl.php:47
-msgid ""
-"May result in a large number of mentions and expose all the members of your "
-"privacy group"
-msgstr "Puede resultar en un gran número de menciones y exponer a todos los miembros de su grupo de canales"
-
-#: ../../addon/pubcrawl/Mod_Pubcrawl.php:51
-msgid "Send multi-media HTML articles"
-msgstr "Enviar artículos multimedia en HTML"
+#: ../../addon/pubcrawl/Mod_Pubcrawl.php:50
+msgid "Send activities of type note instead of article"
+msgstr "Enviar actividades de tipo nota en lugar de artículo"
-#: ../../addon/pubcrawl/Mod_Pubcrawl.php:51
-msgid "Not supported by some microblog services such as Mastodon"
-msgstr "No soportado por algunos servicios de microblog como Mastodon"
+#: ../../addon/pubcrawl/Mod_Pubcrawl.php:50
+msgid "Microblog services such as Mastodon do not properly support articles"
+msgstr "Los servicios de microblog como Mastodon no soportan correctamente los artículos"
-#: ../../addon/pubcrawl/Mod_Pubcrawl.php:59
+#: ../../addon/pubcrawl/Mod_Pubcrawl.php:58
msgid "Activitypub Protocol"
msgstr "Protocolo Activitypub"
+#: ../../addon/pubcrawl/pubcrawl.php:1073
+#: ../../addon/diaspora/diaspora.php:415
+#: ../../Zotlabs/Module/Contactedit.php:494
+msgid "Refresh failed"
+msgstr "Error de actualización"
+
+#: ../../addon/pubcrawl/pubcrawl.php:1080
+#: ../../addon/diaspora/diaspora.php:420
+#: ../../Zotlabs/Module/Contactedit.php:491
+msgid "Refresh succeeded"
+msgstr "Actualización con éxito"
+
#: ../../addon/bookmarker/bookmarker.php:38
-#: ../../Zotlabs/Lib/ThreadItem.php:474
+#: ../../Zotlabs/Lib/ThreadItem.php:495
msgid "Save Bookmarks"
msgstr "Guardar en Marcadores"
@@ -5024,7 +4854,7 @@ msgid "Post to Dreamwidth"
msgstr "Publicar en Dreamwidth"
#: ../../addon/dwpost/dwpost.php:134 ../../addon/dwpost/Mod_Dwpost.php:67
-#: ../../addon/wppost/wppost.php:174 ../../addon/wppost/Mod_Wppost.php:96
+#: ../../addon/wppost/wppost.php:175 ../../addon/wppost/Mod_Wppost.php:96
#: ../../addon/wiki/Mod_Wiki.php:381 ../../addon/ljpost/ljpost.php:134
msgid "Source"
msgstr "Fuente"
@@ -5075,7 +4905,7 @@ msgstr "La dirección de una transmisión de diaspora. Ejemplo: relay@diasporare
msgid "Diaspora relay could not be imported"
msgstr "El reenvío de Diaspora no ha podido ser importado"
-#: ../../addon/diaspora/diaspora.php:1093
+#: ../../addon/diaspora/diaspora.php:1106
msgid "No subject"
msgstr "Sin tema"
@@ -5097,17 +4927,22 @@ msgstr "$projectname"
msgid "%1$s dislikes %2$s's %3$s"
msgstr "a %1$s no le gusta el %3$s de %2$s"
-#: ../../addon/diaspora/Receiver.php:2251 ../../Zotlabs/Module/Like.php:495
+#: ../../addon/diaspora/Receiver.php:1693
+#: ../../Zotlabs/Module/Subthread.php:112 ../../Zotlabs/Module/Like.php:456
+msgid "status"
+msgstr "el mensaje de estado "
+
+#: ../../addon/diaspora/Receiver.php:2248 ../../Zotlabs/Module/Like.php:487
#, php-format
msgid "%1$s is attending %2$s's %3$s"
msgstr "%3$s de %2$s: %1$s participa"
-#: ../../addon/diaspora/Receiver.php:2253 ../../Zotlabs/Module/Like.php:497
+#: ../../addon/diaspora/Receiver.php:2250 ../../Zotlabs/Module/Like.php:489
#, php-format
msgid "%1$s is not attending %2$s's %3$s"
msgstr "%3$s de %2$s: %1$s no participa"
-#: ../../addon/diaspora/Receiver.php:2255 ../../Zotlabs/Module/Like.php:499
+#: ../../addon/diaspora/Receiver.php:2252 ../../Zotlabs/Module/Like.php:491
#, php-format
msgid "%1$s may attend %2$s's %3$s"
msgstr "%3$s de %2$s: %1$s quizá participe"
@@ -5181,7 +5016,7 @@ msgid "No channels currently blocked"
msgstr "No hay canales bloqueados actualmente"
#: ../../addon/superblock/Mod_Superblock.php:90
-#: ../../Zotlabs/Module/Cover_photo.php:424 ../../Zotlabs/Module/Tagrm.php:137
+#: ../../Zotlabs/Module/Cover_photo.php:381 ../../Zotlabs/Module/Tagrm.php:137
#: ../../Zotlabs/Module/Admin/Addons.php:462
#: ../../Zotlabs/Module/Photos.php:994
msgid "Remove"
@@ -5337,7 +5172,7 @@ msgstr "Nombre"
#: ../../addon/rendezvous/rendezvous.php:173
#: ../../addon/cart/submodules/hzservices.php:657
#: ../../addon/cart/submodules/manualcat.php:260
-#: ../../Zotlabs/Module/Appman.php:210 ../../Zotlabs/Module/Rbmark.php:100
+#: ../../Zotlabs/Module/Appman.php:220 ../../Zotlabs/Module/Rbmark.php:100
#: ../../Zotlabs/Module/Cdav.php:1005
msgid "Description"
msgstr "Descripción"
@@ -5418,7 +5253,7 @@ msgid "You have no rendezvous. Press the button above to create a rendezvous!"
msgstr "No tiene ninguna cita. ¡Presione el botón de arriba para crear una!"
#: ../../addon/rendezvous/rendezvous.php:401
-#: ../../Zotlabs/Module/Setup.php:730
+#: ../../Zotlabs/Module/Setup.php:748
msgid "Errors encountered creating database tables."
msgstr "Se han encontrado errores al crear las tablas de la base de datos."
@@ -5541,14 +5376,14 @@ msgstr "Añadir un artículo"
#: ../../addon/wiki/Mod_Wiki.php:36
#: ../../addon/flashcards/Mod_Flashcards.php:52
-#: ../../addon/faces/Mod_Faces.php:64 ../../addon/cart/cart.php:1459
+#: ../../addon/faces/Mod_Faces.php:64 ../../addon/cart/cart.php:1458
msgid "Profile Unavailable."
msgstr "Perfil no disponible"
#: ../../addon/wiki/Mod_Wiki.php:81 ../../addon/cart/manual_payments.php:93
#: ../../addon/cart/submodules/paypalbuttonV2.php:486
#: ../../addon/cart/submodules/paypalbutton.php:456
-#: ../../addon/cart/myshop.php:37 ../../addon/cart/cart.php:1610
+#: ../../addon/cart/myshop.php:37 ../../addon/cart/cart.php:1609
msgid "Invalid channel"
msgstr "Canal no válido"
@@ -5575,7 +5410,7 @@ msgid "View"
msgstr "Ver"
#: ../../addon/wiki/Mod_Wiki.php:217 ../../Zotlabs/Module/Manage.php:137
-#: ../../Zotlabs/Module/Profiles.php:852
+#: ../../Zotlabs/Module/Profiles.php:848
msgid "Create New"
msgstr "Crear"
@@ -5645,8 +5480,8 @@ msgstr "Nombre de la nueva página"
msgid "Embed image from photo albums"
msgstr "Incluir una imagen de los álbumes de fotos"
-#: ../../addon/wiki/Mod_Wiki.php:402 ../../Zotlabs/Module/Cover_photo.php:432
-#: ../../Zotlabs/Module/Profile_photo.php:557
+#: ../../addon/wiki/Mod_Wiki.php:402 ../../Zotlabs/Module/Cover_photo.php:389
+#: ../../Zotlabs/Module/Profile_photo.php:556
msgid "Choose a different album"
msgstr "Elegir un álbum diferente..."
@@ -5706,12 +5541,12 @@ msgstr "Revisión seleccionada"
msgid "You must be authenticated."
msgstr "Debe estar autenticado."
-#: ../../addon/wiki/Mod_Wiki.php:899 ../../addon/wiki/Widget/Wiki_pages.php:61
+#: ../../addon/wiki/Mod_Wiki.php:899 ../../addon/wiki/Widget/Wiki_pages.php:64
msgid "Add new page"
msgstr "Añadir una nueva página"
-#: ../../addon/wiki/Mod_Wiki.php:906 ../../addon/wiki/Widget/Wiki_pages.php:68
-#: ../../Zotlabs/Module/Dreport.php:133
+#: ../../addon/wiki/Mod_Wiki.php:906 ../../addon/wiki/Widget/Wiki_pages.php:71
+#: ../../Zotlabs/Module/Dreport.php:132
msgid "Options"
msgstr "Opciones"
@@ -5792,11 +5627,11 @@ msgstr "Fecha"
msgid "Compare"
msgstr "Comparar"
-#: ../../addon/wiki/Widget/Wiki_pages.php:55
+#: ../../addon/wiki/Widget/Wiki_pages.php:58
msgid "Wiki Pages"
msgstr "Páginas del wiki"
-#: ../../addon/wiki/Widget/Wiki_pages.php:66
+#: ../../addon/wiki/Widget/Wiki_pages.php:69
msgid "Page name"
msgstr "Nombre de la página"
@@ -5933,7 +5768,7 @@ msgid "Post to GNU social"
msgstr "Publicar en GNU social"
#: ../../addon/statusnet/statusnet.php:593
-#: ../../Zotlabs/Module/Admin/Site.php:423
+#: ../../Zotlabs/Module/Admin/Site.php:409
msgid "Site name"
msgstr "Nombre del sitio"
@@ -6122,7 +5957,7 @@ msgstr "Los pagos manuales no están habilitados."
#: ../../addon/cart/manual_payments.php:68
#: ../../addon/cart/submodules/paypalbuttonV2.php:417
#: ../../addon/cart/submodules/paypalbutton.php:392
-#: ../../addon/cart/cart.php:1632
+#: ../../addon/cart/cart.php:1631
msgid "Order not found."
msgstr "El pedido no se ha encontrado."
@@ -6321,7 +6156,7 @@ msgstr "Instrucciones"
msgid "Access Denied."
msgstr "Acceso denegado"
-#: ../../addon/cart/myshop.php:113 ../../addon/cart/cart.php:1495
+#: ../../addon/cart/myshop.php:113 ../../addon/cart/cart.php:1494
msgid "Order Not Found"
msgstr "No se ha encontrado el pedido"
@@ -6348,47 +6183,47 @@ msgstr "[cesta] Artículo añadido"
msgid "Order already checked out."
msgstr "El pedido ya ha sido revisado"
-#: ../../addon/cart/cart.php:1417
+#: ../../addon/cart/cart.php:1416
msgid "Drop database tables when uninstalling."
msgstr "Eliminar tablas de la base de datos al desinstalar."
-#: ../../addon/cart/cart.php:1424 ../../addon/cart/Settings/Cart.php:129
+#: ../../addon/cart/cart.php:1423 ../../addon/cart/Settings/Cart.php:129
msgid "Cart Settings"
msgstr "Configuración del carro de la compra"
-#: ../../addon/cart/cart.php:1436 ../../addon/cart/cart.php:1439
+#: ../../addon/cart/cart.php:1435 ../../addon/cart/cart.php:1438
msgid "Shop"
msgstr "Comprar"
-#: ../../addon/cart/cart.php:1599
+#: ../../addon/cart/cart.php:1598
msgid "You must be logged into the Grid to shop."
msgstr "Debe iniciar sesión en la red para comprar."
-#: ../../addon/cart/cart.php:1648
+#: ../../addon/cart/cart.php:1647
msgid "Access denied."
msgstr "Acceso denegado"
-#: ../../addon/cart/cart.php:1700 ../../addon/cart/cart.php:1843
+#: ../../addon/cart/cart.php:1699 ../../addon/cart/cart.php:1842
msgid "No Order Found"
msgstr "No se ha encontrado ningún pedido"
-#: ../../addon/cart/cart.php:1709
+#: ../../addon/cart/cart.php:1708
msgid "An unknown error has occurred Please start again."
msgstr "Se ha producido un error desconocido Vuelva a empezar."
-#: ../../addon/cart/cart.php:1852
+#: ../../addon/cart/cart.php:1851
msgid "Requirements not met."
msgstr "No se cumplen los requisitos."
-#: ../../addon/cart/cart.php:1852
+#: ../../addon/cart/cart.php:1851
msgid "Review your order and complete any needed requirements."
msgstr "Revise su pedido y complete los requisitos necesarios."
-#: ../../addon/cart/cart.php:1878
+#: ../../addon/cart/cart.php:1877
msgid "Invalid Payment Type. Please start again."
msgstr "Tipo de pago no válido. Por favor, empiece de nuevo."
-#: ../../addon/cart/cart.php:1885
+#: ../../addon/cart/cart.php:1884
msgid "Order not found"
msgstr "El pedido no se ha encontrado"
@@ -6465,94 +6300,6 @@ msgstr "Si está activado, sus entradas públicas se publicarán en la cuenta de
msgid "Twitter Crosspost Connector"
msgstr "Twitter Crosspost Connector"
-#: ../../addon/moremoods/moremoods.php:19
-msgid "lonely"
-msgstr "Solo/a"
-
-#: ../../addon/moremoods/moremoods.php:20
-msgid "drunk"
-msgstr "ebrio/a"
-
-#: ../../addon/moremoods/moremoods.php:21
-msgid "horny"
-msgstr "caliente"
-
-#: ../../addon/moremoods/moremoods.php:22
-msgid "stoned"
-msgstr "drogado/a"
-
-#: ../../addon/moremoods/moremoods.php:23
-msgid "fucked up"
-msgstr "jodido/a"
-
-#: ../../addon/moremoods/moremoods.php:24
-msgid "clusterfucked"
-msgstr "hecho/a polvo"
-
-#: ../../addon/moremoods/moremoods.php:25
-msgid "crazy"
-msgstr "loco/a"
-
-#: ../../addon/moremoods/moremoods.php:26
-msgid "hurt"
-msgstr "ofendido/a"
-
-#: ../../addon/moremoods/moremoods.php:27
-msgid "sleepy"
-msgstr "soñoliento/a"
-
-#: ../../addon/moremoods/moremoods.php:28
-msgid "grumpy"
-msgstr "gruñón/ona"
-
-#: ../../addon/moremoods/moremoods.php:29
-msgid "high"
-msgstr "superior"
-
-#: ../../addon/moremoods/moremoods.php:30
-msgid "semi-conscious"
-msgstr "semiconsciente"
-
-#: ../../addon/moremoods/moremoods.php:31
-msgid "in love"
-msgstr "enamorado/a"
-
-#: ../../addon/moremoods/moremoods.php:32
-msgid "in lust"
-msgstr "lujurioso/a"
-
-#: ../../addon/moremoods/moremoods.php:33
-msgid "naked"
-msgstr "desnudo/a"
-
-#: ../../addon/moremoods/moremoods.php:34
-msgid "stinky"
-msgstr "apestoso/a"
-
-#: ../../addon/moremoods/moremoods.php:35
-msgid "sweaty"
-msgstr "sudoroso/a"
-
-#: ../../addon/moremoods/moremoods.php:36
-msgid "bleeding out"
-msgstr "exánime"
-
-#: ../../addon/moremoods/moremoods.php:37
-msgid "victorious"
-msgstr "victorioso/a"
-
-#: ../../addon/moremoods/moremoods.php:38
-msgid "defeated"
-msgstr "derrotado/a"
-
-#: ../../addon/moremoods/moremoods.php:39
-msgid "envious"
-msgstr "envidioso/a"
-
-#: ../../addon/moremoods/moremoods.php:40
-msgid "jealous"
-msgstr "celoso/a"
-
#: ../../addon/gravatar/gravatar.php:123
msgid "generic profile image"
msgstr "imagen del perfil general"
@@ -6723,7 +6470,7 @@ msgstr "Título"
msgid "Brief description or title"
msgstr "Breve descripción o título"
-#: ../../addon/workflow/workflow.php:2661 ../../Zotlabs/Lib/Apps.php:375
+#: ../../addon/workflow/workflow.php:2661 ../../Zotlabs/Lib/Apps.php:373
#: ../../Zotlabs/Widget/Notes.php:38
msgid "Notes"
msgstr "Notas"
@@ -6766,158 +6513,6 @@ msgstr "Un ajuste"
msgid "Skeleton Settings"
msgstr "Ajustes de Skeleton"
-#: ../../addon/morepokes/morepokes.php:19
-msgid "bitchslap"
-msgstr "una bofetada humillante"
-
-#: ../../addon/morepokes/morepokes.php:19
-msgid "bitchslapped"
-msgstr "ha abofeteado de forma humillante a"
-
-#: ../../addon/morepokes/morepokes.php:20
-msgid "shag"
-msgstr "un polvo"
-
-#: ../../addon/morepokes/morepokes.php:20
-msgid "shagged"
-msgstr "ha dejado exhausto/a a"
-
-#: ../../addon/morepokes/morepokes.php:21
-msgid "patent"
-msgstr "una patente"
-
-#: ../../addon/morepokes/morepokes.php:21
-msgid "patented"
-msgstr "ha patentado a"
-
-#: ../../addon/morepokes/morepokes.php:22
-msgid "hug"
-msgstr "un abrazo"
-
-#: ../../addon/morepokes/morepokes.php:22
-msgid "hugged"
-msgstr "ha abrazado a"
-
-#: ../../addon/morepokes/morepokes.php:23
-msgid "murder"
-msgstr "un asesinato"
-
-#: ../../addon/morepokes/morepokes.php:23
-msgid "murdered"
-msgstr "ha asesinado a"
-
-#: ../../addon/morepokes/morepokes.php:24
-msgid "worship"
-msgstr "una alabanza"
-
-#: ../../addon/morepokes/morepokes.php:24
-msgid "worshipped"
-msgstr "ha elogiado a"
-
-#: ../../addon/morepokes/morepokes.php:25
-msgid "kiss"
-msgstr "un beso"
-
-#: ../../addon/morepokes/morepokes.php:25
-msgid "kissed"
-msgstr "ha besado a"
-
-#: ../../addon/morepokes/morepokes.php:26
-msgid "tempt"
-msgstr "una tentación"
-
-#: ../../addon/morepokes/morepokes.php:26
-msgid "tempted"
-msgstr "ha tentado a"
-
-#: ../../addon/morepokes/morepokes.php:27
-msgid "raise eyebrows at"
-msgstr "un levantamiento de cejas"
-
-#: ../../addon/morepokes/morepokes.php:27
-msgid "raised their eyebrows at"
-msgstr "ha levantado las cejas a"
-
-#: ../../addon/morepokes/morepokes.php:28
-msgid "insult"
-msgstr "un insulto"
-
-#: ../../addon/morepokes/morepokes.php:28
-msgid "insulted"
-msgstr "ha insultado a"
-
-#: ../../addon/morepokes/morepokes.php:29
-msgid "praise"
-msgstr "un elogio"
-
-#: ../../addon/morepokes/morepokes.php:29
-msgid "praised"
-msgstr "ha elogiado a"
-
-#: ../../addon/morepokes/morepokes.php:30
-msgid "be dubious of"
-msgstr "una indecisión"
-
-#: ../../addon/morepokes/morepokes.php:30
-msgid "was dubious of"
-msgstr "estaba dudoso de"
-
-#: ../../addon/morepokes/morepokes.php:31
-msgid "eat"
-msgstr "una comida"
-
-#: ../../addon/morepokes/morepokes.php:31
-msgid "ate"
-msgstr "ha comido"
-
-#: ../../addon/morepokes/morepokes.php:32
-msgid "giggle and fawn at"
-msgstr "una sonrisa aduladora"
-
-#: ../../addon/morepokes/morepokes.php:32
-msgid "giggled and fawned at"
-msgstr "ha sonreído y adulado a"
-
-#: ../../addon/morepokes/morepokes.php:33
-msgid "doubt"
-msgstr "una duda"
-
-#: ../../addon/morepokes/morepokes.php:33
-msgid "doubted"
-msgstr "ha dudado de"
-
-#: ../../addon/morepokes/morepokes.php:34
-msgid "glare"
-msgstr "una mirada furiosa"
-
-#: ../../addon/morepokes/morepokes.php:34
-msgid "glared at"
-msgstr "ha mirado con furia"
-
-#: ../../addon/morepokes/morepokes.php:35
-msgid "fuck"
-msgstr "una mierda"
-
-#: ../../addon/morepokes/morepokes.php:35
-msgid "fucked"
-msgstr "ha mandado a la mierda a"
-
-#: ../../addon/morepokes/morepokes.php:36
-msgid "bonk"
-msgstr "un golpe"
-
-#: ../../addon/morepokes/morepokes.php:36
-msgid "bonked"
-msgstr "ha golpeado a"
-
-#: ../../addon/morepokes/morepokes.php:37
-msgid "declare undying love for"
-msgstr "una declaración de amor eterno"
-
-#: ../../addon/morepokes/morepokes.php:37
-msgid "declared undying love for"
-msgstr "ha declarado amor eterno a"
-
#: ../../addon/authchoose/Mod_Authchoose.php:30
msgid ""
"Allow magic authentication only to websites of your immediate connections"
@@ -7131,45 +6726,45 @@ msgstr "¡El juego del \"gato\"!"
msgid "I won!"
msgstr "¡He ganado yo!"
-#: ../../boot.php:1724
+#: ../../boot.php:1722
msgid "Create an account to access services and applications"
msgstr "Crear una cuenta para acceder a los servicios y aplicaciones"
-#: ../../boot.php:1742
+#: ../../boot.php:1740
msgid "Email or nickname"
msgstr "Correo electrónico o apodo"
-#: ../../boot.php:1752
+#: ../../boot.php:1750
msgid "Password"
msgstr "Contraseña"
-#: ../../boot.php:1753
+#: ../../boot.php:1751
msgid "Remember me"
msgstr "Recordarme"
-#: ../../boot.php:1756
+#: ../../boot.php:1754
msgid "Forgot your password?"
msgstr "¿Olvidó su contraseña?"
-#: ../../boot.php:1757 ../../Zotlabs/Module/Lostpass.php:91
+#: ../../boot.php:1755 ../../Zotlabs/Module/Lostpass.php:91
msgid "Password Reset"
msgstr "Restablecer la contraseña"
-#: ../../boot.php:2627
+#: ../../boot.php:2625
#, php-format
msgid "[$Projectname] Website SSL error for %s"
msgstr "[$Projectname] Error SSL del sitio web en %s"
-#: ../../boot.php:2632
+#: ../../boot.php:2630
msgid "Website SSL certificate is not valid. Please correct."
msgstr "El certificado SSL del sitio web no es válido. Por favor, solucione el problema."
-#: ../../boot.php:2748
+#: ../../boot.php:2746
#, php-format
msgid "[$Projectname] Cron tasks not running on %s"
msgstr "[$Projectname] Las tareas de Cron no están funcionando en %s"
-#: ../../boot.php:2753
+#: ../../boot.php:2751
msgid "Cron/Scheduled tasks not running."
msgstr "Las tareas del Planificador/Cron no están funcionando."
@@ -7240,262 +6835,251 @@ msgstr "solicita comentar sobre "
msgid "commented on"
msgstr "ha comentado sobre "
-#: ../../Zotlabs/Lib/Enotify.php:161 ../../Zotlabs/Lib/Enotify.php:314
+#: ../../Zotlabs/Lib/Enotify.php:161 ../../Zotlabs/Lib/Enotify.php:317
msgid "requested to like"
msgstr "solicita que se permita mostrar agrado "
-#: ../../Zotlabs/Lib/Enotify.php:161 ../../Zotlabs/Lib/Enotify.php:314
+#: ../../Zotlabs/Lib/Enotify.php:161 ../../Zotlabs/Lib/Enotify.php:317
msgid "liked"
msgstr "ha gustado de "
-#: ../../Zotlabs/Lib/Enotify.php:164 ../../Zotlabs/Lib/Enotify.php:317
+#: ../../Zotlabs/Lib/Enotify.php:164 ../../Zotlabs/Lib/Enotify.php:320
msgid "requested to dislike"
msgstr "solicita que se permita mostrar desagrado "
-#: ../../Zotlabs/Lib/Enotify.php:164 ../../Zotlabs/Lib/Enotify.php:317
+#: ../../Zotlabs/Lib/Enotify.php:164 ../../Zotlabs/Lib/Enotify.php:320
msgid "disliked"
msgstr "no ha gustado de "
-#: ../../Zotlabs/Lib/Enotify.php:169
+#: ../../Zotlabs/Lib/Enotify.php:167
+msgid "repeated"
+msgstr "repitió"
+
+#: ../../Zotlabs/Lib/Enotify.php:172
msgid "voted on"
msgstr "votado en "
-#: ../../Zotlabs/Lib/Enotify.php:212
+#: ../../Zotlabs/Lib/Enotify.php:215
#, php-format
msgid "%1$s %2$s [zrl=%3$s]a %4$s[/zrl]"
msgstr "%1$s%2$s [zrl=%3$s ]un %4$s[/zrl]"
-#: ../../Zotlabs/Lib/Enotify.php:220
+#: ../../Zotlabs/Lib/Enotify.php:223
#, php-format
msgid "%1$s %2$s [zrl=%3$s]%4$s's %5$s[/zrl]"
msgstr "%1$s %2$s[zrl=%3$s]%5$s de %4$s[/zrl]"
-#: ../../Zotlabs/Lib/Enotify.php:229 ../../Zotlabs/Lib/Enotify.php:321
+#: ../../Zotlabs/Lib/Enotify.php:232 ../../Zotlabs/Lib/Enotify.php:324
#, php-format
msgid "%1$s %2$s [zrl=%3$s]your %4$s[/zrl]"
msgstr "%1$s %2$s [zrl=%3$s]su %4$s[/zrl]"
-#: ../../Zotlabs/Lib/Enotify.php:241
+#: ../../Zotlabs/Lib/Enotify.php:244
#, php-format
msgid "[$Projectname:Notify] Moderated Comment to conversation #%1$d by %2$s"
msgstr "[$Projectname:Aviso] Comentario moderado en la conversación #%1$d por %2$s"
-#: ../../Zotlabs/Lib/Enotify.php:243
+#: ../../Zotlabs/Lib/Enotify.php:246
#, php-format
msgid "[$Projectname:Notify] Comment to conversation #%1$d by %2$s"
msgstr "[$Projectname:Aviso] Nuevo comentario de %2$s en la conversación #%1$d"
-#: ../../Zotlabs/Lib/Enotify.php:244
+#: ../../Zotlabs/Lib/Enotify.php:247
#, php-format
msgid "%1$s commented on an item/conversation you have been following"
msgstr "%1$sha comentado un elemento/conversación que ha estado siguiendo."
-#: ../../Zotlabs/Lib/Enotify.php:247 ../../Zotlabs/Lib/Enotify.php:341
-#: ../../Zotlabs/Lib/Enotify.php:357 ../../Zotlabs/Lib/Enotify.php:381
-#: ../../Zotlabs/Lib/Enotify.php:398 ../../Zotlabs/Lib/Enotify.php:411
+#: ../../Zotlabs/Lib/Enotify.php:250 ../../Zotlabs/Lib/Enotify.php:344
+#: ../../Zotlabs/Lib/Enotify.php:360 ../../Zotlabs/Lib/Enotify.php:384
+#: ../../Zotlabs/Lib/Enotify.php:401 ../../Zotlabs/Lib/Enotify.php:414
#, php-format
msgid "Please visit %s to view and/or reply to the conversation."
msgstr "Para ver o comentar la conversación, visite %s"
-#: ../../Zotlabs/Lib/Enotify.php:251 ../../Zotlabs/Lib/Enotify.php:252
+#: ../../Zotlabs/Lib/Enotify.php:254 ../../Zotlabs/Lib/Enotify.php:255
#, php-format
msgid "Please visit %s to approve or reject this comment."
msgstr "Por favor, visite %s para aprobar o rechazar este comentario."
-#: ../../Zotlabs/Lib/Enotify.php:337
+#: ../../Zotlabs/Lib/Enotify.php:340
#, php-format
msgid "[$Projectname:Notify] Like received to conversation #%1$d by %2$s"
msgstr "[$Projectname:Aviso] \"Me gusta\" de %2$s en la conversación #%1$d"
-#: ../../Zotlabs/Lib/Enotify.php:338
+#: ../../Zotlabs/Lib/Enotify.php:341
#, php-format
msgid "%1$s liked an item/conversation you created"
msgstr "A %1$s le ha gustado un elemento o conversación que ha creado usted."
-#: ../../Zotlabs/Lib/Enotify.php:349
+#: ../../Zotlabs/Lib/Enotify.php:352
#, php-format
msgid "[$Projectname:Notify] %s posted to your profile wall"
msgstr "[$Projectname:Aviso] %s ha publicado una entrada en su página de inicio del perfil (\"muro\")"
-#: ../../Zotlabs/Lib/Enotify.php:351
+#: ../../Zotlabs/Lib/Enotify.php:354
#, php-format
msgid "%1$s posted to your profile wall at %2$s"
msgstr "%1$s ha publicado en su muro en %2$s"
-#: ../../Zotlabs/Lib/Enotify.php:353
+#: ../../Zotlabs/Lib/Enotify.php:356
#, php-format
msgid "%1$s posted to [zrl=%2$s]your wall[/zrl]"
msgstr "%1$sha publicado en [zrl=%2$s]su muro[/zrl]"
-#: ../../Zotlabs/Lib/Enotify.php:375
+#: ../../Zotlabs/Lib/Enotify.php:378
#, php-format
msgid "[$Projectname:Notify] %s tagged you"
msgstr "[$Projectname:Aviso] %s le ha etiquetado"
-#: ../../Zotlabs/Lib/Enotify.php:376
+#: ../../Zotlabs/Lib/Enotify.php:379
#, php-format
msgid "%1$s tagged you at %2$s"
msgstr "%1$sle ha etiquetado en %2$s"
-#: ../../Zotlabs/Lib/Enotify.php:377
+#: ../../Zotlabs/Lib/Enotify.php:380
#, php-format
msgid "%1$s [zrl=%2$s]tagged you[/zrl]."
msgstr "%1$s [zrl=%2$s]le ha etiquetado[/zrl]."
-#: ../../Zotlabs/Lib/Enotify.php:388
+#: ../../Zotlabs/Lib/Enotify.php:391
#, php-format
msgid "[$Projectname:Notify] %1$s poked you"
msgstr "[$Projectname:Aviso] %1$s le ha dado un toque"
-#: ../../Zotlabs/Lib/Enotify.php:389
+#: ../../Zotlabs/Lib/Enotify.php:392
#, php-format
msgid "%1$s poked you at %2$s"
msgstr "%1$sle ha dado un toque en %2$s"
-#: ../../Zotlabs/Lib/Enotify.php:390
+#: ../../Zotlabs/Lib/Enotify.php:393
#, php-format
msgid "%1$s [zrl=%2$s]poked you[/zrl]."
msgstr "%1$s [zrl=%2$s] le ha dado un toque[/zrl]."
-#: ../../Zotlabs/Lib/Enotify.php:405
+#: ../../Zotlabs/Lib/Enotify.php:408
#, php-format
msgid "[$Projectname:Notify] %s tagged your post"
msgstr "[$Projectname:Aviso] %s ha etiquetado su entrada"
-#: ../../Zotlabs/Lib/Enotify.php:406
+#: ../../Zotlabs/Lib/Enotify.php:409
#, php-format
msgid "%1$s tagged your post at %2$s"
msgstr "%1$sha etiquetado su entrada en %2$s"
-#: ../../Zotlabs/Lib/Enotify.php:407
+#: ../../Zotlabs/Lib/Enotify.php:410
#, php-format
msgid "%1$s tagged [zrl=%2$s]your post[/zrl]"
msgstr "%1$s ha etiquetado [zrl=%2$s]su entrada[/zrl]"
-#: ../../Zotlabs/Lib/Enotify.php:418
+#: ../../Zotlabs/Lib/Enotify.php:421
msgid "[$Projectname:Notify] Introduction received"
msgstr "[$Projectname:Aviso] Ha recibido una solicitud de conexión"
-#: ../../Zotlabs/Lib/Enotify.php:419
+#: ../../Zotlabs/Lib/Enotify.php:422
#, php-format
msgid "You've received an new connection request from '%1$s' at %2$s"
msgstr "Ha recibido una nueva solicitud de conexión de '%1$s' en %2$s"
-#: ../../Zotlabs/Lib/Enotify.php:420
+#: ../../Zotlabs/Lib/Enotify.php:423
#, php-format
msgid "You've received [zrl=%1$s]a new connection request[/zrl] from %2$s."
msgstr "Ha recibido [zrl=%1$s]una nueva solicitud de conexión[/zrl] de %2$s."
-#: ../../Zotlabs/Lib/Enotify.php:423 ../../Zotlabs/Lib/Enotify.php:441
+#: ../../Zotlabs/Lib/Enotify.php:426 ../../Zotlabs/Lib/Enotify.php:444
#, php-format
msgid "You may visit their profile at %s"
msgstr "Puede visitar su perfil en %s"
-#: ../../Zotlabs/Lib/Enotify.php:425
+#: ../../Zotlabs/Lib/Enotify.php:428
#, php-format
msgid "Please visit %s to approve or reject the connection request."
msgstr "Por favor, visite %s para permitir o rechazar la solicitad de conexión."
-#: ../../Zotlabs/Lib/Enotify.php:432
+#: ../../Zotlabs/Lib/Enotify.php:435
msgid "[$Projectname:Notify] Friend suggestion received"
msgstr "[$Projectname:Aviso] Ha recibido una sugerencia de conexión"
-#: ../../Zotlabs/Lib/Enotify.php:433
+#: ../../Zotlabs/Lib/Enotify.php:436
#, php-format
msgid "You've received a friend suggestion from '%1$s' at %2$s"
msgstr "Ha recibido una sugerencia de amistad de '%1$s' en %2$s"
-#: ../../Zotlabs/Lib/Enotify.php:434
+#: ../../Zotlabs/Lib/Enotify.php:437
#, php-format
msgid ""
"You've received [zrl=%1$s]a friend suggestion[/zrl] for %2$s from %3$s."
msgstr "Ha recibido [zrl=%1$s]una sugerencia de amistad[/zrl] para %2$s de %3$s."
-#: ../../Zotlabs/Lib/Enotify.php:439
+#: ../../Zotlabs/Lib/Enotify.php:442
msgid "Name:"
msgstr "Nombre:"
-#: ../../Zotlabs/Lib/Enotify.php:440
+#: ../../Zotlabs/Lib/Enotify.php:443
msgid "Photo:"
msgstr "Foto:"
-#: ../../Zotlabs/Lib/Enotify.php:443
+#: ../../Zotlabs/Lib/Enotify.php:446
#, php-format
msgid "Please visit %s to approve or reject the suggestion."
msgstr "Por favor, visite %s para aprobar o rechazar la sugerencia."
-#: ../../Zotlabs/Lib/Enotify.php:668
+#: ../../Zotlabs/Lib/Enotify.php:676
msgid "[$Projectname:Notify]"
msgstr "[$Projectname:Aviso]"
-#: ../../Zotlabs/Lib/Enotify.php:834
+#: ../../Zotlabs/Lib/Enotify.php:842
msgid "created a new poll"
msgstr "se ha creado una nueva encuesta"
-#: ../../Zotlabs/Lib/Enotify.php:834
+#: ../../Zotlabs/Lib/Enotify.php:842
msgid "created a new post"
msgstr "ha creado una nueva entrada"
-#: ../../Zotlabs/Lib/Enotify.php:835
+#: ../../Zotlabs/Lib/Enotify.php:843
#, php-format
msgid "voted on %s's poll"
msgstr "votado en la encuesta de %s"
-#: ../../Zotlabs/Lib/Enotify.php:835
+#: ../../Zotlabs/Lib/Enotify.php:843
#, php-format
msgid "commented on %s's post"
msgstr "ha comentado la entrada de %s"
-#: ../../Zotlabs/Lib/Enotify.php:839
-#, php-format
-msgid "repeated %s's post"
-msgstr "repetida la entrada de %s"
-
-#: ../../Zotlabs/Lib/Enotify.php:843
-#, php-format
-msgid "liked %s's post"
-msgstr "Le ha gustado la entrada de %s"
-
-#: ../../Zotlabs/Lib/Enotify.php:847
-#, php-format
-msgid "disliked %s's post"
-msgstr "No le ha gustado la entrada de %s"
-
-#: ../../Zotlabs/Lib/Enotify.php:851 ../../Zotlabs/Lib/Enotify.php:954
+#: ../../Zotlabs/Lib/Enotify.php:847 ../../Zotlabs/Lib/Enotify.php:947
msgid "shared a file with you"
msgstr "compartió un archivo con usted"
-#: ../../Zotlabs/Lib/Enotify.php:860
+#: ../../Zotlabs/Lib/Enotify.php:856
#, php-format
msgid "edited a post dated %s"
msgstr "ha editado una entrada %s"
-#: ../../Zotlabs/Lib/Enotify.php:863
+#: ../../Zotlabs/Lib/Enotify.php:859
#, php-format
msgid "edited a comment dated %s"
msgstr "ha editado un comentario %s"
-#: ../../Zotlabs/Lib/Enotify.php:939
+#: ../../Zotlabs/Lib/Enotify.php:932
msgid "added your channel"
msgstr "añadió este canal a sus conexiones"
-#: ../../Zotlabs/Lib/Enotify.php:969
+#: ../../Zotlabs/Lib/Enotify.php:962
msgid "sent you a direct message"
msgstr "enviarle un mensaje directo"
-#: ../../Zotlabs/Lib/Enotify.php:976
+#: ../../Zotlabs/Lib/Enotify.php:969
msgid "g A l F d"
msgstr "g A l d F"
-#: ../../Zotlabs/Lib/Enotify.php:979
+#: ../../Zotlabs/Lib/Enotify.php:972
msgid "[today]"
msgstr "[hoy]"
-#: ../../Zotlabs/Lib/Enotify.php:989
+#: ../../Zotlabs/Lib/Enotify.php:982
msgid "created an event"
msgstr "se creó un evento"
-#: ../../Zotlabs/Lib/Enotify.php:1004
+#: ../../Zotlabs/Lib/Enotify.php:997
msgid "status verified"
msgstr "estado verificado"
@@ -7531,88 +7115,84 @@ msgstr "Stream"
msgid "Mail"
msgstr "Correo"
-#: ../../Zotlabs/Lib/Apps.php:355 ../../Zotlabs/Module/Mood.php:152
-msgid "Mood"
-msgstr "Estado de ánimo"
-
-#: ../../Zotlabs/Lib/Apps.php:357
+#: ../../Zotlabs/Lib/Apps.php:355
msgid "Chat"
msgstr "Chat"
-#: ../../Zotlabs/Lib/Apps.php:359
+#: ../../Zotlabs/Lib/Apps.php:357
msgid "Probe"
msgstr "Probar"
-#: ../../Zotlabs/Lib/Apps.php:360
+#: ../../Zotlabs/Lib/Apps.php:358
msgid "Suggest"
msgstr "Sugerir"
-#: ../../Zotlabs/Lib/Apps.php:361
+#: ../../Zotlabs/Lib/Apps.php:359
msgid "Random Channel"
msgstr "Canal aleatorio"
-#: ../../Zotlabs/Lib/Apps.php:362
+#: ../../Zotlabs/Lib/Apps.php:360
msgid "Invite"
msgstr "Invitar"
-#: ../../Zotlabs/Lib/Apps.php:363 ../../Zotlabs/Widget/Admin.php:31
+#: ../../Zotlabs/Lib/Apps.php:361 ../../Zotlabs/Widget/Admin.php:31
msgid "Features"
msgstr "Funcionalidades"
-#: ../../Zotlabs/Lib/Apps.php:365 ../../Zotlabs/Storage/Browser.php:410
+#: ../../Zotlabs/Lib/Apps.php:363 ../../Zotlabs/Storage/Browser.php:410
msgid "Post"
msgstr "Publicación"
-#: ../../Zotlabs/Lib/Apps.php:370
+#: ../../Zotlabs/Lib/Apps.php:368
msgid "Notifications"
msgstr "Notificaciones"
-#: ../../Zotlabs/Lib/Apps.php:371
+#: ../../Zotlabs/Lib/Apps.php:369
msgid "Order Apps"
msgstr "Ordenar las apps"
-#: ../../Zotlabs/Lib/Apps.php:372
+#: ../../Zotlabs/Lib/Apps.php:370
msgid "CardDAV"
msgstr "CardDAV"
-#: ../../Zotlabs/Lib/Apps.php:373 ../../Zotlabs/Module/Sources.php:105
+#: ../../Zotlabs/Lib/Apps.php:371 ../../Zotlabs/Module/Sources.php:105
msgid "Channel Sources"
msgstr "Orígenes de los contenidos del canal"
-#: ../../Zotlabs/Lib/Apps.php:374 ../../Zotlabs/Module/Tokens.php:288
+#: ../../Zotlabs/Lib/Apps.php:372 ../../Zotlabs/Module/Tokens.php:288
msgid "Guest Access"
msgstr "Acceso para invitados"
-#: ../../Zotlabs/Lib/Apps.php:376
+#: ../../Zotlabs/Lib/Apps.php:374
msgid "OAuth Apps Manager"
msgstr "Administrador de apps OAuth"
-#: ../../Zotlabs/Lib/Apps.php:377
+#: ../../Zotlabs/Lib/Apps.php:375
msgid "OAuth2 Apps Manager"
msgstr "Administrador de apps OAuth2"
-#: ../../Zotlabs/Lib/Apps.php:378
+#: ../../Zotlabs/Lib/Apps.php:376
msgid "PDL Editor"
msgstr "Editor PDL"
-#: ../../Zotlabs/Lib/Apps.php:379 ../../Zotlabs/Module/Permcats.php:248
+#: ../../Zotlabs/Lib/Apps.php:377 ../../Zotlabs/Module/Permcats.php:248
msgid "Contact Roles"
msgstr "Roles de contacto"
-#: ../../Zotlabs/Lib/Apps.php:380 ../../Zotlabs/Widget/Notifications.php:154
-#: ../../Zotlabs/Module/Pubstream.php:100
+#: ../../Zotlabs/Lib/Apps.php:378 ../../Zotlabs/Widget/Notifications.php:154
+#: ../../Zotlabs/Module/Pubstream.php:108
msgid "Public Stream"
msgstr "\"Stream\" público"
-#: ../../Zotlabs/Lib/Apps.php:381
+#: ../../Zotlabs/Lib/Apps.php:379
msgid "My Chatrooms"
msgstr "Mis salas de chat"
-#: ../../Zotlabs/Lib/Apps.php:382
+#: ../../Zotlabs/Lib/Apps.php:380
msgid "Channel Export"
msgstr "Exportar canal"
-#: ../../Zotlabs/Lib/Apps.php:563 ../../Zotlabs/Module/Oauth.php:53
+#: ../../Zotlabs/Lib/Apps.php:561 ../../Zotlabs/Module/Oauth.php:53
#: ../../Zotlabs/Module/Oauth.php:135 ../../Zotlabs/Module/Connedit.php:748
#: ../../Zotlabs/Module/Admin/Addons.php:460
#: ../../Zotlabs/Module/Cdav.php:1044 ../../Zotlabs/Module/Cdav.php:1384
@@ -7620,31 +7200,31 @@ msgstr "Exportar canal"
msgid "Update"
msgstr "Actualizar"
-#: ../../Zotlabs/Lib/Apps.php:563 ../../Zotlabs/Module/Admin/Addons.php:429
+#: ../../Zotlabs/Lib/Apps.php:561 ../../Zotlabs/Module/Admin/Addons.php:429
msgid "Install"
msgstr "Instalar"
-#: ../../Zotlabs/Lib/Apps.php:593 ../../Zotlabs/Lib/Apps.php:615
+#: ../../Zotlabs/Lib/Apps.php:591 ../../Zotlabs/Lib/Apps.php:613
msgid "Purchase"
msgstr "Comprar"
-#: ../../Zotlabs/Lib/Apps.php:620
+#: ../../Zotlabs/Lib/Apps.php:618
msgid "Undelete"
msgstr "Recuperar"
-#: ../../Zotlabs/Lib/Apps.php:628
+#: ../../Zotlabs/Lib/Apps.php:626
msgid "Add to app-tray"
msgstr "Añadir a la bandeja de aplicaciones"
-#: ../../Zotlabs/Lib/Apps.php:629
+#: ../../Zotlabs/Lib/Apps.php:627
msgid "Remove from app-tray"
msgstr "Quitar de la bandeja de aplicaciones"
-#: ../../Zotlabs/Lib/Apps.php:630
+#: ../../Zotlabs/Lib/Apps.php:628
msgid "Pin to navbar"
msgstr "Fijar en la barra de navegación"
-#: ../../Zotlabs/Lib/Apps.php:631
+#: ../../Zotlabs/Lib/Apps.php:629
msgid "Unpin from navbar"
msgstr "Quitar de la barra de navegación"
@@ -7749,216 +7329,204 @@ msgstr "No puede conectarse consigo mismo."
msgid "error saving data"
msgstr "error guardando los datos"
-#: ../../Zotlabs/Lib/ThreadItem.php:108
+#: ../../Zotlabs/Lib/ThreadItem.php:111
msgid "Restricted message"
msgstr "Mensaje restringido"
-#: ../../Zotlabs/Lib/ThreadItem.php:115
+#: ../../Zotlabs/Lib/ThreadItem.php:118
msgid "Direct message"
msgstr "Mensaje directo"
-#: ../../Zotlabs/Lib/ThreadItem.php:120
+#: ../../Zotlabs/Lib/ThreadItem.php:123
msgid "Public Policy"
msgstr "Política pública"
-#: ../../Zotlabs/Lib/ThreadItem.php:152
+#: ../../Zotlabs/Lib/ThreadItem.php:157
msgid "Privacy conflict. Discretion advised."
msgstr "Conflicto de privacidad. Se aconseja discreción."
-#: ../../Zotlabs/Lib/ThreadItem.php:183 ../../Zotlabs/Storage/Browser.php:372
+#: ../../Zotlabs/Lib/ThreadItem.php:188 ../../Zotlabs/Storage/Browser.php:372
msgid "Admin Delete"
msgstr "Eliminar admin"
-#: ../../Zotlabs/Lib/ThreadItem.php:186 ../../Zotlabs/Module/Filer.php:55
+#: ../../Zotlabs/Lib/ThreadItem.php:191 ../../Zotlabs/Module/Filer.php:55
msgid "Save to Folder"
msgstr "Guardar en carpeta"
-#: ../../Zotlabs/Lib/ThreadItem.php:206 ../../Zotlabs/Widget/Pinned.php:75
+#: ../../Zotlabs/Lib/ThreadItem.php:216 ../../Zotlabs/Widget/Pinned.php:75
msgid "I will attend"
msgstr "Participaré"
-#: ../../Zotlabs/Lib/ThreadItem.php:206 ../../Zotlabs/Widget/Pinned.php:75
+#: ../../Zotlabs/Lib/ThreadItem.php:216 ../../Zotlabs/Widget/Pinned.php:75
msgid "I will not attend"
msgstr "No participaré"
-#: ../../Zotlabs/Lib/ThreadItem.php:206 ../../Zotlabs/Widget/Pinned.php:75
+#: ../../Zotlabs/Lib/ThreadItem.php:216 ../../Zotlabs/Widget/Pinned.php:75
msgid "I might attend"
msgstr "Quizá participe"
-#: ../../Zotlabs/Lib/ThreadItem.php:229 ../../Zotlabs/Lib/ThreadItem.php:242
-#: ../../Zotlabs/Module/Photos.php:1126 ../../Zotlabs/Module/Photos.php:1138
-msgid "View all"
-msgstr "Ver todo"
-
-#: ../../Zotlabs/Lib/ThreadItem.php:310 ../../Zotlabs/Module/Photos.php:1074
+#: ../../Zotlabs/Lib/ThreadItem.php:333 ../../Zotlabs/Module/Photos.php:1074
msgid "I like this (toggle)"
msgstr "Me gusta (cambiar)"
-#: ../../Zotlabs/Lib/ThreadItem.php:311 ../../Zotlabs/Module/Photos.php:1075
+#: ../../Zotlabs/Lib/ThreadItem.php:334 ../../Zotlabs/Module/Photos.php:1075
msgid "I don't like this (toggle)"
msgstr "No me gusta esto (cambiar)"
-#: ../../Zotlabs/Lib/ThreadItem.php:312
+#: ../../Zotlabs/Lib/ThreadItem.php:335
msgid "Reply on this comment"
msgstr "Responder a este comentario"
-#: ../../Zotlabs/Lib/ThreadItem.php:312
+#: ../../Zotlabs/Lib/ThreadItem.php:335
msgid "reply"
msgstr "responder"
-#: ../../Zotlabs/Lib/ThreadItem.php:312
+#: ../../Zotlabs/Lib/ThreadItem.php:335
msgid "Reply to"
msgstr "Responder a "
-#: ../../Zotlabs/Lib/ThreadItem.php:324 ../../Zotlabs/Widget/Pinned.php:104
-msgid "Share This"
-msgstr "Compartir esto"
-
-#: ../../Zotlabs/Lib/ThreadItem.php:324 ../../Zotlabs/Widget/Pinned.php:104
+#: ../../Zotlabs/Lib/ThreadItem.php:341 ../../Zotlabs/Widget/Pinned.php:93
msgid "share"
msgstr "compartir"
-#: ../../Zotlabs/Lib/ThreadItem.php:335
+#: ../../Zotlabs/Lib/ThreadItem.php:345
+msgid "Repeat"
+msgstr "Repetir"
+
+#: ../../Zotlabs/Lib/ThreadItem.php:345
+msgid "repeat"
+msgstr "repetir"
+
+#: ../../Zotlabs/Lib/ThreadItem.php:356
msgid "Delivery Report"
msgstr "Informe de transmisión"
-#: ../../Zotlabs/Lib/ThreadItem.php:355
+#: ../../Zotlabs/Lib/ThreadItem.php:376
#, php-format
-msgid "%d Comment"
-msgid_plural "%d Comments"
+msgid "%d comment"
+msgid_plural "%d comments"
msgstr[0] "%d comentario"
msgstr[1] "%d comentarios"
msgstr[2] "%d comentarios"
-#: ../../Zotlabs/Lib/ThreadItem.php:356
+#: ../../Zotlabs/Lib/ThreadItem.php:377
#, php-format
msgid "%d unseen"
msgstr "%dno visto/a vistos/as"
-#: ../../Zotlabs/Lib/ThreadItem.php:406
+#: ../../Zotlabs/Lib/ThreadItem.php:427
msgid "Forum"
msgstr "Foro"
-#: ../../Zotlabs/Lib/ThreadItem.php:413
+#: ../../Zotlabs/Lib/ThreadItem.php:434
msgid "to"
msgstr "a"
-#: ../../Zotlabs/Lib/ThreadItem.php:414 ../../Zotlabs/Widget/Messages.php:148
-#: ../../Zotlabs/Widget/Pinned.php:132
+#: ../../Zotlabs/Lib/ThreadItem.php:435 ../../Zotlabs/Widget/Messages.php:146
+#: ../../Zotlabs/Widget/Messages.php:149 ../../Zotlabs/Widget/Pinned.php:121
msgid "via"
msgstr "mediante"
-#: ../../Zotlabs/Lib/ThreadItem.php:415
+#: ../../Zotlabs/Lib/ThreadItem.php:436
msgid "Wall-to-Wall"
msgstr "De página del perfil a página del perfil (de \"muro\" a \"muro\")"
-#: ../../Zotlabs/Lib/ThreadItem.php:416
+#: ../../Zotlabs/Lib/ThreadItem.php:437
msgid "via Wall-To-Wall:"
msgstr "Mediante el procedimiento página del perfil a página del perfil (de \"muro\" a \"muro\")"
-#: ../../Zotlabs/Lib/ThreadItem.php:444
+#: ../../Zotlabs/Lib/ThreadItem.php:465
msgid "Attend"
msgstr "Participar o asistir"
-#: ../../Zotlabs/Lib/ThreadItem.php:445 ../../Zotlabs/Widget/Pinned.php:146
+#: ../../Zotlabs/Lib/ThreadItem.php:466 ../../Zotlabs/Widget/Pinned.php:135
msgid "Attendance Options"
msgstr "Opciones de participación o asistencia"
-#: ../../Zotlabs/Lib/ThreadItem.php:447 ../../Zotlabs/Widget/Pinned.php:147
+#: ../../Zotlabs/Lib/ThreadItem.php:468 ../../Zotlabs/Widget/Pinned.php:136
msgid "Voting Options"
msgstr "Opciones de votación"
-#: ../../Zotlabs/Lib/ThreadItem.php:462
+#: ../../Zotlabs/Lib/ThreadItem.php:483
msgid "Go to previous comment"
msgstr "Ir al comentario anterior"
-#: ../../Zotlabs/Lib/ThreadItem.php:471 ../../Zotlabs/Widget/Pinned.php:159
+#: ../../Zotlabs/Lib/ThreadItem.php:492 ../../Zotlabs/Widget/Pinned.php:148
msgid "Pinned post"
msgstr "Entradas ancladas"
-#: ../../Zotlabs/Lib/ThreadItem.php:475
+#: ../../Zotlabs/Lib/ThreadItem.php:496
msgid "Add to Calendar"
msgstr "Añadir al calendario"
-#: ../../Zotlabs/Lib/ThreadItem.php:483
-#: ../../Zotlabs/Module/Notifications.php:111
-msgid "Mark all seen"
-msgstr "Marcar todo como visto"
+#: ../../Zotlabs/Lib/ThreadItem.php:504
+msgid "Mark all comments seen"
+msgstr "Marcar como leídos todos los comentarios"
-#: ../../Zotlabs/Lib/ThreadItem.php:490 ../../Zotlabs/Module/Photos.php:1260
-msgctxt "noun"
-msgid "Likes"
-msgstr "Me gusta"
-
-#: ../../Zotlabs/Lib/ThreadItem.php:491 ../../Zotlabs/Module/Photos.php:1261
-msgctxt "noun"
-msgid "Dislikes"
-msgstr "No me gusta"
-
-#: ../../Zotlabs/Lib/ThreadItem.php:829 ../../Zotlabs/Module/Photos.php:1092
+#: ../../Zotlabs/Lib/ThreadItem.php:859 ../../Zotlabs/Module/Photos.php:1092
#: ../../Zotlabs/Module/Photos.php:1205
msgid "This is you"
msgstr "Este es usted"
-#: ../../Zotlabs/Lib/ThreadItem.php:838
+#: ../../Zotlabs/Lib/ThreadItem.php:868
msgid "Image"
msgstr "Imagen"
-#: ../../Zotlabs/Lib/ThreadItem.php:840
+#: ../../Zotlabs/Lib/ThreadItem.php:870
msgid "Insert Link"
msgstr "Insertar enlace"
-#: ../../Zotlabs/Lib/ThreadItem.php:841
+#: ../../Zotlabs/Lib/ThreadItem.php:871
msgid "Video"
msgstr "Vídeo"
-#: ../../Zotlabs/Lib/ThreadItem.php:850
+#: ../../Zotlabs/Lib/ThreadItem.php:880
msgid "Your full name (required)"
msgstr "Su nombre completo (requerido)"
-#: ../../Zotlabs/Lib/ThreadItem.php:851
+#: ../../Zotlabs/Lib/ThreadItem.php:881
msgid "Your email address (required)"
msgstr "Su dirección de correo electrónico (requerido)"
-#: ../../Zotlabs/Lib/ThreadItem.php:852
+#: ../../Zotlabs/Lib/ThreadItem.php:882
msgid "Your website URL (optional)"
msgstr "La URL de su sitio web (opcional)"
-#: ../../Zotlabs/Lib/Libzot.php:686
+#: ../../Zotlabs/Lib/Libzot.php:687
msgid "Unable to verify channel signature"
msgstr "No ha sido posible de verificar la firma del canal"
-#: ../../Zotlabs/Lib/Activity.php:2395
+#: ../../Zotlabs/Lib/Activity.php:2154
#, php-format
msgid "Likes %1$s's %2$s"
msgstr "Gusta de %2$sde %1$s"
-#: ../../Zotlabs/Lib/Activity.php:2398
+#: ../../Zotlabs/Lib/Activity.php:2157
#, php-format
msgid "Doesn't like %1$s's %2$s"
msgstr "No le gusta %2$sde %1$s"
-#: ../../Zotlabs/Lib/Activity.php:2404
+#: ../../Zotlabs/Lib/Activity.php:2163
#, php-format
msgid "Will attend %s's event"
msgstr "Asistirá al evento de %s"
-#: ../../Zotlabs/Lib/Activity.php:2407
+#: ../../Zotlabs/Lib/Activity.php:2166
#, php-format
msgid "Will not attend %s's event"
msgstr "No asistirá al evento de %s"
-#: ../../Zotlabs/Lib/Activity.php:2410
+#: ../../Zotlabs/Lib/Activity.php:2169
#, php-format
msgid "May attend %s's event"
msgstr "Puede asistir al evento de %s"
-#: ../../Zotlabs/Lib/Activity.php:2413
+#: ../../Zotlabs/Lib/Activity.php:2172
#, php-format
msgid "May not attend %s's event"
msgstr "Puede no asistir al evento de %s"
-#: ../../Zotlabs/Lib/Libsync.php:819
+#: ../../Zotlabs/Lib/Libsync.php:823
#, php-format
msgid "Unable to verify site signature for %s"
msgstr "No ha sido posible de verificar la firma del sitio para %s"
@@ -8473,31 +8041,23 @@ msgstr "Editar álbum"
#: ../../Zotlabs/Widget/Album.php:103 ../../Zotlabs/Widget/Portfolio.php:114
#: ../../Zotlabs/Widget/Cdav.php:152 ../../Zotlabs/Widget/Cdav.php:188
#: ../../Zotlabs/Storage/Browser.php:546
-#: ../../Zotlabs/Module/Cover_photo.php:423
+#: ../../Zotlabs/Module/Cover_photo.php:380
#: ../../Zotlabs/Module/Embedphotos.php:189
-#: ../../Zotlabs/Module/Profile_photo.php:547
+#: ../../Zotlabs/Module/Profile_photo.php:546
#: ../../Zotlabs/Module/Photos.php:681
msgid "Upload"
msgstr "Subir"
-#: ../../Zotlabs/Widget/Pinned.php:86
-msgid "I agree"
-msgstr "Estoy de acuerdo"
-
-#: ../../Zotlabs/Widget/Pinned.php:86
-msgid "I disagree"
-msgstr "No estoy de acuerdo"
-
-#: ../../Zotlabs/Widget/Pinned.php:86
-msgid "I abstain"
-msgstr "Me abstengo"
+#: ../../Zotlabs/Widget/Pinned.php:93
+msgid "Share This"
+msgstr "Compartir esto"
-#: ../../Zotlabs/Widget/Pinned.php:127 ../../Zotlabs/Widget/Pinned.php:128
+#: ../../Zotlabs/Widget/Pinned.php:116 ../../Zotlabs/Widget/Pinned.php:117
#, php-format
msgid "View %s's profile - %s"
msgstr "Ver el perfil de %s - %s"
-#: ../../Zotlabs/Widget/Pinned.php:161
+#: ../../Zotlabs/Widget/Pinned.php:150
msgid "Don't show"
msgstr "No mostrar"
@@ -8666,25 +8226,25 @@ msgstr[1] "avisos"
msgstr[2] "avisos"
#: ../../Zotlabs/Widget/Affinity.php:36
-#: ../../Zotlabs/Module/Contactedit.php:295
+#: ../../Zotlabs/Module/Contactedit.php:281
#: ../../Zotlabs/Module/Connedit.php:579
msgid "Me"
msgstr "Yo"
#: ../../Zotlabs/Widget/Affinity.php:37
-#: ../../Zotlabs/Module/Contactedit.php:296
+#: ../../Zotlabs/Module/Contactedit.php:282
#: ../../Zotlabs/Module/Connedit.php:580
msgid "Family"
msgstr "Familia"
#: ../../Zotlabs/Widget/Affinity.php:39
-#: ../../Zotlabs/Module/Contactedit.php:298
+#: ../../Zotlabs/Module/Contactedit.php:284
#: ../../Zotlabs/Module/Connedit.php:582
msgid "Acquaintances"
msgstr "Conocidos/as"
#: ../../Zotlabs/Widget/Affinity.php:40
-#: ../../Zotlabs/Module/Contactedit.php:299
+#: ../../Zotlabs/Module/Contactedit.php:285
#: ../../Zotlabs/Module/Connedit.php:583
#: ../../Zotlabs/Module/Connections.php:97
#: ../../Zotlabs/Module/Connections.php:111
@@ -8692,10 +8252,11 @@ msgid "All"
msgstr "Todos/as"
#: ../../Zotlabs/Widget/Affinity.php:60
+#: ../../Zotlabs/Module/Contactedit.php:618
msgid "Refresh"
msgstr "Recargar"
-#: ../../Zotlabs/Widget/Admin.php:27 ../../Zotlabs/Module/Admin/Site.php:414
+#: ../../Zotlabs/Widget/Admin.php:27 ../../Zotlabs/Module/Admin/Site.php:400
msgid "Site"
msgstr "Sitio"
@@ -8755,7 +8316,7 @@ msgid "Add new role"
msgstr "Añadir nuevo rol"
#: ../../Zotlabs/Widget/Permcats.php:92
-#: ../../Zotlabs/Module/Contactedit.php:409
+#: ../../Zotlabs/Module/Contactedit.php:395
msgid "Contact roles"
msgstr "Roles del contacto"
@@ -8912,7 +8473,7 @@ msgid "Add new group"
msgstr "Añadir nuevo grupo"
#: ../../Zotlabs/Widget/Privacygroups.php:54
-#: ../../Zotlabs/Module/Contactedit.php:443
+#: ../../Zotlabs/Module/Contactedit.php:429
msgid "Privacy groups"
msgstr "Grupos de canales"
@@ -9105,19 +8666,18 @@ msgstr "Sólo se reanuda si la sincronización se estanca."
msgid "Public access denied."
msgstr "Acceso público denegado."
-#: ../../Zotlabs/Module/Display.php:45 ../../Zotlabs/Module/Hq.php:41
-#: ../../Zotlabs/Module/Oep.php:82 ../../Zotlabs/Module/Pubstream.php:46
-#: ../../Zotlabs/Module/Channel.php:161 ../../Zotlabs/Module/Channel.php:183
+#: ../../Zotlabs/Module/Display.php:52 ../../Zotlabs/Module/Oep.php:82
+#: ../../Zotlabs/Module/Pubstream.php:54 ../../Zotlabs/Module/Channel.php:194
msgid "Malformed message id."
msgstr "ID de mensaje malformado."
-#: ../../Zotlabs/Module/Display.php:87 ../../Zotlabs/Module/Network.php:213
-#: ../../Zotlabs/Module/Hq.php:104 ../../Zotlabs/Module/Pubstream.php:89
-#: ../../Zotlabs/Module/Channel.php:267 ../../Zotlabs/Module/Rpost.php:210
+#: ../../Zotlabs/Module/Display.php:94 ../../Zotlabs/Module/Network.php:213
+#: ../../Zotlabs/Module/Hq.php:108 ../../Zotlabs/Module/Pubstream.php:97
+#: ../../Zotlabs/Module/Channel.php:278 ../../Zotlabs/Module/Rpost.php:210
msgid "Reset form"
msgstr "Reiniciar el formulario"
-#: ../../Zotlabs/Module/Display.php:319 ../../Zotlabs/Module/Channel.php:494
+#: ../../Zotlabs/Module/Display.php:319 ../../Zotlabs/Module/Channel.php:500
msgid ""
"You must enable javascript for your browser to be able to view this content."
msgstr "Debe habilitar javascript para poder ver este contenido en su navegador."
@@ -9135,71 +8695,71 @@ msgstr "Se ha eliminado el elemento."
msgid "Image uploaded but image cropping failed."
msgstr "Imagen actualizada, pero el recorte de la imagen ha fallado. "
-#: ../../Zotlabs/Module/Cover_photo.php:196
-#: ../../Zotlabs/Module/Cover_photo.php:254
+#: ../../Zotlabs/Module/Cover_photo.php:194
+#: ../../Zotlabs/Module/Cover_photo.php:251
msgid "Cover Photos"
msgstr "Imágenes de portada del perfil"
-#: ../../Zotlabs/Module/Cover_photo.php:212
+#: ../../Zotlabs/Module/Cover_photo.php:210
#: ../../Zotlabs/Module/Profile_photo.php:184
msgid "Image resize failed."
msgstr "El ajuste del tamaño de la imagen ha fallado."
-#: ../../Zotlabs/Module/Cover_photo.php:265
-#: ../../Zotlabs/Module/Profile_photo.php:350
+#: ../../Zotlabs/Module/Cover_photo.php:262
+#: ../../Zotlabs/Module/Profile_photo.php:349
msgid "Image upload failed."
msgstr "La carga de la imagen ha fallado."
-#: ../../Zotlabs/Module/Cover_photo.php:282
-#: ../../Zotlabs/Module/Profile_photo.php:370
+#: ../../Zotlabs/Module/Cover_photo.php:279
+#: ../../Zotlabs/Module/Profile_photo.php:369
msgid "Unable to process image."
msgstr "No ha sido posible procesar la imagen."
-#: ../../Zotlabs/Module/Cover_photo.php:367
-#: ../../Zotlabs/Module/Cover_photo.php:382
-#: ../../Zotlabs/Module/Profile_photo.php:432
-#: ../../Zotlabs/Module/Profile_photo.php:497
+#: ../../Zotlabs/Module/Cover_photo.php:324
+#: ../../Zotlabs/Module/Cover_photo.php:339
+#: ../../Zotlabs/Module/Profile_photo.php:431
+#: ../../Zotlabs/Module/Profile_photo.php:496
msgid "Photo not available."
msgstr "Foto no disponible."
-#: ../../Zotlabs/Module/Cover_photo.php:418
+#: ../../Zotlabs/Module/Cover_photo.php:375
msgid "Your cover photo may be visible to anybody on the internet"
msgstr "La foto de la portada puede ser visible para cualquiera en Internet"
-#: ../../Zotlabs/Module/Cover_photo.php:420
+#: ../../Zotlabs/Module/Cover_photo.php:377
msgid "Upload File:"
msgstr "Subir fichero:"
-#: ../../Zotlabs/Module/Cover_photo.php:421
+#: ../../Zotlabs/Module/Cover_photo.php:378
msgid "Select a profile:"
msgstr "Seleccionar un perfil:"
-#: ../../Zotlabs/Module/Cover_photo.php:422
+#: ../../Zotlabs/Module/Cover_photo.php:379
msgid "Change Cover Photo"
msgstr "Cambiar la foto de portada del perfil"
-#: ../../Zotlabs/Module/Cover_photo.php:426
-#: ../../Zotlabs/Module/Cover_photo.php:427
+#: ../../Zotlabs/Module/Cover_photo.php:383
+#: ../../Zotlabs/Module/Cover_photo.php:384
+#: ../../Zotlabs/Module/Profile_photo.php:550
#: ../../Zotlabs/Module/Profile_photo.php:551
-#: ../../Zotlabs/Module/Profile_photo.php:552
msgid "Use a photo from your albums"
msgstr "Usar una foto de sus álbumes"
-#: ../../Zotlabs/Module/Cover_photo.php:438
+#: ../../Zotlabs/Module/Cover_photo.php:395
msgid "Select existing photo"
msgstr "Seleccionar una foto"
-#: ../../Zotlabs/Module/Cover_photo.php:455
-#: ../../Zotlabs/Module/Profile_photo.php:581
+#: ../../Zotlabs/Module/Cover_photo.php:412
+#: ../../Zotlabs/Module/Profile_photo.php:580
msgid "Crop Image"
msgstr "Recortar imagen"
-#: ../../Zotlabs/Module/Cover_photo.php:456
-#: ../../Zotlabs/Module/Profile_photo.php:582
+#: ../../Zotlabs/Module/Cover_photo.php:413
+#: ../../Zotlabs/Module/Profile_photo.php:581
msgid "Please adjust the image cropping for optimum viewing."
msgstr "Por favor ajuste el recorte de la imagen para una visión óptima."
-#: ../../Zotlabs/Module/Cover_photo.php:458
+#: ../../Zotlabs/Module/Cover_photo.php:415
msgid "Done Editing"
msgstr "Edición completada"
@@ -9211,11 +8771,11 @@ msgstr "Enlace de la página"
msgid "Edit Webpage"
msgstr "Editar la página web"
-#: ../../Zotlabs/Module/Sse_bs.php:623
+#: ../../Zotlabs/Module/Sse_bs.php:626
msgid "Private forum"
msgstr "Foro privado"
-#: ../../Zotlabs/Module/Sse_bs.php:623
+#: ../../Zotlabs/Module/Sse_bs.php:626
msgid "Public forum"
msgstr "Foro público"
@@ -9360,7 +8920,7 @@ msgstr "No se encuentra el grupo"
msgid "No such channel"
msgstr "No se encuentra el canal"
-#: ../../Zotlabs/Module/Network.php:172 ../../Zotlabs/Module/Channel.php:234
+#: ../../Zotlabs/Module/Network.php:172 ../../Zotlabs/Module/Channel.php:245
msgid "Search Results For:"
msgstr "Buscar resultados para:"
@@ -9384,10 +8944,6 @@ msgstr "Administrar apps"
msgid "Create Custom App"
msgstr "Crear una app personalizada"
-#: ../../Zotlabs/Module/Share.php:126
-msgid "Post repeated"
-msgstr "Entrada repetida"
-
#: ../../Zotlabs/Module/Service_limits.php:23
msgid "No service class restrictions found."
msgstr "No se han encontrado restricciones sobre esta clase de servicio."
@@ -9564,6 +9120,10 @@ msgstr "No hay más notificaciones del sistema"
msgid "System Notifications"
msgstr "Notificaciones del sistema"
+#: ../../Zotlabs/Module/Notifications.php:111
+msgid "Mark all seen"
+msgstr "Marcar todo como visto"
+
#: ../../Zotlabs/Module/Z6trans.php:19
msgid "Update to Hubzilla 5.0 step 2"
msgstr "Actualizar a Hubzilla 5.0. Paso 2"
@@ -9580,60 +9140,56 @@ msgstr "php util/z6convert.php"
msgid "from the terminal."
msgstr "desde la terminal."
-#: ../../Zotlabs/Module/Thing.php:122
+#: ../../Zotlabs/Module/Thing.php:139
msgid "Thing updated"
msgstr "Elemento actualizado."
-#: ../../Zotlabs/Module/Thing.php:174
+#: ../../Zotlabs/Module/Thing.php:191
msgid "Object store: failed"
msgstr "Guardar objeto: ha fallado"
-#: ../../Zotlabs/Module/Thing.php:178
+#: ../../Zotlabs/Module/Thing.php:195
msgid "Thing added"
msgstr "Elemento añadido"
-#: ../../Zotlabs/Module/Thing.php:204
+#: ../../Zotlabs/Module/Thing.php:210
#, php-format
msgid "OBJ: %1$s %2$s %3$s"
msgstr "OBJ: %1$s %2$s %3$s"
-#: ../../Zotlabs/Module/Thing.php:267
-msgid "Show Thing"
-msgstr "Mostrar elemento"
-
-#: ../../Zotlabs/Module/Thing.php:274
+#: ../../Zotlabs/Module/Thing.php:277 ../../Zotlabs/Module/Thing.php:301
msgid "item not found."
msgstr "elemento no encontrado."
-#: ../../Zotlabs/Module/Thing.php:307
+#: ../../Zotlabs/Module/Thing.php:336
msgid "Edit Thing"
msgstr "Editar elemento"
-#: ../../Zotlabs/Module/Thing.php:309 ../../Zotlabs/Module/Thing.php:366
+#: ../../Zotlabs/Module/Thing.php:338 ../../Zotlabs/Module/Thing.php:394
msgid "Select a profile"
msgstr "Seleccionar un perfil"
-#: ../../Zotlabs/Module/Thing.php:313 ../../Zotlabs/Module/Thing.php:369
+#: ../../Zotlabs/Module/Thing.php:342 ../../Zotlabs/Module/Thing.php:397
msgid "Post an activity"
msgstr "Publicar una actividad"
-#: ../../Zotlabs/Module/Thing.php:313 ../../Zotlabs/Module/Thing.php:369
+#: ../../Zotlabs/Module/Thing.php:342 ../../Zotlabs/Module/Thing.php:397
msgid "Only sends to viewers of the applicable profile"
msgstr "Sólo enviar a espectadores del perfil pertinente."
-#: ../../Zotlabs/Module/Thing.php:315 ../../Zotlabs/Module/Thing.php:371
+#: ../../Zotlabs/Module/Thing.php:344 ../../Zotlabs/Module/Thing.php:399
msgid "Name of thing e.g. something"
msgstr "Nombre del elemento, p. ej.:. \"algo\""
-#: ../../Zotlabs/Module/Thing.php:317 ../../Zotlabs/Module/Thing.php:372
+#: ../../Zotlabs/Module/Thing.php:346 ../../Zotlabs/Module/Thing.php:400
msgid "URL of thing (optional)"
msgstr "Dirección del elemento (opcional)"
-#: ../../Zotlabs/Module/Thing.php:319 ../../Zotlabs/Module/Thing.php:373
+#: ../../Zotlabs/Module/Thing.php:348 ../../Zotlabs/Module/Thing.php:401
msgid "URL for photo of thing (optional)"
msgstr "Dirección para la foto o elemento (opcional)"
-#: ../../Zotlabs/Module/Thing.php:364
+#: ../../Zotlabs/Module/Thing.php:392
msgid "Add Thing to your Profile"
msgstr "Añadir alguna cosa a su perfil"
@@ -9842,303 +9398,274 @@ msgstr "No se ha podido acceder al registro de contacto."
msgid "Could not locate selected profile."
msgstr "No se ha podido localizar el perfil seleccionado."
-#: ../../Zotlabs/Module/Contactedit.php:192
+#: ../../Zotlabs/Module/Contactedit.php:180
#: ../../Zotlabs/Module/Connedit.php:215
msgid "is now connected to"
msgstr "ahora está conectado/a"
-#: ../../Zotlabs/Module/Contactedit.php:252
-#: ../../Zotlabs/Module/Contactedit.php:401
+#: ../../Zotlabs/Module/Contactedit.php:238
+#: ../../Zotlabs/Module/Contactedit.php:387
#: ../../Zotlabs/Module/Connedit.php:701
msgid "Contact Tools"
msgstr "Gestión de contactos"
-#: ../../Zotlabs/Module/Contactedit.php:329
+#: ../../Zotlabs/Module/Contactedit.php:315
#: ../../Zotlabs/Module/Connedit.php:622
msgid "Approve this contact"
msgstr "Aprobar este contacto"
-#: ../../Zotlabs/Module/Contactedit.php:329
+#: ../../Zotlabs/Module/Contactedit.php:315
#: ../../Zotlabs/Module/Connedit.php:622
msgid "Accept contact to allow communication"
msgstr "Aceptar el contacto para permitir la comunicación"
-#: ../../Zotlabs/Module/Contactedit.php:362
+#: ../../Zotlabs/Module/Contactedit.php:348
#: ../../Zotlabs/Module/Connedit.php:658
msgid "Please select a role for this contact!"
msgstr "¡Por favor, seleccione un rol para este contacto!"
-#: ../../Zotlabs/Module/Contactedit.php:382
+#: ../../Zotlabs/Module/Contactedit.php:368
#: ../../Zotlabs/Module/Connedit.php:678
msgid "This contact is unreachable from this location."
msgstr "Este contacto es inaccesible desde esta ubicación."
-#: ../../Zotlabs/Module/Contactedit.php:383
+#: ../../Zotlabs/Module/Contactedit.php:369
#: ../../Zotlabs/Module/Connedit.php:679
msgid "This contact may be unreachable from other channel locations."
msgstr "Este contacto puede ser inaccesible desde otras ubicaciones del canal."
-#: ../../Zotlabs/Module/Contactedit.php:385
+#: ../../Zotlabs/Module/Contactedit.php:371
#: ../../Zotlabs/Module/Connedit.php:681
msgid "Location independence is not supported by their network."
msgstr "La independencia de ubicación no es compatible con su red."
-#: ../../Zotlabs/Module/Contactedit.php:395
+#: ../../Zotlabs/Module/Contactedit.php:381
msgid "View profile"
msgstr "Ver el perfil"
-#: ../../Zotlabs/Module/Contactedit.php:397
+#: ../../Zotlabs/Module/Contactedit.php:383
#: ../../Zotlabs/Module/Connections.php:413
msgid "This is a group/forum channel"
msgstr "Este es un canal de grupo/foro"
-#: ../../Zotlabs/Module/Contactedit.php:408
+#: ../../Zotlabs/Module/Contactedit.php:394
msgid "Select a role for this contact"
msgstr "Selecciones un rol para este contacto"
-#: ../../Zotlabs/Module/Contactedit.php:420
+#: ../../Zotlabs/Module/Contactedit.php:406
#: ../../Zotlabs/Module/Connedit.php:703
msgid "Slide to adjust your degree of friendship"
msgstr "Deslizar para ajustar el grado de amistad"
-#: ../../Zotlabs/Module/Contactedit.php:422
+#: ../../Zotlabs/Module/Contactedit.php:408
#: ../../Zotlabs/Module/Connedit.php:705
msgid "Custom Filter"
msgstr "Filtro personalizado"
-#: ../../Zotlabs/Module/Contactedit.php:423
+#: ../../Zotlabs/Module/Contactedit.php:409
#: ../../Zotlabs/Module/Connedit.php:706
#: ../../Zotlabs/Module/Settings/Channel.php:286
msgid "Only import posts with this text"
msgstr "Importar solo entradas que contengan este texto"
-#: ../../Zotlabs/Module/Contactedit.php:423
-#: ../../Zotlabs/Module/Contactedit.php:424
+#: ../../Zotlabs/Module/Contactedit.php:409
+#: ../../Zotlabs/Module/Contactedit.php:410
#: ../../Zotlabs/Module/Connedit.php:706 ../../Zotlabs/Module/Connedit.php:707
-#: ../../Zotlabs/Module/Admin/Site.php:515
-#: ../../Zotlabs/Module/Admin/Site.php:516
+#: ../../Zotlabs/Module/Admin/Site.php:500
+#: ../../Zotlabs/Module/Admin/Site.php:501
msgid ""
"words one per line or #tags or /patterns/ or lang=xx, leave blank to import "
"all posts"
msgstr "Una sola opción por línea: palabras, #etiquetas, /patrones/ o lang=xx. Dejar en blanco para importarlo todo"
-#: ../../Zotlabs/Module/Contactedit.php:424
+#: ../../Zotlabs/Module/Contactedit.php:410
#: ../../Zotlabs/Module/Connedit.php:707
#: ../../Zotlabs/Module/Settings/Channel.php:285
msgid "Do not import posts with this text"
msgstr "No importar entradas que contengan este texto"
-#: ../../Zotlabs/Module/Contactedit.php:429
+#: ../../Zotlabs/Module/Contactedit.php:415
#: ../../Zotlabs/Module/Connedit.php:714
msgid "Approve contact"
msgstr "Aprobar contacto"
-#: ../../Zotlabs/Module/Contactedit.php:431
+#: ../../Zotlabs/Module/Contactedit.php:417
#: ../../Zotlabs/Module/Connedit.php:717
msgid "Their"
msgstr "Su"
-#: ../../Zotlabs/Module/Contactedit.php:432
+#: ../../Zotlabs/Module/Contactedit.php:418
#: ../../Zotlabs/Module/Connedit.php:718
msgid "My"
msgstr "Mi"
-#: ../../Zotlabs/Module/Contactedit.php:440
+#: ../../Zotlabs/Module/Contactedit.php:426
msgid "Roles"
msgstr "Roles"
-#: ../../Zotlabs/Module/Contactedit.php:441
+#: ../../Zotlabs/Module/Contactedit.php:427
msgid "Compare permissions"
msgstr "Comparar permisos"
-#: ../../Zotlabs/Module/Contactedit.php:442
+#: ../../Zotlabs/Module/Contactedit.php:428
msgid "Permission"
msgstr "Permiso "
-#: ../../Zotlabs/Module/Contactedit.php:445
+#: ../../Zotlabs/Module/Contactedit.php:431
#: ../../Zotlabs/Module/Connedit.php:572
msgid "Affinity"
msgstr "Afinidad"
-#: ../../Zotlabs/Module/Contactedit.php:446
+#: ../../Zotlabs/Module/Contactedit.php:432
msgid "Content filter"
msgstr "Filtro de contenidos"
-#: ../../Zotlabs/Module/Contactedit.php:456
+#: ../../Zotlabs/Module/Contactedit.php:442
msgid "Contact updated"
msgstr "Contacto actualizado"
-#: ../../Zotlabs/Module/Contactedit.php:456
+#: ../../Zotlabs/Module/Contactedit.php:442
msgid "Contact update failed"
msgstr "Fallo en la actualización del contacto"
-#: ../../Zotlabs/Module/Contactedit.php:462
+#: ../../Zotlabs/Module/Contactedit.php:448
#: ../../Zotlabs/Module/Connections.php:357
msgid "Approve connection"
msgstr "Aprobar esta conexión"
-#: ../../Zotlabs/Module/Contactedit.php:508
-#: ../../Zotlabs/Module/Contactedit.php:518
-msgid "Refresh succeeded"
-msgstr "Actualización con éxito"
-
-#: ../../Zotlabs/Module/Contactedit.php:511
-msgid "Refresh failed - channel is currently unavailable"
-msgstr "Error de actualización: el canal no está disponible en este momento"
-
-#: ../../Zotlabs/Module/Contactedit.php:530
+#: ../../Zotlabs/Module/Contactedit.php:520
msgid "Block status updated"
msgstr "Estado del bloqueo actualizado"
-#: ../../Zotlabs/Module/Contactedit.php:534
+#: ../../Zotlabs/Module/Contactedit.php:524
msgid "Block failed"
msgstr "Bloqueo fallido"
-#: ../../Zotlabs/Module/Contactedit.php:545
+#: ../../Zotlabs/Module/Contactedit.php:535
msgid "Ignore status updated"
msgstr "Estado de ignorar actualizado"
-#: ../../Zotlabs/Module/Contactedit.php:549
+#: ../../Zotlabs/Module/Contactedit.php:539
msgid "Ignore failed"
msgstr "Ignorar falló"
-#: ../../Zotlabs/Module/Contactedit.php:560
+#: ../../Zotlabs/Module/Contactedit.php:550
msgid "Archive status updated"
msgstr "Estado de archivar actualizado"
-#: ../../Zotlabs/Module/Contactedit.php:564
+#: ../../Zotlabs/Module/Contactedit.php:554
msgid "Archive failed"
msgstr "Archivar falló"
-#: ../../Zotlabs/Module/Contactedit.php:575
+#: ../../Zotlabs/Module/Contactedit.php:565
msgid "Hide status updated"
msgstr "Estado de ocultación actualizado"
-#: ../../Zotlabs/Module/Contactedit.php:579
+#: ../../Zotlabs/Module/Contactedit.php:569
msgid "Hide failed"
msgstr "Ocultar falló"
-#: ../../Zotlabs/Module/Contactedit.php:614
+#: ../../Zotlabs/Module/Contactedit.php:604
msgid "Contact removed"
msgstr "Contacto eliminado"
-#: ../../Zotlabs/Module/Contactedit.php:618
+#: ../../Zotlabs/Module/Contactedit.php:608
msgid "Delete failed"
msgstr "Eliminar falló"
-#: ../../Zotlabs/Module/Contactedit.php:628
-#: ../../Zotlabs/Module/Connedit.php:487
-msgid "Refresh Permissions"
-msgstr "Recargar los permisos"
-
-#: ../../Zotlabs/Module/Contactedit.php:629
-#: ../../Zotlabs/Module/Connedit.php:490
-msgid "Fetch updated permissions"
-msgstr "Obtener los permisos actualizados"
-
-#: ../../Zotlabs/Module/Contactedit.php:633
-#: ../../Zotlabs/Module/Connedit.php:494
-msgid "Refresh Photo"
-msgstr "Actualizar la foto"
+#: ../../Zotlabs/Module/Contactedit.php:619
+msgid "Refetch contact info"
+msgstr "Recuperar información de contacto"
-#: ../../Zotlabs/Module/Contactedit.php:634
-#: ../../Zotlabs/Module/Connedit.php:497
-msgid "Fetch updated photo"
-msgstr "Obtener una foto actualizada"
-
-#: ../../Zotlabs/Module/Contactedit.php:639
+#: ../../Zotlabs/Module/Contactedit.php:623
#: ../../Zotlabs/Module/Connedit.php:508
#: ../../Zotlabs/Module/Admin/Accounts.php:322
msgid "Unblock"
msgstr "Desbloquear"
-#: ../../Zotlabs/Module/Contactedit.php:639
+#: ../../Zotlabs/Module/Contactedit.php:623
#: ../../Zotlabs/Module/Connedit.php:508
#: ../../Zotlabs/Module/Admin/Accounts.php:321
msgid "Block"
msgstr "Bloquear"
-#: ../../Zotlabs/Module/Contactedit.php:641
+#: ../../Zotlabs/Module/Contactedit.php:625
#: ../../Zotlabs/Module/Connedit.php:511
msgid "Block (or Unblock) all communications with this connection"
msgstr "Bloquear (o desbloquear) todas las comunicaciones con esta conexión"
-#: ../../Zotlabs/Module/Contactedit.php:642
+#: ../../Zotlabs/Module/Contactedit.php:626
#: ../../Zotlabs/Module/Connedit.php:512
msgid "This connection is blocked!"
msgstr "¡Esta conexión está bloqueada!"
-#: ../../Zotlabs/Module/Contactedit.php:646
+#: ../../Zotlabs/Module/Contactedit.php:630
#: ../../Zotlabs/Module/Connedit.php:516
msgid "Unignore"
msgstr "Dejar de ignorar"
-#: ../../Zotlabs/Module/Contactedit.php:646
+#: ../../Zotlabs/Module/Contactedit.php:630
#: ../../Zotlabs/Module/Connedit.php:516
#: ../../Zotlabs/Module/Connections.php:360
msgid "Ignore"
msgstr "Ignorar"
-#: ../../Zotlabs/Module/Contactedit.php:648
+#: ../../Zotlabs/Module/Contactedit.php:632
#: ../../Zotlabs/Module/Connedit.php:519
msgid "Ignore (or Unignore) all inbound communications from this connection"
msgstr "Ignorar (o dejar de ignorar) todas las comunicaciones entrantes de esta conexión"
-#: ../../Zotlabs/Module/Contactedit.php:649
+#: ../../Zotlabs/Module/Contactedit.php:633
#: ../../Zotlabs/Module/Connedit.php:520
msgid "This connection is ignored!"
msgstr "¡Esta conexión es ignorada!"
-#: ../../Zotlabs/Module/Contactedit.php:653
+#: ../../Zotlabs/Module/Contactedit.php:637
#: ../../Zotlabs/Module/Connedit.php:524
msgid "Unarchive"
msgstr "Desarchivar"
-#: ../../Zotlabs/Module/Contactedit.php:653
+#: ../../Zotlabs/Module/Contactedit.php:637
#: ../../Zotlabs/Module/Connedit.php:524
msgid "Archive"
msgstr "Archivar"
-#: ../../Zotlabs/Module/Contactedit.php:655
+#: ../../Zotlabs/Module/Contactedit.php:639
#: ../../Zotlabs/Module/Connedit.php:527
msgid ""
"Archive (or Unarchive) this connection - mark channel dead but keep content"
msgstr "Archiva (o desarchiva) esta conexión - marca el canal como muerto aunque mantiene sus contenidos"
-#: ../../Zotlabs/Module/Contactedit.php:656
+#: ../../Zotlabs/Module/Contactedit.php:640
#: ../../Zotlabs/Module/Connedit.php:528
msgid "This connection is archived!"
msgstr "¡Esta conexión esta archivada!"
-#: ../../Zotlabs/Module/Contactedit.php:660
+#: ../../Zotlabs/Module/Contactedit.php:644
#: ../../Zotlabs/Module/Connedit.php:532
msgid "Unhide"
msgstr "Mostrar"
-#: ../../Zotlabs/Module/Contactedit.php:660
+#: ../../Zotlabs/Module/Contactedit.php:644
#: ../../Zotlabs/Module/Connedit.php:532
msgid "Hide"
msgstr "Ocultar"
-#: ../../Zotlabs/Module/Contactedit.php:662
+#: ../../Zotlabs/Module/Contactedit.php:646
#: ../../Zotlabs/Module/Connedit.php:535
msgid "Hide or Unhide this connection from your other connections"
msgstr "Ocultar o mostrar esta conexión a sus otras conexiones"
-#: ../../Zotlabs/Module/Contactedit.php:663
+#: ../../Zotlabs/Module/Contactedit.php:647
#: ../../Zotlabs/Module/Connedit.php:536
msgid "This connection is hidden!"
msgstr "¡Esta conexión está oculta!"
-#: ../../Zotlabs/Module/Contactedit.php:669
+#: ../../Zotlabs/Module/Contactedit.php:653
#: ../../Zotlabs/Module/Connedit.php:543
msgid "Delete this connection"
msgstr "Eliminar esta conexión"
-#: ../../Zotlabs/Module/Mood.php:153
-msgid "Set your current mood and tell your friends"
-msgstr "Describir su estado de ánimo para comunicárselo a sus amigos"
-
#: ../../Zotlabs/Module/Search.php:250
#, php-format
msgid "Items tagged with: %s"
@@ -10270,7 +9797,7 @@ msgid "This will help to review your registration"
msgstr "Esto ayudará a revisar su registro"
#: ../../Zotlabs/Module/Register.php:520
-#: ../../Zotlabs/Module/Admin/Site.php:416
+#: ../../Zotlabs/Module/Admin/Site.php:402
msgid "Registration"
msgstr "Registro"
@@ -10306,47 +9833,47 @@ msgstr "Aplicación instalada."
msgid "Malformed app."
msgstr "Aplicación con errores"
-#: ../../Zotlabs/Module/Appman.php:198
+#: ../../Zotlabs/Module/Appman.php:208
msgid "Embed code"
msgstr "Código incorporado"
-#: ../../Zotlabs/Module/Appman.php:203
+#: ../../Zotlabs/Module/Appman.php:213
msgid "Edit App"
msgstr "Modificar la aplicación"
-#: ../../Zotlabs/Module/Appman.php:203
+#: ../../Zotlabs/Module/Appman.php:213
msgid "Create App"
msgstr "Crear una aplicación"
-#: ../../Zotlabs/Module/Appman.php:208
+#: ../../Zotlabs/Module/Appman.php:218
msgid "Name of app"
msgstr "Nombre de la aplicación"
-#: ../../Zotlabs/Module/Appman.php:209
+#: ../../Zotlabs/Module/Appman.php:219
msgid "Location (URL) of app"
msgstr "Dirección (URL) de la aplicación"
-#: ../../Zotlabs/Module/Appman.php:211
+#: ../../Zotlabs/Module/Appman.php:221
msgid "Photo icon URL"
msgstr "Dirección del icono"
-#: ../../Zotlabs/Module/Appman.php:211
+#: ../../Zotlabs/Module/Appman.php:221
msgid "80 x 80 pixels - optional"
msgstr "80 x 80 pixels - opcional"
-#: ../../Zotlabs/Module/Appman.php:212
+#: ../../Zotlabs/Module/Appman.php:222
msgid "Categories (optional, comma separated list)"
msgstr "Temas (opcional, lista separada por comas)"
-#: ../../Zotlabs/Module/Appman.php:213
+#: ../../Zotlabs/Module/Appman.php:223
msgid "Version ID"
msgstr "Versión"
-#: ../../Zotlabs/Module/Appman.php:214
+#: ../../Zotlabs/Module/Appman.php:224
msgid "Price of app"
msgstr "Precio de la aplicación"
-#: ../../Zotlabs/Module/Appman.php:215
+#: ../../Zotlabs/Module/Appman.php:225
msgid "Location (URL) to purchase app"
msgstr "Dirección (URL) donde adquirir la aplicación"
@@ -10354,36 +9881,36 @@ msgstr "Dirección (URL) donde adquirir la aplicación"
msgid "item"
msgstr "elemento"
-#: ../../Zotlabs/Module/Item.php:478 ../../Zotlabs/Module/Pin.php:36
+#: ../../Zotlabs/Module/Item.php:477 ../../Zotlabs/Module/Pin.php:36
msgid "Unable to locate original post."
msgstr "No ha sido posible encontrar la entrada original."
-#: ../../Zotlabs/Module/Item.php:764
+#: ../../Zotlabs/Module/Item.php:763
msgid "Empty post discarded."
msgstr "La entrada vacía ha sido desechada."
-#: ../../Zotlabs/Module/Item.php:1179
+#: ../../Zotlabs/Module/Item.php:1205
msgid "Duplicate post suppressed."
msgstr "Se ha suprimido la entrada duplicada."
-#: ../../Zotlabs/Module/Item.php:1329
+#: ../../Zotlabs/Module/Item.php:1343
msgid "System error. Post not saved."
msgstr "Error del sistema. La entrada no se ha podido salvar."
-#: ../../Zotlabs/Module/Item.php:1363
+#: ../../Zotlabs/Module/Item.php:1377
msgid "Your comment is awaiting approval."
msgstr "Su comentario está pendiente de aprobación."
-#: ../../Zotlabs/Module/Item.php:1500
+#: ../../Zotlabs/Module/Item.php:1514
msgid "Unable to obtain post information from database."
msgstr "No ha sido posible obtener información de la entrada en la base de datos."
-#: ../../Zotlabs/Module/Item.php:1507
+#: ../../Zotlabs/Module/Item.php:1521
#, php-format
msgid "You have reached your limit of %1$.0f top level posts."
msgstr "Ha alcanzado su límite de %1$.0f entradas en la página principal."
-#: ../../Zotlabs/Module/Item.php:1514
+#: ../../Zotlabs/Module/Item.php:1528
#, php-format
msgid "You have reached your limit of %1$.0f webpages."
msgstr "Ha alcanzado su límite de %1$.0f páginas web."
@@ -10431,6 +9958,22 @@ msgstr "La conexión ha sido eliminada."
msgid "View %s's profile"
msgstr "Ver el perfil de %s"
+#: ../../Zotlabs/Module/Connedit.php:487
+msgid "Refresh Permissions"
+msgstr "Recargar los permisos"
+
+#: ../../Zotlabs/Module/Connedit.php:490
+msgid "Fetch updated permissions"
+msgstr "Obtener los permisos actualizados"
+
+#: ../../Zotlabs/Module/Connedit.php:494
+msgid "Refresh Photo"
+msgstr "Actualizar la foto"
+
+#: ../../Zotlabs/Module/Connedit.php:497
+msgid "Fetch updated photo"
+msgstr "Obtener una foto actualizada"
+
#: ../../Zotlabs/Module/Connedit.php:504
msgid "View recent posts and comments"
msgstr "Ver publicaciones y comentarios recientes"
@@ -10557,7 +10100,7 @@ msgstr "Sitio web"
#: ../../Zotlabs/Module/Connedit.php:739 ../../Zotlabs/Module/Locs.php:122
#: ../../Zotlabs/Module/Admin/Channels.php:160
-#: ../../Zotlabs/Module/Profiles.php:472 ../../Zotlabs/Module/Cdav.php:1375
+#: ../../Zotlabs/Module/Profiles.php:468 ../../Zotlabs/Module/Cdav.php:1375
msgid "Address"
msgstr "Dirección"
@@ -10597,7 +10140,7 @@ msgstr "Provincia, región o estado"
msgid "ZIP Code"
msgstr "Código postal"
-#: ../../Zotlabs/Module/Connedit.php:757 ../../Zotlabs/Module/Profiles.php:773
+#: ../../Zotlabs/Module/Connedit.php:757 ../../Zotlabs/Module/Profiles.php:769
#: ../../Zotlabs/Module/Cdav.php:1393
msgid "Country"
msgstr "País"
@@ -10643,7 +10186,7 @@ msgid ""
"hours."
msgstr "No hay sugerencias disponibles. Si es un sitio nuevo, espere 24 horas y pruebe de nuevo."
-#: ../../Zotlabs/Module/Follow.php:92
+#: ../../Zotlabs/Module/Follow.php:75
msgid "Connection added."
msgstr "Se ha incorporado una conexión."
@@ -10739,35 +10282,35 @@ msgstr "De más antiguo a más nuevo"
msgid "No entries (some entries may be hidden)."
msgstr "Sin entradas (algunas entradas pueden estar ocultas)."
-#: ../../Zotlabs/Module/Profile_photo.php:544
+#: ../../Zotlabs/Module/Profile_photo.php:543
msgid ""
"This profile photo will be visible to anybody on the internet and may be "
"distributed to other websites."
msgstr "Esta foto de perfil será visible para cualquier persona en Internet y podrá ser distribuida a otros sitios web."
-#: ../../Zotlabs/Module/Profile_photo.php:544
+#: ../../Zotlabs/Module/Profile_photo.php:543
msgid ""
"This profile photo will be visible only to channels with permission to view "
"this profile."
msgstr "Esta foto de perfil sólo será visible para los canales con permiso para ver este perfil."
-#: ../../Zotlabs/Module/Profile_photo.php:546
+#: ../../Zotlabs/Module/Profile_photo.php:545
msgid "Use Photo for Profile"
msgstr "Usar la fotografía para el perfil"
-#: ../../Zotlabs/Module/Profile_photo.php:546
+#: ../../Zotlabs/Module/Profile_photo.php:545
msgid "Change Profile Photo"
msgstr "Cambiar la foto del perfil"
-#: ../../Zotlabs/Module/Profile_photo.php:548
+#: ../../Zotlabs/Module/Profile_photo.php:547
msgid "Reset to default"
msgstr "Restablecer los valores por defecto"
-#: ../../Zotlabs/Module/Profile_photo.php:562
+#: ../../Zotlabs/Module/Profile_photo.php:561
msgid "Select existing"
msgstr "Seleccione lo que hay"
-#: ../../Zotlabs/Module/Profile_photo.php:584
+#: ../../Zotlabs/Module/Profile_photo.php:583
msgid "Done editing"
msgstr "Edición completada"
@@ -11136,7 +10679,7 @@ msgstr "Caducado/a"
#: ../../Zotlabs/Module/Admin/Addons.php:443
#: ../../Zotlabs/Module/Admin/Channels.php:145
#: ../../Zotlabs/Module/Admin/Logs.php:82
-#: ../../Zotlabs/Module/Admin/Site.php:411
+#: ../../Zotlabs/Module/Admin/Site.php:397
#: ../../Zotlabs/Module/Admin/Security.php:105
#: ../../Zotlabs/Module/Admin.php:140
msgid "Administration"
@@ -11710,512 +11253,512 @@ msgstr "Errores"
msgid "Site settings updated."
msgstr "Ajustes del sitio actualizados."
-#: ../../Zotlabs/Module/Admin/Site.php:256
+#: ../../Zotlabs/Module/Admin/Site.php:242
#: ../../Zotlabs/Module/Settings/Display.php:116
#, php-format
msgid "%s - (Incompatible)"
msgstr "%s - (Incompatible)"
-#: ../../Zotlabs/Module/Admin/Site.php:263
+#: ../../Zotlabs/Module/Admin/Site.php:249
msgid "mobile"
msgstr "móvil"
-#: ../../Zotlabs/Module/Admin/Site.php:265
+#: ../../Zotlabs/Module/Admin/Site.php:251
msgid "experimental"
msgstr "experimental"
-#: ../../Zotlabs/Module/Admin/Site.php:267
+#: ../../Zotlabs/Module/Admin/Site.php:253
msgid "unsupported"
msgstr "no soportado"
-#: ../../Zotlabs/Module/Admin/Site.php:320
+#: ../../Zotlabs/Module/Admin/Site.php:306
msgid "Yes - with approval"
msgstr "Sí - con aprobación"
-#: ../../Zotlabs/Module/Admin/Site.php:328
+#: ../../Zotlabs/Module/Admin/Site.php:314
msgid "My site is not a public server"
msgstr "Mi sitio no es un servidor público"
-#: ../../Zotlabs/Module/Admin/Site.php:329
+#: ../../Zotlabs/Module/Admin/Site.php:315
msgid "My site has paid access only"
msgstr "Mi sitio es un servicio de pago"
-#: ../../Zotlabs/Module/Admin/Site.php:330
+#: ../../Zotlabs/Module/Admin/Site.php:316
msgid "My site has free access only"
msgstr "Mi sitio es un servicio gratuito"
-#: ../../Zotlabs/Module/Admin/Site.php:331
+#: ../../Zotlabs/Module/Admin/Site.php:317
msgid "My site offers free accounts with optional paid upgrades"
msgstr "Mi sitio ofrece cuentas gratuitas con opciones extra de pago"
-#: ../../Zotlabs/Module/Admin/Site.php:349
+#: ../../Zotlabs/Module/Admin/Site.php:335
msgid "Default permission role for new accounts"
msgstr "Permisos de rol por defecto para las nuevas cuentas"
-#: ../../Zotlabs/Module/Admin/Site.php:349
+#: ../../Zotlabs/Module/Admin/Site.php:335
msgid ""
"This role will be used for the first channel created after registration."
msgstr "Este rol se utilizará para el primer canal creado después del registro."
-#: ../../Zotlabs/Module/Admin/Site.php:356 ../../Zotlabs/Module/Invite.php:410
+#: ../../Zotlabs/Module/Admin/Site.php:342 ../../Zotlabs/Module/Invite.php:410
msgid "Minute(s)"
msgstr "Minuto(s)"
-#: ../../Zotlabs/Module/Admin/Site.php:357 ../../Zotlabs/Module/Invite.php:411
+#: ../../Zotlabs/Module/Admin/Site.php:343 ../../Zotlabs/Module/Invite.php:411
msgid "Hour(s)"
msgstr "Hora(s)"
-#: ../../Zotlabs/Module/Admin/Site.php:358 ../../Zotlabs/Module/Invite.php:412
+#: ../../Zotlabs/Module/Admin/Site.php:344 ../../Zotlabs/Module/Invite.php:412
msgid "Day(s)"
msgstr "Día(s)"
-#: ../../Zotlabs/Module/Admin/Site.php:359
+#: ../../Zotlabs/Module/Admin/Site.php:345
msgid "Week(s)"
msgstr "Semana(s)"
-#: ../../Zotlabs/Module/Admin/Site.php:360
+#: ../../Zotlabs/Module/Admin/Site.php:346
msgid "Month(s)"
msgstr "Mes(Meses)"
-#: ../../Zotlabs/Module/Admin/Site.php:361
+#: ../../Zotlabs/Module/Admin/Site.php:347
msgid "Year(s)"
msgstr "Año(s)"
-#: ../../Zotlabs/Module/Admin/Site.php:369
+#: ../../Zotlabs/Module/Admin/Site.php:355
msgid "Register verification delay"
msgstr "Retraso en la verificación del registro"
-#: ../../Zotlabs/Module/Admin/Site.php:372
+#: ../../Zotlabs/Module/Admin/Site.php:358
msgid "Time to wait before a registration can be verified"
msgstr "Tiempo de espera para verificar un registro "
-#: ../../Zotlabs/Module/Admin/Site.php:375
-#: ../../Zotlabs/Module/Admin/Site.php:397 ../../Zotlabs/Module/Invite.php:421
+#: ../../Zotlabs/Module/Admin/Site.php:361
+#: ../../Zotlabs/Module/Admin/Site.php:383 ../../Zotlabs/Module/Invite.php:421
msgid "duration up from now"
msgstr "duración a partir de ahora "
-#: ../../Zotlabs/Module/Admin/Site.php:391
+#: ../../Zotlabs/Module/Admin/Site.php:377
msgid "Register verification expiration time"
msgstr "Tiempo de caducidad de la verificación del registro "
-#: ../../Zotlabs/Module/Admin/Site.php:394
+#: ../../Zotlabs/Module/Admin/Site.php:380
msgid "Time before an unverified registration will expire"
msgstr "Tiempo antes de que caduque un registro no verificado "
-#: ../../Zotlabs/Module/Admin/Site.php:417
+#: ../../Zotlabs/Module/Admin/Site.php:403
msgid "File upload"
msgstr "Subir fichero"
-#: ../../Zotlabs/Module/Admin/Site.php:418
+#: ../../Zotlabs/Module/Admin/Site.php:404
msgid "Policies"
msgstr "Políticas"
-#: ../../Zotlabs/Module/Admin/Site.php:425
+#: ../../Zotlabs/Module/Admin/Site.php:411
msgid "Banner/Logo"
msgstr "Banner/Logo"
-#: ../../Zotlabs/Module/Admin/Site.php:425
+#: ../../Zotlabs/Module/Admin/Site.php:411
msgid "Unfiltered HTML/CSS/JS is allowed"
msgstr "Se permite HTML/CSS/JS sin filtrar"
-#: ../../Zotlabs/Module/Admin/Site.php:426
+#: ../../Zotlabs/Module/Admin/Site.php:412
msgid "Administrator Information"
msgstr "Información del Administrador"
-#: ../../Zotlabs/Module/Admin/Site.php:426
+#: ../../Zotlabs/Module/Admin/Site.php:412
msgid ""
"Contact information for site administrators. Displayed on siteinfo page. "
"BBCode can be used here"
msgstr "Información de contacto de los administradores del sitio. Visible en la página \"siteinfo\". Se puede usar BBCode"
-#: ../../Zotlabs/Module/Admin/Site.php:427
+#: ../../Zotlabs/Module/Admin/Site.php:413
#: ../../Zotlabs/Module/Siteinfo.php:24
msgid "Site Information"
msgstr "Información sobre el sitio"
-#: ../../Zotlabs/Module/Admin/Site.php:427
+#: ../../Zotlabs/Module/Admin/Site.php:413
msgid ""
"Publicly visible description of this site. Displayed on siteinfo page. "
"BBCode can be used here"
msgstr "Descripción pública de este sitio. Visible en la página \"siteinfo\". Se puede usar BBCode"
-#: ../../Zotlabs/Module/Admin/Site.php:429
+#: ../../Zotlabs/Module/Admin/Site.php:414
msgid "System theme"
msgstr "Tema gráfico del sistema"
-#: ../../Zotlabs/Module/Admin/Site.php:429
+#: ../../Zotlabs/Module/Admin/Site.php:414
msgid ""
"Default system theme - may be over-ridden by user profiles - <a href='#' "
"id='cnftheme'>change theme settings</a>"
msgstr "Tema del sistema por defecto - se puede cambiar por cada perfil de usuario - <a href='#' id='cnftheme'>modificar los ajustes del tema</a>"
-#: ../../Zotlabs/Module/Admin/Site.php:432
+#: ../../Zotlabs/Module/Admin/Site.php:417
msgid "Allow Feeds as Connections"
msgstr "Permitir contenidos RSS como conexiones"
-#: ../../Zotlabs/Module/Admin/Site.php:432
+#: ../../Zotlabs/Module/Admin/Site.php:417
msgid "(Heavy system resource usage)"
msgstr "(Uso intenso de los recursos del sistema)"
-#: ../../Zotlabs/Module/Admin/Site.php:433
+#: ../../Zotlabs/Module/Admin/Site.php:418
msgid "Maximum image size"
msgstr "Tamaño máximo de la imagen"
-#: ../../Zotlabs/Module/Admin/Site.php:433
+#: ../../Zotlabs/Module/Admin/Site.php:418
msgid ""
"Maximum size in bytes of uploaded images. Default is 0, which means no "
"limits."
msgstr "Tamaño máximo en bytes de la imagen subida. Por defecto, es 0, lo que significa que no hay límites."
-#: ../../Zotlabs/Module/Admin/Site.php:434
+#: ../../Zotlabs/Module/Admin/Site.php:419
msgid "Minimum age"
msgstr "Edad mínima"
-#: ../../Zotlabs/Module/Admin/Site.php:434
+#: ../../Zotlabs/Module/Admin/Site.php:419
msgid "Minimum age (in years) for who may register on this site."
msgstr "Edad mínima (en años) para poder registrarse en este sitio."
-#: ../../Zotlabs/Module/Admin/Site.php:435
+#: ../../Zotlabs/Module/Admin/Site.php:420
msgid "Which best describes the types of account offered by this hub?"
msgstr "¿Cómo describiría el tipo de servicio ofrecido por este servidor?"
-#: ../../Zotlabs/Module/Admin/Site.php:435
+#: ../../Zotlabs/Module/Admin/Site.php:420
msgid "This is displayed on the public server site list."
msgstr "Esto se muestra en la lista de sitios de servidores públicos."
-#: ../../Zotlabs/Module/Admin/Site.php:441
+#: ../../Zotlabs/Module/Admin/Site.php:426
msgid "Register text"
msgstr "Texto del registro"
-#: ../../Zotlabs/Module/Admin/Site.php:443
+#: ../../Zotlabs/Module/Admin/Site.php:428
msgid "This text will be displayed prominently at the registration page"
msgstr "Este texto se mostrará de forma destacada en la página de registro "
-#: ../../Zotlabs/Module/Admin/Site.php:447
+#: ../../Zotlabs/Module/Admin/Site.php:432
msgid "Does this site allow new member registration?"
msgstr "¿Debe este sitio permitir el registro de nuevos miembros?"
-#: ../../Zotlabs/Module/Admin/Site.php:454
+#: ../../Zotlabs/Module/Admin/Site.php:439
msgid "Configure the registration open days/hours"
msgstr "Configurar los días/horas de apertura del registro"
-#: ../../Zotlabs/Module/Admin/Site.php:456
+#: ../../Zotlabs/Module/Admin/Site.php:441
msgid "Empty or '-:-' value will keep registration open 24/7 (default)"
msgstr "El valor vacío o \"-:-\" mantendrá el registro abierto 24/7 (por defecto)"
-#: ../../Zotlabs/Module/Admin/Site.php:457
+#: ../../Zotlabs/Module/Admin/Site.php:442
msgid ""
"Weekdays and hours must be separated by colon ':', From-To ranges with a "
"dash `-` example: 1:800-1200"
msgstr "Los días de la semana y las horas deben separarse con dos puntos ':', los rangos Desde-Hasta con un guión `-` ejemplo: 1:800-1200"
-#: ../../Zotlabs/Module/Admin/Site.php:458
+#: ../../Zotlabs/Module/Admin/Site.php:443
msgid ""
"Weekday:Hour pairs must be separated by space ' ' example: 1:900-1700 "
"2:900-1700"
msgstr "Los pares día de la semana:hora deben estar separados por un espacio ' ' ejemplo: 1:900-1700 2:900-1700"
-#: ../../Zotlabs/Module/Admin/Site.php:459
+#: ../../Zotlabs/Module/Admin/Site.php:444
msgid ""
"From-To ranges must be separated by comma ',' example: 1:800-1200,1300-1700 "
"or 1-2,4-5:900-1700"
msgstr "Los rangos desde-hasta deben estar separados por comas ',' ejemplo: 1:800-1200,1300-1700 o 1-2,4-5:900-1700"
-#: ../../Zotlabs/Module/Admin/Site.php:460
+#: ../../Zotlabs/Module/Admin/Site.php:445
msgid "Advanced examples:"
msgstr "Ejemplos avanzados: "
-#: ../../Zotlabs/Module/Admin/Site.php:460
+#: ../../Zotlabs/Module/Admin/Site.php:445
#: ../../Zotlabs/Module/Settings/Channel.php:183
msgid "or"
msgstr "o"
-#: ../../Zotlabs/Module/Admin/Site.php:461
+#: ../../Zotlabs/Module/Admin/Site.php:446
msgid "Check your configuration"
msgstr "Compruebe su configuración"
-#: ../../Zotlabs/Module/Admin/Site.php:465
+#: ../../Zotlabs/Module/Admin/Site.php:450
msgid "Max account registrations per day"
msgstr "Máximo de registros de cuentas por día "
-#: ../../Zotlabs/Module/Admin/Site.php:467
+#: ../../Zotlabs/Module/Admin/Site.php:452
msgid "Unlimited if zero or no value - default 50"
msgstr "Ilimitado si es cero o sin valor - por defecto 50"
-#: ../../Zotlabs/Module/Admin/Site.php:471
+#: ../../Zotlabs/Module/Admin/Site.php:456
msgid "Max account registrations from same IP"
msgstr "Máximo de registros de cuentas desde la misma IP"
-#: ../../Zotlabs/Module/Admin/Site.php:473
+#: ../../Zotlabs/Module/Admin/Site.php:458
msgid "Unlimited if zero or no value - default 3"
msgstr "Ilimitado si es cero o sin valor - por defecto 3"
-#: ../../Zotlabs/Module/Admin/Site.php:479
+#: ../../Zotlabs/Module/Admin/Site.php:464
msgid "Auto channel create"
msgstr "Creación automática de canales"
-#: ../../Zotlabs/Module/Admin/Site.php:481
+#: ../../Zotlabs/Module/Admin/Site.php:466
msgid ""
"If disabled the channel will be created in a separate step during the "
"registration process"
msgstr "Si se desactiva, el canal se creará en un paso separado durante el proceso de registro"
-#: ../../Zotlabs/Module/Admin/Site.php:485
+#: ../../Zotlabs/Module/Admin/Site.php:470
msgid "Require invite code"
msgstr "Solicitar código de invitación"
-#: ../../Zotlabs/Module/Admin/Site.php:490
+#: ../../Zotlabs/Module/Admin/Site.php:475
msgid "Allow invite code"
msgstr "Permitir código de invitación"
-#: ../../Zotlabs/Module/Admin/Site.php:495
+#: ../../Zotlabs/Module/Admin/Site.php:480
msgid "Require email address"
msgstr "Solicitar dirección de correo electrónico"
-#: ../../Zotlabs/Module/Admin/Site.php:497
+#: ../../Zotlabs/Module/Admin/Site.php:482
msgid "The provided email address will be verified (recommended)"
msgstr "La dirección de correo electrónico proporcionada será verificada (recomendado)"
-#: ../../Zotlabs/Module/Admin/Site.php:501
+#: ../../Zotlabs/Module/Admin/Site.php:486
msgid "Abandon account after x days"
msgstr "Abandonar la cuenta después de x días"
-#: ../../Zotlabs/Module/Admin/Site.php:503
+#: ../../Zotlabs/Module/Admin/Site.php:488
msgid ""
"Will not waste system resources polling external sites for abandonded "
"accounts. Enter 0 for no time limit."
msgstr "Para evitar consumir recursos del sistema intentando poner al día las cuentas abandonadas. Introduzca 0 para no tener límite de tiempo."
-#: ../../Zotlabs/Module/Admin/Site.php:508
+#: ../../Zotlabs/Module/Admin/Site.php:493
msgid "Site homepage to show visitors (default: login box)"
msgstr "Página personal que se mostrará a los visitantes (por defecto: la página de identificación)"
-#: ../../Zotlabs/Module/Admin/Site.php:508
+#: ../../Zotlabs/Module/Admin/Site.php:493
msgid ""
"example: 'pubstream' to show public stream, 'page/sys/home' to show a system"
" webpage called 'home' or 'include:home.html' to include a file."
msgstr "ejemplo: 'pubstream' para mostrar el stream público, 'page/sys/home' para mostrar una página web del sistema llamada 'home' o 'include:home.html' para incluir un archivo."
-#: ../../Zotlabs/Module/Admin/Site.php:509
+#: ../../Zotlabs/Module/Admin/Site.php:494
msgid "Preserve site homepage URL"
msgstr "Preservar la dirección de la página personal"
-#: ../../Zotlabs/Module/Admin/Site.php:509
+#: ../../Zotlabs/Module/Admin/Site.php:494
msgid ""
"Present the site homepage in a frame at the original location instead of "
"redirecting"
msgstr "Presenta la página personal del sitio en un marco en la ubicación original, en vez de redirigirla."
-#: ../../Zotlabs/Module/Admin/Site.php:510
+#: ../../Zotlabs/Module/Admin/Site.php:495
msgid "Allowed friend domains"
msgstr "Dominios amigos permitidos"
-#: ../../Zotlabs/Module/Admin/Site.php:510
+#: ../../Zotlabs/Module/Admin/Site.php:495
msgid ""
"Comma separated list of domains which are allowed to establish friendships "
"with this site. Wildcards are accepted. Empty to allow any domains"
msgstr "Lista separada por comas de dominios a los que está permitido establecer relaciones de amistad con este sitio. Se permiten comodines. Dejar en claro para aceptar cualquier dominio."
-#: ../../Zotlabs/Module/Admin/Site.php:511
+#: ../../Zotlabs/Module/Admin/Site.php:496
msgid "Force publish"
msgstr "Forzar la publicación"
-#: ../../Zotlabs/Module/Admin/Site.php:511
+#: ../../Zotlabs/Module/Admin/Site.php:496
msgid ""
"Check to force all profiles on this site to be listed in the site directory"
msgstr "Intentar forzar todos los perfiles para que sean listados en el directorio de este sitio."
-#: ../../Zotlabs/Module/Admin/Site.php:512
+#: ../../Zotlabs/Module/Admin/Site.php:497
msgid "Enable public stream"
msgstr "Habilitar el \"stream\" público"
-#: ../../Zotlabs/Module/Admin/Site.php:512
+#: ../../Zotlabs/Module/Admin/Site.php:497
msgid "Enable the public stream. Warning: this content is unmoderated"
msgstr "Habilitar el \"stream\" público. Advertencia: este contenido no está moderado"
-#: ../../Zotlabs/Module/Admin/Site.php:513
+#: ../../Zotlabs/Module/Admin/Site.php:498
msgid "Site only public stream"
msgstr "Solo contenido público en este sitio"
-#: ../../Zotlabs/Module/Admin/Site.php:513
+#: ../../Zotlabs/Module/Admin/Site.php:498
msgid "Restrict the public stream to content originating at this site"
msgstr "Restringir el \"stream\" público a los contenidos originados en este sitio"
-#: ../../Zotlabs/Module/Admin/Site.php:514
+#: ../../Zotlabs/Module/Admin/Site.php:499
msgid "Allow anybody on the internet to access the public streams"
msgstr "Permitir que cualquiera en Internet pueda acceder a los \"streams\" públicos"
-#: ../../Zotlabs/Module/Admin/Site.php:514
+#: ../../Zotlabs/Module/Admin/Site.php:499
msgid "Disable to require authentication before viewing"
msgstr "Desactivar para requerir autenticación antes de ver"
-#: ../../Zotlabs/Module/Admin/Site.php:515
+#: ../../Zotlabs/Module/Admin/Site.php:500
msgid "Only import Public stream posts with this text"
msgstr "Importar solo entradas del stream púlbico con este texto "
-#: ../../Zotlabs/Module/Admin/Site.php:516
+#: ../../Zotlabs/Module/Admin/Site.php:501
msgid "Do not import Public stream posts with this text"
msgstr "No importar entradas del stream público con este texto "
-#: ../../Zotlabs/Module/Admin/Site.php:519
+#: ../../Zotlabs/Module/Admin/Site.php:504
msgid "Login on Homepage"
msgstr "Iniciar sesión en la página personal"
-#: ../../Zotlabs/Module/Admin/Site.php:519
+#: ../../Zotlabs/Module/Admin/Site.php:504
msgid ""
"Present a login box to visitors on the home page if no other content has "
"been configured."
msgstr "Presentar a los visitantes una casilla de identificación en la página de inicio, si no se ha configurado otro tipo de contenido."
-#: ../../Zotlabs/Module/Admin/Site.php:520
+#: ../../Zotlabs/Module/Admin/Site.php:505
msgid "Enable context help"
msgstr "Habilitar la ayuda contextual"
-#: ../../Zotlabs/Module/Admin/Site.php:520
+#: ../../Zotlabs/Module/Admin/Site.php:505
msgid ""
"Display contextual help for the current page when the help button is "
"pressed."
msgstr "Ver la ayuda contextual para la página actual cuando se pulse el botón de Ayuda."
-#: ../../Zotlabs/Module/Admin/Site.php:522
+#: ../../Zotlabs/Module/Admin/Site.php:507
msgid "Reply-to email address for system generated email."
msgstr "Dirección de respuesta para el correo electrónico generado por el sistema."
-#: ../../Zotlabs/Module/Admin/Site.php:523
+#: ../../Zotlabs/Module/Admin/Site.php:508
msgid "Sender (From) email address for system generated email."
msgstr "Dirección del remitente (From) para el correo electrónico generado por el sistema."
-#: ../../Zotlabs/Module/Admin/Site.php:524
+#: ../../Zotlabs/Module/Admin/Site.php:509
msgid "Name of email sender for system generated email."
msgstr "Nombre del remitente del correo electrónico generado por el sistema."
-#: ../../Zotlabs/Module/Admin/Site.php:526
+#: ../../Zotlabs/Module/Admin/Site.php:511
msgid "Directory Server URL"
msgstr "URL del servidor de directorio"
-#: ../../Zotlabs/Module/Admin/Site.php:526
+#: ../../Zotlabs/Module/Admin/Site.php:511
msgid "Default directory server"
msgstr "Servidor de directorio predeterminado"
-#: ../../Zotlabs/Module/Admin/Site.php:528
+#: ../../Zotlabs/Module/Admin/Site.php:513
msgid "Enable SSE Notifications"
msgstr "Habilitar notificaciones SSE"
-#: ../../Zotlabs/Module/Admin/Site.php:528
+#: ../../Zotlabs/Module/Admin/Site.php:513
msgid ""
"If disabled, traditional polling will be used. Warning: this setting might "
"not be suited for shared hosting"
msgstr "Si está desactivado, se usará el sistema de votación tradicional. Advertencia: esta configuración podría no ser adecuada para el alojamiento compartido"
-#: ../../Zotlabs/Module/Admin/Site.php:530
+#: ../../Zotlabs/Module/Admin/Site.php:515
msgid "Proxy user"
msgstr "Usuario del proxy"
-#: ../../Zotlabs/Module/Admin/Site.php:531
+#: ../../Zotlabs/Module/Admin/Site.php:516
msgid "Proxy URL"
msgstr "Dirección del proxy"
-#: ../../Zotlabs/Module/Admin/Site.php:532
+#: ../../Zotlabs/Module/Admin/Site.php:517
msgid "Network timeout"
msgstr "Tiempo de espera de la red"
-#: ../../Zotlabs/Module/Admin/Site.php:532
+#: ../../Zotlabs/Module/Admin/Site.php:517
msgid "Value is in seconds. Set to 0 for unlimited (not recommended)."
msgstr "Valor en segundos. Poner a 0 para que no haya tiempo límite (no recomendado)"
-#: ../../Zotlabs/Module/Admin/Site.php:533
+#: ../../Zotlabs/Module/Admin/Site.php:518
msgid "Delivery interval"
msgstr "Intervalo de entrega"
-#: ../../Zotlabs/Module/Admin/Site.php:533
+#: ../../Zotlabs/Module/Admin/Site.php:518
msgid ""
"Delay background delivery processes by this many seconds to reduce system "
"load. Recommend: 4-5 for shared hosts, 2-3 for virtual private servers. 0-1 "
"for large dedicated servers."
msgstr "Retrasar los procesos de transmisión en segundo plano por esta cantidad de segundos para reducir la carga del sistema. Recomendado: 4-5 para sitios compartidos, 2-3 para servidores virtuales privados, 0-1 para grandes servidores dedicados."
-#: ../../Zotlabs/Module/Admin/Site.php:534
+#: ../../Zotlabs/Module/Admin/Site.php:519
msgid "Deliveries per process"
msgstr "Intentos de envío por proceso"
-#: ../../Zotlabs/Module/Admin/Site.php:534
+#: ../../Zotlabs/Module/Admin/Site.php:519
msgid ""
"Number of deliveries to attempt in a single operating system process. Adjust"
" if necessary to tune system performance. Recommend: 1-5."
msgstr "Numero de envíos a intentar en un único proceso del sistema operativo. Ajustar si es necesario mejorar el rendimiento. Se recomienda: 1-5."
-#: ../../Zotlabs/Module/Admin/Site.php:536
+#: ../../Zotlabs/Module/Admin/Site.php:521
msgid "Poll interval"
msgstr "Intervalo máximo de tiempo entre dos mensajes sucesivos"
-#: ../../Zotlabs/Module/Admin/Site.php:536
+#: ../../Zotlabs/Module/Admin/Site.php:521
msgid ""
"Delay background polling processes by this many seconds to reduce system "
"load. If 0, use delivery interval."
msgstr "Retrasar el intervalo de envío en segundo plano, en esta cantidad de segundos, para reducir la carga del sistema. Si es 0, usar el intervalo de entrega."
-#: ../../Zotlabs/Module/Admin/Site.php:537
+#: ../../Zotlabs/Module/Admin/Site.php:522
msgid "Path to ImageMagick convert program"
msgstr "Ruta al programa de conversión de ImageMagick"
-#: ../../Zotlabs/Module/Admin/Site.php:537
+#: ../../Zotlabs/Module/Admin/Site.php:522
msgid ""
"If set, use this program to generate photo thumbnails for huge images ( > "
"4000 pixels in either dimension), otherwise memory exhaustion may occur. "
"Example: /usr/bin/convert"
msgstr "Si está configurado, utilice este programa para generar miniaturas de fotos para imágenes de gran tamaño ( > 4000 píxeles en cualquiera de las dos dimensiones), de lo contrario se puede agotar la memoria. Ejemplo: /usr/bin/convert"
-#: ../../Zotlabs/Module/Admin/Site.php:538
+#: ../../Zotlabs/Module/Admin/Site.php:523
msgid "Maximum Load Average"
msgstr "Carga media máxima"
-#: ../../Zotlabs/Module/Admin/Site.php:538
+#: ../../Zotlabs/Module/Admin/Site.php:523
msgid ""
"Maximum system load before delivery and poll processes are deferred - "
"default 50."
msgstr "Carga máxima del sistema antes de que los procesos de entrega y envío se hayan retardado - por defecto, 50."
-#: ../../Zotlabs/Module/Admin/Site.php:539
+#: ../../Zotlabs/Module/Admin/Site.php:524
msgid "Expiration period in days for imported (grid/network) content"
msgstr "Caducidad del contenido importado de otros sitios (en días)"
-#: ../../Zotlabs/Module/Admin/Site.php:539
+#: ../../Zotlabs/Module/Admin/Site.php:524
msgid "0 for no expiration of imported content"
msgstr "0 para que no caduque el contenido importado"
-#: ../../Zotlabs/Module/Admin/Site.php:540
+#: ../../Zotlabs/Module/Admin/Site.php:525
msgid ""
"Do not expire any posts which have comments less than this many days ago"
msgstr "No caduque ningún mensaje que tenga menos comentarios que este hace muchos días"
-#: ../../Zotlabs/Module/Admin/Site.php:541
+#: ../../Zotlabs/Module/Admin/Site.php:526
msgid ""
"Public servers: Optional landing (marketing) webpage for new registrants"
msgstr "Servidores públicos: Página web de acogida (marketing) opcional para nuevos registros"
-#: ../../Zotlabs/Module/Admin/Site.php:541
+#: ../../Zotlabs/Module/Admin/Site.php:526
#, php-format
msgid "Create this page first. Default is %s/register"
msgstr "Crear esta página primero. Por defecto es %s/register"
-#: ../../Zotlabs/Module/Admin/Site.php:542
+#: ../../Zotlabs/Module/Admin/Site.php:527
msgid "Page to display after creating a new channel"
msgstr "Página a mostrar después de la creación de un nuevo canal"
-#: ../../Zotlabs/Module/Admin/Site.php:542
+#: ../../Zotlabs/Module/Admin/Site.php:527
msgid "Default: profiles"
msgstr "Perfiles predeterminados"
-#: ../../Zotlabs/Module/Admin/Site.php:543
+#: ../../Zotlabs/Module/Admin/Site.php:528
msgid "Optional: site location"
msgstr "Opcional: ubicación del sitio"
-#: ../../Zotlabs/Module/Admin/Site.php:543
+#: ../../Zotlabs/Module/Admin/Site.php:528
msgid "Region or country"
msgstr "Región o país"
-#: ../../Zotlabs/Module/Admin/Site.php:628
-#: ../../Zotlabs/Module/Admin/Site.php:629
+#: ../../Zotlabs/Module/Admin/Site.php:613
+#: ../../Zotlabs/Module/Admin/Site.php:614
msgid "Invalid 24h time value (hhmm/hmm)"
msgstr "Valor de tiempo de 24h no válido (hhmm/hmm)"
@@ -12410,75 +11953,55 @@ msgstr "Reenvío del email de verificación"
msgid "Unable to resend email verification message."
msgstr "No se puede reenviar el mensaje de verificación por correo electrónico."
-#: ../../Zotlabs/Module/Dreport.php:38
+#: ../../Zotlabs/Module/Dreport.php:37
msgid "Invalid message"
msgstr "Mensaje no válido"
-#: ../../Zotlabs/Module/Dreport.php:68
+#: ../../Zotlabs/Module/Dreport.php:67
msgid "no results"
msgstr "sin resultados"
-#: ../../Zotlabs/Module/Dreport.php:82
+#: ../../Zotlabs/Module/Dreport.php:81
msgid "channel sync processed"
msgstr "se ha realizado la sincronización del canal"
-#: ../../Zotlabs/Module/Dreport.php:86
+#: ../../Zotlabs/Module/Dreport.php:85
msgid "queued"
msgstr "encolado"
-#: ../../Zotlabs/Module/Dreport.php:90
+#: ../../Zotlabs/Module/Dreport.php:89
msgid "posted"
msgstr "enviado"
-#: ../../Zotlabs/Module/Dreport.php:94
+#: ../../Zotlabs/Module/Dreport.php:93
msgid "accepted for delivery"
msgstr "aceptado para el envío"
-#: ../../Zotlabs/Module/Dreport.php:98
+#: ../../Zotlabs/Module/Dreport.php:97
msgid "updated"
msgstr "actualizado"
-#: ../../Zotlabs/Module/Dreport.php:102
+#: ../../Zotlabs/Module/Dreport.php:101
msgid "update ignored"
msgstr "actualización ignorada"
-#: ../../Zotlabs/Module/Dreport.php:105
+#: ../../Zotlabs/Module/Dreport.php:104
msgid "permission denied"
msgstr "permiso denegado"
-#: ../../Zotlabs/Module/Dreport.php:109
+#: ../../Zotlabs/Module/Dreport.php:108
msgid "recipient not found"
msgstr "destinatario no encontrado"
-#: ../../Zotlabs/Module/Dreport.php:129
+#: ../../Zotlabs/Module/Dreport.php:128
#, php-format
msgid "Delivery report for %1$s"
msgstr "Informe de entrega para %1$s"
-#: ../../Zotlabs/Module/Dreport.php:134
+#: ../../Zotlabs/Module/Dreport.php:133
msgid "Redeliver"
msgstr "Volver a enviar"
-#: ../../Zotlabs/Module/Poke.php:182
-msgid "Poke somebody"
-msgstr "Dar un toque a alguien"
-
-#: ../../Zotlabs/Module/Poke.php:186
-msgid "Poke or ping somebody"
-msgstr "Dar un toque o hacer ping a alguien"
-
-#: ../../Zotlabs/Module/Poke.php:193
-msgid "Recipient"
-msgstr "Destinatario"
-
-#: ../../Zotlabs/Module/Poke.php:194
-msgid "Choose action"
-msgstr "Elegir una acción"
-
-#: ../../Zotlabs/Module/Poke.php:197 ../../Zotlabs/Module/Poke.php:198
-msgid "Make this post private"
-msgstr "Convertir en privado este envío"
-
#: ../../Zotlabs/Module/Chatsvc.php:131
msgid "Away"
msgstr "Ausente"
@@ -12487,12 +12010,12 @@ msgstr "Ausente"
msgid "Online"
msgstr "Conectado/a"
-#: ../../Zotlabs/Module/Subthread.php:128
+#: ../../Zotlabs/Module/Subthread.php:125
#, php-format
msgid "%1$s is following %2$s's %3$s"
msgstr "%1$s está siguiendo %3$s de %2$s"
-#: ../../Zotlabs/Module/Subthread.php:130
+#: ../../Zotlabs/Module/Subthread.php:127
#, php-format
msgid "%1$s stopped following %2$s's %3$s"
msgstr "%1$s ha dejado de seguir %3$s de %2$s"
@@ -12605,7 +12128,7 @@ msgstr "Registros pendientes"
msgid "Registered channels"
msgstr "Canales registrados"
-#: ../../Zotlabs/Module/Admin.php:147
+#: ../../Zotlabs/Module/Admin.php:147 ../../Zotlabs/Module/Siteinfo.php:41
msgid "Active addons"
msgstr "Addons acivos"
@@ -12947,6 +12470,10 @@ msgstr "Página principal del proyecto"
msgid "Developer homepage"
msgstr "Página principal del desarrollador"
+#: ../../Zotlabs/Module/Siteinfo.php:42
+msgid "Blocked sites"
+msgstr "Sitios bloqueados"
+
#: ../../Zotlabs/Module/Attach.php:68
msgid "Item not available."
msgstr "Elemento no disponible"
@@ -13020,57 +12547,46 @@ msgid ""
"href=\"%1$s\">%2$s</a> on any site containing your channel."
msgstr "Esta exportación puede ser importada o restaurada visitando <a href=\"%1$s\">%2$s</a> cualquier sitio que contenga su canal."
-#: ../../Zotlabs/Module/Like.php:112
+#: ../../Zotlabs/Module/Like.php:111
msgid "Like/Dislike"
msgstr "Me gusta/No me gusta"
-#: ../../Zotlabs/Module/Like.php:118
+#: ../../Zotlabs/Module/Like.php:117
msgid "This action is restricted to members."
msgstr "Esta acción está restringida solo para miembros."
-#: ../../Zotlabs/Module/Like.php:119
+#: ../../Zotlabs/Module/Like.php:118
msgid ""
"Please <a href=\"rmagic\">login with your $Projectname ID</a> or <a "
"href=\"register\">register as a new $Projectname member</a> to continue."
msgstr "Por favor, <a href=\"rmagic\">identifíquese con su $Projectname ID</a> o <a href=\"register\">rregístrese como un nuevo $Projectname member</a> para continuar."
-#: ../../Zotlabs/Module/Like.php:172 ../../Zotlabs/Module/Like.php:198
-#: ../../Zotlabs/Module/Like.php:236
+#: ../../Zotlabs/Module/Like.php:171 ../../Zotlabs/Module/Like.php:197
+#: ../../Zotlabs/Module/Like.php:230
msgid "Invalid request."
msgstr "Solicitud incorrecta."
-#: ../../Zotlabs/Module/Like.php:213
+#: ../../Zotlabs/Module/Like.php:212
msgid "thing"
msgstr "elemento"
-#: ../../Zotlabs/Module/Like.php:259
+#: ../../Zotlabs/Module/Like.php:253
msgid "Channel unavailable."
msgstr "Canal no disponible."
-#: ../../Zotlabs/Module/Like.php:295
+#: ../../Zotlabs/Module/Like.php:289
msgid "Previous action reversed."
msgstr "Acción anterior revocada."
-#: ../../Zotlabs/Module/Like.php:489
-#, php-format
-msgid "%1$s agrees with %2$s's %3$s"
-msgstr "%3$s de %2$s: %1$s está de acuerdo"
-
-#: ../../Zotlabs/Module/Like.php:491
-#, php-format
-msgid "%1$s doesn't agree with %2$s's %3$s"
-msgstr "%3$s de %2$s: %1$s no está de acuerdo"
-
-#: ../../Zotlabs/Module/Like.php:493
-#, php-format
-msgid "%1$s abstains from a decision on %2$s's %3$s"
-msgstr "%3$s de %2$s: %1$s se abstiene"
+#: ../../Zotlabs/Module/Like.php:453
+msgid "profile"
+msgstr "perfil"
-#: ../../Zotlabs/Module/Like.php:617
+#: ../../Zotlabs/Module/Like.php:610
msgid "Action completed."
msgstr "Acción completada."
-#: ../../Zotlabs/Module/Like.php:618
+#: ../../Zotlabs/Module/Like.php:611
msgid "Thank you."
msgstr "Gracias."
@@ -13394,6 +12910,10 @@ msgstr "Ejemplos: @eva, @Carmen_Osuna, @jaime@ejemplo.com"
msgid "Flag as adult in album view"
msgstr "Marcar como \"solo para adultos\" en el álbum"
+#: ../../Zotlabs/Module/Photos.php:1125 ../../Zotlabs/Module/Photos.php:1137
+msgid "View all"
+msgstr "Ver todo"
+
#: ../../Zotlabs/Module/Photos.php:1238
msgid "Photo Tools"
msgstr "Gestión de las fotos"
@@ -13406,21 +12926,31 @@ msgstr "En esta foto:"
msgid "Map"
msgstr "Mapa"
+#: ../../Zotlabs/Module/Photos.php:1260
+msgctxt "noun"
+msgid "Likes"
+msgstr "Me gusta"
+
+#: ../../Zotlabs/Module/Photos.php:1261
+msgctxt "noun"
+msgid "Dislikes"
+msgstr "No me gusta"
+
#: ../../Zotlabs/Module/Ochannel.php:32 ../../Zotlabs/Module/Chat.php:29
msgid "You must be logged in to see this page."
msgstr "Debe haber iniciado sesión para poder ver esta página."
-#: ../../Zotlabs/Module/Hcard.php:37 ../../Zotlabs/Module/Channel.php:141
+#: ../../Zotlabs/Module/Hcard.php:37 ../../Zotlabs/Module/Channel.php:149
#: ../../Zotlabs/Module/Profile.php:62
msgid "Posts and comments"
msgstr "Publicaciones y comentarios"
-#: ../../Zotlabs/Module/Hcard.php:44 ../../Zotlabs/Module/Channel.php:148
+#: ../../Zotlabs/Module/Hcard.php:44 ../../Zotlabs/Module/Channel.php:156
#: ../../Zotlabs/Module/Profile.php:69
msgid "Only posts"
msgstr "Solo publicaciones"
-#: ../../Zotlabs/Module/Channel.php:219
+#: ../../Zotlabs/Module/Channel.php:230
msgid "Insufficient permissions. Request redirected to profile page."
msgstr "Permisos insuficientes. Petición redirigida a la página del perfil."
@@ -13508,260 +13038,260 @@ msgstr "Fuente eliminada"
msgid "Unable to remove source."
msgstr "No se puede eliminar la fuente."
-#: ../../Zotlabs/Module/Profiles.php:26 ../../Zotlabs/Module/Profiles.php:214
-#: ../../Zotlabs/Module/Profiles.php:642
+#: ../../Zotlabs/Module/Profiles.php:22 ../../Zotlabs/Module/Profiles.php:210
+#: ../../Zotlabs/Module/Profiles.php:638
msgid "Profile not found."
msgstr "Perfil no encontrado."
-#: ../../Zotlabs/Module/Profiles.php:46
+#: ../../Zotlabs/Module/Profiles.php:42
msgid "Profile deleted."
msgstr "Perfil eliminado."
-#: ../../Zotlabs/Module/Profiles.php:70 ../../Zotlabs/Module/Profiles.php:107
+#: ../../Zotlabs/Module/Profiles.php:66 ../../Zotlabs/Module/Profiles.php:103
msgid "Profile-"
msgstr "Perfil-"
-#: ../../Zotlabs/Module/Profiles.php:92 ../../Zotlabs/Module/Profiles.php:129
+#: ../../Zotlabs/Module/Profiles.php:88 ../../Zotlabs/Module/Profiles.php:125
msgid "New profile created."
msgstr "El nuevo perfil ha sido creado."
-#: ../../Zotlabs/Module/Profiles.php:113
+#: ../../Zotlabs/Module/Profiles.php:109
msgid "Profile unavailable to clone."
msgstr "Perfil no disponible para clonar."
-#: ../../Zotlabs/Module/Profiles.php:148
+#: ../../Zotlabs/Module/Profiles.php:144
msgid "Profile unavailable to export."
msgstr "Perfil no disponible para exportar."
-#: ../../Zotlabs/Module/Profiles.php:224
+#: ../../Zotlabs/Module/Profiles.php:220
msgid "Profile Name is required."
msgstr "Se necesita el nombre del perfil."
-#: ../../Zotlabs/Module/Profiles.php:429
+#: ../../Zotlabs/Module/Profiles.php:425
msgid "Marital Status"
msgstr "Estado civil"
-#: ../../Zotlabs/Module/Profiles.php:433
+#: ../../Zotlabs/Module/Profiles.php:429
msgid "Romantic Partner"
msgstr "Pareja sentimental"
-#: ../../Zotlabs/Module/Profiles.php:437 ../../Zotlabs/Module/Profiles.php:788
+#: ../../Zotlabs/Module/Profiles.php:433 ../../Zotlabs/Module/Profiles.php:784
msgid "Likes"
msgstr "Me gusta"
-#: ../../Zotlabs/Module/Profiles.php:441 ../../Zotlabs/Module/Profiles.php:789
+#: ../../Zotlabs/Module/Profiles.php:437 ../../Zotlabs/Module/Profiles.php:785
msgid "Dislikes"
msgstr "No me gusta"
-#: ../../Zotlabs/Module/Profiles.php:445 ../../Zotlabs/Module/Profiles.php:796
+#: ../../Zotlabs/Module/Profiles.php:441 ../../Zotlabs/Module/Profiles.php:792
msgid "Work/Employment"
msgstr "Trabajo:"
-#: ../../Zotlabs/Module/Profiles.php:448
+#: ../../Zotlabs/Module/Profiles.php:444
msgid "Religion"
msgstr "Religión"
-#: ../../Zotlabs/Module/Profiles.php:452
+#: ../../Zotlabs/Module/Profiles.php:448
msgid "Political Views"
msgstr "Ideas políticas"
-#: ../../Zotlabs/Module/Profiles.php:460
+#: ../../Zotlabs/Module/Profiles.php:456
msgid "Sexual Preference"
msgstr "Preferencia sexual"
-#: ../../Zotlabs/Module/Profiles.php:464
+#: ../../Zotlabs/Module/Profiles.php:460
msgid "Homepage"
msgstr "Página personal"
-#: ../../Zotlabs/Module/Profiles.php:468
+#: ../../Zotlabs/Module/Profiles.php:464
msgid "Interests"
msgstr "Intereses"
-#: ../../Zotlabs/Module/Profiles.php:576
+#: ../../Zotlabs/Module/Profiles.php:572
msgid "Profile updated."
msgstr "Perfil actualizado."
-#: ../../Zotlabs/Module/Profiles.php:672
+#: ../../Zotlabs/Module/Profiles.php:668
msgid "Hide my connections from viewers of this profile"
msgstr "Ocultar mis conexiones a los espectadores de este perfil"
-#: ../../Zotlabs/Module/Profiles.php:685
+#: ../../Zotlabs/Module/Profiles.php:681
msgid "Publish my default profile in the network directory"
msgstr "Publicar mi perfil por defecto en el directorio de la red"
-#: ../../Zotlabs/Module/Profiles.php:693
+#: ../../Zotlabs/Module/Profiles.php:689
msgid "Suggest me as a potential contact to new members"
msgstr "Sugerirme como contacto potencial a los nuevos miembros"
-#: ../../Zotlabs/Module/Profiles.php:697
+#: ../../Zotlabs/Module/Profiles.php:693
msgid "Reveal my online status"
msgstr "Revelar mi estado en línea"
-#: ../../Zotlabs/Module/Profiles.php:738
+#: ../../Zotlabs/Module/Profiles.php:734
msgid "Edit Profile Details"
msgstr "Modificar los detalles de este perfil"
-#: ../../Zotlabs/Module/Profiles.php:740
+#: ../../Zotlabs/Module/Profiles.php:736
msgid "View this profile"
msgstr "Ver este perfil"
-#: ../../Zotlabs/Module/Profiles.php:742
+#: ../../Zotlabs/Module/Profiles.php:738
msgid "Profile Tools"
msgstr "Gestión del perfil"
-#: ../../Zotlabs/Module/Profiles.php:743
+#: ../../Zotlabs/Module/Profiles.php:739
msgid "Change cover photo"
msgstr "Cambiar la imagen de portada del perfil"
-#: ../../Zotlabs/Module/Profiles.php:745
+#: ../../Zotlabs/Module/Profiles.php:741
msgid "Create a new profile using these settings"
msgstr "Crear un nuevo perfil usando estos ajustes"
-#: ../../Zotlabs/Module/Profiles.php:746
+#: ../../Zotlabs/Module/Profiles.php:742
msgid "Clone this profile"
msgstr "Clonar este perfil"
-#: ../../Zotlabs/Module/Profiles.php:747
+#: ../../Zotlabs/Module/Profiles.php:743
msgid "Delete this profile"
msgstr "Eliminar este perfil"
-#: ../../Zotlabs/Module/Profiles.php:748
+#: ../../Zotlabs/Module/Profiles.php:744
msgid "Add profile things"
msgstr "Añadir cosas al perfil"
-#: ../../Zotlabs/Module/Profiles.php:749
+#: ../../Zotlabs/Module/Profiles.php:745
msgid "Basic"
msgstr "Básico"
-#: ../../Zotlabs/Module/Profiles.php:751
+#: ../../Zotlabs/Module/Profiles.php:747
msgid "Relationship"
msgstr "Relación"
-#: ../../Zotlabs/Module/Profiles.php:754
+#: ../../Zotlabs/Module/Profiles.php:750
msgid "Import profile from file"
msgstr "Importar perfil desde un fichero"
-#: ../../Zotlabs/Module/Profiles.php:755
+#: ../../Zotlabs/Module/Profiles.php:751
msgid "Export profile to file"
msgstr "Exportar perfil a un fichero"
-#: ../../Zotlabs/Module/Profiles.php:756
+#: ../../Zotlabs/Module/Profiles.php:752
msgid "Your gender"
msgstr "Género"
-#: ../../Zotlabs/Module/Profiles.php:757
+#: ../../Zotlabs/Module/Profiles.php:753
msgid "Marital status"
msgstr "Estado civil"
-#: ../../Zotlabs/Module/Profiles.php:758
+#: ../../Zotlabs/Module/Profiles.php:754
msgid "Sexual preference"
msgstr "Preferencia sexual"
-#: ../../Zotlabs/Module/Profiles.php:761
+#: ../../Zotlabs/Module/Profiles.php:757
msgid "Profile name"
msgstr "Nombre del perfil"
-#: ../../Zotlabs/Module/Profiles.php:763
+#: ../../Zotlabs/Module/Profiles.php:759
msgid "This is your default profile."
msgstr "Este es su perfil principal."
-#: ../../Zotlabs/Module/Profiles.php:765
+#: ../../Zotlabs/Module/Profiles.php:761
msgid "Your full name"
msgstr "Nombre completo"
-#: ../../Zotlabs/Module/Profiles.php:766
+#: ../../Zotlabs/Module/Profiles.php:762
msgid "Short title/description"
msgstr "Breve título y descripción"
-#: ../../Zotlabs/Module/Profiles.php:766
+#: ../../Zotlabs/Module/Profiles.php:762
msgid "Maximal 190 characters"
msgstr "Máximo de 190 caracteres"
-#: ../../Zotlabs/Module/Profiles.php:769
+#: ../../Zotlabs/Module/Profiles.php:765
msgid "Street address"
msgstr "Dirección"
-#: ../../Zotlabs/Module/Profiles.php:770
+#: ../../Zotlabs/Module/Profiles.php:766
msgid "Locality/City"
msgstr "Ciudad"
-#: ../../Zotlabs/Module/Profiles.php:771
+#: ../../Zotlabs/Module/Profiles.php:767
msgid "Region/State"
msgstr "Región o Estado"
-#: ../../Zotlabs/Module/Profiles.php:772
+#: ../../Zotlabs/Module/Profiles.php:768
msgid "Postal/Zip code"
msgstr "Código postal"
-#: ../../Zotlabs/Module/Profiles.php:778
+#: ../../Zotlabs/Module/Profiles.php:774
msgid "Who (if applicable)"
msgstr "Quién (si es pertinente)"
-#: ../../Zotlabs/Module/Profiles.php:778
+#: ../../Zotlabs/Module/Profiles.php:774
msgid "Examples: cathy123, Cathy Williams, cathy@example.com"
msgstr "Por ejemplo: ana123, María González, sara@ejemplo.com"
-#: ../../Zotlabs/Module/Profiles.php:779
+#: ../../Zotlabs/Module/Profiles.php:775
msgid "Since (date)"
msgstr "Desde (fecha)"
-#: ../../Zotlabs/Module/Profiles.php:782
+#: ../../Zotlabs/Module/Profiles.php:778
msgid "Tell us about yourself"
msgstr "Háblenos de usted"
-#: ../../Zotlabs/Module/Profiles.php:784
+#: ../../Zotlabs/Module/Profiles.php:780
msgid "Hometown"
msgstr "Lugar de nacimiento"
-#: ../../Zotlabs/Module/Profiles.php:785
+#: ../../Zotlabs/Module/Profiles.php:781
msgid "Political views"
msgstr "Ideas políticas"
-#: ../../Zotlabs/Module/Profiles.php:786
+#: ../../Zotlabs/Module/Profiles.php:782
msgid "Religious views"
msgstr "Creencias religiosas"
-#: ../../Zotlabs/Module/Profiles.php:787
+#: ../../Zotlabs/Module/Profiles.php:783
msgid "Keywords used in directory listings"
msgstr "Palabras clave utilizadas en los listados de directorios"
-#: ../../Zotlabs/Module/Profiles.php:787
+#: ../../Zotlabs/Module/Profiles.php:783
msgid "Example: fishing photography software"
msgstr "Por ejemplo: software de fotografía submarina"
-#: ../../Zotlabs/Module/Profiles.php:790
+#: ../../Zotlabs/Module/Profiles.php:786
msgid "Musical interests"
msgstr "Preferencias musicales"
-#: ../../Zotlabs/Module/Profiles.php:791
+#: ../../Zotlabs/Module/Profiles.php:787
msgid "Books, literature"
msgstr "Libros, literatura"
-#: ../../Zotlabs/Module/Profiles.php:792
+#: ../../Zotlabs/Module/Profiles.php:788
msgid "Television"
msgstr "Televisión"
-#: ../../Zotlabs/Module/Profiles.php:793
+#: ../../Zotlabs/Module/Profiles.php:789
msgid "Film/Dance/Culture/Entertainment"
msgstr "Cine, danza, cultura, entretenimiento"
-#: ../../Zotlabs/Module/Profiles.php:794
+#: ../../Zotlabs/Module/Profiles.php:790
msgid "Hobbies/Interests"
msgstr "Aficiones o intereses"
-#: ../../Zotlabs/Module/Profiles.php:795
+#: ../../Zotlabs/Module/Profiles.php:791
msgid "Love/Romance"
msgstr "Vida sentimental o amorosa"
-#: ../../Zotlabs/Module/Profiles.php:797
+#: ../../Zotlabs/Module/Profiles.php:793
msgid "School/Education"
msgstr "Estudios"
-#: ../../Zotlabs/Module/Profiles.php:798
+#: ../../Zotlabs/Module/Profiles.php:794
msgid "Contact information and social networks"
msgstr "Información de contacto y redes sociales"
-#: ../../Zotlabs/Module/Profiles.php:799
+#: ../../Zotlabs/Module/Profiles.php:795
msgid "My other channels"
msgstr "Mis otros canales"
@@ -14139,7 +13669,7 @@ msgid ""
msgstr "Podría tener que importar manualmente el fichero \"install/schema_xxx.sql\" usando un cliente de base de datos."
#: ../../Zotlabs/Module/Setup.php:207 ../../Zotlabs/Module/Setup.php:271
-#: ../../Zotlabs/Module/Setup.php:778
+#: ../../Zotlabs/Module/Setup.php:796
msgid "Please see the file \"install/INSTALL.txt\"."
msgstr "Por favor, lea el fichero \"install/INSTALL.txt\"."
@@ -14320,199 +13850,223 @@ msgstr "Si está en un servidor Windows, por favor, lea \"http://www.php.net/man
msgid "Generate encryption keys"
msgstr "Generar claves de cifrado"
-#: ../../Zotlabs/Module/Setup.php:510
+#: ../../Zotlabs/Module/Setup.php:497
+msgid "Error: the sodium encryption library is not installed."
+msgstr "Error: la biblioteca de encriptación sodium no está instalada."
+
+#: ../../Zotlabs/Module/Setup.php:499
+msgid "Generate ed25519 encryption keys"
+msgstr "Generar claves de cifrado ed25519"
+
+#: ../../Zotlabs/Module/Setup.php:504
+msgid "Error: one of \"bcmath\" or \"gmp\" (bigmath library) extensions are required."
+msgstr "Error: se requiere una de las extensiones \"bcmath\" o \"gmp\" (bigmath library)."
+
+#: ../../Zotlabs/Module/Setup.php:506
+msgid "Bigmath library (either bcmath or gmp)"
+msgstr "Biblioteca Bigmath (bcmath o gmp)"
+
+#: ../../Zotlabs/Module/Setup.php:523
msgid "libCurl PHP module"
msgstr "módulo libCurl PHP"
-#: ../../Zotlabs/Module/Setup.php:511
+#: ../../Zotlabs/Module/Setup.php:524
msgid "GD graphics PHP module"
msgstr "módulo PHP GD graphics"
-#: ../../Zotlabs/Module/Setup.php:512
+#: ../../Zotlabs/Module/Setup.php:525
msgid "OpenSSL PHP module"
msgstr "módulo PHP OpenSSL"
-#: ../../Zotlabs/Module/Setup.php:513
+#: ../../Zotlabs/Module/Setup.php:526
msgid "PDO database PHP module"
msgstr "Módulo PHP de la base de datos PDO "
-#: ../../Zotlabs/Module/Setup.php:514
+#: ../../Zotlabs/Module/Setup.php:527
msgid "mb_string PHP module"
msgstr "módulo PHP mb_string"
-#: ../../Zotlabs/Module/Setup.php:515
+#: ../../Zotlabs/Module/Setup.php:528
msgid "xml PHP module"
msgstr "módulo PHP xml"
-#: ../../Zotlabs/Module/Setup.php:516
+#: ../../Zotlabs/Module/Setup.php:529
msgid "zip PHP module"
msgstr "Módulo zip PHP"
-#: ../../Zotlabs/Module/Setup.php:520 ../../Zotlabs/Module/Setup.php:522
+#: ../../Zotlabs/Module/Setup.php:530
+msgid "intl PHP module"
+msgstr "módulo intl PHP"
+
+#: ../../Zotlabs/Module/Setup.php:534 ../../Zotlabs/Module/Setup.php:536
msgid "Apache mod_rewrite module"
msgstr "módulo Apache mod_rewrite "
-#: ../../Zotlabs/Module/Setup.php:520
+#: ../../Zotlabs/Module/Setup.php:534
msgid ""
"Error: Apache webserver mod-rewrite module is required but not installed."
msgstr "Error: se necesita el módulo del servidor web Apache mod-rewrite pero no está instalado."
-#: ../../Zotlabs/Module/Setup.php:526 ../../Zotlabs/Module/Setup.php:529
+#: ../../Zotlabs/Module/Setup.php:540 ../../Zotlabs/Module/Setup.php:543
msgid "exec"
msgstr "ejecutable"
-#: ../../Zotlabs/Module/Setup.php:526
+#: ../../Zotlabs/Module/Setup.php:540
msgid ""
"Error: exec is required but is either not installed or has been disabled in "
"php.ini"
msgstr "Error: se necesita un ejecutable pero o no se instaló o está deshabilitado en php.ini"
-#: ../../Zotlabs/Module/Setup.php:532 ../../Zotlabs/Module/Setup.php:535
+#: ../../Zotlabs/Module/Setup.php:546 ../../Zotlabs/Module/Setup.php:549
msgid "shell_exec"
msgstr "shell_exec"
-#: ../../Zotlabs/Module/Setup.php:532
+#: ../../Zotlabs/Module/Setup.php:546
msgid ""
"Error: shell_exec is required but is either not installed or has been "
"disabled in php.ini"
msgstr "Error: se necesita shell_exec pero o no se instaló o está deshabilitado en php.ini"
-#: ../../Zotlabs/Module/Setup.php:540
+#: ../../Zotlabs/Module/Setup.php:554
msgid "Error: libCURL PHP module required but not installed."
msgstr "Error: se necesita el módulo PHP libCURL pero no está instalado."
-#: ../../Zotlabs/Module/Setup.php:544
+#: ../../Zotlabs/Module/Setup.php:558
msgid ""
"Error: GD PHP module with JPEG support or ImageMagick graphics library "
"required but not installed."
msgstr "Error: Se requiere el módulo GD PHP con soporte para JPEG o la biblioteca de gráficos ImageMagick, pero no está instalado."
-#: ../../Zotlabs/Module/Setup.php:548
+#: ../../Zotlabs/Module/Setup.php:562
msgid "Error: openssl PHP module required but not installed."
msgstr "Error: el módulo PHP openssl es necesario, pero no está instalado."
-#: ../../Zotlabs/Module/Setup.php:554
+#: ../../Zotlabs/Module/Setup.php:568
msgid ""
"Error: PDO database PHP module missing a driver for either mysql or pgsql."
msgstr "Error: El módulo PHP de la base de datos PDO carece de un controlador para mysql o pgsql."
-#: ../../Zotlabs/Module/Setup.php:559
+#: ../../Zotlabs/Module/Setup.php:573
msgid "Error: PDO database PHP module required but not installed."
msgstr "Error: se necesita el módulo PHP de la base de datos PDO, pero no está instalado."
-#: ../../Zotlabs/Module/Setup.php:563
+#: ../../Zotlabs/Module/Setup.php:577
msgid "Error: mb_string PHP module required but not installed."
msgstr "Error: el módulo PHP mb_string es necesario, pero no está instalado."
-#: ../../Zotlabs/Module/Setup.php:567
+#: ../../Zotlabs/Module/Setup.php:581
msgid "Error: xml PHP module required for DAV but not installed."
msgstr "Error: el módulo PHP xml es necesario para DAV, pero no está instalado."
-#: ../../Zotlabs/Module/Setup.php:571
+#: ../../Zotlabs/Module/Setup.php:585
msgid "Error: zip PHP module required but not installed."
msgstr "Error: se requiere el módulo zip PHP pero no está instalado."
-#: ../../Zotlabs/Module/Setup.php:590 ../../Zotlabs/Module/Setup.php:599
+#: ../../Zotlabs/Module/Setup.php:589
+msgid "Error: intl PHP module required but not installed."
+msgstr "Error: el módulo intl PHP es necesario pero no está instalado."
+
+#: ../../Zotlabs/Module/Setup.php:608 ../../Zotlabs/Module/Setup.php:617
msgid ".htconfig.php is writable"
msgstr ".htconfig.php tiene permisos de escritura"
-#: ../../Zotlabs/Module/Setup.php:595
+#: ../../Zotlabs/Module/Setup.php:613
msgid ""
"The web installer needs to be able to create a file called \".htconfig.php\""
" in the top folder of your web server and it is unable to do so."
msgstr "El instalador web no ha podido crear un fichero llamado “.htconfig.php” en la carpeta base de su servidor."
-#: ../../Zotlabs/Module/Setup.php:596
+#: ../../Zotlabs/Module/Setup.php:614
msgid ""
"This is most often a permission setting, as the web server may not be able "
"to write files in your folder - even if you can."
msgstr "Esto está generalmente ligado a un problema de permisos, a causa del cual el servidor web tiene prohibido modificar ficheros en su carpeta - incluso si usted mismo tiene esos permisos."
-#: ../../Zotlabs/Module/Setup.php:597
+#: ../../Zotlabs/Module/Setup.php:615
msgid "Please see install/INSTALL.txt for additional information."
msgstr "Por favor, consulte install/INSTALL.txt para más información."
-#: ../../Zotlabs/Module/Setup.php:613
+#: ../../Zotlabs/Module/Setup.php:631
msgid ""
"This software uses the Smarty3 template engine to render its web views. "
"Smarty3 compiles templates to PHP to speed up rendering."
msgstr "Este software hace uso del motor de plantillas Smarty3 para diseñar sus plantillas gráficas. Smarty3 compila las plantillas a PHP para acelerar la renderización."
-#: ../../Zotlabs/Module/Setup.php:614
+#: ../../Zotlabs/Module/Setup.php:632
#, php-format
msgid ""
"In order to store these compiled templates, the web server needs to have "
"write access to the directory %s under the top level web folder."
msgstr "Para poder guardar las plantillas compiladas, el servidor web necesita permisos para acceder al directorio %s en la carpeta web principal."
-#: ../../Zotlabs/Module/Setup.php:615 ../../Zotlabs/Module/Setup.php:636
+#: ../../Zotlabs/Module/Setup.php:633 ../../Zotlabs/Module/Setup.php:654
msgid ""
"Please ensure that the user that your web server runs as (e.g. www-data) has"
" write access to this folder."
msgstr "Por favor, asegúrese de que el servidor web está siendo ejecutado por un usuario que tenga permisos de escritura sobre esta carpeta (por ejemplo, www-data)."
-#: ../../Zotlabs/Module/Setup.php:616
+#: ../../Zotlabs/Module/Setup.php:634
#, php-format
msgid ""
"Note: as a security measure, you should give the web server write access to "
"%s only--not the template files (.tpl) that it contains."
msgstr "Nota: como medida de seguridad, debe dar al servidor web permisos de escritura solo sobre %s - no sobre el fichero de plantilla (.tpl) que contiene."
-#: ../../Zotlabs/Module/Setup.php:619
+#: ../../Zotlabs/Module/Setup.php:637
#, php-format
msgid "%s is writable"
msgstr "%s tiene permisos de escritura"
-#: ../../Zotlabs/Module/Setup.php:635
+#: ../../Zotlabs/Module/Setup.php:653
msgid ""
"This software uses the store directory to save uploaded files. The web "
"server needs to have write access to the store directory under the top level"
" web folder"
msgstr "Este software utiliza el directorio de almacenamiento para guardar los ficheros subidos. El servidor web debe tener acceso de escritura a este directorio en la carpeta de nivel superior"
-#: ../../Zotlabs/Module/Setup.php:639
+#: ../../Zotlabs/Module/Setup.php:657
msgid "store is writable"
msgstr "\"store\" tiene permisos de escritura"
-#: ../../Zotlabs/Module/Setup.php:671
+#: ../../Zotlabs/Module/Setup.php:689
msgid ""
"SSL certificate cannot be validated. Fix certificate or disable https access"
" to this site."
msgstr "El certificado SSL no ha podido ser validado. Corrija este problema o desactive el acceso https a este sitio."
-#: ../../Zotlabs/Module/Setup.php:672
+#: ../../Zotlabs/Module/Setup.php:690
msgid ""
"If you have https access to your website or allow connections to TCP port "
"443 (the https: port), you MUST use a browser-valid certificate. You MUST "
"NOT use self-signed certificates!"
msgstr "Si su servidor soporta conexiones cifradas SSL o si permite conexiones al puerto TCP 443 (el puerto usado por el protocolo https), debe utilizar un certificado válido. No debe usar un certificado firmado por usted mismo."
-#: ../../Zotlabs/Module/Setup.php:673
+#: ../../Zotlabs/Module/Setup.php:691
msgid ""
"This restriction is incorporated because public posts from you may for "
"example contain references to images on your own hub."
msgstr "Se ha incorporado esta restricción para evitar que sus entradas públicas hagan referencia a imágenes en su propio servidor."
-#: ../../Zotlabs/Module/Setup.php:674
+#: ../../Zotlabs/Module/Setup.php:692
msgid ""
"If your certificate is not recognized, members of other sites (who may "
"themselves have valid certificates) will get a warning message on their own "
"site complaining about security issues."
msgstr "Si su certificado no ha sido reconocido, los miembros de otros sitios (con certificados válidos) recibirán mensajes de aviso en sus propios sitios web."
-#: ../../Zotlabs/Module/Setup.php:675
+#: ../../Zotlabs/Module/Setup.php:693
msgid ""
"This can cause usability issues elsewhere (not just on your own site) so we "
"must insist on this requirement."
msgstr "Por razones de compatibilidad (sobre el conjunto de la red, no solo sobre su propio sitio), debemos insistir en estos requisitos."
-#: ../../Zotlabs/Module/Setup.php:676
+#: ../../Zotlabs/Module/Setup.php:694
msgid ""
"Providers are available that issue free certificates which are browser-"
"valid."
msgstr "Existen varias Autoridades de Certificación que le pueden proporcionar certificados válidos."
-#: ../../Zotlabs/Module/Setup.php:677
+#: ../../Zotlabs/Module/Setup.php:695
msgid ""
"If you are confident that the certificate is valid and signed by a trusted "
"authority, check to see if you have failed to install an intermediate cert. "
@@ -14520,32 +14074,32 @@ msgid ""
"server communications."
msgstr "Si se tiene la certeza de que el certificado es válido y está firmado por una autoridad de confianza, comprobar para ver si hubo un error al instalar un certificado intermedio. Estos no son normalmente requeridos por los navegadores, pero son necesarios para las comunicaciones de servidor a servidor."
-#: ../../Zotlabs/Module/Setup.php:679
+#: ../../Zotlabs/Module/Setup.php:697
msgid "SSL certificate validation"
msgstr "validación del certificado SSL"
-#: ../../Zotlabs/Module/Setup.php:685
+#: ../../Zotlabs/Module/Setup.php:703
msgid ""
"Url rewrite in .htaccess is not working. Check your server "
"configuration.Test: "
msgstr "No se pueden reescribir las direcciones web en .htaccess. Compruebe la configuración de su servidor:"
-#: ../../Zotlabs/Module/Setup.php:688
+#: ../../Zotlabs/Module/Setup.php:706
msgid "Url rewrite is working"
msgstr "La reescritura de las direcciones funciona correctamente"
-#: ../../Zotlabs/Module/Setup.php:701
+#: ../../Zotlabs/Module/Setup.php:719
msgid ""
"The database configuration file \".htconfig.php\" could not be written. "
"Please use the enclosed text to create a configuration file in your web "
"server root."
msgstr "El fichero de configuración de la base de datos .htconfig.php no se ha podido modificar. Por favor, copie el texto generado en un fichero con ese nombre en el directorio raíz de su servidor."
-#: ../../Zotlabs/Module/Setup.php:776
+#: ../../Zotlabs/Module/Setup.php:794
msgid "<h1>What next?</h1>"
msgstr "<h1>¿Qué sigue?</h1>"
-#: ../../Zotlabs/Module/Setup.php:777
+#: ../../Zotlabs/Module/Setup.php:795
msgid ""
"IMPORTANT: You will need to [manually] setup a scheduled task for the "
"poller."
diff --git a/view/es-es/hstrings.php b/view/es-es/hstrings.php
index 5f449df83..d10e40ed0 100644
--- a/view/es-es/hstrings.php
+++ b/view/es-es/hstrings.php
@@ -1,9 +1,11 @@
<?php
-if(! function_exists("string_plural_select_es_es")) {
-function string_plural_select_es_es($n){
- return ($n != 1 ? 1 : 0);
-}}
+if(!function_exists("string_plural_select_es_es")) {
+ function string_plural_select_es_es($n) {
+ return ($n != 1 ? 1 : 0);
+ }
+}
+
App::$rtl = 0;
App::$strings["plural_function_code"] = "(n != 1 ? 1 : 0)";
App::$strings["Source channel not found."] = "No se ha encontrado el canal de origen.";
@@ -14,6 +16,12 @@ App::$strings["Theme settings"] = "Ajustes del tema";
App::$strings["Dark style"] = "Estilo oscuro";
App::$strings["Light style"] = "Estilo claro";
App::$strings["Common settings"] = "Ajustes comunes";
+App::$strings["Primary theme color"] = "Color del tema principal";
+App::$strings["Current color, leave empty for default"] = "Color actual, dejar vacío por defecto";
+App::$strings["Success theme color"] = "Éxito en el color del tema";
+App::$strings["Info theme color"] = "Información del color del tema";
+App::$strings["Warning theme color"] = "Advertencia sobre el color del tema";
+App::$strings["Danger theme color"] = "Peligro en el color del tema";
App::$strings["Default to dark mode"] = "Modo oscuro por defecto";
App::$strings["No"] = "No";
App::$strings["Yes"] = "Sí";
@@ -22,21 +30,18 @@ App::$strings["Enable this option if you use a dark navbar color in light mode"]
App::$strings["Narrow navbar"] = "Estrechar la barra de navegación";
App::$strings["Navigation bar background color"] = "Color de fondo de la barra de navegación";
App::$strings["Dark navigation bar background color"] = "Color de fondo oscuro de la barra de navegación";
-App::$strings["Link color"] = "Color del enlace";
-App::$strings["Dark link color"] = "Color oscuro del enlace";
-App::$strings["Link hover color"] = "Color de los enlaces al pasar por encima";
-App::$strings["Dark link hover color"] = "Color oscuro del enlace flotante";
App::$strings["Set the background color"] = "Ajustar el color de fondo";
App::$strings["Set the dark background color"] = "Establecer el color de fondo oscuro";
App::$strings["Set the background image"] = "Ajustar la imagen de fondo";
App::$strings["Set the dark background image"] = "Establecer la imagen de fondo oscuro";
App::$strings["Set font-size for the entire application"] = "Ajustar el tamaño de letra para toda la aplicación";
App::$strings["Examples: 1rem, 100%, 16px"] = "Ejemplos: 1rem, 100%, 16px";
-App::$strings["Set radius of corners"] = "Establecer el radio de curvatura de las esquinas";
-App::$strings["Example: 4px"] = "Ejemplo: 4px";
+App::$strings["Set radius of corners in rem"] = "Fijar el radio de las esquinas en rem";
+App::$strings["Leave empty for default radius"] = "Dejar vacío para el radio por defecto";
App::$strings["Set maximum width of content region in rem"] = "Ajustar la anchura máxima de la región de contenido, en rem";
App::$strings["Leave empty for default width"] = "Dejar en blanco para la anchura predeterminada";
App::$strings["Set size of conversation author photo"] = "Ajustar el tamaño de la foto del autor de la conversación";
+App::$strings["Leave empty for default size"] = "Dejar vacío para el tamaño por defecto";
App::$strings["Set size of followup author photos"] = "Ajustar el tamaño de foto de los seguidores del autor";
App::$strings["Show advanced settings"] = "Mostrar ajustes avanzados";
App::$strings["%1\$s's bookmarks"] = "Marcadores de %1\$s";
@@ -84,7 +89,7 @@ App::$strings["Visible to anybody on %s."] = "Visible para cualquiera en %s.";
App::$strings["Visible to all connections."] = "Visible para todas las conexiones.";
App::$strings["Visible to approved connections."] = "Visible para las conexiones permitidas.";
App::$strings["Visible to specific connections."] = "Visible para conexiones específicas.";
-App::$strings["&#x1f501; Repeated %1\$s's %2\$s"] = "&#x1f501; Repetidos %2\$sde %1\$s";
+App::$strings["&#x1f501; Repeated %1\$s's %2\$s"] = "&#x1f501; Repitió %2\$sde %1\$s";
App::$strings["Item not found."] = "Elemento no encontrado.";
App::$strings["Permission denied."] = "Acceso denegado.";
App::$strings["Privacy group not found."] = "Grupo de canales no encontrado.";
@@ -92,15 +97,6 @@ App::$strings["Privacy group is empty."] = "El grupo de canales está vacío.";
App::$strings["Privacy group: %s"] = "Grupo de canales: %s";
App::$strings["Connection: %s"] = "Conexión: %s";
App::$strings["Connection not found."] = "Conexión no encontrada";
-App::$strings["female"] = "mujer";
-App::$strings["%1\$s updated her %2\$s"] = "%1\$s ha actualizado su %2\$s";
-App::$strings["male"] = "hombre";
-App::$strings["%1\$s updated his %2\$s"] = "%1\$s ha actualizado su %2\$s";
-App::$strings["%1\$s updated their %2\$s"] = "%1\$s ha actualizado su %2\$s";
-App::$strings["profile photo"] = "foto del perfil";
-App::$strings["[Edited %s]"] = "[se ha editado %s]";
-App::$strings["__ctx:edit_activity__ Post"] = "Publicar";
-App::$strings["__ctx:edit_activity__ Comment"] = "Comentar";
App::$strings["Off"] = "Desactivado";
App::$strings["On"] = "Activado";
App::$strings["Calendar"] = "Calendario";
@@ -264,10 +260,12 @@ App::$strings["It's complicated"] = "Es complicado";
App::$strings["Don't care"] = "No me importa";
App::$strings["Ask me"] = "Pregúnteme";
App::$strings[" and "] = " y ";
+App::$strings[", "] = ", ";
+App::$strings["Profile Photo"] = "Foto del perfil";
+App::$strings["Cover Photo"] = "Imagen de portada del perfil";
App::$strings["public profile"] = "el perfil público";
-App::$strings["%1\$s changed %2\$s to &ldquo;%3\$s&rdquo;"] = "%1\$s ha cambiado %2\$s a &ldquo;%3\$s&rdquo;";
-App::$strings["Visit %1\$s's %2\$s"] = "Visitar %2\$s de %1\$s";
-App::$strings["%1\$s has an updated %2\$s, changing %3\$s."] = "%1\$s ha actualizado %2\$s, cambiando %3\$s.";
+App::$strings["%1\$s %2\$s has been updated to %3\$s."] = "%1\$s%2\$sse ha actualizado a %3\$s.";
+App::$strings["%1\$s updated the %2\$s. Changed %3\$s."] = "%1\$sactualizó el %2\$s. Ha cambiado %3\$s.";
App::$strings["%d invitation available"] = array(
0 => "%d invitación pendiente",
1 => "%d invitaciones disponibles",
@@ -469,22 +467,18 @@ App::$strings["channel"] = "el canal";
App::$strings["post"] = "la entrada";
App::$strings["comment"] = "el comentario";
App::$strings["%1\$s likes %2\$s's %3\$s"] = "A %1\$s le gusta %3\$s de %2\$s";
-App::$strings["%1\$s doesn't like %2\$s's %3\$s"] = "A %1\$s no le gusta %3\$s de %2\$s";
App::$strings["likes %1\$s's %2\$s"] = "gusta de %2\$s de %1\$s";
+App::$strings["%1\$s doesn't like %2\$s's %3\$s"] = "A %1\$s no le gusta %3\$s de %2\$s";
App::$strings["doesn't like %1\$s's %2\$s"] = "no gusta de %2\$s de %1\$s";
-App::$strings["%1\$s is now connected with %2\$s"] = "%1\$s ahora está conectado/a con %2\$s";
-App::$strings["%1\$s poked %2\$s"] = "%1\$s ha dado un toque a %2\$s";
-App::$strings["poked"] = "ha dado un toque a";
-App::$strings["__ctx:mood__ %1\$s is %2\$s"] = "%1\$s está %2\$s";
+App::$strings["%1\$s repeated %2\$s's %3\$s"] = "%1\$s repitió %3\$sde %2\$s";
+App::$strings["repeated %1\$s's %2\$s"] = "repitió %2\$s de %1\$s";
App::$strings["This is an unsaved preview"] = "Esta es una previsualización sin guardar";
App::$strings["__ctx:title__ Likes"] = "Me gusta";
App::$strings["__ctx:title__ Dislikes"] = "No me gusta";
-App::$strings["__ctx:title__ Agree"] = "De acuerdo";
-App::$strings["__ctx:title__ Disagree"] = "En desacuerdo";
-App::$strings["__ctx:title__ Abstain"] = "Abstención";
App::$strings["__ctx:title__ Attending"] = "Participaré";
App::$strings["__ctx:title__ Not attending"] = "No participaré";
App::$strings["__ctx:title__ Might attend"] = "Quizá participe";
+App::$strings["__ctx:title__ Repeats"] = "Repite";
App::$strings["Select"] = "Seleccionar";
App::$strings["Delete"] = "Eliminar";
App::$strings["Toggle Star Status"] = "Activar o desactivar el estado de entrada preferida";
@@ -511,7 +505,6 @@ App::$strings["View Profile"] = "Ver el perfil";
App::$strings["Recent Activity"] = "Actividad reciente";
App::$strings["Connect"] = "Conectar";
App::$strings["Edit Connection"] = "Editar conexión";
-App::$strings["Poke"] = "Toques y otras cosas";
App::$strings["Approve this item"] = "Aprobar este elemento";
App::$strings["Delete this item"] = "Borrar este elemento";
App::$strings["%s likes this."] = "A %s le gusta esto.";
@@ -580,6 +573,11 @@ App::$strings["Other networks and post services"] = "Otras redes y servicios de
App::$strings["Set expiration date"] = "Configurar fecha de caducidad";
App::$strings["Set publish date"] = "Establecer la fecha de publicación";
App::$strings["Encrypt text"] = "Cifrar texto";
+App::$strings["__ctx:noun__ Repeat"] = array(
+ 0 => "Se repite",
+ 1 => "Se repite",
+ 2 => "Repite",
+);
App::$strings["__ctx:noun__ Dislike"] = array(
0 => "No me gusta",
1 => "No me gusta",
@@ -600,21 +598,6 @@ App::$strings["__ctx:noun__ Undecided"] = array(
1 => "Indecisos/as",
2 => "Indecisos/as",
);
-App::$strings["__ctx:noun__ Agree"] = array(
- 0 => "De acuerdo",
- 1 => "De acuerdo",
- 2 => "De acuerdo",
-);
-App::$strings["__ctx:noun__ Disagree"] = array(
- 0 => "En desacuerdo",
- 1 => "En desacuerdo",
- 2 => "En desacuerdo",
-);
-App::$strings["__ctx:noun__ Abstain"] = array(
- 0 => "se abstiene",
- 1 => "Se abstienen",
- 2 => "Se abstienen",
-);
App::$strings["Remote authentication"] = "Acceder desde su servidor";
App::$strings["Click to authenticate to your home hub"] = "Pulsar para identificarse en su servidor de inicio";
App::$strings["Channels"] = "Canales";
@@ -764,30 +747,6 @@ App::$strings["Nothing"] = "Nada";
App::$strings["View all %s connections"] = "Ver todas las %s conexiones";
App::$strings["Network: %s"] = "Red %s";
App::$strings["Save"] = "Guardar";
-App::$strings["poke"] = "un toque";
-App::$strings["ping"] = "un \"ping\"";
-App::$strings["pinged"] = "ha enviado un \"ping\" a";
-App::$strings["happy"] = "feliz ";
-App::$strings["sad"] = "triste ";
-App::$strings["mellow"] = "tranquilo/a";
-App::$strings["tired"] = "cansado/a ";
-App::$strings["perky"] = "vivaz";
-App::$strings["angry"] = "enfadado/a";
-App::$strings["stupefied"] = "asombrado/a";
-App::$strings["puzzled"] = "perplejo/a";
-App::$strings["interested"] = "interesado/a";
-App::$strings["bitter"] = "amargado/a";
-App::$strings["cheerful"] = "alegre";
-App::$strings["alive"] = "animado/a";
-App::$strings["annoyed"] = "molesto/a";
-App::$strings["anxious"] = "ansioso/a";
-App::$strings["cranky"] = "de mal humor";
-App::$strings["disturbed"] = "perturbado/a";
-App::$strings["frustrated"] = "frustrado/a";
-App::$strings["depressed"] = "deprimido/a";
-App::$strings["motivated"] = "motivado/a";
-App::$strings["relaxed"] = "relajado/a";
-App::$strings["surprised"] = "sorprendido/a";
App::$strings["May"] = "mayo";
App::$strings["Unknown attachment"] = "Adjunto no reconocido";
App::$strings["Size"] = "Tamaño";
@@ -867,7 +826,6 @@ App::$strings["This channel has not added a profile description yet"] = "Este ca
App::$strings["Change your profile photo"] = "Cambiar su foto del perfil";
App::$strings["Trans"] = "Trans";
App::$strings["Full Name:"] = "Nombre completo:";
-App::$strings["Like this channel"] = "Me gusta este canal";
App::$strings["j F, Y"] = "j F Y";
App::$strings["j F"] = "j F";
App::$strings["Birthday:"] = "Cumpleaños:";
@@ -925,6 +883,15 @@ App::$strings["IRC settings saved."] = "Se han guardado los ajustes de IRC.";
App::$strings["IRC Chatroom"] = "Sala de chat IRC";
App::$strings["Hide the button and show the smilies directly."] = "Ocultar el botón y mostrar los smilies directamente.";
App::$strings["Smileybutton Settings"] = "Ajustes de Smileybutton";
+App::$strings["ERROR: word length is not correct!"] = "ERROR: ¡la longitud de la palabra no es correcta!";
+App::$strings["Fediquest App"] = "Aplicación Fediquest";
+App::$strings["A distributed quest for a given word (game)."] = "Una búsqueda distribuida de una palabra determinada (juego).";
+App::$strings["To start a game, enter [fediquest]your_word[/fediquest] somewhere in a toplevel post."] = "Para empezar una partida, introduce [fediquest]tu_palabra[/fediquest] en algún lugar de un post de toplevel.";
+App::$strings["Your contacts can post their guess in the comments."] = "Sus contactos pueden publicar sus conjeturas en los comentarios.";
+App::$strings["Your channel will evaluate the guess and automatically post the response."] = "Su canal evaluará la conjetura y publicará automáticamente la respuesta.";
+App::$strings["Correct letters"] = "Letras correctas";
+App::$strings["Letters contained in the word but at the wrong spot"] = "Letras contenidas en la palabra pero en el lugar equivocado";
+App::$strings["Letters not contained in the word"] = "Letras no contenidas en la palabra";
App::$strings["Network error"] = "Error de red";
App::$strings["API error"] = "Error de API";
App::$strings["Unknown issue"] = "Problema desconocido";
@@ -947,15 +914,6 @@ App::$strings["Show Upload Limits"] = "Mostrar los límites de subida";
App::$strings["Hubzilla configured maximum size: "] = "Tamaño máximo configurado por Hubzilla: ";
App::$strings["PHP upload_max_filesize: "] = "PHP upload_max_filesize: ";
App::$strings["PHP post_max_size (must be larger than upload_max_filesize): "] = "PHP post_max_size (debe ser mayor que upload_max_filesize): ";
-App::$strings["ERROR: word length is not correct!"] = "ERROR: ¡la longitud de la palabra no es correcta!";
-App::$strings["Fediwordle App"] = "App Fediwordle";
-App::$strings["A distributed word game inspired by wordle."] = "Un juego de palabras distribuido inspirado en el wordle.";
-App::$strings["To start a game, enter [wordle]your_word[/wordle] somewhere in a toplevel post."] = "Para empezar una partida, introduzca [wordle]mi_palabra[/wordle] en algún lugar de un post de nivel superior.";
-App::$strings["Your contacts can post their guess in the comments."] = "Sus contactos pueden publicar sus conjeturas en los comentarios.";
-App::$strings["Your channel will evaluate the guess and automatically post the response."] = "Su canal evaluará la conjetura y publicará automáticamente la respuesta.";
-App::$strings["Correct letters"] = "Letras correctas";
-App::$strings["Letters contained in the word but at the wrong spot"] = "Letras contenidas en la palabra pero en el lugar equivocado";
-App::$strings["Letters not contained in the word"] = "Letras no contenidas en la palabra";
App::$strings["Send your identity to all websites"] = "Enviar su identidad a todos los sitios web";
App::$strings["Send ZID"] = "Enviar ZID";
App::$strings["Send email to all members"] = "Enviar un correo electrónico a todos los miembros";
@@ -977,7 +935,6 @@ App::$strings["First Name"] = "Nombre";
App::$strings["Last Name"] = "Apellido";
App::$strings["Nickname"] = "Alias";
App::$strings["Full Name"] = "Nombre completo";
-App::$strings["Profile Photo"] = "Foto del perfil";
App::$strings["Profile Photo 16px"] = "Foto del perfil 16px";
App::$strings["Profile Photo 32px"] = "Foto del perfil 32px";
App::$strings["Profile Photo 48px"] = "Foto del perfil 48px";
@@ -1119,14 +1076,13 @@ App::$strings["Logfile size in bytes before rotating"] = "Tamaño del fichero de
App::$strings["Number of logfiles to retain"] = "Número de ficheros de informe que se deben retener";
App::$strings["Your account on %s will expire in a few days."] = "Su cuenta en %s caducará en unos pocos días.";
App::$strings["Your test account is about to expire."] = "Su cuenta de prueba está a punto de expirar.";
-App::$strings["status"] = "el mensaje de estado ";
App::$strings["ActivityPub Protocol Settings updated."] = "Se han actualizado los ajustes del protocolo ActivityPub.";
App::$strings["The activitypub protocol does not support location independence. Connections you make within that network may be unreachable from alternate channel locations."] = "El protocolo ActivityPub no soporta la independencia de ubicación. Las conexiones que realice dentro de esa red pueden no ser accesibles desde ubicaciones de canales alternativos.";
-App::$strings["Deliver to ActivityPub recipients in privacy groups"] = "Entregar a los destinatarios de ActivityPub en grupos de canales";
-App::$strings["May result in a large number of mentions and expose all the members of your privacy group"] = "Puede resultar en un gran número de menciones y exponer a todos los miembros de su grupo de canales";
-App::$strings["Send multi-media HTML articles"] = "Enviar artículos multimedia en HTML";
-App::$strings["Not supported by some microblog services such as Mastodon"] = "No soportado por algunos servicios de microblog como Mastodon";
+App::$strings["Send activities of type note instead of article"] = "Enviar actividades de tipo nota en lugar de artículo";
+App::$strings["Microblog services such as Mastodon do not properly support articles"] = "Los servicios de microblog como Mastodon no soportan correctamente los artículos";
App::$strings["Activitypub Protocol"] = "Protocolo Activitypub";
+App::$strings["Refresh failed"] = "Error de actualización";
+App::$strings["Refresh succeeded"] = "Actualización con éxito";
App::$strings["Save Bookmarks"] = "Guardar en Marcadores";
App::$strings["Random Planet App"] = "App Random Planet";
App::$strings["Set a random planet from the Star Wars Empire as your location when posting"] = "Establecer un planeta aleatorio del Imperio de la Guerra de las Galaxias como su ubicación cuando publique.";
@@ -1148,6 +1104,7 @@ App::$strings["No username found in import file."] = "No se ha encontrado el nom
App::$strings["Import completed."] = "Importación completada.";
App::$strings["\$projectname"] = "\$projectname";
App::$strings["%1\$s dislikes %2\$s's %3\$s"] = "a %1\$s no le gusta el %3\$s de %2\$s";
+App::$strings["status"] = "el mensaje de estado ";
App::$strings["%1\$s is attending %2\$s's %3\$s"] = "%3\$s de %2\$s: %1\$s participa";
App::$strings["%1\$s is not attending %2\$s's %3\$s"] = "%3\$s de %2\$s: %1\$s no participa";
App::$strings["%1\$s may attend %2\$s's %3\$s"] = "%3\$s de %2\$s: %1\$s quizá participe";
@@ -1447,28 +1404,6 @@ App::$strings["Maximum tweet length"] = "Longitud máxima del tweet";
App::$strings["Send public postings to Twitter by default"] = "Enviar mensajes públicos a Twitter de forma predeterminada";
App::$strings["If enabled your public postings will be posted to the associated Twitter account by default"] = "Si está activado, sus entradas públicas se publicarán en la cuenta de Twitter asociada de forma predeterminada.";
App::$strings["Twitter Crosspost Connector"] = "Twitter Crosspost Connector";
-App::$strings["lonely"] = "Solo/a";
-App::$strings["drunk"] = "ebrio/a";
-App::$strings["horny"] = "caliente";
-App::$strings["stoned"] = "drogado/a";
-App::$strings["fucked up"] = "jodido/a";
-App::$strings["clusterfucked"] = "hecho/a polvo";
-App::$strings["crazy"] = "loco/a";
-App::$strings["hurt"] = "ofendido/a";
-App::$strings["sleepy"] = "soñoliento/a";
-App::$strings["grumpy"] = "gruñón/ona";
-App::$strings["high"] = "superior";
-App::$strings["semi-conscious"] = "semiconsciente";
-App::$strings["in love"] = "enamorado/a";
-App::$strings["in lust"] = "lujurioso/a";
-App::$strings["naked"] = "desnudo/a";
-App::$strings["stinky"] = "apestoso/a";
-App::$strings["sweaty"] = "sudoroso/a";
-App::$strings["bleeding out"] = "exánime";
-App::$strings["victorious"] = "victorioso/a";
-App::$strings["defeated"] = "derrotado/a";
-App::$strings["envious"] = "envidioso/a";
-App::$strings["jealous"] = "celoso/a";
App::$strings["generic profile image"] = "imagen del perfil general";
App::$strings["random geometric pattern"] = "patrón geométrico aleatorio";
App::$strings["monster face"] = "cara de monstruo";
@@ -1518,44 +1453,6 @@ App::$strings["Workflow settings"] = "Ajustes del flujo de trabajo";
App::$strings["Some setting"] = "Algunos ajustes";
App::$strings["A setting"] = "Un ajuste";
App::$strings["Skeleton Settings"] = "Ajustes de Skeleton";
-App::$strings["bitchslap"] = "una bofetada humillante";
-App::$strings["bitchslapped"] = "ha abofeteado de forma humillante a";
-App::$strings["shag"] = "un polvo";
-App::$strings["shagged"] = "ha dejado exhausto/a a";
-App::$strings["patent"] = "una patente";
-App::$strings["patented"] = "ha patentado a";
-App::$strings["hug"] = "un abrazo";
-App::$strings["hugged"] = "ha abrazado a";
-App::$strings["murder"] = "un asesinato";
-App::$strings["murdered"] = "ha asesinado a";
-App::$strings["worship"] = "una alabanza";
-App::$strings["worshipped"] = "ha elogiado a";
-App::$strings["kiss"] = "un beso";
-App::$strings["kissed"] = "ha besado a";
-App::$strings["tempt"] = "una tentación";
-App::$strings["tempted"] = "ha tentado a";
-App::$strings["raise eyebrows at"] = "un levantamiento de cejas";
-App::$strings["raised their eyebrows at"] = "ha levantado las cejas a";
-App::$strings["insult"] = "un insulto";
-App::$strings["insulted"] = "ha insultado a";
-App::$strings["praise"] = "un elogio";
-App::$strings["praised"] = "ha elogiado a";
-App::$strings["be dubious of"] = "una indecisión";
-App::$strings["was dubious of"] = "estaba dudoso de";
-App::$strings["eat"] = "una comida";
-App::$strings["ate"] = "ha comido";
-App::$strings["giggle and fawn at"] = "una sonrisa aduladora";
-App::$strings["giggled and fawned at"] = "ha sonreído y adulado a";
-App::$strings["doubt"] = "una duda";
-App::$strings["doubted"] = "ha dudado de";
-App::$strings["glare"] = "una mirada furiosa";
-App::$strings["glared at"] = "ha mirado con furia";
-App::$strings["fuck"] = "una mierda";
-App::$strings["fucked"] = "ha mandado a la mierda a";
-App::$strings["bonk"] = "un golpe";
-App::$strings["bonked"] = "ha golpeado a";
-App::$strings["declare undying love for"] = "una declaración de amor eterno";
-App::$strings["declared undying love for"] = "ha declarado amor eterno a";
App::$strings["Allow magic authentication only to websites of your immediate connections"] = "Permitir la autenticación mágica sólo a los sitios web de sus conexiones próximas";
App::$strings["Authchoose"] = "Autoseleccionar";
App::$strings["No server specified"] = "No se ha especificado ningún servidor";
@@ -1634,6 +1531,7 @@ App::$strings["requested to like"] = "solicita que se permita mostrar agrado ";
App::$strings["liked"] = "ha gustado de ";
App::$strings["requested to dislike"] = "solicita que se permita mostrar desagrado ";
App::$strings["disliked"] = "no ha gustado de ";
+App::$strings["repeated"] = "repitió";
App::$strings["voted on"] = "votado en ";
App::$strings["%1\$s %2\$s [zrl=%3\$s]a %4\$s[/zrl]"] = "%1\$s%2\$s [zrl=%3\$s ]un %4\$s[/zrl]";
App::$strings["%1\$s %2\$s [zrl=%3\$s]%4\$s's %5\$s[/zrl]"] = "%1\$s %2\$s[zrl=%3\$s]%5\$s de %4\$s[/zrl]";
@@ -1673,9 +1571,6 @@ App::$strings["created a new poll"] = "se ha creado una nueva encuesta";
App::$strings["created a new post"] = "ha creado una nueva entrada";
App::$strings["voted on %s's poll"] = "votado en la encuesta de %s";
App::$strings["commented on %s's post"] = "ha comentado la entrada de %s";
-App::$strings["repeated %s's post"] = "repetida la entrada de %s";
-App::$strings["liked %s's post"] = "Le ha gustado la entrada de %s";
-App::$strings["disliked %s's post"] = "No le ha gustado la entrada de %s";
App::$strings["shared a file with you"] = "compartió un archivo con usted";
App::$strings["edited a post dated %s"] = "ha editado una entrada %s";
App::$strings["edited a comment dated %s"] = "ha editado un comentario %s";
@@ -1693,7 +1588,6 @@ App::$strings["Suggest Channels"] = "Sugerir canales";
App::$strings["Channel Manager"] = "Administración de canales";
App::$strings["Stream"] = "Stream";
App::$strings["Mail"] = "Correo";
-App::$strings["Mood"] = "Estado de ánimo";
App::$strings["Chat"] = "Chat";
App::$strings["Probe"] = "Probar";
App::$strings["Suggest"] = "Sugerir";
@@ -1753,16 +1647,16 @@ App::$strings["Save to Folder"] = "Guardar en carpeta";
App::$strings["I will attend"] = "Participaré";
App::$strings["I will not attend"] = "No participaré";
App::$strings["I might attend"] = "Quizá participe";
-App::$strings["View all"] = "Ver todo";
App::$strings["I like this (toggle)"] = "Me gusta (cambiar)";
App::$strings["I don't like this (toggle)"] = "No me gusta esto (cambiar)";
App::$strings["Reply on this comment"] = "Responder a este comentario";
App::$strings["reply"] = "responder";
App::$strings["Reply to"] = "Responder a ";
-App::$strings["Share This"] = "Compartir esto";
App::$strings["share"] = "compartir";
+App::$strings["Repeat"] = "Repetir";
+App::$strings["repeat"] = "repetir";
App::$strings["Delivery Report"] = "Informe de transmisión";
-App::$strings["%d Comment"] = array(
+App::$strings["%d comment"] = array(
0 => "%d comentario",
1 => "%d comentarios",
2 => "%d comentarios",
@@ -1779,9 +1673,7 @@ App::$strings["Voting Options"] = "Opciones de votación";
App::$strings["Go to previous comment"] = "Ir al comentario anterior";
App::$strings["Pinned post"] = "Entradas ancladas";
App::$strings["Add to Calendar"] = "Añadir al calendario";
-App::$strings["Mark all seen"] = "Marcar todo como visto";
-App::$strings["__ctx:noun__ Likes"] = "Me gusta";
-App::$strings["__ctx:noun__ Dislikes"] = "No me gusta";
+App::$strings["Mark all comments seen"] = "Marcar como leídos todos los comentarios";
App::$strings["This is you"] = "Este es usted";
App::$strings["Image"] = "Imagen";
App::$strings["Insert Link"] = "Insertar enlace";
@@ -1919,9 +1811,7 @@ App::$strings["Channel activities"] = "Actividades del canal";
App::$strings["View Photo"] = "Ver foto";
App::$strings["Edit Album"] = "Editar álbum";
App::$strings["Upload"] = "Subir";
-App::$strings["I agree"] = "Estoy de acuerdo";
-App::$strings["I disagree"] = "No estoy de acuerdo";
-App::$strings["I abstain"] = "Me abstengo";
+App::$strings["Share This"] = "Compartir esto";
App::$strings["View %s's profile - %s"] = "Ver el perfil de %s - %s";
App::$strings["Don't show"] = "No mostrar";
App::$strings["You have %1$.0f of %2$.0f allowed connections."] = "Tiene %1$.0f de %2$.0f conexiones permitidas.";
@@ -2131,7 +2021,6 @@ App::$strings["Privacy group: "] = "Grupo de canales: ";
App::$strings["Installed Apps"] = "Apps instaladas";
App::$strings["Manage Apps"] = "Administrar apps";
App::$strings["Create Custom App"] = "Crear una app personalizada";
-App::$strings["Post repeated"] = "Entrada repetida";
App::$strings["No service class restrictions found."] = "No se han encontrado restricciones sobre esta clase de servicio.";
App::$strings["No valid account found."] = "No se ha encontrado una cuenta válida.";
App::$strings["Password reset request issued. Check your email."] = "Se ha recibido una solicitud de restablecimiento de contraseña. Consulte su correo electrónico.";
@@ -2170,6 +2059,7 @@ App::$strings["This site is not a directory server"] = "Este sitio no es un serv
App::$strings["New"] = "Nuevas";
App::$strings["No more system notifications."] = "No hay más notificaciones del sistema";
App::$strings["System Notifications"] = "Notificaciones del sistema";
+App::$strings["Mark all seen"] = "Marcar todo como visto";
App::$strings["Update to Hubzilla 5.0 step 2"] = "Actualizar a Hubzilla 5.0. Paso 2";
App::$strings["To complete the update please run"] = "Para completar la actualización, ejecutar ";
App::$strings["php util/z6convert.php"] = "php util/z6convert.php";
@@ -2178,7 +2068,6 @@ App::$strings["Thing updated"] = "Elemento actualizado.";
App::$strings["Object store: failed"] = "Guardar objeto: ha fallado";
App::$strings["Thing added"] = "Elemento añadido";
App::$strings["OBJ: %1\$s %2\$s %3\$s"] = "OBJ: %1\$s %2\$s %3\$s";
-App::$strings["Show Thing"] = "Mostrar elemento";
App::$strings["item not found."] = "elemento no encontrado.";
App::$strings["Edit Thing"] = "Editar elemento";
App::$strings["Select a profile"] = "Seleccionar un perfil";
@@ -2261,8 +2150,6 @@ App::$strings["Content filter"] = "Filtro de contenidos";
App::$strings["Contact updated"] = "Contacto actualizado";
App::$strings["Contact update failed"] = "Fallo en la actualización del contacto";
App::$strings["Approve connection"] = "Aprobar esta conexión";
-App::$strings["Refresh succeeded"] = "Actualización con éxito";
-App::$strings["Refresh failed - channel is currently unavailable"] = "Error de actualización: el canal no está disponible en este momento";
App::$strings["Block status updated"] = "Estado del bloqueo actualizado";
App::$strings["Block failed"] = "Bloqueo fallido";
App::$strings["Ignore status updated"] = "Estado de ignorar actualizado";
@@ -2273,10 +2160,7 @@ App::$strings["Hide status updated"] = "Estado de ocultación actualizado";
App::$strings["Hide failed"] = "Ocultar falló";
App::$strings["Contact removed"] = "Contacto eliminado";
App::$strings["Delete failed"] = "Eliminar falló";
-App::$strings["Refresh Permissions"] = "Recargar los permisos";
-App::$strings["Fetch updated permissions"] = "Obtener los permisos actualizados";
-App::$strings["Refresh Photo"] = "Actualizar la foto";
-App::$strings["Fetch updated photo"] = "Obtener una foto actualizada";
+App::$strings["Refetch contact info"] = "Recuperar información de contacto";
App::$strings["Unblock"] = "Desbloquear";
App::$strings["Block"] = "Bloquear";
App::$strings["Block (or Unblock) all communications with this connection"] = "Bloquear (o desbloquear) todas las comunicaciones con esta conexión";
@@ -2294,7 +2178,6 @@ App::$strings["Hide"] = "Ocultar";
App::$strings["Hide or Unhide this connection from your other connections"] = "Ocultar o mostrar esta conexión a sus otras conexiones";
App::$strings["This connection is hidden!"] = "¡Esta conexión está oculta!";
App::$strings["Delete this connection"] = "Eliminar esta conexión";
-App::$strings["Set your current mood and tell your friends"] = "Describir su estado de ánimo para comunicárselo a sus amigos";
App::$strings["Items tagged with: %s"] = "elementos etiquetados con: %s";
App::$strings["Search results for: %s"] = "Resultados de la búsqueda para: %s";
App::$strings["Email address required"] = "Dirección de correo electrónico requerida";
@@ -2364,6 +2247,10 @@ App::$strings["Refresh failed - channel is currently unavailable."] = "Recarga f
App::$strings["Unable to set address book parameters."] = "No ha sido posible establecer los parámetros de la libreta de direcciones.";
App::$strings["Connection has been removed."] = "La conexión ha sido eliminada.";
App::$strings["View %s's profile"] = "Ver el perfil de %s";
+App::$strings["Refresh Permissions"] = "Recargar los permisos";
+App::$strings["Fetch updated permissions"] = "Obtener los permisos actualizados";
+App::$strings["Refresh Photo"] = "Actualizar la foto";
+App::$strings["Fetch updated photo"] = "Obtener una foto actualizada";
App::$strings["View recent posts and comments"] = "Ver publicaciones y comentarios recientes";
App::$strings["Fetch Vcard"] = "Obtener una vcard";
App::$strings["Fetch electronic calling card for this connection"] = "Obtener una tarjeta de llamada electrónica para esta conexión";
@@ -2840,11 +2727,6 @@ App::$strings["permission denied"] = "permiso denegado";
App::$strings["recipient not found"] = "destinatario no encontrado";
App::$strings["Delivery report for %1\$s"] = "Informe de entrega para %1\$s";
App::$strings["Redeliver"] = "Volver a enviar";
-App::$strings["Poke somebody"] = "Dar un toque a alguien";
-App::$strings["Poke or ping somebody"] = "Dar un toque o hacer ping a alguien";
-App::$strings["Recipient"] = "Destinatario";
-App::$strings["Choose action"] = "Elegir una acción";
-App::$strings["Make this post private"] = "Convertir en privado este envío";
App::$strings["Away"] = "Ausente";
App::$strings["Online"] = "Conectado/a";
App::$strings["%1\$s is following %2\$s's %3\$s"] = "%1\$s está siguiendo %3\$s de %2\$s";
@@ -2956,6 +2838,7 @@ App::$strings["Additional federated transport protocols:"] = "Protocolos adicion
App::$strings["Version %s"] = "Versión %s";
App::$strings["Project homepage"] = "Página principal del proyecto";
App::$strings["Developer homepage"] = "Página principal del desarrollador";
+App::$strings["Blocked sites"] = "Sitios bloqueados";
App::$strings["Item not available."] = "Elemento no disponible";
App::$strings["No content available for year"] = "No hay contenido disponible para el año";
App::$strings["Export Channel"] = "Exportar el canal";
@@ -2979,9 +2862,7 @@ App::$strings["Invalid request."] = "Solicitud incorrecta.";
App::$strings["thing"] = "elemento";
App::$strings["Channel unavailable."] = "Canal no disponible.";
App::$strings["Previous action reversed."] = "Acción anterior revocada.";
-App::$strings["%1\$s agrees with %2\$s's %3\$s"] = "%3\$s de %2\$s: %1\$s está de acuerdo";
-App::$strings["%1\$s doesn't agree with %2\$s's %3\$s"] = "%3\$s de %2\$s: %1\$s no está de acuerdo";
-App::$strings["%1\$s abstains from a decision on %2\$s's %3\$s"] = "%3\$s de %2\$s: %1\$s se abstiene";
+App::$strings["profile"] = "perfil";
App::$strings["Action completed."] = "Acción completada.";
App::$strings["Thank you."] = "Gracias.";
App::$strings["Block Name"] = "Nombre del bloque";
@@ -3061,9 +2942,12 @@ App::$strings["or select an existing one (doubleclick)"] = "o seleccionar un ál
App::$strings["Add a Tag"] = "Añadir una etiqueta";
App::$strings["Example: @bob, @Barbara_Jensen, @jim@example.com"] = "Ejemplos: @eva, @Carmen_Osuna, @jaime@ejemplo.com";
App::$strings["Flag as adult in album view"] = "Marcar como \"solo para adultos\" en el álbum";
+App::$strings["View all"] = "Ver todo";
App::$strings["Photo Tools"] = "Gestión de las fotos";
App::$strings["In This Photo:"] = "En esta foto:";
App::$strings["Map"] = "Mapa";
+App::$strings["__ctx:noun__ Likes"] = "Me gusta";
+App::$strings["__ctx:noun__ Dislikes"] = "No me gusta";
App::$strings["You must be logged in to see this page."] = "Debe haber iniciado sesión para poder ver esta página.";
App::$strings["Posts and comments"] = "Publicaciones y comentarios";
App::$strings["Only posts"] = "Solo publicaciones";
@@ -3280,6 +3164,10 @@ App::$strings["PHP upload limits"] = "Límites PHP de subida";
App::$strings["Error: the \"openssl_pkey_new\" function on this system is not able to generate encryption keys"] = "Error: La función \"openssl_pkey_new\" en este sistema no es capaz de general claves de cifrado.";
App::$strings["If running under Windows, please see \"http://www.php.net/manual/en/openssl.installation.php\"."] = "Si está en un servidor Windows, por favor, lea \"http://www.php.net/manual/en/openssl.installation.php\".";
App::$strings["Generate encryption keys"] = "Generar claves de cifrado";
+App::$strings["Error: the sodium encryption library is not installed."] = "Error: la biblioteca de encriptación sodium no está instalada.";
+App::$strings["Generate ed25519 encryption keys"] = "Generar claves de cifrado ed25519";
+App::$strings["Error: one of \"bcmath\" or \"gmp\" (bigmath library) extensions are required."] = "Error: se requiere una de las extensiones \"bcmath\" o \"gmp\" (bigmath library).";
+App::$strings["Bigmath library (either bcmath or gmp)"] = "Biblioteca Bigmath (bcmath o gmp)";
App::$strings["libCurl PHP module"] = "módulo libCurl PHP";
App::$strings["GD graphics PHP module"] = "módulo PHP GD graphics";
App::$strings["OpenSSL PHP module"] = "módulo PHP OpenSSL";
@@ -3287,6 +3175,7 @@ App::$strings["PDO database PHP module"] = "Módulo PHP de la base de datos PDO
App::$strings["mb_string PHP module"] = "módulo PHP mb_string";
App::$strings["xml PHP module"] = "módulo PHP xml";
App::$strings["zip PHP module"] = "Módulo zip PHP";
+App::$strings["intl PHP module"] = "módulo intl PHP";
App::$strings["Apache mod_rewrite module"] = "módulo Apache mod_rewrite ";
App::$strings["Error: Apache webserver mod-rewrite module is required but not installed."] = "Error: se necesita el módulo del servidor web Apache mod-rewrite pero no está instalado.";
App::$strings["exec"] = "ejecutable";
@@ -3301,6 +3190,7 @@ App::$strings["Error: PDO database PHP module required but not installed."] = "E
App::$strings["Error: mb_string PHP module required but not installed."] = "Error: el módulo PHP mb_string es necesario, pero no está instalado.";
App::$strings["Error: xml PHP module required for DAV but not installed."] = "Error: el módulo PHP xml es necesario para DAV, pero no está instalado.";
App::$strings["Error: zip PHP module required but not installed."] = "Error: se requiere el módulo zip PHP pero no está instalado.";
+App::$strings["Error: intl PHP module required but not installed."] = "Error: el módulo intl PHP es necesario pero no está instalado.";
App::$strings[".htconfig.php is writable"] = ".htconfig.php tiene permisos de escritura";
App::$strings["The web installer needs to be able to create a file called \".htconfig.php\" in the top folder of your web server and it is unable to do so."] = "El instalador web no ha podido crear un fichero llamado “.htconfig.php” en la carpeta base de su servidor.";
App::$strings["This is most often a permission setting, as the web server may not be able to write files in your folder - even if you can."] = "Esto está generalmente ligado a un problema de permisos, a causa del cual el servidor web tiene prohibido modificar ficheros en su carpeta - incluso si usted mismo tiene esos permisos.";
diff --git a/view/js/main.js b/view/js/main.js
index c9798dede..6fda3c8d0 100644
--- a/view/js/main.js
+++ b/view/js/main.js
@@ -1008,7 +1008,7 @@ function liveUpdate(notify_id) {
in_progress = false;
liveRecurse ++;
if(liveRecurse < 10) {
- liveUpdate();
+ liveUpdate(notify_id);
}
else {
console.log('Incomplete data. Too many attempts. Giving up.');
@@ -1305,7 +1305,8 @@ function dropItem(url, object, b64mid) {
$(object + ', #pinned-wrapper-' + id).remove();
$('body').css('cursor', 'auto');
- $.jGrowl(aStr.itemdel, { sticky: false, theme: 'info', life: 3000 });
+ toast(aStr.itemdel, 'info')
+ //$.jGrowl(aStr.itemdel, { sticky: false, theme: 'info', life: 3000 });
if (typeof b64mid !== typeof undefined) {
$('[data-b64mid=\'' + b64mid + '\']').fadeOut(function() {
@@ -1408,7 +1409,8 @@ function submitPoll(id) {
$.post('vote/' + id,
$('#question-form-' + id).serialize(),
function(data) {
- $.jGrowl(data.message, { sticky: false, theme: ((data.success) ? 'info' : 'notice'), life: 10000 });
+ toast(data.message, ((data.success) ? 'info' : 'danger'));
+ //$.jGrowl(data.message, { sticky: false, theme: ((data.success) ? 'info' : 'notice'), life: 10000 });
if(timer) clearTimeout(timer);
timer = setTimeout(updateInit, 500);
}
@@ -1815,3 +1817,26 @@ function toggleAside() {
$('<div id="overlay"></div>').appendTo('body').one('click', function() { toggleAside(); });
}
}
+
+function toast(string, severity) {
+ let id = btoa(string);
+ let container = document.getElementById('toast-container');
+ let toast = document.getElementById(id);
+
+ if (!toast) {
+ toast = document.createElement('div');
+ toast.setAttribute('id', id);
+ toast.innerHTML = '<div class="d-flex"><div class="toast-body">' + string + '</div><button type="button" class="btn-close me-2 m-auto" data-bs-dismiss="toast" aria-label="Close"></button></div>';
+ toast.classList.add('toast', 'p-2', 'bg-' + severity + '-subtle', 'text-' + severity + '-emphasis', 'border-' + severity);
+ }
+
+ container.prepend(toast);
+
+ let toastInstance = bootstrap.Toast.getOrCreateInstance(toast);
+
+ if (severity === 'danger') {
+ toastInstance._config.autohide = false;
+ }
+
+ toastInstance.show();
+}
diff --git a/view/js/mod_cloud.js b/view/js/mod_cloud.js
index e0f59beab..fc9219bff 100644
--- a/view/js/mod_cloud.js
+++ b/view/js/mod_cloud.js
@@ -73,7 +73,7 @@ $(document).ready(function () {
close_and_deactivate_all_panels();
$('body').css('cursor', 'wait');
- $.jGrowl(aStr.download_info, { sticky: false, theme: 'info', life: 10000 });
+ toast(aStr.download_info, 'info');
let data = [
{name: 'attach_path', value: window.location.pathname},
@@ -301,7 +301,7 @@ $(document).ready(function () {
close_and_deactivate_all_panels();
$('body').css('cursor', 'wait');
- $.jGrowl(aStr.download_info, { sticky: false, theme: 'info', life: 10000 });
+ toast(aStr.download_info, 'info');
post_data.push(
{name: 'attach_path', value: window.location.pathname},
diff --git a/view/pdl/mod_admin.pdl b/view/pdl/mod_admin.pdl
index 3c9633a69..f5e46baed 100644
--- a/view/pdl/mod_admin.pdl
+++ b/view/pdl/mod_admin.pdl
@@ -1,10 +1,7 @@
+[template]doubleleft[/template]
[region=aside]
[widget=admin][/widget]
[/region]
[region=content]
$content
[/region]
-[region=right_aside]
-[widget=notifications][/widget]
-[widget=newmember][/widget]
-[/region]
diff --git a/view/php/doubleleft.php b/view/php/doubleleft.php
index 2d1571bf8..97b1546dc 100644
--- a/view/php/doubleleft.php
+++ b/view/php/doubleleft.php
@@ -23,7 +23,7 @@
<main>
<div class="content">
<div class="columns">
- <aside id="region_1"><div class="aside_spacer_top_left"></div><div class="aside_spacer_left"><div id="left_aside_wrapper" class="aside_wrapper"><?php if(x($page,'aside')) echo $page['aside']; ?></div></div></aside>
+ <aside id="region_1" class="d-none d-lg-block"><div class="aside_spacer_top_left"></div><div class="aside_spacer_left"><div id="left_aside_wrapper" class="aside_wrapper"><?php if(x($page,'aside')) echo $page['aside']; ?></div></div></aside>
<section id="region_2"><?php if(x($page,'content')) echo $page['content']; ?>
<div id="page-footer"></div>
<div id="pause"></div>
diff --git a/view/php/theme_init.php b/view/php/theme_init.php
index 50da8b5f9..821e9b46e 100644
--- a/view/php/theme_init.php
+++ b/view/php/theme_init.php
@@ -3,7 +3,6 @@
require_once('include/plugin.php');
head_add_css('/library/tiptip/tipTip.css');
-head_add_css('/library/jgrowl/jquery.jgrowl.css');
head_add_css('/library/jRange/jquery.range.css');
head_add_css('/view/css/conversation.css');
@@ -23,7 +22,6 @@ head_add_js('autocomplete.js');
head_add_js('/library/jquery.timeago.js');
head_add_js('/library/readmore.js/readmore.js');
-head_add_js('/library/jgrowl/jquery.jgrowl.min.js');
head_add_js('/library/sjcl/sjcl.js');
head_add_js('/library/sodium-plus/dist/sodium-plus.min.js');
diff --git a/view/theme/redbasic/css/narrow_navbar.css b/view/theme/redbasic/css/narrow_navbar.css
index 9f915418e..2b0ec9a05 100644
--- a/view/theme/redbasic/css/narrow_navbar.css
+++ b/view/theme/redbasic/css/narrow_navbar.css
@@ -4,9 +4,4 @@
--bs-navbar-padding-y: 1px;
}
- #jGrowl.top-right {
- top: 3.5rem;
- right: 15px;
- }
-
}
diff --git a/view/theme/redbasic/css/style.css b/view/theme/redbasic/css/style.css
index 56194c735..2de40d671 100644
--- a/view/theme/redbasic/css/style.css
+++ b/view/theme/redbasic/css/style.css
@@ -168,6 +168,11 @@ input[type=text], textarea {
color: #FF0000;
}
+#toast-container {
+ z-index: 1060;
+ width: 300px;
+}
+
#powered-by {
font-size: 0.5rem;
position: absolute;
@@ -708,26 +713,6 @@ nav .acpopup {
color:#cc0000;
}
-/* popup notifications */
-div.jGrowl div.notice {
- background: #511919 url("../../../../images/icons/48/notice.png") no-repeat 5px center;
- color: #ffffff;
- padding-left: 58px;
-}
-div.jGrowl div.info {
- background: #364e59 url("../../../../images/icons/48/info.png") no-repeat 5px center;
- color: #ffffff;
- padding-left: 58px;
-}
-#jGrowl.top-right {
- top: 4.5rem;
- right: .25rem;
-}
-
-div.jGrowl div.jGrowl-notification {
- min-height: 60px;
-}
-
.jslider .jslider-scale ins {
color: #333;
font-size: 1rem;
@@ -796,7 +781,7 @@ div.jGrowl div.jGrowl-notification {
.shared_header img {
border-radius: var(--bs-border-radius);
- margin-right: .75rem;
+ margin-right: .5rem;
}
.tag1 {
@@ -910,25 +895,6 @@ a .drop-icons:hover {
list-style-type: none;
}
-table {
- border-spacing: 2px;
- max-width: 100%;
-}
-
-th,td {
- padding: 3px;
-}
-
-#channels > tbody > tr > td, #users > tbody > tr > td {
- max-width: 19.4em;
- overflow: hidden;
-}
-
-/* mail */
-
-img.mail-conv-sender-photo {
- border-radius: var(--bs-border-radius);
-}
/* jot */
@@ -1098,7 +1064,7 @@ img.mail-conv-sender-photo {
}
.abook-self {
- background-color: #ffdddd;
+ background-color: var(--bs-light-bg-subtle);
}
.abook-pending-contact, .abook-permschange {
diff --git a/view/theme/redbasic/php/theme_init.php b/view/theme/redbasic/php/theme_init.php
index 54e6e7be3..cffe22de6 100644
--- a/view/theme/redbasic/php/theme_init.php
+++ b/view/theme/redbasic/php/theme_init.php
@@ -1,4 +1,6 @@
<?php
+use Zotlabs\Lib\Config;
+
require_once('view/php/theme_init.php');
head_add_css('/library/fork-awesome/css/fork-awesome.min.css');
@@ -24,8 +26,8 @@ if (App::$profile_uid) {
}
if (!$redbasic_mode) {
- $redbasic_mode = ((get_config('redbasic', 'dark_mode')) ? 'dark' : 'light');
- $redbasic_navbar_mode = ((get_config('redbasic', 'navbar_dark_mode')) ? 'dark' : 'light');
+ $redbasic_mode = ((Config::Get('redbasic', 'dark_mode')) ? 'dark' : 'light');
+ $redbasic_navbar_mode = ((Config::Get('redbasic', 'navbar_dark_mode')) ? 'dark' : 'light');
}
App::$page['color_mode'] = 'data-bs-theme="' . $redbasic_mode . '"';
diff --git a/view/tpl/admin_accounts.tpl b/view/tpl/admin_accounts.tpl
index 1f5617f00..4e2b79876 100644
--- a/view/tpl/admin_accounts.tpl
+++ b/view/tpl/admin_accounts.tpl
@@ -1,4 +1,4 @@
-<div class="generic-content-wrapper-styled" id="adminpage">
+<div class="generic-content-wrapper-styled table-responsive" id="adminpage">
<h1>{{$title}} - {{$page}}</h1>
<form action="{{$baseurl}}/admin/accounts" method="post">
diff --git a/view/tpl/admin_channels.tpl b/view/tpl/admin_channels.tpl
index 75db77593..19b3c292f 100644
--- a/view/tpl/admin_channels.tpl
+++ b/view/tpl/admin_channels.tpl
@@ -10,7 +10,7 @@
return false;
}
</script>
-<div class = "generic-content-wrapper-styled" id='adminpage'>
+<div class="generic-content-wrapper-styled table-responsive" id='adminpage'>
<h1>{{$title}} - {{$page}}</h1>
<form action="{{$baseurl}}/admin/channels" method="post">
diff --git a/view/tpl/cdav_calendar.tpl b/view/tpl/cdav_calendar.tpl
index 88aa0789d..5d8c6115f 100644
--- a/view/tpl/cdav_calendar.tpl
+++ b/view/tpl/cdav_calendar.tpl
@@ -480,7 +480,7 @@ function on_submit() {
eventSource.refetch();
}
else {
- $.jGrowl('{{$disabled_warning}}', { sticky: false, theme: 'notice', life: 10000 });
+ toast('{{$disabled_warning}}', 'danger');
}
reset_form();
});
@@ -506,7 +506,7 @@ function on_submit() {
eventSource.refetch();
}
else {
- $.jGrowl('{{$disabled_warning}}', { sticky: false, theme: 'notice', life: 10000 });
+ toast('{{$disabled_warning}}', 'danger');
}
reset_form();
});
diff --git a/view/tpl/contact_edit_modal.tpl b/view/tpl/contact_edit_modal.tpl
index 72feb7138..b9d9ead08 100644
--- a/view/tpl/contact_edit_modal.tpl
+++ b/view/tpl/contact_edit_modal.tpl
@@ -54,11 +54,11 @@
$.post('contactedit/' + poi, form_data, function(data) {
if (!data.success) {
- $.jGrowl(data.message, {sticky: false, theme: 'notice', life: 10000});
+ toast(data.message, 'danger');
return;
}
activate(data);
- $.jGrowl(data.message, {sticky: false, theme: ((data.success) ? 'info' : 'notice'), life: ((data.success) ? 3000 : 10000)});
+ toast(data.message, ((data.success) ? 'info' : 'danger'));
// $('#edit-modal').modal('hide');
});
@@ -70,7 +70,7 @@
$.get('contactedit/' + poi + '/' + cmd, function(data) {
$('#edit-modal-tools').html(data.tools);
- $.jGrowl(data.message, {sticky: false, theme: ((data.success) ? 'info' : 'notice'), life: ((data.success) ? 3000 : 10000)});
+ toast(data.message, ((data.success) ? 'info' : 'danger'));
if (cmd === 'drop') {
if ($('#contact-entry-wrapper-' + poi).length) {
$('#contact-entry-wrapper-' + poi).fadeOut();
@@ -110,7 +110,7 @@
$('.contact-edit-icon-' + poi).hide();
$.get('contactedit/' + poi, function(data) {
if (!data.success) {
- $.jGrowl(data.message, {sticky: false, theme: 'notice', life: 10000});
+ toast(data.message, 'danger');
return;
}
$('#edit-modal').modal('show');
diff --git a/view/tpl/field_input.tpl b/view/tpl/field_input.tpl
index 2f9f83ac5..1b548221f 100644
--- a/view/tpl/field_input.tpl
+++ b/view/tpl/field_input.tpl
@@ -1,7 +1,18 @@
<div id="id_{{$field.0}}_wrapper" class="mb-3">
- <label for="id_{{$field.0}}" id="label_{{$field.0}}">{{$field.1}}{{if $field.4}}<sup class="required zuiqmid"> {{$field.4}}</sup>{{/if}}</label>
- <input class="form-control" name="{{$field.0}}" id="id_{{$field.0}}" type="text" value="{{$field.2}}"{{if $field.5}} {{$field.5}}{{/if}}>
- <small id="help_{{$field.0}}" class="form-text text-muted">{{$field.3}}</small>
+ <label for="id_{{$field.0}}" id="label_{{$field.0}}">
+ {{$field.1}}{{if $field.4}}<sup class="required zuiqmid"> {{$field.4}}</sup>{{/if}}
+ </label>
+ <input
+ class="form-control"
+ name="{{$field.0}}"
+ id="id_{{$field.0}}"
+ type="text"
+ value="{{$field.2|escape:'html':'UTF-8':FALSE}}"
+ {{if $field.5}}{{$field.5}}{{/if}}
+ >
+ <small id="help_{{$field.0}}" class="form-text text-muted">
+ {{$field.3}}
+ </small>
</div>
{{*
COMMENTS for this template:
diff --git a/view/tpl/hdr.tpl b/view/tpl/hdr.tpl
index e69de29bb..f4f346fb7 100644
--- a/view/tpl/hdr.tpl
+++ b/view/tpl/hdr.tpl
@@ -0,0 +1 @@
+<div id="toast-container" class="vstack gap-3 m-3 position-fixed top-0 end-0"></div>
diff --git a/view/tpl/help.tpl b/view/tpl/help.tpl
index 5022e7b1b..ba61a43ce 100644
--- a/view/tpl/help.tpl
+++ b/view/tpl/help.tpl
@@ -13,19 +13,19 @@
</div>
</div>
</div>
- <h2>{{$title}}: {{$heading}}</h2>
+ <h2>{{$module->get_page_title()}}</h2>
</div>
<div class="section-content-wrapper" id="doco-content">
<h3 id="doco-top-toc-heading">
<span class="fakelink" onclick="docoTocToggle(); return false;">
<i class="fa fa-fw fa-caret-right fakelink" id="doco-toc-toggle"></i>
- {{$tocHeading}}
+ {{$module->get_toc_heading()}}
</span>
</h3>
<ul id="doco-top-toc" style="margin-bottom: 1.5em; display: none;"></ul>
- {{$content}}
+ {{$module->render_content()}}
</div>
</div>
<script>
- var help_language = '{{$language}}'
+ var help_language = '{{$module->lang["language"]}}'
</script>
diff --git a/view/tpl/install.tpl b/view/tpl/install.tpl
index 5ab722b12..56faa0527 100644
--- a/view/tpl/install.tpl
+++ b/view/tpl/install.tpl
@@ -2,7 +2,9 @@
<div class="jumbotron">
<h1>{{$title}}</h1>
<hr class="my-4">
+ {{if $icon}}
<h2><i class="fa fa-{{$icon}}"></i>&nbsp; {{$pass}}</h2>
+ {{/if}}
</div>
{{if $status}}
@@ -11,5 +13,5 @@
<div class="alert alert-info">{{$text}}</div>
<br>
- {{$what_next}}
+ {{if $what_next}}{{$what_next}}{{/if}}
</div>
diff --git a/view/tpl/invite.tpl b/view/tpl/invite.tpl
index 304816e0b..08c984a5e 100644
--- a/view/tpl/invite.tpl
+++ b/view/tpl/invite.tpl
@@ -76,7 +76,6 @@
' .zai_n { width: 5em; text-align: center; }'+
' #id_zaiexpire_fs { display: inline-block; }'+
' .invites { text-transform: capitalize; }'+
- ' .jGrowl-message { font-family: monospace; }'+
'</style>');
$('#zai-txt').attr('placeholder','{{$personal_pointer}}');
zaitx();
diff --git a/view/tpl/jot-header.tpl b/view/tpl/jot-header.tpl
index ca3cabd61..67ba1824b 100644
--- a/view/tpl/jot-header.tpl
+++ b/view/tpl/jot-header.tpl
@@ -184,7 +184,6 @@ var activeCommentText = '';
}
function jotGetExpiry() {
- //reply = prompt("{{$expirewhen}}", $('#jot-expire').val());
$('#expiryModal').modal('show');
$('#expiry-modal-OKButton').on('click', function() {
reply=$('#expiration-date').val();
@@ -196,7 +195,6 @@ var activeCommentText = '';
}
function jotGetPubDate() {
- //reply = prompt("{{$expirewhen}}", $('#jot-expire').val());
$('#createdModal').modal('show');
$('#created-modal-OKButton').on('click', function() {
reply=$('#created-date').val();
diff --git a/view/tpl/notifications_widget.tpl b/view/tpl/notifications_widget.tpl
index 9ea5ffec6..a9d98dae9 100644
--- a/view/tpl/notifications_widget.tpl
+++ b/view/tpl/notifications_widget.tpl
@@ -337,17 +337,16 @@
sse_setNotificationsStatus();
// notice and info
- $.jGrowl.defaults.closerTemplate = '<div>[ ' + aStr.closeAll + ']</div>';
if(obj.notice) {
$(obj.notice.notifications).each(function() {
- $.jGrowl(this, { sticky: true, theme: 'notice' });
+ toast(this, 'danger');
});
}
if(obj.info) {
$(obj.info.notifications).each(function(){
- $.jGrowl(this, { sticky: false, theme: 'info', life: 10000 });
+ toast(this, 'info');
});
}
diff --git a/view/tpl/nwiki_page_history.tpl b/view/tpl/nwiki_page_history.tpl
deleted file mode 100644
index 6926cca2d..000000000
--- a/view/tpl/nwiki_page_history.tpl
+++ /dev/null
@@ -1,59 +0,0 @@
-<style>
- .diff {
- width:100%;
- word-break: break-all;
- }
-
- .diff td{
- padding:0 0.667em;
- vertical-align:top;
- white-space:pre;
- white-space:pre-wrap;
- font-family:Consolas,'Courier New',Courier,monospace;
- font-size:1.0em;
- line-height:1.333;
- }
-
- .diff span{
- display:block;
- min-height:1.333em;
- margin-top:-1px;
- padding:0 3px;
- }
-
- * html .diff span{
- height:1.333em;
- }
-
- .diff span:first-child{
- margin-top:0;
- }
-
- .diffDeleted span{
- border:1px solid rgb(255,192,192);
- background:rgb(255,224,224);
- }
-
- .diffInserted span{
- border:1px solid rgb(192,255,192);
- background:rgb(224,255,224);
- }
-</style>
-<table class="" style="width: 100%;">
- {{foreach $pageHistory as $commit}}
- <tr class="wikis-index-row"><td>
- <table id="rev-{{$commit.revision}}" onclick="$('#details-{{$commit.revision}}').show()" style="width: 100%;">
- <tr><td width="10%">{{$date_lbl}}</td><td width="70%">{{$commit.date}}</td>
- <td rowspan="3" width="20%" align="right">
- {{if $permsWrite}}
- <button id="revert-{{$commit.revision}}" class="btn btn-danger btn-sm" onclick="wiki_revert_page('{{$commit.revision}}')">{{$revert_btn}}</button>
- <br><br>
- {{/if}}
- <button id="compare-{{$commit.revision}}" class="btn btn-warning btn-sm" onclick="wiki_compare_page('{{$commit.revision}}')">{{$compare_btn}}</button>
- </td></tr>
- <tr><td>{{$name_lbl}}</td><td>{{$commit.name}}</td></tr>
- <tr><td>{{$msg_label}}</td><td>{{$commit.title}}</td></tr>
- </table>
- </td></tr>
- {{/foreach}}
-</table> \ No newline at end of file
diff --git a/view/tpl/oembed_video.tpl b/view/tpl/oembed_video.tpl
index d821ebdb2..f1513a5d5 100644
--- a/view/tpl/oembed_video.tpl
+++ b/view/tpl/oembed_video.tpl
@@ -1,4 +1 @@
-<a href="{{$embedurl}}" onclick="this.innerHTML=Base64.decode('{{$escapedhtml}}'); return false;" style="float:left; margin: 1em; position: relative;">
- <img width="{{$tw}}" height="{{$th}}" src="{{$turl}}" />
- <div style="position: absolute; top: 0px; left: 0px; width: {{$twpx}}; height: {{$thpx}}; background: url('{{$baseurl}}/images/icons/48/play.png') no-repeat center center;"></div>
-</a>
+<a href="{{$embedurl}}" onclick="this.innerHTML=Base64.decode('{{$escapedhtml}}'); return false;" style="float:left; margin-right: 1em; position: relative;"><img width="{{$tw}}" height="{{$th}}" src="{{$turl}}" /></a>
diff --git a/view/tpl/profile_vcard.tpl b/view/tpl/profile_vcard.tpl
index dd372beac..de08cfc19 100644
--- a/view/tpl/profile_vcard.tpl
+++ b/view/tpl/profile_vcard.tpl
@@ -99,8 +99,11 @@
</dl>
{{/if}}
</div>
+ {{/if}}
+ {{if $details}}
<div class="hcard-addon"></div>
{{/if}}
+
</div>
{{if $details}}
{{$chanmenu}}
diff --git a/view/tpl/register.tpl b/view/tpl/register.tpl
index 8e1530eb4..cc2b8e47b 100644
--- a/view/tpl/register.tpl
+++ b/view/tpl/register.tpl
@@ -47,7 +47,7 @@
{{include file="field_input.tpl" field=$email}}
{{include file="field_password.tpl" field=$pass1}}
{{include file="field_password.tpl" field=$pass2}}
- {{if $reg_is}}
+ {{if $register_msg}}
{{include file="field_textarea.tpl" field=$register_msg}}
{{/if}}
{{if $enable_tos}}
diff --git a/view/tpl/siteinfo.tpl b/view/tpl/siteinfo.tpl
index 6cf7da756..08e4790f2 100644
--- a/view/tpl/siteinfo.tpl
+++ b/view/tpl/siteinfo.tpl
@@ -55,7 +55,7 @@
<div>{{$prj_src}}</div>
<br><br>
-<div>{{$prj_transport}} ({{$transport_link}})</div>
+<div>{{$prj_transport}} {{$transport_link}}</div>
{{if $additional_fed}}
<div>{{$additional_text}} {{$additional_fed}}</div>
diff --git a/view/tpl/totp_setup.tpl b/view/tpl/totp_setup.tpl
index 6f995edf1..1f028f6f9 100644
--- a/view/tpl/totp_setup.tpl
+++ b/view/tpl/totp_setup.tpl
@@ -50,12 +50,12 @@
{totp_code: document.getElementById('totp_test').value},
function(data) {
if (data['status']) {
- $.jGrowl('{{$test_pass}}', { sticky: false, theme: 'info', life: 10000 });
+ toast('{{$test_pass}}', 'info');
let e = document.getElementById('mfa-submit-wrapper');
e.classList.remove('d-none');
return;
}
- $.jGrowl('{{$test_fail}}', { sticky: false, theme: 'notice', life: 10000 });
+ toast('{{$test_fail}}', 'danger');
}
);
}
diff --git a/view/tpl/widget.tpl b/view/tpl/widget.tpl
new file mode 100644
index 000000000..4bbbb2df9
--- /dev/null
+++ b/view/tpl/widget.tpl
@@ -0,0 +1,12 @@
+{{* Generic template for widgets.
+ *
+ * To use this template, pass the `$this` object reference of the widget,
+ * and implement the `title()` and `contents()` functions as public methods
+ * on the widget class.
+ *}}
+<div class="widget">
+ {{if $widget->title()}}
+ <h3>{{$widget->title()}}</h3>
+ {{/if}}
+ {{$widget->contents()}}
+</div>