From 8d9b88a8bc96ee6e50554cac6949c2ef287f4476 Mon Sep 17 00:00:00 2001 From: Diogo Cordeiro Date: Mon, 19 Aug 2019 15:35:52 +0100 Subject: [PATCH] [OverwriteThemeBackground] This new plugin will let the admin set a custom background theme independent --- actions/siteadminpanel.php | 72 ++--- locale/en_GB/LC_MESSAGES/statusnet.po | 14 +- locale/statusnet.pot | 216 +++++++------- .../OverwriteThemeBackgroundPlugin.php | 109 +++++++ plugins/OverwriteThemeBackground/README.md | 14 + .../overwritethemebackgroundadminpanel.php | 281 ++++++++++++++++++ .../actions/overwritethemebackgroundcss.php | 155 ++++++++++ scripts/update_po_templates.php | 2 +- 8 files changed, 706 insertions(+), 157 deletions(-) create mode 100644 plugins/OverwriteThemeBackground/OverwriteThemeBackgroundPlugin.php create mode 100755 plugins/OverwriteThemeBackground/README.md create mode 100644 plugins/OverwriteThemeBackground/actions/overwritethemebackgroundadminpanel.php create mode 100644 plugins/OverwriteThemeBackground/actions/overwritethemebackgroundcss.php diff --git a/actions/siteadminpanel.php b/actions/siteadminpanel.php index b45e125189..51b9f6b869 100644 --- a/actions/siteadminpanel.php +++ b/actions/siteadminpanel.php @@ -65,7 +65,7 @@ class SiteadminpanelAction extends AdminPanelAction function getInstructions() { // TRANS: Instructions for site administration panel. - return _('Basic settings for this StatusNet site'); + return _m('Basic settings for this StatusNet site'); } /** @@ -103,7 +103,7 @@ class SiteadminpanelAction extends AdminPanelAction ) ); - $values = array(); + $values = []; foreach ($settings as $section => $parts) { foreach ($parts as $setting) { @@ -138,7 +138,7 @@ class SiteadminpanelAction extends AdminPanelAction if (empty($values['site']['name'])) { // TRANS: Client error displayed trying to save an empty site name. - $this->clientError(_('Site name must have non-zero length.')); + $this->clientError(_m('Site name must have non-zero length.')); } // Validate email @@ -147,24 +147,24 @@ class SiteadminpanelAction extends AdminPanelAction if (empty($values['site']['email'])) { // TRANS: Client error displayed trying to save site settings without a contact address. - $this->clientError(_('You must have a valid contact email address.')); + $this->clientError(_m('You must have a valid contact email address.')); } if (!Validate::email($values['site']['email'], common_config('email', 'check_domain'))) { // TRANS: Client error displayed trying to save site settings without a valid contact address. - $this->clientError(_('Not a valid email address.')); + $this->clientError(_m('Not a valid email address.')); } // Validate logos if (!empty($values['site']['logo']) && !common_valid_http_url($values['site']['logo'])) { // TRANS: Client error displayed when a logo URL is not valid. - $this->clientError(_('Invalid logo URL.')); + $this->clientError(_m('Invalid logo URL.')); } if (!empty($values['site']['ssllogo']) && !common_valid_http_url($values['site']['ssllogo'], true)) { // TRANS: Client error displayed when a SSL logo URL is invalid. - $this->clientError(_('Invalid SSL logo URL.')); + $this->clientError(_m('Invalid SSL logo URL.')); } // Validate timezone @@ -172,7 +172,7 @@ class SiteadminpanelAction extends AdminPanelAction if (is_null($values['site']['timezone']) || !in_array($values['site']['timezone'], DateTimeZone::listIdentifiers())) { // TRANS: Client error displayed trying to save site settings without a timezone. - $this->clientError(_('Timezone not selected.')); + $this->clientError(_m('Timezone not selected.')); } // Validate language @@ -181,21 +181,21 @@ class SiteadminpanelAction extends AdminPanelAction !in_array($values['site']['language'], array_keys(get_nice_language_list()))) { // TRANS: Client error displayed trying to save site settings with an invalid language code. // TRANS: %s is the invalid language code. - $this->clientError(sprintf(_('Unknown language "%s".'), $values['site']['language'])); + $this->clientError(sprintf(_m('Unknown language "%s".'), $values['site']['language'])); } // Validate text limit if (!Validate::number($values['site']['textlimit'], array('min' => 0))) { // TRANS: Client error displayed trying to save site settings with a text limit below 0. - $this->clientError(_('Minimum text limit is 0 (unlimited).')); + $this->clientError(_m('Minimum text limit is 0 (unlimited).')); } // Validate dupe limit if (!Validate::number($values['site']['dupelimit'], array('min' => 1))) { // TRANS: Client error displayed trying to save site settings with a text limit below 1. - $this->clientError(_('Dupe limit must be one or more seconds.')); + $this->clientError(_m('Dupe limit must be one or more seconds.')); } } } @@ -248,27 +248,27 @@ class SiteAdminPanelForm extends AdminForm // TRANS: Field label on site settings panel. $this->input('name', _m('LABEL','Site name'), // TRANS: Field title on site settings panel. - _('The name of your site, like "Yourcompany Microblog".')); + _m('The name of your site, like "Yourcompany Microblog".')); $this->unli(); $this->li(); // TRANS: Field label on site settings panel. - $this->input('broughtby', _('Brought by'), + $this->input('broughtby', _m('Brought by'), // TRANS: Field title on site settings panel. - _('Text used for credits link in footer of each page.')); + _m('Text used for credits link in footer of each page.')); $this->unli(); $this->li(); // TRANS: Field label on site settings panel. - $this->input('broughtbyurl', _('Brought by URL'), + $this->input('broughtbyurl', _m('Brought by URL'), // TRANS: Field title on site settings panel. - _('URL used for credits link in footer of each page.')); + _m('URL used for credits link in footer of each page.')); $this->unli(); $this->li(); // TRANS: Field label on site settings panel. - $this->input('email', _('Email'), + $this->input('email', _m('Email'), // TRANS: Field title on site settings panel. - _('Contact email address for your site.')); + _m('Contact email address for your site.')); $this->unli(); $this->out->elementEnd('ul'); $this->out->elementEnd('fieldset'); @@ -279,7 +279,7 @@ class SiteAdminPanelForm extends AdminForm // TRANS: Fieldset legend on site settings panel. $this->out->element('legend', null, _m('LEGEND','Local')); $this->out->elementStart('ul', 'form_data'); - $timezones = array(); + $timezones = []; foreach (DateTimeZone::listIdentifiers() as $k => $v) { $timezones[$v] = $v; @@ -289,19 +289,19 @@ class SiteAdminPanelForm extends AdminForm $this->li(); // TRANS: Dropdown label on site settings panel. - $this->out->dropdown('timezone', _('Default timezone'), + $this->out->dropdown('timezone', _m('Default timezone'), // TRANS: Dropdown title on site settings panel. - $timezones, _('Default timezone for the site; usually UTC.'), + $timezones, _m('Default timezone for the site; usually UTC.'), true, $this->value('timezone')); $this->unli(); $this->li(); $this->out->dropdown('language', // TRANS: Dropdown label on site settings panel. - _('Default language'), + _m('Default language'), get_nice_language_list(), // TRANS: Dropdown title on site settings panel. - _('The site language when autodetection from browser settings is not available.'), + _m('The site language when autodetection from browser settings is not available.'), false, $this->value('language')); $this->unli(); @@ -315,17 +315,17 @@ class SiteAdminPanelForm extends AdminForm $this->li(); $this->input('textlimit', // TRANS: Field label on site settings panel. - _('Text limit'), + _m('Text limit'), // TRANS: Field title on site settings panel. - _('Maximum number of characters for notices.')); + _m('Maximum number of characters for notices.')); $this->unli(); $this->li(); $this->input('dupelimit', // TRANS: Field label on site settings panel. - _('Dupe limit'), + _m('Dupe limit'), // TRANS: Field title on site settings panel. - _('How long users must wait (in seconds) to post the same thing again.')); + _m('How long users must wait (in seconds) to post the same thing again.')); $this->unli(); $this->out->elementEnd('ul'); $this->out->elementEnd('fieldset'); @@ -333,25 +333,25 @@ class SiteAdminPanelForm extends AdminForm function showLogo() { - $this->out->elementStart('fieldset', array('id' => 'settings_site_logo')); + $this->out->elementStart('fieldset', ['id' => 'settings_site_logo']); // TRANS: Fieldset legend for form to change logo. - $this->out->element('legend', null, _('Logo')); + $this->out->element('legend', null, _m('Logo')); $this->out->elementStart('ul', 'form_data'); $this->li(); $this->input('logo', - // TRANS: Field label for StatusNet site logo. - _('Site logo'), - // TRANS: Title for field label for StatusNet site logo. + // TRANS: Field label for GNU social site logo. + _m('Site logo'), + // TRANS: Title for field label for GNU social site logo. 'Logo for the site (full URL).'); $this->unli(); $this->li(); $this->input('ssllogo', - // TRANS: Field label for SSL StatusNet site logo. - _('SSL logo'), - // TRANS: Title for field label for SSL StatusNet site logo. + // TRANS: Field label for SSL GNU social site logo. + _m('SSL logo'), + // TRANS: Title for field label for SSL GNU social site logo. 'Logo to show on SSL pages (full URL).'); $this->unli(); @@ -373,6 +373,6 @@ class SiteAdminPanelForm extends AdminForm 'submit', null, // TRANS: Button title for saving site settings. - _('Save the site settings.')); + _m('Save the site settings.')); } } diff --git a/locale/en_GB/LC_MESSAGES/statusnet.po b/locale/en_GB/LC_MESSAGES/statusnet.po index 5270f7d533..5dce3d0039 100644 --- a/locale/en_GB/LC_MESSAGES/statusnet.po +++ b/locale/en_GB/LC_MESSAGES/statusnet.po @@ -9,7 +9,7 @@ msgstr "" "Project-Id-Version: GNU social\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-02-02 17:47+0100\n" -"PO-Revision-Date: 2015-03-20 20:03+0000\n" +"PO-Revision-Date: 2019-08-19 18:30+0100\n" "Last-Translator: Luke Hollins \n" "Language-Team: English (United Kingdom) (http://www.transifex.com/gnu-social/gnu-social/language/en_GB/)\n" "MIME-Version: 1.0\n" @@ -6360,17 +6360,17 @@ msgid "How long users must wait (in seconds) to post the same thing again." msgstr "How long users must wait (in seconds) to post the same thing again." #. TRANS: Fieldset legend for form to change logo. -#: actions/siteadminpanel.php:338 +#: actions/siteadminpanel.php:355 msgid "Logo" -msgstr "Logout" +msgstr "Logo" -#. TRANS: Field label for StatusNet site logo. -#: actions/siteadminpanel.php:345 +#. TRANS: Field label for GNU social site logo. +#: actions/siteadminpanel.php:362 msgid "Site logo" msgstr "Site logo" -#. TRANS: Field label for SSL StatusNet site logo. -#: actions/siteadminpanel.php:353 +#. TRANS: Field label for SSL GNU social site logo. +#: actions/siteadminpanel.php:370 msgid "SSL logo" msgstr "SSL logo" diff --git a/locale/statusnet.pot b/locale/statusnet.pot index a6fa316ae2..d479324a5b 100644 --- a/locale/statusnet.pot +++ b/locale/statusnet.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-06-17 15:27+0100\n" +"POT-Creation-Date: 2019-08-19 18:31+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -19,7 +19,7 @@ msgstr "" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #. TRANS: Database error message. -#: index.php:124 +#: public/index.php:135 #, php-format msgid "" "The database for %1$s is not responding correctly, so the site will not work " @@ -29,12 +29,12 @@ msgid "" msgstr "" #. TRANS: Error message. -#: index.php:147 +#: public/index.php:158 msgid "An error occurred." msgstr "" #. TRANS: Error message displayed when there is no StatusNet configuration file. -#: index.php:240 +#: public/index.php:251 #, php-format msgid "" "No configuration file found. Try running the installation program first." @@ -42,7 +42,7 @@ msgstr "" #. TRANS: Error message displayed when trying to perform an undefined action. #. TRANS: Title for password recovery page when an unknown action has been specified. -#: index.php:314 actions/recoverpassword.php:215 +#: public/index.php:325 actions/recoverpassword.php:215 msgid "Unknown action" msgstr "" @@ -1108,8 +1108,8 @@ msgid "Can only delete using the Atom format." msgstr "" #. TRANS: Client error displayed when a user has no rights to delete notices of other users. -#. TRANS: Error message displayed trying to delete a notice that was not made by the current user. -#: actions/apistatusesshow.php:208 actions/deletenotice.php:45 +#. TRANS: Error message displayed when trying to delete a notice that was not made by the current user. +#: actions/apistatusesshow.php:208 actions/deletenotice.php:46 msgid "Cannot delete this notice." msgstr "" @@ -1513,10 +1513,19 @@ msgid "Unknown profile %s." msgstr "" #. TRANS: Client error displayed trying to get a non-existing attachment. -#: actions/attachment.php:69 +#: actions/attachment.php:73 msgid "No such attachment." msgstr "" +#: actions/attachment.php:79 lib/filenotstoredlocallyexception.php:13 +msgid "Requested local URL for a file that is not stored locally." +msgstr "" + +#: actions/attachment_download.php:24 actions/attachment_thumbnail.php:73 +#: actions/attachment_view.php:22 +msgid "No such attachment" +msgstr "" + #. TRANS: Client error displayed trying to get an avatar without providing a nickname. #. TRANS: Client error displayed when requesting a list of blocked users for a group without providing a group nickname. #. TRANS: Client error displayed trying to edit a group while not proving a nickname for the group to edit. @@ -1781,18 +1790,18 @@ msgid "Could not update user IM preferences." msgstr "" #. TRANS: Server error displayed when adding IM preferences fails. -#: actions/confirmaddress.php:148 +#: actions/confirmaddress.php:149 msgid "Could not insert user IM preferences." msgstr "" #. TRANS: Title for the contact address confirmation action. -#: actions/confirmaddress.php:167 +#: actions/confirmaddress.php:168 msgid "Confirm address" msgstr "" #. TRANS: Success message for the contact address confirmation action. #. TRANS: %s can be 'email', 'jabber', or 'sms'. -#: actions/confirmaddress.php:180 +#: actions/confirmaddress.php:181 #, php-format msgid "The address \"%s\" has been confirmed for your account." msgstr "" @@ -1985,14 +1994,14 @@ msgid "Delete this group." msgstr "" #. TRANS: Instructions for deleting a notice. -#: actions/deletenotice.php:54 +#: actions/deletenotice.php:55 msgid "" "You are about to permanently delete a notice. Once this is done, it cannot " "be undone." msgstr "" #. TRANS: Page title when deleting a notice. -#: actions/deletenotice.php:61 +#: actions/deletenotice.php:62 msgid "Delete notice" msgstr "" @@ -2548,16 +2557,6 @@ msgstr "" msgid "A selection of some great users on %s." msgstr "" -#. TRANS: Client error displayed when requesting a non-existent file. -#: actions/getfile.php:73 -msgid "No such file." -msgstr "" - -#. TRANS: Client error displayed when requesting a file without having read access to it. -#: actions/getfile.php:77 -msgid "Cannot read file." -msgstr "" - #. TRANS: Client error displayed when trying to assign an invalid role to a user. #. TRANS: Client error displayed when trying to revoke an invalid role. #: actions/grantrole.php:61 actions/revokerole.php:61 @@ -2672,7 +2671,7 @@ msgstr "" #. TRANS: Title of form for deleting a user. #. TRANS: Link text in notice list item to delete a notice. #: actions/grouplogo.php:201 lib/deleteuserform.php:64 -#: lib/noticelistitem.php:630 +#: lib/noticelistitem.php:631 msgid "Delete" msgstr "" @@ -4278,7 +4277,7 @@ msgstr "" #. TRANS: Form input field label. #. TRANS: Field label on group edit form; points to "more info" for a group. #: actions/profilesettings.php:120 actions/register.php:440 -#: classes/Profile.php:943 lib/applicationeditform.php:236 +#: classes/Profile.php:942 lib/applicationeditform.php:236 #: lib/groupeditform.php:163 msgid "Homepage" msgstr "" @@ -4548,7 +4547,7 @@ msgstr "" #. TRANS: Title for password recovery page in email sent mode. #. TRANS: Subject for password recovery e-mail. -#: actions/recoverpassword.php:210 classes/User.php:967 +#: actions/recoverpassword.php:210 classes/User.php:966 msgid "Password recovery requested" msgstr "" @@ -4861,27 +4860,27 @@ msgid "" msgstr "" #. TRANS: Client exception. -#: actions/restoreaccount.php:141 lib/mediafile.php:341 +#: actions/restoreaccount.php:141 lib/mediafile.php:349 msgid "The uploaded file was only partially uploaded." msgstr "" #. TRANS: Client exception thrown when a temporary folder is not present to store a file upload. -#: actions/restoreaccount.php:148 lib/mediafile.php:347 +#: actions/restoreaccount.php:148 lib/mediafile.php:355 msgid "Missing a temporary folder." msgstr "" #. TRANS: Client exception thrown when writing to disk is not possible during a file upload operation. -#: actions/restoreaccount.php:151 lib/mediafile.php:350 +#: actions/restoreaccount.php:151 lib/mediafile.php:358 msgid "Failed to write file to disk." msgstr "" #. TRANS: Client exception thrown when a file upload operation has been stopped by an extension. -#: actions/restoreaccount.php:154 lib/mediafile.php:353 +#: actions/restoreaccount.php:154 lib/mediafile.php:361 msgid "File upload stopped by extension." msgstr "" #. TRANS: Client exception thrown when a file upload operation has failed with an unknown reason. -#: actions/restoreaccount.php:159 lib/mediafile.php:357 +#: actions/restoreaccount.php:159 lib/mediafile.php:365 msgid "System error uploading file." msgstr "" @@ -5536,12 +5535,12 @@ msgstr "" msgid "Logo" msgstr "" -#. TRANS: Field label for StatusNet site logo. +#. TRANS: Field label for GNU social site logo. #: actions/siteadminpanel.php:345 msgid "Site logo" msgstr "" -#. TRANS: Field label for SSL StatusNet site logo. +#. TRANS: Field label for SSL GNU social site logo. #: actions/siteadminpanel.php:353 msgid "SSL logo" msgstr "" @@ -6379,14 +6378,14 @@ msgstr "" #. TRANS: Message used to be inserted as %2$s in the text "No file may #. TRANS: be larger than %1$d byte and the file you sent was %2$s.". #. TRANS: %1$d is the number of bytes of an uploaded file. -#: classes/File.php:243 +#: classes/File.php:242 #, php-format msgid "%1$d byte" msgid_plural "%1$d bytes" msgstr[0] "" msgstr[1] "" -#: classes/File.php:253 +#: classes/File.php:252 #, php-format msgid "" "No file may be larger than %1$d byte and the file you sent was %2$s. Try to " @@ -6397,24 +6396,28 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: classes/File.php:275 +#: classes/File.php:274 #, php-format msgid "A file this large would exceed your user quota of %d byte." msgid_plural "A file this large would exceed your user quota of %d bytes." msgstr[0] "" msgstr[1] "" -#: classes/File.php:293 +#: classes/File.php:292 #, php-format msgid "A file this large would exceed your monthly quota of %d byte." msgid_plural "A file this large would exceed your monthly quota of %d bytes." msgstr[0] "" msgstr[1] "" -#: classes/File.php:367 +#: classes/File.php:387 lib/mediafile.php:256 msgid "Blacklisted file extension." msgstr "" +#: classes/File.php:648 +msgid "Thumbnail is not an image." +msgstr "" + #. TRANS: Exception thrown providing an invalid profile ID. #. TRANS: %s is the invalid profile ID. #: classes/Group_join_queue.php:58 classes/Group_member.php:111 @@ -6457,7 +6460,7 @@ msgid "%1$s has joined group %2$s." msgstr "" #. TRANS: Server exception thrown when updating a local group fails. -#: classes/Local_group.php:72 +#: classes/Local_group.php:71 msgid "Could not update local group." msgstr "" @@ -6576,7 +6579,7 @@ msgstr "" #. TRANS: The "fancy name": Full name of a profile or group (%1$s) followed by some URI (%2$s) in parentheses. #. TRANS: Full name of a profile or group followed by nickname in parens -#: classes/Profile.php:247 classes/User_group.php:347 +#: classes/Profile.php:246 classes/User_group.php:347 #, php-format msgctxt "FANCYNAME" msgid "%1$s (%2$s)" @@ -6584,43 +6587,43 @@ msgstr "" #. TRANS: Exception thrown when trying to revoke an existing role for a user that does not exist. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:1172 +#: classes/Profile.php:1171 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; does not exist." msgstr "" #. TRANS: Exception thrown when trying to revoke a role for a user with a failing database query. #. TRANS: %1$s is the role name, %2$s is the user ID (number). -#: classes/Profile.php:1181 +#: classes/Profile.php:1180 #, php-format msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error." msgstr "" -#: classes/Profile.php:1225 +#: classes/Profile.php:1224 msgid "You cannot silence users on this site." msgstr "" -#: classes/Profile.php:1229 +#: classes/Profile.php:1228 msgid "You cannot silence other privileged users." msgstr "" #. TRANS: Client error displayed trying to silence an already silenced user. -#: classes/Profile.php:1233 +#: classes/Profile.php:1232 msgid "User is already silenced." msgstr "" #. TRANS: Client error displayed trying to unsilence a user when the user does not have the right. -#: classes/Profile.php:1250 +#: classes/Profile.php:1249 msgid "You cannot unsilence users on this site." msgstr "" #. TRANS: Client error displayed trying to unsilence a user when the target user has not been silenced. -#: classes/Profile.php:1254 +#: classes/Profile.php:1253 msgid "User is not silenced." msgstr "" #. TRANS: Exception thrown when trying view "repeated to me". -#: classes/Profile.php:1647 +#: classes/Profile.php:1646 msgid "Not implemented since inbox change." msgstr "" @@ -6733,78 +6736,78 @@ msgid "This subscription request is already in progress." msgstr "" #. TRANS: Profile data could not be inserted for some reason. -#: classes/User.php:290 +#: classes/User.php:289 msgid "Could not insert profile data for new user." msgstr "" #. TRANS: User data could not be inserted for some reason. -#: classes/User.php:316 +#: classes/User.php:315 msgid "Could not insert user data for new user." msgstr "" #. TRANS: Subscription data could not be inserted for some reason. -#: classes/User.php:332 +#: classes/User.php:331 msgid "Could not insert subscription data for new user." msgstr "" #. TRANS: Email confirmation data could not be inserted for some reason. -#: classes/User.php:356 +#: classes/User.php:355 msgid "Could not insert email confirmation data for new user." msgstr "" #. TRANS: Notice given on user registration. #. TRANS: %1$s is the sitename, $2$s is the registering user's nickname. -#: classes/User.php:404 +#: classes/User.php:403 #, php-format msgid "Welcome to %1$s, @%2$s!" msgstr "" -#: classes/User.php:745 +#: classes/User.php:744 msgid "No site owner configured." msgstr "" #. TRANS: Server exception. -#: classes/User.php:762 +#: classes/User.php:761 msgid "Single-user mode code called when not enabled." msgstr "" #. TRANS: Information on password recovery form if no known e-mail address was specified. -#: classes/User.php:905 +#: classes/User.php:904 msgid "No user with that email address exists here." msgstr "" #. TRANS: Information on password recovery form if no known username was specified. -#: classes/User.php:912 +#: classes/User.php:911 msgid "No user with that nickname exists here." msgstr "" #. TRANS: Client error displayed on password recovery form if a user does not have a registered e-mail address. -#: classes/User.php:930 +#: classes/User.php:929 msgid "No registered email address for that user." msgstr "" #. TRANS: Server error displayed if e-mail address confirmation fails in the database on the password recovery form. -#: classes/User.php:944 +#: classes/User.php:943 msgid "Error saving address confirmation." msgstr "" -#: classes/User.php:1016 +#: classes/User.php:1015 msgid "Register" msgstr "" -#: classes/User.php:1018 +#: classes/User.php:1017 #, php-format msgid "%1$s joined %2$s." msgstr "" #. TRANS: Form validation error on page where to change password. -#: classes/User.php:1041 +#: classes/User.php:1040 msgid "Error saving user; invalid." msgstr "" #. TRANS: Server error displayed on page where to change password when password change #. TRANS: could not be made because of a server error. -#: classes/User.php:1048 +#: classes/User.php:1047 msgid "Cannot save new password." msgstr "" @@ -7456,13 +7459,13 @@ msgstr "" msgid "Download link" msgstr "" -#. TRANS: Message for inline attachments list in notices when the author has been silenced. -#: lib/attachmentlist.php:90 -msgid "Attachments are hidden because this profile has been silenced." +#: lib/attachmentlist.php:80 lib/httpclient.php:417 lib/mediafile.php:247 +#: lib/mediafile.php:635 lib/mediafile.php:653 +msgid "Untitled attachment" msgstr "" -#: lib/attachmentlistitem.php:66 -msgid "Untitled attachment" +#: lib/attachmentlist.php:91 +msgid "Attachments are hidden because this profile has been silenced." msgstr "" #. TRANS: Title. @@ -8004,24 +8007,24 @@ msgid "remind a user to update." msgstr "" #. TRANS: Error message displayed when no configuration file was found for a StatusNet installation. -#: lib/common.php:32 +#: lib/common.php:35 msgid "No configuration file found." msgstr "" #. TRANS: Error message displayed when no configuration file was found for a StatusNet installation. #. TRANS: Is followed by a list of directories (separated by HTML breaks). -#: lib/common.php:35 +#: lib/common.php:38 msgid "I looked for configuration files in the following places:" msgstr "" #. TRANS: Error message displayed when no configuration file was found for a StatusNet installation. -#: lib/common.php:38 +#: lib/common.php:41 msgid "You may wish to run the installer to fix this." msgstr "" #. TRANS: Error message displayed when no configuration file was found for a StatusNet installation. #. TRANS: The text is link text that leads to the installer page. -#: lib/common.php:42 +#: lib/common.php:45 msgid "Go to the installer." msgstr "" @@ -8144,10 +8147,6 @@ msgstr "" msgid "File not found in filesystem." msgstr "" -#: lib/filenotstoredlocallyexception.php:13 -msgid "Requested local URL for a file that is not stored locally." -msgstr "" - #. TRANS: List element on gallery action page to show all tags. #: lib/galleryaction.php:68 msgctxt "TAGS" @@ -8336,26 +8335,17 @@ msgid "Could not GET URL %s." msgstr "" #. TRANS: Exception thrown when trying to upload an unsupported image file format. -#: lib/imagefile.php:70 +#: lib/imagefile.php:84 msgid "Unsupported image format." msgstr "" -#: lib/imagefile.php:118 -msgid "File without filename could not get a thumbnail source." -msgstr "" - -#: lib/imagefile.php:133 +#: lib/imagefile.php:149 msgid "Unsupported media format." msgstr "" -#. TRANS: Exception thrown during resize when image has been registered as present, but is no longer there. -#: lib/imagefile.php:256 -msgid "Lost our file." -msgstr "" - #. TRANS: Exception thrown when trying to resize an unknown file type. #. TRANS: Exception thrown when trying resize an unknown file type. -#: lib/imagefile.php:334 lib/imagefile.php:393 +#: lib/imagefile.php:337 lib/imagefile.php:370 msgid "Unknown file type" msgstr "" @@ -8764,12 +8754,12 @@ msgid "" msgstr "" #. TRANS: Client exception thrown when a database error was thrown during a file upload operation. -#: lib/mediafile.php:189 lib/mediafile.php:245 +#: lib/mediafile.php:184 msgid "There was a database error while saving your file. Please try again." msgstr "" #. TRANS: Number of megabytes. %d is the number. -#: lib/mediafile.php:260 +#: lib/mediafile.php:220 #, php-format msgid "%dMB" msgid_plural "%dMB" @@ -8777,7 +8767,7 @@ msgstr[0] "" msgstr[1] "" #. TRANS: Number of kilobytes. %d is the number. -#: lib/mediafile.php:264 +#: lib/mediafile.php:224 #, php-format msgid "%dkB" msgid_plural "%dkB" @@ -8785,14 +8775,14 @@ msgstr[0] "" msgstr[1] "" #. TRANS: Number of bytes. %d is the number. -#: lib/mediafile.php:267 +#: lib/mediafile.php:227 #, php-format msgid "%dB" msgid_plural "%dB" msgstr[0] "" msgstr[1] "" -#: lib/mediafile.php:335 +#: lib/mediafile.php:343 #, php-format msgid "That file is too big. The maximum file size is %s." msgstr "" @@ -8802,18 +8792,18 @@ msgstr "" #. UX: too specific #. TRANS: Client exception thrown when a file upload operation fails because the file could #. TRANS: not be moved from the temporary folder to the permanent file location. -#: lib/mediafile.php:390 lib/mediafile.php:435 lib/mediafile.php:459 +#: lib/mediafile.php:410 lib/mediafile.php:446 lib/mediafile.php:470 msgid "File could not be moved to destination directory." msgstr "" -#: lib/mediafile.php:564 +#: lib/mediafile.php:575 msgid "Could not determine file's MIME type." msgstr "" #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %1$s is the file type that was denied, %2$s is the application part of #. TRANS: the MIME type that was denied. -#: lib/mediafile.php:606 +#: lib/mediafile.php:617 #, php-format msgid "" "\"%1$s\" is not a supported file type on this server. Try using another %2$s " @@ -8822,7 +8812,7 @@ msgstr "" #. TRANS: Client exception thrown trying to upload a forbidden MIME type. #. TRANS: %s is the file type that was denied. -#: lib/mediafile.php:611 +#: lib/mediafile.php:622 #, php-format msgid "\"%s\" is not a supported file type on this server." msgstr "" @@ -9042,7 +9032,7 @@ msgid "Reply" msgstr "" #. TRANS: Link title in notice list item to delete a notice. -#: lib/noticelistitem.php:628 +#: lib/noticelistitem.php:629 msgid "Delete this notice from the timeline." msgstr "" @@ -9284,7 +9274,7 @@ msgid "Replies" msgstr "" #. TRANS: Displayed as version information for a plugin if no version information was found. -#: lib/plugin.php:190 +#: lib/plugin.php:174 msgid "Unknown" msgstr "" @@ -9443,7 +9433,7 @@ msgid "Revoke the \"%s\" role from this user" msgstr "" #. TRANS: Client error on action trying to visit a non-existing page. -#: lib/router.php:1106 +#: lib/router.php:1117 msgid "Page not found." msgstr "" @@ -9833,7 +9823,7 @@ msgid "" msgstr "" #. TRANS: Server exception displayed if a theme name was invalid. -#: lib/theme.php:79 +#: lib/theme.php:80 msgid "Invalid theme name." msgstr "" @@ -10073,17 +10063,17 @@ msgid "Not allowed to log in." msgstr "" #. TRANS: Used in notices to indicate when the notice was made compared to now. -#: lib/util.php:1541 +#: lib/util.php:1540 msgid "a few seconds ago" msgstr "" #. TRANS: Used in notices to indicate when the notice was made compared to now. -#: lib/util.php:1544 +#: lib/util.php:1543 msgid "about a minute ago" msgstr "" #. TRANS: Used in notices to indicate when the notice was made compared to now. -#: lib/util.php:1548 +#: lib/util.php:1547 #, php-format msgid "about one minute ago" msgid_plural "about %d minutes ago" @@ -10091,12 +10081,12 @@ msgstr[0] "" msgstr[1] "" #. TRANS: Used in notices to indicate when the notice was made compared to now. -#: lib/util.php:1551 +#: lib/util.php:1550 msgid "about an hour ago" msgstr "" #. TRANS: Used in notices to indicate when the notice was made compared to now. -#: lib/util.php:1555 +#: lib/util.php:1554 #, php-format msgid "about one hour ago" msgid_plural "about %d hours ago" @@ -10104,12 +10094,12 @@ msgstr[0] "" msgstr[1] "" #. TRANS: Used in notices to indicate when the notice was made compared to now. -#: lib/util.php:1558 +#: lib/util.php:1557 msgid "about a day ago" msgstr "" #. TRANS: Used in notices to indicate when the notice was made compared to now. -#: lib/util.php:1562 +#: lib/util.php:1561 #, php-format msgid "about one day ago" msgid_plural "about %d days ago" @@ -10117,12 +10107,12 @@ msgstr[0] "" msgstr[1] "" #. TRANS: Used in notices to indicate when the notice was made compared to now. -#: lib/util.php:1565 +#: lib/util.php:1564 msgid "about a month ago" msgstr "" #. TRANS: Used in notices to indicate when the notice was made compared to now. -#: lib/util.php:1569 +#: lib/util.php:1568 #, php-format msgid "about one month ago" msgid_plural "about %d months ago" @@ -10130,12 +10120,12 @@ msgstr[0] "" msgstr[1] "" #. TRANS: Used in notices to indicate when the notice was made compared to now. -#: lib/util.php:1572 +#: lib/util.php:1571 msgid "about a year ago" msgstr "" #. TRANS: Human-readable full date-time specification (formatting on http://php.net/date) -#: lib/util.php:1592 +#: lib/util.php:1591 msgid "l, d-M-Y H:i:s T" msgstr "" @@ -10147,7 +10137,7 @@ msgid "%s is not a valid color! Use 3 or 6 hex characters." msgstr "" #. TRANS: Commandline script output. %s is the filename that contains a backup for a user. -#: scripts/restoreuser.php:61 +#: scripts/restoreuser.php:62 #, php-format msgid "Getting backup from file '%s'." msgstr "" diff --git a/plugins/OverwriteThemeBackground/OverwriteThemeBackgroundPlugin.php b/plugins/OverwriteThemeBackground/OverwriteThemeBackgroundPlugin.php new file mode 100644 index 0000000000..db870415aa --- /dev/null +++ b/plugins/OverwriteThemeBackground/OverwriteThemeBackgroundPlugin.php @@ -0,0 +1,109 @@ +. + +defined('GNUSOCIAL') || die(); + +/** + * Allows administrators to overwrite his GNU social instance's background + * + * @category Plugin + * @author Diogo Cordeiro + * @copyright 2019 Free Software Foundation, Inc http://www.fsf.org + * @license https://www.gnu.org/licenses/agpl.html GNU AGPL v3 or later + */ + +/** + * Handle plugin's events + * + * @copyright 2019 Free Software Foundation, Inc http://www.fsf.org + * @license https://www.gnu.org/licenses/agpl.html GNU AGPL v3 or later + */ +class OverwriteThemeBackgroundPlugin extends Plugin +{ + const PLUGIN_VERSION = '0.1.0'; + + /** + * Route urls + * + * @param URLMapper $m + * @return bool + * @throws Exception + */ + public function onRouterInitialized(URLMapper $m): bool + { + $m->connect('plugins/OverwriteThemeBackground/css/my_custom_theme_bg', + ['action' => 'OverwriteThemeBackgroundCSS']); + $m->connect('admin/overwritethemebackground', + ['action' => 'overwritethemebackgroundAdminPanel']); + return true; + } + + /** + * Plugin meta-data + * + * @param array $versions + * @return bool hook true + * @throws Exception + */ + public function onPluginVersion(array &$versions): bool + { + $versions[] = [ + 'name' => 'Custom Background', + 'version' => self::PLUGIN_VERSION, + 'author' => 'Diogo Cordeiro', + 'homepage' => 'https://www.diogo.site/projects/GNU-social/plugins/OverwriteThemeBackgroundPlugin', + // TRANS: Plugin description for OverwriteThemeBackground plugin. + 'rawdescription' => _m('A friendly plugin for overwriting your theme\'s background style.') + ]; + return true; + } + + /** + * Add our custom background css after theme's + * + * @param Action $action + * @return bool hook true + */ + public function onEndShowStyles(Action $action): bool + { + $action->cssLink(common_local_url('OverwriteThemeBackgroundCSS')); + return true; + } + + /** + * Add a menu option for this plugin in Admin's UI + * + * @param AdminPanelNav $nav + * @return bool hook true + * @throws Exception + */ + public function onEndAdminPanelNav(AdminPanelNav $nav): bool + { + if (AdminPanelAction::canAdmin('profilefields')) { + $action_name = $nav->action->trimmed('action'); + + $nav->out->menuItem( + common_local_url('overwritethemebackgroundAdminPanel'), + _m('Overwrite Theme Background'), + _m('Customize your theme\'s background easily'), + $action_name == 'overwritethemebackgroundAdminPanel', + 'nav_overwritethemebackground_admin_panel' + ); + } + + return true; + } +} diff --git a/plugins/OverwriteThemeBackground/README.md b/plugins/OverwriteThemeBackground/README.md new file mode 100755 index 0000000000..ba59c81e30 --- /dev/null +++ b/plugins/OverwriteThemeBackground/README.md @@ -0,0 +1,14 @@ +Allows to overwrite your theme's background style + +Installation +============ +add + + addPlugin('OverwriteThemeBackground'); + $config['admin']['panels'][] = 'overwritethemebackground'; + +to the bottom of your config.php + +Settings +======== +none diff --git a/plugins/OverwriteThemeBackground/actions/overwritethemebackgroundadminpanel.php b/plugins/OverwriteThemeBackground/actions/overwritethemebackgroundadminpanel.php new file mode 100644 index 0000000000..558dc0f6ec --- /dev/null +++ b/plugins/OverwriteThemeBackground/actions/overwritethemebackgroundadminpanel.php @@ -0,0 +1,281 @@ +. + +/** + * UI to overwrite his GNU social instance's background + * + * @category Plugin + * @package GNUsocial + * @author Diogo Cordeiro + * @copyright 2019 Free Software Foundation, Inc http://www.fsf.org + * @license https://www.gnu.org/licenses/agpl.html GNU AGPL v3 or later + */ + +defined('GNUSOCIAL') || die(); + +/** + * Apply/Store the custom background preferences + * + * @copyright 2019 Free Software Foundation, Inc http://www.fsf.org + * @license https://www.gnu.org/licenses/agpl.html GNU AGPL v3 or later + */ +class OverwriteThemeBackgroundAdminPanelAction extends AdminPanelAction +{ + /** + * Title of the page + * + * @return string Title of the page + */ + public function title(): string + { + return _m('Overwrite Theme Background'); + } + + /** + * Instructions for use + * + * @return string instructions for use + */ + public function getInstructions(): string + { + return _m('Customize your theme\'s background easily'); + } + + /** + * Show the site admin panel form + * + * @return void + */ + function showForm() + { + $form = new OverwriteThemeBackgroundAdminPanelForm($this); + $form->show(); + return; + } + + /** + * Save settings from the form + * + * @return void + */ + function saveSettings() + { + static $settings = [ + 'overwritethemebackground' => [ + 'background-color', + 'background-image', + 'sslbackground-image', + 'background-repeat', + 'background-attachment', + 'background-position' + ] + ]; + + $values = []; + + foreach ($settings as $section => $parts) { + foreach ($parts as $setting) { + $values[$section][$setting] = $this->trimmed($setting); + } + } + + // This throws an exception on validation errors + + $this->validate($values); + + // assert(all values are valid); + + $config = new Config(); + + $config->query('BEGIN'); + + foreach ($settings as $section => $parts) { + foreach ($parts as $setting) { + Config::save($section, $setting, $values[$section][$setting]); + } + } + + $config->query('COMMIT'); + + return; + } + + /** + * Validate form values + * + * @param $values + * @throws ClientException + */ + function validate(&$values) + { + // Validate background + if (!empty($values['overwritethemebackground']['background-image']) && + !common_valid_http_url($values['overwritethemebackground']['background-image'])) { + // TRANS: Client error displayed when a background URL is not valid. + $this->clientError(_m('Invalid background URL.')); + } + + if (!empty($values['overwritethemebackground']['sslbackground-image']) && + !common_valid_http_url($values['overwritethemebackground']['sslbackground-image'], true)) { + // TRANS: Client error displayed when a SSL background URL is invalid. + $this->clientError(_m('Invalid SSL background URL.')); + } + } +} + +/** + * Friendly UI for setting the custom background preferences + * + * @copyright 2019 Free Software Foundation, Inc http://www.fsf.org + * @license https://www.gnu.org/licenses/agpl.html GNU AGPL v3 or later + */ +class OverwriteThemeBackgroundAdminPanelForm extends AdminForm +{ + /** + * ID of the form + * + * @return int ID of the form + */ + function id() + { + return 'form_site_admin_panel'; + } + + /** + * class of the form + * + * @return string class of the form + */ + function formClass() + { + return 'form_settings'; + } + + /** + * Action of the form + * + * @return string URL of the action + */ + function action() + { + return common_local_url('overwritethemebackgroundAdminPanel'); + } + + /** + * Data elements of the form + * + * @return void + */ + function formData() + { + $this->out->elementStart('fieldset', ['id' => 'settings_site_background']); + // TRANS: Fieldset legend for form to change background. + $this->out->element('legend', null, _m('Background')); + $this->out->elementStart('ul', 'form_data'); + + /* Background colour */ + + $this->li(); + $this->input('background-color', + // TRANS: Field label for GNU social site background. + _m('Site background color'), + // TRANS: Title for field label for GNU social site background. + 'Background color for the site (hexadecimal with #).', + 'overwritethemebackground'); + $this->unli(); + + /* Background image */ + + $this->li(); + $this->input('background-image', + // TRANS: Field label for GNU social site background. + _m('Site background'), + // TRANS: Title for field label for GNU social site background. + 'Background for the site (full URL).', + 'overwritethemebackground'); + $this->unli(); + + $this->li(); + $this->input('sslbackground-image', + // TRANS: Field label for SSL GNU social site background. + _m('SSL background'), + // TRANS: Title for field label for SSL GNU social site background. + 'Background to show on SSL pages (full URL).', + 'overwritethemebackground'); + $this->unli(); + + /* Background repeat */ + + $this->li(); + // TRANS: Dropdown label on site settings panel. + $this->out->dropdown('background-repeat', _m('Background repeat'), + // TRANS: Dropdown title on site settings panel. + ['Repeat horizontally and vertically', 'Repeat Horizontally', 'Repeat Vertically', 'Don\'t repeat'], _m('repeat horizontally and/or vertically'), + false, common_config('overwritethemebackground', 'background-repeat') ?? 'repeat'); + $this->unli(); + + /* Background attachment */ + + $this->li(); + // TRANS: Dropdown label on site settings panel. + $this->out->dropdown('background-attachment', _m('Background attachment'), + // TRANS: Dropdown title on site settings panel. + ['Scroll with page', 'Stay fixed'], _m('Whether the background image should scroll or be fixed (will not scroll with the rest of the page)'), + false, common_config('overwritethemebackground', 'background-attachment') ?? 'scroll'); + $this->unli(); + + /* Background position */ + + $background_position_options = [ + 'initial', + 'left top', + 'left center', + 'left bottom', + 'right top', + 'right center', + 'right bottom', + 'center top', + 'center center', + 'center bottom' + ]; + $this->li(); + // TRANS: Dropdown label on site settings panel. + $this->out->dropdown('background-position', _m('Background position'), + // TRANS: Dropdown title on site settings panel. + $background_position_options, _m('Sets the starting position of a background image'), + false, common_config('overwritethemebackground', 'background-attachment') ?? 'initial'); + $this->unli(); + + $this->out->elementEnd('ul'); + $this->out->elementEnd('fieldset'); + } + + /** + * Action elements + * + * @return void + */ + function formActions() + { + $this->out->submit('submit', + // TRANS: Button text for saving site settings. + _m('BUTTON', 'Save'), + 'submit', + null, + // TRANS: Button title for saving site settings. + _m('Save the site settings.')); + } +} diff --git a/plugins/OverwriteThemeBackground/actions/overwritethemebackgroundcss.php b/plugins/OverwriteThemeBackground/actions/overwritethemebackgroundcss.php new file mode 100644 index 0000000000..1615bdeb84 --- /dev/null +++ b/plugins/OverwriteThemeBackground/actions/overwritethemebackgroundcss.php @@ -0,0 +1,155 @@ +. + +/** + * Action with the CSS preferences + * + * @category Plugin + * @package GNUsocial + * @author Diogo Cordeiro + * @copyright 2019 Free Software Foundation, Inc http://www.fsf.org + * @license https://www.gnu.org/licenses/agpl.html GNU AGPL v3 or later + */ + +defined('GNUSOCIAL') || die(); + +/** + * Route with CSS that will come after theme's css in order to overwrite it with sysadmin's custom background preferences + * + * @copyright 2019 Free Software Foundation, Inc http://www.fsf.org + * @license https://www.gnu.org/licenses/agpl.html GNU AGPL v3 or later + */ +class overwritethemebackgroundcssAction extends Action +{ + protected $needLogin = false; + protected $canPost = false; + // Eventual custom background sysadmin may have set + private $_theme_background_url = false; + private $_background_colour = false; + private $_background_colour_important = false; + + /** + * Fills _theme_background_url if possible. + * + * @param array $args $_REQUEST array + * @return bool true + * @throws ClientException + */ + protected function prepare(array $args = []): bool + { + parent::prepare($args); + + if (GNUsocial::isHTTPS()) { + $background_url = common_config('overwritethemebackground', 'sslbackground-image'); + if (empty($background_url)) { + // if background is an uploaded file, try to fall back to HTTPS file URL + $http_url = common_config('overwritethemebackground', 'background-image'); + if (!empty($http_url)) { + try { + $f = File::getByUrl($http_url); + if (!empty($f->filename)) { + // this will handle the HTTPS case + $background_url = File::url($f->filename); + } + } catch (NoResultException $e) { + // no match + } + } + } + } else { + $background_url = common_config('overwritethemebackground', 'background-image'); + } + + $this->_background_colour = common_config('overwritethemebackground', 'background-color'); + if (empty($background_url)) { + if (!empty($this->_background_colour)) { + $this->_background_colour_important = true; // We want the colour to override theme's default background + return true; + } + /*if (file_exists(Theme::file('images/bg.png'))) { + // This should handle the HTTPS case internally + $background_url = Theme::path('images/bg.png'); + } + + if (!empty($background_url)) { + $this->_theme_background_url = $background_url; + }*/ + } else { + $this->_theme_background_url = $background_url; + } + + return true; + } + + /** + * Is this action read-only? + * + * @param array $args other arguments dummy + * @return bool true + */ + public function isReadOnly($args): bool + { + return true; + } + + /** + * Print the CSS + */ + public function handle(): void + { + $background_position_options = [ + 'initial', + 'left top', + 'left center', + 'left bottom', + 'right top', + 'right center', + 'right bottom', + 'center top', + 'center center', + 'center bottom' + ]; + header("Content-type: text/css", true); + $background_color = $this->_background_colour; + $background_image = $this->_theme_background_url; + $background_repeat = ['repeat', 'repeat-x', 'repeat-y', 'no-repeat'][common_config('overwritethemebackground', 'background-repeat')]; + $background_position = $background_position_options[common_config('overwritethemebackground', 'background-position')]; + $background_attachment = ['scroll', 'fixed'][common_config('overwritethemebackground', 'background-attachment')]; + $css = 'body {'; + if ($background_color) { + if (!$this->_background_colour_important) { + $css .= 'background-color: ' . $background_color . ';'; + } else { + $css .= 'background: ' . $background_color . ' !important;'; + } + } + if ($background_image) { + $css .= 'background-image: url(' . $background_image . ');'; + } + if ($background_repeat) { + $css .= 'background-repeat: ' . $background_repeat . ';'; + } + if ($background_position) { + $css .= 'background-position: ' . $background_position . ';'; + } + if ($background_attachment) { + $css .= 'background-attachment: ' . $background_attachment . ';'; + } + $css .= '}'; + + echo $css; + } +} diff --git a/scripts/update_po_templates.php b/scripts/update_po_templates.php index 0671f0d72a..b3670bc3db 100755 --- a/scripts/update_po_templates.php +++ b/scripts/update_po_templates.php @@ -44,7 +44,7 @@ xgettext \ --keyword="_m:1c,2,3,4t" \ --keyword="pgettext:1c,2" \ --keyword="npgettext:1c,2,3" \ - index.php \ + public/index.php \ actions/*.php \ classes/*.php \ lib/*.php \